From 7b7861c40460be44d0864b0d770f82c0cacf2d17 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Fri, 23 Jan 2026 11:08:20 +0530 Subject: [PATCH 001/343] Add command to export copilot auth --- workspaces/mi/mi-extension/package.json | 5 + .../mi/mi-extension/src/ai-panel/activate.ts | 66 +++++- .../mi-extension/src/ai-panel/configUtils.ts | 201 ++++++++++++++++++ .../src/ai-panel/copilot/connection.ts | 2 +- .../mi/mi-extension/src/constants/index.ts | 1 + 5 files changed, 272 insertions(+), 3 deletions(-) create mode 100644 workspaces/mi/mi-extension/src/ai-panel/configUtils.ts diff --git a/workspaces/mi/mi-extension/package.json b/workspaces/mi/mi-extension/package.json index 8c6d67f7a88..63b72a90e10 100644 --- a/workspaces/mi/mi-extension/package.json +++ b/workspaces/mi/mi-extension/package.json @@ -278,6 +278,11 @@ "category": "MI", "icon": "$(wand)" }, + { + "command": "MI.configureDefaultModelProvider", + "title": "Configure Default WSO2 Model Provider", + "category": "MI" + }, { "command": "MI.Open-runtime-service-view", "title": "Open Runtime Services Panel", diff --git a/workspaces/mi/mi-extension/src/ai-panel/activate.ts b/workspaces/mi/mi-extension/src/ai-panel/activate.ts index 0ee992d5b00..bc856e2d309 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/activate.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/activate.ts @@ -16,11 +16,21 @@ * under the License. */ +import { AI_EVENT_TYPE, LoginMethod, PromptObject } from '@wso2/mi-core'; import * as vscode from 'vscode'; import { COMMANDS } from '../constants'; -import { openAIWebview } from './aiMachine'; import { extension } from '../MIExtensionContext'; -import { PromptObject } from '@wso2/mi-core'; +import { openAIWebview, StateMachineAI } from './aiMachine'; +import { getLoginMethod } from './auth'; +import { + addConfigFile, + getMIProjectPath, + LOGIN_REQUIRED_MESSAGE, + MI_INTEL_ONLY_MESSAGE, + NO_PROJECT_MESSAGE, + SIGN_IN_BUTTON, + SUCCESS_MESSAGE +} from './configUtils'; export function activateAiPanel(context: vscode.ExtensionContext) { context.subscriptions.push( @@ -33,4 +43,56 @@ export function activateAiPanel(context: vscode.ExtensionContext) { extension.initialPrompt = undefined; }) ); + context.subscriptions.push( + vscode.commands.registerCommand(COMMANDS.CONFIGURE_DEFAULT_MODEL, async () => { + // Check login method + const loginMethod = await getLoginMethod(); + + if (!loginMethod) { + const selection = await vscode.window.showWarningMessage( + LOGIN_REQUIRED_MESSAGE, + SIGN_IN_BUTTON + ); + if (selection === SIGN_IN_BUTTON) { + StateMachineAI.sendEvent(AI_EVENT_TYPE.LOGIN); + } + return; + } + + if (loginMethod !== LoginMethod.MI_INTEL) { + vscode.window.showWarningMessage(MI_INTEL_ONLY_MESSAGE); + return; + } + + // Get project path + const projectPath = getMIProjectPath(); + if (!projectPath) { + vscode.window.showErrorMessage(NO_PROJECT_MESSAGE); + return; + } + + // Add config + try { + const result = await addConfigFile(projectPath); + if (result) { + vscode.window.showInformationMessage(SUCCESS_MESSAGE); + } + } catch (error) { + const errorMessage = (error as Error).message; + + // Handle token refresh errors - prompt re-login + if (errorMessage.includes('Refresh token') || errorMessage.includes('TOKEN_EXPIRED')) { + const selection = await vscode.window.showWarningMessage( + LOGIN_REQUIRED_MESSAGE, + SIGN_IN_BUTTON + ); + if (selection === SIGN_IN_BUTTON) { + StateMachineAI.sendEvent(AI_EVENT_TYPE.LOGIN); + } + } else { + vscode.window.showErrorMessage(errorMessage); + } + } + }) + ); } diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts new file mode 100644 index 00000000000..204a22d1a1c --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -0,0 +1,201 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { getAuthCredentials, getRefreshedAccessToken } from './auth'; +import { getAnthropicProxyUrl } from './copilot/connection'; +import { LoginMethod } from '@wso2/mi-core'; + +// Configuration keys +const SERVICE_URL_KEY = 'WSO2_AI_SERVICE_URL'; +const ACCESS_TOKEN_KEY = 'WSO2_AI_ACCESS_TOKEN'; + +// File paths +const CONFIG_PROPERTIES_RELATIVE_PATH = ['src', 'main', 'wso2mi', 'resources', 'conf', 'config.properties']; +const ENV_FILE_NAME = '.env'; + +// Messages +const PROGRESS_MESSAGE = 'Configuring WSO2 default model provider...'; +const SUCCESS_MESSAGE = 'WSO2 default model provider configuration was added to the project.'; +const NO_PROJECT_MESSAGE = 'No MI project found in the workspace.'; +const LOGIN_REQUIRED_MESSAGE = 'Please sign in to MI Intelligence to configure the WSO2 default model provider.'; +const MI_INTEL_ONLY_MESSAGE = 'This feature is only available for MI Intelligence users.'; +const SIGN_IN_BUTTON = 'Sign in to MI Copilot'; + +/** + * Get the refreshed access token for the default model configuration. + * Only works for MI_INTEL login method. + */ +export async function getTokenForDefaultModel(): Promise { + const credentials = await getAuthCredentials(); + + if (!credentials) { + throw new Error('No authentication credentials found.'); + } + + if (credentials.loginMethod !== LoginMethod.MI_INTEL) { + throw new Error(MI_INTEL_ONLY_MESSAGE); + } + + const token = await getRefreshedAccessToken(); + return token; +} + +/** + * Get the MI project path from the workspace. + * Returns the first workspace folder that contains a pom.xml file. + */ +export function getMIProjectPath(): string | undefined { + const workspaceFolders = vscode.workspace.workspaceFolders; + if (!workspaceFolders || workspaceFolders.length === 0) { + return undefined; + } + + for (const folder of workspaceFolders) { + const pomPath = path.join(folder.uri.fsPath, 'pom.xml'); + if (fs.existsSync(pomPath)) { + return folder.uri.fsPath; + } + } + + return undefined; +} + +/** + * Add or update an entry in a .env file. + * Preserves existing entries and updates/adds the specified key. + */ +function addOrUpdateEnvEntry(filePath: string, key: string, value: string): void { + let content = ''; + if (fs.existsSync(filePath)) { + content = fs.readFileSync(filePath, 'utf-8'); + } + + const lines = content.split('\n'); + const keyIndex = lines.findIndex(line => line.startsWith(`${key}=`)); + + if (keyIndex !== -1) { + lines[keyIndex] = `${key}=${value}`; + } else { + // Add new entry, but avoid adding to an empty line at the end + if (lines.length > 0 && lines[lines.length - 1].trim() === '') { + lines[lines.length - 1] = `${key}=${value}`; + lines.push(''); + } else { + lines.push(`${key}=${value}`); + } + } + + // Clean up multiple empty lines at the end + while (lines.length > 1 && lines[lines.length - 1].trim() === '' && lines[lines.length - 2].trim() === '') { + lines.pop(); + } + + const result = lines.join('\n'); + fs.writeFileSync(filePath, result.endsWith('\n') ? result : result + '\n'); +} + +/** + * Add or update an entry in a config.properties file. + * Format: key:type + * Preserves existing entries and updates/adds the specified key. + */ +function addOrUpdateConfigPropertyEntry(filePath: string, key: string, type: string): void { + // Ensure directory exists + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + let content = ''; + if (fs.existsSync(filePath)) { + content = fs.readFileSync(filePath, 'utf-8'); + } + + const lines = content.split('\n'); + const keyIndex = lines.findIndex(line => line.startsWith(`${key}:`)); + + if (keyIndex !== -1) { + lines[keyIndex] = `${key}:${type}`; + } else { + // Add new entry, but avoid adding to an empty line at the end + if (lines.length > 0 && lines[lines.length - 1].trim() === '') { + lines[lines.length - 1] = `${key}:${type}`; + lines.push(''); + } else { + lines.push(`${key}:${type}`); + } + } + + // Clean up multiple empty lines at the end + while (lines.length > 1 && lines[lines.length - 1].trim() === '' && lines[lines.length - 2].trim() === '') { + lines.pop(); + } + + const result = lines.join('\n'); + fs.writeFileSync(filePath, result.endsWith('\n') ? result : result + '\n'); +} + +/** + * Add the default model configuration to the project. + * Updates both .env and config.properties files. + */ +function addDefaultModelConfig(projectPath: string, token: string, backendUrl: string): boolean { + // Build file paths + const envFilePath = path.join(projectPath, ENV_FILE_NAME); + const configPropertiesPath = path.join(projectPath, ...CONFIG_PROPERTIES_RELATIVE_PATH); + + // Update .env file with values + addOrUpdateEnvEntry(envFilePath, SERVICE_URL_KEY, backendUrl); + addOrUpdateEnvEntry(envFilePath, ACCESS_TOKEN_KEY, token); + + // Update config.properties file with type declarations + addOrUpdateConfigPropertyEntry(configPropertiesPath, SERVICE_URL_KEY, 'string'); + addOrUpdateConfigPropertyEntry(configPropertiesPath, ACCESS_TOKEN_KEY, 'string'); + + return true; +} + +/** + * Main function to add the config file with progress notification. + */ +export async function addConfigFile(projectPath: string): Promise { + return vscode.window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: PROGRESS_MESSAGE, + cancellable: false, + }, + async () => { + const token = await getTokenForDefaultModel(); + const backendUrl = getAnthropicProxyUrl(); + return addDefaultModelConfig(projectPath, token, backendUrl); + } + ); +} + +// Export messages for use in activate.ts +export { + SUCCESS_MESSAGE, + NO_PROJECT_MESSAGE, + LOGIN_REQUIRED_MESSAGE, + MI_INTEL_ONLY_MESSAGE, + SIGN_IN_BUTTON +}; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts b/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts index 1dba6ec04ae..5582f40651b 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts @@ -34,7 +34,7 @@ let cachedAuthMethod: LoginMethod | null = null; /** * Get the backend URL for MI Copilot */ -const getAnthropicProxyUrl = (): string => { +export const getAnthropicProxyUrl = (): string => { const proxyUrl = process.env.MI_COPILOT_ANTHROPIC_PROXY_URL; if (!proxyUrl) { throw new Error('MI_COPILOT_ANTHROPIC_PROXY_URL environment variable is not set'); diff --git a/workspaces/mi/mi-extension/src/constants/index.ts b/workspaces/mi/mi-extension/src/constants/index.ts index 69ecaa28b0c..ded247cef62 100644 --- a/workspaces/mi/mi-extension/src/constants/index.ts +++ b/workspaces/mi/mi-extension/src/constants/index.ts @@ -112,6 +112,7 @@ export const COMMANDS = { REVEAL_TEST_PANE: 'MI.mock-services.focus', EDIT_K8_CONFIGURATION_COMMAND: 'MI.edit-k8-configuration', MANAGE_REGISTRY_PROPERTIES_COMMAND: 'MI.manage-registry-property', + CONFIGURE_DEFAULT_MODEL: 'MI.configureDefaultModelProvider', BI_EXTENSION: 'WSO2.ballerina-integrator', BI_OPEN_COMMAND: 'ballerina.open.bi.welcome', From 5ecf7361e799fbd9b3b7c35e5f2c84dd86077f1f Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Mon, 26 Jan 2026 21:48:21 +0530 Subject: [PATCH 002/343] Disable WSO2_AI if not logged to copilot --- .../mi-core/src/rpc-types/ai-panel/index.ts | 6 ++ .../src/rpc-types/ai-panel/rpc-type.ts | 1 + .../src/rpc-managers/ai-panel/rpc-handler.ts | 2 + .../src/rpc-managers/ai-panel/rpc-manager.ts | 8 +++ .../src/rpc-clients/ai-panel/rpc-client.ts | 8 +++ .../src/views/Forms/ConnectionForm/index.tsx | 58 ++++++++++++++++--- 6 files changed, 75 insertions(+), 8 deletions(-) diff --git a/workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts b/workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts index 8f971233928..cfb5db1eefb 100644 --- a/workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts +++ b/workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts @@ -65,6 +65,11 @@ export interface MIAIPanelAPI { // ================================== hasAnthropicApiKey: () => Promise + // ================================== + // MI Copilot Login Status + // ================================== + isMiCopilotLoggedIn: () => Promise + // ================================== // Usage Management // ================================== @@ -100,6 +105,7 @@ export { abortCodeGeneration, codeGenerationEvent, hasAnthropicApiKey, + isMiCopilotLoggedIn, fetchUsage, generateUnitTest, generateUnitTestCase, diff --git a/workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts b/workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts index 3f21cc75467..249b8b8fa82 100644 --- a/workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts +++ b/workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts @@ -36,6 +36,7 @@ export const generateSuggestions: RequestType = { method: `${_prefix}/generateCode` }; export const abortCodeGeneration: RequestType = { method: `${_prefix}/abortCodeGeneration` }; export const hasAnthropicApiKey: RequestType = { method: `${_prefix}/hasAnthropicApiKey` }; +export const isMiCopilotLoggedIn: RequestType = { method: `${_prefix}/isMiCopilotLoggedIn` }; export const fetchUsage: RequestType = { method: `${_prefix}/fetchUsage` }; // Unit test generation methods diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts index 93d5a9d34be..d1e3cd42aec 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts @@ -25,6 +25,7 @@ import { GenerateSuggestionsRequest, GenerateCodeRequest, hasAnthropicApiKey, + isMiCopilotLoggedIn, fetchUsage, generateUnitTest, generateUnitTestCase, @@ -50,6 +51,7 @@ export function registerMIAiPanelRpcHandlers(messenger: MessengerAPI, projectUri messenger.onRequest(generateCode, (request: GenerateCodeRequest) => rpcManager.generateCode(request)); messenger.onRequest(abortCodeGeneration, () => rpcManager.abortCodeGeneration()); messenger.onRequest(hasAnthropicApiKey, () => rpcManager.hasAnthropicApiKey()); + messenger.onRequest(isMiCopilotLoggedIn, () => rpcManager.isMiCopilotLoggedIn()); messenger.onRequest(fetchUsage, () => rpcManager.fetchUsage()); // ================================== diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts index d76570a97d7..1e954c7fadc 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts @@ -485,6 +485,14 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { return loginMethod === LoginMethod.ANTHROPIC_KEY; } + /** + * Check if user is logged in to MI Copilot (via MI_INTEL SSO) + */ + async isMiCopilotLoggedIn(): Promise { + const loginMethod = await getLoginMethod(); + return loginMethod === LoginMethod.MI_INTEL; + } + /** * Fetches usage information from backend and updates state machine * Only works for MI_INTEL users diff --git a/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts b/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts index 1def5c087c7..30875e7f968 100644 --- a/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts +++ b/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts @@ -27,6 +27,7 @@ import { AbortCodeGenerationResponse, abortCodeGeneration, hasAnthropicApiKey, + isMiCopilotLoggedIn, fetchUsage, GenerateUnitTestRequest, GenerateUnitTestResponse, @@ -79,6 +80,13 @@ export class MiAiPanelRpcClient implements MIAIPanelAPI { return this._messenger.sendRequest(hasAnthropicApiKey, HOST_EXTENSION); } + // ================================== + // MI Copilot Login Status + // ================================== + isMiCopilotLoggedIn(): Promise { + return this._messenger.sendRequest(isMiCopilotLoggedIn, HOST_EXTENSION); + } + // ================================== // Usage Management // ================================== diff --git a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/index.tsx b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/index.tsx index 971b6199fd1..992abedd720 100644 --- a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/index.tsx +++ b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/index.tsx @@ -16,7 +16,7 @@ * under the License. */ -import { ComponentCard, IconLabel, FormView, TextField, Codicon, Typography, FormActions, Button, Divider, Icon, DropdownButton } from "@wso2/ui-toolkit"; +import { ComponentCard, IconLabel, FormView, TextField, Codicon, Typography, FormActions, Button, Divider, Icon, DropdownButton, Tooltip } from "@wso2/ui-toolkit"; import { useEffect, useState } from "react"; import styled from "@emotion/styled"; import { VSCodeLink, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"; @@ -130,6 +130,15 @@ const connectorCardStyle = { fontSize: '15px' }; +const disabledConnectorCardStyle = { + ...connectorCardStyle, + cursor: 'not-allowed', + opacity: 0.5, + '&:hover': { + backgroundColor: 'var(--vscode-dropdown-background)' + } +}; + const IconWrapper = styled.div` height: 18px; width: 20px; @@ -175,6 +184,8 @@ const option2 = ( ); +const WSO2_AI_CONNECTION_TYPE = 'WSO2_AI'; + export function ConnectionWizard(props: ConnectionStoreProps) { const { rpcClient } = useVisualizerContext(); const { allowedConnectionTypes } = props; @@ -190,6 +201,7 @@ export function ConnectionWizard(props: ConnectionStoreProps) { const [searchValue, setSearchValue] = useState(''); const [isFailedDownload, setIsFailedDownload] = useState(false); const [selectedItem, setSelectedItem] = useState("openapi"); + const [isMiCopilotLoggedIn, setIsMiCopilotLoggedIn] = useState(false); const fetchLocalConnectorData = async () => { const connectorData = await rpcClient.getMiDiagramRpcClient().getAvailableConnectors({ documentUri: props.path, connectorName: "" }); @@ -243,6 +255,10 @@ export function ConnectionWizard(props: ConnectionStoreProps) { useEffect(() => { fetchLocalConnectorData(); fetchStoreConnectors(); + // Check MI Copilot login status for WSO2_AI connection + rpcClient.getMiAiPanelRpcClient().isMiCopilotLoggedIn() + .then(setIsMiCopilotLoggedIn) + .catch(() => setIsMiCopilotLoggedIn(false)); }, []); const searchConnectors = () => { @@ -475,14 +491,23 @@ export function ConnectionWizard(props: ConnectionStoreProps) { <> {Object.entries(connector.connectionUiSchema).length > 0 && ( - {Object.entries(connector.connectionUiSchema).map(([connectionType, connectionData]) => ( - (allowedConnectionTypes && !allowedConnectionTypes.some( - type => type.toLowerCase() === connectionType.toLowerCase() // Ignore case on allowedtype check - )) ? null : ( + {Object.entries(connector.connectionUiSchema).map(([connectionType, connectionData]) => { + // Check if connection type is in allowed list (if specified) + if (allowedConnectionTypes && !allowedConnectionTypes.some( + type => type.toLowerCase() === connectionType.toLowerCase() + )) { + return null; + } + + // Check if WSO2_AI connection requires login + const isWso2AiConnection = connectionType.toUpperCase() === WSO2_AI_CONNECTION_TYPE; + const isDisabled = isWso2AiConnection && !isMiCopilotLoggedIn; + + const cardContent = ( selectConnectionType(connector, connectionType)} - sx={connectorCardStyle} + onClick={isDisabled ? undefined : () => selectConnectionType(connector, connectionType)} + sx={isDisabled ? disabledConnectorCardStyle : connectorCardStyle} > @@ -500,7 +525,24 @@ export function ConnectionWizard(props: ConnectionStoreProps) { - )))} + ); + + // Wrap disabled WSO2_AI connection with tooltip + if (isDisabled) { + return ( + + {cardContent} + + ); + } + + return cardContent; + })} )} From 2a1cfbcc36feda19f360aabf043820693f6680e6 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 27 Jan 2026 00:17:28 +0530 Subject: [PATCH 003/343] Inject ai env variables when running integration --- .../mi-core/src/rpc-types/mi-diagram/types.ts | 1 + .../mi-extension/src/ai-panel/configUtils.ts | 52 +++++++++++++++++++ .../mi/mi-extension/src/debugger/activate.ts | 11 ++++ .../mi-extension/src/debugger/debugAdapter.ts | 13 ++++- .../mi-extension/src/debugger/debugHelper.ts | 2 +- .../rpc-managers/mi-diagram/rpc-manager.ts | 13 ++++- .../ConnectionFormGenerator.tsx | 6 ++- 7 files changed, 93 insertions(+), 5 deletions(-) diff --git a/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts b/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts index 7ce269780b0..a4b9b22c4b7 100644 --- a/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts +++ b/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts @@ -1653,6 +1653,7 @@ export interface CreateConnectionRequest { keyValuesXML: string; directory: string; filePath?: string; + connectionType?: string; } export interface CreateConnectionResponse { diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts index 204a22d1a1c..3791e03ec6b 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -191,6 +191,58 @@ export async function addConfigFile(projectPath: string): Promise { ); } +/** + * Add WSO2_AI configuration entries to config.properties only. + * This is called when a WSO2_AI connection is created. + * Does not modify .env file - values are injected at runtime. + */ +export function addWSO2AIConfigProperties(projectPath: string): void { + const configPropertiesPath = path.join(projectPath, ...CONFIG_PROPERTIES_RELATIVE_PATH); + + // Check if entries already exist + let content = ''; + if (fs.existsSync(configPropertiesPath)) { + content = fs.readFileSync(configPropertiesPath, 'utf-8'); + } + + const hasServiceUrl = content.includes(`${SERVICE_URL_KEY}:`); + const hasAccessToken = content.includes(`${ACCESS_TOKEN_KEY}:`); + + // Only add entries that don't already exist + if (!hasServiceUrl) { + addOrUpdateConfigPropertyEntry(configPropertiesPath, SERVICE_URL_KEY, 'string'); + } + if (!hasAccessToken) { + addOrUpdateConfigPropertyEntry(configPropertiesPath, ACCESS_TOKEN_KEY, 'string'); + } +} + +/** + * Get WSO2_AI environment variables for runtime injection. + * Returns empty object if user is not logged in or not using MI_INTEL login method. + * These values are injected at runtime before .env values, so .env can override them. + */ +export async function getWSO2AIEnvVariables(): Promise<{ [key: string]: string }> { + try { + const credentials = await getAuthCredentials(); + if (!credentials || credentials.loginMethod !== LoginMethod.MI_INTEL) { + return {}; + } + + const token = await getRefreshedAccessToken(); + const backendUrl = getAnthropicProxyUrl(); + + return { + [SERVICE_URL_KEY]: backendUrl, + [ACCESS_TOKEN_KEY]: token + }; + } catch (error) { + // User not logged in or token refresh failed - return empty + // This allows the integration to run without WSO2_AI if not configured + return {}; + } +} + // Export messages for use in activate.ts export { SUCCESS_MESSAGE, diff --git a/workspaces/mi/mi-extension/src/debugger/activate.ts b/workspaces/mi/mi-extension/src/debugger/activate.ts index eacbee0cb5c..bb03aff7f6e 100644 --- a/workspaces/mi/mi-extension/src/debugger/activate.ts +++ b/workspaces/mi/mi-extension/src/debugger/activate.ts @@ -31,6 +31,7 @@ import { buildBallerinaModule, setPathsInWorkSpace, verifyJavaHomePath, verifyMI import { MACHINE_VIEW } from '@wso2/mi-core'; import { askForProject } from '../util/workspace'; import { webviews } from '../visualizer/webview'; +import { getWSO2AIEnvVariables } from '../ai-panel/configUtils'; class MiConfigurationProvider implements vscode.DebugConfigurationProvider { @@ -260,6 +261,16 @@ export function activateDebugger(context: vscode.ExtensionContext) { config.internalConsoleOptions = 'neverOpen'; } + // Inject WSO2_AI env vars first (so .env can override them) + try { + const wso2AiEnvVars = await getWSO2AIEnvVariables(); + if (Object.keys(wso2AiEnvVars).length > 0) { + config.env = { ...wso2AiEnvVars, ...config.env }; + } + } catch (error) { + // Silently ignore - user may not be logged in + } + if (fs.existsSync(envPath)) { const envFileContent = fs.readFileSync(envPath, 'utf-8'); const envVariables = envFileContent.split('\n').reduce((acc, line) => { diff --git a/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts b/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts index ea827ca30f2..4ab16242352 100644 --- a/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts +++ b/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts @@ -32,6 +32,7 @@ import { EVENT_TYPE, miServerRunStateChanged } from '@wso2/mi-core'; import { DebuggerConfig } from './config'; import { openRuntimeServicesWebview } from '../runtime-services-panel/activate'; import { RPCLayer } from '../RPCLayer'; +import { getWSO2AIEnvVariables } from '../ai-panel/configUtils'; interface ILaunchRequestArguments extends DebugProtocol.LaunchRequestArguments { /** Env variables setup through launch.json */ @@ -279,7 +280,17 @@ export class MiDebugAdapter extends LoggingDebugSession { DebuggerConfig.setConfigPortOffset(this.projectUri); DebuggerConfig.setPortOffset(portOffset); - DebuggerConfig.setEnvVariables(args?.env || {}); + let envVars = args?.env || {}; + try { + const wso2AiEnvVars = await getWSO2AIEnvVariables(); + if (Object.keys(wso2AiEnvVars).length > 0) { + envVars = { ...wso2AiEnvVars, ...envVars }; + } + } catch (error) { + // Silently ignore - user may not be logged in + } + + DebuggerConfig.setEnvVariables(envVars); DebuggerConfig.setVmArgs(args?.vmArgs ? args?.vmArgs : []); DebuggerConfig.setVmArgs(args?.vmArgs ? args?.vmArgs : []); diff --git a/workspaces/mi/mi-extension/src/debugger/debugHelper.ts b/workspaces/mi/mi-extension/src/debugger/debugHelper.ts index bfa72fcd98f..d225a1964ef 100644 --- a/workspaces/mi/mi-extension/src/debugger/debugHelper.ts +++ b/workspaces/mi/mi-extension/src/debugger/debugHelper.ts @@ -332,9 +332,9 @@ export async function startServer(projectUri: string, serverPath: string, isDebu const definedEnvVariables = DebuggerConfig.getEnvVariables(); const vmArgs = DebuggerConfig.getVmArgs(); const envVariables = { + ...definedEnvVariables, ...process.env, ...setJavaHomeInEnvironmentAndPath(projectUri), - ...definedEnvVariables }; serverProcess = child_process.spawn(`${runCommand}`, vmArgs, { shell: true, env: envVariables }); diff --git a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts index b2f56f433ac..5f5f323e428 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts @@ -340,6 +340,7 @@ import { DebuggerConfig } from "../../debugger/config"; import { getKubernetesConfiguration, getKubernetesDataConfiguration } from "../../util/template-engine/mustach-templates/KubernetesConfiguration"; import { parseStringPromise, Builder } from "xml2js"; import { MILanguageClient } from "../../lang-client/activator"; +import { addWSO2AIConfigProperties } from "../../ai-panel/configUtils"; const AdmZip = require('adm-zip'); const { XMLParser, XMLBuilder } = require("fast-xml-parser"); @@ -4575,7 +4576,7 @@ ${endpointAttributes} async createConnection(params: CreateConnectionRequest): Promise { return new Promise(async (resolve) => { - const { connectionName, keyValuesXML, directory } = params; + const { connectionName, keyValuesXML, directory, connectionType } = params; const localEntryPath = directory; const xmlData = ` @@ -4587,6 +4588,16 @@ ${keyValuesXML}`; } await replaceFullContentToFile(filePath, xmlData); + + // If this is a WSO2_AI connection, add config.properties entries + if (connectionType?.toUpperCase() === 'WSO2_AI') { + try { + addWSO2AIConfigProperties(this.projectUri); + } catch (error) { + console.error('Failed to add WSO2_AI config properties:', error); + } + } + resolve({ name: connectionName }); }); } diff --git a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ConnectionFormGenerator.tsx b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ConnectionFormGenerator.tsx index 6add298a1cb..c25861c179a 100644 --- a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ConnectionFormGenerator.tsx +++ b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ConnectionFormGenerator.tsx @@ -267,7 +267,8 @@ export function AddConnection(props: AddConnectionProps) { connectionName: connectionName, keyValuesXML: modifiedXml, directory: localEntryPath, - filePath: props.connectionName ? props.path : "" + filePath: props.connectionName ? props.path : "", + connectionType: connectionType }); if (props.isPopup) { @@ -306,7 +307,8 @@ export function AddConnection(props: AddConnectionProps) { connectionName: name, keyValuesXML: modifiedXml, directory: localEntryPath, - filePath: props.connectionName ? props.path : "" + filePath: props.connectionName ? props.path : "", + connectionType: connectionType }); if (props.isPopup) { From 3cc24a6c53066cf648be6f2622e7d03feeb47302 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 27 Jan 2026 00:35:29 +0530 Subject: [PATCH 004/343] Refresh token only when expired --- workspaces/mi/mi-extension/src/ai-panel/configUtils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts index 3791e03ec6b..c539558f9cc 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -19,7 +19,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; -import { getAuthCredentials, getRefreshedAccessToken } from './auth'; +import { getAuthCredentials, getAccessToken, getRefreshedAccessToken } from './auth'; import { getAnthropicProxyUrl } from './copilot/connection'; import { LoginMethod } from '@wso2/mi-core'; @@ -229,7 +229,10 @@ export async function getWSO2AIEnvVariables(): Promise<{ [key: string]: string } return {}; } - const token = await getRefreshedAccessToken(); + const token = await getAccessToken(); + if (!token) { + return {}; + } const backendUrl = getAnthropicProxyUrl(); return { From cf14f34e98a45a747e30e63ad1b67c3597d91ece Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 27 Jan 2026 14:17:22 +0530 Subject: [PATCH 005/343] Add conditional rendering logic based on connection --- .../src/components/Form/FormGenerator.tsx | 83 ++++++++++++++++++- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx b/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx index 18dd84e6268..2dd16b790e9 100644 --- a/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx +++ b/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx @@ -219,6 +219,7 @@ export function FormGenerator(props: FormGeneratorProps) { const [isLegacyExpressionEnabled, setIsLegacyExpressionEnabled] = useState(false); const handleOnCancelExprEditorRef = useRef(() => { }); const [connectionNames, setConnections] = useState<{ [key: string]: string[] }>({}); + const [connectionTypeMap, setConnectionTypeMap] = useState<{ [fieldName: string]: { [connName: string]: string } }>({}); const [generatedFormDetails, setGeneratedFormDetails] = useState>(null); const [visibleDetails, setVisibleDetails] = useState<{ [key: string]: boolean }>({}); const [isGenerating, setIsGenerating] = useState(false); @@ -338,7 +339,7 @@ export function FormGenerator(props: FormGeneratorProps) { setIsLoading(false); }, [sidePanelContext.pageStack, formData]); - async function getConnectionNames(allowedTypes?: string[]) { + async function getConnectionNames(allowedTypes?: string[], fieldName?: string) { const connectorData = await rpcClient.getMiDiagramRpcClient().getConnectorConnections({ documentUri: documentUri, connectorName: formData?.connectorName ?? connectorName.replace(/\s/g, '') @@ -348,6 +349,16 @@ export function FormGenerator(props: FormGeneratorProps) { connection => allowedTypes?.some( type => type.toLowerCase() === connection.connectionType.toLowerCase() )); + + // Build name-to-type mapping for connection type condition evaluation + if (fieldName) { + const typeMapping: { [connName: string]: string } = {}; + filteredConnections.forEach(conn => { + typeMapping[conn.name] = conn.connectionType; + }); + setConnectionTypeMap(prev => ({ ...prev, [fieldName]: typeMapping })); + } + const connectionNames = filteredConnections.map(connection => connection.name); return connectionNames; } @@ -363,7 +374,7 @@ export function FormGenerator(props: FormGeneratorProps) { if (element.value.inputType === 'connection' && documentUri && connectorName) { const allowedTypes: string[] = element.value.allowedConnectionTypes; - const connectionNames = await getConnectionNames(allowedTypes); + const connectionNames = await getConnectionNames(allowedTypes, name); setConnections((prevConnections) => ({ ...prevConnections, @@ -1094,7 +1105,7 @@ export function FormGenerator(props: FormGeneratorProps) { } const fetchItems = async () => { - const connectionNames = await getConnectionNames(allowedConnectionTypes); + const connectionNames = await getConnectionNames(allowedConnectionTypes, name); setConnections((prevConnections) => ({ ...prevConnections, @@ -1289,6 +1300,13 @@ export function FormGenerator(props: FormGeneratorProps) { } } + if (element?.value?.connectionTypeEnableCondition !== undefined) { + const shouldRender = getConnectionTypeConditions(element.value.connectionTypeEnableCondition); + if (!shouldRender) { + return; + } + } + if (element.type === 'attributeGroup' && !element.value.hidden) { // Check if any attribute in this group has comboValues containing 'xml' const hasXmlComboValue = element.value.elements?.some((attr: any) => @@ -1476,6 +1494,65 @@ export function FormGenerator(props: FormGeneratorProps) { return conditions; // Default case if conditions are not met } + /** + * Evaluates conditions based on the connection type of a selected connection, + * rather than the raw form field value. This allows UI schema authors to show/hide + * fields depending on the type of connection the user has selected. + * + * Example schema usage: + * "connectionTypeEnableCondition": ["NOT", { "llmConfigKey": "WSO2_AI" }] + * + * This reads as: show this field when the connection type of llmConfigKey is NOT WSO2_AI. + */ + function getConnectionTypeConditions(conditions: any): boolean { + const evaluateCondition = (condition: any) => { + const [fieldName] = Object.keys(condition); + const expectedType = condition[fieldName]; + + // Get the current connection name selected in the referenced field + const selectedConnectionName = watch(getNameForController(fieldName)); + + if (!selectedConnectionName) { + // No connection selected yet — cannot confirm type match + return false; + } + + // Look up the connection type from the mapping + const fieldTypeMapping = connectionTypeMap[getNameForController(fieldName)]; + if (!fieldTypeMapping) { + // Type map not yet loaded — cannot confirm type match + return false; + } + + const actualType = fieldTypeMapping[selectedConnectionName]; + if (!actualType) { + // Connection name not found in the map — cannot confirm type match + return false; + } + + return actualType.toUpperCase() === String(expectedType).toUpperCase(); + }; + + if (Array.isArray(conditions)) { + const firstElement = conditions[0]; + const restConditions = conditions.slice(1); + + if (firstElement === "AND") { + return restConditions.every((condition: any) => + Array.isArray(condition) ? getConnectionTypeConditions(condition) : evaluateCondition(condition)); + } else if (firstElement === "OR") { + return restConditions.some((condition: any) => + Array.isArray(condition) ? getConnectionTypeConditions(condition) : evaluateCondition(condition)); + } else if (firstElement === "NOT") { + const condition = conditions[1]; + return Array.isArray(condition) ? !getConnectionTypeConditions(condition) : !evaluateCondition(condition); + } else { + return evaluateCondition(conditions[0]); + } + } + return conditions; + } + return ( formData && formData.elements && formData.elements.length > 0 && !isLoading && ( <> From 2a650ea14636850f218ca1fb1d091be2d6832c2d Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Wed, 28 Jan 2026 09:33:18 +0530 Subject: [PATCH 006/343] Add review suggestions --- workspaces/mi/mi-extension/src/ai-panel/configUtils.ts | 10 ++++++++-- .../mi/mi-extension/src/debugger/debugAdapter.ts | 2 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts index c539558f9cc..476e0841210 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -89,7 +89,10 @@ function addOrUpdateEnvEntry(filePath: string, key: string, value: string): void } const lines = content.split('\n'); - const keyIndex = lines.findIndex(line => line.startsWith(`${key}=`)); + const keyIndex = lines.findIndex(line => { + const [lineKey] = line.split('=', 1); + return lineKey === key; + }); if (keyIndex !== -1) { lines[keyIndex] = `${key}=${value}`; @@ -130,7 +133,10 @@ function addOrUpdateConfigPropertyEntry(filePath: string, key: string, type: str } const lines = content.split('\n'); - const keyIndex = lines.findIndex(line => line.startsWith(`${key}:`)); + const keyIndex = lines.findIndex(line => { + const [lineKey] = line.split(':', 1); + return lineKey === key; + }); if (keyIndex !== -1) { lines[keyIndex] = `${key}:${type}`; diff --git a/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts b/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts index 4ab16242352..6cdcb245abb 100644 --- a/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts +++ b/workspaces/mi/mi-extension/src/debugger/debugAdapter.ts @@ -293,8 +293,6 @@ export class MiDebugAdapter extends LoggingDebugSession { DebuggerConfig.setEnvVariables(envVars); DebuggerConfig.setVmArgs(args?.vmArgs ? args?.vmArgs : []); - DebuggerConfig.setVmArgs(args?.vmArgs ? args?.vmArgs : []); - await setManagementCredentials(serverPath); vscode.commands.executeCommand('setContext', 'MI.isRunning', 'true'); From cc4487e20b6a887b2058a83983ce9d4b784a8092 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Wed, 28 Jan 2026 10:13:22 +0530 Subject: [PATCH 007/343] Remove unnecessary guards --- .../mi-extension/src/ai-panel/configUtils.ts | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts index 476e0841210..e6d3079d784 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -205,22 +205,8 @@ export async function addConfigFile(projectPath: string): Promise { export function addWSO2AIConfigProperties(projectPath: string): void { const configPropertiesPath = path.join(projectPath, ...CONFIG_PROPERTIES_RELATIVE_PATH); - // Check if entries already exist - let content = ''; - if (fs.existsSync(configPropertiesPath)) { - content = fs.readFileSync(configPropertiesPath, 'utf-8'); - } - - const hasServiceUrl = content.includes(`${SERVICE_URL_KEY}:`); - const hasAccessToken = content.includes(`${ACCESS_TOKEN_KEY}:`); - - // Only add entries that don't already exist - if (!hasServiceUrl) { - addOrUpdateConfigPropertyEntry(configPropertiesPath, SERVICE_URL_KEY, 'string'); - } - if (!hasAccessToken) { - addOrUpdateConfigPropertyEntry(configPropertiesPath, ACCESS_TOKEN_KEY, 'string'); - } + addOrUpdateConfigPropertyEntry(configPropertiesPath, SERVICE_URL_KEY, 'string'); + addOrUpdateConfigPropertyEntry(configPropertiesPath, ACCESS_TOKEN_KEY, 'string'); } /** From 1f55a8266a5e741f4a6d882678a97f96a6dd219b Mon Sep 17 00:00:00 2001 From: Radith Samarakoon <104646586+RadCod3@users.noreply.github.com> Date: Wed, 28 Jan 2026 10:42:38 +0530 Subject: [PATCH 008/343] Update workspaces/mi/mi-extension/src/ai-panel/configUtils.ts Co-authored-by: Dan Niles <56271899+dan-niles@users.noreply.github.com> --- workspaces/mi/mi-extension/src/ai-panel/configUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts index e6d3079d784..0b46b93728d 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts +++ b/workspaces/mi/mi-extension/src/ai-panel/configUtils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. * * WSO2 LLC. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except From 7f42c7b9757507730c548486bfc5ffa23dc14b15 Mon Sep 17 00:00:00 2001 From: KalinduGandara Date: Tue, 17 Feb 2026 14:04:25 +0530 Subject: [PATCH 009/343] Update Java version compatibility mapping for MI 4.6.0 --- .../mi-extension/src/util/onboardingUtils.ts | 61 ++++++++++++------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/workspaces/mi/mi-extension/src/util/onboardingUtils.ts b/workspaces/mi/mi-extension/src/util/onboardingUtils.ts index 342ff937b18..97d3a2d6c07 100644 --- a/workspaces/mi/mi-extension/src/util/onboardingUtils.ts +++ b/workspaces/mi/mi-extension/src/util/onboardingUtils.ts @@ -33,17 +33,20 @@ import { runCommand, runBasicCommand } from '../test-explorer/runner'; import { XMLParser, XMLBuilder } from "fast-xml-parser"; const AdmZip = require('adm-zip'); -// Add Latest MI version as the first element in the array -export const supportedJavaVersionsForMI: { [key: string]: string } = { - '4.5.0': '21', - '4.4.0': '21', - '4.3.0': '17', - '4.2.0': '17', - '4.1.0': '11', +// Put MI versions in descending order. +// Put Java versions in ascending order for each MI version +export const javaVersionCompatibilityMap: { [key: string]: { supportedRange: { min: string; max: string }, recommended: string[] } } = { + '4.6.0': { supportedRange: { min: '21', max: '25' }, recommended: ['21', '25'] }, + '4.5.0': { supportedRange: { min: '11', max: '21' }, recommended: ['21'] }, + '4.4.0': { supportedRange: { min: '11', max: '21' }, recommended: ['21'] }, + '4.3.0': { supportedRange: { min: '11', max: '17' }, recommended: ['17'] }, + '4.2.0': { supportedRange: { min: '11', max: '17' }, recommended: ['17'] }, + '4.1.0': { supportedRange: { min: '11', max: '11' }, recommended: ['11'] }, }; -export const LATEST_MI_VERSION = "4.4.0"; +export const LATEST_MI_VERSION = "4.6.0"; const COMPATIBLE_JDK_VERSION = "11"; const miDownloadUrls: { [key: string]: string } = { + '4.6.0': 'https://mi-distribution.wso2.com/4.6.0/wso2mi-4.6.0.zip', '4.5.0': 'https://mi-distribution.wso2.com/4.5.0/wso2mi-4.5.0.zip', '4.4.0-UPDATED': 'https://mi-distribution.wso2.com/4.4.0/wso2mi-4.4.0-UPDATED.zip', '4.4.0': 'https://mi-distribution.wso2.com/4.4.0/wso2mi-4.4.0.zip', @@ -127,7 +130,8 @@ export async function getProjectSetupDetails(projectUri: string): Promise compareVersions(v, version) >= 0); + return Object.keys(javaVersionCompatibilityMap).filter((v) => compareVersions(v, version) >= 0); } - return Object.keys(supportedJavaVersionsForMI); + return Object.keys(javaVersionCompatibilityMap); } export async function downloadJavaFromMI(projectUri: string, miVersion: string): Promise { @@ -431,7 +435,7 @@ export async function downloadJavaFromMI(projectUri: string, miVersion: string): }; } - const javaVersion = supportedJavaVersionsForMI[miVersion]; + const javaVersions = javaVersionCompatibilityMap[miVersion].supportedRange; const javaPath = path.join(CACHED_FOLDER, 'java'); const osType = os.type(); @@ -458,9 +462,10 @@ export async function downloadJavaFromMI(projectUri: string, miVersion: string): throw new Error(`Unsupported architecture: ${os.arch()}`); } - if (!javaVersion) { - throw new Error('Unsupported Java version.'); + if (!javaVersions) { + throw new Error('Unsupported MI version.'); } + const javaVersion = javaVersions.max; // Get the highest supported Java version for the MI version if (!fs.existsSync(javaPath)) { fs.mkdirSync(javaPath, { recursive: true }); @@ -501,7 +506,7 @@ export async function downloadJavaFromMI(projectUri: string, miVersion: string): throw new Error( `Failed to download Java. ${error instanceof Error ? error.message : error }. - If issue persists, please download and install Java ${javaVersion} manually.` + If issue persists, please download and install Java ${javaVersions ? javaVersions.max : 'the required version'} manually.` ); } } @@ -554,7 +559,7 @@ function isSupportedJavaVersionForLS(version: string): boolean { return compareVersions(version, COMPATIBLE_JDK_VERSION) >= 0; } function isSupportedMIVersion(version: string): boolean { - return Object.keys(supportedJavaVersionsForMI).includes(version); + return Object.keys(javaVersionCompatibilityMap).includes(version); } function isDownloadableMIVersion(version: string): boolean { return miDownloadUrls[version] !== undefined; @@ -584,15 +589,22 @@ function isRecommendedJavaVersionForMI(javaVersion: string, miVersion: string): if (!javaVersion || !miVersion) { return false; } - const supportedVersion = supportedJavaVersionsForMI[miVersion]; - return supportedVersion ? javaVersion === supportedVersion : false; + const compatibleJavaVersion = javaVersionCompatibilityMap[miVersion]; + return compatibleJavaVersion ? compatibleJavaVersion.recommended.includes(javaVersion) : false; } function isCompatibleJavaVersionForMI(javaVersion: string, miVersion: string): boolean { if (!javaVersion || !miVersion) { return false; } - return isSupportedJavaVersionForLS(javaVersion) && - compareVersions(javaVersion, supportedJavaVersionsForMI[miVersion]) <= 0; // higher java version not compatible + const compatibleJavaVersion = javaVersionCompatibilityMap[miVersion]; + if (!compatibleJavaVersion) { + return false; + } + const lowestSupportedVersion = compatibleJavaVersion.supportedRange.min; + const highestSupportedVersion = compatibleJavaVersion.supportedRange.max; + return isSupportedJavaVersionForLS(javaVersion) + && compareVersions(javaVersion, lowestSupportedVersion) >= 0 + && compareVersions(javaVersion, highestSupportedVersion) <= 0; } function isCompatibleMIVersion(runtimeVersion: string, projectVersion: string): boolean { @@ -616,7 +628,8 @@ export async function setPathsInWorkSpace(request: SetPathRequest): Promise { + const compatibleJavaVersion = javaVersionCompatibilityMap[projectMiVersion]; + const highestSupportedJavaVersion = compatibleJavaVersion && compatibleJavaVersion.supportedRange.max; const response: SetupDetails = { - javaDetails: { status: 'not-valid', version: supportedJavaVersionsForMI[projectMiVersion] }, + javaDetails: { status: 'not-valid', version: highestSupportedJavaVersion }, miDetails: { status: 'not-valid', version: projectMiVersion } }; if (projectMiVersion) { @@ -667,7 +682,7 @@ async function getJavaAndMIPathsFromWorkspace(projectUri: string, projectMiVersi getJavaHomeForMIVersionFromCache(projectMiVersion); if (validJavaHome) { const javaVersion = getJavaVersion(path.join(validJavaHome, 'bin')); - if (supportedJavaVersionsForMI[projectMiVersion] === javaVersion) { + if (compatibleJavaVersion && javaVersion && compatibleJavaVersion.recommended.includes(javaVersion)) { response.javaDetails = { status: "valid", path: validJavaHome, version: javaVersion }; } else if (javaVersion && isCompatibleJavaVersionForMI(javaVersion, projectMiVersion)) { response.javaDetails = { status: "mismatch", path: validJavaHome, version: javaVersion! }; From 494140c9de90fd1f75067eec1f9afc92a765f701 Mon Sep 17 00:00:00 2001 From: KalinduGandara Date: Tue, 17 Feb 2026 14:41:12 +0530 Subject: [PATCH 010/343] Fix Java version retrieval in downloadJavaFromMI --- workspaces/mi/mi-extension/src/util/onboardingUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workspaces/mi/mi-extension/src/util/onboardingUtils.ts b/workspaces/mi/mi-extension/src/util/onboardingUtils.ts index 97d3a2d6c07..fb4645fe256 100644 --- a/workspaces/mi/mi-extension/src/util/onboardingUtils.ts +++ b/workspaces/mi/mi-extension/src/util/onboardingUtils.ts @@ -131,7 +131,7 @@ export async function getProjectSetupDetails(projectUri: string): Promise Date: Wed, 18 Feb 2026 13:02:12 +0530 Subject: [PATCH 011/343] Implement diagram on connection click for tools --- .../ConnectorNode/ConnectorNodeWidget.tsx | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx index 3e21a6153eb..7c9462128bd 100644 --- a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx +++ b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx @@ -170,7 +170,7 @@ export function ConnectorNodeWidget(props: ConnectorNodeWidgetProps) { const connectionData: any = await rpcClient.getMiDiagramRpcClient().getConnectorConnections({ documentUri: node.documentUri, - connectorName: (node.stNode.tag === 'tool') ? + connectorName: (node.stNode.tag === 'tool') ? (node.stNode as Tool).mediator.connectorName : node.stNode.tag.split(".")[0] }); @@ -236,6 +236,35 @@ export function ConnectorNodeWidget(props: ConnectorNodeWidgetProps) { e.stopPropagation(); if (node.stNode.tag === 'tool') { + const connectionData: any = await rpcClient.getMiDiagramRpcClient().getConnectorConnections({ + documentUri: node.documentUri, + connectorName: isMCPTool ? 'ai' : (node.stNode as Tool).mediator.connectorName + }); + + const connectionName = isMCPTool ? (node.stNode as Tool).mcpConnection : (node.stNode as Tool).mediator.configKey; + const connection = connectionData.connections.find((item: any) => item.name === connectionName); + + if (!connection) { + return; + } + + const connector = await rpcClient.getMiDiagramRpcClient().getAvailableConnectors({ + documentUri: node.documentUri, + connectorName: isMCPTool ? 'ai' : (node.stNode as Tool).mediator.connectorName + }); + + rpcClient.getMiVisualizerRpcClient().openView({ + type: POPUP_EVENT_TYPE.OPEN_VIEW, + location: { + documentUri: connection.path, + view: MACHINE_VIEW.ConnectionForm, + customProps: { + connectionName: connection.name, + connector + } + }, + isPopup: true + }); return; } From e17675d55b779acb8c186c1bedf1769e1db31ac3 Mon Sep 17 00:00:00 2001 From: kaumini Date: Wed, 18 Feb 2026 13:24:13 +0530 Subject: [PATCH 012/343] Pass documenturi and range to get mcp tools --- .../mi-core/src/rpc-types/mi-diagram/types.ts | 2 ++ .../src/components/Form/FormGenerator.tsx | 2 ++ .../MCPtoolsSelection/McpToolsSelection.tsx | 17 +++++++++++++---- .../src/lang-client/ExtendedLanguageClient.ts | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts b/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts index 201b1f08e28..9f4a772f3ee 100644 --- a/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts +++ b/workspaces/mi/mi-core/src/rpc-types/mi-diagram/types.ts @@ -2105,6 +2105,8 @@ export interface UpdateMediatorRequest { } export interface McpToolsRequest { + documentUri: string; + range: Range; connectionName: string; } diff --git a/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx b/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx index 6c7e0227068..22736f19547 100644 --- a/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx +++ b/workspaces/mi/mi-diagram/src/components/Form/FormGenerator.tsx @@ -1296,6 +1296,8 @@ export function FormGenerator(props: FormGeneratorProps) { getValues={getValues} setError={setError} clearErrors={clearErrors} + documentUri={documentUri} + range={range} /> ); default: diff --git a/workspaces/mi/mi-diagram/src/components/Form/MCPtoolsSelection/McpToolsSelection.tsx b/workspaces/mi/mi-diagram/src/components/Form/MCPtoolsSelection/McpToolsSelection.tsx index e16b5e44d28..3afbe28588a 100644 --- a/workspaces/mi/mi-diagram/src/components/Form/MCPtoolsSelection/McpToolsSelection.tsx +++ b/workspaces/mi/mi-diagram/src/components/Form/MCPtoolsSelection/McpToolsSelection.tsx @@ -23,6 +23,7 @@ import { Button, CheckBox, ThemeColors, SearchBox, Codicon, Divider, Typography, import type { OptionProps } from "@wso2/ui-toolkit"; import { set } from "lodash"; import { useVisualizerContext } from "@wso2/mi-rpc-client/lib/context/mi-webview-context"; +import { Range } from "@wso2/mi-syntax-tree/lib/src"; import { MCP_TOOLS_LIST_MAX_HEIGHT_OFFSET } from "../../../resources/constants"; export interface McpTool { @@ -65,6 +66,8 @@ interface McpToolsSelectionProps { showValidationError?: boolean; resolutionError?: string; onSelectionChange?: (value: string[]) => void; + documentUri: string; + range: Range; selectedConnection?: string; control: any; setValue: (name: string, value: any) => void; @@ -427,7 +430,9 @@ export const McpToolsSelection: React.FC = ({ setValue, getValues, setError: setFormError, - clearErrors + clearErrors, + documentUri, + range }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [error, setError] = useState(""); @@ -443,7 +448,7 @@ export const McpToolsSelection: React.FC = ({ clearErrors?.('mcpTools'); } }, [error]); - + const fetchMcpTools = async () => { if (!selectedConnection) { setMcpTools([]); @@ -454,7 +459,11 @@ export const McpToolsSelection: React.FC = ({ setLoading(true); setError(""); try { - const mcpToolsResponse = await rpcClient.getMiDiagramRpcClient().getMcpTools({ connectionName: selectedConnection }); + const mcpToolsResponse = await rpcClient.getMiDiagramRpcClient().getMcpTools({ + documentUri: documentUri, + connectionName: selectedConnection, + range: range + }); if (mcpToolsResponse.error) { setError(mcpToolsResponse.error); @@ -481,7 +490,7 @@ export const McpToolsSelection: React.FC = ({ }; useEffect(() => { - // Retrieve mcp tools when selected connection changes + // Retrieve mcp tools when selected connection changes fetchMcpTools(); }, [rpcClient, selectedConnection]); diff --git a/workspaces/mi/mi-extension/src/lang-client/ExtendedLanguageClient.ts b/workspaces/mi/mi-extension/src/lang-client/ExtendedLanguageClient.ts index e6903eec640..cfb4f11b82c 100644 --- a/workspaces/mi/mi-extension/src/lang-client/ExtendedLanguageClient.ts +++ b/workspaces/mi/mi-extension/src/lang-client/ExtendedLanguageClient.ts @@ -481,6 +481,6 @@ export class ExtendedLanguageClient extends LanguageClient { } async getMcpTools(req: McpToolsRequest): Promise { - return this.sendRequest("synapse/getMCPTools", { connectionName: req.connectionName }); + return this.sendRequest("synapse/getMCPTools", { documentUri: Uri.file(req.documentUri).toString(), connectionName: req.connectionName, range: req.range }); } } From 90666bc7e429e932d07297246d1177f69b099287 Mon Sep 17 00:00:00 2001 From: kaumini Date: Wed, 18 Feb 2026 13:51:51 +0530 Subject: [PATCH 013/343] Group mcp tools with same connection --- .../ConnectorNode/ConnectorNodeWidget.tsx | 8 ++++-- .../src/visitors/NodeFactoryVisitor.ts | 28 ++++++++++++++++--- .../src/visitors/PositionVisitor.ts | 21 ++++++++++++-- .../mi-diagram/src/visitors/SizingVisitor.ts | 20 +++++++++++-- .../syntax-tree/src/syntax-tree-interfaces.ts | 2 ++ 5 files changed, 67 insertions(+), 12 deletions(-) diff --git a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx index 7c9462128bd..85717cbad24 100644 --- a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx +++ b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx @@ -332,10 +332,14 @@ export function ConnectorNodeWidget(props: ConnectorNodeWidgetProps) { )}
- {FirstCharToUpperCase((isMCPTool ? "MCP Tool" : connectorNode.method))} + {FirstCharToUpperCase((isMCPTool ? "MCP Tools" : connectorNode.method))}
- {FirstCharToUpperCase(connectorNode.connectorName ?? (connectorNode as any).name)} + + {isMCPTool + ? (node.stNode as Tool).mcpToolNames?.join(', ') || '' + : FirstCharToUpperCase(connectorNode.connectorName ?? (connectorNode as any).name)} +
diff --git a/workspaces/mi/mi-diagram/src/visitors/NodeFactoryVisitor.ts b/workspaces/mi/mi-diagram/src/visitors/NodeFactoryVisitor.ts index 4194205cab0..de904c48a4c 100644 --- a/workspaces/mi/mi-diagram/src/visitors/NodeFactoryVisitor.ts +++ b/workspaces/mi/mi-diagram/src/visitors/NodeFactoryVisitor.ts @@ -83,7 +83,8 @@ import { DbMediator, Rewrite, Query, - ThrowError + ThrowError, + Tool } from "@wso2/mi-syntax-tree/lib/src"; import { NodeLinkModel } from "../components/NodeLink/NodeLinkModel"; import { MediatorNodeModel } from "../components/nodes/MediatorNode/MediatorNodeModel"; @@ -728,14 +729,33 @@ export class NodeFactoryVisitor implements Visitor { if (tools) { if (toolsList?.length > 0) { this.parents.push(node); - for (let i = 0; i < toolsList.length; i++) { - const toolNode = toolsList[i]; + const toolsWithUniqueConnections = toolsList.filter((tool: Tool, index: number) => { + const isMcpTool = tool.isMcpTool; + if (!isMcpTool) { + return true; // Include all non-MCP tools + } + // For MCP tools, only include the first one with each unique connection name + const connectionName = tool.mcpConnection; + if (!connectionName) { + return false; + } + const firstIndex = toolsList.findIndex((t: Tool) => t.mcpConnection === connectionName); + return index === firstIndex; + }); + + for (let i = 0; i < toolsWithUniqueConnections.length; i++) { + const toolNode = toolsWithUniqueConnections[i]; const isMCPTool = toolNode.isMcpTool; if (isMCPTool) { + if (toolNode.mcpConnection) { + toolNode.mcpToolNames = toolsList + .filter((t: Tool) => t.mcpConnection === toolNode.mcpConnection) + .map((t: Tool) => t.name); + } this.createNodeAndLinks({ node: toolNode, name: toolNode.tag, type: NodeTypes.CONNECTOR_NODE, dontLink: true }); continue; } - if(toolNode.mediator == undefined) { + if (toolNode.mediator == undefined) { continue; } const isConnector = toolNode.mediator?.connectorName !== undefined; diff --git a/workspaces/mi/mi-diagram/src/visitors/PositionVisitor.ts b/workspaces/mi/mi-diagram/src/visitors/PositionVisitor.ts index 598eff9fdcf..4a45910fbe2 100644 --- a/workspaces/mi/mi-diagram/src/visitors/PositionVisitor.ts +++ b/workspaces/mi/mi-diagram/src/visitors/PositionVisitor.ts @@ -81,7 +81,8 @@ import { DbMediator, Rewrite, Query, - ThrowError + ThrowError, + Tool } from "@wso2/mi-syntax-tree/lib/src"; import { ADD_NEW_SEQUENCE_TAG, NODE_DIMENSIONS, NODE_GAP, NodeTypes } from "../resources/constants"; import { getTextSizes } from "../utils/node"; @@ -529,8 +530,22 @@ export class PositionVisitor implements Visitor { let y = toolsStartY; if (toolsList?.length > 0) { - for (let i = 0; i < toolsList.length; i++) { - const toolNode = toolsList[i]; + const toolsWithUniqueConnections = toolsList.filter((tool: Tool, index: number) => { + const isMcpTool = tool.isMcpTool; + if (!isMcpTool) { + return true; // Include all non-MCP tools + } + // For MCP tools, only include the first one with each unique connection name + const connectionName = tool.mcpConnection; + if (!connectionName) { + return false; + } + const firstIndex = toolsList.findIndex((t: Tool) => t.mcpConnection === connectionName); + return index === firstIndex; + }); + + for (let i = 0; i < toolsWithUniqueConnections.length; i++) { + const toolNode = toolsWithUniqueConnections[i]; toolNode.viewState.x = this.position.x - (toolNode.viewState.w / 2); toolNode.viewState.y = y; diff --git a/workspaces/mi/mi-diagram/src/visitors/SizingVisitor.ts b/workspaces/mi/mi-diagram/src/visitors/SizingVisitor.ts index e22b1312fda..31280dcae7c 100644 --- a/workspaces/mi/mi-diagram/src/visitors/SizingVisitor.ts +++ b/workspaces/mi/mi-diagram/src/visitors/SizingVisitor.ts @@ -603,8 +603,22 @@ export class SizingVisitor implements Visitor { if (tools) { if (toolsList?.length > 0) { - for (let i = 0; i < toolsList.length; i++) { - const toolNode = toolsList[i]; + const toolsWithUniqueConnections = toolsList.filter((tool: Tool, index: number) => { + const isMcpTool = tool.isMcpTool; + if (!isMcpTool) { + return true; // Include all non-MCP tools + } + // For MCP tools, only include the first one with each unique connection name + const connectionName = tool.mcpConnection; + if (!connectionName) { + return false; + } + const firstIndex = toolsList.findIndex((t: Tool) => t.mcpConnection === connectionName); + return index === firstIndex; + }); + + for (let i = 0; i < toolsWithUniqueConnections.length; i++) { + const toolNode = toolsWithUniqueConnections[i]; const isConnector = toolNode.mediator?.connectorName !== undefined; toolNode.viewState = { x: 0, @@ -615,7 +629,7 @@ export class SizingVisitor implements Visitor { l: isConnector ? NODE_DIMENSIONS.CONNECTOR.WIDTH / 2 : NODE_DIMENSIONS.DEFAULT.WIDTH / 2, r: isConnector ? NODE_DIMENSIONS.CONNECTOR.FULL_WIDTH - NODE_DIMENSIONS.CONNECTOR.WIDTH / 2 : NODE_DIMENSIONS.DEFAULT.WIDTH / 2 } - const isLastChild = i === toolsList.length - 1; + const isLastChild = i === toolsWithUniqueConnections.length - 1; const nodeGap = isLastChild ? 0 : NODE_GAP.AI_AGENT_TOOLS_Y; toolsHeight += toolNode.viewState.h + nodeGap; diff --git a/workspaces/mi/syntax-tree/src/syntax-tree-interfaces.ts b/workspaces/mi/syntax-tree/src/syntax-tree-interfaces.ts index 253f34b8f04..5ae83ea7303 100644 --- a/workspaces/mi/syntax-tree/src/syntax-tree-interfaces.ts +++ b/workspaces/mi/syntax-tree/src/syntax-tree-interfaces.ts @@ -1891,6 +1891,8 @@ export interface Tool extends STNode { template: string; mediator: Connector; isMcpTool?: boolean; + mcpConnection?: string; + mcpToolNames?: string[]; } export interface ConnectorParameter extends STNode { From 24fa523260658c01814948a8d377c0b88ba34828 Mon Sep 17 00:00:00 2001 From: kaumini Date: Wed, 18 Feb 2026 14:53:43 +0530 Subject: [PATCH 014/343] Render connector icon on mcp edit form --- .../mi/mi-diagram/src/components/nodes/BaseNodeModel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts b/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts index 07a75592adc..a259b903eeb 100644 --- a/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts +++ b/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts @@ -125,7 +125,7 @@ export class BaseNodeModel extends NodeModel { } } - if (node.stNode.tag.includes('.')) { + if (node.stNode.tag.includes('.') || node.stNode.tag === "tool") { operationName = "connector"; @@ -133,7 +133,7 @@ export class BaseNodeModel extends NodeModel { const connectorData = await rpcClient.getMiDiagramRpcClient().getAvailableConnectors({ documentUri: node.documentUri, - connectorName: connectorNode.tag.split(".")[0] + connectorName: (stNode as Tool).isMcpTool ? 'ai' : connectorNode.tag.split(".")[0] }); const connectorOperationName = connectorNode.tag.split(/\.(.+)/)[1]; From b0a2eed488f57ac5c47ff1e356ec0ac3935dd9ad Mon Sep 17 00:00:00 2001 From: kaumini Date: Wed, 18 Feb 2026 14:57:41 +0530 Subject: [PATCH 015/343] Update mcp edit form title --- workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts b/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts index a259b903eeb..059885d54c9 100644 --- a/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts +++ b/workspaces/mi/mi-diagram/src/components/nodes/BaseNodeModel.ts @@ -152,7 +152,7 @@ export class BaseNodeModel extends NodeModel { } else { formData = { form: formJSON, - title: `${FirstCharToUpperCase(operationName)} Operation`, + title: node.stNode.tag === "tool" ? "Tool Operation" : `${FirstCharToUpperCase(operationName)} Operation`, uiSchemaPath: connectorData.uiSchemaPath, parameters: connectorNode.parameters ?? [], connectorName: connectorData.name, From d6787519dd7b3d3100bc2be8b2c95813bc1a4ea6 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 17:00:49 +0530 Subject: [PATCH 016/343] Fix vulnerabilities --- common/config/rush/.pnpmfile.cjs | 16 +- common/config/rush/pnpm-lock.yaml | 1215 ++++++++++++++--------------- 2 files changed, 598 insertions(+), 633 deletions(-) diff --git a/common/config/rush/.pnpmfile.cjs b/common/config/rush/.pnpmfile.cjs index 907f3abecb7..45eac46fd64 100644 --- a/common/config/rush/.pnpmfile.cjs +++ b/common/config/rush/.pnpmfile.cjs @@ -41,7 +41,7 @@ module.exports = { pkg.dependencies['eslint'] = '^9.27.0'; } if (pkg.dependencies['fast-xml-parser']) { - pkg.dependencies['fast-xml-parser'] = '5.3.4'; + pkg.dependencies['fast-xml-parser'] = '5.3.6'; } if (pkg.dependencies['lodash']) { pkg.dependencies['lodash'] = '4.17.23'; @@ -55,15 +55,15 @@ module.exports = { if (pkg.dependencies['eslint']) { pkg.dependencies['eslint'] = '^9.27.0'; } - if (pkg.dependencies['fast-xml-parser']) { - pkg.dependencies['fast-xml-parser'] = '5.3.4'; - } if (pkg.dependencies['hono']) { pkg.dependencies['hono'] = '^4.11.7'; } if (pkg.dependencies['lodash']) { pkg.dependencies['lodash'] = '4.17.23'; } + if (pkg.dependencies['ajv']) { + pkg.dependencies['ajv'] = '8.18.0'; + } } if (pkg.devDependencies) { @@ -92,7 +92,7 @@ module.exports = { pkg.devDependencies['eslint'] = '^9.27.0'; } if (pkg.devDependencies['fast-xml-parser']) { - pkg.devDependencies['fast-xml-parser'] = '5.3.4'; + pkg.devDependencies['fast-xml-parser'] = '5.3.6'; } if (pkg.devDependencies['lodash']) { pkg.devDependencies['lodash'] = '4.17.23'; @@ -106,15 +106,15 @@ module.exports = { if (pkg.devDependencies['eslint']) { pkg.devDependencies['eslint'] = '^9.27.0'; } - if (pkg.devDependencies['fast-xml-parser']) { - pkg.devDependencies['fast-xml-parser'] = '5.3.4'; - } if (pkg.devDependencies['hono']) { pkg.devDependencies['hono'] = '^4.11.7'; } if (pkg.devDependencies['lodash']) { pkg.devDependencies['lodash'] = '4.17.23'; } + if (pkg.devDependencies['ajv']) { + pkg.devDependencies['ajv'] = '8.18.0'; + } } return pkg; diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 4eac4d3c631..7bbc6cc421f 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -3415,11 +3415,11 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit ajv: - specifier: 8.17.1 - version: 8.17.1 + specifier: 8.18.0 + version: 8.18.0 ajv-formats: specifier: 3.0.1 - version: 3.0.1(ajv@8.17.1) + version: 3.0.1(ajv@8.18.0) blueimp-md5: specifier: 2.19.0 version: 2.19.0 @@ -3818,8 +3818,8 @@ importers: specifier: 16.5.0 version: 16.5.0 fast-xml-parser: - specifier: 5.3.4 - version: 5.3.4 + specifier: 5.3.6 + version: 5.3.6 find-process: specifier: 1.4.10 version: 1.4.10 @@ -4108,8 +4108,8 @@ importers: specifier: 1.0.20 version: 1.0.20 fast-xml-parser: - specifier: 5.3.4 - version: 5.3.4 + specifier: 5.3.6 + version: 5.3.6 lodash: specifier: 4.17.23 version: 4.17.23 @@ -5848,8 +5848,8 @@ packages: '@codemirror/lint@6.8.5': resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} - '@codemirror/merge@6.11.2': - resolution: {integrity: sha512-NO5EJd2rLRbwVWLgMdhIntDIhfDtMOKYEZgqV5WnkNUS2oXOCVWLPjG/kgl/Jth2fGiOuG947bteqxP9nBXmMg==} + '@codemirror/merge@6.12.0': + resolution: {integrity: sha512-o+36bbapcEHf4Ux75pZ4CKjMBUd14parA0uozvWVlacaT+uxaA3DDefEvWYjngsKU+qsrDe/HOOfsw0Q72pLjA==} '@codemirror/search@6.6.0': resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} @@ -7226,8 +7226,8 @@ packages: '@lezer/cpp@1.1.5': resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==} - '@lezer/css@1.3.0': - resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} + '@lezer/css@1.3.1': + resolution: {integrity: sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==} '@lezer/go@1.0.1': resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} @@ -8597,14 +8597,14 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@redhat-developer/locators@1.18.1': - resolution: {integrity: sha512-fnb5prprb8jTzx9Vl2DiJq55XK7aZVwpDZV/iLY/pYsNWEn42/rLSyMUNDrvlhnFryqmVstmDUIr4eGE3iyDMw==} + '@redhat-developer/locators@1.19.0': + resolution: {integrity: sha512-BW2QRxuI94IuSTDZjMsNQ7OGODJkdD42hXjBe9PaqFtC0S56j4X+qG3QlDT2wf42ePKlitXoMMYh+Z/r1pIaKg==} peerDependencies: '@redhat-developer/page-objects': '>=1.0.0' selenium-webdriver: '>=4.6.1' - '@redhat-developer/page-objects@1.18.1': - resolution: {integrity: sha512-clwXbTAykhqJqUkdTWUtS7jwY1eQVhlgQia6GfmMHMLGxqMbHCgHVm0rEYoR1C050XWYxtfsEpnsmUB9Kjcs9A==} + '@redhat-developer/page-objects@1.19.0': + resolution: {integrity: sha512-uUOH31br3Ibjv4xZWF/fi0TPsOMe1oiwDm3SblJBYP/Q1rauMD/sKOQt3LGe1iZr/J9LsC8Bk0D/saqQAkVwjQ==} peerDependencies: selenium-webdriver: '>=4.6.1' typescript: '>=4.6.2' @@ -8927,8 +8927,8 @@ packages: resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.0': - resolution: {integrity: sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==} + '@smithy/core@3.23.2': + resolution: {integrity: sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.2.8': @@ -8991,12 +8991,12 @@ packages: resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.14': - resolution: {integrity: sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==} + '@smithy/middleware-endpoint@4.4.16': + resolution: {integrity: sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.31': - resolution: {integrity: sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==} + '@smithy/middleware-retry@4.4.33': + resolution: {integrity: sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -9043,8 +9043,8 @@ packages: resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.11.3': - resolution: {integrity: sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==} + '@smithy/smithy-client@4.11.5': + resolution: {integrity: sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==} engines: {node: '>=18.0.0'} '@smithy/types@4.12.0': @@ -9079,12 +9079,12 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.30': - resolution: {integrity: sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==} + '@smithy/util-defaults-mode-browser@4.3.32': + resolution: {integrity: sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.33': - resolution: {integrity: sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==} + '@smithy/util-defaults-mode-node@4.2.35': + resolution: {integrity: sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.2.8': @@ -10571,104 +10571,104 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@swagger-api/apidom-ast@1.4.0': - resolution: {integrity: sha512-vaN7kA/okd3dWn45BRdsPHgGfMQdjL3TqRcxTmb41q6SLRJezINTE5nyJ8qVmH9bverOTAfn5IjYziwhV0lh7A==} + '@swagger-api/apidom-ast@1.5.0': + resolution: {integrity: sha512-sSfoHE1Bb/FM4//sqsU9VN1refIRGd/RlIwsWJ132TJyEtMAw/Blo68hl4zTGh6ob89OZSKqQ0oZNmwickYhxA==} - '@swagger-api/apidom-core@1.4.0': - resolution: {integrity: sha512-otHtWG8J/0bvaKThUfbSuYG9ega1jAM4ugIcxQRRozOMS7r1+pTwntbY0my5MJwZ+TeBJfVA39NRjMPiPdGttg==} + '@swagger-api/apidom-core@1.5.0': + resolution: {integrity: sha512-esQ++pv78gCr8ZDdM9dfEjrOymcELzFmJCe5i3q8Q2pQSSkW+FUsUCaSP6mdB+HHqz4H9L+Jy9N7h4e/uVsCVQ==} - '@swagger-api/apidom-error@1.4.0': - resolution: {integrity: sha512-oYVvGSE/y7g2mNnfNPq1IrEhhEQ0Faz1YWZWpaLF786iT0lunzzph9JG1Q9YSl+Z5yZ6XsmbKSOdvql+gK9xCw==} + '@swagger-api/apidom-error@1.5.0': + resolution: {integrity: sha512-lSc/7wS/t4y6KmueouAopzZnm1r1/5QzcOUPmwQcDrnoLLqtfd2Hkp+v3a0vqHbbyUi+lHYmCA0JoITzbJYcgQ==} - '@swagger-api/apidom-json-pointer@1.4.0': - resolution: {integrity: sha512-LAMOgJaKy2id2zTmMmQzSEh4HahXYfWoR6pBsdNIKaLWx6sirznFnpKHa2+shfjksAkm0Gng5/eKO1jcdySOrw==} + '@swagger-api/apidom-json-pointer@1.5.0': + resolution: {integrity: sha512-YiRA7n6aOnXD6ZrZcp6avZiVz55rihye5gp4QB3+qEtfcOvFIG6jYRRawXO/1dj9haZvq/2gQys+kJSEQEhMhg==} - '@swagger-api/apidom-ns-api-design-systems@1.4.0': - resolution: {integrity: sha512-uRTqvqSUdQwkiNlO9QMPcpI5ZF7PbwnavFwIkupbkZDb5r+kSdgu4bepXY9BjzvVeiOWqyvviIfTeccVcVOCeA==} + '@swagger-api/apidom-ns-api-design-systems@1.5.0': + resolution: {integrity: sha512-jt8hCcN/NhmZPMMGy7DNbw1LHu7gUqcNkG840aC2OUVj+qHp7CDG7wing0F2zIW3+fDfw+UIiVzFy7oVbiiheg==} - '@swagger-api/apidom-ns-arazzo-1@1.4.0': - resolution: {integrity: sha512-gUWldcU8cCN4zYfpGdgK+rXFkcmNCv/g9eXOvQaAzYHp+N8mccRl5E0weEDRVvn9kUOA0bew7NjEEZhMulblWQ==} + '@swagger-api/apidom-ns-arazzo-1@1.5.0': + resolution: {integrity: sha512-ATkcwJfyu3rhwLwicCmARhfQM6/KRGZ2+Y5HuG5smPxzzDdgb0o5/VP9goSvxgfAveIJsEWFbP6CMm/LW4Gy3A==} - '@swagger-api/apidom-ns-asyncapi-2@1.4.0': - resolution: {integrity: sha512-QCzE1Dio18x/1oyElrMzwCOjnpQxlWErhcd4EIJCC61cblkHQC7feuhuZHVhH7dYqBehNH3lvJC/rBnUz8Fmlg==} + '@swagger-api/apidom-ns-asyncapi-2@1.5.0': + resolution: {integrity: sha512-luYRreqMhHRSGQWEOt8I8Pd12Up2tl66w1oCBBJHwzc97j8a9sN6S0s6FuJS+LLajJgyDwwL6msgP5r92W9Ppw==} - '@swagger-api/apidom-ns-asyncapi-3@1.4.0': - resolution: {integrity: sha512-XcPsuGVKO8ed8WDvA56UAUR6b8YgsL+JB/pQrSnUm2KRajg6+736c8L83a2EZB0ulaZOY2+Ex/bkuYNak0ceJA==} + '@swagger-api/apidom-ns-asyncapi-3@1.5.0': + resolution: {integrity: sha512-Xvj6tAVchSkki9rWb5d9KzHbr7f0EmO8tZ6rfqEQHlx+XGAOoMzlRrwjvPvrn/8+wOI8E/AxVw25TuRfxiHMAQ==} - '@swagger-api/apidom-ns-json-schema-2019-09@1.4.0': - resolution: {integrity: sha512-xvsYdcfk00vcDYAK+qA2PBQs/uyuYUc3Bubv19s8rRd+gykdzm+7vZjYEMXIZuqn4ao+DDe7kIFipx31Cz4zTw==} + '@swagger-api/apidom-ns-json-schema-2019-09@1.5.0': + resolution: {integrity: sha512-xd4Fhs3YSqKNDO7yhs7u+mcrEi9gBIo2i1NjUDAX4YLs4QPwACq4ruEp1VihSrgunv/A1dQvmQcLpjpTsoqtIg==} - '@swagger-api/apidom-ns-json-schema-2020-12@1.4.0': - resolution: {integrity: sha512-FOadSRcNmKmXDi71DpOaNyXIvIY13FSFzCVLoMrIJfAVMmuuWN+hgBjedjnp8mkRjzTW96XRjAuCQ1WUT2OCFA==} + '@swagger-api/apidom-ns-json-schema-2020-12@1.5.0': + resolution: {integrity: sha512-+WdWwrLpdZaEDqS5uzVUJ34emCZSNOzqs2AfrxopOenbQM/Th29lHrTt2Zu6L4xhlp8HTUaqIb8nnkjVd/wheg==} - '@swagger-api/apidom-ns-json-schema-draft-4@1.4.0': - resolution: {integrity: sha512-LKzAUqHEAgm4WmuYbhPCDycr1nO/G14NwNG35RQJHVZi+FRrvzFgD80h5yNNzYjXYtNQrRGtKPTR6LXImZjWag==} + '@swagger-api/apidom-ns-json-schema-draft-4@1.5.0': + resolution: {integrity: sha512-YxGZcTjXuKOPX2DHhSM3SBtxzriXs/8blNIBouIxqtalythud+nyi2sx1pQllBraBDsqQl3q5nCNXufum+TrNw==} - '@swagger-api/apidom-ns-json-schema-draft-6@1.4.0': - resolution: {integrity: sha512-QoxxQw0xDpFe2SYeX96Gt2rp1MSQcvSoiiV9yR6G9j0Jbr3bipFiI6rK4OFSXq3Wcalfccjz77aiG42K9QDWUQ==} + '@swagger-api/apidom-ns-json-schema-draft-6@1.5.0': + resolution: {integrity: sha512-OOzP1Xi/GETOQ4qEksoESsq7CV7mW51aYk8T7yKArWocT3dJ9pn6smmpNmd3MnGVXJFumscKHCQzYrjnCQE6/A==} - '@swagger-api/apidom-ns-json-schema-draft-7@1.4.0': - resolution: {integrity: sha512-jnjuj4n26FhS2ZXwA6n86PlRi2sZ5GIP18JBRLGwDxTRCEqguX7Ar1NgKDn9VCoCmSZQ04ebLoipFGafvlA3VA==} + '@swagger-api/apidom-ns-json-schema-draft-7@1.5.0': + resolution: {integrity: sha512-lL8S8Qmm5gc386bYfO4ptL1BVlN5Htg3QITXew8y6EItAo8syXCPkWy7h8JXC76vGVMNLr1KAISuZ0dzqz3Yow==} - '@swagger-api/apidom-ns-openapi-2@1.4.0': - resolution: {integrity: sha512-2Uxy+dv4oU5Zw03Twkoxz1FWz4117Sz6UEWUmRaFsijGpaxWkauy6tBpp/U43D86eMRpkR6Jb6OA+UTaENYxxQ==} + '@swagger-api/apidom-ns-openapi-2@1.5.0': + resolution: {integrity: sha512-i8quM2983OaWJf4/44CeFwzZI0Kr0W4i54lfbKw88kcZWgYB5OXqdUcbOX9g15z2bd+IpmLzmeWjY5O0WiXWKg==} - '@swagger-api/apidom-ns-openapi-3-0@1.4.0': - resolution: {integrity: sha512-012Zx/r6ncajjc98AzZNDUpt1ShXwutUtrvCuBoz8dwQzpJfPc2HNGMM6tOvYX/isqzeCG7+zlKEG8tEv0X1RA==} + '@swagger-api/apidom-ns-openapi-3-0@1.5.0': + resolution: {integrity: sha512-P+97SVL+uomuO1lmByBcXZLkZjHJCZ/7hTPbMmmm40f0J6Se46tRuakImaQLtZld5X067aSxYVo9/npm+VecMQ==} - '@swagger-api/apidom-ns-openapi-3-1@1.4.0': - resolution: {integrity: sha512-ZW91r56RyalrNdxB4vnJNOXLNi/iQZSyvUjNDkJAO5e8/z3Hf7evU1ftCpgvsQVwiVXOG+b5KfgOw3Lwbc+a2w==} + '@swagger-api/apidom-ns-openapi-3-1@1.5.0': + resolution: {integrity: sha512-8tIL0Kz+3FYelW+zoWd8/5Pj5neDOD4nOV4GJbmLntfQRjboi1ki/eoKqHJvhBBrMSzgBZidgBauzK7HipTZ8A==} - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.4.0': - resolution: {integrity: sha512-XtLjh4dHQZwLkqhYSA2Uizu33/MrJsnk2KYXujokMJN4BkfGa6thzzvjTUCC7ZFQW6hV2aMm6tmwm51UdWCCMQ==} + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.5.0': + resolution: {integrity: sha512-BeX09CAvJYuwwg6uxtHBWOdrviF7Q0ylve2Qc4U5M8TST5Cff2X8H6y26WU6ss6te/VsFYMtkZw6uYf78m9kXA==} - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.4.0': - resolution: {integrity: sha512-1adlUHS7X1FAFVFb/3XnLh/D8PLcbBcf40OXmIpdQW92fIUdhhUJfuthTD6i4no0bEplkFATyO6Yd6LYNAGSCw==} + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.5.0': + resolution: {integrity: sha512-OBP/ccJLkZA0TEgzZvzuVOnv/2ic1Q3xW1BkTEGUapAqG0qBuUFNVjiIBVWKbPA88BP4vamvTxtT/nhnraC04w==} - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.4.0': - resolution: {integrity: sha512-Xqzi8ciYxNaMIXLtWh/80xQAh6ulqd/yOxDXJKdQqAQSExGwRI3bXHo0ynIvMJIkO049VKDhvqmTv1vEmZwQUA==} + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.5.0': + resolution: {integrity: sha512-mpJoq0zhvweYoctl8IfjcmYPQVWaFptEpNq0AtjXYvHp1bNNTLV/Q+oRKOO4odSPTyoHVzJjahtwgxP1DqXBag==} - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.4.0': - resolution: {integrity: sha512-HkWOuNjKnzgaa/ZCSLT1v+kqBof1dou6m3dXUfWw/hTpXk4Pp/kwKtqz9n+LCvG2bNfVEZFvwgGF3N6ZSujdog==} + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.5.0': + resolution: {integrity: sha512-WNC4C8U+cb8kprYFWziMtnO+9/mZuJ5BYXCe79vCH9G9CTDcmoDD1HeYkpAon4BKAI4jNbsZ4boF09ineAHFSQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.4.0': - resolution: {integrity: sha512-i0WWw0xPZvPf3jTET0YzE8INu7PyNTyypD09WCKhhKgmFpNmZ2SHbHTP6+/OTTRu4nId9+icD6cHKCma0/W2tQ==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.5.0': + resolution: {integrity: sha512-9xL8PTHqBv1oBZpTlST596n/TBAuHRa+t41OrThQIg+6mqkQFy6jqf/nFFe4B6MQyOURNLcII4VNcdBVwvHSpQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.4.0': - resolution: {integrity: sha512-zKklrdThBa9yqmYeZYyX5zd0NKCLIUOIkV1HtMXsCg2f9ceTHldtenn3RvqYMY0EDd6IpVRfLfOhUNPpttTLOg==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.5.0': + resolution: {integrity: sha512-ySX+YuSMiJUR5CMox3GBotiT9vtA7jdZz+ZD7XC2zb4RGfayGtHX02QBqBarlgoZIVorP4+ps6ol0+Zg55vbYA==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.4.0': - resolution: {integrity: sha512-+hzzfCSJ8KaoApYmI22aYKoXi0La0/696FaOnCloPloKZwcPvjR5S7WxleZTMuAcXzeM4R/92LbD5BTUein4Ow==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.5.0': + resolution: {integrity: sha512-E+SY7E1nE4A40fgrZvKy0U0nXYAWk4sHTCIp0uxpfkzBXq5wp7IU+wr6E56THzuNF0HaNMzzSfi6agNad30bPg==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.4.0': - resolution: {integrity: sha512-R7cbEbFYTJ8hCV04VkaRap54T0t4Q+v9gXvxVf+Kn1csRXoR0O/yJBakCcmv7taswzv+1dCWbjJOJSHDJFIB0w==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.5.0': + resolution: {integrity: sha512-NCwY+ZcmEjwabbDp1/uQtnNWfSd1KI9ikM6McM4aOWHp4b24AdClbTl1W5QXskM2f9g45TadmWR8Ol7yex6H3g==} - '@swagger-api/apidom-parser-adapter-json@1.4.0': - resolution: {integrity: sha512-QfwjuG1UaEYGf+tpPfN6GAZTJezhq2uy5Dgxmxe1f9Z/0V3mZmmdFck+NEXU698tAvFsf+qMeFmeR22EB4mzSg==} + '@swagger-api/apidom-parser-adapter-json@1.5.0': + resolution: {integrity: sha512-pSavF+9zuaaEoQ5lHqfYoHpo4sKBAnZGQcLAGI6ZhpNOHkxFkcmDd/hNYI0gM9g7NuwX6+xFBZi29OYsA4qtlw==} - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.4.0': - resolution: {integrity: sha512-1crFQpjzGod/wdW8BE1C8j/qMe02EaUlXt8ZWePns3GzEWSEdxRuiiNh/b0EzXVlAUStcRigzaajNsn+KT3tUA==} + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.5.0': + resolution: {integrity: sha512-O9ndJK/oOiPnY0UmrqIDYFAL4bODT3PJFa8bVVORKr+ZdUPg/xRZL/kgWgA8uOBfTuKU57sQvFvTOV8omyeURQ==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.4.0': - resolution: {integrity: sha512-K7r2qZ3wNu+ql4yUsTILbMCTZ5BY0deEi+ig+9KskRqjJ/0TZeeqq3rj8GCgHw7ocQh2WnMBeGGX1YO8bWBAUQ==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.5.0': + resolution: {integrity: sha512-qxh/sV54E6Y8VknvzAu/21r8ElxB1N3mmCnxTh1q6AUo6MX0SWCmnL1E2v3/2/HlJAA6yHW4RjwdKAv90Wklxw==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.4.0': - resolution: {integrity: sha512-oECL5TrqbYzVRv17Jco1G3KruZkh7N7iKhfqgBcb1irZ4ozXNlv1FtZ8bZxpczXxvGhSkSLFKbEd0pHZaO0iPA==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.5.0': + resolution: {integrity: sha512-DAMwQlrZj8b9lBj4G4huWLPoOHmOASe0JFFfhu18kmcCFtUSOR5UsCTvbJDyOuztOyKCT/HIMXp3/OEKbU8y6w==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.4.0': - resolution: {integrity: sha512-Ai0j0oInutDAb0Lvpb/UBhatc0QOLgdYpAPupafvjCEFt6fTpomO2HjNA+4Z+0cqH69ggKgQ/ldJ5G8FgqKcrw==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.5.0': + resolution: {integrity: sha512-KHPrgAY1g5Fucy+BFDdzUrGaFaVr86d3IgWFvifnKUQGpz96zMMaGG+IWsUoSfoAQaJSHpz+SVnNFaIF2sLOfQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.4.0': - resolution: {integrity: sha512-DD6JwfHcywPxZl7e3UqeAU4qdzjQaVudUnnFHWH83m6qWEHldN1+vSfQTzn4DQgi9dz88XfIakUJ1HFHIfEBhg==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.5.0': + resolution: {integrity: sha512-owFoZyqiRsSUtDEuSafLGWHwupVeh+pcspfnQy2sl7bmYmsi73NMJpsdIMcizlyeOqav0MWQ7FNrBZOSctiPIQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.4.0': - resolution: {integrity: sha512-FWGMgP1iJGIXISLSyz0j/Pthux11H712gPYzaL7DRZz8wevQvgc4TrYF4hHZwSvN8xpEkJLURBclfwsLDKzIXQ==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.5.0': + resolution: {integrity: sha512-9NcPLDbXZTftx9cMDh9iW+nXLeFFFTCuRyXKvtV+tu3PEiACMUIi0ij5J6+NZ3sBQVaEp7qF7nqzPIT2JRZHzw==} - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.4.0': - resolution: {integrity: sha512-rqVxBEiuCyBbNhnFUsBxPEewFjKDBYkiFqJGmwNo79G51wJOK9GnSjT1AyMZ+fW3RDlDZ+HR8IojQCykhYoAGg==} + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.5.0': + resolution: {integrity: sha512-TBpyfwQ0aFWmVlpI4aKMVwoPM3bLxtc9MzDchjo5BXWLfpYIXNbI72VzzeEeUnauC9I5kTomT4xQKZQzNtEGnw==} - '@swagger-api/apidom-reference@1.4.0': - resolution: {integrity: sha512-MRqShsNMzigiJxFNYWF4YyPfzVNyEAm1E4DngYENuZxV+Hf+2Zri+DEk3FL6JPoDLLx/UYO1EB9S8VuPZeNT6g==} + '@swagger-api/apidom-reference@1.5.0': + resolution: {integrity: sha512-6PrvPqAecUcYkMlJGK4g7wEcpSAMTAOysxGAxfF42JRD6pAkAqAiGAzCGrucZXzK9UyRqfchloUlv/5fqnQ+CQ==} '@swaggerexpert/cookie@2.0.2': resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} @@ -11285,8 +11285,8 @@ packages: '@types/pretty-hrtime@1.0.3': resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} - '@types/prismjs@1.26.6': - resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + '@types/prismjs@1.26.5': + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -12291,14 +12291,8 @@ packages: peerDependencies: ajv: ^8.8.2 - ajv@5.5.2: - resolution: {integrity: sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==} - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} align-text@0.1.4: resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==} @@ -13156,8 +13150,8 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - balanced-match@4.0.2: - resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==} + balanced-match@4.0.3: + resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} base16@1.0.0: @@ -13255,8 +13249,8 @@ packages: bonjour-service@1.3.0: resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - bonjour@3.5.0: - resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} + bonjour@3.5.1: + resolution: {integrity: sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==} boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -13570,11 +13564,11 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-db@1.0.30001769: - resolution: {integrity: sha512-YUJlOqWziYAdXSnL60FU2Won9HqW/IY77M8xgDFMRj5+StEnycCnlKvORrMPAevdyfYd8W6pjQ2XaEiMyDocWA==} + caniuse-db@1.0.30001770: + resolution: {integrity: sha512-i1X+jYz8PDS/HHEaTN8YgX1G5yw2sPFVl00AlWnpz0lX3MLnXtowKCIOBZIQ05p24tLG6WUCP7ygi3TTXRuJ/g==} - caniuse-lite@1.0.30001769: - resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + caniuse-lite@1.0.30001770: + resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} canvas@3.2.1: resolution: {integrity: sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==} @@ -14373,8 +14367,8 @@ packages: webpack: optional: true - css-loader@7.1.3: - resolution: {integrity: sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==} + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -14832,9 +14826,6 @@ packages: dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dns-packet@1.3.4: - resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} - dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -15645,9 +15636,6 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - fast-deep-equal@1.1.0: - resolution: {integrity: sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -15680,8 +15668,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.4: - resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} + fast-xml-parser@5.3.6: + resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} hasBin: true fastest-levenshtein@1.0.16: @@ -15756,6 +15744,10 @@ packages: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -16682,8 +16674,8 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hono@4.11.9: - resolution: {integrity: sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==} + hono@4.11.10: + resolution: {integrity: sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg==} engines: {node: '>=16.9.0'} hookified@1.15.1: @@ -17527,8 +17519,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} is2@2.0.9: @@ -18308,12 +18300,6 @@ packages: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} - json-schema-traverse@0.3.1: - resolution: {integrity: sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -18456,8 +18442,8 @@ packages: resolution: {integrity: sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==} engines: {node: '>=4'} - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} + launch-editor@2.13.0: + resolution: {integrity: sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==} lazy-cache@1.0.4: resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} @@ -19276,8 +19262,8 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.2.0: - resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} + minimatch@10.2.1: + resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} engines: {node: 20 || >=22} minimatch@3.0.3: @@ -19451,10 +19437,6 @@ packages: multicast-dns-service-types@1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} - multicast-dns@6.2.3: - resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} - hasBin: true - multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -19574,6 +19556,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + node-fetch-commonjs@3.3.2: resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -21034,8 +21020,8 @@ packages: prosemirror-keymap@1.2.2: resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - prosemirror-markdown@1.13.4: - resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} + prosemirror-markdown@1.13.2: + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} prosemirror-model@1.25.4: resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} @@ -21996,8 +21982,9 @@ packages: resolve@1.6.0: resolution: {integrity: sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==} - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true responselike@3.0.0: @@ -22245,7 +22232,7 @@ packages: resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 + '@rspack/core': 0.x || 1.x node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 sass-embedded: '*' @@ -24044,8 +24031,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.21.0: - resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} unfetch@4.2.0: @@ -24263,9 +24250,6 @@ packages: upper-case@1.1.3: resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} @@ -24841,8 +24825,8 @@ packages: webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - webpack-sources@3.3.3: - resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + webpack-sources@3.3.4: + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} engines: {node: '>=10.13.0'} webpack-virtual-modules@0.2.2: @@ -25503,7 +25487,7 @@ snapshots: '@aws-sdk/util-user-agent-node': 3.816.0 '@aws-sdk/xml-builder': 3.804.0 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/eventstream-serde-browser': 4.2.8 '@smithy/eventstream-serde-config-resolver': 4.3.8 '@smithy/eventstream-serde-node': 4.2.8 @@ -25514,21 +25498,21 @@ snapshots: '@smithy/invalid-dependency': 4.2.8 '@smithy/md5-js': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -25554,26 +25538,26 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-node': 3.816.0 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -25585,15 +25569,15 @@ snapshots: '@aws-sdk/core@3.816.0': dependencies: '@aws-sdk/types': 3.804.0 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 - fast-xml-parser: 5.3.4 + fast-xml-parser: 5.3.6 tslib: 2.8.1 '@aws-sdk/credential-provider-env@3.816.0': @@ -25612,7 +25596,7 @@ snapshots: '@smithy/node-http-handler': 4.4.10 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.12 tslib: 2.8.1 @@ -25749,11 +25733,11 @@ snapshots: '@aws-sdk/core': 3.816.0 '@aws-sdk/types': 3.804.0 '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.2.0 '@smithy/util-middleware': 4.2.8 @@ -25772,7 +25756,7 @@ snapshots: '@aws-sdk/core': 3.816.0 '@aws-sdk/types': 3.804.0 '@aws-sdk/util-endpoints': 3.808.0 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -25792,26 +25776,26 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-node': 3.816.0 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -27845,7 +27829,7 @@ snapshots: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 - '@lezer/css': 1.3.0 + '@lezer/css': 1.3.1 '@codemirror/lang-go@6.0.1': dependencies: @@ -27864,7 +27848,7 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 - '@lezer/css': 1.3.0 + '@lezer/css': 1.3.1 '@lezer/html': 1.3.13 '@codemirror/lang-java@6.0.2': @@ -28048,7 +28032,7 @@ snapshots: '@codemirror/view': 6.38.8 crelt: 1.0.6 - '@codemirror/merge@6.11.2': + '@codemirror/merge@6.12.0': dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 @@ -28783,7 +28767,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: - ajv: 6.12.6 + ajv: 8.18.0 debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 @@ -28972,9 +28956,9 @@ snapshots: react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.6.0(react@18.2.0) - '@hono/node-server@1.19.9(hono@4.11.9)': + '@hono/node-server@1.19.9(hono@4.11.10)': dependencies: - hono: 4.11.9 + hono: 4.11.10 '@hookform/resolvers@2.8.0(react-hook-form@7.56.4(react@18.2.0))': dependencies: @@ -29904,7 +29888,7 @@ snapshots: '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.8 - '@lezer/css@1.3.0': + '@lezer/css@1.3.1': dependencies: '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -30043,7 +30027,7 @@ snapshots: dependencies: '@codemirror/lang-markdown': 6.5.0 '@codemirror/language-data': 6.5.2 - '@codemirror/merge': 6.11.2 + '@codemirror/merge': 6.12.0 '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@codesandbox/sandpack-react': 2.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -30233,7 +30217,7 @@ snapshots: '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - ajv: 6.12.6 + ajv: 8.18.0 class-variance-authority: 0.7.1 clsx: 2.1.1 cmdk: 1.1.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -30294,9 +30278,9 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0': dependencies: - '@hono/node-server': 1.19.9(hono@4.11.9) - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + '@hono/node-server': 1.19.9(hono@4.11.10) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 cors: 2.8.6 cross-spawn: 7.0.6 @@ -30304,7 +30288,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.11.9 + hono: 4.11.10 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -30638,7 +30622,7 @@ snapshots: optionalDependencies: '@types/webpack': 5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.18)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)))': @@ -30658,7 +30642,7 @@ snapshots: webpack-dev-server: 5.2.3(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -30668,14 +30652,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@4.10.0) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -30685,14 +30669,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -30702,7 +30686,7 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 @@ -30718,11 +30702,11 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 '@popperjs/core@2.11.8': {} @@ -32496,12 +32480,12 @@ snapshots: dependencies: react: 18.2.0 - '@redhat-developer/locators@1.18.1(@redhat-developer/page-objects@1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0)': + '@redhat-developer/locators@1.19.0(@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0)': dependencies: - '@redhat-developer/page-objects': 1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3) + '@redhat-developer/page-objects': 1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3) selenium-webdriver: 4.40.0 - '@redhat-developer/page-objects@1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3)': + '@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3)': dependencies: clipboardy: 5.3.0 clone-deep: 4.0.1 @@ -32677,7 +32661,7 @@ snapshots: '@secretlint/profiler': 10.2.2 '@secretlint/resolver': 10.2.2 '@secretlint/types': 10.2.2 - ajv: 8.17.1 + ajv: 8.18.0 debug: 4.4.3(supports-color@8.1.1) rc-config-loader: 4.1.3 transitivePeerDependencies: @@ -32757,7 +32741,7 @@ snapshots: '@sentry/webpack-plugin@1.20.1(encoding@0.1.13)': dependencies: '@sentry/cli': 1.77.3(encoding@0.1.13) - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - encoding - supports-color @@ -32837,7 +32821,7 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.23.0': + '@smithy/core@3.23.2': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -32941,9 +32925,9 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.14': + '@smithy/middleware-endpoint@4.4.16': dependencies: - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/middleware-serde': 4.2.9 '@smithy/node-config-provider': 4.3.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -32952,12 +32936,12 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.31': + '@smithy/middleware-retry@4.4.33': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -33031,10 +33015,10 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.11.3': + '@smithy/smithy-client@4.11.5': dependencies: - '@smithy/core': 3.23.0 - '@smithy/middleware-endpoint': 4.4.14 + '@smithy/core': 3.23.2 + '@smithy/middleware-endpoint': 4.4.16 '@smithy/middleware-stack': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 @@ -33079,20 +33063,20 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.30': + '@smithy/util-defaults-mode-browser@4.3.32': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.33': + '@smithy/util-defaults-mode-node@4.2.35': dependencies: '@smithy/config-resolver': 4.4.6 '@smithy/credential-provider-imds': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -33669,7 +33653,7 @@ snapshots: '@storybook/builder-webpack5': 6.5.9(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) transitivePeerDependencies: - '@storybook/mdx2-csf' - eslint @@ -34788,8 +34772,8 @@ snapshots: terser-webpack-plugin: 5.3.14(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: @@ -34873,7 +34857,7 @@ snapshots: browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2) + css-loader: 6.11.0(webpack@5.104.1) express: 4.22.1 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1) fs-extra: 11.3.0 @@ -34947,7 +34931,7 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2) + css-loader: 6.11.0(webpack@5.104.1) es-module-lexer: 1.7.0 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1) html-webpack-plugin: 5.6.6(webpack@5.104.1) @@ -34962,8 +34946,8 @@ snapshots: url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-dev-middleware: 6.1.3(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -35524,7 +35508,7 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -35660,7 +35644,7 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: typescript: 4.9.4 @@ -36645,7 +36629,7 @@ snapshots: '@storybook/core-server': 6.5.9(@storybook/builder-webpack5@6.5.9(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: '@storybook/builder-webpack5': 6.5.9(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) @@ -36667,7 +36651,7 @@ snapshots: '@storybook/core-server': 6.5.9(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: typescript: 4.9.4 transitivePeerDependencies: @@ -37247,7 +37231,7 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) telejson: 6.0.8 terser-webpack-plugin: 5.3.14(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack@5.104.1) ts-dedent: 2.2.0 @@ -37297,13 +37281,13 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) telejson: 6.0.8 terser-webpack-plugin: 5.3.14(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-virtual-modules: 0.4.6 optionalDependencies: typescript: 5.8.3 @@ -37493,7 +37477,7 @@ snapshots: semver: 7.7.4 storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -37649,7 +37633,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -37677,7 +37661,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -37687,7 +37671,7 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color @@ -37933,7 +37917,7 @@ snapshots: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -38061,7 +38045,7 @@ snapshots: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -38151,7 +38135,7 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: '@babel/core': 7.27.1 '@storybook/builder-webpack5': 6.5.9(eslint@9.39.2(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) @@ -38216,7 +38200,7 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@babel/core': 7.29.0 typescript: 4.9.4 @@ -38794,20 +38778,20 @@ snapshots: regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - '@swagger-api/apidom-ast@1.4.0': + '@swagger-api/apidom-ast@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-error': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) unraw: 3.0.0 - '@swagger-api/apidom-core@1.4.0': + '@swagger-api/apidom-core@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-ast': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 '@types/ramda': 0.30.2 minim: 0.23.8 ramda: 0.30.1 @@ -38815,246 +38799,246 @@ snapshots: short-unique-id: 5.3.2 ts-mixer: 6.0.4 - '@swagger-api/apidom-error@1.4.0': + '@swagger-api/apidom-error@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-json-pointer@1.4.0': + '@swagger-api/apidom-json-pointer@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 '@swaggerexpert/json-pointer': 2.10.2 - '@swagger-api/apidom-ns-api-design-systems@1.4.0': + '@swagger-api/apidom-ns-api-design-systems@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-arazzo-1@1.4.0': + '@swagger-api/apidom-ns-arazzo-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-2@1.4.0': + '@swagger-api/apidom-ns-asyncapi-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-3@1.4.0': + '@swagger-api/apidom-ns-asyncapi-3@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-json-schema-2019-09@1.4.0': + '@swagger-api/apidom-ns-json-schema-2019-09@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-2020-12@1.4.0': + '@swagger-api/apidom-ns-json-schema-2020-12@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-2019-09': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-4@1.4.0': + '@swagger-api/apidom-ns-json-schema-draft-4@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.4.0 - '@swagger-api/apidom-core': 1.4.0 + '@swagger-api/apidom-ast': 1.5.0 + '@swagger-api/apidom-core': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-6@1.4.0': + '@swagger-api/apidom-ns-json-schema-draft-6@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-7@1.4.0': + '@swagger-api/apidom-ns-json-schema-draft-7@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-6': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-2@1.4.0': + '@swagger-api/apidom-ns-openapi-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-openapi-3-0@1.4.0': + '@swagger-api/apidom-ns-openapi-3-0@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-1@1.4.0': + '@swagger-api/apidom-ns-openapi-3-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.4.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-json-pointer': 1.4.0 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.4.0 + '@swagger-api/apidom-ast': 1.5.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-json-pointer': 1.5.0 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.4.0': + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-api-design-systems': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-api-design-systems': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.4.0': + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-api-design-systems': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-api-design-systems': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.4.0': + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-arazzo-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-arazzo-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.4.0': + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-arazzo-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-arazzo-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.4.0': + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.4.0': + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-3': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-3': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.4.0': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.4.0': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-3': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-3': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-json@1.4.0': + '@swagger-api/apidom-parser-adapter-json@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.4.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-ast': 1.5.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) @@ -39063,78 +39047,78 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.4.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.4.0': + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.4.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-ast': 1.5.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) '@types/ramda': 0.30.2 ramda: 0.30.1 @@ -39143,11 +39127,11 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-reference@1.4.0': + '@swagger-api/apidom-reference@1.5.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 '@types/ramda': 0.30.2 axios: 1.13.5 minimatch: 7.4.6 @@ -39155,28 +39139,28 @@ snapshots: ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optionalDependencies: - '@swagger-api/apidom-json-pointer': 1.4.0 - '@swagger-api/apidom-ns-arazzo-1': 1.4.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.4.0 - '@swagger-api/apidom-ns-openapi-2': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.4.0 - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.4.0 - '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.4.0 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.4.0 - '@swagger-api/apidom-parser-adapter-json': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.4.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.4.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.4.0 + '@swagger-api/apidom-json-pointer': 1.5.0 + '@swagger-api/apidom-ns-arazzo-1': 1.5.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.5.0 + '@swagger-api/apidom-ns-openapi-2': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.5.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.5.0 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.5.0 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.5.0 + '@swagger-api/apidom-parser-adapter-json': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.5.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.5.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.0 transitivePeerDependencies: - debug @@ -39414,7 +39398,7 @@ snapshots: '@ts-morph/common@0.27.0': dependencies: fast-glob: 3.3.3 - minimatch: 10.2.0 + minimatch: 10.2.1 path-browserify: 1.0.1 '@tsconfig/node10@1.0.12': {} @@ -39819,7 +39803,7 @@ snapshots: '@types/pretty-hrtime@1.0.3': {} - '@types/prismjs@1.26.6': {} + '@types/prismjs@1.26.5': {} '@types/prop-types@15.7.15': {} @@ -40047,7 +40031,7 @@ snapshots: dependencies: '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -40059,7 +40043,7 @@ snapshots: dependencies: '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -40904,67 +40888,67 @@ snapshots: '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: envinfo: 7.21.0 - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': dependencies: - webpack-cli: 4.10.0(webpack@5.105.2) + webpack-cli: 4.10.0(webpack@5.104.1) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)': dependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.105.2)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.105.2)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.104.1)': dependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@xmldom/xmldom@0.7.13': {} @@ -41129,46 +41113,32 @@ snapshots: string.prototype.padstart: 3.1.7 symbol.prototype.description: 1.0.7 - ajv-errors@1.0.1(ajv@6.12.6): + ajv-errors@1.0.1(ajv@8.18.0): dependencies: - ajv: 6.12.6 + ajv: 8.18.0 ajv-formats@2.1.1: dependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-keywords@2.1.1(ajv@5.5.2): + ajv-keywords@2.1.1(ajv@8.18.0): dependencies: - ajv: 5.5.2 + ajv: 8.18.0 - ajv-keywords@3.5.2(ajv@6.12.6): + ajv-keywords@3.5.2(ajv@8.18.0): dependencies: - ajv: 6.12.6 + ajv: 8.18.0 - ajv-keywords@5.1.0(ajv@8.17.1): + ajv-keywords@5.1.0(ajv@8.18.0): dependencies: - ajv: 8.17.1 + ajv: 8.18.0 fast-deep-equal: 3.1.3 - ajv@5.5.2: - dependencies: - co: 4.6.0 - fast-deep-equal: 1.1.0 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.3.1 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -41528,7 +41498,7 @@ snapshots: autoprefixer@10.4.19(postcss@8.5.3): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -41538,7 +41508,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.4): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -41548,7 +41518,7 @@ snapshots: autoprefixer@6.7.7: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001769 + caniuse-db: 1.0.30001770 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 5.2.18 @@ -41557,7 +41527,7 @@ snapshots: autoprefixer@7.1.6: dependencies: browserslist: 2.11.3 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 6.0.23 @@ -41566,7 +41536,7 @@ snapshots: autoprefixer@9.8.8: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -41873,7 +41843,7 @@ snapshots: '@babel/core': 7.27.1 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) babel-messages@6.23.0: dependencies: @@ -42478,9 +42448,7 @@ snapshots: balanced-match@2.0.0: {} - balanced-match@4.0.2: - dependencies: - jackspeak: 4.2.3 + balanced-match@4.0.3: {} base16@1.0.0: {} @@ -42590,13 +42558,13 @@ snapshots: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 - bonjour@3.5.0: + bonjour@3.5.1: dependencies: array-flatten: 2.1.2 deep-equal: 1.1.2 dns-equal: 1.0.0 dns-txt: 2.0.2 - multicast-dns: 6.2.3 + multicast-dns: 7.2.5 multicast-dns-service-types: 1.1.0 boolbase@1.0.0: {} @@ -42657,7 +42625,7 @@ snapshots: brace-expansion@5.0.2: dependencies: - balanced-match: 4.0.2 + balanced-match: 4.0.3 braces@3.0.3: dependencies: @@ -42725,17 +42693,17 @@ snapshots: browserslist@1.7.7: dependencies: - caniuse-db: 1.0.30001769 + caniuse-db: 1.0.30001770 electron-to-chromium: 1.5.286 browserslist@2.11.3: dependencies: - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 electron-to-chromium: 1.5.286 browserslist@4.14.2: dependencies: - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 electron-to-chromium: 1.5.286 escalade: 3.2.0 node-releases: 1.1.77 @@ -42743,7 +42711,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 electron-to-chromium: 1.5.286 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -43026,20 +42994,20 @@ snapshots: caniuse-api@1.6.1: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001769 + caniuse-db: 1.0.30001770 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-db@1.0.30001769: {} + caniuse-db@1.0.30001770: {} - caniuse-lite@1.0.30001769: {} + caniuse-lite@1.0.30001770: {} canvas@3.2.1: dependencies: @@ -43162,7 +43130,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.21.0 + undici: 7.22.0 whatwg-mimetype: 4.0.0 chokidar@1.7.0: @@ -43329,7 +43297,7 @@ snapshots: clipboardy@4.0.0: dependencies: execa: 8.0.1 - is-wsl: 3.1.0 + is-wsl: 3.1.1 is64bit: 2.0.0 clipboardy@5.3.0: @@ -43337,7 +43305,7 @@ snapshots: clipboard-image: 0.1.0 execa: 9.6.1 is-wayland: 0.1.0 - is-wsl: 3.1.0 + is-wsl: 3.1.1 is64bit: 2.0.0 powershell-utils: 0.2.0 @@ -43980,7 +43948,7 @@ snapshots: semver: 6.3.1 webpack: 4.47.0 - css-loader@5.2.7(webpack@5.105.2): + css-loader@5.2.7(webpack@5.104.1): dependencies: icss-utils: 5.1.0(postcss@8.5.4) loader-utils: 2.0.4 @@ -44020,7 +43988,7 @@ snapshots: optionalDependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)) - css-loader@6.11.0(webpack@5.105.2): + css-loader@6.11.0(webpack@5.104.1): dependencies: icss-utils: 5.1.0(postcss@8.5.4) postcss: 8.5.4 @@ -44031,9 +43999,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - css-loader@7.1.3(webpack@5.105.2): + css-loader@7.1.2(webpack@5.104.1): dependencies: icss-utils: 5.1.0(postcss@8.5.4) postcss: 8.5.4 @@ -44573,11 +44541,6 @@ snapshots: dns-equal@1.0.0: {} - dns-packet@1.3.4: - dependencies: - ip: 1.1.9 - safe-buffer: 5.2.1 - dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -45308,7 +45271,7 @@ snapshots: object.hasown: 1.1.4 object.values: 1.2.1 prop-types: 15.8.1 - resolve: 2.0.0-next.5 + resolve: 2.0.0-next.6 semver: 6.3.1 string.prototype.matchall: 4.0.12 @@ -45329,7 +45292,7 @@ snapshots: object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 - resolve: 2.0.0-next.5 + resolve: 2.0.0-next.6 semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 @@ -45390,7 +45353,7 @@ snapshots: '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 + ajv: 8.18.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) @@ -45761,8 +45724,6 @@ snapshots: extsprintf@1.3.0: {} - fast-deep-equal@1.1.0: {} - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -45796,7 +45757,7 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.3.4: + fast-xml-parser@5.3.6: dependencies: strnum: 2.1.2 @@ -45879,6 +45840,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -45921,7 +45886,7 @@ snapshots: schema-utils: 3.3.0 webpack: 4.47.0 - file-loader@6.2.0(webpack@5.105.2): + file-loader@6.2.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 @@ -46286,7 +46251,7 @@ snapshots: typescript: 5.8.3 webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.104.1): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -46301,9 +46266,9 @@ snapshots: semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.104.1): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -46691,7 +46656,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.0 + minimatch: 10.2.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.1 @@ -46700,7 +46665,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.0 + minimatch: 10.2.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.1 @@ -46969,7 +46934,7 @@ snapshots: har-validator@5.1.5: dependencies: - ajv: 6.12.6 + ajv: 8.18.0 har-schema: 2.0.0 hard-rejection@2.1.0: {} @@ -47269,7 +47234,7 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hono@4.11.9: {} + hono@4.11.10: {} hookified@1.15.1: {} @@ -48094,7 +48059,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.0: + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -48900,7 +48865,10 @@ snapshots: pretty-format: 25.5.0 throat: 5.0.0 transitivePeerDependencies: + - bufferutil + - canvas - supports-color + - utf-8-validate jest-leak-detector@25.5.0: dependencies: @@ -49879,10 +49847,6 @@ snapshots: '@babel/runtime': 7.28.6 ts-algebra: 2.0.0 - json-schema-traverse@0.3.1: {} - - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} @@ -50040,7 +50004,7 @@ snapshots: dependencies: package-json: 4.0.1 - launch-editor@2.12.0: + launch-editor@2.13.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 @@ -51176,7 +51140,7 @@ snapshots: dependencies: schema-utils: 4.3.3 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) minim@0.23.8: dependencies: @@ -51186,7 +51150,7 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.2.0: + minimatch@10.2.1: dependencies: brace-expansion: 5.0.2 @@ -51456,11 +51420,6 @@ snapshots: multicast-dns-service-types@1.1.0: {} - multicast-dns@6.2.3: - dependencies: - dns-packet: 1.3.4 - thunky: 1.1.0 - multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 @@ -51551,6 +51510,13 @@ snapshots: node-domexception@1.0.0: {} + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-fetch-commonjs@3.3.2: dependencies: node-domexception: 1.0.0 @@ -51643,12 +51609,12 @@ snapshots: node-loader@2.0.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - node-loader@2.1.0(webpack@5.105.2): + node-loader@2.1.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) node-notifier@5.4.5: dependencies: @@ -52663,7 +52629,7 @@ snapshots: postcss: 8.5.3 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(webpack-cli@6.0.1) + webpack: 5.104.1(webpack-cli@6.0.1) transitivePeerDependencies: - typescript @@ -53119,7 +53085,7 @@ snapshots: prism-react-renderer@2.4.1(react@18.2.0): dependencies: - '@types/prismjs': 1.26.6 + '@types/prismjs': 1.26.5 clsx: 2.1.1 react: 18.2.0 @@ -53239,7 +53205,7 @@ snapshots: prosemirror-state: 1.4.3 w3c-keyname: 2.2.8 - prosemirror-markdown@1.13.4: + prosemirror-markdown@1.13.2: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.1 @@ -54727,9 +54693,12 @@ snapshots: dependencies: path-parse: 1.0.7 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -55014,7 +54983,7 @@ snapshots: dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: sass: 1.89.0 @@ -55053,43 +55022,43 @@ snapshots: schema-utils@0.3.0: dependencies: - ajv: 5.5.2 + ajv: 8.18.0 schema-utils@0.4.7: dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) schema-utils@1.0.0: dependencies: - ajv: 6.12.6 - ajv-errors: 1.0.1(ajv@6.12.6) - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-errors: 1.0.1(ajv@8.18.0) + ajv-keywords: 3.5.2(ajv@8.18.0) schema-utils@2.7.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) schema-utils@2.7.1: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.17.1 + ajv: 8.18.0 ajv-formats: 2.1.1 - ajv-keywords: 5.1.0(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.18.0) secretlint@10.2.2: dependencies: @@ -55455,13 +55424,13 @@ snapshots: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - source-map-loader@5.0.0(webpack@5.105.2): + source-map-loader@5.0.0(webpack@5.104.1): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) source-map-resolve@0.6.0: dependencies: @@ -55926,13 +55895,13 @@ snapshots: schema-utils: 2.7.1 webpack: 4.47.0 - style-loader@1.3.0(webpack@5.105.2): + style-loader@1.3.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 schema-utils: 2.7.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - style-loader@2.0.0(webpack@5.105.2): + style-loader@2.0.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 @@ -55946,11 +55915,11 @@ snapshots: dependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)) - style-loader@3.3.4(webpack@5.105.2): + style-loader@3.3.4(webpack@5.104.1): dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - style-loader@4.0.0(webpack@5.105.2): + style-loader@4.0.0(webpack@5.104.1): dependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) @@ -56099,7 +56068,7 @@ snapshots: svg-tags@1.0.0: {} - svg-url-loader@8.0.0(webpack@5.105.2): + svg-url-loader@8.0.0(webpack@5.104.1): dependencies: file-loader: 6.2.0(webpack@5.104.1) webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) @@ -56190,11 +56159,11 @@ snapshots: dependencies: '@babel/runtime-corejs3': 7.29.0 '@scarf/scarf': 1.4.0 - '@swagger-api/apidom-core': 1.4.0 - '@swagger-api/apidom-error': 1.4.0 - '@swagger-api/apidom-json-pointer': 1.4.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.4.0 - '@swagger-api/apidom-reference': 1.4.0 + '@swagger-api/apidom-core': 1.5.0 + '@swagger-api/apidom-error': 1.5.0 + '@swagger-api/apidom-json-pointer': 1.5.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.5.0 + '@swagger-api/apidom-reference': 1.5.0 '@swaggerexpert/cookie': 2.0.2 deepmerge: 4.3.1 fast-json-patch: 3.1.1 @@ -56301,7 +56270,7 @@ snapshots: dependencies: '@swc/core': 1.15.11(@swc/helpers@0.5.18) '@swc/counter': 0.1.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) symbol-tree@3.2.4: {} @@ -56329,7 +56298,7 @@ snapshots: table@6.9.0: dependencies: - ajv: 8.17.1 + ajv: 8.18.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -57002,7 +56971,7 @@ snapshots: semver: 7.7.4 source-map: 0.7.6 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) ts-loader@9.5.2(typescript@5.8.3)(webpack@5.104.1): dependencies: @@ -57557,7 +57526,7 @@ snapshots: undici-types@6.21.0: {} - undici@7.21.0: {} + undici@7.22.0: {} unfetch@4.2.0: {} @@ -57841,10 +57810,6 @@ snapshots: upper-case@1.1.3: {} - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - urijs@1.19.11: {} url-join@1.1.0: {} @@ -57883,7 +57848,7 @@ snapshots: schema-utils: 3.3.0 webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@5.104.1) url-parse-lax@1.0.0: dependencies: @@ -58164,8 +58129,8 @@ snapshots: vscode-extension-tester@8.14.1(mocha@11.4.0)(typescript@5.8.3): dependencies: - '@redhat-developer/locators': 1.18.1(@redhat-developer/page-objects@1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0) - '@redhat-developer/page-objects': 1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3) + '@redhat-developer/locators': 1.19.0(@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0) + '@redhat-developer/page-objects': 1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3) '@types/selenium-webdriver': 4.35.5 '@vscode/vsce': 3.7.1 c8: 10.1.3 @@ -58191,8 +58156,8 @@ snapshots: vscode-extension-tester@8.14.1(mocha@11.5.0)(typescript@5.8.3): dependencies: - '@redhat-developer/locators': 1.18.1(@redhat-developer/page-objects@1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0) - '@redhat-developer/page-objects': 1.18.1(selenium-webdriver@4.40.0)(typescript@5.8.3) + '@redhat-developer/locators': 1.19.0(@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3))(selenium-webdriver@4.40.0) + '@redhat-developer/page-objects': 1.19.0(selenium-webdriver@4.40.0)(typescript@5.8.3) '@types/selenium-webdriver': 4.35.5 '@vscode/vsce': 3.7.1 c8: 10.1.3 @@ -58384,10 +58349,10 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.105.2) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.104.1) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.3) colorette: 2.0.20 @@ -58397,15 +58362,15 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) - webpack-cli@4.10.0(webpack@5.105.2): + webpack-cli@4.10.0(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.105.2) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.104.1) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) colorette: 2.0.20 @@ -58415,15 +58380,15 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) webpack-merge: 5.10.0 - webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.105.2) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.104.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -58432,17 +58397,17 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) - webpack-cli@5.1.4(webpack@5.105.2): + webpack-cli@5.1.4(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.105.2) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.104.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -58451,15 +58416,15 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-merge: 5.10.0 - webpack-cli@6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.105.2) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.104.1) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 @@ -58471,14 +58436,14 @@ snapshots: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) webpack-merge: 6.0.1 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) - webpack-cli@6.0.1(webpack@5.105.2): + webpack-cli@6.0.1(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 @@ -58487,7 +58452,7 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@6.0.1) + webpack: 5.104.1(webpack-cli@6.0.1) webpack-merge: 6.0.1 webpack-dev-middleware@1.12.2(webpack@3.8.1): @@ -58526,7 +58491,7 @@ snapshots: webpack: 4.47.0 webpack-log: 2.0.0 - webpack-dev-middleware@4.3.0(webpack@5.105.2): + webpack-dev-middleware@4.3.0(webpack@5.104.1): dependencies: colorette: 1.4.0 mem: 8.1.1 @@ -58556,7 +58521,7 @@ snapshots: optionalDependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)) - webpack-dev-middleware@6.1.3(webpack@5.105.2): + webpack-dev-middleware@6.1.3(webpack@5.104.1): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -58564,7 +58529,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))): dependencies: @@ -58578,7 +58543,7 @@ snapshots: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18)) optional: true - webpack-dev-middleware@7.4.5(webpack@5.105.2): + webpack-dev-middleware@7.4.5(webpack@5.104.1): dependencies: colorette: 2.0.20 memfs: 4.56.10 @@ -58587,13 +58552,13 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-dev-server@2.11.3(webpack@3.8.1): dependencies: ansi-html: 0.0.7 array-includes: 3.1.9 - bonjour: 3.5.0 + bonjour: 3.5.1 chokidar: 2.1.8 compression: 1.8.1 connect-history-api-fallback: 1.6.0 @@ -58640,7 +58605,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -58648,11 +58613,11 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil - debug @@ -58660,7 +58625,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.105.2): + webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -58680,7 +58645,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -58688,18 +58653,18 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@5.2.3(webpack-cli@6.0.1)(webpack@5.105.2): + webpack-dev-server@5.2.3(webpack-cli@6.0.1)(webpack@5.104.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -58719,7 +58684,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -58727,7 +58692,7 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) @@ -58758,7 +58723,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -58831,7 +58796,7 @@ snapshots: source-list-map: 2.0.1 source-map: 0.6.1 - webpack-sources@3.3.3: {} + webpack-sources@3.3.4: {} webpack-virtual-modules@0.2.2: dependencies: @@ -58847,8 +58812,8 @@ snapshots: dependencies: acorn: 5.7.4 acorn-dynamic-import: 2.0.2 - ajv: 5.5.2 - ajv-keywords: 2.1.1(ajv@5.5.2) + ajv: 8.18.0 + ajv-keywords: 2.1.1(ajv@8.18.0) async: 2.6.4 enhanced-resolve: 3.4.1 escope: 3.6.0 @@ -58875,8 +58840,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 @@ -58901,8 +58866,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 @@ -58929,8 +58894,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.18.0 + ajv-keywords: 3.5.2(ajv@8.18.0) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 @@ -58976,7 +58941,7 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - '@swc/core' - esbuild @@ -59008,7 +58973,7 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.18))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(esbuild@0.25.12)) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - '@swc/core' - esbuild @@ -59040,9 +59005,9 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.105.2) + webpack-cli: 5.1.4(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -59074,15 +59039,15 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@4.10.0): + webpack@5.104.1(webpack-cli@4.10.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -59108,15 +59073,15 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@5.1.4): + webpack@5.104.1(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -59142,15 +59107,15 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.105.2) + webpack-cli: 5.1.4(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@6.0.1): + webpack@5.104.1(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -59176,9 +59141,9 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.3.16(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 6.0.1(webpack@5.105.2) + webpack-cli: 6.0.1(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -59425,7 +59390,7 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.0 + is-wsl: 3.1.1 x-default-browser@0.4.0: optionalDependencies: From 84e3bab6e5b0fd33e76a78d0e33b9fdd3ba22f64 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 19:59:08 +0530 Subject: [PATCH 017/343] Update dependencies and remove ajv version override in rush configuration --- .../autoinstallers/rush-plugins/package.json | 2 +- .../rush-plugins/pnpm-lock.yaml | 134 +++++++++-------- common/config/rush/.pnpmfile.cjs | 6 - common/config/rush/pnpm-lock.yaml | 136 ++++++++++++------ 4 files changed, 154 insertions(+), 124 deletions(-) diff --git a/common/autoinstallers/rush-plugins/package.json b/common/autoinstallers/rush-plugins/package.json index 79e1f23ce5c..ee0acf67bb5 100644 --- a/common/autoinstallers/rush-plugins/package.json +++ b/common/autoinstallers/rush-plugins/package.json @@ -7,6 +7,6 @@ } }, "dependencies": { - "@gigara/rush-github-action-build-cache-plugin": "1.1.4" + "@gigara/rush-github-action-build-cache-plugin": "1.1.6" } } diff --git a/common/autoinstallers/rush-plugins/pnpm-lock.yaml b/common/autoinstallers/rush-plugins/pnpm-lock.yaml index 5bda77c3596..f26a0e79ba2 100644 --- a/common/autoinstallers/rush-plugins/pnpm-lock.yaml +++ b/common/autoinstallers/rush-plugins/pnpm-lock.yaml @@ -9,32 +9,28 @@ importers: .: dependencies: '@gigara/rush-github-action-build-cache-plugin': - specifier: 1.1.4 - version: 1.1.4 + specifier: 1.1.6 + version: 1.1.6 packages: - '@actions/cache@5.0.5': - resolution: {integrity: sha512-jiQSg0gfd+C2KPgcmdCOq7dCuCIQQWQ4b1YfGIRaaA9w7PJbRwTOcCz4LiFEUnqZGf0ha/8OKL3BeNwetHzYsQ==} + '@actions/cache@6.0.0': + resolution: {integrity: sha512-+tCs634SyGBQJ3KU1rtAVabmN/gYiT9WgzTSJzWwdPCLmM3zWrdbysaErKv8HyI6OozClrxNvDgPjJimbHZZvw==} - '@actions/core@2.0.3': - resolution: {integrity: sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==} + '@actions/core@3.0.0': + resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} - '@actions/exec@2.0.0': - resolution: {integrity: sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==} + '@actions/exec@3.0.0': + resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@actions/glob@0.5.1': - resolution: {integrity: sha512-+dv/t2aKQdKp9WWSp+1yIXVJzH5Q38M0Mta26pzIbeec14EcIleMB7UU6N7sNgbEuYfyuVGpE5pOKjl6j1WXkA==} + '@actions/glob@0.6.1': + resolution: {integrity: sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==} - '@actions/http-client@3.0.2': - resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} + '@actions/http-client@4.0.0': + resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==} - '@actions/io@2.0.0': - resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==} - - '@azure/abort-controller@1.1.0': - resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} - engines: {node: '>=12.0.0'} + '@actions/io@3.0.2': + resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} '@azure/abort-controller@2.1.2': resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} @@ -48,9 +44,12 @@ packages: resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} engines: {node: '>=20.0.0'} - '@azure/core-http-compat@2.3.1': - resolution: {integrity: sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==} + '@azure/core-http-compat@2.3.2': + resolution: {integrity: sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==} engines: {node: '>=20.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} @@ -80,16 +79,16 @@ packages: resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/storage-blob@12.30.0': - resolution: {integrity: sha512-peDCR8blSqhsAKDbpSP/o55S4sheNwSrblvCaHUZ5xUI73XA7ieUGGwrONgD/Fng0EoDe1VOa3fAQ7+WGB3Ocg==} + '@azure/storage-blob@12.31.0': + resolution: {integrity: sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==} engines: {node: '>=20.0.0'} '@azure/storage-common@12.3.0': resolution: {integrity: sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==} engines: {node: '>=20.0.0'} - '@gigara/rush-github-action-build-cache-plugin@1.1.4': - resolution: {integrity: sha512-KL87XJSiKwXEXtAj9g1CSOSFa02URE+PHZy/hnbLQNQuL/yGr3gvC+ZEhiYC5GL7/a+ZD+yaGJmU/KMX7NatOg==} + '@gigara/rush-github-action-build-cache-plugin@1.1.6': + resolution: {integrity: sha512-HYaKctlLpcn7or8rXxHYBfFCSv9pxLssRwwAtwggRbMCyZqfqRj2KtaTyKQeOgjJRBPMlncbQoy8L11uNQJvKg==} '@protobuf-ts/runtime-rpc@2.11.1': resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} @@ -97,8 +96,8 @@ packages: '@protobuf-ts/runtime@2.11.1': resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} - '@typespec/ts-http-runtime@0.3.2': - resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} + '@typespec/ts-http-runtime@0.3.3': + resolution: {integrity: sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==} engines: {node: '>=20.0.0'} agent-base@7.1.4: @@ -127,8 +126,8 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - fast-xml-parser@5.3.4: - resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} + fast-xml-parser@5.3.6: + resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} hasBin: true http-proxy-agent@7.0.2: @@ -145,8 +144,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} hasBin: true strnum@2.1.2: @@ -165,45 +165,40 @@ packages: snapshots: - '@actions/cache@5.0.5': + '@actions/cache@6.0.0': dependencies: - '@actions/core': 2.0.3 - '@actions/exec': 2.0.0 - '@actions/glob': 0.5.1 - '@actions/http-client': 3.0.2 - '@actions/io': 2.0.0 - '@azure/abort-controller': 1.1.0 + '@actions/core': 3.0.0 + '@actions/exec': 3.0.0 + '@actions/glob': 0.6.1 + '@actions/http-client': 4.0.0 + '@actions/io': 3.0.2 '@azure/core-rest-pipeline': 1.22.2 - '@azure/storage-blob': 12.30.0 + '@azure/storage-blob': 12.31.0 '@protobuf-ts/runtime-rpc': 2.11.1 - semver: 6.3.1 + semver: 7.7.4 transitivePeerDependencies: - supports-color - '@actions/core@2.0.3': + '@actions/core@3.0.0': dependencies: - '@actions/exec': 2.0.0 - '@actions/http-client': 3.0.2 + '@actions/exec': 3.0.0 + '@actions/http-client': 4.0.0 - '@actions/exec@2.0.0': + '@actions/exec@3.0.0': dependencies: - '@actions/io': 2.0.0 + '@actions/io': 3.0.2 - '@actions/glob@0.5.1': + '@actions/glob@0.6.1': dependencies: - '@actions/core': 2.0.3 + '@actions/core': 3.0.0 minimatch: 3.1.2 - '@actions/http-client@3.0.2': + '@actions/http-client@4.0.0': dependencies: tunnel: 0.0.6 undici: 6.23.0 - '@actions/io@2.0.0': {} - - '@azure/abort-controller@1.1.0': - dependencies: - tslib: 2.8.1 + '@actions/io@3.0.2': {} '@azure/abort-controller@2.1.2': dependencies: @@ -229,13 +224,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-http-compat@2.3.1': + '@azure/core-http-compat@2.3.2(@azure/core-client@1.10.1)(@azure/core-rest-pipeline@1.22.2)': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-client': 1.10.1 '@azure/core-rest-pipeline': 1.22.2 - transitivePeerDependencies: - - supports-color '@azure/core-lro@2.7.2': dependencies: @@ -257,7 +250,7 @@ snapshots: '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -269,29 +262,29 @@ snapshots: '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color '@azure/core-xml@1.5.0': dependencies: - fast-xml-parser: 5.3.4 + fast-xml-parser: 5.3.6 tslib: 2.8.1 '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/storage-blob@12.30.0': + '@azure/storage-blob@12.31.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 '@azure/core-client': 1.10.1 - '@azure/core-http-compat': 2.3.1 + '@azure/core-http-compat': 2.3.2(@azure/core-client@1.10.1)(@azure/core-rest-pipeline@1.22.2) '@azure/core-lro': 2.7.2 '@azure/core-paging': 1.6.2 '@azure/core-rest-pipeline': 1.22.2 @@ -299,17 +292,17 @@ snapshots: '@azure/core-util': 1.13.1 '@azure/core-xml': 1.5.0 '@azure/logger': 1.3.0 - '@azure/storage-common': 12.3.0 + '@azure/storage-common': 12.3.0(@azure/core-client@1.10.1) events: 3.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/storage-common@12.3.0': + '@azure/storage-common@12.3.0(@azure/core-client@1.10.1)': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-http-compat': 2.3.1 + '@azure/core-http-compat': 2.3.2(@azure/core-client@1.10.1)(@azure/core-rest-pipeline@1.22.2) '@azure/core-rest-pipeline': 1.22.2 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 @@ -317,12 +310,13 @@ snapshots: events: 3.3.0 tslib: 2.8.1 transitivePeerDependencies: + - '@azure/core-client' - supports-color - '@gigara/rush-github-action-build-cache-plugin@1.1.4': + '@gigara/rush-github-action-build-cache-plugin@1.1.6': dependencies: - '@actions/cache': 5.0.5 - '@actions/core': 2.0.3 + '@actions/cache': 6.0.0 + '@actions/core': 3.0.0 transitivePeerDependencies: - supports-color @@ -332,7 +326,7 @@ snapshots: '@protobuf-ts/runtime@2.11.1': {} - '@typespec/ts-http-runtime@0.3.2': + '@typespec/ts-http-runtime@0.3.3': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -357,7 +351,7 @@ snapshots: events@3.3.0: {} - fast-xml-parser@5.3.4: + fast-xml-parser@5.3.6: dependencies: strnum: 2.1.2 @@ -381,7 +375,7 @@ snapshots: ms@2.1.3: {} - semver@6.3.1: {} + semver@7.7.4: {} strnum@2.1.2: {} diff --git a/common/config/rush/.pnpmfile.cjs b/common/config/rush/.pnpmfile.cjs index 45eac46fd64..f4a29d688e4 100644 --- a/common/config/rush/.pnpmfile.cjs +++ b/common/config/rush/.pnpmfile.cjs @@ -61,9 +61,6 @@ module.exports = { if (pkg.dependencies['lodash']) { pkg.dependencies['lodash'] = '4.17.23'; } - if (pkg.dependencies['ajv']) { - pkg.dependencies['ajv'] = '8.18.0'; - } } if (pkg.devDependencies) { @@ -112,9 +109,6 @@ module.exports = { if (pkg.devDependencies['lodash']) { pkg.devDependencies['lodash'] = '4.17.23'; } - if (pkg.devDependencies['ajv']) { - pkg.devDependencies['ajv'] = '8.18.0'; - } } return pkg; diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 7bbc6cc421f..3b4a2c93af5 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -3415,11 +3415,11 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit ajv: - specifier: 8.18.0 - version: 8.18.0 + specifier: 8.17.1 + version: 8.17.1 ajv-formats: specifier: 3.0.1 - version: 3.0.1(ajv@8.18.0) + version: 3.0.1(ajv@8.17.1) blueimp-md5: specifier: 2.19.0 version: 2.19.0 @@ -12291,8 +12291,14 @@ packages: peerDependencies: ajv: ^8.8.2 - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@5.5.2: + resolution: {integrity: sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} align-text@0.1.4: resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==} @@ -15636,6 +15642,9 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} + fast-deep-equal@1.1.0: + resolution: {integrity: sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -18300,6 +18309,12 @@ packages: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} + json-schema-traverse@0.3.1: + resolution: {integrity: sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -24250,6 +24265,9 @@ packages: upper-case@1.1.3: resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} @@ -28767,7 +28785,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: - ajv: 8.18.0 + ajv: 6.12.6 debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 @@ -30217,7 +30235,7 @@ snapshots: '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - ajv: 8.18.0 + ajv: 6.12.6 class-variance-authority: 0.7.1 clsx: 2.1.1 cmdk: 1.1.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -30279,8 +30297,8 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0': dependencies: '@hono/node-server': 1.19.9(hono@4.11.10) - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 cors: 2.8.6 cross-spawn: 7.0.6 @@ -32661,7 +32679,7 @@ snapshots: '@secretlint/profiler': 10.2.2 '@secretlint/resolver': 10.2.2 '@secretlint/types': 10.2.2 - ajv: 8.18.0 + ajv: 8.17.1 debug: 4.4.3(supports-color@8.1.1) rc-config-loader: 4.1.3 transitivePeerDependencies: @@ -41113,32 +41131,46 @@ snapshots: string.prototype.padstart: 3.1.7 symbol.prototype.description: 1.0.7 - ajv-errors@1.0.1(ajv@8.18.0): + ajv-errors@1.0.1(ajv@6.12.6): dependencies: - ajv: 8.18.0 + ajv: 6.12.6 ajv-formats@2.1.1: dependencies: - ajv: 8.18.0 + ajv: 8.17.1 - ajv-formats@3.0.1(ajv@8.18.0): + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: - ajv: 8.18.0 + ajv: 8.17.1 + + ajv-keywords@2.1.1(ajv@5.5.2): + dependencies: + ajv: 5.5.2 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 - ajv-keywords@2.1.1(ajv@8.18.0): + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.18.0 + ajv: 8.17.1 + fast-deep-equal: 3.1.3 - ajv-keywords@3.5.2(ajv@8.18.0): + ajv@5.5.2: dependencies: - ajv: 8.18.0 + co: 4.6.0 + fast-deep-equal: 1.1.0 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.3.1 - ajv-keywords@5.1.0(ajv@8.18.0): + ajv@6.12.6: dependencies: - ajv: 8.18.0 fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -45353,7 +45385,7 @@ snapshots: '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 8.18.0 + ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) @@ -45724,6 +45756,8 @@ snapshots: extsprintf@1.3.0: {} + fast-deep-equal@1.1.0: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -46934,7 +46968,7 @@ snapshots: har-validator@5.1.5: dependencies: - ajv: 8.18.0 + ajv: 6.12.6 har-schema: 2.0.0 hard-rejection@2.1.0: {} @@ -49847,6 +49881,10 @@ snapshots: '@babel/runtime': 7.28.6 ts-algebra: 2.0.0 + json-schema-traverse@0.3.1: {} + + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} @@ -55022,43 +55060,43 @@ snapshots: schema-utils@0.3.0: dependencies: - ajv: 8.18.0 + ajv: 5.5.2 schema-utils@0.4.7: dependencies: - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@1.0.0: dependencies: - ajv: 8.18.0 - ajv-errors: 1.0.1(ajv@8.18.0) - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@2.7.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@2.7.1: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 + ajv: 8.17.1 ajv-formats: 2.1.1 - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv-keywords: 5.1.0(ajv@8.17.1) secretlint@10.2.2: dependencies: @@ -56298,7 +56336,7 @@ snapshots: table@6.9.0: dependencies: - ajv: 8.18.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -57810,6 +57848,10 @@ snapshots: upper-case@1.1.3: {} + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + urijs@1.19.11: {} url-join@1.1.0: {} @@ -58812,8 +58854,8 @@ snapshots: dependencies: acorn: 5.7.4 acorn-dynamic-import: 2.0.2 - ajv: 8.18.0 - ajv-keywords: 2.1.1(ajv@8.18.0) + ajv: 5.5.2 + ajv-keywords: 2.1.1(ajv@5.5.2) async: 2.6.4 enhanced-resolve: 3.4.1 escope: 3.6.0 @@ -58840,8 +58882,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 @@ -58866,8 +58908,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 @@ -58894,8 +58936,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 acorn: 6.4.2 - ajv: 8.18.0 - ajv-keywords: 3.5.2(ajv@8.18.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) chrome-trace-event: 1.0.4 enhanced-resolve: 4.5.0 eslint-scope: 4.0.3 From d1129d2fb25d0cdcff7dbc3cb74195c7e3e5bbf2 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 20:00:02 +0530 Subject: [PATCH 018/343] Update .trivyignore to include additional CVE for nested dependencies --- .trivyignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.trivyignore b/.trivyignore index e42fe3a6812..99d008c0490 100644 --- a/.trivyignore +++ b/.trivyignore @@ -7,3 +7,6 @@ CVE-2020-36851 # No fix released by the author CVE-2025-14505 + +# Library is used in nested dependencies and not directly used by our codebase. No fix released by the author. +CVE-2025-69873 From 0f5568a6f5dc0a9e36ab3c0d13f6ccbc97be4061 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 20:10:28 +0530 Subject: [PATCH 019/343] update lock file --- common/config/rush/pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 3b4a2c93af5..6c2351e049f 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -40912,7 +40912,7 @@ snapshots: '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: webpack: 5.104.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.104.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: @@ -40927,7 +40927,7 @@ snapshots: '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: webpack: 5.104.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.104.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: @@ -56653,7 +56653,7 @@ snapshots: schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.46.0 - webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.11(@swc/helpers@0.5.18) @@ -59151,7 +59151,7 @@ snapshots: watchpack: 2.5.1 webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.104.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild From ef42ea3a5fc41a9f8772c4b881b2196249f56d21 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 20:56:36 +0530 Subject: [PATCH 020/343] Update cache plugin version --- .../autoinstallers/rush-plugins/package.json | 2 +- .../rush-plugins/pnpm-lock.yaml | 82 +++++++++++++------ 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/common/autoinstallers/rush-plugins/package.json b/common/autoinstallers/rush-plugins/package.json index ee0acf67bb5..bec796b0a55 100644 --- a/common/autoinstallers/rush-plugins/package.json +++ b/common/autoinstallers/rush-plugins/package.json @@ -7,6 +7,6 @@ } }, "dependencies": { - "@gigara/rush-github-action-build-cache-plugin": "1.1.6" + "@gigara/rush-github-action-build-cache-plugin": "1.1.7" } } diff --git a/common/autoinstallers/rush-plugins/pnpm-lock.yaml b/common/autoinstallers/rush-plugins/pnpm-lock.yaml index f26a0e79ba2..c76b4eadbe2 100644 --- a/common/autoinstallers/rush-plugins/pnpm-lock.yaml +++ b/common/autoinstallers/rush-plugins/pnpm-lock.yaml @@ -9,29 +9,45 @@ importers: .: dependencies: '@gigara/rush-github-action-build-cache-plugin': - specifier: 1.1.6 - version: 1.1.6 + specifier: 1.1.7 + version: 1.1.7 packages: - '@actions/cache@6.0.0': - resolution: {integrity: sha512-+tCs634SyGBQJ3KU1rtAVabmN/gYiT9WgzTSJzWwdPCLmM3zWrdbysaErKv8HyI6OozClrxNvDgPjJimbHZZvw==} + '@actions/cache@5.0.3': + resolution: {integrity: sha512-9joY8Oup+nIpksSBlkuf9/mltnhWx3lydk1tA2PVnXaxFLIIrKqrWDN2CZXlJ+PEErcBARKYn4mHiUCTyMh4Vg==} + + '@actions/core@2.0.3': + resolution: {integrity: sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==} '@actions/core@3.0.0': resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} + '@actions/exec@2.0.0': + resolution: {integrity: sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==} + '@actions/exec@3.0.0': resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@actions/glob@0.6.1': - resolution: {integrity: sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==} + '@actions/glob@0.5.1': + resolution: {integrity: sha512-+dv/t2aKQdKp9WWSp+1yIXVJzH5Q38M0Mta26pzIbeec14EcIleMB7UU6N7sNgbEuYfyuVGpE5pOKjl6j1WXkA==} + + '@actions/http-client@3.0.2': + resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} '@actions/http-client@4.0.0': resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==} + '@actions/io@2.0.0': + resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==} + '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} + '@azure/abort-controller@1.1.0': + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} + engines: {node: '>=12.0.0'} + '@azure/abort-controller@2.1.2': resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} @@ -87,8 +103,8 @@ packages: resolution: {integrity: sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==} engines: {node: '>=20.0.0'} - '@gigara/rush-github-action-build-cache-plugin@1.1.6': - resolution: {integrity: sha512-HYaKctlLpcn7or8rXxHYBfFCSv9pxLssRwwAtwggRbMCyZqfqRj2KtaTyKQeOgjJRBPMlncbQoy8L11uNQJvKg==} + '@gigara/rush-github-action-build-cache-plugin@1.1.7': + resolution: {integrity: sha512-8074g5hjRJ9GFwsVtYfq9qM4b6mdeAxHZn1chi06Larb2D6SAtzcV1SIsVMgw/dVQdcq5YIgcrhDr9uEbNQZ4A==} '@protobuf-ts/runtime-rpc@2.11.1': resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} @@ -144,9 +160,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true strnum@2.1.2: @@ -165,41 +180,62 @@ packages: snapshots: - '@actions/cache@6.0.0': + '@actions/cache@5.0.3': dependencies: - '@actions/core': 3.0.0 - '@actions/exec': 3.0.0 - '@actions/glob': 0.6.1 - '@actions/http-client': 4.0.0 - '@actions/io': 3.0.2 + '@actions/core': 2.0.3 + '@actions/exec': 2.0.0 + '@actions/glob': 0.5.1 + '@actions/http-client': 3.0.2 + '@actions/io': 2.0.0 + '@azure/abort-controller': 1.1.0 '@azure/core-rest-pipeline': 1.22.2 '@azure/storage-blob': 12.31.0 '@protobuf-ts/runtime-rpc': 2.11.1 - semver: 7.7.4 + semver: 6.3.1 transitivePeerDependencies: - supports-color + '@actions/core@2.0.3': + dependencies: + '@actions/exec': 2.0.0 + '@actions/http-client': 3.0.2 + '@actions/core@3.0.0': dependencies: '@actions/exec': 3.0.0 '@actions/http-client': 4.0.0 + '@actions/exec@2.0.0': + dependencies: + '@actions/io': 2.0.0 + '@actions/exec@3.0.0': dependencies: '@actions/io': 3.0.2 - '@actions/glob@0.6.1': + '@actions/glob@0.5.1': dependencies: - '@actions/core': 3.0.0 + '@actions/core': 2.0.3 minimatch: 3.1.2 + '@actions/http-client@3.0.2': + dependencies: + tunnel: 0.0.6 + undici: 6.23.0 + '@actions/http-client@4.0.0': dependencies: tunnel: 0.0.6 undici: 6.23.0 + '@actions/io@2.0.0': {} + '@actions/io@3.0.2': {} + '@azure/abort-controller@1.1.0': + dependencies: + tslib: 2.8.1 + '@azure/abort-controller@2.1.2': dependencies: tslib: 2.8.1 @@ -313,9 +349,9 @@ snapshots: - '@azure/core-client' - supports-color - '@gigara/rush-github-action-build-cache-plugin@1.1.6': + '@gigara/rush-github-action-build-cache-plugin@1.1.7': dependencies: - '@actions/cache': 6.0.0 + '@actions/cache': 5.0.3 '@actions/core': 3.0.0 transitivePeerDependencies: - supports-color @@ -375,7 +411,7 @@ snapshots: ms@2.1.3: {} - semver@7.7.4: {} + semver@6.3.1: {} strnum@2.1.2: {} From 951050f6a8a0c56c0717304b8514b717e6540029 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 18 Feb 2026 21:03:25 +0530 Subject: [PATCH 021/343] Update cache plugin version --- .../autoinstallers/rush-plugins/package.json | 2 +- .../rush-plugins/pnpm-lock.yaml | 48 ++++--------------- 2 files changed, 11 insertions(+), 39 deletions(-) diff --git a/common/autoinstallers/rush-plugins/package.json b/common/autoinstallers/rush-plugins/package.json index bec796b0a55..9662e5671ba 100644 --- a/common/autoinstallers/rush-plugins/package.json +++ b/common/autoinstallers/rush-plugins/package.json @@ -7,6 +7,6 @@ } }, "dependencies": { - "@gigara/rush-github-action-build-cache-plugin": "1.1.7" + "@gigara/rush-github-action-build-cache-plugin": "1.1.8" } } diff --git a/common/autoinstallers/rush-plugins/pnpm-lock.yaml b/common/autoinstallers/rush-plugins/pnpm-lock.yaml index c76b4eadbe2..f5c64ea3e18 100644 --- a/common/autoinstallers/rush-plugins/pnpm-lock.yaml +++ b/common/autoinstallers/rush-plugins/pnpm-lock.yaml @@ -9,41 +9,29 @@ importers: .: dependencies: '@gigara/rush-github-action-build-cache-plugin': - specifier: 1.1.7 - version: 1.1.7 + specifier: 1.1.8 + version: 1.1.8 packages: - '@actions/cache@5.0.3': - resolution: {integrity: sha512-9joY8Oup+nIpksSBlkuf9/mltnhWx3lydk1tA2PVnXaxFLIIrKqrWDN2CZXlJ+PEErcBARKYn4mHiUCTyMh4Vg==} + '@actions/cache@5.0.5': + resolution: {integrity: sha512-jiQSg0gfd+C2KPgcmdCOq7dCuCIQQWQ4b1YfGIRaaA9w7PJbRwTOcCz4LiFEUnqZGf0ha/8OKL3BeNwetHzYsQ==} '@actions/core@2.0.3': resolution: {integrity: sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==} - '@actions/core@3.0.0': - resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} - '@actions/exec@2.0.0': resolution: {integrity: sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==} - '@actions/exec@3.0.0': - resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@actions/glob@0.5.1': resolution: {integrity: sha512-+dv/t2aKQdKp9WWSp+1yIXVJzH5Q38M0Mta26pzIbeec14EcIleMB7UU6N7sNgbEuYfyuVGpE5pOKjl6j1WXkA==} '@actions/http-client@3.0.2': resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} - '@actions/http-client@4.0.0': - resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==} - '@actions/io@2.0.0': resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==} - '@actions/io@3.0.2': - resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@azure/abort-controller@1.1.0': resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} @@ -103,8 +91,8 @@ packages: resolution: {integrity: sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==} engines: {node: '>=20.0.0'} - '@gigara/rush-github-action-build-cache-plugin@1.1.7': - resolution: {integrity: sha512-8074g5hjRJ9GFwsVtYfq9qM4b6mdeAxHZn1chi06Larb2D6SAtzcV1SIsVMgw/dVQdcq5YIgcrhDr9uEbNQZ4A==} + '@gigara/rush-github-action-build-cache-plugin@1.1.8': + resolution: {integrity: sha512-lkZbhG11/26hibbfNoEyCN2L2GcpY1YzO6rsEWozcOmxVct82Hr7xKspmwUavo4dpA38FlJQMqBM3w5kz/uVAg==} '@protobuf-ts/runtime-rpc@2.11.1': resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} @@ -180,7 +168,7 @@ packages: snapshots: - '@actions/cache@5.0.3': + '@actions/cache@5.0.5': dependencies: '@actions/core': 2.0.3 '@actions/exec': 2.0.0 @@ -200,19 +188,10 @@ snapshots: '@actions/exec': 2.0.0 '@actions/http-client': 3.0.2 - '@actions/core@3.0.0': - dependencies: - '@actions/exec': 3.0.0 - '@actions/http-client': 4.0.0 - '@actions/exec@2.0.0': dependencies: '@actions/io': 2.0.0 - '@actions/exec@3.0.0': - dependencies: - '@actions/io': 3.0.2 - '@actions/glob@0.5.1': dependencies: '@actions/core': 2.0.3 @@ -223,15 +202,8 @@ snapshots: tunnel: 0.0.6 undici: 6.23.0 - '@actions/http-client@4.0.0': - dependencies: - tunnel: 0.0.6 - undici: 6.23.0 - '@actions/io@2.0.0': {} - '@actions/io@3.0.2': {} - '@azure/abort-controller@1.1.0': dependencies: tslib: 2.8.1 @@ -349,10 +321,10 @@ snapshots: - '@azure/core-client' - supports-color - '@gigara/rush-github-action-build-cache-plugin@1.1.7': + '@gigara/rush-github-action-build-cache-plugin@1.1.8': dependencies: - '@actions/cache': 5.0.3 - '@actions/core': 3.0.0 + '@actions/cache': 5.0.5 + '@actions/core': 2.0.3 transitivePeerDependencies: - supports-color From 353a50666b32a8e31214c2f1dc05c9db983f0ea5 Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Thu, 19 Feb 2026 10:09:31 +0530 Subject: [PATCH 022/343] Enable remote debugging and DSS mapping generation --- .../sidePanel/dataServices/input-mapping.tsx | 5 ++--- .../sidePanel/dataServices/output-mapping.tsx | 5 ++--- workspaces/mi/mi-extension/package.json | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/workspaces/mi/mi-diagram/src/components/sidePanel/dataServices/input-mapping.tsx b/workspaces/mi/mi-diagram/src/components/sidePanel/dataServices/input-mapping.tsx index 6668b3cd747..0817190c8a1 100644 --- a/workspaces/mi/mi-diagram/src/components/sidePanel/dataServices/input-mapping.tsx +++ b/workspaces/mi/mi-diagram/src/components/sidePanel/dataServices/input-mapping.tsx @@ -435,13 +435,12 @@ const InputMappingsForm = (props: AddMediatorProps) => { Cancel : <> - {/* LS support for the feature will be added in the major release */} - {/* */} + : <> - {/* LS support for the feature will be added in the major release */} - {/* {!sidePanelContext?.formValues?.outputJson && + {!sidePanelContext?.formValues?.outputJson && - } */} + } )} @@ -604,18 +627,18 @@ export const McpToolsSelection: React.FC = ({ )} {!loading && tools.length > 0 && ( <> - {showValidationError && selectedTools.size === 0 ? ( + {showValidationError && selectedToolNames.size === 0 ? ( Select at least one tool to continue ) : ( - {selectedTools.size} of {tools.length} selected + {selectedToolNames.size} of {tools.length} selected )} @@ -637,7 +660,7 @@ export const McpToolsSelection: React.FC = ({ isOpen={isModalOpen} onClose={() => setIsModalOpen(false)} tools={tools} - selectedTools={selectedTools} + selectedTools={selectedToolNames} loading={loading} onToolSelectionChange={handleToolSelectionChange} onSelectAll={handleSelectAll} From fec1ab5872055e3eb1c75455e7a1658fbcc5a13f Mon Sep 17 00:00:00 2001 From: kaumini Date: Thu, 19 Feb 2026 15:03:33 +0530 Subject: [PATCH 025/343] Reduce height of mcp tool list --- workspaces/mi/mi-diagram/src/resources/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-diagram/src/resources/constants.ts b/workspaces/mi/mi-diagram/src/resources/constants.ts index 9a2d0defa0b..86b98e9daae 100644 --- a/workspaces/mi/mi-diagram/src/resources/constants.ts +++ b/workspaces/mi/mi-diagram/src/resources/constants.ts @@ -133,7 +133,7 @@ export const Colors = { export const SIDE_PANEL_WIDTH = 450; export const CANVAS_PADDING = 20; -export const MCP_TOOLS_LIST_MAX_HEIGHT_OFFSET = 470; +export const MCP_TOOLS_LIST_MAX_HEIGHT_OFFSET = 480; export const NODE_DIMENSIONS = { DEFAULT: { From fc338256a8f972e520416148963afbddd6e32386 Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:47:16 +0530 Subject: [PATCH 026/343] Remove java naming convention enforcement --- .../mi/mi-visualizer/src/views/Forms/ClassMediatorForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-visualizer/src/views/Forms/ClassMediatorForm.tsx b/workspaces/mi/mi-visualizer/src/views/Forms/ClassMediatorForm.tsx index 9d2fd0475f0..91627e9855a 100644 --- a/workspaces/mi/mi-visualizer/src/views/Forms/ClassMediatorForm.tsx +++ b/workspaces/mi/mi-visualizer/src/views/Forms/ClassMediatorForm.tsx @@ -42,7 +42,7 @@ const schema = yup.object({ .matches(/^([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*$/, "Invalid Package Name"), className: yup.string() .required("Class Name is required") - .matches(/^[A-Z][a-zA-Z\d_$]*$/, "Invalid Class Name") + .matches(/^[a-zA-Z][a-zA-Z\d_$]*$/, "Invalid Class Name") }); export function ClassMediatorForm(props: ClassMediatorProps) { From 60957f7fe8fcb2bf82fd2cf1fbf5e7f09e41181a Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:49:01 +0530 Subject: [PATCH 027/343] Add env variables to the process for unit test execution --- .../mi/mi-extension/src/test-explorer/runner.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/workspaces/mi/mi-extension/src/test-explorer/runner.ts b/workspaces/mi/mi-extension/src/test-explorer/runner.ts index 2b67bd2c8df..15dfbb5118e 100644 --- a/workspaces/mi/mi-extension/src/test-explorer/runner.ts +++ b/workspaces/mi/mi-extension/src/test-explorer/runner.ts @@ -32,6 +32,7 @@ import { ChildProcess } from "child_process"; import treeKill = require("tree-kill"); import { normalize } from "upath"; import { MVN_COMMANDS } from "../constants"; +import { loadEnvVariables } from "../debugger/tasks"; const fs = require('fs'); const child_process = require('child_process'); const readline = require('readline'); @@ -99,7 +100,7 @@ export function runHandler(request: TestRunRequest, cancellation: CancellationTo // execute test run.appendOutput(`Starting MI test server\r\n`); - const { cp } = await startTestServer(serverPath, printer); + const { cp } = await startTestServer(serverPath, projectRoot, printer); stopTestServer = () => { treeKill(cp.pid!, 'SIGKILL'); } @@ -234,9 +235,14 @@ export function runHandler(request: TestRunRequest, cancellation: CancellationTo * Start test server. * @returns server output */ -async function startTestServer(serverPath: string, printToOutput?: (line: string, isError: boolean) => void): Promise<{ cp: ChildProcess }> { +async function startTestServer(serverPath: string, projectRoot: string, printToOutput?: (line: string, isError: boolean) => void): Promise<{ cp: ChildProcess }> { return new Promise<{ cp: ChildProcess }>(async (resolve, reject) => { try { + const filePath = path.resolve(projectRoot, '.env'); + if (fs.existsSync(filePath)) { + loadEnvVariables(filePath) + } + const scriptFile = process.platform === "win32" ? "micro-integrator.bat" : "micro-integrator.sh"; const server = path.join(serverPath, "bin", scriptFile); @@ -250,7 +256,7 @@ async function startTestServer(serverPath: string, printToOutput?: (line: string } } - const cp = runCommand(serverCommand, undefined, onData, onError, undefined, printer); + const cp = runCommand(serverCommand, projectRoot, onData, onError, undefined, printer); function onData(data: string) { if (data.includes("WSO2 Micro Integrator started in")) { From 670f8fe05a2f46f95d78f4d493dc4a8fe287836b Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:50:38 +0530 Subject: [PATCH 028/343] Allow configurable values to have equal signs --- workspaces/mi/mi-extension/src/debugger/activate.ts | 5 +++-- workspaces/mi/mi-extension/src/debugger/tasks.ts | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/workspaces/mi/mi-extension/src/debugger/activate.ts b/workspaces/mi/mi-extension/src/debugger/activate.ts index 68f1a969917..db3647be3c0 100644 --- a/workspaces/mi/mi-extension/src/debugger/activate.ts +++ b/workspaces/mi/mi-extension/src/debugger/activate.ts @@ -263,9 +263,10 @@ export function activateDebugger(context: vscode.ExtensionContext) { if (fs.existsSync(envPath)) { const envFileContent = fs.readFileSync(envPath, 'utf-8'); const envVariables = envFileContent.split('\n').reduce((acc, line) => { - const [key, value] = line.split('=').map(part => part.trim()); + const [key, ...values] = line.split('='); + const value = values.join('=').trim(); if (key && value) { - acc[key] = value; + acc[key.trim()] = value; } return acc; }, {} as { [key: string]: string }); diff --git a/workspaces/mi/mi-extension/src/debugger/tasks.ts b/workspaces/mi/mi-extension/src/debugger/tasks.ts index 3ea0770875a..b733419882c 100644 --- a/workspaces/mi/mi-extension/src/debugger/tasks.ts +++ b/workspaces/mi/mi-extension/src/debugger/tasks.ts @@ -192,9 +192,9 @@ export function loadEnvVariables(filePath: string): void { const trimmedLine = line.trim(); // Ignore empty lines or comments if (trimmedLine && trimmedLine[0] !== '#') { - const [key, value] = trimmedLine.split('='); + const [key, ...value] = trimmedLine.split('='); if (key && value) { - process.env[key.trim()] = value.trim(); + process.env[key.trim()] = value.join('=').trim(); } } }); From c9242f6240f5a54dde9c5dbe9299387bd1b7ada8 Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:59:21 +0530 Subject: [PATCH 029/343] Upgrade the synapse-unit-test-maven-plugin version --- workspaces/mi/mi-extension/src/util/templates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-extension/src/util/templates.ts b/workspaces/mi/mi-extension/src/util/templates.ts index ba09276ffa1..b56dbe05ae0 100644 --- a/workspaces/mi/mi-extension/src/util/templates.ts +++ b/workspaces/mi/mi-extension/src/util/templates.ts @@ -418,7 +418,7 @@ export const rootPomXmlContent = (projectName: string, groupID: string, artifact org.wso2.maven synapse-unit-test-maven-plugin - 5.4.13 + 5.4.15 synapse-unit-test From 4f292526d8a06aeaa887f060d6529913c6bc8e88 Mon Sep 17 00:00:00 2001 From: gigara Date: Fri, 20 Feb 2026 15:08:56 +0530 Subject: [PATCH 030/343] Update trivy ignore --- .trivyignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.trivyignore b/.trivyignore index 99d008c0490..02f15e6382a 100644 --- a/.trivyignore +++ b/.trivyignore @@ -10,3 +10,6 @@ CVE-2025-14505 # Library is used in nested dependencies and not directly used by our codebase. No fix released by the author. CVE-2025-69873 + +# used in nested dependencies and not directly used by our codebase. No fix released by the author. +CVE-2026-26996 From f97e292397ea499bde3795d24781ca42160b07c2 Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 20 Feb 2026 15:24:36 +0530 Subject: [PATCH 031/343] render ai connector icon for mcp tools --- .../ConnectorNode/ConnectorNodeWidget.tsx | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx index 85717cbad24..75e29431ac1 100644 --- a/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx +++ b/workspaces/mi/mi-diagram/src/components/nodes/ConnectorNode/ConnectorNodeWidget.tsx @@ -156,13 +156,27 @@ export function ConnectorNodeWidget(props: ConnectorNodeWidgetProps) { useEffect(() => { const fetchData = async () => { + if (isMCPTool) { + const connectorIcon = await rpcClient.getMiDiagramRpcClient().getConnectorIcon({ + connectorName: 'ai', + documentUri: node.documentUri + }); + + setIconPath(connectorIcon.iconPath); + return; + } + const connectorIcon = await rpcClient.getMiDiagramRpcClient().getConnectorIcon({ - connectorName: node.stNode?.connectorName ?? (node.stNode as any).mediator.connectorName, + connectorName: node.stNode?.connectorName ?? (isMCPTool ? 'ai' : (node.stNode as any).mediator.connectorName), documentUri: node.documentUri }); setIconPath(connectorIcon.iconPath); + if (isMCPTool) { + return; + } + const connectorData = await rpcClient.getMiDiagramRpcClient().getAvailableConnectors({ documentUri: node.documentUri, connectorName: connectorNode.tag.split(".")[0] @@ -319,9 +333,7 @@ export function ConnectorNodeWidget(props: ConnectorNodeWidgetProps) { )}
- {isMCPTool ? - {getMediatorIconsFromFont('mcp')} - : iconPath && + {iconPath && Icon }
From 4fa1f274948577b852877fa48024dcecbcbb90da Mon Sep 17 00:00:00 2001 From: Isuru Wijesiri Date: Wed, 17 Dec 2025 11:06:18 +0530 Subject: [PATCH 032/343] Add initial basic version of MI Copilot agent mode --- workspaces/mi/mi-core/src/index.ts | 10 +- .../mi-core/src/rpc-types/agent-mode/index.ts | 33 + .../src/rpc-types/agent-mode/rpc-type.ts | 41 ++ .../mi-core/src/rpc-types/agent-mode/types.ts | 70 ++ .../{ai-panel => ai-features}/index.ts | 0 .../{ai-panel => ai-features}/rpc-type.ts | 0 .../{ai-panel => ai-features}/types.ts | 0 workspaces/mi/mi-extension/src/RPCLayer.ts | 8 +- .../src/{ai-panel => ai-features}/activate.ts | 4 +- .../agent-mode/agents/main/agent.ts | 321 ++++++++ .../agent-mode/agents/main/system.ts | 204 ++++++ .../src/ai-features/agent-mode/index.ts | 38 + .../agent-mode/tools/file_tools.ts | 693 ++++++++++++++++++ .../src/ai-features/agent-mode/tools/index.ts | 90 +++ .../src/ai-features/agent-mode/tools/types.ts | 119 +++ .../{ai-panel => ai-features}/aiMachine.ts | 0 .../src/{ai-panel => ai-features}/auth.ts | 0 .../copilot => ai-features}/connection.ts | 6 +- .../copilot/auto-fill/fill.ts | 2 +- .../copilot/auto-fill/prompt.ts | 0 .../copilot/auto-fill/system.ts | 0 .../copilot/connectors/connector_db.ts | 0 .../copilot/connectors/connectors.ts | 2 +- .../copilot/connectors/inbound_db.ts | 0 .../copilot/connectors/prompt.ts | 0 .../copilot/connectors/system.ts | 0 .../copilot/context/ai_module.ts | 0 .../context/synapse_expression_examples.ts | 0 .../context/synapse_expression_guide.ts | 0 .../copilot/context/synapse_guide.ts | 0 .../copilot/context/synapse_guide_v1.ts | 0 .../copilot/data-mapper/mapper.ts | 2 +- .../copilot/data-mapper/prompt.ts | 0 .../copilot/data-mapper/system.ts | 0 .../copilot/diagnostics/diagnostics.ts | 2 +- .../copilot/diagnostics/prompt.ts | 0 .../copilot/diagnostics/system.ts | 0 .../copilot/dmc_to_ts/dmc_to_ts.ts | 2 +- .../copilot/dmc_to_ts/prompt.ts | 0 .../copilot/dmc_to_ts/system.ts | 0 .../copilot/generation/generations.ts | 2 +- .../copilot/generation/prompt_v1.ts | 0 .../copilot/generation/prompt_v2.ts | 0 .../copilot/generation/system_v1.ts | 0 .../copilot/generation/system_v2.ts | 0 .../copilot/idp/fill_schema.ts | 2 +- .../copilot/idp/idp.ts | 2 +- .../copilot/idp/prompt.ts | 0 .../copilot/idp/system.ts | 0 .../copilot/logger.ts | 0 .../copilot/message-utils.ts | 0 .../copilot/suggestions/prompt.ts | 0 .../copilot/suggestions/suggestions.ts | 2 +- .../copilot/suggestions/system.ts | 0 .../unit-tests/prompt_case_generate.ts | 0 .../unit-tests/prompt_suite_generate.ts | 0 .../unit-tests/system_case_generate.ts | 0 .../unit-tests/system_suite_generate.ts | 0 .../unit-tests/unit_test_case_generate.ts | 2 +- .../copilot/unit-tests/unit_test_examples.ts | 0 .../copilot/unit-tests/unit_test_generate.ts | 2 +- .../copilot/unit-tests/unit_test_guide.ts | 0 .../src/{ai-panel => ai-features}/webview.ts | 0 .../mi/mi-extension/src/constants/index.ts | 1 + workspaces/mi/mi-extension/src/extension.ts | 4 +- .../rpc-managers/agent-mode/event-handler.ts | 78 ++ .../rpc-managers/agent-mode/rpc-handler.ts | 35 + .../rpc-managers/agent-mode/rpc-manager.ts | 137 ++++ .../event-handler.ts | 4 +- .../{ai-panel => ai-features}/rpc-handler.ts | 0 .../{ai-panel => ai-features}/rpc-manager.ts | 26 +- .../{ai-panel => ai-features}/utils.ts | 10 +- .../mi-data-mapper/rpc-manager.ts | 2 +- .../rpc-managers/mi-diagram/rpc-manager.ts | 2 +- workspaces/mi/mi-extension/src/uri-handler.ts | 2 +- .../mi-extension/src/visualizer/activate.ts | 2 +- workspaces/mi/mi-rpc-client/src/RpcClient.ts | 15 +- .../src/rpc-clients/agent-mode/rpc-client.ts | 46 ++ .../{ai-panel => ai-features}/index.ts | 0 .../{ai-panel => ai-features}/rpc-client.ts | 0 .../mi/mi-visualizer/src/Visualizer.tsx | 4 + .../views/AIPanel/component/AIChatFooter.tsx | 316 ++++---- .../views/AIPanel/component/AIChatMessage.tsx | 27 +- .../AIPanel/component/MICopilotContext.tsx | 41 +- .../AIPanel/component/ToolCallSegment.tsx | 83 +++ .../mi-visualizer/src/views/AIPanel/utils.ts | 48 +- 86 files changed, 2259 insertions(+), 283 deletions(-) create mode 100644 workspaces/mi/mi-core/src/rpc-types/agent-mode/index.ts create mode 100644 workspaces/mi/mi-core/src/rpc-types/agent-mode/rpc-type.ts create mode 100644 workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts rename workspaces/mi/mi-core/src/rpc-types/{ai-panel => ai-features}/index.ts (100%) rename workspaces/mi/mi-core/src/rpc-types/{ai-panel => ai-features}/rpc-type.ts (100%) rename workspaces/mi/mi-core/src/rpc-types/{ai-panel => ai-features}/types.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/activate.ts (91%) create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/index.ts create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/index.ts create mode 100644 workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/aiMachine.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/auth.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel/copilot => ai-features}/connection.ts (97%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/auto-fill/fill.ts (99%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/auto-fill/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/auto-fill/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/connectors/connector_db.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/connectors/connectors.ts (99%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/connectors/inbound_db.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/connectors/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/connectors/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/context/ai_module.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/context/synapse_expression_examples.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/context/synapse_expression_guide.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/context/synapse_guide.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/context/synapse_guide_v1.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/data-mapper/mapper.ts (97%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/data-mapper/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/data-mapper/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/diagnostics/diagnostics.ts (99%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/diagnostics/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/diagnostics/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/dmc_to_ts/dmc_to_ts.ts (97%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/dmc_to_ts/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/dmc_to_ts/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/generation/generations.ts (99%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/generation/prompt_v1.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/generation/prompt_v2.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/generation/system_v1.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/generation/system_v2.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/idp/fill_schema.ts (98%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/idp/idp.ts (98%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/idp/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/idp/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/logger.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/message-utils.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/suggestions/prompt.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/suggestions/suggestions.ts (98%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/suggestions/system.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/prompt_case_generate.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/prompt_suite_generate.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/system_case_generate.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/system_suite_generate.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/unit_test_case_generate.ts (99%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/unit_test_examples.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/unit_test_generate.ts (98%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/copilot/unit-tests/unit_test_guide.ts (100%) rename workspaces/mi/mi-extension/src/{ai-panel => ai-features}/webview.ts (100%) create mode 100644 workspaces/mi/mi-extension/src/rpc-managers/agent-mode/event-handler.ts create mode 100644 workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-handler.ts create mode 100644 workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts rename workspaces/mi/mi-extension/src/rpc-managers/{ai-panel => ai-features}/event-handler.ts (95%) rename workspaces/mi/mi-extension/src/rpc-managers/{ai-panel => ai-features}/rpc-handler.ts (100%) rename workspaces/mi/mi-extension/src/rpc-managers/{ai-panel => ai-features}/rpc-manager.ts (96%) rename workspaces/mi/mi-extension/src/rpc-managers/{ai-panel => ai-features}/utils.ts (96%) create mode 100644 workspaces/mi/mi-rpc-client/src/rpc-clients/agent-mode/rpc-client.ts rename workspaces/mi/mi-rpc-client/src/rpc-clients/{ai-panel => ai-features}/index.ts (100%) rename workspaces/mi/mi-rpc-client/src/rpc-clients/{ai-panel => ai-features}/rpc-client.ts (100%) create mode 100644 workspaces/mi/mi-visualizer/src/views/AIPanel/component/ToolCallSegment.tsx diff --git a/workspaces/mi/mi-core/src/index.ts b/workspaces/mi/mi-core/src/index.ts index 4bcbb3b7200..ae602b131c4 100644 --- a/workspaces/mi/mi-core/src/index.ts +++ b/workspaces/mi/mi-core/src/index.ts @@ -44,6 +44,10 @@ export * from "./rpc-types/mi-data-mapper/index"; export * from "./rpc-types/mi-data-mapper/rpc-type"; export * from "./rpc-types/mi-data-mapper/types"; -export * from "./rpc-types/ai-panel/index"; -export * from "./rpc-types/ai-panel/rpc-type"; -export * from "./rpc-types/ai-panel/types"; +export * from "./rpc-types/ai-features/index"; +export * from "./rpc-types/ai-features/rpc-type"; +export * from "./rpc-types/ai-features/types"; + +export * from "./rpc-types/agent-mode/index"; +export * from "./rpc-types/agent-mode/rpc-type"; +export * from "./rpc-types/agent-mode/types"; diff --git a/workspaces/mi/mi-core/src/rpc-types/agent-mode/index.ts b/workspaces/mi/mi-core/src/rpc-types/agent-mode/index.ts new file mode 100644 index 00000000000..99c2514f002 --- /dev/null +++ b/workspaces/mi/mi-core/src/rpc-types/agent-mode/index.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 types +export type { + SendAgentMessageRequest, + SendAgentMessageResponse, + AgentEvent, + AgentEventType, + MIAgentPanelAPI +} from './types'; + +// Export RPC type definitions +export { + sendAgentMessage, + abortAgentGeneration, + agentEvent +} from './rpc-type'; diff --git a/workspaces/mi/mi-core/src/rpc-types/agent-mode/rpc-type.ts b/workspaces/mi/mi-core/src/rpc-types/agent-mode/rpc-type.ts new file mode 100644 index 00000000000..7e4c823fd5f --- /dev/null +++ b/workspaces/mi/mi-core/src/rpc-types/agent-mode/rpc-type.ts @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { RequestType, NotificationType } from "vscode-messenger-common"; +import { + SendAgentMessageRequest, + SendAgentMessageResponse, + AgentEvent +} from "./types"; + +const _prefix = "mi-agent-service"; + +// Send a message to the agent +export const sendAgentMessage: RequestType = { + method: `${_prefix}/sendAgentMessage` +}; + +// Abort agent generation +export const abortAgentGeneration: RequestType = { + method: `${_prefix}/abortAgentGeneration` +}; + +// Notification for agent streaming events +export const agentEvent: NotificationType = { + method: `${_prefix}/agentEvent` +}; diff --git a/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts b/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts new file mode 100644 index 00000000000..7e23c36f77b --- /dev/null +++ b/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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. + */ + +// ============================================================================ +// Agent Panel Types +// ============================================================================ + +/** + * Request to send a message to the agent + */ +export interface SendAgentMessageRequest { + message: string; +} + +/** + * Response from the agent + */ +export interface SendAgentMessageResponse { + success: boolean; + message?: string; + modifiedFiles?: string[]; + error?: string; +} + +/** + * Agent event types for streaming + */ +export type AgentEventType = + | "start" + | "content_block" + | "tool_call" + | "tool_result" + | "error" + | "abort" + | "stop"; + +/** + * Agent event for streaming + */ +export interface AgentEvent { + type: AgentEventType; + content?: string; + toolName?: string; + toolInput?: unknown; + toolOutput?: unknown; + error?: string; +} + +/** + * Agent Panel API interface + */ +export interface MIAgentPanelAPI { + sendAgentMessage: (request: SendAgentMessageRequest) => Promise; + abortAgentGeneration: () => Promise; +} diff --git a/workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts b/workspaces/mi/mi-core/src/rpc-types/ai-features/index.ts similarity index 100% rename from workspaces/mi/mi-core/src/rpc-types/ai-panel/index.ts rename to workspaces/mi/mi-core/src/rpc-types/ai-features/index.ts diff --git a/workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts b/workspaces/mi/mi-core/src/rpc-types/ai-features/rpc-type.ts similarity index 100% rename from workspaces/mi/mi-core/src/rpc-types/ai-panel/rpc-type.ts rename to workspaces/mi/mi-core/src/rpc-types/ai-features/rpc-type.ts diff --git a/workspaces/mi/mi-core/src/rpc-types/ai-panel/types.ts b/workspaces/mi/mi-core/src/rpc-types/ai-features/types.ts similarity index 100% rename from workspaces/mi/mi-core/src/rpc-types/ai-panel/types.ts rename to workspaces/mi/mi-core/src/rpc-types/ai-features/types.ts diff --git a/workspaces/mi/mi-extension/src/RPCLayer.ts b/workspaces/mi/mi-extension/src/RPCLayer.ts index 8346ff94c5c..074d7e469d6 100644 --- a/workspaces/mi/mi-extension/src/RPCLayer.ts +++ b/workspaces/mi/mi-extension/src/RPCLayer.ts @@ -22,12 +22,13 @@ import { stateChanged, getVisualizerState, getAIVisualizerState, VisualizerLocat import { registerMiDiagramRpcHandlers } from './rpc-managers/mi-diagram/rpc-handler'; import { VisualizerWebview } from './visualizer/webview'; import { registerMiVisualizerRpcHandlers } from './rpc-managers/mi-visualizer/rpc-handler'; -import { AiPanelWebview } from './ai-panel/webview'; -import { StateMachineAI } from './ai-panel/aiMachine'; +import { AiPanelWebview } from './ai-features/webview'; +import { StateMachineAI } from './ai-features/aiMachine'; import { registerMiDataMapperRpcHandlers } from './rpc-managers/mi-data-mapper/rpc-handler'; import { extension } from './MIExtensionContext'; import { registerMiDebuggerRpcHandlers } from './rpc-managers/mi-debugger/rpc-handler'; -import { registerMIAiPanelRpcHandlers } from './rpc-managers/ai-panel/rpc-handler'; +import { registerMIAiPanelRpcHandlers } from './rpc-managers/ai-features/rpc-handler'; +import { registerMIAgentPanelRpcHandlers } from './rpc-managers/agent-mode/rpc-handler'; import path = require('path'); import { getStateMachine } from './stateMachine'; import { getPopupStateMachine } from './stateMachinePopup'; @@ -53,6 +54,7 @@ export class RPCLayer { registerMiDataMapperRpcHandlers(messenger, projectUri); registerMiDebuggerRpcHandlers(messenger, projectUri); registerMIAiPanelRpcHandlers(messenger, projectUri); + registerMIAgentPanelRpcHandlers(messenger, projectUri); // ----- AI Webview RPC Methods messenger.onRequest(getAIVisualizerState, () => getAIContext()); messenger.onRequest(sendAIStateEvent, (event: any) => StateMachineAI.sendEvent(event)); diff --git a/workspaces/mi/mi-extension/src/ai-panel/activate.ts b/workspaces/mi/mi-extension/src/ai-features/activate.ts similarity index 91% rename from workspaces/mi/mi-extension/src/ai-panel/activate.ts rename to workspaces/mi/mi-extension/src/ai-features/activate.ts index 0ee992d5b00..274fa5a93f2 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/activate.ts +++ b/workspaces/mi/mi-extension/src/ai-features/activate.ts @@ -23,9 +23,11 @@ import { extension } from '../MIExtensionContext'; import { PromptObject } from '@wso2/mi-core'; export function activateAiPanel(context: vscode.ExtensionContext) { + // Register the AI panel command context.subscriptions.push( vscode.commands.registerCommand(COMMANDS.OPEN_AI_PANEL, (initialPrompt?: PromptObject) => { - openAIWebview(initialPrompt); + extension.initialPrompt = initialPrompt; + openAIWebview(); }) ); context.subscriptions.push( diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts new file mode 100644 index 00000000000..925e4b82078 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts @@ -0,0 +1,321 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { ModelMessage, streamText, stepCountIs } from 'ai'; +import { getAnthropicClient, getProviderCacheControl, ANTHROPIC_SONNET_4_5 } from '../../../connection'; +import { getSystemPrompt, getUserPrompt, UserPromptParams } from './system'; +import { + createWriteTool, + createReadTool, + createEditTool, + createMultiEditTool, + createWriteExecute, + createReadExecute, + createEditExecute, + createMultiEditExecute, +} from '../../tools/file_tools'; +import { + FILE_WRITE_TOOL_NAME, + FILE_READ_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_MULTI_EDIT_TOOL_NAME, +} from '../../tools/types'; +import { logInfo, logError, logDebug } from '../../../copilot/logger'; + +// ============================================================================ +// Types +// ============================================================================ + +/** + * Event types emitted during agent execution + */ +export type AgentEventType = + | 'start' + | 'content_block' + | 'tool_call' + | 'tool_result' + | 'error' + | 'abort' + | 'stop'; + +/** + * Event emitted during agent execution + */ +export interface AgentEvent { + type: AgentEventType; + content?: string; + toolName?: string; + toolInput?: any; + toolOutput?: any; + error?: string; +} + +/** + * Event handler function type + */ +export type AgentEventHandler = (event: AgentEvent) => void; + +/** + * Request parameters for agent execution + */ +export interface AgentRequest { + /** User's query/requirement */ + query: string; + /** Path to the MI project */ + projectPath: string; + /** List of existing files in the project */ + existingFiles: string[]; + /** Map of file path to content for relevant existing code */ + existingCode?: Map; + /** Chat history for context */ + chatHistory?: ModelMessage[]; + /** Abort signal for cancellation */ + abortSignal?: AbortSignal; +} + +/** + * Result of agent execution + */ +export interface AgentResult { + /** Whether execution completed successfully */ + success: boolean; + /** List of files modified during execution */ + modifiedFiles: string[]; + /** Error message if failed */ + error?: string; +} + +// ============================================================================ +// Agent Core +// ============================================================================ + +/** + * Creates and executes the MI design agent + */ +export async function executeAgent( + request: AgentRequest, + eventHandler: AgentEventHandler +): Promise { + const modifiedFiles: string[] = []; + + try { + logInfo(`[Agent] Starting agent execution for project: ${request.projectPath}`); + + // Get cache options for prompt caching + const cacheOptions = await getProviderCacheControl(); + + // Build user prompt + const userPromptParams: UserPromptParams = { + query: request.query, + projectPath: request.projectPath, + existingFiles: request.existingFiles, + existingCode: request.existingCode, + }; + const userMessageContent = getUserPrompt(userPromptParams); + + logInfo(`[Agent] User prompt: ${JSON.stringify(userMessageContent, null, 2)}`); + logInfo(`[Agent] hhhhhh`); + + // Build messages array + const allMessages: ModelMessage[] = [ + { + role: 'system', + content: getSystemPrompt(), + providerOptions: cacheOptions, + }, + ...(request.chatHistory || []), + { + role: 'user', + content: userMessageContent, + }, + ]; + + // Create tools + const tools = { + [FILE_WRITE_TOOL_NAME]: createWriteTool( + createWriteExecute(request.projectPath, modifiedFiles) + ), + [FILE_READ_TOOL_NAME]: createReadTool( + createReadExecute(request.projectPath) + ), + [FILE_EDIT_TOOL_NAME]: createEditTool( + createEditExecute(request.projectPath, modifiedFiles) + ), + [FILE_MULTI_EDIT_TOOL_NAME]: createMultiEditTool( + createMultiEditExecute(request.projectPath, modifiedFiles) + ), + }; + + // Start streaming + const { fullStream, response } = streamText({ + model: await getAnthropicClient(ANTHROPIC_SONNET_4_5), + maxOutputTokens: 8192, + temperature: 0, + messages: allMessages, + stopWhen: stepCountIs(50), + tools, + abortSignal: request.abortSignal, + }); + + eventHandler({ type: 'start' }); + + // Process stream + for await (const part of fullStream) { + switch (part.type) { + case 'text-delta': { + eventHandler({ + type: 'content_block', + content: part.text, + }); + break; + } + + case 'tool-call': { + const toolInput = part.input as any; + logDebug(`[Agent] Tool call: ${part.toolName}`); + + // Extract relevant info for display - send full file_path + let displayInput: any = undefined; + if ([FILE_READ_TOOL_NAME, FILE_WRITE_TOOL_NAME, FILE_EDIT_TOOL_NAME, FILE_MULTI_EDIT_TOOL_NAME].includes(part.toolName)) { + displayInput = { file_path: toolInput?.file_path }; + } + + eventHandler({ + type: 'tool_call', + toolName: part.toolName, + toolInput: displayInput, + }); + break; + } + + case 'tool-result': { + const result = part.output as any; + logDebug(`[Agent] Tool result: ${part.toolName}, success: ${result?.success}`); + + // Extract relevant info for display + let displayOutput: any = { success: result?.success }; + if (part.toolName === FILE_WRITE_TOOL_NAME && result?.message) { + if (result.message.includes('created')) { + displayOutput.action = 'created'; + } else if (result.message.includes('updated')) { + displayOutput.action = 'updated'; + } + } + + eventHandler({ + type: 'tool_result', + toolName: part.toolName, + toolOutput: displayOutput, + }); + break; + } + + case 'error': { + const errorMsg = getErrorMessage(part.error); + logError(`[Agent] Stream error: ${errorMsg}`); + eventHandler({ + type: 'error', + error: errorMsg, + }); + return { + success: false, + modifiedFiles, + error: errorMsg, + }; + } + + case 'text-start': { + // Add newline for formatting + eventHandler({ + type: 'content_block', + content: ' \n', + }); + break; + } + + case 'finish': { + logInfo(`[Agent] Execution finished. Modified files: ${modifiedFiles.length}`); + eventHandler({ type: 'stop' }); + return { + success: true, + modifiedFiles, + }; + } + } + } + + // Stream completed without finish event + eventHandler({ type: 'stop' }); + return { + success: true, + modifiedFiles, + }; + + } catch (error: any) { + const errorMsg = getErrorMessage(error); + + // Check if aborted + if (error?.name === 'AbortError' || request.abortSignal?.aborted) { + logInfo('[Agent] Execution aborted by user'); + eventHandler({ type: 'abort' }); + return { + success: false, + modifiedFiles, + error: 'Aborted by user', + }; + } + + logError(`[Agent] Execution error: ${errorMsg}`); + eventHandler({ + type: 'error', + error: errorMsg, + }); + return { + success: false, + modifiedFiles, + error: errorMsg, + }; + } +} + +// ============================================================================ +// Utilities +// ============================================================================ + +/** + * Extracts a readable error message from an error object + */ +function getErrorMessage(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + if (typeof error === 'string') { + return error; + } + if (error && typeof error === 'object' && 'message' in error) { + return String((error as any).message); + } + return 'An unknown error occurred'; +} + +/** + * Creates an abort controller for agent execution + */ +export function createAgentAbortController(): AbortController { + return new AbortController(); +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts new file mode 100644 index 00000000000..cdb0887eaa7 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts @@ -0,0 +1,204 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { + FILE_WRITE_TOOL_NAME, + FILE_READ_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_MULTI_EDIT_TOOL_NAME, +} from '../../tools/types'; +import { SYNAPSE_GUIDE } from '../../../copilot/context/synapse_guide'; + +// ============================================================================ +// System Prompt +// ============================================================================ + +const SYSTEM_PROMPT = +` +You are WSO2 MI Copilot, an Agentic AI similar to GitHub Copilot chat, Cursor, or Claude Code embedded within the VSCode-based WSO2 Micro Integrator Low-Code IDE for Synapse. +Your primary role is to assist developers in building, editing, and debugging WSO2 Synapse integrations. +You are accessible through a chat interface in the VSCode sidebar and operate as an integral part of the development workflow, offering intelligent, context-aware support tailored to the WSO2 Micro Integrator ecosystem. +You are an expert assistant for developing WSO2 Micro Integrator (MI) integration solutions. You help users design and implement Synapse-based integrations in a step-by-step manner. + +You will be provided with the following inputs: +1. : The user's query or request. +2. : The user's current integration project structure if not a new empty project. Use read tools to read any files if needed. +3. : The file that the user is currently editing if user is editing a file. +4. : Pre-configured payloads/query params/path params in the IDE for testing purposes if any. +5. : Additional files attached for your reference by the user if any. +6. : Images attached for your reference by the user if any. +7. : These tags contain useful information and reminders added by the system. They are NOT part of the user's input or tool results. Avoid referencing them in responses. + +You have access to following file tools to read, write, and edit Synapse XML configurations: +- ${FILE_READ_TOOL_NAME}: Read existing files to understand current state +- ${FILE_WRITE_TOOL_NAME}: Create new configuration files +- ${FILE_EDIT_TOOL_NAME}: Make single edits to existing files +- ${FILE_MULTI_EDIT_TOOL_NAME}: Make multiple edits to a file atomically + +# User Query Processing Workflow + +## Step 0: Determine Relevance: +- Check if the query relates to WSO2, Micro Integrator, or Synapse integrations and is technical in nature. +- If not, politely explain that your assistance is limited to technical queries related to WSO2 Synapse integrations. +- Never provide answers or solutions to non-technical queries or topics outside the scope of WSO2 Synapse integrations. + +## Step 1: Understand the Requirement +- Analyze the user's request carefully +- Ask clarifying questions if the requirement is ambiguous using ASK_USER_TOOL. +- Make reasonable assumptions for missing details. + +## Step 2: Design the Solution +- Create a high-level design plan +- Identify required artifacts (APIs, sequences, endpoints, etc.) +- Identify necessary connectors and mediators + +## Step 3: Implement the Solution +- Use the file tools to create/modify Synapse configurations. +- Follow the the provided Synapse artifact guidelines and best practices strictly. +- Create separate files for each artifact type. + +## Step 4: Validate +- Review the generated configurations +- Ensure all files are properly structured +- Verify connector configurations are complete + +# Important Rules + +1. **Always Read Before Edit**: Before editing any file, use ${FILE_READ_TOOL_NAME} to see the current content +2. **One Artifact Per File**: Each API, sequence, endpoint, etc. should be in its own file +3. **Use Meaningful Names**: Give clear, descriptive names to all artifacts +4. **Complete Solutions**: Never leave placeholders - implement the complete solution +5. **Follow Synapse Best Practices**: Use the latest mediators and patterns + +# Synapse Development Guidelines + +${SYNAPSE_GUIDE} + +# File Paths + +For MI projects, use these standard paths: +- APIs: \`src/main/wso2mi/artifacts/apis/\` +- Sequences: \`src/main/wso2mi/artifacts/sequences/\` +- Endpoints: \`src/main/wso2mi/artifacts/endpoints/\` +- Proxy Services: \`src/main/wso2mi/artifacts/proxy-services/\` +- Local Entries: \`src/main/wso2mi/artifacts/local-entries/\` +- Inbound Endpoints: \`src/main/wso2mi/artifacts/inbound-endpoints/\` +- Message Stores: \`src/main/wso2mi/artifacts/message-stores/\` +- Message Processors: \`src/main/wso2mi/artifacts/message-processors/\` +- Templates: \`src/main/wso2mi/artifacts/templates/\` +- Tasks: \`src/main/wso2mi/artifacts/tasks/\` + +# User Communication + +- Keep explanations concise and technical +- Show your work by explaining what files you're creating/modifying +- Use code blocks for XML examples in explanations +- Do not mention internal tool names to users +`; + +/** + * Generates the system prompt for the MI design agent + */ +export function getSystemPrompt(): string { + return SYSTEM_PROMPT; +} + +// ============================================================================ +// User Prompt +// ============================================================================ + +/** + * Formats the project structure for the user prompt + */ +function formatProjectStructure(projectPath: string, files: string[]): string { + if (files.length === 0) { + return '\nEmpty project - no existing files.\n'; + } + + const tree = files + .map(f => ` ${f}`) + .join('\n'); + + return ` +Project: ${projectPath} +Files: +${tree} +`; +} + +/** + * Formats existing code context if available + */ +function formatExistingCode(existingCode: Map): string { + if (existingCode.size === 0) { + return ''; + } + + const codeBlocks = Array.from(existingCode.entries()) + .map(([path, content]) => `\n${content}\n`) + .join('\n\n'); + + return ` +${codeBlocks} +`; +} + +/** + * Parameters for generating user prompt + */ +export interface UserPromptParams { + /** User's query/requirement */ + query: string; + /** Path to the project */ + projectPath: string; + /** List of existing files in the project */ + existingFiles: string[]; + /** Map of file path to content for relevant existing code */ + existingCode?: Map; +} + +/** + * Generates the user prompt content + */ +export function getUserPrompt(params: UserPromptParams): Array<{ type: 'text'; text: string }> { + const content: Array<{ type: 'text'; text: string }> = []; + + // Add project structure + content.push({ + type: 'text' as const, + text: formatProjectStructure(params.projectPath, params.existingFiles) + }); + + // Add existing code if available + if (params.existingCode && params.existingCode.size > 0) { + content.push({ + type: 'text' as const, + text: formatExistingCode(params.existingCode) + }); + } + + // Add user query + content.push({ + type: 'text' as const, + text: ` +${params.query} +` + }); + + return content; +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/index.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/index.ts new file mode 100644 index 00000000000..84ffad3789a --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/index.ts @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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. + */ + +// Agent core +export { + executeAgent, + createAgentAbortController, + type AgentEvent, + type AgentEventType, + type AgentEventHandler, + type AgentRequest, + type AgentResult, +} from './agents/main/agent'; + +// Prompts +export { + getSystemPrompt, + getUserPrompt, + type UserPromptParams, +} from './agents/main/system'; + +// Tools +export * from './tools'; diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts new file mode 100644 index 00000000000..c18f30ff168 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts @@ -0,0 +1,693 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 'ai'; +import { z } from 'zod'; +import * as fs from 'fs'; +import * as path from 'path'; + +import { + ValidationResult, + ToolResult, + VALID_FILE_EXTENSIONS, + MAX_LINE_LENGTH, + PREVIEW_LENGTH, + ErrorMessages, + FILE_WRITE_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_MULTI_EDIT_TOOL_NAME, + WriteExecuteFn, + ReadExecuteFn, + EditExecuteFn, + MultiEditExecuteFn, +} from './types'; + +// ============================================================================ +// Validation Functions +// ============================================================================ + +/** + * Validates a file path for security and extension requirements + */ +function validateFilePath(filePath: string): ValidationResult { + if (!filePath || typeof filePath !== 'string') { + return { + valid: false, + error: 'File path is required and must be a string.' + }; + } + + // Security: prevent path traversal + if (filePath.includes('..') || filePath.includes('~')) { + return { + valid: false, + error: 'File path contains invalid characters (.., ~). Use relative paths within the project.' + }; + } + + // Check for valid extension + const hasValidExtension = VALID_FILE_EXTENSIONS.some(ext => + filePath.toLowerCase().endsWith(ext) + ); + + if (!hasValidExtension) { + return { + valid: false, + error: `File must have a valid extension: ${VALID_FILE_EXTENSIONS.join(', ')}` + }; + } + + return { valid: true }; +} + +/** + * Validates line range for read operations + */ +function validateLineRange( + offset: number, + limit: number, + totalLines: number +): ValidationResult { + if (offset < 1 || offset > totalLines) { + return { + valid: false, + error: `Invalid offset ${offset}. File has ${totalLines} lines (1-indexed).` + }; + } + + if (limit < 1) { + return { + valid: false, + error: `Invalid limit ${limit}. Must be at least 1.` + }; + } + + return { valid: true }; +} + +// ============================================================================ +// Utility Functions +// ============================================================================ + +/** + * Replace all occurrences of a string (ES2020 compatible) + */ +function replaceAll(text: string, search: string, replacement: string): string { + return text.split(search).join(replacement); +} + +/** + * Counts non-overlapping occurrences of a search string in text + */ +function countOccurrences(text: string, searchString: string): number { + // Handle edge case of empty strings + if (searchString.trim().length === 0 && text.trim().length === 0) { + return 1; + } + + if (!searchString) { + return 0; + } + + let count = 0; + let position = 0; + + while ((position = text.indexOf(searchString, position)) !== -1) { + count++; + position += searchString.length; + } + + return count; +} + +/** + * Truncates lines that exceed maximum length + */ +function truncateLongLines(content: string, maxLength: number = MAX_LINE_LENGTH): string { + const lines = content.split('\n'); + return lines.map(line => { + if (line.length > maxLength) { + return line.substring(0, maxLength) + '... [truncated]'; + } + return line; + }).join('\n'); +} + +/** + * Adds a file path to the modified files list if not already present + */ +function trackModifiedFile(modifiedFiles: string[] | undefined, filePath: string): void { + if (modifiedFiles && !modifiedFiles.includes(filePath)) { + modifiedFiles.push(filePath); + } +} + +/** + * Helper to get file path description for tool parameters + */ +const getFilePathDescription = (op: string) => + `The relative path to the file to ${op}. Use paths relative to the project root (e.g., "src/main/wso2mi/artifacts/apis/MyAPI.xml")`; + +// ============================================================================ +// Execute Functions (Business Logic) +// ============================================================================ + +/** + * Creates the execute function for file_write tool + */ +export function createWriteExecute(projectPath: string, modifiedFiles?: string[]): WriteExecuteFn { + return async (args: { file_path: string; content: string }): Promise => { + const { file_path, content } = args; + console.log(`[FileWriteTool] Writing to ${file_path}, content length: ${content.length}`); + + // Validate file path + const pathValidation = validateFilePath(file_path); + if (!pathValidation.valid) { + console.error(`[FileWriteTool] Invalid file path: ${file_path}`); + return { + success: false, + message: pathValidation.error!, + error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` + }; + } + + // Validate content is not empty + if (!content || content.trim().length === 0) { + console.error(`[FileWriteTool] Empty content provided for file: ${file_path}`); + return { + success: false, + message: 'Content cannot be empty when writing a file.', + error: `Error: ${ErrorMessages.EMPTY_CONTENT}` + }; + } + + const fullPath = path.join(projectPath, file_path); + + // Check if file exists with non-empty content + const fileExists = fs.existsSync(fullPath); + if (fileExists) { + const existingContent = fs.readFileSync(fullPath, 'utf-8'); + if (existingContent.trim().length > 0) { + console.error(`[FileWriteTool] File already exists with content: ${file_path}`); + return { + success: false, + message: `File '${file_path}' already exists with content. Use ${FILE_EDIT_TOOL_NAME} or ${FILE_MULTI_EDIT_TOOL_NAME} to modify it instead.`, + error: `Error: ${ErrorMessages.FILE_ALREADY_EXISTS}` + }; + } + } + + // Create parent directories if they don't exist + const dirPath = path.dirname(fullPath); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + } + + // Write the file + fs.writeFileSync(fullPath, content, 'utf-8'); + + // Track modified file + trackModifiedFile(modifiedFiles, file_path); + + const lineCount = content.split('\n').length; + const action = fileExists ? 'updated' : 'created'; + + console.log(`[FileWriteTool] Successfully ${action} file: ${file_path} with ${lineCount} lines`); + return { + success: true, + message: `Successfully ${action} file '${file_path}' with ${lineCount} line(s).` + }; + }; +} + +/** + * Creates the execute function for file_read tool + */ +export function createReadExecute(projectPath: string): ReadExecuteFn { + return async (args: { file_path: string; offset?: number; limit?: number }): Promise => { + const { file_path, offset, limit } = args; + console.log(`[FileReadTool] Reading ${file_path}, offset: ${offset}, limit: ${limit}`); + + // Validate file path + const pathValidation = validateFilePath(file_path); + if (!pathValidation.valid) { + console.error(`[FileReadTool] Invalid file path: ${file_path}`); + return { + success: false, + message: pathValidation.error!, + error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` + }; + } + + const fullPath = path.join(projectPath, file_path); + + // Check if file exists + if (!fs.existsSync(fullPath)) { + console.error(`[FileReadTool] File not found: ${file_path}`); + return { + success: false, + message: `File '${file_path}' not found.`, + error: `Error: ${ErrorMessages.FILE_NOT_FOUND}` + }; + } + + // Read file content + const content = fs.readFileSync(fullPath, 'utf-8'); + + // Handle empty file + if (content.trim().length === 0) { + console.log(`[FileReadTool] File is empty: ${file_path}`); + return { + success: true, + message: `File '${file_path}' is empty.`, + }; + } + + // Split content into lines + const lines = content.split('\n'); + const totalLines = lines.length; + + // Handle ranged read + if (offset !== undefined && limit !== undefined) { + const validation = validateLineRange(offset, limit, totalLines); + if (!validation.valid) { + console.error(`[FileReadTool] Invalid line range for file: ${file_path}`); + return { + success: false, + message: validation.error!, + error: `Error: ${ErrorMessages.INVALID_LINE_RANGE}` + }; + } + + const startIndex = offset - 1; // Convert to 0-based index + const endIndex = Math.min(startIndex + limit, totalLines); + const rangedLines = lines.slice(startIndex, endIndex); + + // Add line numbers + const numberedContent = rangedLines + .map((line, idx) => `${(startIndex + idx + 1).toString().padStart(4, ' ')}\t${line}`) + .join('\n'); + const truncatedContent = truncateLongLines(numberedContent); + + console.log(`[FileReadTool] Read lines ${offset} to ${endIndex} from file: ${file_path}`); + return { + success: true, + message: `Read lines ${offset} to ${endIndex} from '${file_path}' (${endIndex - startIndex} of ${totalLines} lines).\n\nContent:\n${truncatedContent}`, + }; + } + + // Return full content with line numbers + const numberedContent = lines + .map((line, idx) => `${(idx + 1).toString().padStart(4, ' ')}\t${line}`) + .join('\n'); + const truncatedContent = truncateLongLines(numberedContent); + + console.log(`[FileReadTool] Read entire file: ${file_path}, total lines: ${totalLines}`); + return { + success: true, + message: `Read entire file '${file_path}' (${totalLines} lines).\n\nContent:\n${truncatedContent}`, + }; + }; +} + +/** + * Creates the execute function for file_edit tool + */ +export function createEditExecute(projectPath: string, modifiedFiles?: string[]): EditExecuteFn { + return async (args: { + file_path: string; + old_string: string; + new_string: string; + replace_all?: boolean; + }): Promise => { + const { file_path, old_string, new_string, replace_all = false } = args; + console.log(`[FileEditTool] Editing ${file_path}, replace_all: ${replace_all}`); + + // Validate file path + const pathValidation = validateFilePath(file_path); + if (!pathValidation.valid) { + console.error(`[FileEditTool] Invalid file path: ${file_path}`); + return { + success: false, + message: pathValidation.error!, + error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` + }; + } + + // Check if old_string and new_string are identical + if (old_string === new_string) { + console.error(`[FileEditTool] old_string and new_string are identical`); + return { + success: false, + message: 'old_string and new_string are identical. No changes to make.', + error: `Error: ${ErrorMessages.IDENTICAL_STRINGS}` + }; + } + + const fullPath = path.join(projectPath, file_path); + + // Check if file exists + if (!fs.existsSync(fullPath)) { + console.error(`[FileEditTool] File not found: ${file_path}`); + return { + success: false, + message: `File '${file_path}' not found. Use ${FILE_WRITE_TOOL_NAME} to create new files.`, + error: `Error: ${ErrorMessages.FILE_NOT_FOUND}` + }; + } + + // Read file content + const content = fs.readFileSync(fullPath, 'utf-8'); + + // Count occurrences + const occurrenceCount = countOccurrences(content, old_string); + + if (occurrenceCount === 0) { + const preview = content.substring(0, PREVIEW_LENGTH); + console.error(`[FileEditTool] No occurrences of old_string found in file: ${file_path}`); + return { + success: false, + message: `String to replace was not found in '${file_path}'. Please verify the exact text to replace, including whitespace and indentation.\n\nFile Preview:\n${preview}${content.length > PREVIEW_LENGTH ? '...' : ''}`, + error: `Error: ${ErrorMessages.NO_MATCH_FOUND}`, + }; + } + + // If not replace_all, ensure exactly one match + if (!replace_all && occurrenceCount > 1) { + console.error(`[FileEditTool] Multiple occurrences (${occurrenceCount}) found`); + return { + success: false, + message: `Found ${occurrenceCount} occurrences of the text in '${file_path}'. Either make old_string more specific to match exactly one occurrence, or set replace_all to true to replace all occurrences.`, + error: `Error: ${ErrorMessages.MULTIPLE_MATCHES}`, + }; + } + + // Perform replacement + let newContent: string; + if (content.trim() === '' && old_string.trim() === '') { + newContent = new_string; + } else { + newContent = replace_all + ? replaceAll(content, old_string, new_string) + : content.replace(old_string, new_string); + } + + // Write back to file + fs.writeFileSync(fullPath, newContent, 'utf-8'); + + // Track modified file + trackModifiedFile(modifiedFiles, file_path); + + const replacedCount = replace_all ? occurrenceCount : 1; + console.log(`[FileEditTool] Successfully replaced ${replacedCount} occurrence(s) in file: ${file_path}`); + return { + success: true, + message: `Successfully replaced ${replacedCount} occurrence(s) in '${file_path}'.` + }; + }; +} + +/** + * Creates the execute function for file_multi_edit tool + */ +export function createMultiEditExecute(projectPath: string, modifiedFiles?: string[]): MultiEditExecuteFn { + return async (args: { + file_path: string; + edits: Array<{ + old_string: string; + new_string: string; + replace_all?: boolean; + }>; + }): Promise => { + const { file_path, edits } = args; + console.log(`[FileMultiEditTool] Editing ${file_path} with ${edits.length} edits`); + + // Validate file path + const pathValidation = validateFilePath(file_path); + if (!pathValidation.valid) { + console.error(`[FileMultiEditTool] Invalid file path: ${file_path}`); + return { + success: false, + message: pathValidation.error!, + error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` + }; + } + + // Validate edits array + if (!edits || edits.length === 0) { + console.error(`[FileMultiEditTool] No edits provided`); + return { + success: false, + message: 'No edits provided. At least one edit is required.', + error: `Error: ${ErrorMessages.NO_EDITS}` + }; + } + + const fullPath = path.join(projectPath, file_path); + + // Check if file exists + if (!fs.existsSync(fullPath)) { + console.error(`[FileMultiEditTool] File not found: ${file_path}`); + return { + success: false, + message: `File '${file_path}' not found. Use ${FILE_WRITE_TOOL_NAME} to create new files.`, + error: `Error: ${ErrorMessages.FILE_NOT_FOUND}` + }; + } + + // Read file content + let content = fs.readFileSync(fullPath, 'utf-8'); + + // Validate all edits before applying any + const validationErrors: string[] = []; + + for (let i = 0; i < edits.length; i++) { + const edit = edits[i]; + + // Check if old_string and new_string are identical + if (edit.old_string === edit.new_string) { + validationErrors.push(`Edit ${i + 1}: old_string and new_string are identical`); + continue; + } + + // Count occurrences in current content state + const occurrenceCount = countOccurrences(content, edit.old_string); + + if (occurrenceCount === 0) { + validationErrors.push(`Edit ${i + 1}: old_string not found in file`); + continue; + } + + if (!edit.replace_all && occurrenceCount > 1) { + validationErrors.push(`Edit ${i + 1}: Found ${occurrenceCount} occurrences. Set replace_all to true or make old_string more specific`); + continue; + } + + // Apply the edit to simulate the sequence (for validation of subsequent edits) + if (content.trim() === '' && edit.old_string.trim() === '') { + content = edit.new_string; + } else { + content = edit.replace_all + ? replaceAll(content, edit.old_string, edit.new_string) + : content.replace(edit.old_string, edit.new_string); + } + } + + // If there were validation errors, return them without applying any edits + if (validationErrors.length > 0) { + console.error(`[FileMultiEditTool] Validation errors:\n${validationErrors.join('\n')}`); + return { + success: false, + message: `Multi-edit validation failed:\n${validationErrors.join('\n')}`, + error: `Error: ${ErrorMessages.EDIT_FAILED}`, + }; + } + + // All validations passed, content already has all edits applied + // Write back to file + fs.writeFileSync(fullPath, content, 'utf-8'); + + // Track modified file + trackModifiedFile(modifiedFiles, file_path); + + console.log(`[FileMultiEditTool] Successfully applied ${edits.length} edits to file: ${file_path}`); + return { + success: true, + message: `Successfully applied ${edits.length} edit(s) to '${file_path}'.` + }; + }; +} + +// ============================================================================ +// Tool Definitions (Vercel AI SDK format) +// ============================================================================ + +// Zod schemas defined separately to avoid deep type instantiation issues +const writeInputSchema = z.object({ + file_path: z.string(), + content: z.string() +}); + +const readInputSchema = z.object({ + file_path: z.string(), + offset: z.number().optional(), + limit: z.number().optional() +}); + +const editInputSchema = z.object({ + file_path: z.string(), + old_string: z.string(), + new_string: z.string(), + replace_all: z.boolean().optional() +}); + +const multiEditInputSchema = z.object({ + file_path: z.string(), + edits: z.array( + z.object({ + old_string: z.string(), + new_string: z.string(), + replace_all: z.boolean().optional() + }) + ) +}); + +/** + * Creates the file_write tool + */ +export function createWriteTool(execute: WriteExecuteFn) { + // Type assertion to avoid TypeScript deep instantiation issues with Zod + return (tool as any)({ + description: `Creates a new file with the specified content. + +Usage: +- Use this tool to create NEW files only. It will fail if the file already has content. +- To modify existing files, use ${FILE_EDIT_TOOL_NAME} or ${FILE_MULTI_EDIT_TOOL_NAME} instead. +- The file path should be relative to the project root. +- Parent directories will be created automatically if they don't exist. +- Valid file extensions: ${VALID_FILE_EXTENSIONS.join(', ')} + +For Synapse/MI projects, common paths include: +- src/main/wso2mi/artifacts/apis/ - API configurations +- src/main/wso2mi/artifacts/sequences/ - Sequence configurations +- src/main/wso2mi/artifacts/endpoints/ - Endpoint configurations +- src/main/wso2mi/artifacts/proxy-services/ - Proxy service configurations +- src/main/wso2mi/artifacts/inbound-endpoints/ - Inbound endpoint configurations + +Parameters: +- file_path: ${getFilePathDescription('write to')} +- content: The content to write to the file. Cannot be empty.`, + inputSchema: writeInputSchema, + execute + }); +} + +/** + * Creates the file_read tool + */ +export function createReadTool(execute: ReadExecuteFn) { + // Type assertion to avoid TypeScript deep instantiation issues with Zod + return (tool as any)({ + description: `Reads a file from the project. + +Usage: +- The file path should be relative to the project root. +- For large files, use offset and limit parameters to read in chunks. +- Lines longer than ${MAX_LINE_LENGTH} characters will be truncated. +- Content is returned with line numbers for easy reference. +- Valid file extensions: ${VALID_FILE_EXTENSIONS.join(', ')} + +IMPORTANT: Before editing a file, always read it first to understand its current content and structure. + +Parameters: +- file_path: ${getFilePathDescription('read from')} +- offset: Line number to start reading from (1-indexed). Use for large files. (optional) +- limit: Number of lines to read. Use for large files. (optional)`, + inputSchema: readInputSchema, + execute + }); +} + +/** + * Creates the file_edit tool + */ +export function createEditTool(execute: EditExecuteFn) { + // Type assertion to avoid TypeScript deep instantiation issues with Zod + return (tool as any)({ + description: `Performs a find-and-replace operation on an existing file. + +Usage: +- ALWAYS read the file first before editing to ensure you have the exact content. +- The old_string must match EXACTLY, including all whitespace, indentation, and line breaks. +- The edit will FAIL if old_string is not unique. Either: + - Provide more surrounding context to make it unique, OR + - Set replace_all to true to replace ALL occurrences +- Use replace_all=true when renaming variables, updating repeated patterns, etc. +- For multiple edits to the same file, prefer ${FILE_MULTI_EDIT_TOOL_NAME} instead. +- Cannot create new files. Use ${FILE_WRITE_TOOL_NAME} for that. + +Tips for Synapse XML editing: +- Include surrounding XML tags to ensure unique matches +- Preserve XML indentation exactly +- Be careful with XML namespaces and attributes + +Parameters: +- file_path: ${getFilePathDescription('edit')} +- old_string: The exact text to replace (must match file contents exactly, including whitespace) +- new_string: The replacement text (must be different from old_string) +- replace_all: If true, replace ALL occurrences. If false (default), requires exactly one match. (optional)`, + inputSchema: editInputSchema, + execute + }); +} + +/** + * Creates the file_multi_edit tool + */ +export function createMultiEditTool(execute: MultiEditExecuteFn) { + // Type assertion to avoid TypeScript deep instantiation issues with Zod + return (tool as any)({ + description: `Performs multiple find-and-replace operations on a single file atomically. + +Usage: +- Preferred over ${FILE_EDIT_TOOL_NAME} when making multiple changes to the same file. +- All edits are validated before any are applied - if any edit fails, NONE are applied. +- Edits are applied SEQUENTIALLY in the order provided. +- Each subsequent edit operates on the result of previous edits. +- ALWAYS read the file first before editing. + +IMPORTANT: +- Plan edits carefully to avoid conflicts (earlier edits change what later edits find) +- All old_string values must match exactly, including whitespace +- Cannot create new files. Use ${FILE_WRITE_TOOL_NAME} for that. + +Example use cases: +- Updating multiple mediator configurations +- Renaming endpoints across a file +- Modifying multiple property values + +Parameters: +- file_path: ${getFilePathDescription('edit')} +- edits: Array of edit operations to perform sequentially. Each edit has: + - old_string: The exact text to replace + - new_string: The replacement text + - replace_all: If true, replace all occurrences of this old_string (optional)`, + inputSchema: multiEditInputSchema, + execute + }); +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/index.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/index.ts new file mode 100644 index 00000000000..cd637933970 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/index.ts @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 types +export * from './types'; + +// Export file tools +export { + // Execute function creators + createWriteExecute, + createReadExecute, + createEditExecute, + createMultiEditExecute, + // Tool creators + createWriteTool, + createReadTool, + createEditTool, + createMultiEditTool, +} from './file_tools'; + +// Re-export tool names for convenience +export { + FILE_WRITE_TOOL_NAME, + FILE_READ_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_MULTI_EDIT_TOOL_NAME, +} from './types'; + +/** + * Creates all file tools for the agent + * + * @param projectPath - The root path of the MI project + * @param modifiedFiles - Optional array to track modified files + * @returns Object containing all file tools + * + * @example + * ```typescript + * const modifiedFiles: string[] = []; + * const tools = createFileTools('/path/to/project', modifiedFiles); + * + * // Use with Vercel AI SDK streamText + * const result = await streamText({ + * model, + * tools, + * // ... + * }); + * ``` + */ +export function createFileTools(projectPath: string, modifiedFiles?: string[]) { + // Import here to avoid circular dependencies + const { + createWriteExecute, + createReadExecute, + createEditExecute, + createMultiEditExecute, + createWriteTool, + createReadTool, + createEditTool, + createMultiEditTool, + } = require('./file_tools'); + + const { + FILE_WRITE_TOOL_NAME, + FILE_READ_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_MULTI_EDIT_TOOL_NAME, + } = require('./types'); + + return { + [FILE_WRITE_TOOL_NAME]: createWriteTool(createWriteExecute(projectPath, modifiedFiles)), + [FILE_READ_TOOL_NAME]: createReadTool(createReadExecute(projectPath)), + [FILE_EDIT_TOOL_NAME]: createEditTool(createEditExecute(projectPath, modifiedFiles)), + [FILE_MULTI_EDIT_TOOL_NAME]: createMultiEditTool(createMultiEditExecute(projectPath, modifiedFiles)), + }; +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts new file mode 100644 index 00000000000..04f17324636 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts @@ -0,0 +1,119 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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. + */ + +// ============================================================================ +// Types & Interfaces +// ============================================================================ + +export interface ValidationResult { + valid: boolean; + error?: string; +} + +export interface ToolResult { + success: boolean; + message: string; + error?: string; +} + +// ============================================================================ +// Constants +// ============================================================================ + +/** + * Valid file extensions for MI/Synapse projects + * - .xml: Synapse configurations (APIs, sequences, endpoints, etc.) + * - .yaml/.yml: Configuration files + * - .properties: Property files + * - .md: Documentation + * - .json: JSON configurations + * - .dmc: Data mapper configurations + * - .ts: TypeScript files (for data mapper) + */ +export const VALID_FILE_EXTENSIONS = [ + '.xml', + '.yaml', + '.yml', + '.properties', + '.md', + '.json', + '.dmc', + '.ts' +]; + +export const MAX_LINE_LENGTH = 2000; +export const DEFAULT_READ_LIMIT = 2000; +export const PREVIEW_LENGTH = 200; + +// ============================================================================ +// Tool Names +// ============================================================================ + +export const FILE_WRITE_TOOL_NAME = 'file_write'; +export const FILE_READ_TOOL_NAME = 'file_read'; +export const FILE_EDIT_TOOL_NAME = 'file_edit'; +export const FILE_MULTI_EDIT_TOOL_NAME = 'file_multi_edit'; + +// ============================================================================ +// Error Messages +// ============================================================================ + +export const ErrorMessages = { + FILE_NOT_FOUND: 'File not found', + FILE_ALREADY_EXISTS: 'File already exists with content', + INVALID_FILE_PATH: 'Invalid file path', + INVALID_EXTENSION: 'Invalid file extension', + EMPTY_CONTENT: 'Content cannot be empty', + NO_MATCH_FOUND: 'No match found for old_string', + MULTIPLE_MATCHES: 'Multiple matches found - old_string must be unique', + IDENTICAL_STRINGS: 'old_string and new_string are identical', + INVALID_LINE_RANGE: 'Invalid line range', + EDIT_FAILED: 'Edit operation failed', + NO_EDITS: 'No edits provided', +}; + +// ============================================================================ +// Type Definitions for Execute Functions +// ============================================================================ + +export type WriteExecuteFn = (args: { + file_path: string; + content: string; +}) => Promise; + +export type ReadExecuteFn = (args: { + file_path: string; + offset?: number; + limit?: number; +}) => Promise; + +export type EditExecuteFn = (args: { + file_path: string; + old_string: string; + new_string: string; + replace_all?: boolean; +}) => Promise; + +export type MultiEditExecuteFn = (args: { + file_path: string; + edits: Array<{ + old_string: string; + new_string: string; + replace_all?: boolean; + }>; +}) => Promise; diff --git a/workspaces/mi/mi-extension/src/ai-panel/aiMachine.ts b/workspaces/mi/mi-extension/src/ai-features/aiMachine.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/aiMachine.ts rename to workspaces/mi/mi-extension/src/ai-features/aiMachine.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/auth.ts b/workspaces/mi/mi-extension/src/ai-features/auth.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/auth.ts rename to workspaces/mi/mi-extension/src/ai-features/auth.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts b/workspaces/mi/mi-extension/src/ai-features/connection.ts similarity index 97% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts rename to workspaces/mi/mi-extension/src/ai-features/connection.ts index 1dba6ec04ae..6bf30360a8a 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/connection.ts +++ b/workspaces/mi/mi-extension/src/ai-features/connection.ts @@ -16,10 +16,10 @@ import { createAnthropic } from "@ai-sdk/anthropic"; import * as vscode from "vscode"; -import { getAccessToken, getLoginMethod, getRefreshedAccessToken } from "../auth"; -import { StateMachineAI, openAIWebview } from "../aiMachine"; +import { getAccessToken, getLoginMethod, getRefreshedAccessToken } from "./auth"; +import { StateMachineAI, openAIWebview } from "./aiMachine"; import { AI_EVENT_TYPE, LoginMethod } from "@wso2/mi-core"; -import { logInfo, logDebug, logError } from "./logger"; +import { logInfo, logDebug, logError } from "./copilot/logger"; export const ANTHROPIC_HAIKU_4_5 = "claude-haiku-4-5-20251001"; export const ANTHROPIC_SONNET_4_5 = "claude-sonnet-4-5-20250929"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/fill.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/fill.ts similarity index 99% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/fill.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/fill.ts index 7f275bcc613..6a7625bd649 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/fill.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/fill.ts @@ -19,7 +19,7 @@ import { generateObject } from "ai"; import { z } from "zod"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../../connection"; import { SYSTEM } from "./system"; import { PROMPT } from "./prompt"; import { SYNAPSE_GUIDE } from "../context/synapse_guide"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/auto-fill/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/auto-fill/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/connector_db.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/connector_db.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/connector_db.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/connectors/connector_db.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/connectors.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/connectors.ts similarity index 99% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/connectors.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/connectors/connectors.ts index 153c6d34dec..9ebd9299ab2 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/connectors.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/connectors.ts @@ -20,7 +20,7 @@ import { generateObject } from "ai"; import { z } from "zod"; import * as Handlebars from "handlebars"; import { FileObject, ImageObject } from "@wso2/mi-core"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../../connection"; import { SYSTEM_TEMPLATE } from "./system"; import { CONNECTOR_PROMPT } from "./prompt"; import { CONNECTOR_DB } from "./connector_db"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/inbound_db.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/inbound_db.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/inbound_db.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/connectors/inbound_db.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/connectors/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/connectors/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/connectors/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/connectors/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/context/ai_module.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/context/ai_module.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/context/ai_module.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/context/ai_module.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_expression_examples.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_expression_examples.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_expression_examples.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_expression_examples.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_expression_guide.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_expression_guide.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_expression_guide.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_expression_guide.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_guide.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_guide.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_guide.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_guide.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_guide_v1.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_guide_v1.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/context/synapse_guide_v1.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/context/synapse_guide_v1.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/mapper.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/mapper.ts similarity index 97% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/mapper.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/mapper.ts index a49f7b7b3b5..65d37b91d1c 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/mapper.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/mapper.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../../connection"; import { DATA_MAPPER_SYSTEM_TEMPLATE } from "./system"; import { DATA_MAPPER_PROMPT } from "./prompt"; import { logError } from "../logger"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/data-mapper/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/data-mapper/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/diagnostics.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/diagnostics.ts similarity index 99% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/diagnostics.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/diagnostics.ts index aee40c48fba..ce5f5928e09 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/diagnostics.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/diagnostics.ts @@ -19,7 +19,7 @@ import { generateObject } from "ai"; import { z } from "zod"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../../connection"; import { DIAGNOSTICS_SYSTEM_TEMPLATE } from "./system"; import { DIAGNOSTICS_PROMPT } from "./prompt"; import { SYNAPSE_GUIDE } from "../context/synapse_guide"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/diagnostics/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/diagnostics/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/dmc_to_ts.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/dmc_to_ts.ts similarity index 97% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/dmc_to_ts.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/dmc_to_ts.ts index 1a9f065e889..5ca6901b69b 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/dmc_to_ts.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/dmc_to_ts.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_SONNET_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_SONNET_4_5 } from "../../connection"; import { DMC_TO_TS_SYSTEM_TEMPLATE } from "./system"; import { DMC_TO_TS_PROMPT } from "./prompt"; import { logInfo } from "../logger"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/dmc_to_ts/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/dmc_to_ts/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/generations.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/generations.ts similarity index 99% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/generation/generations.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/generation/generations.ts index 6368d83d00c..71ae8d6c1f2 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/generations.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/generations.ts @@ -20,7 +20,7 @@ import { streamText } from "ai"; import { AnthropicProviderOptions } from "@ai-sdk/anthropic"; import * as Handlebars from "handlebars"; import { FileObject, ImageObject } from "@wso2/mi-core"; -import { getAnthropicClient, ANTHROPIC_SONNET_4_5, getProviderCacheControl } from "../connection"; +import { getAnthropicClient, ANTHROPIC_SONNET_4_5, getProviderCacheControl } from "../../connection"; import { SYSTEM_TEMPLATE } from "./system_v2"; import { PROMPT_TEMPLATE } from "./prompt_v2"; import { SYSTEM_TEMPLATE as SYSTEM_TEMPLATE_V1 } from "./system_v1"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/prompt_v1.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/prompt_v1.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/generation/prompt_v1.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/generation/prompt_v1.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/prompt_v2.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/prompt_v2.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/generation/prompt_v2.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/generation/prompt_v2.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/system_v1.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/system_v1.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/generation/system_v1.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/generation/system_v1.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/generation/system_v2.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/generation/system_v2.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/generation/system_v2.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/generation/system_v2.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/fill_schema.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/fill_schema.ts similarity index 98% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/idp/fill_schema.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/idp/fill_schema.ts index 7a810d1c6e5..3a41abd5679 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/fill_schema.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/fill_schema.ts @@ -18,7 +18,7 @@ import { generateObject } from "ai"; import { z } from "zod"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../../connection"; import { logInfo, logError } from "../logger"; // System prompt from IdpUtills.tsx diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/idp.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/idp.ts similarity index 98% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/idp/idp.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/idp/idp.ts index 9c9e8cb1fce..cc62218724b 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/idp.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/idp.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../../connection"; import { SYSTEM_IDP } from "./system"; import { IDP_PROMPT } from "./prompt"; import { logError } from "../logger"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/idp/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/idp/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/idp/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/idp/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/idp/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/idp/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/logger.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/logger.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/logger.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/logger.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/message-utils.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/message-utils.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/message-utils.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/message-utils.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/prompt.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/prompt.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/prompt.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/suggestions.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/suggestions.ts similarity index 98% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/suggestions.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/suggestions.ts index c341a45dec7..139031612cc 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/suggestions.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/suggestions.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../../connection"; import { SYSTEM_TEMPLATE } from "./system"; import { PROMPT_TEMPLATE } from "./prompt"; import { logError } from "../logger"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/system.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/system.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/suggestions/system.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/suggestions/system.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/prompt_case_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/prompt_case_generate.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/prompt_case_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/prompt_case_generate.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/prompt_suite_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/prompt_suite_generate.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/prompt_suite_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/prompt_suite_generate.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/system_case_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/system_case_generate.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/system_case_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/system_case_generate.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/system_suite_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/system_suite_generate.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/system_suite_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/system_suite_generate.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_case_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_case_generate.ts similarity index 99% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_case_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_case_generate.ts index 8bd2e97b169..ce5d6fa532f 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_case_generate.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_case_generate.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5, getProviderCacheControl } from "../../connection"; import { SYSTEM_CASE_GENERATE } from "./system_case_generate"; import { PROMPT_CASE_GENERATE } from "./prompt_case_generate"; import { UNIT_TEST_GUIDE } from "./unit_test_guide"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_examples.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_examples.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_examples.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_examples.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_generate.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_generate.ts similarity index 98% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_generate.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_generate.ts index 9067403f574..021a9ebc80c 100644 --- a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_generate.ts +++ b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_generate.ts @@ -18,7 +18,7 @@ import { generateText } from "ai"; import * as Handlebars from "handlebars"; -import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../connection"; +import { getAnthropicClient, ANTHROPIC_HAIKU_4_5 } from "../../connection"; import { SYSTEM_SUITE_GENERATE } from "./system_suite_generate"; import { PROMPT_SUITE_GENERATE } from "./prompt_suite_generate"; import { UNIT_TEST_GUIDE } from "./unit_test_guide"; diff --git a/workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_guide.ts b/workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_guide.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/copilot/unit-tests/unit_test_guide.ts rename to workspaces/mi/mi-extension/src/ai-features/copilot/unit-tests/unit_test_guide.ts diff --git a/workspaces/mi/mi-extension/src/ai-panel/webview.ts b/workspaces/mi/mi-extension/src/ai-features/webview.ts similarity index 100% rename from workspaces/mi/mi-extension/src/ai-panel/webview.ts rename to workspaces/mi/mi-extension/src/ai-features/webview.ts diff --git a/workspaces/mi/mi-extension/src/constants/index.ts b/workspaces/mi/mi-extension/src/constants/index.ts index cd59f771d22..5e484071114 100644 --- a/workspaces/mi/mi-extension/src/constants/index.ts +++ b/workspaces/mi/mi-extension/src/constants/index.ts @@ -23,6 +23,7 @@ export const COMMANDS = { SHOW_OVERVIEW: "MI.showOverview", DISABLE_OVERVIEW: "MI.disableOverview", OPEN_AI_PANEL: "MI.openAiPanel", + OPEN_AGENT_PANEL: "MI.openAgentPanel", CLEAR_AI_PROMPT: "MI.clearAIPrompt", OPEN_WELCOME: "MI.openWelcome", SHOW_GRAPHICAL_VIEW: "MI.show.graphical-view", diff --git a/workspaces/mi/mi-extension/src/extension.ts b/workspaces/mi/mi-extension/src/extension.ts index 16b0c474dc3..96a6a95ee5b 100644 --- a/workspaces/mi/mi-extension/src/extension.ts +++ b/workspaces/mi/mi-extension/src/extension.ts @@ -20,7 +20,7 @@ import * as vscode from 'vscode'; import { extension } from './MIExtensionContext'; import { activate as activateHistory } from './history'; import { activateVisualizer } from './visualizer/activate'; -import { activateAiPanel } from './ai-panel/activate'; +import { activateAiPanel } from './ai-features/activate'; import { activateDebugger } from './debugger/activate'; import { activateMigrationSupport } from './migration'; @@ -28,7 +28,7 @@ import { activateRuntimeService } from './runtime-services-panel/activate'; import { MILanguageClient } from './lang-client/activator'; import { activateUriHandlers } from './uri-handler'; import { extensions, workspace } from 'vscode'; -import { StateMachineAI } from './ai-panel/aiMachine'; +import { StateMachineAI } from './ai-features/aiMachine'; import { isOldProjectOrWorkspace, getStateMachine } from './stateMachine'; import { webviews } from './visualizer/webview'; import { v4 as uuidv4 } from 'uuid'; diff --git a/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/event-handler.ts b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/event-handler.ts new file mode 100644 index 00000000000..8d1a10f63e7 --- /dev/null +++ b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/event-handler.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { AgentEvent, agentEvent } from "@wso2/mi-core"; +import { RPCLayer } from "../../RPCLayer"; +import { AiPanelWebview } from '../../ai-features/webview'; +import { logWarn, logError } from "../../ai-features/copilot/logger"; + +export class AgentEventHandler { + + constructor(private projectUri: string) { + this.projectUri = projectUri; + } + + handleEvent(event: AgentEvent): void { + this.sendEventToVisualizer(event); + } + + handleStart(): void { + this.sendEventToVisualizer({ type: "start" }); + } + + handleContentBlock(content: string): void { + this.sendEventToVisualizer({ type: "content_block", content }); + } + + handleToolCall(toolName: string, toolInput?: unknown): void { + this.sendEventToVisualizer({ type: "tool_call", toolName, toolInput }); + } + + handleToolResult(toolName: string, toolOutput?: unknown): void { + this.sendEventToVisualizer({ type: "tool_result", toolName, toolOutput }); + } + + handleError(error: string): void { + this.sendEventToVisualizer({ type: "error", error }); + } + + handleAbort(): void { + this.sendEventToVisualizer({ type: "abort" }); + } + + handleStop(): void { + this.sendEventToVisualizer({ type: "stop" }); + } + + private sendEventToVisualizer(event: AgentEvent): void { + try { + const messenger = (RPCLayer as any)._messengers.get(this.projectUri); + if (messenger) { + messenger.sendNotification( + agentEvent, + { type: 'webview', webviewType: AiPanelWebview.viewType }, + event + ); + } else { + logWarn(`No messenger found for project: ${this.projectUri}`); + } + } catch (error) { + logError("Error sending agent event to visualizer", error); + } + } +} diff --git a/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-handler.ts b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-handler.ts new file mode 100644 index 00000000000..6424a0f4b81 --- /dev/null +++ b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-handler.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { MessengerAPI } from "vscode-messenger-common"; +import { MIAgentPanelRpcManager } from "./rpc-manager"; +import { + sendAgentMessage, + abortAgentGeneration, + SendAgentMessageRequest +} from "@wso2/mi-core"; + +export function registerMIAgentPanelRpcHandlers(messenger: MessengerAPI, projectUri: string) { + const rpcManager = new MIAgentPanelRpcManager(projectUri); + + // ================================== + // Agent Functions + // ================================== + messenger.onRequest(sendAgentMessage, (request: SendAgentMessageRequest) => rpcManager.sendAgentMessage(request)); + messenger.onRequest(abortAgentGeneration, () => rpcManager.abortAgentGeneration()); +} diff --git a/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts new file mode 100644 index 00000000000..fae4fca8e05 --- /dev/null +++ b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { + MIAgentPanelAPI, + SendAgentMessageRequest, + SendAgentMessageResponse +} from '@wso2/mi-core'; +import { AgentEventHandler } from './event-handler'; +import { executeAgent, createAgentAbortController, AgentEvent } from '../../ai-features/agent-mode'; +import { logInfo, logError, logDebug } from '../../ai-features/copilot/logger'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class MIAgentPanelRpcManager implements MIAgentPanelAPI { + private eventHandler: AgentEventHandler; + private currentAbortController: AbortController | null = null; + + constructor(private projectUri: string) { + this.eventHandler = new AgentEventHandler(projectUri); + } + + /** + * Get list of existing files in the MI project + */ + private getExistingFiles(): string[] { + const files: string[] = []; + const artifactsPath = path.join(this.projectUri, 'src', 'main', 'wso2mi', 'artifacts'); + + if (!fs.existsSync(artifactsPath)) { + return files; + } + + const scanDir = (dir: string, relativePath: string = '') => { + try { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + const relPath = path.join(relativePath, entry.name); + if (entry.isDirectory()) { + scanDir(fullPath, relPath); + } else if (entry.isFile() && entry.name.endsWith('.xml')) { + files.push(relPath); + } + } + } catch (error) { + logError(`Error scanning directory: ${dir}`, error); + } + }; + + scanDir(artifactsPath); + return files; + } + + /** + * Send a message to the agent for processing + */ + async sendAgentMessage(request: SendAgentMessageRequest): Promise { + try { + logInfo(`[AgentPanel] Received message: ${request.message.substring(0, 100)}...`); + + // Create abort controller for this request + this.currentAbortController = createAgentAbortController(); + + // Get existing files for context + const existingFiles = this.getExistingFiles(); + logDebug(`[AgentPanel] Found ${existingFiles.length} existing files`); + + // Execute the agent + const result = await executeAgent( + { + query: request.message, + projectPath: this.projectUri, + existingFiles, + abortSignal: this.currentAbortController.signal + }, + (event: AgentEvent) => { + // Forward events to the visualizer + this.eventHandler.handleEvent(event); + } + ); + + // Clean up abort controller + this.currentAbortController = null; + + if (result.success) { + logInfo(`[AgentPanel] Agent completed successfully. Modified ${result.modifiedFiles.length} files.`); + return { + success: true, + message: 'Agent completed successfully', + modifiedFiles: result.modifiedFiles + }; + } else { + logError(`[AgentPanel] Agent failed: ${result.error}`); + return { + success: false, + error: result.error + }; + } + } catch (error) { + logError('[AgentPanel] Error executing agent', error); + this.currentAbortController = null; + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error' + }; + } + } + + /** + * Abort the current agent generation + */ + async abortAgentGeneration(): Promise { + if (this.currentAbortController) { + logInfo('[AgentPanel] Aborting agent generation...'); + this.currentAbortController.abort(); + this.currentAbortController = null; + } else { + logDebug('[AgentPanel] No active agent generation to abort'); + } + } +} diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/event-handler.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/event-handler.ts similarity index 95% rename from workspaces/mi/mi-extension/src/rpc-managers/ai-panel/event-handler.ts rename to workspaces/mi/mi-extension/src/rpc-managers/ai-features/event-handler.ts index 29c5e1681c9..0c8076de4ee 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/event-handler.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/event-handler.ts @@ -18,9 +18,9 @@ import { CodeGenerationEvent, XmlCodeEntry, CorrectedCodeItem } from "@wso2/mi-core"; import { RPCLayer } from "../../RPCLayer"; -import { AiPanelWebview } from '../../ai-panel/webview'; +import { AiPanelWebview } from '../../ai-features/webview'; import { codeGenerationEvent } from "@wso2/mi-core"; -import { logWarn, logError } from "../../ai-panel/copilot/logger"; +import { logWarn, logError } from "../../ai-features/copilot/logger"; export class CopilotEventHandler { diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-handler.ts similarity index 100% rename from workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-handler.ts rename to workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-handler.ts diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts similarity index 96% rename from workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts rename to workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts index d76570a97d7..cae91313d3d 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts @@ -44,12 +44,12 @@ import { } from "./utils"; import { CopilotEventHandler } from "./event-handler"; import { MiDiagramRpcManager } from "../mi-diagram/rpc-manager"; -import { generateSuggestions as generateSuggestionsFromLLM } from "../../ai-panel/copilot/suggestions/suggestions"; -import { fillIdpSchema } from '../../ai-panel/copilot/idp/fill_schema'; -import { codeDiagnostics } from "../../ai-panel/copilot/diagnostics/diagnostics"; -import { getLoginMethod } from '../../ai-panel/auth'; +import { generateSuggestions as generateSuggestionsFromLLM } from "../../ai-features/copilot/suggestions/suggestions"; +import { fillIdpSchema } from '../../ai-features/copilot/idp/fill_schema'; +import { codeDiagnostics } from "../../ai-features/copilot/diagnostics/diagnostics"; +import { getLoginMethod } from '../../ai-features/auth'; import { LoginMethod } from '@wso2/mi-core'; -import { logInfo, logWarn, logError, logDebug } from '../../ai-panel/copilot/logger'; +import { logInfo, logWarn, logError, logDebug } from '../../ai-features/copilot/logger'; import { MILanguageClient } from '../../lang-client/activator'; export class MIAIPanelRpcManager implements MIAIPanelAPI { @@ -249,7 +249,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { * Core code generation logic with streaming */ private async generateCodeCore(request: GenerateCodeRequest): Promise { - const { validateAttachments } = await import('../../ai-panel/copilot/message-utils'); + const { validateAttachments } = await import('../../ai-features/copilot/message-utils'); const { window } = await import('vscode'); try { @@ -499,8 +499,8 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { } try { - const { fetchWithAuth } = await import('../../ai-panel/copilot/connection'); - const { StateMachineAI } = await import('../../ai-panel/aiMachine'); + const { fetchWithAuth } = await import('../../ai-features/connection'); + const { StateMachineAI } = await import('../../ai-features/aiMachine'); const { AI_EVENT_TYPE } = await import('@wso2/mi-core'); const backendUrl = process.env.MI_COPILOT_ANTHROPIC_PROXY_URL; @@ -548,7 +548,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { */ async generateUnitTest(request: import('@wso2/mi-core').GenerateUnitTestRequest): Promise { try { - const { generateUnitTest } = await import('../../ai-panel/copilot/unit-tests/unit_test_generate'); + const { generateUnitTest } = await import('../../ai-features/copilot/unit-tests/unit_test_generate'); const result = await generateUnitTest({ context: request.context, @@ -570,7 +570,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { */ async generateUnitTestCase(request: import('@wso2/mi-core').GenerateUnitTestCaseRequest): Promise { try { - const { generateUnitTestCase } = await import('../../ai-panel/copilot/unit-tests/unit_test_case_generate'); + const { generateUnitTestCase } = await import('../../ai-features/copilot/unit-tests/unit_test_case_generate'); const result = await generateUnitTestCase({ context: request.context, @@ -596,7 +596,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { */ async processIdp(request: ProcessIdpRequest): Promise { try { - const { processIdp } = await import('../../ai-panel/copilot/idp/idp'); + const { processIdp } = await import('../../ai-features/copilot/idp/idp'); const result = await processIdp({ operation: request.operation, @@ -641,7 +641,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { logDebug(`[dmcToTs] DMC content length: ${request.dmcContent?.length || 0}`); logDebug(`[dmcToTs] TS file length: ${request.tsFile?.length || 0}`); - const { dmcToTs } = await import('../../ai-panel/copilot/dmc_to_ts/dmc_to_ts'); + const { dmcToTs } = await import('../../ai-features/copilot/dmc_to_ts/dmc_to_ts'); const result = await dmcToTs({ dmcContent: request.dmcContent, @@ -665,7 +665,7 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { logDebug(`[autoFillForm] Form fields count: ${Object.keys(request.current_values || {}).length}`); logDebug(`[autoFillForm] Has user question: ${!!request.question}`); - const { autoFillForm } = await import('../../ai-panel/copilot/auto-fill/fill'); + const { autoFillForm } = await import('../../ai-features/copilot/auto-fill/fill'); const result = await autoFillForm({ payloads: request.payloads, diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/utils.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/utils.ts similarity index 96% rename from workspaces/mi/mi-extension/src/rpc-managers/ai-panel/utils.ts rename to workspaces/mi/mi-extension/src/rpc-managers/ai-features/utils.ts index 25e316ec177..59969b146eb 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-panel/utils.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/utils.ts @@ -18,16 +18,16 @@ import { MiDiagramRpcManager } from "../mi-diagram/rpc-manager"; import { MiVisualizerRpcManager } from "../mi-visualizer/rpc-manager"; -import { refreshAuthCode } from "../../ai-panel/auth"; +import { refreshAuthCode } from "../../ai-features/auth"; import { openSignInView } from "../../util/ai-datamapper-utils"; import { extension } from "../../MIExtensionContext"; import { EVENT_TYPE, MACHINE_VIEW, AI_EVENT_TYPE, Role } from "@wso2/mi-core"; import * as vscode from "vscode"; import { MIAIPanelRpcManager } from "./rpc-manager"; -import { generateSynapse } from "../../ai-panel/copilot/generation/generations"; -import { getConnectors } from "../../ai-panel/copilot/connectors/connectors"; -import { codeDiagnostics } from "../../ai-panel/copilot/diagnostics/diagnostics"; -import { openAIWebview, StateMachineAI } from "../../ai-panel/aiMachine"; +import { generateSynapse } from "../../ai-features/copilot/generation/generations"; +import { getConnectors } from "../../ai-features/copilot/connectors/connectors"; +import { codeDiagnostics } from "../../ai-features/copilot/diagnostics/diagnostics"; +import { openAIWebview, StateMachineAI } from "../../ai-features/aiMachine"; // Error messages export const COPILOT_ERROR_MESSAGES = { diff --git a/workspaces/mi/mi-extension/src/rpc-managers/mi-data-mapper/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/mi-data-mapper/rpc-manager.ts index 81a1a8a475e..72d82da91b1 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/mi-data-mapper/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/mi-data-mapper/rpc-manager.ts @@ -56,7 +56,7 @@ import { DMProject } from "../../datamapper/DMProject"; import { DM_OPERATORS_FILE_NAME, DM_OPERATORS_IMPORT_NAME, READONLY_MAPPING_FUNCTION_NAME, RUNTIME_VERSION_440 } from "../../constants"; import { readTSFile, removeMapFunctionEntry, showMappingEndNotification } from "../../util/ai-datamapper-utils"; import { compareVersions } from "../../util/onboardingUtils"; -import { mapDataMapper } from "../../ai-panel/copilot/data-mapper/mapper"; +import { mapDataMapper } from "../../ai-features/copilot/data-mapper/mapper"; import { MILanguageClient } from "../../lang-client/activator"; const undoRedoManager = new UndoRedoManager(); diff --git a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts index 15cf50482c0..eb321fd799f 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts @@ -309,7 +309,7 @@ import { parse, stringify } from "yaml"; import { DiagramService, APIResource, NamedSequence, UnitTest, Proxy } from "../../../../syntax-tree/lib/src"; import { extension } from '../../MIExtensionContext'; import { RPCLayer } from "../../RPCLayer"; -import { StateMachineAI } from '../../ai-panel/aiMachine'; +import { StateMachineAI } from '../../ai-features/aiMachine'; import { APIS, COMMANDS, DEFAULT_ICON, DEFAULT_PROJECT_VERSION, LAST_EXPORTED_CAR_PATH, RUNTIME_VERSION_440, SWAGGER_REL_DIR, ERROR_MESSAGES } from "../../constants"; import { getStateMachine, navigate, openView } from "../../stateMachine"; import { openPopupView } from "../../stateMachinePopup"; diff --git a/workspaces/mi/mi-extension/src/uri-handler.ts b/workspaces/mi/mi-extension/src/uri-handler.ts index 45f63f50ee9..0ea585f18e2 100644 --- a/workspaces/mi/mi-extension/src/uri-handler.ts +++ b/workspaces/mi/mi-extension/src/uri-handler.ts @@ -17,7 +17,7 @@ */ import { URLSearchParams } from "url"; import { window, Uri, ProviderResult, commands } from "vscode"; -import { exchangeAuthCode } from "./ai-panel/auth"; +import { exchangeAuthCode } from "./ai-features/auth"; import { COMMANDS } from "./constants"; import { checkForDevantExt } from "./extension"; import { IOpenCompSrcCmdParams, CommandIds as PlatformExtCommandIds } from "@wso2/wso2-platform-core"; diff --git a/workspaces/mi/mi-extension/src/visualizer/activate.ts b/workspaces/mi/mi-extension/src/visualizer/activate.ts index fc5696bce83..3c8a77eb0f2 100644 --- a/workspaces/mi/mi-extension/src/visualizer/activate.ts +++ b/workspaces/mi/mi-extension/src/visualizer/activate.ts @@ -31,7 +31,7 @@ import { RPCLayer } from '../RPCLayer'; import { deleteSwagger, generateSwagger } from '../util/swagger'; import { VisualizerWebview, webviews } from './webview'; import * as fs from 'fs'; -import { AiPanelWebview } from '../ai-panel/webview'; +import { AiPanelWebview } from '../ai-features/webview'; import { MiDiagramRpcManager } from '../rpc-managers/mi-diagram/rpc-manager'; import { log } from '../util/logger'; import { CACHED_FOLDER, INTEGRATION_PROJECT_DEPENDENCIES_DIR } from '../util/onboardingUtils'; diff --git a/workspaces/mi/mi-rpc-client/src/RpcClient.ts b/workspaces/mi/mi-rpc-client/src/RpcClient.ts index 0c3f75c8d9d..8370a28668a 100644 --- a/workspaces/mi/mi-rpc-client/src/RpcClient.ts +++ b/workspaces/mi/mi-rpc-client/src/RpcClient.ts @@ -19,13 +19,14 @@ */ import { Messenger } from "vscode-messenger-webview"; -import { MachineStateValue, stateChanged, vscode, getVisualizerState, getAIVisualizerState, VisualizerLocation, AIVisualizerLocation, webviewReady, onFileContentUpdate, AI_EVENT_TYPE, sendAIStateEvent, AIMachineStateValue, AIMachineSendableEvent, aiStateChanged, themeChanged, ColorThemeKind, PopupMachineStateValue, popupStateChanged, PopupVisualizerLocation, getPopupVisualizerState, onParentPopupSubmitted, ParentPopupData, ConnectorStatus, onConnectorStatusUpdate, onDocumentSave, Document, SwaggerData, DownloadProgressData, onSwaggerSpecReceived, MiServerRunStatus, miServerRunStateChanged, onDownloadProgress, codeGenerationEvent, CodeGenerationEvent } from "@wso2/mi-core"; +import { MachineStateValue, stateChanged, vscode, getVisualizerState, getAIVisualizerState, VisualizerLocation, AIVisualizerLocation, webviewReady, onFileContentUpdate, AI_EVENT_TYPE, sendAIStateEvent, AIMachineStateValue, AIMachineSendableEvent, aiStateChanged, themeChanged, ColorThemeKind, PopupMachineStateValue, popupStateChanged, PopupVisualizerLocation, getPopupVisualizerState, onParentPopupSubmitted, ParentPopupData, ConnectorStatus, onConnectorStatusUpdate, onDocumentSave, Document, SwaggerData, DownloadProgressData, onSwaggerSpecReceived, MiServerRunStatus, miServerRunStateChanged, onDownloadProgress, codeGenerationEvent, CodeGenerationEvent, agentEvent, AgentEvent } from "@wso2/mi-core"; import { MiDiagramRpcClient } from "./rpc-clients/mi-diagram/rpc-client"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { MiVisualizerRpcClient } from "./rpc-clients/mi-visualizer/rpc-client"; import { MiDataMapperRpcClient } from "./rpc-clients/mi-data-mapper/rpc-client"; import { MiDebuggerRpcClient } from "./rpc-clients/mi-debugger/rpc-client"; -import { MiAiPanelRpcClient } from "./rpc-clients/ai-panel/rpc-client"; +import { MiAiPanelRpcClient } from "./rpc-clients/ai-features/rpc-client"; +import { MiAgentPanelRpcClient } from "./rpc-clients/agent-mode/rpc-client"; export class RpcClient { @@ -35,6 +36,7 @@ export class RpcClient { private _dataMapper: MiDataMapperRpcClient; private _debugger: MiDebuggerRpcClient; private _aiPanel: MiAiPanelRpcClient; + private _agentPanel: MiAgentPanelRpcClient; constructor() { this.messenger = new Messenger(vscode); @@ -44,6 +46,7 @@ export class RpcClient { this._dataMapper = new MiDataMapperRpcClient(this.messenger); this._debugger = new MiDebuggerRpcClient(this.messenger); this._aiPanel = new MiAiPanelRpcClient(this.messenger); + this._agentPanel = new MiAgentPanelRpcClient(this.messenger); } getMiDiagramRpcClient(): MiDiagramRpcClient { @@ -66,6 +69,10 @@ export class RpcClient { return this._aiPanel; } + getMiAgentPanelRpcClient(): MiAgentPanelRpcClient { + return this._agentPanel; + } + onStateChanged(callback: (state: MachineStateValue) => void) { this.messenger.onNotification(stateChanged, callback); } @@ -134,5 +141,9 @@ export class RpcClient { onCodeGenerationEvent(callback: (event: CodeGenerationEvent) => void) { this.messenger.onNotification(codeGenerationEvent, callback); } + + onAgentEvent(callback: (event: AgentEvent) => void) { + this.messenger.onNotification(agentEvent, callback); + } } diff --git a/workspaces/mi/mi-rpc-client/src/rpc-clients/agent-mode/rpc-client.ts b/workspaces/mi/mi-rpc-client/src/rpc-clients/agent-mode/rpc-client.ts new file mode 100644 index 00000000000..80fdb7cafbe --- /dev/null +++ b/workspaces/mi/mi-rpc-client/src/rpc-clients/agent-mode/rpc-client.ts @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you 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 { + MIAgentPanelAPI, + SendAgentMessageRequest, + SendAgentMessageResponse, + sendAgentMessage, + abortAgentGeneration +} from "@wso2/mi-core"; +import { HOST_EXTENSION } from "vscode-messenger-common"; +import { Messenger } from "vscode-messenger-webview"; + +export class MiAgentPanelRpcClient implements MIAgentPanelAPI { + private _messenger: Messenger; + + constructor(messenger: Messenger) { + this._messenger = messenger; + } + + // ================================== + // Agent Functions + // ================================== + sendAgentMessage(request: SendAgentMessageRequest): Promise { + return this._messenger.sendRequest(sendAgentMessage, HOST_EXTENSION, request); + } + + abortAgentGeneration(): Promise { + return this._messenger.sendRequest(abortAgentGeneration, HOST_EXTENSION); + } +} diff --git a/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/index.ts b/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-features/index.ts similarity index 100% rename from workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/index.ts rename to workspaces/mi/mi-rpc-client/src/rpc-clients/ai-features/index.ts diff --git a/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts b/workspaces/mi/mi-rpc-client/src/rpc-clients/ai-features/rpc-client.ts similarity index 100% rename from workspaces/mi/mi-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts rename to workspaces/mi/mi-rpc-client/src/rpc-clients/ai-features/rpc-client.ts diff --git a/workspaces/mi/mi-visualizer/src/Visualizer.tsx b/workspaces/mi/mi-visualizer/src/Visualizer.tsx index 648870207d2..b1f8845292c 100644 --- a/workspaces/mi/mi-visualizer/src/Visualizer.tsx +++ b/workspaces/mi/mi-visualizer/src/Visualizer.tsx @@ -51,6 +51,7 @@ const ProgressRing = styled(VSCodeProgressRing)` const MODES = { VISUALIZER: "visualizer", AI: "ai", + AGENT: "agent", RUNTIME_SERVICES: "runtime-services", SWAGGER: "swagger" }; @@ -140,6 +141,9 @@ export function Visualizer({ mode, swaggerData }: { mode: string, swaggerData?: } } else if (mode === MODES.AI) { setView(<>{state && }); + } else if (mode === MODES.AGENT) { + // Agent mode now uses AIPanel (which internally uses agent service) + setView(<>{state && }); } else if (mode === MODES.RUNTIME_SERVICES) { setView(); } else if (mode === MODES.SWAGGER) { diff --git a/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx b/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx index 450f6578335..332693bef64 100644 --- a/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx +++ b/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx @@ -18,14 +18,13 @@ import React, { useState, useRef, useEffect } from "react"; import { FlexRow, Footer, StyledTransParentButton, RippleLoader, FlexColumn } from "../styles"; -import { Codicon, ToggleSwitch } from "@wso2/ui-toolkit"; -import SuggestionsList from "./SuggestionsList"; +import { Codicon } from "@wso2/ui-toolkit"; import { useMICopilotContext } from "./MICopilotContext"; import { handleFileAttach } from "../utils"; import { USER_INPUT_PLACEHOLDER_MESSAGE, VALID_FILE_TYPES } from "../constants"; -import { generateSuggestions, generateId, getView, fetchCodeGenerationsWithRetry, replaceCodeBlock, setupCodeGenerationEventListener, updateTokenInfo } from "../utils"; +import { generateId, updateTokenInfo } from "../utils"; import { BackendRequestType } from "../types"; -import { Role, MessageType, CopilotChatEntry } from "@wso2/mi-core"; +import { Role, MessageType, CopilotChatEntry, AgentEvent } from "@wso2/mi-core"; import Attachments from "./Attachments"; interface AIChatFooterProps { @@ -40,7 +39,6 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) rpcClient, messages, setMessages, - setQuestions, copilotChat, setCopilotChat, currentUserPrompt, @@ -49,7 +47,6 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) setBackendRequestTriggered, isInitialPromptLoaded, setIsInitialPromptLoaded, - questions, files, setFiles, images, @@ -73,31 +70,24 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) const [charIndex, setCharIndex] = useState(0); const [showDots, setShowDots] = useState(false); - const [thinkingChecked, setChecked] = useState(false); - // State to track when we're validating code (getting diagnostics and LLM corrections) - const [isValidating, setIsValidating] = useState(false); - // Reference to store code blocks for the current chat - const currentChatCodeBlocksRef = useRef([]); - - // State for streaming code generation + // State for streaming agent response const [currentChatId, setCurrentChatId] = useState(null); const [assistantResponse, setAssistantResponse] = useState(""); + // Tool status for agent tool calls + const [toolStatus, setToolStatus] = useState(""); - const toggleThinkingSelection = () => { - setChecked(!thinkingChecked); - }; - - // Handle code generation streaming events from extension - const handleCodeGenerationEvent = (event: any) => { + // Handle agent streaming events from extension + const handleAgentEvent = (event: AgentEvent) => { // Ignore all events if generation was aborted if (abortedRef.current) { return; } switch (event.type) { - case "code_generation_start": - // Start of code generation + case "start": + // Start of agent response setAssistantResponse(""); + setToolStatus(""); break; case "content_block": @@ -118,114 +108,133 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) }); } break; - - case "code_generation_end": - // Final content replacement - if (event.content) { - setAssistantResponse(event.content); - handleCodeGenerationComplete(event.content); - } - // Fetch and update usage after code generation - rpcClient?.getMiAiPanelRpcClient().fetchUsage().then((usage) => { - if (usage) { - rpcClient?.getAIVisualizerState().then((machineView) => { - const { remainingTokenPercentage } = updateTokenInfo(machineView); - setRemainingTokenPercentage(remainingTokenPercentage); - }); + + case "tool_call": + // Show tool status and insert toolcall tag into message content + if (event.toolName) { + const toolInfo = event.toolInput as { file_path?: string, old_string?: string, new_string?: string }; + const filePath = toolInfo?.file_path || ""; + + // Create user-friendly tool messages + let toolMessage = ""; + let toolAction = ""; // Store action for completion message + + switch (event.toolName) { + case "file_read": + toolMessage = `Reading ${filePath || "file"}...`; + toolAction = "Read"; + break; + case "file_write": + toolMessage = `Creating ${filePath || "file"}...`; + toolAction = "Created"; + break; + case "file_edit": + toolMessage = `Editing ${filePath || "file"}...`; + toolAction = "Edited"; + break; + case "file_multi_edit": + toolMessage = `Editing ${filePath || "file"}...`; + toolAction = "Edited"; + break; + default: + toolMessage = `Using ${event.toolName}${filePath ? `: ${filePath}` : ""}...`; + toolAction = `Used ${event.toolName}`; } - }).catch((error) => { - console.error("Error fetching usage after code generation:", error); - }); - // If diagnostics won't run, generate suggestions immediately - // Otherwise, wait for code_diagnostic_end event - if (!event.willRunDiagnostics) { - // Clear old suggestions immediately before generating new ones - setQuestions([]); - const suggestionController = new AbortController(); - generateSuggestions(copilotChat, rpcClient, suggestionController).then((response) => { - if (response && response.length > 0) { - setQuestions(response); + setToolStatus(toolMessage); + + // Insert toolcall tag into message content (will be rendered with loading spinner) + // Store the action in the tag for later completion update + setMessages((prevMessages) => { + const newMessages = [...prevMessages]; + if (newMessages.length > 0) { + newMessages[newMessages.length - 1].content += `\n\n${toolMessage}`; } - }).catch((error) => { - console.error("Error generating suggestions after code generation:", error); + return newMessages; }); } break; - case "code_diagnostic_start": - setIsValidating(true); - break; - - case "code_diagnostic_end": - setIsValidating(false); - - // Handle corrected codes if available - if (event.correctedCodes && event.correctedCodes.length > 0) { - const fileCorrections = new Map(); + case "tool_result": + // Clear tool status and mark toolcall as complete in message + setToolStatus(""); - event.correctedCodes.forEach((item: any) => { - if (item.name && (item.configuration || item.code)) { - const correctedCode = item.configuration || item.code; - const fileName = item.name; - fileCorrections.set(fileName, correctedCode); - } - }); - - // Update messages with corrected code - if (fileCorrections.size > 0) { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - const lastMessage = newMessages[newMessages.length - 1]; + // Update the last toolcall tag to show completion + setMessages((prevMessages) => { + const newMessages = [...prevMessages]; + if (newMessages.length > 0) { + const lastMessageContent = newMessages[newMessages.length - 1].content; - if (lastMessage && lastMessage.role === Role.MICopilot) { - let updatedContent = lastMessage.content; + // Find the last tag with data attributes + const toolPattern = /([^<]*?)<\/toolcall>/g; + const matches = [...lastMessageContent.matchAll(toolPattern)]; - fileCorrections.forEach((correctedCode, fileName) => { - updatedContent = replaceCodeBlock(updatedContent, fileName, correctedCode); - }); + if (matches.length > 0) { + // Get the last match (most recent tool call) + const lastMatch = matches[matches.length - 1]; + const action = lastMatch[1]; // e.g., "Read", "Created", "Edited" + const fileName = lastMatch[2]; + const fullMatch = lastMatch[0]; - newMessages[newMessages.length - 1] = { - ...lastMessage, - content: updatedContent - }; - } + // Create completion message + const completedMessage = `${action} ${fileName || "file"}`; - return newMessages; - }); - } - } + // Replace the loading version with completed version + const lastIndex = lastMessageContent.lastIndexOf(fullMatch); + const beforeMatch = lastMessageContent.substring(0, lastIndex); + const afterMatch = lastMessageContent.substring(lastIndex + fullMatch.length); - // Clear old suggestions immediately before generating new ones - setQuestions([]); - // Generate fresh suggestions after code generation completes - generateSuggestions(copilotChat, rpcClient, new AbortController()).then((response) => { - if (response && response.length > 0) { - setQuestions(response); + newMessages[newMessages.length - 1].content = beforeMatch + completedMessage + afterMatch; + } } - }).catch((error) => { - console.error("Error generating suggestions after code generation:", error); + return newMessages; }); break; - + case "error": setMessages((prevMessages) => [...prevMessages, { id: generateId(), role: Role.MICopilot, - content: `Error: ${event.error}`, + content: `Error: ${event.error || "An error occurred"}`, type: MessageType.Error }]); setBackendRequestTriggered(false); - setIsValidating(false); + setToolStatus(""); break; - case "stop": - // Code generation completed + case "abort": + // Abort acknowledged - finalize with partial content + setBackendRequestTriggered(false); + if (assistantResponse) { + setMessages((prevMessages) => { + const newMessages = [...prevMessages]; + if (newMessages.length > 0) { + newMessages[newMessages.length - 1].content = assistantResponse + "\n\n*[Aborted]*"; + } + return newMessages; + }); + } + setAssistantResponse(""); + setToolStatus(""); break; - case "aborted": - // Abort acknowledged by extension - all streaming has stopped - setBackendRequestTriggered(false); + case "stop": + // Agent response completed + if (assistantResponse) { + handleAgentComplete(assistantResponse); + } + // Fetch and update usage after agent response + rpcClient?.getMiAiPanelRpcClient().fetchUsage().then((usage) => { + if (usage) { + rpcClient?.getAIVisualizerState().then((machineView) => { + const { remainingTokenPercentage } = updateTokenInfo(machineView); + setRemainingTokenPercentage(remainingTokenPercentage); + }); + } + }).catch((error) => { + console.error("Error fetching usage after agent response:", error); + }); + setToolStatus(""); break; default: @@ -233,8 +242,8 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) } }; - // Handle completion of code generation - const handleCodeGenerationComplete = async (finalContent: string) => { + // Handle completion of agent response + const handleAgentComplete = async (finalContent: string) => { // Add backend response to copilot chat setCopilotChat((prevCopilotChat) => [ ...prevCopilotChat, @@ -261,8 +270,8 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) abortedRef.current = true; try { - // Request the extension to abort code generation - await rpcClient.getMiAiPanelRpcClient().abortCodeGeneration(); + // Request the extension to abort agent generation + await rpcClient.getMiAgentPanelRpcClient().abortAgentGeneration(); // Abort the local controller (for any local operations) controller.abort(); @@ -270,13 +279,9 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) // Create a new AbortController for future fetches resetController(); - // If we're in the validation phase, reset the validation state - if (isValidating) { - setIsValidating(false); - } - // Clear assistant response state setAssistantResponse(""); + setToolStatus(""); // Remove the last user and copilot messages from UI state setMessages((prevMessages) => { @@ -312,7 +317,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) abortedRef.current = false; }, 200); } catch (error) { - console.error("Error stopping code generation:", error); + console.error("Error stopping agent generation:", error); // Reset abort flag on error as well abortedRef.current = false; } finally { @@ -353,14 +358,11 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) isResponseReceived.current = false; } - // Reset the current chat code blocks array for this new chat - currentChatCodeBlocksRef.current = []; - // Add the current user prompt to the chats based on the request type let currentCopilotChat: CopilotChatEntry[] = [...copilotChat]; const chatId = generateId(); setCurrentChatId(chatId); - + const updateChats = (userPrompt: string, userMessageType?: MessageType) => { // Store the user prompt for potential abort restoration lastUserPromptRef.current = userPrompt; @@ -386,39 +388,27 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) currentCopilotChat.push(currentUserChat); }; + // Determine the message to send + let messageToSend = currentUserPrompt; switch (requestType) { case BackendRequestType.InitialPrompt: updateChats(currentUserPrompt, MessageType.InitialPrompt); break; - case BackendRequestType.QuestionClick: - prompt = prompt.replace(/^\d+\.\s/, ""); - updateChats(prompt, MessageType.UserMessage); - setCurrentUserprompt(prompt); - break; default: updateChats(currentUserPrompt, MessageType.UserMessage); break; } - const view = await getView(rpcClient); - try { - // Call the RPC method for streaming code generation - // The streaming will be handled via events in handleCodeGenerationEvent - await fetchCodeGenerationsWithRetry( - currentCopilotChat, - files, - images, - rpcClient, - controller, - view, - thinkingChecked - ); + // Call the agent RPC method for streaming response + // The streaming will be handled via events in handleAgentEvent + await rpcClient.getMiAgentPanelRpcClient().sendAgentMessage({ message: messageToSend }); // Remove the user uploaded files and images after sending them to the backend + // (File upload functionality preserved for future use) removeAllFiles(); removeAllImages(); - + // The streaming response will be handled by events // No need to process response.body here anymore @@ -495,12 +485,10 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) } }, [fileUploadStatus]); - // Set up code generation event listener + // Set up agent event listener useEffect(() => { if (rpcClient) { - setupCodeGenerationEventListener(rpcClient, (event: any) => { - handleCodeGenerationEvent(event); - }); + rpcClient.onAgentEvent(handleAgentEvent); } }, [rpcClient]); @@ -517,10 +505,10 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) onBlur={() => setIsFocused(false)} tabIndex={0} > - {backendRequestTriggered || isValidating ? ( + {backendRequestTriggered ? ( - {isValidating ? "Validating " : isResponseReceived.current ? "Generating " : "Thinking "} + {toolStatus || (isResponseReceived.current ? "Generating " : "Thinking ")}
@@ -531,16 +519,6 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) ) : ( <> - {currentUserPrompt.trim() === "" && ( - - - handleSend(BackendRequestType.QuestionClick, content) - } - /> - - ) }