From 5e0d018611dbd268249e126e4d75ab8008a84dd0 Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Thu, 24 Jul 2025 10:26:06 +0200 Subject: [PATCH 1/4] [onechat] Improve user-facing error messages in toasts --- .../onechat-common/base/errors.test.ts | 38 +++++++++++++++++++ .../onechat/onechat-common/base/errors.ts | 34 +++++++++++++++++ .../shared/onechat/onechat-common/index.ts | 1 + .../components/agents/edit/agent_form.tsx | 13 ++++--- .../components/tools/esql/esql_tools.tsx | 4 +- .../public/application/hooks/use_chat.ts | 5 ++- 6 files changed, 86 insertions(+), 9 deletions(-) diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts index 4b4533d034d07..93e1138857a54 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts @@ -15,6 +15,7 @@ import { createOnechatError, isAgentNotFoundError, createAgentNotFoundError, + formatOnechatErrorMessage, } from './errors'; describe('Onechat errors', () => { @@ -190,4 +191,41 @@ describe('Onechat errors', () => { }); }); }); + + describe('formatOnechatErrorMessage', () => { + it('should format OnechatError instances correctly', () => { + const internalError = createInternalError('Internal server error'); + expect(formatOnechatErrorMessage(internalError)).toBe('Internal server error'); + + const toolNotFoundError = createToolNotFoundError({ toolId: 'missing-tool' }); + expect(formatOnechatErrorMessage(toolNotFoundError)).toBe('Tool missing-tool not found'); + + const agentNotFoundError = createAgentNotFoundError({ agentId: 'missing-agent' }); + expect(formatOnechatErrorMessage(agentNotFoundError)).toBe('Agent missing-agent not found'); + }); + + it('should format generic JavaScript errors correctly', () => { + const jsError = new Error('Something went wrong'); + expect(formatOnechatErrorMessage(jsError)).toBe('Something went wrong'); + + const typeError = new TypeError('Invalid type'); + expect(formatOnechatErrorMessage(typeError)).toBe('Invalid type'); + }); + + it('should handle string inputs', () => { + expect(formatOnechatErrorMessage('Simple error message')).toBe('Simple error message'); + }); + + it('should handle falsy values', () => { + expect(formatOnechatErrorMessage(null)).toBe('null'); + expect(formatOnechatErrorMessage(undefined)).toBe('undefined'); + }); + + it('should handle HTTP response errors with body.message', () => { + const httpError = createOnechatError(OnechatErrorCode.badRequest, 'test error', { + statusCode: 400, + }); + expect(formatOnechatErrorMessage(httpError)).toBe('test error'); + }); + }); }); diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts index b5d7a4e53eed6..c0a9cab4d027e 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts @@ -6,6 +6,7 @@ */ import { ServerSentEventError } from '@kbn/sse-utils'; +import { inspect } from 'util'; /** * Code to identify onechat errors @@ -184,6 +185,38 @@ export const createRequestAbortedError = ( return new OnechatError(OnechatErrorCode.requestAborted, message, meta ?? {}); }; +/* + * Produce a string version of an error, + */ +export function formatOnechatErrorMessage(error: any): string { + if (typeof error === 'string') { + return error; + } + + if (!error) { + // stringify undefined/null/0/whatever this falsy value is + return inspect(error); + } + + // handle es error response with `root_cause`s + if (error.resp && error.resp.error && error.resp.error.root_cause) { + return error.resp.error.root_cause.map((cause: { reason: string }) => cause.reason).join('\n'); + } + + // handle http response errors with error messages + if (error.body && typeof error.body.message === 'string') { + return error.body.message; + } + + // handle standard error objects with messages + if (error instanceof Error && error.message) { + return error.message; + } + + // everything else can just be serialized using util.inspect() + return inspect(error); +} + /** * Global utility exposing all error utilities from a single export. */ @@ -197,4 +230,5 @@ export const OnechatErrorUtils = { createToolNotFoundError, createAgentNotFoundError, createConversationNotFoundError, + formatOnechatErrorMessage, }; diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/index.ts b/x-pack/platform/packages/shared/onechat/onechat-common/index.ts index 82c5f182d37e8..688048f384dd4 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/index.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/index.ts @@ -47,6 +47,7 @@ export { createConversationNotFoundError, createBadRequestError, createRequestAbortedError, + formatOnechatErrorMessage, type OnechatError, type OnechatInternalError, type OnechatToolNotFoundError, diff --git a/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx b/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx index b8295cc68d56c..d0420c6fe2274 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx +++ b/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx @@ -20,7 +20,7 @@ import { EuiLoadingSpinner, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { AgentDefinition } from '@kbn/onechat-common'; +import { AgentDefinition, formatOnechatErrorMessage } from '@kbn/onechat-common'; import { useForm, Controller, FormProvider } from 'react-hook-form'; import { useAgentEdit } from '../../../hooks/agents/use_agent_edit'; import { useKibana } from '../../../hooks/use_kibana'; @@ -57,15 +57,17 @@ export const AgentForm: React.FC = ({ agentId }) => { }; const onSaveError = (err: Error) => { - const errorMessage = isCreateMode + const errorMessageTitle = isCreateMode ? i18n.translate('xpack.onechat.agents.createErrorMessage', { defaultMessage: 'Failed to create agent', }) : i18n.translate('xpack.onechat.agents.updateErrorMessage', { defaultMessage: 'Failed to update agent', }); - notifications.toasts.addError(err, { - title: errorMessage, + + notifications.toasts.addDanger({ + title: errorMessageTitle, + text: formatOnechatErrorMessage(err), }); }; @@ -79,10 +81,11 @@ export const AgentForm: React.FC = ({ agentId }) => { navigateToOnechatUrl(appPaths.agents.list); }, onError: (err: Error) => { - notifications.toasts.addError(err, { + notifications.toasts.addDanger({ title: i18n.translate('xpack.onechat.agents.deleteErrorMessage', { defaultMessage: 'Failed to delete agent', }), + text: formatOnechatErrorMessage(err), }); }, }); diff --git a/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx b/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx index 2e3e85f827fdb..e63c6abc41839 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx +++ b/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx @@ -20,7 +20,7 @@ import { useGeneratedHtmlId, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ToolDefinition } from '@kbn/onechat-common'; +import { ToolDefinition, formatOnechatErrorMessage } from '@kbn/onechat-common'; import React, { useCallback, useMemo, useState } from 'react'; import { useDeleteToolModal } from '../../../hooks/tools/use_delete_tools'; import { useEsqlTools } from '../../../hooks/tools/use_tools'; @@ -232,7 +232,7 @@ export const OnechatEsqlTools: React.FC = () => { title: i18n.translate('xpack.onechat.tools.createEsqlToolErrorToast', { defaultMessage: 'Unable to create ES|QL tool', }), - text: error.message, + text: formatOnechatErrorMessage(error), }); }} /> diff --git a/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts b/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts index b6488b2de0230..00af655821ce4 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts +++ b/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n'; import { OnechatError, OnechatErrorCode, + formatOnechatErrorMessage, isConversationCreatedEvent, isMessageChunkEvent, isMessageCompleteEvent, @@ -92,11 +93,11 @@ export const useChat = ({ connectorId, onError }: UseChatProps = {}) => { if (isOnechatError(err)) { onError?.(err); - notifications.toasts.addError(err, { + notifications.toasts.addDanger({ title: i18n.translate('xpack.onechat.chat.chatError.title', { defaultMessage: 'Error loading chat response', }), - toastMessage: `${err.code} - ${err.message}`, + text: formatOnechatErrorMessage(err), }); } }, From 65f1a52c2f1fa53382e4de0758b012b9c6697c4d Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Thu, 24 Jul 2025 10:34:08 +0200 Subject: [PATCH 2/4] remove unused case --- .../packages/shared/onechat/onechat-common/base/errors.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts index c0a9cab4d027e..04db0e9930af5 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts @@ -194,15 +194,10 @@ export function formatOnechatErrorMessage(error: any): string { } if (!error) { - // stringify undefined/null/0/whatever this falsy value is + // stringify undefined/null/whatever this falsy value is return inspect(error); } - // handle es error response with `root_cause`s - if (error.resp && error.resp.error && error.resp.error.root_cause) { - return error.resp.error.root_cause.map((cause: { reason: string }) => cause.reason).join('\n'); - } - // handle http response errors with error messages if (error.body && typeof error.body.message === 'string') { return error.body.message; From 7e694714135c20badcc6d6ee9a52b76496507495 Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Thu, 24 Jul 2025 11:55:48 +0200 Subject: [PATCH 3/4] Move to onechat-browser --- .../onechat-browser/base/errors.test.ts | 55 +++++++++++++++++++ .../onechat/onechat-browser/base/errors.ts | 35 ++++++++++++ .../shared/onechat/onechat-browser/index.ts | 4 +- .../onechat-common/base/errors.test.ts | 38 ------------- .../onechat/onechat-common/base/errors.ts | 29 ---------- .../shared/onechat/onechat-common/index.ts | 1 - .../components/agents/edit/agent_form.tsx | 3 +- .../public/application/hooks/use_chat.ts | 2 +- 8 files changed, 94 insertions(+), 73 deletions(-) create mode 100644 x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.test.ts create mode 100644 x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.ts diff --git a/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.test.ts b/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.test.ts new file mode 100644 index 0000000000000..7f6ac1f319b35 --- /dev/null +++ b/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.test.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + createInternalError, + createToolNotFoundError, + OnechatErrorCode, + createOnechatError, + createAgentNotFoundError, +} from '@kbn/onechat-common'; + +import { formatOnechatErrorMessage } from './errors'; + +describe('Onechat errors', () => { + describe('formatOnechatErrorMessage', () => { + it('should format OnechatError instances correctly', () => { + const internalError = createInternalError('Internal server error'); + expect(formatOnechatErrorMessage(internalError)).toBe('Internal server error'); + + const toolNotFoundError = createToolNotFoundError({ toolId: 'missing-tool' }); + expect(formatOnechatErrorMessage(toolNotFoundError)).toBe('Tool missing-tool not found'); + + const agentNotFoundError = createAgentNotFoundError({ agentId: 'missing-agent' }); + expect(formatOnechatErrorMessage(agentNotFoundError)).toBe('Agent missing-agent not found'); + }); + + it('should format generic JavaScript errors correctly', () => { + const jsError = new Error('Something went wrong'); + expect(formatOnechatErrorMessage(jsError)).toBe('Something went wrong'); + + const typeError = new TypeError('Invalid type'); + expect(formatOnechatErrorMessage(typeError)).toBe('Invalid type'); + }); + + it('should handle string inputs', () => { + expect(formatOnechatErrorMessage('Simple error message')).toBe('Simple error message'); + }); + + it('should handle falsy values', () => { + expect(formatOnechatErrorMessage(null)).toBe('null'); + expect(formatOnechatErrorMessage(undefined)).toBe('undefined'); + }); + + it('should handle HTTP response errors with body.message', () => { + const httpError = createOnechatError(OnechatErrorCode.badRequest, 'test error', { + statusCode: 400, + }); + expect(formatOnechatErrorMessage(httpError)).toBe('test error'); + }); + }); +}); diff --git a/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.ts b/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.ts new file mode 100644 index 0000000000000..4219ca2fd1bc7 --- /dev/null +++ b/x-pack/platform/packages/shared/onechat/onechat-browser/base/errors.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { inspect } from 'util'; + +/* + * Produce a string version of an error, + */ +export function formatOnechatErrorMessage(error: any): string { + if (typeof error === 'string') { + return error; + } + + if (!error) { + // stringify undefined/null/whatever this falsy value is + return inspect(error); + } + + // handle http response errors with error messages + if (error.body && typeof error.body.message === 'string') { + return error.body.message; + } + + // handle standard error objects with messages + if (error instanceof Error && error.message) { + return error.message; + } + + // everything else can just be serialized using util.inspect() + return inspect(error); +} diff --git a/x-pack/platform/packages/shared/onechat/onechat-browser/index.ts b/x-pack/platform/packages/shared/onechat/onechat-browser/index.ts index d76fbca6ecdad..e8318034e008c 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-browser/index.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-browser/index.ts @@ -5,6 +5,4 @@ * 2.0. */ -export function onechat() { - return 'You know...'; -} +export { formatOnechatErrorMessage } from './base/errors'; diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts index 93e1138857a54..4b4533d034d07 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.test.ts @@ -15,7 +15,6 @@ import { createOnechatError, isAgentNotFoundError, createAgentNotFoundError, - formatOnechatErrorMessage, } from './errors'; describe('Onechat errors', () => { @@ -191,41 +190,4 @@ describe('Onechat errors', () => { }); }); }); - - describe('formatOnechatErrorMessage', () => { - it('should format OnechatError instances correctly', () => { - const internalError = createInternalError('Internal server error'); - expect(formatOnechatErrorMessage(internalError)).toBe('Internal server error'); - - const toolNotFoundError = createToolNotFoundError({ toolId: 'missing-tool' }); - expect(formatOnechatErrorMessage(toolNotFoundError)).toBe('Tool missing-tool not found'); - - const agentNotFoundError = createAgentNotFoundError({ agentId: 'missing-agent' }); - expect(formatOnechatErrorMessage(agentNotFoundError)).toBe('Agent missing-agent not found'); - }); - - it('should format generic JavaScript errors correctly', () => { - const jsError = new Error('Something went wrong'); - expect(formatOnechatErrorMessage(jsError)).toBe('Something went wrong'); - - const typeError = new TypeError('Invalid type'); - expect(formatOnechatErrorMessage(typeError)).toBe('Invalid type'); - }); - - it('should handle string inputs', () => { - expect(formatOnechatErrorMessage('Simple error message')).toBe('Simple error message'); - }); - - it('should handle falsy values', () => { - expect(formatOnechatErrorMessage(null)).toBe('null'); - expect(formatOnechatErrorMessage(undefined)).toBe('undefined'); - }); - - it('should handle HTTP response errors with body.message', () => { - const httpError = createOnechatError(OnechatErrorCode.badRequest, 'test error', { - statusCode: 400, - }); - expect(formatOnechatErrorMessage(httpError)).toBe('test error'); - }); - }); }); diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts index 04db0e9930af5..b5d7a4e53eed6 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/base/errors.ts @@ -6,7 +6,6 @@ */ import { ServerSentEventError } from '@kbn/sse-utils'; -import { inspect } from 'util'; /** * Code to identify onechat errors @@ -185,33 +184,6 @@ export const createRequestAbortedError = ( return new OnechatError(OnechatErrorCode.requestAborted, message, meta ?? {}); }; -/* - * Produce a string version of an error, - */ -export function formatOnechatErrorMessage(error: any): string { - if (typeof error === 'string') { - return error; - } - - if (!error) { - // stringify undefined/null/whatever this falsy value is - return inspect(error); - } - - // handle http response errors with error messages - if (error.body && typeof error.body.message === 'string') { - return error.body.message; - } - - // handle standard error objects with messages - if (error instanceof Error && error.message) { - return error.message; - } - - // everything else can just be serialized using util.inspect() - return inspect(error); -} - /** * Global utility exposing all error utilities from a single export. */ @@ -225,5 +197,4 @@ export const OnechatErrorUtils = { createToolNotFoundError, createAgentNotFoundError, createConversationNotFoundError, - formatOnechatErrorMessage, }; diff --git a/x-pack/platform/packages/shared/onechat/onechat-common/index.ts b/x-pack/platform/packages/shared/onechat/onechat-common/index.ts index 688048f384dd4..82c5f182d37e8 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-common/index.ts +++ b/x-pack/platform/packages/shared/onechat/onechat-common/index.ts @@ -47,7 +47,6 @@ export { createConversationNotFoundError, createBadRequestError, createRequestAbortedError, - formatOnechatErrorMessage, type OnechatError, type OnechatInternalError, type OnechatToolNotFoundError, diff --git a/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx b/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx index d0420c6fe2274..264153788d9b3 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx +++ b/x-pack/platform/plugins/shared/onechat/public/application/components/agents/edit/agent_form.tsx @@ -20,7 +20,8 @@ import { EuiLoadingSpinner, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { AgentDefinition, formatOnechatErrorMessage } from '@kbn/onechat-common'; +import { AgentDefinition } from '@kbn/onechat-common'; +import { formatOnechatErrorMessage } from '@kbn/onechat-browser'; import { useForm, Controller, FormProvider } from 'react-hook-form'; import { useAgentEdit } from '../../../hooks/agents/use_agent_edit'; import { useKibana } from '../../../hooks/use_kibana'; diff --git a/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts b/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts index 00af655821ce4..5f5e127183e82 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts +++ b/x-pack/platform/plugins/shared/onechat/public/application/hooks/use_chat.ts @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import { OnechatError, OnechatErrorCode, - formatOnechatErrorMessage, isConversationCreatedEvent, isMessageChunkEvent, isMessageCompleteEvent, @@ -17,6 +16,7 @@ import { isToolCallEvent, isToolResultEvent, } from '@kbn/onechat-common'; +import { formatOnechatErrorMessage } from '@kbn/onechat-browser'; import { createToolCallStep } from '@kbn/onechat-common/chat/conversation'; import { useCallback, useState } from 'react'; import { useConversation } from './use_conversation'; From 6fd558effcc5959ab7dabf7bc928613c9808310b Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Thu, 24 Jul 2025 12:22:56 +0200 Subject: [PATCH 4/4] fix tsx --- .../packages/shared/onechat/onechat-browser/tsconfig.json | 4 +++- .../public/application/components/tools/esql/esql_tools.tsx | 3 ++- x-pack/platform/plugins/shared/onechat/tsconfig.json | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/packages/shared/onechat/onechat-browser/tsconfig.json b/x-pack/platform/packages/shared/onechat/onechat-browser/tsconfig.json index 18d16ae2e8837..5e0e01cd593eb 100644 --- a/x-pack/platform/packages/shared/onechat/onechat-browser/tsconfig.json +++ b/x-pack/platform/packages/shared/onechat/onechat-browser/tsconfig.json @@ -15,5 +15,7 @@ "exclude": [ "target/**/*" ], - "kbn_references": [] + "kbn_references": [ + "@kbn/onechat-common", + ] } diff --git a/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx b/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx index e63c6abc41839..cd0a6c044948a 100644 --- a/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx +++ b/x-pack/platform/plugins/shared/onechat/public/application/components/tools/esql/esql_tools.tsx @@ -20,7 +20,8 @@ import { useGeneratedHtmlId, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ToolDefinition, formatOnechatErrorMessage } from '@kbn/onechat-common'; +import { ToolDefinition } from '@kbn/onechat-common'; +import { formatOnechatErrorMessage } from '@kbn/onechat-browser'; import React, { useCallback, useMemo, useState } from 'react'; import { useDeleteToolModal } from '../../../hooks/tools/use_delete_tools'; import { useEsqlTools } from '../../../hooks/tools/use_tools'; diff --git a/x-pack/platform/plugins/shared/onechat/tsconfig.json b/x-pack/platform/plugins/shared/onechat/tsconfig.json index a312985dd98a9..92c4a8349557d 100644 --- a/x-pack/platform/plugins/shared/onechat/tsconfig.json +++ b/x-pack/platform/plugins/shared/onechat/tsconfig.json @@ -20,6 +20,7 @@ "@kbn/config-schema", "@kbn/inference-plugin", "@kbn/onechat-server", + "@kbn/onechat-browser", "@kbn/core-http-server", "@kbn/onechat-common", "@kbn/core-elasticsearch-server",