@sinequa/agent 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinequa-agent.mjs","sources":["../../../projects/agent/src/builders/message.builder.ts","../../../projects/agent/src/feedback/base.prompt.ts","../../../projects/agent/src/constants.ts","../../../projects/agent/src/services/agent-configuration.service.ts","../../../projects/agent/src/tokens/agents.tokens.ts","../../../projects/agent/src/tokens/shiki.tokens.ts","../../../projects/agent/src/tokens/signalr.tokens.ts","../../../projects/agent/src/services/audit.service.ts","../../../projects/agent/src/services/notifications.service.ts","../../../projects/agent/src/services/theme.service.ts","../../../projects/agent/src/services/shiki-highlighter.service.ts","../../../projects/agent/src/services/renderer.service.ts","../../../projects/agent/src/services/theme.initializer.ts","../../../projects/agent/src/services/search-expansion.service.ts","../../../projects/agent/src/services/mcp-oauth.service.ts","../../../projects/agent/src/types/agent.types.ts","../../../projects/agent/src/types/custom-events/action.events.types.ts","../../../projects/agent/src/types/custom-events/admin.events.types.ts","../../../projects/agent/src/types/custom-events/error.events.types.ts","../../../projects/agent/src/types/custom-events/event.events.types.ts","../../../projects/agent/src/types/custom-events/new-chat.events.types.ts","../../../projects/agent/src/types/saved-chat.types.ts","../../../projects/agent/src/utils/additional-context-props.ts","../../../projects/agent/src/utils/tool-choice.ts","../../../projects/agent/src/stores/reference-cache.feature.ts","../../../projects/agent/src/stores/agents.store.ts","../../../projects/agent/src/utils/clipboard.ts","../../../projects/agent/src/utils/crypto.ts","../../../projects/agent/src/utils/history.ts","../../../projects/agent/src/utils/message.ts","../../../projects/agent/src/utils/signals.ts","../../../projects/agent/src/utils/urls.ts","../../../projects/agent/src/overrides/button.ts","../../../projects/agent/src/overrides/hyperlink.ts","../../../projects/agent/src/feedback/dislike.prompt.ts","../../../projects/agent/src/feedback/like.prompt.ts","../../../projects/agent/src/overrides/icons/chip.icon.ts","../../../projects/agent/src/overrides/icons/robot.icon.ts","../../../projects/agent/src/overrides/icons/check.icon.ts","../../../projects/agent/src/overrides/icons/copy.icon.ts","../../../projects/agent/src/components/copyable-field.component.ts","../../../projects/agent/src/overrides/icons/search.icon.ts","../../../projects/agent/src/input/available-internal-tools.ts","../../../projects/agent/src/logger/logger.service.ts","../../../projects/agent/src/signalr/signalr.web.service.ts","../../../projects/agent/src/signalr/signalr.service.ts","../../../projects/agent/src/signalr/index.ts","../../../projects/agent/src/agent/agent.service.ts","../../../projects/agent/src/pipes/cast-to-debug-kv.pipe.ts","../../../projects/agent/src/pipes/cast-to-debug-list.pipe.ts","../../../projects/agent/src/pipes/safe-html.pipe.ts","../../../projects/agent/src/input/mcp-connect-dialog.component.ts","../../../projects/agent/src/input/mcp-revoke-confirm-dialog.component.ts","../../../projects/agent/src/input/mcp-server-item.component.ts","../../../projects/agent/src/input/available-mcp-servers.ts","../../../projects/agent/src/input/info-panel.ts","../../../projects/agent/src/overrides/icons/arrow-up.icon.ts","../../../projects/agent/src/overrides/icons/slider.icon.ts","../../../projects/agent/src/input/auto-resize.directive.ts","../../../projects/agent/src/input/tools-selection-panel.ts","../../../projects/agent/src/input/input.ts","../../../projects/agent/src/smart-renderer/components/chart-plot.component.ts","../../../projects/agent/src/shiki/shiki.ts","../../../projects/agent/src/smart-renderer/components/code-block.component.ts","../../../projects/agent/src/smart-renderer/components/inline-document-card.ts","../../../projects/agent/src/smart-renderer/components/inline-reference.component.ts","../../../projects/agent/src/smart-renderer/components/table-wrapper.component.ts","../../../projects/agent/src/smart-renderer/plugins/code-block.plugin.ts","../../../projects/agent/src/smart-renderer/plugins/inline-reference.plugin.ts","../../../projects/agent/src/smart-renderer/plugins/link.plugin.ts","../../../projects/agent/src/smart-renderer/plugins/list.plugin.ts","../../../projects/agent/src/smart-renderer/plugins/table-wrapper.plugin.ts","../../../projects/agent/src/smart-renderer/plugins/chartJs.plugin.ts","../../../projects/agent/src/smart-renderer/smart-renderer.ts","../../../projects/agent/src/messages/message-base.ts","../../../projects/agent/src/messages/message.service.ts","../../../projects/agent/src/messages/agent/message-agent-toolbar.ts","../../../projects/agent/src/messages/agent/message-agent.ts","../../../projects/agent/src/messages/debug/debug.service.ts","../../../projects/agent/src/messages/debug/message-debug-kv.ts","../../../projects/agent/src/messages/debug/message-debug-list.ts","../../../projects/agent/src/messages/debug/message-debug-details.ts","../../../projects/agent/src/messages/debug/message-debug-entry.ts","../../../projects/agent/src/messages/debug/message-debug.ts","../../../projects/agent/src/messages/function/message-function.ts","../../../projects/agent/src/messages/function/plugins/search/document-card.ts","../../../projects/agent/src/messages/function/plugins/search/read-document.ts","../../../projects/agent/src/chaps-e/animated-robot-no-results.ts","../../../projects/agent/src/messages/function/plugins/search/search-results-tabs.ts","../../../projects/agent/src/overrides/icons/maximize.icon.ts","../../../projects/agent/src/messages/function/plugins/search/search.ts","../../../projects/agent/src/messages/function/plugins/search/expanded-search-results.ts","../../../projects/agent/src/messages/user/message-user-toolbar.ts","../../../projects/agent/src/messages/user/message-user.ts","../../../projects/agent/src/messages/message-list.ts","../../../projects/agent/src/saved-chats/saved-chats.service.ts","../../../projects/agent/src/overrides/icons/more.icon.ts","../../../projects/agent/src/overrides/icons/square-pen.icon.ts","../../../projects/agent/src/overrides/icons/trash.icon.ts","../../../projects/agent/src/saved-chats/delete.prompt.ts","../../../projects/agent/src/saved-chats/rename.prompt.ts","../../../projects/agent/src/saved-chats/saved-chats.ts","../../../projects/agent/src/saved-chats/saved-chats-dialog.ts","../../../projects/agent/src/agent/machine.ts","../../../projects/agent/src/chaps-e/animated-robot.ts","../../../projects/agent/src/agent/agent.ts","../../../projects/agent/src/agent/agent.injector.ts","../../../projects/agent/src/components/oauth-callback.component.ts","../../../projects/agent/src/directives/admin.directive.ts","../../../projects/agent/src/directives/agent-generation.directive.ts","../../../projects/agent/src/directives/copy-to-clipboard.directive.ts","../../../projects/agent/src/directives/error.directive.ts","../../../projects/agent/src/directives/feedback.directive.ts","../../../projects/agent/src/providers/renderer-plugins.providers.ts","../../../projects/agent/src/providers/saved-chats.provider.ts","../../../projects/agent/src/providers/shiki-highlighter.provider.ts","../../../projects/agent/src/providers/tool-card-plugin.providers.ts","../../../projects/agent/src/settings/menu-modal.ts","../../../projects/agent/src/overrides/icons/appearance.icon.ts","../../../projects/agent/src/overrides/icons/tools.icon.ts","../../../projects/agent/src/overrides/icons/logout.icon.ts","../../../projects/agent/src/overrides/flags/de.ts","../../../projects/agent/src/overrides/flags/fr.ts","../../../projects/agent/src/overrides/flags/gb.ts","../../../projects/agent/src/settings/language-setting.ts","../../../projects/agent/src/settings/layout-setting.ts","../../../projects/agent/src/overrides/icons/moon.icon.ts","../../../projects/agent/src/overrides/icons/sun.icon.ts","../../../projects/agent/src/overrides/icons/sun-moon.icon.ts","../../../projects/agent/src/settings/theme-setting.ts","../../../projects/agent/src/settings/settings-modal.ts","../../../projects/agent/src/settings/settings.ts","../../../projects/agent/src/sinequa-agent.ts"],"sourcesContent":["import type { AdditionalProperties, DebugMessageProperties, HistoryFrame, Message, MessageContent, MessageContentFunctionApprovalResponse } from '../types';\r\n\r\nexport class MessageBuilder {\r\n private _message: Message | undefined;\r\n\r\n constructor(message: Message | undefined = undefined) {\r\n if (message) this._message = message;\r\n }\r\n\r\n getMessage(): Message | undefined {\r\n return this._message;\r\n }\r\n\r\n clear(): void {\r\n this._message = undefined;\r\n }\r\n\r\n createUserMessage(text: string): void {\r\n if (this._message) return;\r\n\r\n this._message = {\r\n role: 'user',\r\n contents: [{ $type: 'text', text }],\r\n messageId: crypto.randomUUID(),\r\n additionalProperties: {\r\n isUserInput: true,\r\n display: true,\r\n },\r\n };\r\n }\r\n\r\n createAgentMessage(): void {\r\n if (this._message) return;\r\n\r\n this._message = {\r\n role: 'assistant',\r\n contents: [],\r\n messageId: '',\r\n additionalProperties: { display: true }\r\n };\r\n }\r\n\r\n createFunctionApprovalResponseMessage(): void {\r\n if (this._message) return;\r\n this._message = {\r\n role: \"user\",\r\n contents: [] as MessageContentFunctionApprovalResponse[],\r\n messageId: crypto.randomUUID()\r\n }\r\n }\r\n\r\n setMessageId(messageId: string) {\r\n // if (!checkUUID(messageId)) throw new Error(`Invalid messageId, should be a valid UUID, got: ${messageId}`);\r\n if (!this._message) throw new Error('Setting messageId on empty message');\r\n\r\n this._message.messageId = messageId;\r\n }\r\n\r\n setMessageContextFromHistoryFrame(historyFrame: HistoryFrame) {\r\n // if history is empty, do nothing\r\n const history = historyFrame.history;\r\n if (history.length === 0) return;\r\n\r\n // if no assistant message in history, do nothing\r\n const lastAssistantMessage = [...history].reverse().find(m => m.role === 'assistant');\r\n if (!lastAssistantMessage) return;\r\n\r\n this.createAgentMessage();\r\n\r\n // set message content from last assistant message in history\r\n this._message!.contents = lastAssistantMessage.contents;\r\n\r\n this.setAdditionalProperties(lastAssistantMessage.additionalProperties);\r\n }\r\n\r\n setContent(content: MessageContent[]) {\r\n if (!this._message) throw new Error('Setting content on empty message');\r\n\r\n this._message.contents = content;\r\n }\r\n\r\n appendContent(content: MessageContent) {\r\n if (!this._message) throw new Error('Appending content on empty message');\r\n\r\n this._message.contents.push(content);\r\n }\r\n\r\n appendDebugMessageFrame(debugMessage: DebugMessageProperties) {\r\n this.createAgentMessage();\r\n\r\n // lazily create additionalProperties and $debug if needed\r\n if (!this._message!.additionalProperties) this._message!.additionalProperties = { display: false };\r\n if (!this._message!.additionalProperties!.$debug) this._message!.additionalProperties!.$debug = [];\r\n // if debug message with same id already exists, do not add\r\n if (this._message!.additionalProperties!.$debug.find(d => d.debugMessageId === debugMessage.debugMessageId)) return;\r\n\r\n this._message!.additionalProperties!.$debug.push(debugMessage);\r\n }\r\n\r\n private setAdditionalProperties(additionalProperties: AdditionalProperties | undefined) {\r\n if (!additionalProperties) return;\r\n\r\n // lazily create additionalProperties if needed\r\n if (!this._message!.additionalProperties) this._message!.additionalProperties = {} as any;\r\n\r\n // copy properties by hand for now, they **must** always be defined\r\n this._message!.additionalProperties!.display = additionalProperties.display ?? false;\r\n // we shouldn't have isUserInput in assistant messages, so we don't copy it\r\n }\r\n}\r\n","import { afterNextRender, Component, DestroyRef, ElementRef, inject, signal } from '@angular/core';\nimport { firstValueFrom, Subject } from 'rxjs';\n\nexport type PromptActionResolved = { action: 'submit' };\nexport type PromptActionRejected = { action: 'cancel' };\n\n/**\n * Type guard to determine if the prompt action was a rejection (cancellation).\n *\n * @param action - The action to check.\n *\n * @returns True if the action is a cancellation, false otherwise.\n *\n * @example\n * ```typescript\n * prompt.then(action => {\n * if (isPromptActionRejected(action)) {\n * // Handle cancellation\n * } else {\n * // Handle submission\n * }\n * });\n * ```\n */\nexport function isPromptActionRejected(\n action: PromptActionResolved | PromptActionRejected\n): action is PromptActionRejected {\n return action.action === 'cancel';\n}\n\n/**\n * Base class for prompt components used to collect user feedback.\n * The prompt is displayed by calling the `prompt()` method, which returns a promise\n * that resolves when the user submits or cancels the prompt.\n * The prompt visibility is managed internally using a signal.\n * The derived class should override `this.action.next(...)` to resolve the promise.\n *\n * @remarks This is an abstract class and should not be instantiated directly.\n * @remarks Visibility is managed by the inheriting component using the `hidden` signal.\n */\n@Component({\n template: `<h1>You should not see this!</h1>`\n})\nexport abstract class BasePrompt<Resolved extends PromptActionResolved, Canceled extends PromptActionRejected> {\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly hidden = signal<boolean>(true);\n\n protected action = new Subject<Resolved | Canceled>();\n\n constructor() {\n // Teleport to document.body so that `position: fixed` is always\n // viewport-relative, even when the prompt is rendered inside a\n // CSS-transformed ancestor (e.g. the mobile sidebar sheet).\n const nativeEl = inject(ElementRef).nativeElement;\n afterNextRender(() => document.body.appendChild(nativeEl));\n\n this.destroyRef.onDestroy(() => {\n this.action.complete();\n nativeEl.remove();\n });\n }\n\n show() {\n this.hidden.set(false);\n }\n\n hide() {\n this.hidden.set(true);\n }\n\n toggle() {\n this.hidden.set(!this.hidden());\n }\n\n /**\n * Displays the prompt and returns a promise that resolves when the user submits or cancels.\n *\n * @returns A promise that resolves of rejects to the user's action (submit or cancel).\n *\n * @remarks Use the {@link isPromptActionRejected} guard to determine if the action was a cancellation.\n * @remarks Inheriting components should override this method to provide specific behavior\n * (ie. resetting a text field).\n * @remarks The promise never rejects.\n */\n prompt(): Promise<Resolved | Canceled> {\n return new Promise<Resolved | Canceled>(async resolve => {\n this.show();\n\n await firstValueFrom(this.action).then(result => {\n if (result.action === 'submit') resolve(result as Resolved);\n else resolve(result as Canceled);\n });\n\n this.hide();\n });\n }\n\n cancel() {\n this.action.next({ action: 'cancel' } as Canceled);\n }\n\n submit() {\n this.action.next({ action: 'submit' } as Resolved);\n }\n}\n","// Name of the agent JSON configuration\nexport const AGENT_JSON_NAME = 'agents';\n// WebSocket endpoint for the agent service\nexport const AGENT_WEBSOCKET_ENDPOINT = 'assistant';\n// REST endpoint for the agent service\nexport const AGENT_REST_ENDPOINT = 'SinequaAssistantREST';\n// Agent configuration endpoint\nexport const AGENT_CONFIGURATION_ENDPOINT = 'GetAgent';\n// Version of the agent endpoint\nexport const AGENT_ENDPOINTS_VERSION = '/endpoints/v1/';\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { take } from 'rxjs';\n\nimport { globalConfig } from '@sinequa/atomic';\n\nimport { AGENT_REST_ENDPOINT } from '../constants';\nimport { AgentDetails, ContextProperties } from '../types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AgentConfigurationService {\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieve the agent configuration from the backend.\n *\n * @param name - The name of the agent to retrieve the configuration for.\n *\n * @returns An observable emitting the agent configuration.\n */\n getAgent(name: string, contextProperties?: ContextProperties) {\n return this.http\n .post<AgentDetails>(`${globalConfig.backendUrl}/api/v1/dev.plugin?plugin=${AGENT_REST_ENDPOINT}`, {\n action: 'GetAgent',\n name,\n contextProperties\n })\n .pipe(take(1));\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport type MarkdownIt from 'markdown-it';\n\nimport { MessageFunctionComponent } from '../messages';\n\n/**\n * A token used to inject the instanceId to be used by all components and services of the Agent.\n * @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#sinequa-assistant-instance-settings\n */\nexport const AGENT_INSTANCE_ID = new InjectionToken<string>('Chat instanceId');\n\n/**\n * A token used to inject the default agent name.\n */\nexport const AGENT_DEFAULT_NAME = new InjectionToken<string>('Default Agent Name');\n\n/**\n * A token used to enable the XState inspector for debugging state machines.\n * @see https://stately.ai/docs/inspector\n */\nexport const INSPECT_XSTATE = new InjectionToken<boolean>('Inspect XState');\n\n/**\n * Markdown-it plugins are functions that take the markdown-it instance and optional parameters.\n */\nexport type MarkdownItPlugin = (md: MarkdownIt, ...params: any[]) => void;\n\n/**\n * Renderer plugin defines a markdown-it plugin along with an\n * optional the Angular component used to render the content.\n */\nexport type RendererPlugins = {\n [key: string]: {\n markdownItPlugin: MarkdownItPlugin;\n component?: Type<any> | undefined;\n };\n};\n\n/**\n * A token used to provide markdown-it plugins\n * @defaultValue {}\n */\nexport const AGENT_RENDERER_PLUGINS = new InjectionToken<RendererPlugins>('Plugins for Agent message renderer', {\n providedIn: 'root',\n factory: () => ({})\n});\n\n/**\n * A token used to provide Angular components for rendering tool cards in Agent messages.\n * The key is the tool name, and the value is the Angular component used to render the tool card.\n */\nexport type ToolCardPlugins = {\n // not a fan of <any, any> here, we'll figure it out later\n [key: string]: Type<MessageFunctionComponent>;\n};\n\n/**\n * A token to provide Angular components for rendering tool cards in Agent messages.\n * @defaultValue {}\n */\nexport const AGENT_TOOL_CARD_PLUGINS = new InjectionToken<ToolCardPlugins>(\n 'Angular components to render tool cards in Agent messages',\n {\n providedIn: 'root',\n factory: () => ({})\n }\n);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Configuration for Shiki syntax highlighter\n */\nexport type ShikiThemeMode = 'light' | 'dark';\n\nexport interface ShikiConfig {\n langs: string[];\n themes: Record<ShikiThemeMode, string>;\n}\n\nexport const SHIKI_HIGHLIGHTER_CONFIG = new InjectionToken<ShikiConfig>('Config for shiki syntax highlighter');\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The default retry delays (in milliseconds) for SignalR automatic reconnect.\n */\nexport const SIGNALR_RETRY_DELAYS = new InjectionToken<number[]>('SignalR retry policy');\nexport const SIGNALR_RETRY_DELAYS_DEFAULT = [0, 2_000, 5_000, 10_000, 30_000];\n","import { inject, Injectable } from '@angular/core';\n\nimport { Audit, AuditEvent, globalConfig } from '@sinequa/atomic';\nimport { PrincipalStore } from '@sinequa/atomic-angular';\n\nimport { AGENT_DEFAULT_NAME, AGENT_INSTANCE_ID } from '../tokens';\n\nexport type AgentAuditType =\n | 'agent.report.positive.click'\n | 'agent.report.negative.click'\n | 'agent.report.positive.submit'\n | 'agent.report.negative.submit';\n\n@Injectable()\nexport class AuditService {\n private readonly instanceId = inject(AGENT_INSTANCE_ID);\n private readonly agentName = inject(AGENT_DEFAULT_NAME);\n private readonly principal = inject(PrincipalStore);\n\n createAuditObject(type: AgentAuditType, chatId: string, payload?: object): AuditEvent {\n return {\n type,\n detail: Object.assign(\n {\n app: globalConfig.app,\n 'instance-id': this.instanceId,\n url: decodeURIComponent(window.location.href),\n 'user-id': this.principal.principal().userId,\n 'chat-id': chatId,\n agent: this.agentName\n },\n payload\n )\n };\n }\n\n notify(payload: AuditEvent) {\n return Audit.notify(payload);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport type Notification = {\n type: 'success' | 'error' | 'info' | 'warning';\n title: string;\n description?: string;\n error?: any;\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationsService {\n readonly notifications = new Subject<Notification>();\n\n notify(notification: Notification) {\n this.notifications.next(notification);\n }\n}\n","import { Injectable, signal, effect } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n readonly mode = signal<'light' | 'dark'>('light');\n\n constructor() {\n effect(() => {\n document.documentElement.classList.toggle('dark', this.mode() === 'dark');\n });\n }\n\n set(mode: 'light' | 'dark') {\n this.mode.set(mode);\n }\n\n toggle() {\n this.mode.update(v => (v === 'light' ? 'dark' : 'light'));\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { default as MarkdownIt } from 'markdown-it';\nimport { fromHighlighter } from '@shikijs/markdown-it/core';\nimport { createHighlighter, Highlighter } from 'shiki';\n\nimport { SHIKI_HIGHLIGHTER_CONFIG } from '../tokens';\nimport { ThemeService } from './theme.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ShikiHighlighterService {\n private readonly config = inject(SHIKI_HIGHLIGHTER_CONFIG);\n private readonly themeService = inject(ThemeService);\n\n private readonly isDark = computed(() => this.themeService.mode() === 'dark');\n private highlighterPromise: Promise<Highlighter> | null = null;\n\n private init(): Promise<Highlighter> {\n if (!this.highlighterPromise) {\n this.highlighterPromise = createHighlighter({\n langs: this.config.langs,\n themes: Object.values(this.config.themes)\n });\n }\n return this.highlighterPromise;\n }\n\n async applyToMarkdownIt(md: MarkdownIt): Promise<void> {\n const highlighter = await this.init();\n const theme = this.isDark() ? this.config.themes.dark : this.config.themes.light;\n\n md.use(fromHighlighter(highlighter, { theme }));\n }\n\n async highlight(code: string, lang: string): Promise<string> {\n const highlighter = await this.init();\n const theme = this.isDark() ? this.config.themes.dark : this.config.themes.light;\n return highlighter.codeToHtml(code, { lang, theme });\n }\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { default as MarkdownIt, default as markdownit } from 'markdown-it';\n\nimport { AGENT_RENDERER_PLUGINS } from '../tokens';\nimport { ShikiHighlighterService } from './shiki-highlighter.service';\n\n/**\n * This service exposes the only reference to the markdown renderer used in the agent.\n * Built with injected plugins, it can be extended to support custom markdown syntax.\n *\n * @see {@link AGENT_RENDERER_PLUGINS} token\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private readonly plugins = inject(AGENT_RENDERER_PLUGINS);\n private readonly shikiHighlighterService = inject(ShikiHighlighterService)\n\n public readonly renderer: MarkdownIt;\n\n constructor() {\n this.renderer = this.createRenderer();\n this.useShiki();\n }\n\n private createRenderer(): MarkdownIt {\n const md = markdownit({ html: true, linkify: true });\n\n // inject plugins\n Object.values(this.plugins).forEach(plugin => md.use(plugin.markdownItPlugin));\n\n return md;\n }\n\n private async useShiki() {\n await this.shikiHighlighterService.applyToMarkdownIt(this.renderer);\n }\n}\n","import { inject } from '@angular/core';\nimport { getState } from '@ngrx/signals';\n\nimport { UserSettingsStore } from '@sinequa/atomic-angular';\n\nimport { ThemeService } from './theme.service';\n\nexport function themeInitializerFn() {\n const settings = inject(UserSettingsStore);\n const theme = inject(ThemeService);\n\n const { useDarkMode } = getState(settings) as any;\n\n theme.set(useDarkMode ? 'dark' : 'light');\n}\n","import { computed, Injectable, signal } from '@angular/core';\n\nimport { SearchContext } from '../messages/function/plugins/search/search.types';\n\n@Injectable({ providedIn: 'root' })\nexport class SearchExpansionService {\n readonly context = signal<SearchContext | undefined>(undefined);\n readonly queryText = signal<string | undefined>(undefined);\n readonly expandedCallId = signal<string | undefined>(undefined);\n readonly isExpanded = computed(() => this.context() !== undefined);\n\n expand(context: SearchContext, queryText: string, callId: string): void {\n this.context.set(context);\n this.queryText.set(queryText);\n this.expandedCallId.set(callId);\n }\n\n collapse(): void {\n this.context.set(undefined);\n this.queryText.set(undefined);\n this.expandedCallId.set(undefined);\n }\n}","import { Injectable, signal } from '@angular/core';\n\nimport { McpClient } from '../types';\n\n/** Converts a byte array to a base64url-encoded string (no padding, URL-safe). */\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(String.fromCharCode(...bytes))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\n/** Generates a random PKCE code verifier and its SHA-256 challenge. */\nasync function generatePKCE(): Promise<{ codeVerifier: string; codeChallenge: string }> {\n const randomBytes = crypto.getRandomValues(new Uint8Array(32));\n const codeVerifier = base64UrlEncode(randomBytes);\n const hashBuffer = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));\n const codeChallenge = base64UrlEncode(new Uint8Array(hashBuffer));\n return { codeVerifier, codeChallenge };\n}\n\n/**\n * Manages the PKCE OAuth2 authorization flow for MCP clients.\n *\n * Handles: code verifier/challenge generation, opening the auth tab,\n * listening for the postMessage callback from the OAuth callback route,\n * and resolving the authorization code back to the caller.\n */\n@Injectable({ providedIn: 'root' })\nexport class McpOAuthService {\n /** The MCP client currently awaiting OAuth authorization, or null when idle. */\n readonly pendingClient = signal<McpClient | null>(null);\n\n private currentCodeVerifier: string | null = null;\n private pendingResolve: ((result: { code: string; codeVerifier: string }) => void) | null = null;\n private pendingReject: ((reason: unknown) => void) | null = null;\n private readonly messageListener = this.handleOAuthMessage.bind(this);\n\n /**\n * Starts the PKCE OAuth2 flow for the given MCP client.\n *\n * Navigates the provided popup (or opens a new one) to the authorization URL with PKCE\n * parameters appended, then waits for the callback page to post the authorization code\n * back via postMessage.\n *\n * The `popup` parameter should be opened **synchronously** by the caller (before any\n * `await`) to avoid browser popup blockers. Passing it here prevents a second `window.open`\n * call after an async boundary.\n *\n * @param client - The MCP client to authorize. Must have `authorizationUrl` set.\n * @param popup - A blank popup window already opened by the caller, or `undefined` to\n * let this method open one (only safe when called synchronously from a user gesture).\n *\n * @returns A promise that resolves with the authorization code and PKCE code verifier,\n * or rejects if the flow is cancelled or the popup could not be opened.\n */\n async startOAuthFlow(client: McpClient, popup?: Window): Promise<{ code: string; codeVerifier: string }> {\n if (!client.authorizationUrl) {\n return Promise.reject('No authorization URL available for this MCP client.');\n }\n\n // Use the caller-provided popup when available; otherwise open one now.\n // noopener must NOT be set: the callback page needs window.opener to postMessage the code back.\n const win = popup ?? window.open('', '_blank');\n if (!win) {\n return Promise.reject('Could not open the authentication popup. Please allow popups for this site.');\n }\n\n const { codeVerifier, codeChallenge } = await generatePKCE();\n const authUrl = `${client.authorizationUrl}&code_challenge=${codeChallenge}&code_challenge_method=S256`;\n\n win.location.href = authUrl;\n this.currentCodeVerifier = codeVerifier;\n this.pendingClient.set(client);\n window.addEventListener('message', this.messageListener);\n\n return new Promise((resolve, reject) => {\n this.pendingResolve = resolve;\n this.pendingReject = reject;\n });\n }\n\n /**\n * Cancels the in-progress OAuth flow, if any.\n * Clears pending state and removes the message listener.\n */\n cancelOAuth(): void {\n const reject = this.pendingReject;\n this.cleanup();\n reject?.('cancelled');\n }\n\n private handleOAuthMessage(event: MessageEvent): void {\n if (event.origin !== window.location.origin) return;\n if (event.data?.type !== 'mcp-oauth-callback') return;\n\n const code = event.data?.code as string | undefined;\n if (!code) return;\n\n const resolve = this.pendingResolve;\n const codeVerifier = this.currentCodeVerifier ?? '';\n this.cleanup();\n resolve?.({ code, codeVerifier });\n }\n\n private cleanup(): void {\n this.pendingClient.set(null);\n this.currentCodeVerifier = null;\n this.pendingResolve = null;\n this.pendingReject = null;\n window.removeEventListener('message', this.messageListener);\n }\n}\n","import { HttpTransportType, LogLevel } from '@microsoft/signalr';\nimport * as z from 'zod';\n\n/** {@link HttpTransportType} */\nexport const SignalRTransportSchema = z.enum(['WebSockets', 'ServerSentEvents', 'LongPolling', 'None']);\nexport type SignalRTransport = z.infer<typeof SignalRTransportSchema>;\n\n/** {@link LogLevel} */\nexport const SignalRLogLevelSchema = z.enum(['Trace', 'Debug', 'Information', 'Warning', 'Error', 'Critical', 'None']);\nexport type SignalRLogLevel = z.infer<typeof SignalRLogLevelSchema>;\n\n/** @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#global-settings---globalsettings-object */\nexport const GlobalSettingsSchema = z.object({\n disclaimer: z\n .string()\n .default('This content is AI-generated and may contain errors. Please verify the citations for accuracy.')\n});\nexport type GlobalSettings = z.infer<typeof GlobalSettingsSchema>;\n\n/** @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#saved-chat---savedchatsettings-object */\nexport const SavedChatSettingsSchema = z\n .object({\n enabled: z.boolean().default(false),\n display: z.boolean().default(false)\n })\n .refine(d => !(d.enabled === false && d.display === true), {\n error: 'Cannot display SavedChat if the feature is not enabled'\n });\nexport type SavedChatSettings = z.infer<typeof SavedChatSettingsSchema>;\n\n/** @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#connection-settings---connectionsettings-object */\nexport const ConnectionSettingsSchema = z.object({\n connectionErrorMessage: z.string().default('Connection lost! Please check your network connection and try again.'),\n signalRTransport: SignalRTransportSchema.default('None'),\n signalRLogLevel: SignalRLogLevelSchema.default('Debug'),\n signalRServerTimeoutInMilliseconds: z.number().default(120_000),\n signalRSkipNegotiation: z.boolean().default(false)\n});\nexport type ConnectionSettings = z.infer<typeof ConnectionSettingsSchema>;\n\n/** @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#auditSettings */\nexport const AuditSettingsSchema = z.object({\n issueTypes: z.array(z.string().nonempty()),\n logContent: z.boolean().default(false)\n});\nexport type AuditSettings = z.infer<typeof AuditSettingsSchema>;\n\n/** @see */\nexport const AdditionalToolPropertiesSchema = z.object();\nexport type AdditionalToolProperties = z.infer<typeof AdditionalToolPropertiesSchema>;\n\n/** @see https://doc-internal.sinequa.com/assistant/latest/agent-configuration */\nexport const AgentConfigSchema = z\n .object({\n defaultAgent: z.string().nonempty(),\n switchAgents: z.array(z.string().nonempty()).default([]),\n globalSettings: GlobalSettingsSchema,\n connectionSettings: ConnectionSettingsSchema,\n savedChatSettings: SavedChatSettingsSchema.optional(),\n auditSettings: AuditSettingsSchema,\n additionalToolProperties: AdditionalToolPropertiesSchema\n })\n .readonly();\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\n","import { Message, MessageContentFunctionApprovalResponse } from '../messages.types';\n\nexport const AGENT_ACTION_EVENT_NAME = 'agent-action';\n\nexport type ActionEvent = {\n origin: 'agent' | 'user' | 'input';\n action: MessageAgentAction | MessageUserAction | InputAction;\n};\n\n/**\n * copy: user clicked the copy button to copy the message contents\n * regenerate: user clicked the regenerate button to regenerate from the message\n * like: user clicked the like button to provide positive feedback\n * dislike: user clicked the dislike button to provide negative feedback\n * debug: user clicked the debug button to view debug information\n * function_approval: user responded to a function approval request with either approval or rejection\n */\nexport type MessageAgentAction = 'copy' | 'regenerate' | 'like' | 'dislike' | 'debug' | 'function_approval';\nexport type MessageAgentActionEvent = ActionEvent & {\n origin: 'agent';\n action: MessageAgentAction;\n message?: Message;\n callback?: (payload?: object) => void;\n approvalData?: MessageContentFunctionApprovalResponse;\n};\nexport function isAgentActionEvent(event: ActionEvent): event is MessageAgentActionEvent {\n return event.origin === 'agent';\n}\n\n/**\n * copy: user clicked the copy button to copy the message contents\n * edit: user clicked the edit button to edit the message\n */\nexport type MessageUserAction = 'copy' | 'edit';\nexport type MessageUserActionEvent = ActionEvent & {\n origin: 'user';\n action: MessageUserAction;\n message?: Message;\n};\nexport function isUserActionEvent(event: ActionEvent): event is MessageUserActionEvent {\n return event.origin === 'user';\n}\n\n/**\n * clear: user clicked the clear button to clear the input\n * cancel: user clicked the cancel button to cancel editing\n * stop: user clicked the stop button to stop the agent generation\n */\nexport type InputAction = 'clear' | 'cancel' | 'stop';\nexport type InputActionEvent = ActionEvent & {\n origin: 'input';\n action: InputAction;\n};\nexport function isInputActionEvent(event: ActionEvent): event is InputActionEvent {\n return event.origin === 'input';\n}\n\ntype UserActionType = MessageUserActionEvent;\ntype AgentActionType = MessageAgentActionEvent;\ntype InputActionType = InputActionEvent;\n\ninterface ActionTypeMap {\n user: UserActionType;\n agent: AgentActionType;\n input: InputActionType;\n}\n\ntype ActionTypeKey = keyof ActionTypeMap;\n\nexport function createActionEvent<T extends ActionTypeKey>(\n origin: T,\n action: ActionTypeMap[T]['action'],\n payload?: Omit<ActionTypeMap[T], 'origin' | 'action'>\n): CustomEvent<ActionTypeMap[T]> {\n return new CustomEvent<ActionTypeMap[T]>(AGENT_ACTION_EVENT_NAME, {\n detail: { origin, action, ...payload } as ActionTypeMap[T],\n bubbles: true\n });\n}\n","export const ADMIN_EVENT_NAME = 'admin';\n\nexport type AdminEventId = 'ADMIN_COPIED_AGENT_CONFIG'; // 'Admin copied agent configuration to clipboard'\n\nexport type AdminEventPayload = {\n status: 'success' | 'failure' | 'info';\n details?: string;\n};\n\nexport type AdminEvent = Partial<AdminEventPayload> & {\n id: AdminEventId;\n};\n\nexport function createAdminEvent(id: AdminEventId, payload?: AdminEventPayload): CustomEvent<AdminEvent> {\n return new CustomEvent<AdminEvent>(ADMIN_EVENT_NAME, {\n detail: { id, ...payload },\n bubbles: true\n });\n}\n","export const AGENT_ERROR_EVENT_NAME = 'agent-error';\n\nexport type AgentErrorId =\n | 'AGENT_FAILED_TO_INVOKE_AGENT' // 'Failed to invoke agent endpoint'\n | 'AGENT_FAILED_TO_STOP_GENERATION'; // 'Failed to stop agent generation'\n\nexport type AgentErrorEvent = {\n id: AgentErrorId;\n error?: any;\n errorMessage?: string;\n};\n\nexport function createAgentErrorEvent(\n id: AgentErrorId,\n error?: any,\n errorMessage?: string\n): CustomEvent<AgentErrorEvent> {\n return new CustomEvent<AgentErrorEvent>(AGENT_ERROR_EVENT_NAME, {\n detail: { id, error, errorMessage },\n bubbles: true\n });\n}\n","export const AGENT_EVENT_NAME = 'agent';\n\nexport type AgentEventId =\n | 'AGENT_STOPPED_GENERATION' // Agent has successfully stopped its generation\n | 'COPY_CODE_BLOCK' // User clicked the copy button on a code block\n | 'COPY_TABLE_AS_CSV' // User clicked the copy button on a table\n | 'DOWNLOAD_TABLE_AS_CSV'; // User clicked the download button on a table\n\nexport type AgentEvent = {\n id: AgentEventId;\n payload?: any;\n};\n\nexport function createAgentEvent(id: AgentEventId, payload?: any): CustomEvent<AgentEvent> {\n return new CustomEvent<AgentEvent>(AGENT_EVENT_NAME, {\n detail: { id, payload },\n bubbles: true\n });\n}\n","export const AGENT_NEW_CHAT_EVENT_NAME = 'agent-new-chat';\n\nexport type AgentNewChatEvent = {\n instanceId: string;\n};\n\nexport function createAgentNewChatEvent(instanceId: string): CustomEvent<AgentNewChatEvent> {\n return new CustomEvent<AgentNewChatEvent>(AGENT_NEW_CHAT_EVENT_NAME, {\n detail: { instanceId },\n bubbles: true\n });\n}\n","import { Message } from './messages.types';\nimport { BasePayload } from './payloads.types';\n\nexport type SavedChatGetPayload = BasePayload & {\n instanceId: string;\n savedChat: SavedChat;\n};\n\nexport type SavedChatListPayload = BasePayload & {\n instanceId: string;\n savedChats: SavedChat[];\n};\n\nexport type SavedChatExistsPayload = BasePayload & {\n exists: boolean;\n};\n\nexport type SavedChatAddPayload = BasePayload & {\n instanceId: string;\n savedChat: SavedChat;\n};\n\nexport type SavedChatUpdatePayload = BasePayload & {\n instanceId: string;\n savedChat: SavedChat;\n};\n\nexport type SavedChatDeletePayload = BasePayload & {\n deleteCount: number;\n};\n\nexport type SavedChat = {\n id: string;\n title: string;\n modifiedUTC: string;\n // history can be undefined when listing or saving saved chats\n history?: Message[];\n};\n\nexport enum SavedChatEvent {\n 'add',\n 'update',\n 'rename',\n 'delete'\n}\n\nexport const SavedChatActions = {\n add: 'SavedChatAdd',\n delete: 'SavedChatDelete',\n exist: 'SavedChatExist',\n get: 'SavedChatGet',\n list: 'SavedChatList',\n update: 'SavedChatUpdate'\n};\n","import { globalConfig, type Query } from '@sinequa/atomic';\r\nimport type { ContextProperties } from '../types';\r\n\r\n\r\n/**\r\n * Collects additional context properties such as language, date/time, URL context,\r\n * screen context, specs, and application context.\r\n * @returns An object containing the collected context properties.\r\n */\r\nexport function getAdditionalContextProperties(): ContextProperties {\r\n const ctx: ContextProperties = {};\r\n\r\n // Language information\r\n ctx.language = {\r\n browser: navigator.language ?? navigator.languages?.[0],\r\n sinequaUI: document.documentElement.lang\r\n };\r\n\r\n // Date and time information\r\n const now = new Date();\r\n ctx.dateTime = {\r\n localISO: now.toLocaleString(),\r\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n };\r\n\r\n // URL context\r\n ctx.urlContext = {\r\n fullUrl: window.location.href,\r\n pathname: window.location.pathname,\r\n searchParams: window.location.search\r\n };\r\n\r\n // Screen context\r\n ctx.screenContext = {\r\n width: window.screen.width,\r\n height: window.screen.height,\r\n viewportWidth: window.innerWidth,\r\n viewportHeight: window.innerHeight\r\n };\r\n\r\n // Specs (OS and browser detection)\r\n const userAgent = navigator.userAgent;\r\n let os = 'Unknown';\r\n let browser = 'Unknown';\r\n\r\n // Detect OS\r\n if (userAgent.indexOf('Win') !== -1) os = 'Windows';\r\n else if (userAgent.indexOf('Mac') !== -1) os = 'MacOS';\r\n else if (userAgent.indexOf('Linux') !== -1) os = 'Linux';\r\n else if (userAgent.indexOf('Android') !== -1) os = 'Android';\r\n else if (userAgent.indexOf('iOS') !== -1) os = 'iOS';\r\n\r\n // Detect browser\r\n if (userAgent.indexOf('Firefox') !== -1) browser = 'Firefox';\r\n else if (userAgent.indexOf('Edg') !== -1) browser = 'Edge';\r\n else if (userAgent.indexOf('Chrome') !== -1) browser = 'Chrome';\r\n else if (userAgent.indexOf('Safari') !== -1) browser = 'Safari';\r\n else if (userAgent.indexOf('Opera') !== -1 || userAgent.indexOf('OPR') !== -1) browser = 'Opera';\r\n\r\n ctx.specs = {\r\n os,\r\n browser\r\n };\r\n\r\n // Application context\r\n const { app } = globalConfig;\r\n ctx.applicationContext = {\r\n appName: app,\r\n query: {} as Query // Placeholder, populate with actual query data if available\r\n };\r\n\r\n return ctx;\r\n}\r\n","import { AgentDetails, ToolChoice } from \"../types\";\n\nexport function buildToolChoice(data?: AgentDetails): ToolChoice {\n return {\n internalTools: data?.internalTools?.map(t => t.name) ?? [],\n mcpClients:\n data?.mcpClients?.map(c => ({\n name: c.name,\n tools: c.tools?.map(t => t.name) ?? []\n })) ?? []\n };\n}\n","import { patchState, signalStoreFeature, withMethods, withState } from '@ngrx/signals';\n\n// TODO: warn: probably duplicated from library\nexport type Reference = {\n id: string;\n metas: {\n title: string;\n modified: string;\n url: string;\n };\n chunks: {\n offset: number;\n length: number;\n scores: number[];\n text: string;\n chunkTypes: string[];\n }[];\n globalRelevanceScore: number;\n};\n\nexport type ReferenceCachingState = {\n referenceCache: Record<string, Reference>;\n};\n\nfunction mergeReference(cache: Record<string, Reference>, reference: Reference): Record<string, Reference> {\n const existing = cache[reference.id];\n const updated: Reference = existing ? { ...existing, chunks: [...existing.chunks, ...reference.chunks] } : reference;\n return { ...cache, [reference.id]: updated };\n}\n\nexport function withReferenceCachingFeatures() {\n return signalStoreFeature(\n withState({ referenceCache: {} } as ReferenceCachingState),\n withMethods(store => ({\n /**\n *\n * @param references\n */\n setReferences(references: Record<string, Reference>): void {\n patchState(store, state => ({ ...state, referenceCache: references }));\n },\n\n /**\n * Adds a reference to the cache. If a reference with the same id already exists,\n * its chunks are merged instead of creating a duplicate entry.\n *\n * @param reference The reference to add or merge.\n */\n addReference(reference: Reference): void {\n patchState(store, state => ({ ...state, referenceCache: mergeReference(state.referenceCache, reference) }));\n },\n\n /**\n * Adds multiple references to the cache in a single state update.\n * If a reference with the same id already exists, its chunks are merged.\n *\n * @param references A record of references keyed by their id.\n */\n addReferences(references: Record<string, Reference>): void {\n patchState(store, state => ({\n ...state,\n referenceCache: Object.values(references).reduce(mergeReference, state.referenceCache)\n }));\n },\n\n /**\n * Returns the metadata of a reference by its id, or undefined if not found.\n *\n * @param id The id of the reference.\n */\n getReferenceMetas(id: string): Reference['metas'] | undefined {\n return store.referenceCache()[id]?.metas;\n }\n }))\n );\n}\n","import { withDevtools } from '@angular-architects/ngrx-toolkit';\nimport { effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { patchState, signalStore, signalStoreFeature, withMethods, withState } from '@ngrx/signals';\nimport { Observable } from 'rxjs';\nimport * as z from 'zod';\n\nimport { AppStore, SideCJson } from '@sinequa/atomic-angular';\n\nimport { AGENT_JSON_NAME } from '../constants';\nimport { AgentConfigurationService } from '../services';\nimport { AgentConfig, AgentConfigSchema, AgentDetails, ToolChoice } from '../types';\nimport { getAdditionalContextProperties } from '../utils/additional-context-props';\nimport { buildToolChoice } from '../utils/tool-choice';\nimport { withReferenceCachingFeatures } from './reference-cache.feature';\n\nexport type InstanceState = {\n instanceId: string;\n configuration: AgentConfig;\n};\n\nexport type AgentsState = {\n ready: boolean;\n savedChatReady: boolean;\n};\n\nexport type DebugState = {\n debugMessages: boolean;\n};\n\nexport type AgentDetailsState = {\n agentDetails: AgentDetails | undefined;\n agentDetailsLoading: boolean;\n toolChoice: ToolChoice | undefined;\n};\n\nexport const AgentsStore = signalStore(\n { providedIn: 'root', protectedState: false },\n withDevtools('Agents'),\n\n withAgentsFeatures(),\n withDebugFeatures(),\n withReferenceCachingFeatures(),\n withAgentDetailsFeatures()\n);\n\nexport function withAgentsFeatures() {\n return signalStoreFeature(\n withState({ ready: false, savedChatReady: true } as AgentsState),\n withMethods((store, appStore = inject(AppStore)) => ({\n /**\n * Ready flag for agent features, agent needs at least its custom json data.\n *\n * @param ready - Tells whether the app is ready.\n */\n setReady(ready: boolean): void {\n patchState(store, state => {\n return { ...state, ready };\n });\n },\n /**\n * Ready flag for saved chat feature, saved chat needs at least its indexedDB to be ready.\n *\n * @param ready - Tells whether the saved chat feature is ready.\n */\n setSavedChatReady(ready: boolean): void {\n patchState(store, state => {\n return { ...state, savedChatReady: ready };\n });\n },\n /**\n * Fetches the configuration for the agent instance identified by `instanceId`. Parse it\n * with Zod using the {@link AgentConfigSchema} to ensure it is valid.\n *\n * @param instanceId - The id of the agent instance.\n *\n * @returns The configuration for the agent instance or `undefined` if not found.\n *\n * @throws If the configuration is invalid.\n */\n getAgentInstanceConfiguration(instanceId: string): z.infer<typeof AgentConfigSchema> | undefined {\n try {\n AgentConfigSchema.parse(\n (appStore.getNamedCustomizationJson(AGENT_JSON_NAME) as SideCJson)?.data?.[instanceId]\n );\n } catch (e) {\n throw e;\n }\n return (appStore.getNamedCustomizationJson(AGENT_JSON_NAME) as SideCJson)?.data?.[instanceId];\n }\n }))\n );\n}\n\nexport function withDebugFeatures() {\n return signalStoreFeature(\n withState({ debugMessages: false } as DebugState),\n withMethods(store => ({\n /**\n * Enables or disables debug messages for all agent features (e.g. saved chats).\n *\n * @param debug - Whether to enable or disable debug messages.\n */\n setDebugMessages(debug: boolean): void {\n patchState(store, state => {\n return { ...state, debugMessages: debug };\n });\n }\n }))\n );\n}\n\nexport function withAgentDetailsFeatures() {\n return signalStoreFeature(\n withState<AgentDetailsState>({\n agentDetails: undefined,\n agentDetailsLoading: false,\n toolChoice: undefined\n }),\n withMethods((store, agentConfigurationService = inject(AgentConfigurationService)) => {\n // Tracks the current agent name\n const agentName = signal<string>('');\n\n const agentDetailsResource = rxResource<AgentDetails, string>({\n params: () => agentName(),\n stream: ({ params }) => {\n if (!params) return new Observable<AgentDetails>();\n return agentConfigurationService.getAgent(params, getAdditionalContextProperties());\n }\n });\n\n // Sync state with fetched agent details\n effect(() => {\n const data = agentDetailsResource.value();\n\n patchState(store, {\n agentDetailsLoading: agentDetailsResource.isLoading(),\n agentDetails: data,\n toolChoice: buildToolChoice(data)\n });\n });\n\n return {\n /**\n * Loads agent details if not already cached.\n * Prevents operation if data is already present.\n * @param name - The name of the agent to load details for.\n */\n getAgentDetails(name: string): void {\n if (store.agentDetails()) return;\n agentName.set(name);\n },\n\n /**\n * Force re-fetches agent details (after switching agents).\n * Clears cached data before fetching.\n * @param name - The name of the agent to refresh details for.\n */\n updateAgentDetails(name: string): void {\n patchState(store, { agentDetails: undefined });\n agentName.set(name);\n },\n\n /**\n * Re-fetches agent details without clearing the cached data first.\n * Use this when the agent name hasn't changed but the details may have\n * been updated server-side (e.g. after OAuth authorization or revocation).\n */\n reloadAgentDetails(): void {\n agentDetailsResource.reload();\n },\n\n /**\n * Updates the tool choice for the agent.\n * @param toolChoice - The new tool choice to set.\n */\n updateToolChoice(toolChoice: ToolChoice): void {\n patchState(store, { toolChoice });\n }\n };\n })\n );\n}\n","import { signal } from \"@angular/core\";\n\n/**\n * Copies the given text to the clipboard to the navigator clipboard.\n *\n * @param text - The text to copy to clipboard.\n *\n * @returns A promise that resolves when the text has been copied.\n */\nexport function copyToClipboard(text: string): Promise<void> {\n const skimmedContent = text.replaceAll(/\\s+\\[.+?\\]/g, '');\n\n return navigator.clipboard.writeText(skimmedContent);\n}\n\n/**\n * Creates an isolated copy state with a `hasCopied` readonly signal and a `copy()` method.\n * The `hasCopied` signal is automatically reset to `false` after `resetDelay` ms.\n *\n * @param resetDelay - How long (in ms) to keep `hasCopied` as `true`. Defaults to 2000.\n */\nexport function createCopyState(resetDelay = 2000) {\n const _hasCopied = signal(false);\n let _timeout: ReturnType<typeof setTimeout> | undefined;\n\n async function copy(text: string): Promise<void> {\n await copyToClipboard(text);\n if (_timeout) clearTimeout(_timeout);\n _hasCopied.set(true);\n _timeout = setTimeout(() => _hasCopied.set(false), resetDelay);\n }\n\n return { hasCopied: _hasCopied.asReadonly(), copy };\n}\n","export function checkUUID(uuid: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);\n}\n","import { Message } from '../types';\n\n/**\n * Slices the history from the given messageId (inclusive).\n *\n * @param history - The history to slice.\n * @param messageId - The messageId to slice from (inclusive).\n *\n * @returns The sliced history.\n */\nexport function sliceHistoryFromMessageId(history: Message[], messageId: string | undefined): Message[] {\n if (!messageId) return history;\n\n const index = history.findIndex(msg => msg.messageId === messageId);\n\n if (index < 0) return history;\n\n return history.slice(0, index);\n}\n","import { Message, MessageContent, MessageIdentity } from '../types';\n\n/**\n * Transforms the message content into a string format suitable for rendering.\n * Special message contents, like images or videos, are currently ignored.\n * @param messageContent - The list of {@link MessageContent} to transform into a string\n * @returns The transformed message contents as a string\n */\nexport function flattenMessageContent(messageContent: MessageContent[] | undefined): string {\n if (!messageContent || messageContent.length === 0) return '';\n\n // for now, treat all message contents as text only\n return messageContent\n .filter(c => c.$type === 'text')\n .map(c => c.text)\n .join('\\n\\n');\n}\n\n/**\n * Identifies the type of a message based on its role and content.\n * @param message - The message to identify.\n * @returns The identified message type as a string.\n */\nexport function identifyMessage(message?: Message): MessageIdentity | undefined {\n if (!message) return;\n\n const { role, contents } = message;\n const allOfType = (type: string) => contents?.every(c => c.$type === type);\n const hasType = (type: string) => contents?.some(c => c.$type === type);\n\n switch (role) {\n case 'user':\n return allOfType('functionApprovalResponse') ? 'functionApprovalResponse' : 'user';\n case 'assistant':\n if (hasType('functionCall')) return 'functionCall';\n if (hasType('functionApprovalRequest')) return 'functionApprovalRequest';\n return 'assistant';\n case 'tool':\n return 'functionResult';\n default:\n console.warn(`Unknown message role: ${role}`);\n return undefined;\n }\n}\n\n/**\n * Determines if a message could be a streamed message.\n * @param message - The message to check.\n * @returns True if the message is a potential streamed message, false otherwise.\n */\nexport function isAStreamMessage(message: Message | undefined): boolean {\n return message ? identifyMessage(message) === 'assistant' : false;\n}\n","import { effect, signal, Signal } from '@angular/core';\n\nexport function debouncedSignal<T>(sourceSignal: Signal<T>, debounceTimeInMs = 0): Signal<T> {\n const debounceSignal = signal(sourceSignal());\n\n effect(\n onCleanup => {\n const value = sourceSignal();\n const timeout = setTimeout(() => debounceSignal.set(value), debounceTimeInMs);\n\n // The `onCleanup` argument is a function which is called when the effect\n // runs again (and when it is destroyed).\n // By clearing the timeout here we achieve proper debouncing.\n // See https://angular.io/guide/signals#effect-cleanup-functions\n onCleanup(() => clearTimeout(timeout));\n },\n { allowSignalWrites: true }\n );\n\n return debounceSignal;\n}\n","/**\n * Returns the URL without duplicate slashes (be cautious with the \"http(s)://\" part)\n * @param url - The URL to clean\n * @returns The cleaned URL\n */\nexport function cleanURL(url: string): string {\n return url.replace(/[\\/]{2,}/, '/');\n}\n\n/**\n * Concatenates multiple parts of a URL and cleans it (be cautious with the \"http(s)://\" part)\n * @param url - The parts of the URL to concatenate\n * @returns The concatenated and cleaned URL\n */\nexport function concatURL(...url: string[]): string {\n return cleanURL(url.join('/'));\n}\n\nexport function toURLSearchParams(object: object): URLSearchParams {\n return new URLSearchParams(\n Object.entries(object).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@sinequa/ui';\n\nexport const buttonVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center gap-2 rounded-(--radius-button,var(--radius-md)) bg-clip-padding font-medium whitespace-nowrap transition-shadow outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default:\n 'rounded-full border-primary bg-primary text-primary-foreground not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] active:bg-primary-pressed active:text-primary-pressed-foreground hover:bg-primary-hovered hover:text-primary-foreground-hovered [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n primary:\n 'rounded-full border-primary bg-primary text-primary-foreground not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] active:bg-primary-pressed active:font-bold active:text-primary-pressed-foreground hover:bg-primary-hovered hover:text-neutral-foreground-white [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n outline:\n 'rounded-full border border-border bg-background shadow-xs not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-input/32 dark:not-in-data-[slot=group]:bg-clip-border dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/4%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/8%)] [:disabled,:active,[data-pressed]]:shadow-none [:hover,[data-pressed]]:bg-accent/50 dark:[:hover,[data-pressed]]:bg-input/64 focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n secondary:\n 'rounded-full border text-primary-foreground-base border-primary hover:bg-primary-lighter hover:text-primary hover:border-primary active:bg-primary-light active:text-primary-foreground-pressed active:ring-2 active:ring-inset active:border-primary-foreground-pressed active:ring-primary-foreground-pressed active:font-bold disabled:border-primary-disabled disabled:text-primary-disabled-foreground focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n accent:\n 'rounded-full border-accent-alt bg-accent-alt text-accent-foreground active:bg-accent-pressed active:text-accent-foreground-pressed active:font-bold hover:bg-accent-hovered data-pressed:bg-secondary/90 focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n destructive:\n 'rounded-full border-destructive bg-destructive text-white not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] active:bg-destructive-pressed active:text-destructive-foreground hover:bg-destructive-hovered [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n ghost:\n 'rounded-full font-normal border-transparent text-neutral-foreground-black base-alt active:bg-secondary-light hover:bg-secondary-lighter hover:text-secondary-foreground-hovered active:text-secondary-foreground-pressed active:font-bold data-pressed:bg-primary/80 focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n link: 'border-transparent underline-offset-4 hover:underline focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n icon: [\n 'rounded-full bg-transparent text-foreground focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-background '\n ],\n ai: [\n 'from-ai-from via-ai-via to-ai-to text-ai-foreground',\n 'hover:from-ai-from/80 hover:via-ai-via/80 hover:to-ai-to/80',\n 'active:from-ai-from/60 active:via-ai-via/60 active:to-ai-to/60',\n 'disabled:text-ai-foreground disabled:opacity-30'\n ],\n none: ''\n },\n decoration: {\n outline: 'border border-foreground/20 bg-transparent active:bg-transparent disabled:bg-transparent',\n underline:\n 'shadow-none bg-transparent hover:underline hover:bg-transparent active:bg-transparent disabled:bg-transparent',\n none: ''\n },\n size: {\n default: 'min-h-8 px-[calc(--spacing(3)-1px)] py-[calc(--spacing(1.5)-1px)]',\n xs: \"min-h-6 gap-1 rounded-md px-[calc(--spacing(2)-1px)] py-[calc(--spacing(1)-1px)] text-xs before:rounded-[calc(var(--radius-md)-1px)] [&_svg:not([class*='size-'])]:size-3\",\n sm: 'min-h-7 gap-1.5 px-[calc(--spacing(2.5)-1px)] py-[calc(--spacing(1)-1px)]',\n lg: 'min-h-9 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2)-1px)]',\n xl: \"min-h-10 px-[calc(--spacing(4)-1px)] py-[calc(--spacing(2)-1px)] text-base [&_svg:not([class*='size-'])]:size-4.5\",\n icon: 'size-8',\n 'icon-xs': 'size-4',\n 'icon-sm': 'size-5',\n 'icon-lg': 'size-9',\n 'icon-xl': 'size-10'\n }\n },\n compoundVariants: [\n { decoration: 'none', variant: 'ai', class: ['bg-linear-to-r'] },\n {\n decoration: 'outline',\n variant: 'default',\n class: [\n 'border text-primary border-primary dark:hover:bg-primary/50 hover:bg-primary/10 active:bg-primary/20 disabled:border-primary/20 disabled:text-primary/20'\n ]\n },\n {\n decoration: 'outline',\n variant: 'secondary',\n class: [\n 'border text-primary-foreground-base border-primary hover:bg-primary-lighter hover:text-primary-foreground-hovered hover:border-primary-foreground-hovered active:bg-primary-lighter active:text-primary-foreground-pressed active:ring-2 active:ring-inset active:border-primary-foreground-pressed active:ring-primary-foreground-pressed active:font-bold disabled:border-secondary/20 disabled:text-secondary/20'\n ]\n },\n {\n decoration: 'outline',\n variant: 'accent',\n class: [\n 'border text-accent border-accent hover:bg-accent-hovered hover:text-accent-foreground-mute hover:border-accent-foreground-mute active:bg-accent-foreground-light active:text-accent-foreground active:ring-2 active:ring-inset active:ring-accent-foreground active:border-accent-foreground active:font-bold disabled:border-secondary/20 disabled:text-secondary/20'\n ]\n },\n {\n decoration: 'outline',\n variant: 'destructive',\n class: [\n 'text-destructive! border-destructive hover:bg-destructive-lightest dark:hover:bg-destructive/50 dark:hover:text-white! hover:text-destructive! active:bg-destructive-lighter active:ring-2 active:ring-inset active:ring-destructive active:border-destructive active:font-bold disabled:border-destructive/20 disabled:text-destructive/20'\n ]\n },\n {\n decoration: 'outline',\n variant: 'ai',\n class: ['[&>span]:text-ai border-bg-ai-100/0 hover:border-bg-ai-100/10 active:border-bg-ai-100/20']\n },\n { decoration: 'underline', variant: 'default', class: ['text-primary disabled:text-primary-disabled'] },\n { decoration: 'underline', variant: 'secondary', class: ['text-secondary disabled:text-secondary-disabled'] },\n {\n decoration: 'underline',\n variant: 'destructive',\n class: ['text-destructive disabled:text-destructive-disabled']\n },\n {\n decoration: 'underline',\n variant: 'ai',\n class: ['[&>span]:text-ai hover:[&>span]:after:underline-ai no-underline!']\n }\n ],\n defaultVariants: {\n variant: 'default',\n decoration: 'none',\n size: 'default'\n }\n }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n\n@Directive({\n selector: 'button',\n standalone: true,\n host: {\n '[class]': `variants()`\n }\n})\nexport class ButtonComponent {\n class = input<string>();\n variant = input<ButtonVariants['variant']>('default');\n decoration = input<ButtonVariants['decoration']>('none');\n size = input<ButtonVariants['size']>('default');\n variants = computed(() => {\n if (this.variant() === 'none') return this.class();\n return cn(\n buttonVariants({ variant: this.variant(), decoration: this.decoration(), size: this.size(), class: this.class() })\n );\n });\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@sinequa/ui';\n\nexport const hyperlinkVariants = cva(cn('flex items-center gap-2 rounded-xl p-2'), {\n variants: {\n variant: {\n default: '',\n primary: '',\n ghost: 'bg-transparent hover:bg-gray-200 duration-200',\n none: ''\n },\n decoration: {\n underline: '',\n none: ''\n },\n layer: {\n none: '',\n disabled: 'pointer-events-none opacity-50'\n }\n },\n defaultVariants: {\n variant: 'default',\n decoration: 'none',\n layer: 'none'\n }\n});\n\nexport type HyperlinkVariants = VariantProps<typeof hyperlinkVariants>;\n\n@Directive({\n selector: 'a',\n standalone: true,\n host: {\n '[class]': `variants()`\n }\n})\nexport class HyperlinkComponent {\n class = input<string>();\n variant = input<HyperlinkVariants['variant']>('default');\n decoration = input<HyperlinkVariants['decoration']>('none');\n layer = input<HyperlinkVariants['layer']>('none');\n\n variants = computed(() => {\n if (this.variant() === 'none') return this.class();\n\n return cn(\n hyperlinkVariants({\n variant: this.variant(),\n decoration: this.decoration(),\n layer: this.layer(),\n class: this.class()\n })\n );\n });\n}\n","import { afterNextRender, Component, computed, ElementRef, inject, input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { SelectDirective, SelectOptionDirective } from '@sinequa/ui';\r\n\r\nimport { Agent } from '../agent';\r\nimport { MessageList } from '../messages';\r\nimport { AuditService } from '../services';\r\nimport { AgentsStore } from '../stores';\r\nimport { AGENT_INSTANCE_ID } from '../tokens';\r\nimport { Message } from '../types';\r\nimport { flattenMessageContent } from '../utils';\r\nimport { BasePrompt, PromptActionRejected, PromptActionResolved } from './base.prompt';\r\nimport { ButtonComponent } from '../overrides';\r\n\r\nexport type DislikeSubmit = PromptActionResolved & { issueType: string; comment?: string };\r\nexport type DislikeCancel = PromptActionRejected;\r\n\r\n@Component({\r\n selector: 'DislikePrompt,dislikeprompt,dislike-prompt',\r\n imports: [FormsModule, ButtonComponent, SelectDirective, SelectOptionDirective],\r\n template: `\r\n <label for=\"agent-feedback-negative-type\" class=\"text-primary-foreground-dark text-sm font-medium\">Issue type</label>\r\n\r\n <select\r\n for=\"agent-feedback-negative-type\"\r\n class=\"border-primary focus:bg-neutral-foreground-white bg-neutral-foreground-white hover:border-primary-foreground-hovered hover:bg-primary-lighter focus:border-primary-foreground-pressed flex flex-col items-start justify-center gap-2 rounded-lg border px-2 py-1 transition-colors focus:border-2 focus:outline-none\"\r\n [(ngModel)]=\"issueType\">\r\n <option role=\"presentation\" value=\"\" disabled selected>Select an issue type</option>\r\n @for (option of issueTypes(); track $index) {\r\n <option [value]=\"option\">{{ option }}</option>\r\n }\r\n </select>\r\n\r\n <label for=\"agent-feedback-negative-text\" class=\"text-primary-foreground-dark text-sm font-medium\"\r\n >What went wrong with this answer? <span class=\"text-primary-foreground-muted\">(optional)</span></label\r\n >\r\n\r\n <textarea\r\n id=\"agent-feedback-negative-text\"\r\n class=\"border-primary bg-neutral-foreground-white hover:border-primary-foreground-hovered hover:bg-primary-lighter focus:border-primary-foreground-pressed focus:bg-neutral-foreground-white flex resize-none flex-col items-start justify-center gap-2 rounded-lg border px-2 py-1 transition-colors focus:border-2 focus:outline-none\"\r\n rows=\"4\"\r\n placeholder=\"Your feedback here...\"\r\n [(ngModel)]=\"text\"></textarea>\r\n\r\n <ul class=\"flex flex-row-reverse justify-start gap-2\">\r\n <li><button variant=\"primary\" [disabled]=\"!canSubmit()\" (click)=\"submit()\">Submit</button></li>\r\n <li><button variant=\"secondary\" (click)=\"cancel()\">Cancel</button></li>\r\n </ul>\r\n `,\r\n host: {\r\n class:\r\n 'flex flex-col gap-4 p-6 absolute inset-0 z-10 w-[min(90%,28rem)] h-max max-h-1/2 mx-auto my-auto bg-menu-bg rounded-3xl border border-menu-border shadow-lg',\r\n '[class.hidden]': 'hidden()',\r\n '[attr.tabIndex]': '-1'\r\n }\r\n})\r\nexport class DislikePrompt extends BasePrompt<DislikeSubmit, DislikeCancel> {\r\n private readonly instanceId = inject(AGENT_INSTANCE_ID);\r\n private readonly agentsStore = inject(AgentsStore);\r\n private readonly el = inject(ElementRef);\r\n private readonly agent = inject(Agent);\r\n private readonly auditService = inject(AuditService, { optional: true });\r\n\r\n readonly messageList = input<MessageList>();\r\n\r\n readonly issueType = model<string>('');\r\n readonly text = model<string>('');\r\n\r\n protected readonly issueTypes = computed(\r\n () => this.agentsStore.getAgentInstanceConfiguration(this.instanceId)?.auditSettings?.issueTypes || []\r\n );\r\n protected readonly canSubmit = computed(() => this.issueType().trim().length > 0);\r\n\r\n private message: Message | undefined;\r\n\r\n constructor() {\r\n super();\r\n\r\n afterNextRender(() => {\r\n (this.el.nativeElement as HTMLElement).focus();\r\n });\r\n }\r\n\r\n /**\r\n * Prompt the user for feedback on the given message.\r\n *\r\n * @param message - The message to provide feedback on.\r\n *\r\n * @returns A promise that resolves with the user's feedback.\r\n *\r\n * @remarks This override requires a message parameter.\r\n */\r\n override prompt(): Promise<DislikeSubmit | DislikeCancel>;\r\n override prompt(message: Message): Promise<DislikeSubmit | DislikeCancel>;\r\n override prompt(message?: Message) {\r\n if (!message) throw new Error('Require a message parameter');\r\n this.message = message;\r\n\r\n this.issueType.set('');\r\n this.text.set('');\r\n\r\n this.sendClickAudit();\r\n setTimeout(() => this.el.nativeElement.focus());\r\n\r\n return super.prompt();\r\n }\r\n\r\n override submit() {\r\n this.sendSubmitAudit();\r\n this.action.next({\r\n action: 'submit',\r\n issueType: this.issueType(),\r\n comment: this.text()\r\n } as DislikeSubmit);\r\n }\r\n\r\n private sendClickAudit() {\r\n const messageIds = this.messageList()?.getMessageIds() || [];\r\n\r\n this.auditService?.notify(\r\n this.auditService?.createAuditObject('agent.report.negative.click', this.agent.getChatId()!, {\r\n 'message-id': this.message!.messageId,\r\n rank: messageIds.indexOf(this.message!.messageId)\r\n })\r\n );\r\n }\r\n\r\n private sendSubmitAudit() {\r\n const messageIds = this.messageList()?.getMessageIds() || [];\r\n\r\n this.auditService?.notify(\r\n this.auditService?.createAuditObject('agent.report.negative.submit', this.agent.getChatId()!, {\r\n 'message-id': this.message!.messageId,\r\n rank: messageIds.indexOf(this.message!.messageId),\r\n text: flattenMessageContent(this.message!.contents),\r\n comment: this.text(),\r\n 'issue-type': this.issueType()\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, ElementRef, inject, input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n\r\nimport { Agent } from '../agent';\r\nimport { MessageList } from '../messages';\r\nimport { AuditService } from '../services';\r\nimport { Message } from '../types';\r\nimport { flattenMessageContent } from '../utils';\r\nimport { BasePrompt, PromptActionRejected, PromptActionResolved } from './base.prompt';\r\nimport { ButtonComponent } from '../overrides';\r\n\r\nexport type LikeSubmit = PromptActionResolved & { comment?: string };\r\nexport type LikeCancel = PromptActionRejected;\r\n\r\n@Component({\r\n selector: 'LikePrompt,likeprompt,like-prompt',\r\n imports: [FormsModule, ButtonComponent],\r\n template: `\r\n <label for=\"agent-feedback-positive\" class=\"text-primary-foreground-dark text-sm font-medium\">\r\n What did you like about this answer? <span class=\"text-primary-foreground-muted\">(optional)</span>\r\n </label>\r\n\r\n <textarea\r\n id=\"agent-feedback-positive\"\r\n class=\"border-primary bg-neutral-foreground-white hover:border-primary-foreground-hovered hover:bg-primary-lighter focus:border-primary-foreground-pressed focus:bg-neutral-foreground-white flex resize-none flex-col items-start justify-center gap-2 rounded-lg border px-2 py-1 transition-colors focus:border-2 focus:outline-none\"\r\n rows=\"2\"\r\n placeholder=\"Your feedback here...\"\r\n [(ngModel)]=\"text\"></textarea>\r\n\r\n <ul class=\"flex flex-row-reverse justify-start gap-2\">\r\n <li><button variant=\"primary\" (click)=\"submit()\">Submit</button></li>\r\n <li><button variant=\"secondary\" (click)=\"cancel()\">Cancel</button></li>\r\n </ul>\r\n `,\r\n host: {\r\n class:\r\n 'flex flex-col gap-4 p-6 absolute inset-0 z-10 w-[min(90%,28rem)] h-max max-h-1/2 mx-auto my-auto bg-menu-bg rounded-3xl border border-menu-border shadow-lg',\r\n '[class.hidden]': 'hidden()',\r\n '[attr.tabIndex]': '-1'\r\n }\r\n})\r\nexport class LikePrompt extends BasePrompt<LikeSubmit, LikeCancel> {\r\n private readonly el = inject(ElementRef);\r\n private readonly agent = inject(Agent);\r\n private readonly auditService = inject(AuditService, { optional: true });\r\n\r\n readonly messageList = input<MessageList>();\r\n\r\n readonly text = model<string>('');\r\n\r\n private message: Message | undefined;\r\n\r\n /**\r\n * Prompt the user for feedback on the given message.\r\n *\r\n * @param message - The message to provide feedback on.\r\n *\r\n * @returns A promise that resolves with the user's feedback.\r\n *\r\n * @remarks This override requires a message parameter.\r\n */\r\n override prompt(): Promise<LikeSubmit | LikeCancel>;\r\n override prompt(message: Message): Promise<LikeSubmit | LikeCancel>;\r\n override prompt(message?: Message) {\r\n if (!message) throw new Error('Require a message parameter');\r\n this.message = message;\r\n\r\n this.text.set('');\r\n\r\n this.sendClickAudit();\r\n setTimeout(() => this.el.nativeElement.focus());\r\n\r\n return super.prompt();\r\n }\r\n\r\n override submit() {\r\n this.sendSubmitAudit();\r\n this.action.next({ action: 'submit', comment: this.text() } as LikeSubmit);\r\n }\r\n\r\n private sendClickAudit() {\r\n const messageIds = this.messageList()?.getMessageIds() || [];\r\n\r\n this.auditService?.notify(\r\n this.auditService?.createAuditObject('agent.report.positive.click', this.agent.getChatId()!, {\r\n 'message-id': this.message!.messageId,\r\n rank: messageIds.indexOf(this.message!.messageId)\r\n })\r\n );\r\n }\r\n\r\n private sendSubmitAudit() {\r\n const messageIds = this.messageList()?.getMessageIds() || [];\r\n\r\n this.auditService?.notify(\r\n this.auditService?.createAuditObject('agent.report.positive.submit', this.agent.getChatId()!, {\r\n 'message-id': this.message!.messageId,\r\n rank: messageIds.indexOf(this.message!.messageId),\r\n text: flattenMessageContent(this.message!.contents),\r\n comment: this.text()\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chip-icon',\r\n template: ` <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n class=\"shrink-0\">\r\n <path\r\n d=\"M7.5 2.75C7.5 2.33437 7.16563 2 6.75 2C6.33437 2 6 2.33437 6 2.75V4C4.89687 4 4 4.89687 4 6H2.75C2.33437 6 2 6.33437 2 6.75C2 7.16563 2.33437 7.5 2.75 7.5H4V9.25H2.75C2.33437 9.25 2 9.58437 2 10C2 10.4156 2.33437 10.75 2.75 10.75H4V12.5H2.75C2.33437 12.5 2 12.8344 2 13.25C2 13.6656 2.33437 14 2.75 14H4C4 15.1031 4.89687 16 6 16V17.25C6 17.6656 6.33437 18 6.75 18C7.16563 18 7.5 17.6656 7.5 17.25V16H9.25V17.25C9.25 17.6656 9.58437 18 10 18C10.4156 18 10.75 17.6656 10.75 17.25V16H12.5V17.25C12.5 17.6656 12.8344 18 13.25 18C13.6656 18 14 17.6656 14 17.25V16C15.1031 16 16 15.1031 16 14H17.25C17.6656 14 18 13.6656 18 13.25C18 12.8344 17.6656 12.5 17.25 12.5H16V10.75H17.25C17.6656 10.75 18 10.4156 18 10C18 9.58437 17.6656 9.25 17.25 9.25H16V7.5H17.25C17.6656 7.5 18 7.16563 18 6.75C18 6.33437 17.6656 6 17.25 6H16C16 4.89687 15.1031 4 14 4V2.75C14 2.33437 13.6656 2 13.25 2C12.8344 2 12.5 2.33437 12.5 2.75V4H10.75V2.75C10.75 2.33437 10.4156 2 10 2C9.58437 2 9.25 2.33437 9.25 2.75V4H7.5V2.75ZM14.5 6V14C14.5 14.275 14.275 14.5 14 14.5H6C5.725 14.5 5.5 14.275 5.5 14V6C5.5 5.725 5.725 5.5 6 5.5H14C14.275 5.5 14.5 5.725 14.5 6ZM8 7C7.44688 7 7 7.44688 7 8V12C7 12.5531 7.44688 13 8 13H12C12.5531 13 13 12.5531 13 12V8C13 7.44688 12.5531 7 12 7H8ZM8.5 8.5H11.5V11.5H8.5V8.5Z\"\r\n fill=\"currentColor\" />\r\n </svg>`\r\n})\r\nexport class ChipIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'robot-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 41 41\"\r\n fill=\"none\">\r\n <path\r\n d=\"M22.0374 5.6376C22.0374 4.78557 21.3519 4.1001 20.4999 4.1001C19.6479 4.1001 18.9624 4.78557 18.9624 5.6376V8.2001H15.3749C12.5433 8.2001 10.2499 10.4935 10.2499 13.3251V14.8626H8.7124C7.86037 14.8626 7.1749 15.5481 7.1749 16.4001C7.1749 17.2521 7.86037 17.9376 8.7124 17.9376H10.2499V19.4751C10.2499 22.3067 12.5433 24.6001 15.3749 24.6001H25.6249C28.4565 24.6001 30.7499 22.3067 30.7499 19.4751V17.9376H32.2874C33.1394 17.9376 33.8249 17.2521 33.8249 16.4001C33.8249 15.5481 33.1394 14.8626 32.2874 14.8626H30.7499V13.3251C30.7499 10.4935 28.4565 8.2001 25.6249 8.2001H22.0374V5.6376ZM27.6749 13.3251V19.4751C27.6749 20.609 26.7588 21.5251 25.6249 21.5251H15.3749C14.241 21.5251 13.3249 20.609 13.3249 19.4751V13.3251C13.3249 12.1912 14.241 11.2751 15.3749 11.2751H25.6249C26.7588 11.2751 27.6749 12.1912 27.6749 13.3251ZM9.2249 32.8001C9.2249 31.1024 10.6022 29.7251 12.2999 29.7251H28.6999C30.3976 29.7251 31.7749 31.1024 31.7749 32.8001V35.3626C31.7749 36.2146 32.4604 36.9001 33.3124 36.9001C34.1644 36.9001 34.8499 36.2146 34.8499 35.3626V32.8001C34.8499 29.4048 32.0952 26.6501 28.6999 26.6501H12.2999C8.90459 26.6501 6.1499 29.4048 6.1499 32.8001V35.3626C6.1499 36.2146 6.83537 36.9001 7.6874 36.9001C8.53943 36.9001 9.2249 36.2146 9.2249 35.3626V32.8001ZM16.9124 34.3376C16.9124 33.4856 16.2269 32.8001 15.3749 32.8001C14.5229 32.8001 13.8374 33.4856 13.8374 34.3376V35.3626C13.8374 36.2146 14.5229 36.9001 15.3749 36.9001C16.2269 36.9001 16.9124 36.2146 16.9124 35.3626V34.3376ZM20.4999 32.8001C19.6479 32.8001 18.9624 33.4856 18.9624 34.3376V35.3626C18.9624 36.2146 19.6479 36.9001 20.4999 36.9001C21.3519 36.9001 22.0374 36.2146 22.0374 35.3626V34.3376C22.0374 33.4856 21.3519 32.8001 20.4999 32.8001ZM27.1624 34.3376C27.1624 33.4856 26.4769 32.8001 25.6249 32.8001C24.7729 32.8001 24.0874 33.4856 24.0874 34.3376V35.3626C24.0874 36.2146 24.7729 36.9001 25.6249 36.9001C26.4769 36.9001 27.1624 36.2146 27.1624 35.3626V34.3376ZM19.4749 15.3751C19.4749 14.2412 18.5588 13.3251 17.4249 13.3251C16.291 13.3251 15.3749 14.2412 15.3749 15.3751C15.3749 16.509 16.291 17.4251 17.4249 17.4251C18.5588 17.4251 19.4749 16.509 19.4749 15.3751ZM23.5749 17.4251C24.7088 17.4251 25.6249 16.509 25.6249 15.3751C25.6249 14.2412 24.7088 13.3251 23.5749 13.3251C22.441 13.3251 21.5249 14.2412 21.5249 15.3751C21.5249 16.509 22.441 17.4251 23.5749 17.4251Z\"\r\n fill=\"currentColor\" />\r\n </svg>\r\n `\r\n})\r\nexport class RobotIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'check-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"auto\"\r\n height=\"auto\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-check-icon lucide-check\">\r\n <path d=\"M20 6 9 17l-5-5\" />\r\n </svg>\r\n `\r\n})\r\nexport class CheckIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'copy-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-copy-icon lucide-copy\">\r\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\r\n </svg>\r\n `\r\n})\r\nexport class CopyIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input, output } from '@angular/core';\n\nimport { TooltipDirective } from '@sinequa/ui';\n\nimport { ButtonComponent } from '../overrides';\nimport { CheckIcon } from '../overrides/icons/check.icon';\nimport { CopyIcon } from '../overrides/icons/copy.icon';\nimport { createCopyState } from '../utils';\n\n@Component({\n selector: 'copyable-field',\n imports: [ButtonComponent, CheckIcon, CopyIcon, TooltipDirective],\n template: `\n <dl class=\"flex flex-col gap-1.5\">\n <dt class=\"heading-4\">{{ label() }}</dt>\n <dd class=\"group bg-primary-lightest relative flex items-center rounded-xl px-4 py-3\">\n <span class=\"text-primary-foreground-dark mr-8 truncate text-sm\">{{ value() || '—' }}</span>\n <button\n tooltip=\"Copy\"\n tooltip-position=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n class=\"absolute right-2 opacity-0 transition-all group-hover:opacity-100\"\n [class]=\"copied() ? 'opacity-100' : ''\"\n [title]=\"'Copy ' + label()\"\n (click)=\"copy()\">\n @if (copied()) {\n <check-icon />\n } @else {\n <copy-icon />\n }\n </button>\n </dd>\n </dl>\n `\n})\nexport class CopyableFieldComponent {\n readonly label = input.required<string>();\n readonly value = input.required<string>();\n readonly copyResult = output<{ field: string; status: 'success' | 'failure' }>();\n\n private readonly copyState = createCopyState();\n protected readonly copied = this.copyState.hasCopied;\n\n async copy(): Promise<void> {\n const val = this.value();\n if (!val) return;\n\n try {\n await this.copyState.copy(val);\n } catch {\n this.copyResult.emit({ field: this.label(), status: 'failure' });\n }\n }\n}\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'search-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n class=\"shrink-0\">\r\n <path\r\n d=\"M13.5 8.5C13.5 5.7375 11.2625 3.5 8.5 3.5C5.7375 3.5 3.5 5.7375 3.5 8.5C3.5 11.2625 5.7375 13.5 8.5 13.5C11.2625 13.5 13.5 11.2625 13.5 8.5ZM12.5344 13.5969C11.4281 14.475 10.025 15 8.5 15C4.90937 15 2 12.0906 2 8.5C2 4.90938 4.90937 2 8.5 2C12.0906 2 15 4.90938 15 8.5C15 10.025 14.475 11.4281 13.5969 12.5344L17.7812 16.7188C18.075 17.0125 18.075 17.4875 17.7812 17.7781C17.4875 18.0688 17.0125 18.0719 16.7219 17.7781L12.5344 13.5969Z\"\r\n fill=\"currentColor\" />\r\n </svg>\r\n `\r\n})\r\nexport class SearchIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, computed, input, model } from '@angular/core';\r\n\r\nimport { SwitchComponent, TooltipDirective } from '@sinequa/ui';\r\n\r\nimport { SearchIcon } from '../overrides/icons/search.icon';\r\nimport { AgentDetails } from '../types';\r\n\r\n@Component({\r\n selector: 'AvailableInternalTools,available-internal-tools,availableinternaltools',\r\n imports: [SearchIcon, TooltipDirective, SwitchComponent],\r\n template: `\r\n @if (internalTools().length) {\r\n <section class=\"flex flex-col gap-2\">\r\n @if (showHeading()) {\r\n <h4 class=\"heading-4\">Tools</h4>\r\n }\r\n\r\n <ul class=\"flex flex-col gap-2\">\r\n @for (tool of internalTools(); track tool.name) {\r\n <li class=\"flex items-center gap-2.5\">\r\n <search-icon class=\"text-primary-foreground-base\" aria-hidden=\"true\" />\r\n @if (selectable()) {\r\n <p class=\"text-primary-foreground-dark line-clamp-1 flex-1 text-sm font-medium break-all\">\r\n {{ tool.name }}\r\n </p>\r\n <Switch\r\n class=\"ml-auto\" size=\"xs\"\r\n [toggled]=\"isToolSelected(tool.name)\"\r\n [variant]=\"isToolSelected(tool.name) ? 'primary' : 'secondary'\"\r\n (toggledChange)=\"toggleTool(tool.name)\" />\r\n } @else {\r\n <p class=\"flex flex-col\">\r\n <span class=\"text-primary-foreground-dark text-sm font-medium\">{{ tool.name }}</span>\r\n @if (tool.description) {\r\n <span\r\n tooltip-duration=\"10000\"\r\n [tooltip]=\"tool.description\"\r\n tooltip-position=\"bottom\"\r\n class=\"text-primary-foreground-muted line-clamp-1 text-xs\"\r\n >{{ tool.description }}\r\n </span>\r\n }\r\n </p>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n `\r\n})\r\nexport class AvailableInternalToolsComponent {\r\n readonly agentDetails = input.required<AgentDetails>();\r\n readonly selectable = input(false);\r\n readonly showHeading = input(true);\r\n\r\n readonly selectedTools = model<string[]>([]);\r\n\r\n protected readonly internalTools = computed(() => this.agentDetails().internalTools ?? []);\r\n private readonly selectedSet = computed(() => new Set(this.selectedTools()));\r\n\r\n protected toggleTool(name: string): void {\r\n this.selectedTools.update(current =>\r\n this.selectedSet().has(name) ? current.filter(t => t !== name) : [...current, name]\r\n );\r\n }\r\n\r\n protected isToolSelected(name: string): boolean {\r\n return this.selectedSet().has(name);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { debug as atomicDebug, error as atomicError, info as atomicInfo, warn as atomicWarn } from '@sinequa/atomic';\nimport { AGENT_INSTANCE_ID } from '../tokens';\n\nconst fancy = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n crimson: '\\x1b[38m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m',\n crimson: '\\x1b[48m'\n }\n};\n\n\n@Injectable()\nexport class LoggerService {\n private readonly instanceId = inject(AGENT_INSTANCE_ID);\n \n // color isn't working with ANSI escaped code in firefox console\n // see https://www.geeksforgeeks.org/javascript/how-to-add-colors-to-javascript-console-outputs/#approach-1-using-c\n // getFormattedInstanceId = () => `${fancy.fg.blue}${this.instanceId}${fancy.reset}`;\n getFormattedInstanceId = () => `${this.instanceId}`;\n\n debug(message: string, data?: any): void {\n atomicDebug(`[${this.getFormattedInstanceId()}]${message}`, data);\n }\n\n info(message: string, data?: any): void {\n atomicInfo(`[${this.getFormattedInstanceId()}]${message}`, data);\n }\n\n warn(message: string, data?: any): void {\n atomicWarn(`[${this.getFormattedInstanceId()}]${message}`, data);\n }\n\n error(message: string, error?: any): void {\n atomicError(`[${this.getFormattedInstanceId()}]${message}`, error);\n }\n\n errorAndThrow(message: string, error?: any): never {\n this.error(message, error);\n throw new Error(message);\n }\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder, HubConnectionState, LogLevel } from '@microsoft/signalr';\nimport { map, Subject } from 'rxjs';\n\nimport { globalConfig, info } from '@sinequa/atomic';\n\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { AGENT_ENDPOINTS_VERSION } from '../constants';\nimport { SIGNALR_RETRY_DELAYS, SIGNALR_RETRY_DELAYS_DEFAULT } from '../tokens';\nimport { ConnectionOptions, SignalREvent, SignalREventConnected, SignalREventDisconnected, SignalREventReconnecting } from '../types/signalr.types';\nimport { concatURL } from '../utils/urls';\n\n/**\n * A service to connect the Sinequa server to the client via SignalR\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SignalRWebService {\n private readonly retryPolicy = inject(SIGNALR_RETRY_DELAYS, { optional: true }) ?? SIGNALR_RETRY_DELAYS_DEFAULT;\n private readonly destroyRef = inject(DestroyRef);\n\n readonly signalREvents$ = new Subject<SignalREvent>();\n\n readonly isConnected$ = this.signalREvents$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(event => event.state === HubConnectionState.Connected)\n );\n readonly isConnected = toSignal(this.isConnected$);\n\n private connectionRetryCount = 0;\n\n constructor() {\n this.destroyRef.onDestroy(() => this.signalREvents$.complete());\n }\n\n /**\n * Builds a SignalR {@link HubConnection} object and returns it.\n *\n * @param endpointName - Name of the endpoint to connect to.\n * @param options - Options for the connection. It must overrides the default options.\n * @param logLevel - The log level for the connection.\n * @param automaticReconnect - Whether the connection should automatically attempt to reconnect.\n *\n * @fires `SignalREventReconnecting` - Event attached to the connection that emits when the connection is reconnecting.\n * @fires `SignalREventConnected` - Event attached to the connection that emits when the connection is connected.\n * @fires `SignalREventDisconnected` - Event attached to the connection that emits when the connection is disconnected / closed.\n *\n * @returns A SignalR HubConnection object.\n */\n buildHubConnection(\n endpointName: string,\n options: ConnectionOptions,\n logLevel = LogLevel.Information,\n automaticReconnect = false\n ): HubConnection {\n const { backendUrl } = globalConfig;\n const url = new URL(concatURL(AGENT_ENDPOINTS_VERSION, `${endpointName}`), backendUrl).href;\n const connectionBuilder = new HubConnectionBuilder().withUrl(url, options).configureLogging(logLevel);\n\n if (automaticReconnect)\n connectionBuilder.withAutomaticReconnect({\n nextRetryDelayInMilliseconds: () => this.getNextRetryDelay()\n });\n\n const connection = connectionBuilder.build();\n\n connection.onclose(() =>\n this.signalREvents$.next({ state: HubConnectionState.Disconnected } as SignalREventDisconnected)\n );\n connection.onreconnected(() =>\n this.signalREvents$.next({ state: HubConnectionState.Connected } as SignalREventConnected)\n );\n\n // reconnecting event is handled in getNextRetryDelay() through signalREvents$ subject\n // this way we have more details, like the retry count or current delay\n // this.connection.onreconnecting(() => {});\n\n return connection;\n }\n\n getNextRetryDelay(): number | null {\n if (this.connectionRetryCount >= this.retryPolicy.length) return null;\n\n const delay = this.retryPolicy[this.connectionRetryCount];\n\n this.signalREvents$.next({\n state: HubConnectionState.Reconnecting,\n retryCount: this.connectionRetryCount + 1,\n retryDelay: delay\n } as SignalREventReconnecting);\n\n this.connectionRetryCount++;\n\n return delay;\n }\n\n /**\n * Starts a SignalR connection.\n *\n * @param connection - A SignalR connection.\n *\n * @fires `SignalREventConnected` - Event attached to the connection that emits when the connection is connected.\n *\n * @throws An error if the connection is undefined.\n * @throws An error if the connection could not be started.\n */\n async startConnection(connection: HubConnection | undefined): Promise<void> {\n if (!connection) throw new Error('Please provide a valid connection to start');\n\n try {\n await connection.start();\n\n this.connectionRetryCount = 0; // reset the retry count on successful connection\n this.signalREvents$.next({ state: HubConnectionState.Connected } as SignalREventConnected);\n\n info(\n `[SignalR] The SignalR connection has been successfully established, url: ${connection.baseUrl}, connectionId: ${connection.connectionId}`\n );\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Stops a SignalR connection.\n *\n * @param connection - A SignalR connection.\n *\n * @fires `SignalREventConnected` - Event attached to the connection that emits when the connection is connected.\n *\n * @throws An error if the connection is undefined.\n * @throws An error if the connection could not be stopped.\n */\n async stopConnection(connection: HubConnection | undefined): Promise<void> {\n if (!connection) throw new Error('Please provide a valid connection to stop');\n\n try {\n await connection.stop();\n\n this.signalREvents$.next({ state: HubConnectionState.Disconnected } as SignalREventDisconnected);\n\n info(\n `[SignalR] The SignalR connection has been successfully stopped, url: ${connection.baseUrl}, connectionId: ${connection.connectionId}`\n );\n } catch (error) {\n throw error;\n }\n }\n}\n\n","import { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { HttpTransportType, HubConnection, LogLevel, MessageHeaders } from '@microsoft/signalr';\n\nimport { getToken } from '@sinequa/atomic';\n\nimport { AgentConfig } from '../types/agent.types';\nimport { ConnectionOptions } from '../types/signalr.types';\nimport { SignalRWebService } from './signalr.web.service';\n\nexport interface SignalRConnectionOperationConfig {\n webSocketEndpoint: string;\n agentConfig: AgentConfig;\n}\n\nexport abstract class ASignalRService {\n private readonly signalRWebService = inject(SignalRWebService);\n private readonly localeId = inject(LOCALE_ID, { optional: true });\n\n protected config: SignalRConnectionOperationConfig | undefined;\n protected connection: HubConnection | undefined;\n\n public hasConnection = (): boolean => !!this.connection;\n public hasOpenedConnection = (): boolean => this.connection?.state === 'Connected';\n\n public buildConnectionWithConfig(\n config: SignalRConnectionOperationConfig,\n options?: ConnectionOptions\n ): Promise<void> {\n if (this.connection) throw new Error('[SignalR] Connection already exists');\n\n this.checkConfig(config);\n\n this.config = config;\n\n const logLevel = this.getLogLevel();\n const defaultOpts = this.getDefaultOptions();\n\n if (config.agentConfig?.connectionSettings.signalRSkipNegotiation === true)\n options = { ...options, skipNegotiation: true };\n\n this.connection = this.signalRWebService.buildHubConnection(\n config.webSocketEndpoint,\n { ...defaultOpts, ...options },\n logLevel,\n true\n );\n\n const timeout = config.agentConfig?.connectionSettings.signalRServerTimeoutInMilliseconds;\n\n if (timeout && this.connection) this.connection.serverTimeoutInMilliseconds = timeout;\n\n return Promise.resolve();\n }\n\n public startConnection(): Promise<void> {\n if (!this.connection) throw new Error('[SignalR] No connection to start');\n\n return this.signalRWebService.startConnection(this.connection);\n }\n\n public stopConnection(): Promise<void> {\n if (!this.connection) throw new Error('[SignalR] No connection to stop');\n\n return this.signalRWebService.stopConnection(this.connection);\n }\n\n public clearConnection(): void {\n this.connection = undefined;\n }\n\n protected checkConfig(config: SignalRConnectionOperationConfig): void {\n if (!config) throw new Error('[SignalR] ConnectionConfig cannot be empty');\n if (!config.webSocketEndpoint) throw new Error('[SignalR] WebSocketEndpoint cannot be empty');\n }\n\n private getDefaultOptions(): ConnectionOptions {\n let headers: MessageHeaders = {\n 'sinequa-force-camel-case': 'true',\n 'x-language': this.localeId || '',\n 'ui-language': this.localeId || ''\n };\n const token = getToken();\n\n if (token) headers = { ...headers, 'sinequa-csrf-token': token };\n\n return {\n transport: this.getTransports(),\n withCredentials: true,\n headers,\n skipNegotiation: false,\n accessTokenFactory: () => token || ''\n };\n }\n\n private getLogLevel(): LogLevel {\n const assistantConfig = this.config?.agentConfig;\n\n switch (assistantConfig?.connectionSettings.signalRLogLevel) {\n case 'Trace':\n return LogLevel.Trace;\n case 'Debug':\n return LogLevel.Debug;\n case 'Information':\n return LogLevel.Information;\n case 'Warning':\n return LogLevel.Warning;\n case 'Error':\n return LogLevel.Error;\n case 'Critical':\n return LogLevel.Critical;\n case 'None':\n return LogLevel.None;\n default:\n return LogLevel.Information;\n }\n }\n\n private getTransports(): HttpTransportType {\n const assistantConfig = this.config?.agentConfig;\n\n switch (assistantConfig?.connectionSettings.signalRTransport) {\n case 'WebSockets':\n return HttpTransportType.WebSockets;\n case 'ServerSentEvents':\n return HttpTransportType.ServerSentEvents;\n case 'LongPolling':\n return HttpTransportType.LongPolling;\n case 'None':\n default:\n return HttpTransportType.None;\n }\n }\n}\n\n@Injectable()\nexport class SignalRService extends ASignalRService {}\n\n","// export * from './signalr.frames';\nexport * from './signalr.service';\nexport * from './signalr.web.service';\n\n","import { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { filter, firstValueFrom, Subject, timeout } from 'rxjs';\n\nimport { debug } from '@sinequa/atomic';\nimport { AppStore, SideCJson } from '@sinequa/atomic-angular';\n\nimport { MessageBuilder } from '../builders';\nimport { AGENT_JSON_NAME, AGENT_WEBSOCKET_ENDPOINT } from '../constants';\nimport { LoggerService } from '../logger';\nimport { ASignalRService } from '../signalr';\nimport { AgentsStore } from '../stores';\nimport { AGENT_DEFAULT_NAME, AGENT_INSTANCE_ID } from '../tokens';\nimport { getAdditionalContextProperties } from '../utils/additional-context-props';\nimport { DebugDisplayFrame, FrameEvent, HistoryFrame, Message, MessageFrame, OAuthRequiredFrame } from '../types';\n\n@Injectable()\nexport class AgentService extends ASignalRService {\n private readonly instanceId = inject(AGENT_INSTANCE_ID);\n private readonly agentName = inject(AGENT_DEFAULT_NAME);\n private readonly appStore = inject(AppStore);\n private readonly destroyRef = inject(DestroyRef);\n private readonly agentsStore = inject(AgentsStore);\n private readonly logger = inject(LoggerService);\n\n public readonly afterFrame$ = new Subject<FrameEvent>();\n\n public readonly isAgentGenerating = computed(() => this._isAgentGenerating());\n\n // TODO: feels like this is not necessary anymore\n private messageBuilder: MessageBuilder = new MessageBuilder();\n\n private _chatId: string | undefined;\n private _generatedTitle: string | undefined;\n public get generatedTitle(): string | undefined { return this._generatedTitle; }\n public get chatId(): string {\n if (!this._chatId) return this.logger.errorAndThrow('[FATAL ERROR] ChatId is not defined at a time it should be');\n return this._chatId;\n }\n public set chatId(value: string) {\n this._chatId = value;\n }\n\n private _isAgentGenerating = signal<boolean>(false);\n public setIsAgentGenerating(value: boolean) {\n this._isAgentGenerating.set(value);\n }\n\n constructor() {\n super();\n\n this.destroyRef.onDestroy(() => {\n this.afterFrame$.complete();\n if (this.hasOpenedConnection()) this.stopConnection().catch(() => {});\n });\n }\n\n async buildAgentConnection(): Promise<void> {\n if (this.connection) return Promise.reject();\n\n await this.buildConnectionWithConfig({\n webSocketEndpoint: AGENT_WEBSOCKET_ENDPOINT,\n agentConfig: (this.appStore.getNamedCustomizationJson(AGENT_JSON_NAME) as SideCJson)?.data?.[this.instanceId]\n });\n\n this.addAgentFrames();\n\n return Promise.resolve();\n }\n\n /**\n * Starts a new Agent invocation with the provided history.\n *\n * @param history - The history to send to the agent.\n *\n * @returns A promise that resolves when the history has been sent.\n */\n async sendHistoryToAgent(history: Message[]) {\n if (history.length === 0) return Promise.reject('No history to send');\n\n this._generatedTitle = undefined;\n const isFirstMessage = history.filter(m => m.role === 'user' && m.additionalProperties?.isUserInput).length === 1;\n\n const payload = {\n chatId: this.chatId,\n callerId: this.instanceId,\n history,\n debug: this.agentsStore.debugMessages(),\n name: this.agentName,\n toolChoice: this.agentsStore.toolChoice(),\n contextProperties: getAdditionalContextProperties(),\n ...(isFirstMessage && { generateTitle: true })\n };\n\n return await this.connection!.invoke('Agent', payload);\n }\n\n async stopGeneration() {\n if (!this._isAgentGenerating()) return Promise.reject('Agent is not generating');\n //TODO : to be reworked. Better to rely on the invocation response than the history frame\n // Set up the listener BEFORE invoking so we don't miss the AgentHistory frame\n // sent by the server's finally block (after the cancellation is processed).\n // This keeps the machine in StoppingGeneration until the partial history arrives.\n const historyArrived = firstValueFrom(this.afterFrame$.pipe(filter(x => x.name === 'history'), timeout(30_000)));\n try {\n await this.connection!.invoke('CancelTasks');\n } catch (e) {\n this.logger.error('Failed to invoke CancelTasks', e);\n throw e;\n }\n await historyArrived;\n }\n\n /**\n * Starts the OAuth2 authorization flow for the given MCP client.\n *\n * The backend sends an `OAuthAuthorizationRequired` frame (received via `afterFrame$` as\n * `'oauthRequired'`) containing the full authorization URL, then waits for the platform\n * OAuth callback to complete the token exchange. This method resolves once the full flow\n * finishes — `true` on success, `false` on failure.\n *\n * @param mcpServerName - The name of the MCP server to authorize.\n *\n * @returns A promise that resolves with `true` on success or `false` on failure.\n */\n async authorizeRemoteMcp(mcpServerName: string): Promise<boolean> {\n const success = await this.connection!.invoke('AuthorizeRemoteMcp', { mcpServerName });\n if (success) this.agentsStore.reloadAgentDetails();\n return success;\n }\n\n /**\n * Revokes the OAuth2 authorization for the given MCP server.\n * The backend clears the cached token; the `McpAuthorizationRevoked` frame triggers a\n * details refresh so the UI reflects the updated authorization status.\n *\n * @param mcpServerName - The name of the MCP server whose token should be revoked.\n *\n * @returns A promise that resolves with `true` on success or `false` on failure.\n */\n async revokeRemoteMcp(mcpServerName: string): Promise<boolean> {\n return await this.connection!.invoke('RevokeRemoteMcp', { mcpServerName });\n }\n\n private addAgentFrames() {\n // message sent by the agent to render\n this.connection!.on('Message', (message: MessageFrame) => {\n this.afterFrame$.next({ name: 'message', payload: message });\n });\n\n // chat history to build context\n this.connection!.on('AgentHistory', (history: HistoryFrame) => {\n this.messageBuilder.setMessageContextFromHistoryFrame(history);\n if (history.title) this._generatedTitle = history.title;\n this.afterFrame$.next({ name: 'history', payload: history });\n });\n\n // debug messages about current message\n this.connection!.on('DebugDisplay', (message: DebugDisplayFrame) => {\n this.messageBuilder.appendDebugMessageFrame(message);\n this.afterFrame$.next({ name: 'debugDisplay', payload: message });\n });\n\n // end of interaction, this will be deleted\n this.connection!.on('MessageBreak', () => debug('Received MessageBreak'));\n\n // stop generation\n this.connection!.on('CancelTasks', () => debug('Received CancelTasks'));\n\n // function call\n this.connection!.on('ToolCall', (functionCall: any) => {\n this.afterFrame$.next({ name: 'functionCall', payload: functionCall });\n });\n\n // function result\n this.connection!.on('ToolResponse', (functionResult: any) => {\n this.afterFrame$.next({ name: 'functionResult', payload: functionResult });\n });\n\n // OAuth authorization required — backend sends the authorization URL for the user to visit\n this.connection!.on('OAuthAuthorizationRequired', (frame: OAuthRequiredFrame) => {\n this.afterFrame$.next({ name: 'oauthRequired', payload: frame });\n });\n\n // MCP OAuth2 result — refresh agent details so the authorization status updates in the UI\n this.connection!.on('McpOAuthResult', () => {\n this.agentsStore.reloadAgentDetails();\n });\n\n // MCP authorization revoked — refresh agent details so the UI reflects the new NotGranted status\n this.connection!.on('McpAuthorizationRevoked', () => {\n this.agentsStore.reloadAgentDetails();\n });\n }\n}\n","import { Pipe } from '@angular/core';\n\nimport { DebugDisplayItemKV } from '../types';\n\n@Pipe({\n name: 'castToDebugKV'\n})\nexport class CastToDebugKVPipe {\n transform(item: any) {\n return item as DebugDisplayItemKV;\n }\n}\n","import { Pipe } from '@angular/core';\n\nimport { DebugDisplayItemList } from '../types';\n\n@Pipe({\n name: 'castToDebugList'\n})\nexport class CastToDebugListPipe {\n transform(item: any) {\n return item as DebugDisplayItemList;\n }\n}\n","import { Pipe } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n standalone: true\n})\nexport class SafeHtmlPipe {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(html: any) {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n}\n","import { afterNextRender, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, input, output, signal, viewChild } from '@angular/core';\nimport { filter, firstValueFrom, map, timeout } from 'rxjs';\n\nimport { XMarkICon } from '@sinequa/ui';\n\nimport { AgentService } from '../agent/agent.service';\nimport { ButtonComponent } from '../overrides';\nimport { SafeHtmlPipe } from '../pipes';\nimport { McpClient, OAuthRequiredFrame } from '../types';\n\ntype DialogState = 'info' | 'waiting';\n\n/**\n * Modal dialog for connecting an MCP client via OAuth2.\n *\n * Displays MCP client information and manages the two-phase OAuth flow:\n * 1. Info state — shows the client name/description and a Connect button.\n * 2. Waiting state — shows a spinner/message while the user authenticates in the external tab.\n *\n * Opens itself automatically when mounted. Emits `connected` on successful auth\n * and `cancelled` when the user dismisses or cancels.\n */\n@Component({\n selector: 'mcp-connect-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, SafeHtmlPipe, XMarkICon],\n template: `\n <dialog\n #dialog\n closedby=\"any\"\n class=\"border-menu-border bg-menu-bg m-auto hidden w-[min(90%,28rem)] flex-col gap-4 rounded-3xl border p-6 outline-none backdrop:bg-black/50 backdrop:backdrop-blur-sm open:flex\"\n (close)=\"onDialogClose()\">\n <header class=\"flex shrink-0 items-center justify-between\">\n <div class=\"flex items-center gap-3\">\n @if (client().displaySVGIcon) {\n <figure class=\"bg-surface-raised flex size-10 shrink-0 items-center justify-center rounded-xl\">\n <span [innerHTML]=\"client().displaySVGIcon | safeHtml\" class=\"size-6\" aria-hidden=\"true\"></span>\n </figure>\n }\n <div>\n <h2 class=\"text-primary-foreground-dark text-base font-semibold\">{{ client().name }}</h2>\n @if (client().description) {\n <p class=\"text-primary-foreground-muted text-sm\">{{ client().description }}</p>\n }\n </div>\n </div>\n\n <button\n tooltip=\"Close\"\n tooltip-position=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n type=\"button\"\n (click)=\"cancelAndClose()\">\n <XMarkIcon class=\"size-4\" />\n </button>\n </header>\n\n @if (state() === 'info') {\n <p class=\"text-primary-foreground-muted text-sm\">\n Connecting will open a sign-in page in a new tab. Once you have authenticated, the tools provided by\n <span class=\"text-primary-foreground-dark font-medium\">{{ client().name }}</span> will be available to the\n agent.\n </p>\n\n <footer class=\"flex justify-end gap-2\">\n <button variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"cancelAndClose()\">Cancel</button>\n <button variant=\"accent\" size=\"sm\" type=\"button\" (click)=\"connect()\">Connect</button>\n </footer>\n } @else {\n <div class=\"flex flex-col items-center gap-4 py-4 text-center\">\n <p class=\"text-primary-foreground-dark text-sm font-medium\">Waiting for authentication…</p>\n <p class=\"text-primary-foreground-muted text-xs\">\n Complete the sign-in in the newly opened tab. This dialog will close automatically once authentication\n succeeds.\n </p>\n </div>\n\n <footer class=\"flex justify-end\">\n <button variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"cancelAndClose()\">Cancel</button>\n </footer>\n }\n </dialog>\n `\n})\nexport class McpConnectDialogComponent {\n private readonly agentService = inject(AgentService);\n private readonly destroyRef = inject(DestroyRef);\n\n /** The MCP client to authorize. */\n readonly client = input.required<McpClient>();\n\n /** Emitted after a successful OAuth authorization. */\n readonly connected = output<void>();\n /** Emitted when the user cancels or closes the dialog without completing auth. */\n readonly cancelled = output<void>();\n\n private readonly dialogRef = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\n\n protected readonly state = signal<DialogState>('info');\n\n private closedByOutcome = false;\n\n constructor() {\n afterNextRender(() => {\n const dialog = this.dialogRef().nativeElement;\n // Move the dialog to document.body so it survives the menu teardown that\n // occurs when the user clicks inside the Tools & Extensions dropdown.\n document.body.appendChild(dialog);\n dialog.showModal();\n\n this.destroyRef.onDestroy(() => {\n dialog.close();\n dialog.parentNode?.removeChild(dialog);\n });\n });\n }\n\n protected async connect(): Promise<void> {\n this.state.set('waiting');\n\n // Open a blank popup synchronously — before any await — so the browser recognises it\n // as a direct result of the user gesture and does not block it.\n const popup = window.open('', '_blank') ?? undefined;\n\n // Subscribe to the OAuthAuthorizationRequired frame BEFORE invoking to avoid missing it.\n const mcpServerName = this.client().name;\n const oauthUrl$ = this.agentService.afterFrame$.pipe(\n filter(f => f.name === 'oauthRequired' && (f.payload as OAuthRequiredFrame).mcpServerName === mcpServerName),\n map(f => (f.payload as OAuthRequiredFrame).authorizationUrl),\n timeout(30_000)\n );\n\n // Start the backend flow — resolves only once the full OAuth exchange is complete.\n const authorizePromise = this.agentService.authorizeRemoteMcp(mcpServerName);\n\n try {\n // Wait for the backend to send the authorization URL via the OAuthAuthorizationRequired frame.\n const authorizationUrl = await firstValueFrom(oauthUrl$);\n\n // Navigate the pre-opened popup to the OAuth provider.\n if (popup) popup.location.href = authorizationUrl;\n else window.open(authorizationUrl, '_blank');\n\n // Await completion: resolves when the backend finishes the token exchange.\n const success = await authorizePromise;\n\n if (!success) throw new Error('Authorization failed');\n\n this.closedByOutcome = true;\n this.dialogRef().nativeElement.close();\n this.connected.emit();\n } catch {\n popup?.close();\n if (this.state() === 'waiting') this.state.set('info');\n }\n }\n\n protected cancelAndClose(): void {\n this.closedByOutcome = true;\n this.dialogRef().nativeElement.close();\n this.cancelled.emit();\n }\n\n protected onDialogClose(): void {\n // Fired for any close (including backdrop click via closedby=\"any\")\n if (!this.closedByOutcome) {\n this.cancelled.emit();\n }\n this.closedByOutcome = false;\n }\n}\n","import { afterNextRender, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, input, output, viewChild } from '@angular/core';\n\nimport { XMarkICon } from '@sinequa/ui';\n\nimport { ButtonComponent } from '../overrides';\nimport { McpClient } from '../types';\n\n/**\n * Confirmation dialog for revoking an MCP server's OAuth authorization.\n *\n * Opens itself automatically when mounted. Emits `confirmed` when the user\n * clicks Revoke and `cancelled` when they dismiss without confirming.\n */\n@Component({\n selector: 'mcp-revoke-confirm-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonComponent, XMarkICon],\n template: `\n <dialog\n #dialog\n closedby=\"any\"\n class=\"border-menu-border bg-menu-bg m-auto hidden w-[min(90%,28rem)] flex-col gap-4 rounded-3xl border p-6 outline-none backdrop:bg-black/50 backdrop:backdrop-blur-sm open:flex\"\n (close)=\"onDialogClose()\">\n <header class=\"flex shrink-0 items-center justify-between\">\n <h2 class=\"text-primary-foreground-dark text-base font-semibold\">Revoke access</h2>\n <button tooltip=\"Close\" tooltip-position=\"bottom\" variant=\"ghost\" size=\"icon\" type=\"button\" (click)=\"cancel()\">\n <XMarkIcon class=\"size-4\" />\n </button>\n </header>\n\n <p class=\"text-primary-foreground-muted text-sm\">\n Revoke access for <span class=\"text-primary-foreground-dark font-medium\">{{ client().name }}</span>? You will need\n to reconnect to use it again.\n </p>\n\n <footer class=\"flex justify-end gap-2\">\n <button variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button variant=\"destructive\" size=\"sm\" type=\"button\" (click)=\"confirm()\">Revoke</button>\n </footer>\n </dialog>\n `\n})\nexport class McpRevokeConfirmDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n\n /** The MCP client whose authorization is to be revoked. */\n readonly client = input.required<McpClient>();\n\n /** Emitted when the user confirms the revocation. */\n readonly confirmed = output<void>();\n /** Emitted when the user cancels or closes the dialog. */\n readonly cancelled = output<void>();\n\n private readonly dialogRef = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\n\n private closedByOutcome = false;\n\n constructor() {\n afterNextRender(() => {\n const dialog = this.dialogRef().nativeElement;\n // Move the dialog to document.body so it survives the menu teardown that\n // occurs when the user clicks inside the Tools & Extensions dropdown.\n document.body.appendChild(dialog);\n dialog.showModal();\n\n this.destroyRef.onDestroy(() => {\n dialog.close();\n dialog.parentNode?.removeChild(dialog);\n });\n });\n }\n\n protected confirm(): void {\n this.closedByOutcome = true;\n this.dialogRef().nativeElement.close();\n this.confirmed.emit();\n }\n\n protected cancel(): void {\n this.closedByOutcome = true;\n this.dialogRef().nativeElement.close();\n this.cancelled.emit();\n }\n\n protected onDialogClose(): void {\n if (!this.closedByOutcome) this.cancelled.emit();\n this.closedByOutcome = false;\n }\n}\n","import { Component, input, output } from '@angular/core';\r\n\r\nimport { InfoCircleIcon, TooltipDirective } from '@sinequa/ui';\r\n\r\nimport { ButtonComponent } from '../overrides';\r\nimport { SearchIcon } from '../overrides/icons/search.icon';\r\nimport { SafeHtmlPipe } from '../pipes';\r\nimport { McpTool } from '../types/agent-details.types';\r\n\r\n@Component({\r\n selector: 'mcp-server-item',\r\n imports: [ButtonComponent, InfoCircleIcon, SafeHtmlPipe, SearchIcon, TooltipDirective],\r\n host: {\r\n class: 'block min-w-0 flex-1'\r\n },\r\n template: `\r\n <div class=\"relative flex min-w-0 items-center gap-2.5\">\r\n @if (icon()) {\r\n <span [innerHTML]=\"icon() | safeHtml\" class=\"size-5 shrink-0\" aria-hidden=\"true\"></span>\r\n } @else {\r\n <search-icon class=\"text-primary-foreground-base shrink-0\" aria-hidden=\"true\" />\r\n }\r\n\r\n <p class=\"flex min-w-0 flex-1 flex-col\">\r\n <span class=\"text-primary-foreground-dark line-clamp-1 text-sm font-medium break-all\">{{ name() }}</span>\r\n @if (description()) {\r\n <span\r\n tooltip-duration=\"10000\"\r\n [tooltip]=\"description()!\"\r\n tooltip-position=\"bottom\"\r\n class=\"text-primary-foreground-muted line-clamp-1 text-xs\"\r\n >{{ description() }}\r\n </span>\r\n }\r\n </p>\r\n\r\n @if (functions()?.length) {\r\n <button\r\n tooltip=\"Functions\"\r\n tooltip-position=\"bottom\"\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"icon-sm\"\r\n class=\"text-primary-foreground-muted ml-auto\"\r\n (click)=\"toggled.emit()\">\r\n <InfoCircleIcon />\r\n </button>\r\n }\r\n\r\n @if (isOpen()) {\r\n <div class=\"fixed inset-0 z-10\" (click)=\"closed.emit()\" aria-hidden=\"true\"></div>\r\n\r\n <aside\r\n role=\"region\"\r\n [id]=\"panelId()\"\r\n class=\"absolute right-0 bottom-full z-20 mb-2 max-w-80 min-w-56 rounded-lg border border-gray-200 bg-white p-3 shadow-lg\">\r\n <h5 class=\"heading-4 mb-1.5 whitespace-nowrap\">Functions</h5>\r\n\r\n <dl class=\"flex flex-col gap-2 text-xs\">\r\n @for (fn of functions(); track fn.name) {\r\n <div>\r\n <dt class=\"text-primary-foreground-dark font-medium\">{{ fn.name }}</dt>\r\n @if (fn.description) {\r\n <dd class=\"text-primary-foreground-muted\">\r\n {{ fn.description }}\r\n </dd>\r\n }\r\n </div>\r\n }\r\n </dl>\r\n </aside>\r\n }\r\n </div>\r\n `\r\n})\r\nexport class McpServerItemComponent {\r\n readonly name = input.required<string>();\r\n readonly panelId = input.required<string>();\r\n\r\n readonly icon = input<string | undefined>();\r\n readonly description = input<string | undefined>();\r\n readonly functions = input<McpTool[] | undefined>();\r\n readonly isOpen = input(false);\r\n\r\n readonly toggled = output<void>();\r\n readonly closed = output<void>();\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model, signal } from '@angular/core';\n\nimport { SwitchComponent } from '@sinequa/ui';\n\nimport { AgentService } from '../agent/agent.service';\nimport { AgentDetails, McpClient } from '../types';\nimport { McpConnectDialogComponent } from './mcp-connect-dialog.component';\nimport { McpRevokeConfirmDialogComponent } from './mcp-revoke-confirm-dialog.component';\nimport { McpServerItemComponent } from './mcp-server-item.component';\n\n@Component({\n selector: 'AvailableMcpServers,available-mcp-servers,availablemcpservers',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [McpServerItemComponent, SwitchComponent, McpConnectDialogComponent, McpRevokeConfirmDialogComponent],\n template: `\n @if (mcpClients().length) {\n <section class=\"flex flex-col gap-2\">\n @if (showHeading()) {\n <h4 class=\"heading-4\">Extensions</h4>\n }\n\n <ul class=\"flex flex-col gap-2\">\n @for (client of mcpClients(); track client.name) {\n <li class=\"flex items-center gap-2.5\">\n <mcp-server-item\n [name]=\"client.name\"\n [icon]=\"client.displaySVGIcon\"\n [description]=\"selectable() ? undefined : client.description\"\n [functions]=\"selectable() ? undefined : client.tools\"\n [isOpen]=\"openMcpCard() === client.name\"\n [panelId]=\"'mcp-panel-' + client.name\"\n (toggled)=\"toggleMcpCard(client.name)\"\n (closed)=\"openMcpCard.set(null)\" />\n\n @if (selectable()) {\n @if (isGranted(client)) {\n <div class=\"ml-auto flex items-center gap-2\">\n @if (client.authorizationStatus === 'Granted') {\n <button\n class=\"text-xs font-medium text-red-500 hover:underline disabled:opacity-50\"\n type=\"button\"\n [disabled]=\"revokingClient() === client.name\"\n (click)=\"confirmingRevokeClient.set(client)\">\n Revoke\n </button>\n }\n <Switch\n size=\"xs\"\n [toggled]=\"isClientSelected(client.name)\"\n [variant]=\"isClientSelected(client.name) ? 'primary' : 'secondary'\"\n (toggledChange)=\"toggleClient(client)\" />\n </div>\n } @else {\n <button\n class=\"ml-auto text-xs font-medium text-blue-600 hover:underline\"\n type=\"button\"\n (click)=\"connectingClient.set(client)\">\n Connect\n </button>\n }\n }\n </li>\n }\n </ul>\n </section>\n\n @if (connectingClient()) {\n <mcp-connect-dialog\n [client]=\"connectingClient()!\"\n (connected)=\"onConnected(connectingClient()!)\"\n (cancelled)=\"connectingClient.set(null)\" />\n }\n\n @if (confirmingRevokeClient()) {\n <mcp-revoke-confirm-dialog\n [client]=\"confirmingRevokeClient()!\"\n (confirmed)=\"onRevokeConfirmed(confirmingRevokeClient()!)\"\n (cancelled)=\"confirmingRevokeClient.set(null)\" />\n }\n }\n `\n})\nexport class AvailableMcpServersComponent {\n private readonly agentService = inject(AgentService);\n\n readonly agentDetails = input.required<AgentDetails>();\n readonly selectable = input(false);\n readonly showHeading = input(true);\n\n readonly selectedMcpClients = model<{ name: string; tools: string[] }[]>([]);\n\n protected readonly openMcpCard = signal<string | null>(null);\n protected readonly connectingClient = signal<McpClient | null>(null);\n protected readonly confirmingRevokeClient = signal<McpClient | null>(null);\n protected readonly revokingClient = signal<string | null>(null);\n protected readonly mcpClients = computed(() => this.agentDetails().mcpClients ?? []);\n private readonly selectedNames = computed(() => new Set(this.selectedMcpClients().map(c => c.name)));\n\n protected isGranted(client: McpClient): boolean {\n // Clients without an authorizationStatus don't require OAuth — treat as granted.\n return !client.authorizationStatus || client.authorizationStatus === 'Granted';\n }\n\n protected toggleMcpCard(key: string): void {\n this.openMcpCard.update(current => (current === key ? null : key));\n }\n\n protected toggleClient(client: McpClient): void {\n const name = client.name;\n\n this.selectedMcpClients.update(current =>\n this.selectedNames().has(name)\n ? current.filter(c => c.name !== name)\n : [...current, { name, tools: client.tools.map(t => t.name) }]\n );\n }\n\n protected isClientSelected(clientName: string): boolean {\n return this.selectedNames().has(clientName);\n }\n\n protected onConnected(client: McpClient): void {\n this.connectingClient.set(null);\n // Automatically select the newly authorized client.\n if (!this.selectedNames().has(client.name)) {\n this.toggleClient(client);\n }\n }\n\n protected async onRevokeConfirmed(client: McpClient): Promise<void> {\n this.confirmingRevokeClient.set(null);\n await this.revokeClient(client);\n }\n\n protected async revokeClient(client: McpClient): Promise<void> {\n this.revokingClient.set(client.name);\n try {\n await this.agentService.revokeRemoteMcp(client.name);\n // Deselect the client so it is no longer sent to the agent after revocation.\n if (this.selectedNames().has(client.name)) {\n this.toggleClient(client);\n }\n } finally {\n this.revokingClient.set(null);\n }\n }\n}\n","import { afterNextRender, Component, computed, inject, input } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { PrincipalStore } from '@sinequa/atomic-angular';\r\nimport { LoadingCircleIconComponent, Separator } from '@sinequa/ui';\r\n\r\nimport { AgentsStore } from '../stores';\r\nimport { RendererService } from '../services';\r\nimport { ChipIcon } from '../overrides/icons/chip.icon';\r\nimport { RobotIcon } from '../overrides/icons/robot.icon';\r\nimport { AGENT_DEFAULT_NAME, AGENT_INSTANCE_ID } from '../tokens';\r\nimport { CopyableFieldComponent } from '../components/copyable-field.component';\r\nimport { AvailableInternalToolsComponent } from './available-internal-tools';\r\nimport { AvailableMcpServersComponent } from './available-mcp-servers';\r\n\r\n@Component({\r\n selector: 'InfoPanel,info-panel,infopanel',\r\n imports: [\r\n ChipIcon,\r\n CopyableFieldComponent,\r\n LoadingCircleIconComponent,\r\n RobotIcon,\r\n AvailableInternalToolsComponent,\r\n AvailableMcpServersComponent,\r\n Separator\r\n ],\r\n template: `\r\n <article class=\"-mr-6 flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto pr-6\">\r\n @if (agentsStore.agentDetailsLoading()) {\r\n <LoadingCircle class=\"mx-auto my-8 size-8! animate-spin\" />\r\n } @else if (agentsStore.agentDetails(); as config) {\r\n <header class=\"flex items-center gap-3\">\r\n <figure class=\"bg-almond-50 flex size-10 shrink-0 items-center justify-center rounded-xl\">\r\n @if (icon(); as svgIcon) {\r\n <span class=\"h-[28px] w-[28px] [&>svg]:h-full [&>svg]:w-full\" [innerHTML]=\"svgIcon\"></span>\r\n } @else {\r\n <robot-icon class=\"text-almond-300 h-[28px] w-[28px]\" />\r\n }\r\n </figure>\r\n <hgroup class=\"flex flex-col gap-0.5\">\r\n <h3 class=\"text-primary-foreground-dark font-semibold\">{{ config.displayName }}</h3>\r\n </hgroup>\r\n </header>\r\n\r\n <p class=\"text-primary-foreground-dark flex items-center gap-1 text-sm\">\r\n {{ config.description }}\r\n </p>\r\n\r\n @if (isAdminOrDelegatedAdmin()) {\r\n <copyable-field label=\"Instance ID\" [value]=\"instanceId\" />\r\n <copyable-field label=\"Chat ID\" [value]=\"chatId() ?? ''\" />\r\n }\r\n\r\n <section class=\"grid grid-cols-[repeat(auto-fit,minmax(min(100%,210px),1fr))] gap-4\">\r\n @if (config.internalTools?.length) {\r\n <available-internal-tools [agentDetails]=\"config\"></available-internal-tools>\r\n }\r\n\r\n @if (config.mcpClients?.length) {\r\n <available-mcp-servers [agentDetails]=\"config\"></available-mcp-servers>\r\n }\r\n\r\n @if (config.runnableModel) {\r\n <dl class=\"flex flex-col gap-2\">\r\n <dt class=\"heading-4\">Model</dt>\r\n <dd class=\"flex items-center gap-2.5\">\r\n <chip-icon class=\"text-primary-foreground-base\" />\r\n <p class=\"flex flex-col\">\r\n <span class=\"text-primary-foreground-dark text-sm font-medium\">\r\n {{ config.runnableModel.name }}\r\n </span>\r\n <span class=\"text-primary-foreground-muted text-xs\">\r\n Context window: {{ config.runnableModel.contextWindowSize?.toLocaleString() }}\r\n </span>\r\n </p>\r\n </dd>\r\n </dl>\r\n }\r\n </section>\r\n\r\n @if (config.promptContent) {\r\n <hr class=\"text-gray-200\" />\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border\" />\r\n <section class=\"flex flex-col gap-1.5\">\r\n <h4 class=\"heading-4\">Instructions</h4>\r\n\r\n <div\r\n class=\"bg-primary-lightest text-primary-foreground-dark [&_blockquote]:bg-sage-50 [&_blockquote]:before:bg-sage-300 [&_:not(pre)>code]:bg-sage-50 [&_:not(pre)>code]:border-sage-200 [&_:not(pre)>code]:text-primary-foreground-dark [&_hr]:bg-sage-200 [&_ul_li]:before:bg-primary-foreground-muted [&_ul_ul_li]:before:border-primary-foreground-muted [&_ol_li]:before:text-primary-foreground-muted rounded-xl p-3 text-sm leading-5 [&_:not(pre)>code]:rounded [&_:not(pre)>code]:border [&_:not(pre)>code]:px-1 [&_:not(pre)>code]:py-px [&_:not(pre)>code]:text-[13px] dark:[&_:not(pre)>code]:border-white/10 dark:[&_:not(pre)>code]:bg-white/5 [&_a]:text-blue-600 dark:[&_a]:text-blue-400 [&_a:hover]:rounded [&_a:hover]:bg-blue-50 dark:[&_a:hover]:bg-blue-500/10 [&_blockquote]:relative [&_blockquote]:my-3 [&_blockquote]:rounded-xl [&_blockquote]:py-3 [&_blockquote]:pr-3 [&_blockquote]:pl-6 [&_blockquote]:text-sm [&_blockquote]:before:absolute [&_blockquote]:before:top-3 [&_blockquote]:before:bottom-3 [&_blockquote]:before:left-2.5 [&_blockquote]:before:w-0.5 [&_blockquote]:before:rounded-full [&_blockquote]:before:content-[''] dark:[&_blockquote]:bg-white/5 dark:[&_blockquote]:before:bg-white/20 [&_code]:font-mono [&_h2]:mt-5 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:leading-6 [&_h2]:font-semibold [&_h3]:mt-4 [&_h3]:mb-1.5 [&_h3]:text-base [&_h3]:leading-snug [&_h3]:font-semibold [&_h4]:mt-3 [&_h4]:mb-1 [&_h4]:text-sm [&_h4]:leading-5 [&_h4]:font-semibold [&_h5]:mt-3 [&_h5]:mb-1 [&_h5]:text-[13px] [&_h5]:leading-[18px] [&_h5]:font-semibold [&_h6]:mt-3 [&_h6]:mb-1 [&_h6]:text-[13px] [&_h6]:leading-[18px] [&_h6]:font-semibold [&_hr]:my-4 [&_hr]:h-px [&_hr]:border-none dark:[&_hr]:bg-white/10 [&_ol]:mb-2 [&_ol]:list-none [&_ol]:p-0 [&_ol]:[counter-reset:item] [&_ol_li]:relative [&_ol_li]:mb-1.5 [&_ol_li]:pl-7 [&_ol_li]:[counter-increment:item] [&_ol_li]:before:absolute [&_ol_li]:before:left-0 [&_ol_li]:before:content-[counter(item)'.'] [&_ol_li:last-child]:mb-0 [&_ol_ol]:mt-1.5 [&_ol_ol]:[counter-reset:subitem] [&_ol_ol_li]:pl-9 [&_ol_ol_li]:[counter-increment:subitem] [&_ol_ol_li]:before:content-[counter(item)'.'counter(subitem)'.'] [&_p]:mb-2 [&_p:last-child]:mb-0 [&_pre]:my-2.5 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:border [&_pre]:border-gray-700 [&_pre]:bg-gray-800 [&_pre]:px-4 [&_pre]:py-3 [&_pre]:text-xs [&_pre]:leading-relaxed [&_pre]:text-gray-200 dark:[&_pre]:border-gray-600 dark:[&_pre]:bg-gray-900 dark:[&_pre]:text-gray-300 [&_pre>code]:text-xs [&_pre>code]:leading-relaxed [&_pre>code]:text-gray-200 dark:[&_pre>code]:text-gray-300 [&_strong]:font-semibold [&_ul]:mb-2 [&_ul]:list-none [&_ul]:p-0 [&_ul_li]:relative [&_ul_li]:mb-1.5 [&_ul_li]:pl-5 [&_ul_li]:before:absolute [&_ul_li]:before:top-[7px] [&_ul_li]:before:left-0 [&_ul_li]:before:size-[5px] [&_ul_li]:before:rounded-full [&_ul_li]:before:content-[''] [&_ul_li:last-child]:mb-0 [&_ul_ul]:mt-1.5 [&_ul_ul_li]:before:rounded-full [&_ul_ul_li]:before:border [&_ul_ul_li]:before:bg-transparent\"\r\n [innerHTML]=\"renderedPrompt()\"></div>\r\n </section>\r\n }\r\n }\r\n </article>\r\n `,\r\n host: {\r\n class: 'flex min-h-0 flex-1 flex-col',\r\n style: '--sb-width: 4px'\r\n }\r\n})\r\nexport class InfoPanelComponent {\r\n protected readonly instanceId = inject(AGENT_INSTANCE_ID);\r\n private readonly agentName = inject(AGENT_DEFAULT_NAME);\r\n protected readonly agentsStore = inject(AgentsStore);\r\n private readonly principal = inject(PrincipalStore);\r\n private readonly md = inject(RendererService).renderer;\r\n\r\n readonly chatId = input<string>();\r\n\r\n protected readonly isAdminOrDelegatedAdmin = computed(\r\n () => this.principal.principal().isAdministrator || this.principal.principal().isDelegatedAdmin\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => this.agentsStore.getAgentDetails(this.agentName));\r\n }\r\n\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n protected readonly renderedPrompt = computed(() => {\r\n const content = this.agentsStore.agentDetails()?.promptContent;\r\n if (!content) return '';\r\n return this.md.render(content);\r\n });\r\n\r\n protected readonly icon = computed(() => {\r\n const svg = this.agentsStore.agentDetails()?.displaySVGIcon;\r\n return svg ? this.sanitizer.bypassSecurityTrustHtml(svg) : null;\r\n });\r\n}\r\n","import { Component, input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'arrow-up-icon',\r\n template: ` <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-arrow-up-icon lucide-arrow-up\">\r\n <path d=\"m5 12 7-7 7 7\" />\r\n <path d=\"M12 19V5\" />\r\n </svg>`\r\n})\r\nexport class ArrowUpicon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'slider-icon',\n template: `\n <svg\n [class]=\"class()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"none\">\n   <path\n d=\"M0.6 1.4C0.2675 1.4 0 1.6675 0 2C0 2.3325 0.2675 2.6 0.6 2.6H2.8925C3.1475 3.4125 3.905 4 4.8 4C5.695 4 6.4525 3.4125 6.7075 2.6H12.2C12.5325 2.6 12.8 2.3325 12.8 2C12.8 1.6675 12.5325 1.4 12.2 1.4H6.7075C6.4525 0.5875 5.695 0 4.8 0C3.905 0 3.1475 0.5875 2.8925 1.4H0.6ZM0.6 5.4C0.2675 5.4 0 5.6675 0 6C0 6.3325 0.2675 6.6 0.6 6.6H6.8925C7.1475 7.4125 7.905 8 8.8 8C9.695 8 10.4525 7.4125 10.7075 6.6H12.2C12.5325 6.6 12.8 6.3325 12.8 6C12.8 5.6675 12.5325 5.4 12.2 5.4H10.7075C10.4525 4.5875 9.695 4 8.8 4C7.905 4 7.1475 4.5875 6.8925 5.4H0.6ZM0.6 9.4C0.2675 9.4 0 9.6675 0 10C0 10.3325 0.2675 10.6 0.6 10.6H2.0925C2.3475 11.4125 3.105 12 4 12C4.895 12 5.6525 11.4125 5.9075 10.6H12.2C12.5325 10.6 12.8 10.3325 12.8 10C12.8 9.6675 12.5325 9.4 12.2 9.4H5.9075C5.6525 8.5875 4.895 8 4 8C3.105 8 2.3475 8.5875 2.0925 9.4H0.6ZM4 10.8C3.5575 10.8 3.2 10.4425 3.2 10C3.2 9.5575 3.5575 9.2 4 9.2C4.4425 9.2 4.8 9.5575 4.8 10C4.8 10.4425 4.4425 10.8 4 10.8ZM8.8 6.8C8.3575 6.8 8 6.4425 8 6C8 5.5575 8.3575 5.2 8.8 5.2C9.2425 5.2 9.6 5.5575 9.6 6C9.6 6.4425 9.2425 6.8 8.8 6.8ZM4 2C4 1.5575 4.3575 1.2 4.8 1.2C5.2425 1.2 5.6 1.5575 5.6 2C5.6 2.4425 5.2425 2.8 4.8 2.8C4.3575 2.8 4 2.4425 4 2Z\"\n fill=\"currentColor\"/>\n </svg>\n `\n})\nexport class SliderIcon {\n class = input<string>();\n}\n","import { Directive, ElementRef, inject, Injector, afterNextRender } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'textarea[autoResize]',\r\n standalone: true,\r\n host: {\r\n '(input)': 'onInput()',\r\n '(ngModelChange)': 'onModelChange()'\r\n }\r\n})\r\nexport class AutoResizeDirective {\r\n private readonly el: HTMLTextAreaElement = inject(ElementRef).nativeElement;\r\n private readonly injector = inject(Injector);\r\n private readonly supported = CSS.supports('field-sizing', 'content');\r\n\r\n onInput() {\r\n this.resizeIfNeeded();\r\n }\r\n\r\n onModelChange() {\r\n afterNextRender({ write: () => this.resizeIfNeeded() }, { injector: this.injector });\r\n }\r\n\r\n private resizeIfNeeded() {\r\n if (this.supported) return;\r\n this.resize();\r\n }\r\n\r\n private resize() {\r\n this.el.style.height = '0px';\r\n this.el.style.height = this.el.scrollHeight + 'px';\r\n }\r\n}\r\n","import { afterNextRender, Component, effect, inject, input, linkedSignal } from '@angular/core';\r\n\r\nimport { LoadingCircleIconComponent } from '@sinequa/ui';\r\n\r\nimport { AGENT_DEFAULT_NAME } from '../tokens';\r\nimport { AvailableInternalToolsComponent } from './available-internal-tools';\r\nimport { AgentDetails } from '../types';\r\nimport { AvailableMcpServersComponent } from './available-mcp-servers';\r\nimport { AgentsStore } from '../stores';\r\n\r\n@Component({\r\n selector: 'ToolsSelectionPanel,tools-selection-panel,toolsselectionpanel',\r\n imports: [LoadingCircleIconComponent, AvailableInternalToolsComponent, AvailableMcpServersComponent],\r\n template: `\r\n <article class=\"-mr-6 flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto pr-6\">\r\n @if (agentsStore.agentDetailsLoading()) {\r\n <LoadingCircle class=\"mx-auto my-8 size-8! animate-spin\" />\r\n } @else if (agentsStore.agentDetails(); as config) {\r\n <section class=\"flex flex-1\">\r\n @if (config.internalTools?.length) {\r\n <available-internal-tools\r\n class=\"flex-1\"\r\n [agentDetails]=\"config\"\r\n [selectable]=\"true\"\r\n [showHeading]=\"false\"\r\n [(selectedTools)]=\"selectedInternalTools\" />\r\n }\r\n @if (config.internalTools?.length && config.mcpClients?.length) {\r\n <div class=\"bg-border mx-4 w-px self-stretch\"></div>\r\n }\r\n @if (config.mcpClients?.length) {\r\n <available-mcp-servers\r\n class=\"flex-1\"\r\n [agentDetails]=\"config\"\r\n [selectable]=\"true\"\r\n [showHeading]=\"false\"\r\n [(selectedMcpClients)]=\"selectedMcpClients\" />\r\n }\r\n </section>\r\n }\r\n </article>\r\n `,\r\n host: {\r\n class: 'flex min-h-[200px] max-h-[min(60vh,400px)] flex-1 flex-col',\r\n style: '--sb-width: 4px'\r\n }\r\n})\r\nexport class ToolsSelectionPanelComponent {\r\n private readonly agentName = inject(AGENT_DEFAULT_NAME);\r\n protected readonly agentsStore = inject(AgentsStore);\r\n\r\n readonly chatId = input<string>();\r\n\r\n protected readonly selectedInternalTools = linkedSignal<string[]>(\r\n () => this.agentsStore.toolChoice()?.internalTools ?? []\r\n );\r\n protected readonly selectedMcpClients = linkedSignal<{ name: string; tools: string[] }[]>(\r\n () => this.agentsStore.toolChoice()?.mcpClients ?? []\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.agentsStore.getAgentDetails(this.agentName);\r\n });\r\n\r\n effect(() => {\r\n this.agentsStore.updateToolChoice({\r\n internalTools: this.selectedInternalTools(),\r\n mcpClients: this.selectedMcpClients()\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, computed, ElementRef, inject, input, linkedSignal, model, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { PrincipalStore } from '@sinequa/atomic-angular';\r\nimport {\r\n cn,\r\n LoadingCircleIconComponent,\r\n MenuComponent,\r\n MenuContentComponent,\r\n searchVariants, SearchVariants,\r\n Square,\r\n TooltipDirective,\r\n XMarkICon\r\n} from '@sinequa/ui';\r\n\r\nimport { ButtonComponent } from '../overrides';\r\nimport { ArrowUpicon } from '../overrides/icons/arrow-up.icon';\r\nimport { RobotIcon } from '../overrides/icons/robot.icon';\r\nimport { SliderIcon } from '../overrides/icons/slider.icon';\r\nimport { SignalRWebService } from '../signalr';\r\nimport { AGENT_DEFAULT_NAME } from '../tokens';\r\nimport { createActionEvent, InputAction } from '../types';\r\nimport { AutoResizeDirective } from './auto-resize.directive';\r\nimport { InfoPanelComponent } from './info-panel';\r\nimport { AgentsStore } from '../stores';\r\nimport { ToolsSelectionPanelComponent } from './tools-selection-panel';\r\n\r\nexport enum ChatInputMode {\r\n Default = 'default',\r\n Edit = 'edit'\r\n}\r\n\r\n@Component({\r\n selector: 'ChatInput,chat-input,chatinput',\r\n imports: [\r\n FormsModule,\r\n LoadingCircleIconComponent,\r\n Square,\r\n ButtonComponent,\r\n InfoPanelComponent,\r\n ArrowUpicon,\r\n TooltipDirective,\r\n XMarkICon,\r\n RobotIcon,\r\n SliderIcon,\r\n ToolsSelectionPanelComponent,\r\n AutoResizeDirective,\r\n MenuComponent,\r\n MenuContentComponent\r\n ],\r\n template: `\r\n <textarea\r\n #textInput\r\n autoResize\r\n type=\"text\"\r\n [placeholder]=\"'Ask anything to ' + displayName()\"\r\n rows=\"1\"\r\n class=\"placeholder:text-primary-foreground-muted field-sizing-content max-h-[10rem] w-full grow resize-none overflow-y-auto px-2 py-1.5 leading-6 focus:outline-none\"\r\n [class]=\"showCancel() ? '' : 'ms-1'\"\r\n [disabled]=\"!isConnected() || loading()\"\r\n [(ngModel)]=\"text\"\r\n (keydown.enter)=\"submit($event)\">\r\n </textarea>\r\n\r\n <aside class=\"flex items-center justify-between gap-2\">\r\n\r\n <!-- LEFT side -->\r\n <div class=\"flex items-center gap-2\">\r\n <Menu>\r\n <button variant=\"ghost\" size=\"icon\" tooltip=\"Tools & Extensions\" tooltip-position=\"top\">\r\n <slider-icon />\r\n </button>\r\n <MenuContent\r\n position=\"bottom-start\"\r\n class=\"border-menu-border bg-menu-bg rounded-3xl border p-4 shadow-lg\"\r\n [style.min-width]=\"menuMinWidth()\">\r\n <h2 class=\"text-primary mb-3 text-base font-semibold\">Tools & Extensions</h2>\r\n <tools-selection-panel [chatId]=\"chatId()\" />\r\n </MenuContent>\r\n </Menu>\r\n </div>\r\n\r\n <!-- RIGHT side -->\r\n <div class=\"flex items-center gap-2\">\r\n @if (isAdminOrDelegatedAdmin()) {\r\n <button variant=\"ghost\" size=\"icon\" tooltip=\"Agent details\" tooltip-position=\"top\" (click)=\"infoPanel.showModal()\">\r\n <robot-icon />\r\n </button>\r\n\r\n <dialog\r\n #infoPanel\r\n closedby=\"any\"\r\n class=\"border-menu-border bg-menu-bg m-auto hidden h-[90%] max-h-[90%] w-[min(90%,48rem)] flex-col gap-4 rounded-3xl border p-6 outline-none backdrop:bg-black/50 backdrop:backdrop-blur-sm open:flex\">\r\n <header class=\"flex shrink-0 items-center justify-between\">\r\n <h2 class=\"text-primary-foreground-dark text-lg font-semibold\">Agent Details</h2>\r\n <button tooltip=\"Close\" tooltip-position=\"bottom\" variant=\"ghost\" size=\"icon\" (click)=\"infoPanel.close()\">\r\n <XMarkIcon class=\"size-4\" />\r\n </button>\r\n </header>\r\n\r\n <InfoPanel [chatId]=\"chatId()\" />\r\n </dialog>\r\n }\r\n\r\n @if (showCancel()) {\r\n <button\r\n tooltip=\"Cancel\"\r\n tooltip-position=\"top\"\r\n variant=\"secondary\"\r\n size=\"icon\"\r\n title=\"Cancel edition\"\r\n (click)=\"dispatchEvent('cancel')\">\r\n <XMarkIcon class=\"size-4\" />\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <button\r\n variant=\"accent\"\r\n size=\"icon\"\r\n tooltip=\"Stop generation\"\r\n tooltip-position=\"top\"\r\n [disabled]=\"!canStopGeneration()\"\r\n (click)=\"dispatchEvent('stop'); canStopGeneration.set(false)\">\r\n <LoadingCircle class=\"size-6! animate-spin\" />\r\n <Square class=\"absolute size-2!\" [class]=\"canStopGeneration() ? '' : 'hidden'\" [fill]=\"true\" />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"accent\"\r\n tooltip=\"Send\"\r\n tooltip-position=\"top\"\r\n size=\"icon\"\r\n [class]=\"isConnected() && canSend() ? '' : 'pointer-events-none opacity-50'\"\r\n [disabled]=\"!isConnected()\"\r\n (click)=\"submit()\">\r\n <arrow-up-icon class=\"size-4\" />\r\n </button>\r\n }\r\n </div>\r\n </aside>\r\n\r\n <p\r\n class=\"text-primary-foreground-muted pointer-events-none absolute top-full left-0 w-full pt-1.5 text-center text-xs\">\r\n This content is AI-generated and may contain errors. Please verify the citations for accuracy.\r\n </p>\r\n `,\r\n host: {\r\n class:\r\n 'relative rounded-3xl bg-input border border-input-border w-full backdrop-glass bg-opacity-60 p-[clamp(0.75rem,3vw,1rem)] flex flex-col gap-3'\r\n }\r\n})\r\nexport class ChatInput {\r\n cn = cn;\r\n\r\n private readonly principal = inject(PrincipalStore);\r\n private readonly agentsStore = inject(AgentsStore);\r\n\r\n protected readonly menuMinWidth = computed(() => {\r\n const config = this.agentsStore.agentDetails();\r\n const hasBoth = !!config?.internalTools?.length && !!config?.mcpClients?.length;\r\n return hasBoth ? 'clamp(300px, 80vw, 500px)' : 'clamp(200px, 80vw, 300px)';\r\n });\r\n private readonly el = inject(ElementRef);\r\n protected readonly isConnected = inject(SignalRWebService).isConnected;\r\n protected readonly agentName = inject(AGENT_DEFAULT_NAME);\r\n\r\n private readonly textInput = viewChild<ElementRef<HTMLInputElement>>('textInput');\r\n\r\n readonly chatId = input<string>();\r\n readonly class = input<string>();\r\n readonly variant = input<SearchVariants['variant']>('default');\r\n readonly decoration = input<SearchVariants['decoration']>('none');\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly value = output<string>();\r\n\r\n protected readonly text = model<string>('');\r\n protected readonly showCancel = signal(false);\r\n protected readonly canStopGeneration = linkedSignal(() => this.loading());\r\n\r\n readonly isAdminOrDelegatedAdmin = computed(\r\n () => this.principal.principal().isAdministrator || this.principal.principal().isDelegatedAdmin\r\n );\r\n protected readonly variants = computed(() => {\r\n return searchVariants({ variant: this.variant(), decoration: this.decoration(), class: this.class() });\r\n });\r\n protected readonly canSend = computed(() => this.isConnected() && this.text().trim().length > 0);\r\n protected readonly displayName = computed(() => this.agentsStore.agentDetails()?.displayName ?? this.agentName);\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n if (!this.text()) return;\r\n this.value.emit(this.text());\r\n this.text.set('');\r\n this.showCancel.set(false);\r\n const textarea = this.textInput()?.nativeElement;\r\n if (textarea) textarea.style.height = 'auto';\r\n }\r\n\r\n edit(text: string) {\r\n this.showCancel.set(true);\r\n this.text.set(text);\r\n const textarea = this.textInput()?.nativeElement;\r\n if (textarea) {\r\n textarea.focus();\r\n requestAnimationFrame(() => {\r\n textarea.style.height = 'auto';\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n this.showCancel.set(false);\r\n this.text.set('');\r\n const textarea = this.textInput()?.nativeElement;\r\n if (textarea) textarea.style.height = 'auto';\r\n }\r\n\r\n protected dispatchEvent(action: InputAction, payload?: any) {\r\n (this.el.nativeElement as HTMLElement).dispatchEvent(createActionEvent('input', action, payload));\r\n }\r\n}\r\n","import { Component, DestroyRef, effect, ElementRef, inject, viewChild } from '@angular/core';\nimport { Chart, ChartConfiguration } from 'chart.js';\n\n@Component({\n selector: 'chart-plot',\n standalone: true,\n template: `\n <canvas #chartPlot></canvas>\n <div style=\"display:none\">\n <ng-content></ng-content>\n </div>\n `\n})\nexport class ChartPlotComponent {\n readonly chartPlotRef = viewChild.required<ElementRef<HTMLCanvasElement>>('chartPlot');\n private readonly destroyRef = inject(DestroyRef);\n\n private chart?: Chart;\n\n constructor() {\n effect(() => {\n const config = this.parseChartJsConfig();\n if (!!config) {\n this.chart?.destroy();\n // ✅ Render chart directly into canvas\n this.chart = new Chart(this.chartPlotRef().nativeElement, config);\n }\n });\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.chart?.destroy();\n });\n }\n\n private parseChartJsConfig(): ChartConfiguration | null {\n const rawConfig = this.getChartJsConfig();\n if (!rawConfig) return null;\n\n try {\n return JSON.parse(rawConfig);\n } catch (e) {\n return null;\n }\n }\n\n private getChartJsConfig(): string {\n return this.chartPlotRef().nativeElement.parentElement?.textContent?.trim() ?? '';\n }\n}\n","import { NgClass } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, inject, input, output, viewChild } from '@angular/core';\n\nimport { ButtonComponent, CircleCheckIconComponent, ClipboardIcon } from '@sinequa/ui';\n\nimport { ShikiHighlighterService } from '../services';\nimport { createCopyState } from '../utils';\n\n@Component({\n selector: 'shiki-code,ShikiCode,shikicode',\n standalone: true,\n imports: [ButtonComponent, ClipboardIcon, CircleCheckIconComponent, NgClass],\n template: `\n <article class=\"group/code relative rounded-md p-1 border border-gray-200 [&_code_span]:text-pretty\" [ngClass]=\"classes()\">\n @if (enableCopy()) {\n <button\n class=\"absolute top-[10px] right-[10px] z-10 hidden group-hover/code:block\"\n variant=\"ghost\"\n size=\"xs\"\n title=\"Copy to clipboard\"\n (click)=\"copy($event)\">\n @if (hasCopied()) {\n <circlecheck />\n } @else {\n <clipboardicon />\n }\n </button>\n }\n\n <div #shikiContainer>\n <ng-content></ng-content>\n </div>\n </article>\n `\n})\nexport class ShikiCodeComponent implements AfterViewInit {\n private shiki = inject(ShikiHighlighterService);\n private readonly el = inject(ElementRef<HTMLElement>);\n\n lang = input.required<string>();\n enableCopy = input<boolean>(true);\n classes = input<string>('');\n\n copySuccess = output<string>();\n copyError = output<unknown>();\n\n private readonly shikiContainer = viewChild.required('shikiContainer', { read: ElementRef<HTMLDivElement> });\n\n private readonly copyState = createCopyState();\n protected readonly hasCopied = this.copyState.hasCopied;\n private rawCode = '';\n\n async ngAfterViewInit() {\n const codeEl = this.el.nativeElement.querySelector('code');\n if (!this.lang() || !codeEl) return;\n\n // extract raw code\n this.rawCode = this.extractRawCode(codeEl);\n\n // if pre.shiki already present, skip highlighting (pre-highlighted by markdownit plugin)\n if (this.hasPreRenderedShiki()) return;\n\n // remove projected code node\n codeEl.remove();\n\n // highlight with Shiki\n const html = await this.shiki.highlight(this.rawCode, this.lang());\n\n // inject Shiki output\n this.shikiContainer().nativeElement.insertAdjacentHTML('beforeend', html);\n }\n\n async copy(event: Event) {\n event.stopPropagation();\n\n try {\n await this.copyState.copy(this.rawCode);\n this.copySuccess.emit(this.rawCode);\n } catch (err) {\n this.copyError.emit(err);\n }\n }\n\n private hasPreRenderedShiki(): boolean {\n return !!this.el.nativeElement.querySelector('pre.shiki');\n }\n\n private extractRawCode(codeEl: HTMLElement): string {\n // clone to avoid touching live DOM\n const clone = codeEl.cloneNode(true) as HTMLElement;\n\n return clone.textContent ?? '';\n }\n}\n","import { Component, ElementRef, inject, input } from '@angular/core';\n\nimport { createAgentEvent } from '../../types';\nimport { ShikiCodeComponent } from '../../shiki';\n\n@Component({\n selector: 'code-block',\n imports: [ShikiCodeComponent],\n template: `\n <shiki-code [lang]=\"language()\" (copySuccess)=\"onCopySuccess($event)\">\n <ng-content></ng-content>\n </shiki-code>\n `\n})\nexport class CodeBlockComponent {\n private readonly el = inject(ElementRef);\n\n readonly language = input<string>('');\n\n onCopySuccess(text: string) {\n this.dispatchEvent(text);\n }\n\n private dispatchEvent(text: string) {\n this.el.nativeElement.dispatchEvent(createAgentEvent('COPY_CODE_BLOCK', { text }));\n }\n}\n","import { DatePipe } from '@angular/common';\r\nimport { Component, computed, inject, input } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { Article } from '@sinequa/atomic';\r\nimport { ChevronRightIcon, FileIcon, Separator } from '@sinequa/ui';\r\nimport { ContextDocument } from '../../messages';\r\nimport { Reference } from '../../stores/reference-cache.feature';\r\n\r\n@Component({\r\n selector: 'InlineDocumentCard, inline-document-card',\r\n imports: [FileIcon, Separator, ChevronRightIcon, DatePipe],\r\n template: `\r\n <header class=\"grid w-full grid-cols-[16px_auto] items-center gap-1\">\r\n <FileIcon class=\"text-primary\" />\r\n <aside class=\"line-clamp-1 flex w-full flex-row items-center gap-2 truncate\">\r\n @let dateValue = date();\r\n @if (dateValue) {\r\n <p class=\"text-primary-foreground-muted text-sm\">{{ dateValue | date: 'd MMM y' }}</p>\r\n <Separator orientation=\"vertical\" class=\"text-primary\" />\r\n }\r\n <span class=\"text-primary-foreground-muted flex w-full flex-row items-center gap-0.5 truncate\">\r\n @for (segment of segments(); track segment) {\r\n <span class=\"text-sm\" [class.truncate]=\"!$last\">{{ segment }}</span>\r\n @if ($index < segments().length - 1) {\r\n <ChevronRightIcon class=\"size-3 shrink-0\" />\r\n }\r\n }\r\n </span>\r\n </aside>\r\n </header>\r\n\r\n <p class=\"line-clamp-3 font-medium\">{{ title() }}</p>\r\n\r\n @if (summary(); as summary) {\r\n <main class=\"text-primary-foreground-base line-clamp-3 text-sm\">\r\n {{ summary }}\r\n </main>\r\n } @else if (sanitizedSummary(); as summary) {\r\n <main class=\"text-primary-foreground-base line-clamp-3 text-sm\" [innerHTML]=\"summary\"></main>\r\n }\r\n `,\r\n host: {\r\n class: 'hover:bg-secondary-lightest active:bg-secondary-lighter flex flex-col rounded-xl p-1 px-2.5 py-2',\r\n role: 'button'\r\n }\r\n})\r\nexport class InlineDocumentCardComponent {\r\n private readonly domSanitizer = inject(DomSanitizer);\r\n\r\n readonly document = input<ContextDocument | undefined>();\r\n readonly article = input<Article | undefined>();\r\n readonly reference = input<Reference | undefined>();\r\n\r\n readonly title = computed(\r\n () =>\r\n this.document()?.metas.title ??\r\n this.article()?.displayTitle ??\r\n this.article()?.title ??\r\n this.reference()?.metas.title\r\n );\r\n\r\n readonly date = computed(\r\n () => this.document()?.metas.date ?? this.article()?.modified ?? this.reference()?.metas.modified\r\n );\r\n\r\n readonly segments = computed(\r\n () =>\r\n ((this.document()?.id ?? this.article()?.id ?? this.reference()?.id) as string)\r\n ?.split('|')[0]\r\n .split('/')\r\n .slice(1, -1) ?? []\r\n );\r\n\r\n readonly summary = computed(() => this.document()?.metas.summary);\r\n\r\n readonly sanitizedSummary = computed(() => {\r\n const text = this.article()?.matchingpassages?.passages?.[0]?.highlightedText;\r\n return text ? this.domSanitizer.bypassSecurityTrustHtml(text) : null;\r\n });\r\n}\r\n","import { afterNextRender, Component, computed, DestroyRef, inject, input } from '@angular/core';\r\n\r\nimport { CustomHighlights } from '@sinequa/atomic';\r\nimport { PreviewService, SelectionStore } from '@sinequa/atomic-angular';\r\nimport { LinkIcon, MenuComponent, MenuContentComponent } from '@sinequa/ui';\r\n\r\nimport { AgentsStore } from '../../stores/agents.store';\r\nimport { InlineReference } from '../../types';\r\nimport { InlineDocumentCardComponent } from './inline-document-card';\r\n\r\n@Component({\r\n selector: 'inline-reference',\r\n imports: [LinkIcon, MenuComponent, MenuContentComponent, InlineDocumentCardComponent],\r\n template: `\r\n <Menu>\r\n <LinkIcon class=\"text-accent-foreground [&_svg]:size-3\" />\r\n <MenuContent\r\n position=\"bottom-start\"\r\n class=\"border-menu-border bg-menu-bg rounded-xl border px-2 py-1.5 shadow-lg\"\r\n [style.--z-menu]=\"'var(--z-popup)'\"\r\n [style.min-width]=\"'min(340px, 90vw)'\">\r\n <ul class=\"m-0! flex flex-col gap-3 [&>li]:!p-0 [&>li]:!mb-0 [&>li::before]:!content-none\">\r\n @for (ref of references(); track $index) {\r\n <li>\r\n <InlineDocumentCard [reference]=\"agentsStore.referenceCache()[ref.id]\" (click)=\"select($index)\" />\r\n </li>\r\n }\r\n </ul>\r\n </MenuContent>\r\n </Menu>\r\n `,\r\n host: {\r\n class: 'inline-block bg-accent-alt rounded-full p-1 relative top-1',\r\n role: 'button'\r\n }\r\n})\r\nexport class InlineReferenceComponent {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly selectionStore = inject(SelectionStore);\r\n private readonly previewService = inject(PreviewService);\r\n protected readonly agentsStore = inject(AgentsStore);\r\n\r\n readonly rawData = input<string, string>('', {\r\n alias: 'data-references',\r\n transform: (value: string) => {\r\n let altered = value\r\n .replace(/&quot;/g, '\"')\r\n .replace(/&#39;/g, \"'\")\r\n .replace(/&lt;/g, '<')\r\n .replace(/&gt;/g, '>')\r\n .replace(/&amp;/g, '&');\r\n return altered;\r\n }\r\n });\r\n\r\n readonly references = computed(() => {\r\n const valid: InlineReference[] = [];\r\n\r\n for (const ref of this.rawData().split(';')) {\r\n const trimmed = ref.trim();\r\n if (!trimmed) continue;\r\n\r\n const match = trimmed.match(/^\"([^\"]*)\",(\\d+),(\\d+)$/);\r\n if (!match) {\r\n console.error(`[InlineReference] Malformed reference: \"${trimmed}\"`);\r\n } else {\r\n const [, id, offset, length] = match;\r\n valid.push({ id, offset: parseInt(offset, 10), length: parseInt(length, 10) } as InlineReference);\r\n }\r\n }\r\n\r\n return valid;\r\n });\r\n readonly highlights = computed(\r\n () => this.references().map(ref => ({ offset: ref.offset, length: ref.length })) as CustomHighlights['highlights']\r\n );\r\n\r\n readonly controller = new AbortController();\r\n private selectedIndex = 0;\r\n\r\n listen = (event: MessageEvent) => {\r\n const message = event.data;\r\n if (message.type !== 'ready') return;\r\n\r\n this.previewService.sendMessage({\r\n action: 'select',\r\n id: `agentInlineReference_${this.selectedIndex}`,\r\n usePassageHighlighter: true\r\n });\r\n };\r\n\r\n constructor() {\r\n afterNextRender(() => window.addEventListener('message', this.listen, { signal: this.controller.signal }));\r\n this.destroyRef.onDestroy(() => this.controller.abort());\r\n }\r\n\r\n select(index: number) {\r\n this.selectedIndex = index;\r\n\r\n this.selectionStore.update({\r\n id: this.references()[index].id,\r\n previewHighlights: {\r\n highlights: [\r\n {\r\n category: 'agentInlineReference',\r\n highlights: this.highlights()\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n}\r\n","import { Component, ElementRef, inject } from '@angular/core';\n\nimport { ButtonComponent, CircleCheckIconComponent, ClipboardIcon, DownloadIcon } from '@sinequa/ui';\n\nimport { AgentEventId, createAgentEvent } from '../../types';\nimport { createCopyState } from '../../utils';\n\n@Component({\n selector: 'table-wrapper',\n imports: [ButtonComponent, ClipboardIcon, CircleCheckIconComponent, DownloadIcon],\n template: `\n <article class=\"group/table relative rounded-md p-3\">\n <aside class=\"absolute top-[10px] right-[10px] flex hidden gap-2 group-hover/table:flex\">\n <button variant=\"ghost\" size=\"xs\" title=\"Copy to clipboard\" (click)=\"copyAsCSV($event)\">\n @if (hasCopied()) {\n <CircleCheck />\n } @else {\n <ClipboardIcon />\n }\n </button>\n\n <button variant=\"ghost\" size=\"xs\" title=\"Download\" (click)=\"downloadAsCSV()\">\n <DownloadIcon />\n </button>\n </aside>\n\n <ng-content></ng-content>\n </article>\n `\n})\nexport class TableWrapperComponent {\n private readonly el = inject(ElementRef<HTMLElement>);\n\n private readonly copyState = createCopyState();\n protected readonly hasCopied = this.copyState.hasCopied;\n\n async copyAsCSV(event: Event) {\n event.stopPropagation();\n\n const data = this.extractCSV();\n\n await this.copyState.copy(data);\n\n this.dispatchEvent('COPY_TABLE_AS_CSV', data);\n }\n\n downloadAsCSV() {\n const data = this.extractCSV();\n\n // UTF-8 byte order mask for encoding\n const bom = '\\uFEFF';\n const blob = new Blob([bom + data], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n\n link.href = URL.createObjectURL(blob);\n link.download = `AI-generated-table-${timestamp}.csv`;\n link.click();\n URL.revokeObjectURL(link.href);\n link.remove();\n\n // emit event\n this.dispatchEvent('DOWNLOAD_TABLE_AS_CSV', data);\n }\n\n private extractCSV(): string {\n const table = this.el.nativeElement.querySelector('table') as HTMLTableElement | null;\n\n if (!table) return '';\n\n return Array.from(table.rows)\n .map(row =>\n Array.from(row.cells)\n .map(cell => `\"${cell.textContent?.trim() ?? ''}\"`)\n .join(',')\n )\n .join('\\n');\n }\n\n private dispatchEvent(id: AgentEventId, text: string) {\n this.el.nativeElement.dispatchEvent(createAgentEvent(id, { text }));\n }\n}\n","import type MarkdownIt from 'markdown-it';\n\nexport function markdownItCodeBlockPlugin(md: MarkdownIt) {\n const defaultFenceRenderer = md.renderer.rules.fence!;\n\n md.renderer.rules.fence = (tokens, idx, options, env, self) => {\n const token = tokens[idx];\n const info = token.info ? md.utils.unescapeAll(token.info).trim() : '';\n const language = info.split(/(\\s+)/g)[0];\n const defaultRendered = defaultFenceRenderer(tokens, idx, options, env, self);\n\n // We add a wrapper and a copy button.\n // The button will have an attribute `[copy-to-clipboard]` which can be\n // handled by an Angular directive to implement the copy functionality.\n // The code to be copied is projected into the component.\n return `<code-block language=\"${language}\">${defaultRendered}</code-block>`;\n };\n}\n","import type MarkdownIt from 'markdown-it';\nimport StateInline from 'markdown-it/lib/rules_inline/state_inline.mjs';\n\nexport function markdownItInlineReferencePlugin(md: MarkdownIt) {\n function tokenizeInlineReference(state: StateInline, silent: boolean) {\n // Perform the \"no match\" checks before the silent gate.\n // These are fragile and must run regardless of mode so the parser\n // can correctly reason about boundaries during lookahead.\n\n // search opening\n const start = state.pos;\n const marker = state.src.slice(start, start + 5);\n if (marker !== ':ref[') return false;\n\n // search closing\n const end = state.src.indexOf(']', start + 5);\n if (end === -1) return false;\n\n // At this point we have confirmed a match. In silent mode the parser is\n // only probing — e.g. when validating emphasis spans like **[[ref]]** it\n // calls rules with silent=true to locate boundaries without side-effects.\n // We must NOT push tokens in that case, but we MUST advance state.pos and\n // return true so the parser knows this range is consumed.\n // Returning false in silent mode caused markdown-it\n // to treat [[ as free text during lookahead, which could misplace emphasis\n // or other inline markers that wrap an inline-reference.\n // TODO : if we should be super strict on this or allow **[[ref]]** for example\n if (!silent) {\n // add self-closing token with content\n const content = state.src.slice(start + 5, end).trim();\n const token = state.push('inline_reference', '', 0);\n token.content = content;\n }\n\n state.pos = end + 1;\n return true;\n }\n\n md.inline.ruler.before('emphasis', 'inline_reference', tokenizeInlineReference);\n\n md.renderer.rules['inline_reference'] = (tokens, idx) => {\n // md.utils.escapeHtml replaces &, <, >, \" and ' with their HTML entities.\n // Without this, an LLM-generated reference id containing a double-quote\n // would break out of the attribute — e.g. the content:\n // doc\"id;0;10\n // would render as:\n // <inline-reference data-references=\"doc\"id;0;10\"></inline-reference>\n // which is invalid HTML and could be exploited for attribute injection.\n const content = md.utils.escapeHtml(tokens[idx].content);\n return `<inline-reference data-references=\"${content}\"></inline-reference>`;\n };\n}\n","import type MarkdownIt from 'markdown-it';\n\n/**\n * This plugin wraps the default link renderer to add `target=\"_blank\"` and\n * `rel=\"noopener noreferrer\"` attributes to all links.\n */\nexport function markdownItLinkPlugin(md: MarkdownIt) {\n const defaultRender =\n md.renderer.rules['link_open'] ||\n function (tokens, idx, options, env, self) {\n return self.renderToken(tokens, idx, options);\n };\n\n md.renderer.rules['link_open'] = function (tokens, idx, options, env, self) {\n tokens[idx].attrPush(['target', '_blank']);\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n\n // pass token to default renderer.\n return defaultRender(tokens, idx, options, env, self);\n };\n}\n","import type MarkdownIt from 'markdown-it';\nimport { RenderRule } from 'markdown-it/lib/renderer.mjs';\n\n/**\n * This plugin adds the `markdown-list` CSS class to root-level bullet and\n * ordered lists rendered by markdown-it, enabling scoped styling without\n * wrapping the list in an extra element.\n */\nexport function markdownItListPlugin(md: MarkdownIt) {\n const addListClass: RenderRule = (tokens, idx, options, _env, self) => {\n if (tokens[idx].level === 0) {\n tokens[idx].attrPush(['class', 'markdown-list']);\n }\n return self.renderToken(tokens, idx, options);\n };\n\n md.renderer.rules['bullet_list_open'] = addListClass;\n md.renderer.rules['ordered_list_open'] = addListClass;\n}\n\n","import type MarkdownIt from 'markdown-it';\n\n/**\n * This plugin wraps the default table renderer into a custom `<table-wrapper>`\n * tag.\n */\nexport function markdownItTableWrapperPlugin(md: MarkdownIt) {\n const defaultRender =\n md.renderer.rules['table_open'] || ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options));\n\n md.renderer.rules['table_open'] = (tokens, idx, options, env, self) => {\n return `<table-wrapper>` + defaultRender(tokens, idx, options, env, self);\n };\n\n const defaultClose =\n md.renderer.rules['table_close'] || ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options));\n\n md.renderer.rules['table_close'] = (tokens, idx, options, env, self) => {\n return defaultClose(tokens, idx, options, env, self) + `</table-wrapper>`;\n };\n}\n","import MarkdownIt from 'markdown-it';\nimport { Chart, registerables } from 'chart.js'\n\nChart.register(...registerables);\n/**\n * Markdown-it plugin to replace ```chartjs fenced blocks\n * with <chart-plot> custom elements.\n */\nexport function markdownItChartJsPlugin(md: MarkdownIt) {\n const defaultFence = md.renderer.rules.fence!;\n\n md.renderer.rules.fence = (tokens, idx, options, env, self) => {\n const token = tokens[idx];\n\n // Only process fenced blocks labeled 'chartjs'\n if (token.info.trim() !== 'chartjs') return defaultFence(tokens, idx, options, env, self);\n\n const content = token.content.trim();\n return `<chart-plot>${content}</chart-plot>`;\n };\n}\n","import { Component, effect, inject, input, signal, ViewEncapsulation } from '@angular/core';\n\nimport { SafeHtmlPipe } from '../pipes/safe-html.pipe';\nimport { RendererService } from '../services/renderer.service';\n\nconst GROUPING_REGEX =\n /^<!--[\\s\\S]*?-->|^<[a-z0-9][\\w-]*(?:\\s+[^>]*)?\\/>|^<([a-z0-9][\\w-]*)(?:\\s+[^>]*)?>[\\s\\S]*?<\\/\\1>/gim;\n\n@Component({\n selector: 'SmartRenderer, smartrenderer, smart-renderer',\n imports: [SafeHtmlPipe],\n template: `\n <div [innerHTML]=\"safe() | safeHtml\"></div>\n <div [innerHTML]=\"processing() | safeHtml\"></div>\n `,\n styleUrls: ['./markdown.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SmartRendererComponent {\n private readonly rendererService = inject(RendererService);\n\n // Entire message content with the delta\n readonly message = input<string | null | undefined>(undefined);\n readonly context = input<any | null>(null);\n\n readonly done = input<boolean>(false);\n\n readonly safe = signal<string>('');\n readonly processing = signal<string>('');\n\n private renderer = this.rendererService.renderer;\n\n // High order last slice index, ie. where next message() should be truncated\n // to avoid re-rendering the same content.\n private lastSliceIndex = 0;\n // Local slice index to keep track of the current message's content\n private localSliceIndex = 0;\n\n constructor() {\n effect(() => this.messageUpdated());\n effect(() => {\n if (this.done()) {\n this.safe.update(v => v + this.processing());\n this.processing.set('');\n }\n });\n }\n\n messageUpdated() {\n // render delta from last sliced message\n const html = this.renderer.render(this.message() ?? '', this.context())?.slice(this.lastSliceIndex);\n // split the html into blocks of first level tags\n const blocks = html.match(GROUPING_REGEX);\n\n // no blocks, nothing to process\n if (!blocks || blocks.length === 0) return;\n\n if (blocks.length > 1) {\n this.localSliceIndex = html.lastIndexOf(blocks.at(-1)!);\n this.lastSliceIndex += this.localSliceIndex;\n\n this.safe.update(v => v + html.slice(0, this.localSliceIndex));\n this.processing.set(html.slice(this.localSliceIndex));\n } else {\n this.processing.set(blocks[0]);\n }\n }\n}\n","import { Component, ComponentRef, ElementRef, inject } from '@angular/core';\n\nimport { MessageComponentType } from '../types';\nimport { MessageList } from './message-list';\n\n/**\n * This class allows {@link MessageList} to keep track of any instantiated message component,\n * and calls their {@link ComponentRef.destroy} lifecycle hooks when {@link MessageList} needs to be cleared.\n */\n@Component({\n selector: 'abstract-base-message',\n template: `<div>You should not see this</div>`\n})\nexport abstract class MessageBaseComponent {\n protected readonly el = inject(ElementRef);\n\n abstract getMessageId(): string | undefined;\n\n abstract getType(): MessageComponentType;\n\n protected dispatchEvent(event: CustomEvent) {\n this.el.nativeElement.dispatchEvent(event);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DebugMessageProperties, Message } from '../types';\n\n@Injectable()\nexport class MessageService {\n readonly stream$ = new BehaviorSubject<Message | undefined>(undefined);\n readonly debugStream$ = new BehaviorSubject<DebugMessageProperties | undefined>(undefined);\n\n next(message: Message) {\n this.stream$.next(message);\n }\n\n nextDebug(debug: DebugMessageProperties) {\n this.debugStream$.next(debug);\n }\n\n complete() {\n this.stream$.complete();\n }\n\n completeDebug() {\n this.debugStream$.complete();\n }\n}\n","import { Component, computed, inject, input, output } from '@angular/core';\n\nimport { DebugIcon, RefreshIcon, ThumbsUpIcon, TooltipDirective } from '@sinequa/ui';\n\nimport { AgentService } from '../../agent';\nimport { ButtonComponent } from '../../overrides';\nimport { MessageAgentActionEvent } from '../../types';\nimport { CopyIcon } from '../../overrides/icons/copy.icon';\n\n@Component({\n selector: 'MessageAgentToolbar,message-agent-toolbar,messageagenttoolbar',\n imports: [DebugIcon, RefreshIcon, ThumbsUpIcon, ButtonComponent, CopyIcon, TooltipDirective],\n template: `\n <ul class=\"flex items-center py-1\">\n <li>\n <button tooltip=\"Copy\" tooltip-position=\"bottom\" variant=\"ghost\" size=\"icon\" (click)=\"copyMessageToClipboard()\">\n <copy-icon class=\"size-4\" />\n </button>\n </li>\n\n <li>\n <button\n variant=\"ghost\"\n tooltip=\"Try again\"\n tooltip-position=\"bottom\"\n size=\"icon\"\n [disabled]=\"agentService.isAgentGenerating()\"\n (click)=\"regenerateMessage()\">\n <RefreshIcon class=\"size-4\" />\n </button>\n </li>\n\n <li>\n <button\n variant=\"ghost\"\n tooltip=\"Good response\"\n tooltip-position=\"bottom\"\n size=\"icon\"\n [disabled]=\"hasFeedback() || agentService.isAgentGenerating()\"\n (click)=\"likeMessage()\">\n <ThumbsUpIcon class=\"size-4\" [fill]=\"hasPositiveFeedback()\" />\n </button>\n </li>\n\n <li>\n <button\n variant=\"ghost\"\n tooltip=\"Bad response\"\n tooltip-position=\"bottom\"\n size=\"icon\"\n [disabled]=\"hasFeedback() || agentService.isAgentGenerating()\"\n (click)=\"dislikeMessage()\">\n <ThumbsUpIcon class=\"size-4 -scale-100\" [fill]=\"hasNegativeFeedback()\" />\n </button>\n </li>\n\n @if (showDebugButton()) {\n <li>\n <button tooltip=\"Debug\" tooltip-position=\"bottom\" variant=\"ghost\" size=\"icon\" (click)=\"debugMessage()\">\n <DebugIcon class=\"size-4\" />\n </button>\n </li>\n }\n </ul>\n `\n})\nexport class MessageAgentToolbar {\n protected readonly agentService = inject(AgentService);\n\n readonly showDebugButton = input(false);\n readonly feedback = input<'positive' | 'negative' | undefined>(undefined);\n\n readonly action = output<MessageAgentActionEvent>();\n\n readonly hasPositiveFeedback = computed(() => this.feedback() === 'positive');\n readonly hasNegativeFeedback = computed(() => this.feedback() === 'negative');\n readonly hasFeedback = computed(() => this.hasPositiveFeedback() || this.hasNegativeFeedback());\n\n copyMessageToClipboard() {\n this.action.emit({ origin: 'agent', action: 'copy' });\n }\n\n regenerateMessage() {\n this.action.emit({ origin: 'agent', action: 'regenerate' });\n }\n\n likeMessage() {\n this.action.emit({ origin: 'agent', action: 'like' });\n }\n\n dislikeMessage() {\n this.action.emit({ origin: 'agent', action: 'dislike' });\n }\n\n debugMessage() {\n this.action.emit({ origin: 'agent', action: 'debug' });\n }\n}\n","import { Component, computed, DestroyRef, inject, input, linkedSignal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { SmartRendererComponent } from '../../smart-renderer';\nimport { AGENT_ACTION_EVENT_NAME, Message, MessageAgentAction, MessageAgentActionEvent, MessageComponentType } from '../../types';\nimport { flattenMessageContent } from '../../utils/message';\nimport { MessageBaseComponent } from '../message-base';\nimport { MessageService } from '../message.service';\nimport { MessageAgentToolbar } from './message-agent-toolbar';\n\n@Component({\n selector: 'MessageAgent,message-agent,messageagent',\n providers: [MessageService],\n imports: [SmartRendererComponent, MessageAgentToolbar],\n template: `\n @if (!hideContent()) {\n <div class=\"flex w-fit max-w-full flex-col items-start gap-2\">\n @if (!!flattenedContent()) {\n <SmartRenderer [message]=\"flattenedContent()\" [done]=\"done()\" />\n }\n </div>\n }\n\n @if (!hideToolbar()) {\n <MessageAgentToolbar\n class=\"flex items-center group-data-locked:!hidden\"\n [showDebugButton]=\"showDebugButton()\"\n [feedback]=\"feedback()\"\n (action)=\"messageAction($event)\" />\n }\n `,\n host: {\n class: 'group flex flex-col gap-2 data-locked:opacity-60'\n }\n})\nexport class MessageAgentComponent extends MessageBaseComponent {\n private readonly messageService = inject(MessageService);\n\n readonly message = signal<Message | undefined>(undefined);\n readonly done = signal<boolean>(false);\n readonly showToolbar = signal<boolean>(false);\n readonly showDebugPanel = signal<boolean>(false);\n readonly showDebugButton = signal<boolean>(false);\n /**\n * When true, the toolbar is not rendered. Used by MessageList to suppress the toolbar\n * on intermediate text segments, repositioning it below tool/approval cards instead.\n */\n readonly hideToolbar = input<boolean>(false);\n /**\n * When true, the text content is not rendered. Used by MessageList to insert a\n * toolbar-only ghost component after tool/approval cards — the component carries\n * the message data for copy/regenerate actions without duplicating visible text.\n */\n readonly hideContent = input<boolean>(false);\n /**\n * Character offset into the flattened text. The backend accumulates all streamed text\n * into a single growing string; when a tool call splits the stream mid-turn, the next\n * visual component skips the already-displayed prefix by slicing from this offset.\n * Set to 0 (default) when no split occurred.\n */\n readonly textOffset = input<number>(0);\n\n readonly messageId = linkedSignal(() => this.message()?.messageId);\n readonly flattenedContent = computed(() => {\n const full = flattenMessageContent(this.message()?.contents);\n const offset = this.textOffset();\n return offset > 0 ? full.slice(offset) : full;\n });\n readonly feedback = linkedSignal<'positive' | 'negative' | undefined>(\n () => this.message()?.additionalProperties?.$userFeedback?.type\n );\n\n constructor() {\n super();\n\n this.messageService.stream$.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe({\n // here payload contains the whole message with the delta appended to the content\n next: message => this.message.set(message),\n complete: () => this.done.set(true)\n });\n }\n\n // used by message list component to feed message\n getService(): MessageService {\n return this.messageService;\n }\n\n override getMessageId(): string | undefined {\n return this.messageId();\n }\n\n override getType(): MessageComponentType {\n return 'agent';\n }\n\n messageAction(event: MessageAgentActionEvent) {\n switch (event.action) {\n case 'copy':\n case 'like':\n case 'dislike':\n case 'regenerate':\n case 'debug':\n this.dispatchMessageAction(event.action);\n break;\n }\n }\n\n debugMessage() {\n this.showDebugPanel.set(!this.showDebugPanel());\n }\n\n dispatchMessageAction(action: MessageAgentAction, includeMessage: boolean = true) {\n this.dispatchEvent(\n new CustomEvent<MessageAgentActionEvent>(AGENT_ACTION_EVENT_NAME, {\n detail: {\n origin: 'agent',\n action,\n message: includeMessage ? this.message() : undefined,\n callback: this.feedbackCallback.bind(this)\n },\n bubbles: true\n })\n );\n }\n\n feedbackCallback(payload?: object) {\n if (payload && 'action' in payload)\n if (payload.action === 'like') this.feedback.set('positive');\n else if (payload.action === 'dislike') this.feedback.set('negative');\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, take } from 'rxjs';\n\nimport { globalConfig } from '@sinequa/atomic';\n\nimport { AGENT_REST_ENDPOINT } from '../../constants';\nimport { DebugMessageListPayload } from '../../types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DebugService {\n private readonly http = inject(HttpClient);\n\n /**\n * Returns an {@link Observable} that emits the debug messages identified by `chatId`, `executionId` and `debugMessageId`.\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatId - The id of the chat.\n * @param executionId - The id of the execution.\n * @param debugMessageId - The id of the debug message.\n *\n * @returns An {@link Observable} that emits a {@link DebugMessageListPayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/debugmessagelist\n */\n getDebugMessages(chatId: string, executionId: string, debugMessageId: string) {\n return this.http\n .post<DebugMessageListPayload>(`${globalConfig.backendUrl}/api/v1/dev.plugin?plugin=${AGENT_REST_ENDPOINT}`, {\n action: 'debugMessageList',\n chatId,\n executionId,\n debugMessageId\n })\n .pipe(take(1));\n }\n}\n","import { JsonPipe } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nimport { DebugDisplayItemKV } from '../../types';\nimport { ShikiCodeComponent } from '../../shiki';\n\n@Component({\n selector: 'MessageDebugKV,message-debug-kv,messagedebugkv',\n imports: [JsonPipe, ShikiCodeComponent],\n template: `\n <tr class=\"grid grid-cols-[150px_1fr] gap-4 overflow-auto\">\n <th class=\"text-right\">{{ row().data.key }}</th>\n <td class=\"overflow-auto\">\n <shiki-code [lang]=\"'json'\" [classes]=\"'max-h-[150px] max-w-full overflow-auto'\">\n <code>{{ row().data.value | json }}</code>\n </shiki-code>\n </td>\n </tr>\n `\n})\nexport class MessageDebugKVComponent {\n readonly row = input.required<DebugDisplayItemKV>();\n}\n","import { Component, input } from '@angular/core';\n\nimport { CastToDebugKVPipe, CastToDebugListPipe } from '../../pipes';\nimport { DebugDisplayItemList } from '../../types';\n\nimport { MessageDebugKVComponent } from './message-debug-kv';\n\n@Component({\n selector: 'MessageDebugList,message-debug-list,messagedebuglist',\n imports: [CastToDebugKVPipe, CastToDebugListPipe, MessageDebugKVComponent],\n template: `\n @for (row of content().items; track $index) {\n @switch (row.type) {\n @case ('KV') {\n <MessageDebugKV [class]=\"$even ? 'bg-background/50' : ''\" [row]=\"row | castToDebugKV\" />\n }\n @case ('LIST') {\n @let list = row | castToDebugList;\n <div class=\"overflow-auto\">\n <details class=\"w-full\">\n <summary>\n {{ list.name }}\n </summary>\n <table class=\"w-full overflow-auto ml-4\">\n <MessageDebugList [content]=\"list\" />\n </table>\n </details>\n </div>\n }\n }\n }\n `,\n host: {\n class: 'flex flex-col gap-4'\n }\n})\nexport class MessageDebugListComponent {\n readonly content = input.required<DebugDisplayItemList>();\n}\n","import { Component, effect, inject, input, signal } from '@angular/core';\r\nimport { finalize, map } from 'rxjs';\r\nimport { LoadingCircleIconComponent } from '@sinequa/ui';\r\n\r\nimport { DebugMessage, DebugMessageProperties } from '../../types';\r\n\r\nimport { DebugService } from './debug.service';\r\nimport { MessageDebugKVComponent } from './message-debug-kv';\r\nimport { MessageDebugListComponent } from './message-debug-list';\r\n\r\n@Component({\r\n selector: 'MessageDebugDetails,message-debug-details,messagedebugdetails',\r\n imports: [MessageDebugListComponent, MessageDebugKVComponent, LoadingCircleIconComponent],\r\n template: `\r\n @if (loading()) {\r\n <LoadingCircle class=\"size-6 animate-spin mx-auto my-2\" />\r\n } @else {\r\n <table\r\n class=\"flex flex-col gap-4 overflow-auto [&_th]:truncate [&_th]:text-left [&_th]:font-medium [&_th]:text-nowrap\">\r\n @for (debug of details(); track $index) {\r\n @switch (debug.content.type) {\r\n @case ('LIST') {\r\n <MessageDebugList [content]=\"debug.content\" />\r\n }\r\n @case ('KV') {\r\n <MessageDebugKV [row]=\"debug.content\" />\r\n }\r\n }\r\n }\r\n </table>\r\n }\r\n `,\r\n host: {\r\n class: 'flex flex-col gap-4'\r\n }\r\n})\r\nexport class MessageDebugDetailsComponent {\r\n private readonly debugMessageService = inject(DebugService);\r\n\r\n readonly message = input<DebugMessageProperties | undefined>();\r\n\r\n readonly details = signal<DebugMessage[]>([]);\r\n readonly loading = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.message()?.chatId || !this.message()?.executionId || !this.message()?.debugMessageId) return;\r\n\r\n this.loading.set(true);\r\n this.details.set([]);\r\n this.debugMessageService\r\n .getDebugMessages(this.message()!.chatId!, this.message()!.executionId!, this.message()!.debugMessageId!)\r\n .pipe(\r\n map(x => x.debugMessages),\r\n finalize(() => this.loading.set(false))\r\n )\r\n .subscribe({ next: x => this.details.set(x) });\r\n });\r\n }\r\n}\r\n","import { Component, input, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { DebugMessageProperties } from '../../types';\n\nimport { MessageDebugDetailsComponent } from './message-debug-details';\n\n@Component({\n selector: 'MessageDebugEntry,message-debug-entry,messagedebugentry',\n imports: [FormsModule, MessageDebugDetailsComponent],\n template: `\n <details (toggle)=\"onToggle($event)\">\n <summary>\n {{ message().title ?? 'Untitled message' }}\n </summary>\n\n @if (opened()) {\n <MessageDebugDetails class=\"mt-2\" [message]=\"message()\" />\n }\n </details>\n `\n})\nexport class MessageDebugEntryComponent {\n readonly message = input.required<DebugMessageProperties>();\n\n readonly opened = signal(false);\n\n onToggle(event: Event) {\n this.opened.set((event.target as HTMLDetailsElement).open);\n }\n}\n","import { Component, computed, DestroyRef, effect, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ChevronRightIcon } from '@sinequa/ui';\n\nimport { Agent } from '../../agent';\nimport { DebugMessageGroup, DebugMessageProperties, MessageComponentType } from '../../types';\nimport { MessageBaseComponent } from '../message-base';\nimport { MessageService } from '../message.service';\nimport { MessageDebugEntryComponent } from './message-debug-entry';\n\n@Component({\n selector: 'MessageDebug,message-debug,messagedebug',\n imports: [MessageDebugEntryComponent, ChevronRightIcon],\n providers: [MessageService],\n template: `\n @if (groups().length > 0) {\n <ol class=\"text-sm\">\n @for (group of groups(); track group.runId) {\n @if (group.messages.length === 1) {\n <li class=\"rounded-xl border p-4 mb-2 last:mb-0\" [class]=\"group.messages[0].isError ? 'border-red-200 bg-red-50' : 'border-gray-200 bg-gray-100'\">\n <MessageDebugEntry [message]=\"group.messages[0]\" />\n </li>\n } @else {\n <li class=\"rounded-xl border border-gray-200 overflow-hidden mb-2 last:mb-0\">\n <div class=\"flex items-center gap-2 px-4 py-3 bg-blue-100 cursor-pointer font-semibold select-none hover:bg-blue-200\" (click)=\"toggleGroup(group)\">\n <ChevronRightIcon class=\"size-3 transition-transform duration-200\" [class.rotate-90]=\"group.expanded\" />\n <span class=\"flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">{{ group.messages[0].title }} [{{ group.runId }}]</span>\n <span class=\"bg-gray-500 text-white rounded-full px-2 py-0.5 text-xs min-w-6 text-center\">{{ group.messages.length }}</span>\n </div>\n @if (group.expanded) {\n <ol class=\"px-4 py-3 bg-gray-100 list-none m-0\">\n @for (message of group.messages; track message.debugMessageId) {\n <li class=\"rounded-xl border p-4 mb-2 last:mb-0\" [class]=\"message.isError ? 'border-red-200 bg-red-50' : 'border-gray-200 bg-white'\">\n <MessageDebugEntry [message]=\"message\" />\n </li>\n }\n </ol>\n }\n </li>\n }\n }\n </ol>\n } @else {\n <p class=\"text-foreground/70 p-2 text-sm italic\">No debug information available.</p>\n }\n `,\n host: {\n class: 'data-[visible]:block hidden'\n }\n})\nexport class MessageDebugComponent extends MessageBaseComponent {\n private readonly messageService = inject(MessageService);\n private readonly agent = inject(Agent);\n\n readonly messageId = input<string | undefined>();\n\n readonly debugMessages = signal<DebugMessageProperties[]>([]);\n\n readonly groups = computed(() => {\n const messages = this.debugMessages();\n if (!messages.length) return [];\n\n const groupMap = new Map<string, DebugMessageProperties[]>();\n const order: string[] = [];\n\n for (const msg of messages) {\n const key = msg.runId || msg.executionId;\n if (!groupMap.has(key)) {\n groupMap.set(key, []);\n order.push(key);\n }\n groupMap.get(key)!.push(msg);\n }\n\n return order.map(key => ({\n runId: key,\n messages: groupMap.get(key)!,\n expanded: this.groupStateMap.get(key) ?? false\n }));\n });\n\n private readonly groupStateMap = new Map<string, boolean>();\n\n getService() {\n return this.messageService;\n }\n\n constructor() {\n super();\n\n this.messageService.debugStream$\n .pipe(takeUntilDestroyed(inject(DestroyRef)))\n .subscribe(debugMessages => debugMessages && this.debugMessages.set([...this.debugMessages(), debugMessages]));\n\n effect(async () => {\n if (!this.messageId()) return;\n\n const history = this.agent.getHistory();\n const message = history?.find(m => m.messageId === this.messageId());\n\n this.debugMessages.set(message?.additionalProperties?.$debug ? [...message.additionalProperties.$debug] : []);\n });\n\n }\n\n override getMessageId(): string | undefined {\n return this.messageId();\n }\n\n override getType(): MessageComponentType {\n return 'debug';\n }\n\n toggleGroup(group: DebugMessageGroup) {\n group.expanded = !group.expanded;\n this.groupStateMap.set(group.runId, group.expanded);\n }\n\n}\n","import { JsonPipe } from '@angular/common';\nimport { Component, computed, linkedSignal, signal } from '@angular/core';\n\nimport { ChevronDownIconComponent, CircleCheckIconComponent, Square, XMarkICon } from '@sinequa/ui';\n\nimport { ShikiCodeComponent } from '../../shiki';\nimport { AGENT_ACTION_EVENT_NAME, MessageAgentActionEvent, MessageComponentType, MessageContentFunctionApprovalRequest, MessageContentFunctionApprovalResponse, MessageContentFunctionCall, MessageContentFunctionResult } from '../../types';\nimport { ButtonComponent } from '../../overrides';\nimport { MessageBaseComponent } from '../message-base';\n\ntype FunctionData = {\n call: MessageContentFunctionCall;\n result?: MessageContentFunctionResult;\n approved?: boolean;\n};\n\n@Component({\n selector: 'MessageFunction,message-function,messagefunction',\n template: `\n @if (functionData(); as data) {\n <div class=\"my-1 rounded-2xl border p-4 transition-colors\" [class]=\"cardClass()\">\n\n <div class=\"flex cursor-pointer items-center gap-2 text-sm\" (click)=\"toggleOpen()\">\n @if (isError()) {\n <div class=\"bg-destructive flex size-5 shrink-0 items-center justify-center rounded-full\">\n <XMarkIcon class=\"text-neutral-foreground-white size-3\" />\n </div>\n } @else {\n @switch (approvalState()) {\n @case ('approved') {\n <CircleCheck class=\"size-4 text-green-500\" />\n }\n @case ('rejected') {\n <Square class=\"size-4 text-red-500\" [fill]=\"true\" />\n }\n }\n }\n\n @if (isError()) {\n <span class=\"text-destructive-foreground\">\n <span class=\"font-medium\">{{ data.call.name }}</span>\n - error occurred\n </span>\n } @else {\n <span class=\"text-primary-foreground-base\">\n Calling <span class=\"font-semibold\">{{ data.call.name }}</span>\n </span>\n }\n\n <span class=\"ms-auto flex items-center gap-2\">\n @if (!isError()) {\n @if (data.result?.executionTime; as time) {\n <span class=\"text-xs text-gray-500\">{{ time }}</span>\n } @else if (!data.result) {\n <span\n class=\"h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-gray-300 border-t-gray-600\"></span>\n }\n }\n <ChevronDown\n class=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n [class.text-destructive-foreground]=\"isError()\"\n [class.rotate-180]=\"isOpen()\" />\n </span>\n </div>\n\n <!-- Animated content -->\n <div\n class=\"grid transition-[grid-template-rows] duration-200\"\n [class.grid-rows-[0fr]]=\"!isOpen()\"\n [class.grid-rows-[1fr]]=\"isOpen()\">\n <div class=\"min-h-0 overflow-hidden\">\n <article\n class=\"flex flex-col gap-3 pt-3 transition-opacity duration-200\"\n [class.opacity-0]=\"!isOpen()\"\n [class.opacity-100]=\"isOpen()\">\n\n @if (isError()) {\n <hr class=\"text-stroke-destructive-muted opacity-20\" />\n }\n\n @if (argumentEntries().length > 0) {\n <ul class=\"flex flex-col gap-1\">\n @for (entry of argumentEntries(); track entry[0]) {\n @if (isError()) {\n <li\n class=\"text-destructive-foreground -mt-1 flex gap-0.5 rounded-lg bg-red-100 px-2.5 py-1.5 dark:bg-red-800\">\n <span class=\"font-medium\">{{ entry[0] }}</span>\n <span>:</span>\n <span class=\"font-normal\">{{ entry[1] }}</span>\n </li>\n } @else {\n <li>\n <p class=\"text-primary-foreground-base text-sm font-medium\">\n {{ entry[0] }}:\n <span\n class=\"bg-accent-alt text-accent-foreground rounded-full px-1 py-0.5 text-xs font-normal\">\n {{ entry[1] }}\n </span>\n </p>\n </li>\n }\n }\n </ul>\n }\n\n @if (showApprovalButtons()) {\n <div class=\"flex gap-2\">\n <button variant=\"primary\" (click)=\"answerApprovalRequest(true)\">Approve</button>\n <button variant=\"secondary\" (click)=\"answerApprovalRequest(false)\">Reject</button>\n </div>\n }\n\n @if (data.result; as result) {\n @if (isError()) {\n <p class=\"text-neutral-foreground-black -mt-1 leading-relaxed\">\n @if (typeof result.result === 'string') {\n {{ result.result }}\n } @else {\n {{ result.result | json }}\n }\n </p>\n } @else {\n <section class=\"bg-tool-card-widget flex w-full flex-col gap-2 rounded-2xl px-1 py-4\">\n <header class=\"text-primary-foreground-hovered flex items-center gap-2 px-3 text-sm\">\n Result\n </header>\n <div class=\"w-full px-2\">\n @if (typeof result.result === 'string') {\n <p class=\"whitespace-pre-wrap px-1 text-sm\">{{ result.result }}</p>\n } @else {\n <shiki-code [lang]=\"'json'\" [classes]=\"'max-w-full break-all'\">\n <code>{{ result.result | json }}</code>\n </shiki-code>\n }\n </div>\n </section>\n }\n }\n </article>\n </div>\n </div>\n </div>\n }\n `,\n imports: [\n JsonPipe,\n ShikiCodeComponent,\n Square,\n CircleCheckIconComponent,\n ChevronDownIconComponent,\n ButtonComponent,\n XMarkICon\n ],\n host: {\n class: 'data-locked:opacity-60 my-2 data-locked:pointer-events-none'\n }\n})\nexport class MessageFunctionComponent extends MessageBaseComponent {\n protected readonly showApprovalButtons = computed(() => this.pendingApproval() && !!this.functionData());\n protected readonly isError = computed(() => !!this.functionData()?.result?.isError);\n protected readonly argumentEntries = computed(() => Object.entries(this.functionData()?.call.arguments ?? {}));\n protected readonly cardClass = computed(() => {\n if (!this.isError()) return 'bg-tool-card border-tool-card-border hover:bg-tool-card-hovered';\n return this.isErrorOpen()\n ? 'bg-red-100/10 border-stroke-destructive-base'\n : 'bg-destructive-lightest border-stroke-destructive-muted hover:bg-red-100';\n });\n protected readonly approvalState = computed<'approved' | 'rejected' | null>(() => {\n const data = this.functionData();\n return data?.approved === undefined ? null : data?.approved ? 'approved' : 'rejected';\n });\n protected readonly isOpen = computed(() => this.isError() ? this.isErrorOpen() : this.isNormalOpen());\n\n readonly functionData = signal<FunctionData | undefined>(undefined);\n protected readonly pendingApproval = signal<boolean>(false);\n protected readonly isErrorOpen = signal(false);\n /** Auto-opens when approval is pending; can also be toggled by the user. */\n protected readonly isNormalOpen = linkedSignal(() => !!this.functionData() && this.pendingApproval());\n\n override getMessageId(): string | undefined {\n return this.functionData()?.call.callId;\n }\n\n override getType(): MessageComponentType {\n return 'function';\n }\n\n /**\n * Handles function call content and updates the component state to display the function call information.\n * @param content - The function call content.\n */\n call(content: MessageContentFunctionCall): void {\n this.functionData.set({ call: content });\n }\n\n /**\n * Handles function result content and updates the component state to display the function result information.\n * @param result - The function result content.\n */\n result(result: MessageContentFunctionResult): void {\n this.functionData.update(data => (data ? { ...data, result } : undefined));\n }\n\n /**\n * Handles function approval request content and updates the component state to display the approval request information.\n * @param content - The function approval request content.\n */\n approvalRequest(content: MessageContentFunctionApprovalRequest): void {\n this.functionData.set({\n call: { ...content.functionCall, $type: 'functionCall' },\n approved: undefined\n });\n this.pendingApproval.set(true);\n }\n\n /**\n * Handles function approval response content, updates the component state to reflect the approval decision,\n * and hides the pending approval state (buttons).\n * @param content - The function approval response content.\n */\n approvalResponse(content: MessageContentFunctionApprovalResponse): void {\n this.functionData.update(data => ({ ...data!, approved: content.approved }));\n this.pendingApproval.set(false);\n }\n\n /**\n * Handles the user's response to a function approval request,\n * dispatches an event with the approval decision,\n * and updates the component state accordingly.\n * @param approved - The user's approval decision.\n */\n protected answerApprovalRequest(approved: boolean): void {\n this.functionData.update(data => ({ ...data!, approved }));\n this.pendingApproval.set(false);\n this.dispatchApprovalAction(approved);\n }\n\n /** Toggles the open/closed state of the card based on its current type. */\n protected toggleOpen(): void {\n if (this.isError()) {\n this.isErrorOpen.update(v => !v);\n } else {\n this.isNormalOpen.update(v => !v);\n }\n }\n\n private dispatchApprovalAction(approved: boolean): void {\n this.dispatchEvent(\n new CustomEvent<MessageAgentActionEvent>(AGENT_ACTION_EVENT_NAME, {\n detail: {\n origin: 'agent',\n action: 'function_approval',\n approvalData: {\n $type: 'functionApprovalResponse',\n functionCall: this.functionData()!.call,\n approved,\n id: this.getMessageId()!\n }\n },\n bubbles: true\n })\n );\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { Article } from '@sinequa/atomic';\nimport { SelectionStore } from '@sinequa/atomic-angular';\nimport { ChevronRightIcon, FileIcon, Separator, TypeIcon } from '@sinequa/ui';\n\nimport { Reference } from '../../../../stores/reference-cache.feature';\nimport { ContextDocument } from './search.types';\n\n@Component({\n selector: 'DocumentCard, document-card, documentcard',\n imports: [FileIcon, Separator, ChevronRightIcon, TypeIcon, DatePipe],\n template: `\n <header class=\"grid grid-cols-[16px_auto] items-center gap-2 text-lg\">\n <FileIcon />\n <p class=\"truncate text-base\">{{ title() }}</p>\n </header>\n\n <aside class=\"line-clamp-1 flex flex-row items-center gap-2 truncate\">\n @if (date(); as date) {\n <p class=\"text-xs\">{{ date | date: 'd MMM y' }}</p>\n <Separator orientation=\"vertical\" class=\"text-primary\" />\n }\n\n <span class=\"flex flex-row items-center gap-1\">\n @for (segment of segments(); track segment) {\n <span class=\"text-xs\">{{ segment }}</span>\n\n @if ($index < segments().length - 1) {\n <ChevronRightIcon class=\"size-3\" />\n }\n }\n </span>\n </aside>\n\n @if (summary(); as summary) {\n <main class=\"text-primary-foreground-base line-clamp-2 text-sm\">\n {{ summary }}\n </main>\n } @else if (sanitizedSummary(); as summary) {\n <main class=\"text-primary-foreground-base line-clamp-2 text-sm\" [innerHTML]=\"summary\"></main>\n }\n `,\n host: {\n class: 'hover:bg-secondary-lightest active:bg-secondary-lighter flex flex-col rounded-xl p-1 px-3 py-2',\n '(click)': 'selectionStore.update({ id: document()?.id ?? article()?.id ?? reference()?.id, article: article() })'\n }\n})\nexport class DocumentCardComponent {\n private readonly domSanitizer = inject(DomSanitizer);\n readonly selectionStore = inject(SelectionStore);\n\n /** Most complete: agent answer document with typed metas and chunks. */\n readonly document = input<ContextDocument | undefined>();\n /** Sinequa query result with matching passages and highlighted text. */\n readonly article = input<Article | undefined>();\n /** Lightweight reference from the agent cache, title and date only. */\n readonly reference = input<Reference | undefined>();\n\n readonly title = computed(\n () =>\n this.document()?.metas.title ??\n this.article()?.displayTitle ??\n this.article()?.title ??\n this.reference()?.metas.title\n );\n readonly date = computed(\n () => this.document()?.metas.date ?? this.article()?.modified ?? this.reference()?.metas.modified\n );\n readonly segments = computed(\n () =>\n ((this.document()?.id ?? this.article()?.id ?? this.reference()?.id) as string)\n ?.split('|')[0]\n .split('/')\n .slice(1, -1) ?? []\n );\n // for document from agent answer\n readonly summary = computed(() => this.document()?.metas.summary);\n // for document from sinequa query\n readonly sanitizedSummary = computed(() =>\n this.domSanitizer.bypassSecurityTrustHtml(this.article()?.matchingpassages?.passages?.[0]?.highlightedText ?? '')\n );\n readonly matchCount = computed(\n () => this.document()?.chunks.length ?? this.article()?.matchingpassages?.passages?.length ?? 0\n );\n}\n\n","import { Component, computed, inject, signal } from '@angular/core';\n\nimport { ChevronDownIconComponent, CircleCheckIconComponent, FileIcon, LoadingCircleIconComponent, XMarkICon } from '@sinequa/ui';\n\nimport { AgentsStore } from '../../../../stores';\nimport { Reference } from '../../../../stores/reference-cache.feature';\nimport { MessageContentFunctionCall, MessageContentFunctionResult } from '../../../../types';\nimport { MessageFunctionComponent } from '../../message-function';\nimport { DocumentCardComponent } from './document-card';\nimport { SearchContext } from './search.types';\n\ntype Arguments = {\n document_id: string;\n chunk_offset: number;\n chunk_length: number;\n strategy: string;\n};\n\ntype Result = { context: string; error: string }[];\n\ntype FunctionData = {\n call: MessageContentFunctionCall & { arguments: Arguments };\n result?: MessageContentFunctionResult & { result: Result };\n approved: boolean;\n};\n\n@Component({\n selector: 'ReadDocumentFunction, read-document-function',\n imports: [\n ChevronDownIconComponent,\n DocumentCardComponent,\n FileIcon,\n LoadingCircleIconComponent,\n CircleCheckIconComponent,\n XMarkICon\n ],\n template: `\n @if (functionData(); as data) {\n <details\n class=\"group/read-doc-plugin bg-tool-card border-tool-card-border hover:bg-tool-card-hovered my-1 rounded-2xl border p-4 transition-colors\">\n <summary class=\"text-primary-foreground-base flex cursor-pointer flex-row items-center gap-2 text-sm\">\n @switch (approvalState()) {\n @case ('approved') {\n <CircleCheck class=\"size-4 text-green-500\" />\n }\n @case ('rejected') {\n <XMarkIcon class=\"size-4 text-red-500\" />\n }\n }\n <FileIcon />\n <span>\n Analyze document <span class=\"font-semibold\">{{ displayTitle() }}</span>\n </span>\n\n <span class=\"ms-auto flex items-center gap-2\">\n @if (data.result?.executionTime; as time) {\n <span class=\"text-xs text-gray-500\">{{ time }}</span>\n } @else if (!data.result) {\n <LoadingCircle class=\"size-4\" />\n }\n <ChevronDown class=\"h-4 w-4 shrink-0 group-open/read-doc-plugin:rotate-180\" />\n </span>\n </summary>\n\n @if (documentReference(); as ref) {\n <article class=\"mt-3 flex flex-col gap-3\">\n <section class=\"bg-tool-card-widget flex w-full flex-col gap-2 rounded-2xl px-1 py-4\">\n <header class=\"text-primary-foreground-hovered flex items-center gap-2 px-3\">\n <FileIcon />\n Document\n </header>\n\n <div class=\"px-1\">\n <DocumentCard [reference]=\"ref\" />\n </div>\n </section>\n </article>\n }\n </details>\n }\n `\n})\nexport class ReadDocumentFunctionComponent extends MessageFunctionComponent {\n override functionData = signal<FunctionData | undefined>(undefined);\n\n private readonly agentsStore = inject(AgentsStore);\n\n readonly documentReference = computed<Reference | undefined>(() => {\n const documentId = this.functionData()?.call.arguments.document_id;\n if (!documentId) return undefined;\n return this.agentsStore.referenceCache()[documentId];\n });\n\n readonly displayTitle = computed(() => {\n return this.documentReference()?.metas.title ?? '';\n });\n\n override result(result: MessageContentFunctionResult): void {\n super.result(result);\n\n try {\n const rawContext = (result.result as Result)[0]?.context;\n const parsed: SearchContext = JSON.parse(rawContext);\n const rawReferences = parsed.contextDocuments;\n\n const references = rawReferences.reduce(\n (acc, curr) => {\n const existing = this.agentsStore.getReferenceMetas(curr.id);\n const ref: Reference = {\n id: curr.id,\n metas: {\n title: curr.metas?.title ?? existing?.title ?? '',\n modified: curr.metas?.date ?? existing?.modified ?? '',\n url: curr.metas?.url ?? existing?.url ?? ''\n },\n chunks: (curr.chunks ?? []).map(c => ({\n offset: c.offset,\n length: c.length,\n scores: c.scores ?? (c.score != null ? [c.score] : []),\n text: c.text,\n chunkTypes: c.chunkTypes ?? []\n })),\n globalRelevanceScore: curr.globalRelevanceScore ?? 0\n };\n\n if (acc[ref.id]) {\n acc[ref.id].chunks.push(...ref.chunks);\n } else acc[ref.id] = ref;\n\n return acc;\n },\n {} as Record<string, Reference>\n );\n\n this.agentsStore.addReferences(references);\n } catch (error) {\n console.error('Failed to parse references from read document result', error);\n }\n }\n}\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'animated-robot-no-results',\r\n standalone: true,\r\n template: `\r\n <svg\r\n width=\"clamp(90px,16vw,120px)\"\r\n height=\"clamp(90px,16vw,120px)\"\r\n viewBox=\"0 0 88 101\"\r\n overflow=\"visible\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <!-- Robot body -->\r\n <g class=\"robot-float\">\r\n <!-- Neck / lower body -->\r\n <path\r\n d=\"M33.7718 76.2014C33.7718 73.8228 54.2254 73.8228 54.2254 76.2014C54.2254 84.462 47.6012 88.1334 43.9986 88.1334C40.396 88.1334 33.7717 84.6915 33.7718 76.2014Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M33.5312 71.53H54.466L53.6614 75.563C53.6614 75.563 50.6159 80.9146 43.9986 80.9146C37.3813 80.9146 34.3358 75.563 34.3358 75.563L33.5312 71.53Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M33.8923 73.335C36.8045 78.1957 50.5609 78.7732 54.1052 73.335L53.5758 75.9819C53.5758 75.9819 50.6909 81.2886 44.0736 81.2886C37.4562 81.2886 34.4107 75.9369 34.4107 75.9369L33.8923 73.335Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M34.3014 75.3809C39.9562 81.7576 47.9692 82.1185 53.6986 75.3809L53.5759 75.9824C53.5759 75.9824 50.6454 81.4449 43.9533 81.3004C37.2611 81.156 34.4097 75.9343 34.4097 75.9343L34.3014 75.3809Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n\r\n <!-- Torso -->\r\n <path\r\n d=\"M29.8014 47.8762L34.8829 46.2337C35.4565 46.0483 35.9745 45.7222 36.3897 45.2852L36.9 44.748H43.9986H50.9864L51.6411 45.3764C52.0354 45.7546 52.5103 46.0385 53.0302 46.2065L58.1958 47.8762C58.1958 47.8762 65.7756 76.03 43.9986 76.03C22.2216 76.03 29.8014 47.8762 29.8014 47.8762Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n\r\n <!-- Collar -->\r\n <path\r\n d=\"M37.6682 42.3416H50.181L51.3841 45.951C51.3841 45.951 51.3841 49.5605 43.9246 49.5605C36.465 49.5605 36.465 45.951 36.465 45.951L37.6682 42.3416Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M36.5853 45.5903C36.5853 45.5903 37.6682 48.7185 43.9246 48.7185C50.3013 48.5982 51.2638 45.5903 51.2638 45.5903L51.3841 45.9513C51.3841 45.9513 51.3841 49.5607 43.9246 49.5607C36.465 49.5607 36.465 45.9513 36.465 45.9513L36.5853 45.5903Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <path\r\n d=\"M37.6681 42.3416H50.1809L50.9822 44.7479C47.8949 45.951 40.315 45.8307 36.8668 44.7479L37.6681 42.3416Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n\r\n <!-- Screen / display on body -->\r\n <rect\r\n x=\"34.0357\"\r\n y=\"53.7998\"\r\n width=\"20.2788\"\r\n height=\"27.2788\"\r\n rx=\"2.04327\"\r\n fill=\"#F1F8F4\"\r\n stroke=\"#193B2E\"\r\n stroke-width=\"0.721154\" />\r\n\r\n <!-- Left arm upper -->\r\n <rect\r\n x=\"23.6722\"\r\n y=\"53.5864\"\r\n width=\"6.67546\"\r\n height=\"13.6174\"\r\n transform=\"rotate(19.4736 23.6722 53.5864)\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M29.9666 55.8119L25.427 68.6504L20.3961 66.8714L18.9545 66.7002L19.7607 64.6482C19.7609 64.6483 19.7612 64.6483 19.7614 64.6484L23.6729 53.5865L29.9666 55.8119Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M22.6253 56.5557L21.4302 59.9291C21.3124 61.9184 22.1792 63.2926 23.1146 63.601C24.3055 63.9936 26.0396 63.3243 27.656 62.3577L28.9256 58.7838L22.6253 56.5557Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M18.9539 66.6994L19.7602 64.6475C21.4978 64.975 23.3944 66.9236 25.8909 65.3123C27.3607 64.039 26.6134 65.1207 26.6134 65.2889L25.8154 67.5146L18.9539 66.6994Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n\r\n <!-- Left hand / foot area -->\r\n <path\r\n d=\"M17.9974 66.6839C19.0791 63.9194 25.2866 69.3993 26.3435 66.057C29.6987 69.537 33.499 76.55 29.967 79.4667C24.6684 83.8423 15.6458 72.6935 17.9974 66.6839Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M29.526 81.2115C28.1356 80.1923 27.6228 78.3414 28.244 76.7333C29.3444 73.8842 33.5432 74.5002 33.7789 77.5453L33.8034 77.8613L35.8368 79.8681L33.7335 83.5112C31.9303 82.8505 30.7688 82.1225 29.526 81.2115Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M28.9728 80.7055C28.1122 79.7923 27.6234 78.3413 28.2446 76.7331C28.814 75.259 30.2521 74.6436 31.463 74.9501C28.9995 75.6113 27.7764 78.2105 28.9728 80.7055Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <ellipse\r\n cx=\"34.4247\"\r\n cy=\"76.3523\"\r\n rx=\"1.74361\"\r\n ry=\"3.41531\"\r\n transform=\"rotate(-75 34.4247 76.3523)\"\r\n style=\"fill: var(--rc-5)\" />\r\n\r\n <!-- Left toes -->\r\n <path\r\n d=\"M36.5133 81.7761C38.4544 81.1782 39.6617 81.6373 39.6617 82.4891C39.6617 83.3408 37.9329 84.3333 36.2645 84.3333C34.5961 84.3333 33.2263 83.4845 33.2263 82.6328C33.2263 81.781 34.4877 80.6067 36.5133 81.7761Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M33.5959 81.8055L39.2187 81.8026C39.5793 81.9228 39.6433 82.2834 39.6433 82.2834C36.8616 83.8361 34.6617 83.3107 33.5959 81.8055Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M36.8136 79.8805C39.0081 79.2045 40.373 79.7236 40.373 80.6865C40.373 81.6495 38.4186 82.7715 36.5324 82.7715C34.6461 82.7715 33.0975 81.812 33.0975 80.849C33.0975 79.886 34.5236 78.5584 36.8136 79.8805Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n\r\n <!-- Left shoulder joint -->\r\n <path\r\n d=\"M30.5615 47.2017C38.3342 50.7559 27.0379 64.4502 23.4288 62.7999C19.8198 61.1496 22.7887 43.6474 30.5615 47.2017Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n\r\n <!-- Right arm upper -->\r\n <rect\r\n width=\"6.67546\"\r\n height=\"13.6174\"\r\n transform=\"matrix(-0.942795 0.333373 0.333373 0.942795 64.1057 53.3994)\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M57.8113 55.6249L62.3508 68.4634L67.3818 66.6844L68.8234 66.5132L68.0171 64.4612C68.0169 64.4613 68.0167 64.4613 68.0164 64.4614L64.1049 53.3995L57.8113 55.6249Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M65.1526 56.3687L66.3477 59.7421C66.4654 61.7314 65.5987 63.1056 64.6633 63.414C63.4723 63.8066 61.7382 63.1373 60.1218 62.1707L58.8522 58.5968L65.1526 56.3687Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M68.8239 66.5124L68.0176 64.4605C66.28 64.788 64.3834 66.7366 61.8869 65.1253C60.4171 63.852 61.1644 64.9337 61.1644 65.1019L61.9624 67.3276L68.8239 66.5124Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n\r\n <!-- Right hand / foot area -->\r\n <path\r\n d=\"M69.7804 66.4968C68.6987 63.7324 62.4912 69.2123 61.4343 65.87C58.0792 69.35 54.2788 76.363 57.8108 79.2797C63.1094 83.6553 72.132 72.5065 69.7804 66.4968Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M58.2518 81.0245C59.6422 80.0053 60.155 78.1544 59.5339 76.5462C58.4334 73.6972 54.2347 74.3132 53.9989 77.3583L53.9745 77.6743L51.941 79.6811L54.0444 83.3242C55.8475 82.6635 57.009 81.9355 58.2518 81.0245Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M58.805 80.5185C59.6656 79.6053 60.1544 78.1543 59.5332 76.5461C58.9638 75.072 57.5257 74.4566 56.3148 74.7631C58.7784 75.4243 60.0015 78.0235 58.805 80.5185Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <ellipse\r\n cx=\"1.74361\"\r\n cy=\"3.41531\"\r\n rx=\"1.74361\"\r\n ry=\"3.41531\"\r\n transform=\"matrix(-0.258819 -0.965926 -0.965926 0.258819 57.1034 76.9656)\"\r\n style=\"fill: var(--rc-5)\" />\r\n\r\n <!-- Right toes -->\r\n <path\r\n d=\"M51.2646 81.5891C49.3235 80.9912 48.1161 81.4503 48.1161 82.302C48.1161 83.1538 49.8449 84.1462 51.5133 84.1462C53.1817 84.1462 54.5515 83.2975 54.5515 82.4457C54.5515 81.594 53.2901 80.4197 51.2646 81.5891Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M54.1819 81.6185L48.5591 81.6156C48.1986 81.7358 48.1345 82.0964 48.1345 82.0964C50.9162 83.6491 53.1161 83.1237 54.1819 81.6185Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M50.9643 79.6935C48.7697 79.0175 47.4048 79.5365 47.4048 80.4995C47.4048 81.4625 49.3593 82.5845 51.2455 82.5845C53.1317 82.5845 54.6803 81.625 54.6803 80.662C54.6803 79.699 53.2542 78.3714 50.9643 79.6935Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n\r\n <!-- Right shoulder joint -->\r\n <path\r\n d=\"M57.2164 47.0144C49.4436 50.5686 60.74 64.263 64.349 62.6127C67.958 60.9624 64.9892 43.4602 57.2164 47.0144Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n\r\n <!-- Head — ear capsules -->\r\n <path\r\n d=\"M70.8664 19.264C70.2322 15.3278 66.5272 12.6511 62.5911 13.2853L65.2322 29.6774C69.1683 29.0432 71.8451 25.3382 71.2109 21.4021L70.8664 19.264Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M11.7122 28.795C11.078 24.8588 13.7548 21.1539 17.6909 20.5197L20.332 36.9118C16.3959 37.546 12.6909 34.8692 12.0567 30.9331L11.7122 28.795Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n\r\n <!-- Head — outer shell -->\r\n <path\r\n d=\"M65.8279 18.248C68.6487 35.7556 58.2153 41.7762 44.5045 43.9853C30.7936 46.1944 18.9973 43.7554 16.1765 26.2478C14.1129 13.4402 21.4133 3.10244 37.4998 0.510583C51.2107 -1.69851 63.3857 3.09041 65.8279 18.248Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M39.4031 11.3485C56.8742 8.5336 60.1461 12.376 61.7269 22.1875C61.7459 22.3053 61.7616 22.4229 61.7787 22.5392C60.2523 13.5878 56.8541 10.1343 39.654 12.9056C22.2696 15.7066 20.529 21.4176 21.6836 29.0676C21.6593 28.9301 21.636 28.791 21.6134 28.6506C20.2777 20.3602 21.7462 14.1934 39.4031 11.3485Z\"\r\n style=\"fill: var(--rc-7)\" />\r\n <path\r\n d=\"M43.9249 39.4134C26.4539 42.2284 23.182 38.3859 21.6011 28.5745C21.5821 28.4566 21.5664 28.339 21.5494 28.2228C23.0757 37.1742 26.474 40.6276 43.6741 37.8564C61.0584 35.0554 62.7991 29.3444 61.6445 21.6944C61.6688 21.8318 61.692 21.971 61.7147 22.1114C63.0504 30.4017 61.5819 36.5685 43.9249 39.4134Z\"\r\n style=\"fill: var(--rc-8)\" />\r\n\r\n <!-- Head — inner face -->\r\n <path\r\n d=\"M61.7236 22.1683C63.4485 32.8739 56.095 36.7122 43.8085 38.6918C30.6347 40.8144 23.3351 39.3369 21.6102 28.6313C20.3484 20.7997 21.8681 14.9528 39.5253 12.1078C56.9967 9.29284 60.2302 12.8997 61.7236 22.1683Z\"\r\n style=\"fill: var(--rc-9)\" />\r\n\r\n <!-- Head — face plate -->\r\n <path\r\n d=\"M60.5368 22.3597C62.0769 31.9183 55.1386 35.4054 43.5791 37.2679C31.1847 39.2649 24.3371 37.9989 22.797 28.4404C21.6704 21.4478 23.1423 16.2088 39.7548 13.5322C56.1923 10.8838 59.2034 14.0842 60.5368 22.3597Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M39.7547 13.5322C56.1918 10.8839 59.204 14.0882 60.5389 22.3728C60.5549 22.4722 60.5676 22.5715 60.5817 22.6696C59.285 15.1126 56.1485 12.2401 39.9666 14.8473C23.6303 17.4794 21.895 22.3334 22.855 28.7827C22.8358 28.6741 22.8169 28.5643 22.799 28.4535C21.6712 21.4532 23.1427 16.2087 39.7547 13.5322Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M43.5729 37.2298C27.1358 39.8781 24.1236 36.6738 22.7887 28.3891C22.7727 28.2898 22.76 28.1904 22.7458 28.0924C24.0426 35.6493 27.1791 38.5219 43.361 35.9147C59.6973 33.2826 61.4326 28.4286 60.4725 21.9792C60.4918 22.0878 60.5107 22.1977 60.5286 22.3085C61.6564 29.3088 60.1849 34.5532 43.5729 37.2298Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n\r\n <!-- Eyes (X-shaped) — glow layer -->\r\n <g filter=\"url(#filter0_f_alt)\">\r\n <path\r\n d=\"M37.6503 22.1176C37.8658 22.2732 37.9143 22.5741 37.7586 22.7896L35.7226 25.6075C35.5669 25.8229 35.6154 26.1238 35.8308 26.2795L38.6488 28.3155C38.8642 28.4712 38.9127 28.7721 38.7571 28.9875L37.8347 30.2643C37.6791 30.4798 37.3782 30.5283 37.1627 30.3726L34.3446 28.3366C34.1292 28.181 33.8283 28.2294 33.6726 28.4449L31.6368 31.2629C31.4811 31.4784 31.1802 31.5269 30.9648 31.3712L29.6879 30.4487C29.4725 30.2931 29.424 29.9922 29.5796 29.7767L31.6155 26.9587C31.7712 26.7432 31.7227 26.4423 31.5072 26.2867L28.6893 24.2508C28.4739 24.0951 28.4254 23.7943 28.5811 23.5788L29.5035 22.302C29.6592 22.0865 29.9601 22.038 30.1756 22.1937L32.9934 24.2295C33.2089 24.3852 33.5098 24.3367 33.6654 24.1213L35.7015 21.3033C35.8571 21.0879 36.158 21.0394 36.3735 21.1951L37.6503 22.1176Z\"\r\n fill=\"#F1F8F4\" />\r\n <path\r\n d=\"M55.2324 19.2848C55.4478 19.4405 55.4963 19.7413 55.3406 19.9568L53.3046 22.7747C53.1489 22.9902 53.1974 23.2911 53.4129 23.4467L56.2308 25.4828C56.4463 25.6384 56.4947 25.9393 56.3391 26.1548L55.4168 27.4315C55.2611 27.647 54.9602 27.6955 54.7447 27.5398L51.9267 25.5039C51.7112 25.3482 51.4103 25.3967 51.2546 25.6122L49.2188 28.4302C49.0632 28.6457 48.7623 28.6941 48.5468 28.5385L47.27 27.616C47.0545 27.4603 47.006 27.1594 47.1617 26.944L49.1975 24.1259C49.3532 23.9104 49.3047 23.6096 49.0892 23.4539L46.2714 21.4181C46.0559 21.2624 46.0074 20.9615 46.1631 20.746L47.0856 19.4692C47.2412 19.2537 47.5421 19.2052 47.7576 19.3609L50.5755 21.3968C50.7909 21.5524 51.0918 21.504 51.2475 21.2885L53.2835 18.4706C53.4392 18.2551 53.74 18.2066 53.9555 18.3623L55.2324 19.2848Z\"\r\n fill=\"#F1F8F4\" />\r\n </g>\r\n\r\n <!-- Eyes (X-shaped) — solid layer -->\r\n <path\r\n d=\"M37.6503 22.1173C37.8657 22.273 37.9142 22.5739 37.7585 22.7893L35.7225 25.6072C35.5668 25.8227 35.6153 26.1236 35.8308 26.2793L38.6487 28.3153C38.8642 28.471 38.9127 28.7718 38.757 28.9873L37.8347 30.2641C37.679 30.4796 37.3781 30.528 37.1626 30.3724L34.3446 28.3364C34.1291 28.1807 33.8282 28.2292 33.6725 28.4447L31.6367 31.2627C31.4811 31.4782 31.1802 31.5267 30.9647 31.371L29.6879 30.4485C29.4724 30.2928 29.4239 29.992 29.5796 29.7765L31.6154 26.9584C31.7711 26.7429 31.7226 26.4421 31.5071 26.2864L28.6893 24.2506C28.4738 24.0949 28.4253 23.794 28.581 23.5786L29.5035 22.3017C29.6592 22.0862 29.96 22.0378 30.1755 22.1934L32.9934 24.2293C33.2088 24.385 33.5097 24.3365 33.6654 24.121L35.7014 21.3031C35.8571 21.0876 36.1579 21.0392 36.3734 21.1948L37.6503 22.1173Z\"\r\n fill=\"#F1F8F4\" />\r\n <path\r\n d=\"M55.2323 19.2848C55.4478 19.4405 55.4962 19.7413 55.3406 19.9568L53.3046 22.7747C53.1489 22.9902 53.1973 23.2911 53.4128 23.4467L56.2308 25.4828C56.4462 25.6384 56.4947 25.9393 56.339 26.1548L55.4167 27.4315C55.261 27.647 54.9601 27.6955 54.7447 27.5398L51.9266 25.5039C51.7111 25.3482 51.4102 25.3967 51.2546 25.6122L49.2188 28.4302C49.0631 28.6457 48.7622 28.6941 48.5467 28.5385L47.2699 27.616C47.0544 27.4603 47.006 27.1594 47.1616 26.944L49.1975 24.1259C49.3531 23.9104 49.3046 23.6096 49.0892 23.4539L46.2713 21.4181C46.0558 21.2624 46.0074 20.9615 46.163 20.746L47.0855 19.4692C47.2412 19.2537 47.5421 19.2052 47.7575 19.3609L50.5754 21.3968C50.7909 21.5524 51.0917 21.504 51.2474 21.2885L53.2834 18.4706C53.4391 18.2551 53.74 18.2066 53.9554 18.3623L55.2323 19.2848Z\"\r\n fill=\"#F1F8F4\" />\r\n </g>\r\n\r\n <!-- Shadow -->\r\n <ellipse\r\n class=\"robot-shadow\"\r\n cx=\"44\"\r\n cy=\"97.4259\"\r\n rx=\"13.803\"\r\n ry=\"3.00065\"\r\n style=\"fill: var(--rs)\"\r\n fill-opacity=\"0.2\" />\r\n\r\n <defs>\r\n <filter\r\n id=\"filter0_f_alt\"\r\n x=\"25.1207\"\r\n y=\"14.9018\"\r\n width=\"34.6788\"\r\n height=\"19.9298\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\r\n <feGaussianBlur stdDeviation=\"1.6846\" result=\"effect1_foregroundBlur_alt\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n overflow: visible;\r\n box-sizing: content-box;\r\n\r\n --rc-1: #bad3ca;\r\n --rc-2: #152828;\r\n --rc-3: #2a5050;\r\n --rc-4: #468586;\r\n --rc-5: #d2e3dd;\r\n --rc-6: #aecac0;\r\n --rc-7: #cee6dd;\r\n --rc-8: #92b8aa;\r\n --rc-9: #effbf7;\r\n --rs: #607c7f;\r\n }\r\n\r\n :host-context(.dark) {\r\n --rc-1: #819d92;\r\n --rc-2: #070d0d;\r\n --rc-3: #152828;\r\n --rc-4: #2a5050;\r\n --rc-5: #a9c1b8;\r\n --rc-6: #8eada1;\r\n --rc-7: #92ada3;\r\n --rc-8: #6d8d81;\r\n --rc-9: #a9c1b8;\r\n --rs: #445556;\r\n }\r\n `\r\n ],\r\n host: {\r\n 'aria-hidden': 'true',\r\n class:\r\n 'inline-flex items-center justify-center overflow-visible w-[clamp(90px,16vw,120px)] h-[clamp(90px,16vw,120px)]'\r\n }\r\n})\r\nexport class AnimatedRobotNoResultsComponent {}\r\n","import { Component, inject, input, signal } from '@angular/core';\r\nimport { injectInfiniteQuery } from '@tanstack/angular-query-experimental';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\nimport { Result as RequestResult } from '@sinequa/atomic';\r\nimport { InfinityScrollDirective, QueryService } from '@sinequa/atomic-angular';\r\nimport { cn, LoadingCircleIconComponent, Separator, TabComponent, TabContent, TabsComponent, TabsListComponent } from '@sinequa/ui';\r\n\r\nimport { AnimatedRobotNoResultsComponent } from '../../../../chaps-e/animated-robot-no-results';\r\nimport { DocumentCardComponent } from './document-card';\r\nimport { SearchContext } from './search.types';\r\n\r\ntype R = RequestResult & { nextPage?: number; previousPage?: number };\r\n\r\n/**\r\n * Shared tabs component for displaying search results in both the inline search\r\n * widget (`SearchFunctionComponent`) and the expanded panel (`ExpandedSearchResultsComponent`).\r\n *\r\n * Inputs:\r\n * - `context` — the SearchContext holding the top documents to display\r\n * - `queryText` — used for the paginated \"More\" query\r\n * - `compact` — when true, constrains the list height (inline widget); when false,\r\n * fills available space (expanded panel)\r\n */\r\n@Component({\r\n selector: 'SearchResultsTabs,search-results-tabs',\r\n imports: [\r\n AnimatedRobotNoResultsComponent,\r\n DocumentCardComponent,\r\n InfinityScrollDirective,\r\n LoadingCircleIconComponent,\r\n Separator,\r\n TabComponent,\r\n TabContent,\r\n TabsComponent,\r\n TabsListComponent\r\n ],\r\n template: `\r\n <Tabs class=\"flex min-h-0 flex-1 flex-col px-2\">\r\n <TabsList class=\"border-primary-light flex rounded-none border-b px-0 pb-0\">\r\n <Tab value=\"top\" class=\"w-fit text-sm\" variant=\"secondary\" active>Top Results</Tab>\r\n <Tab #moreTab value=\"more\" class=\"w-fit text-sm\" variant=\"secondary\" (click)=\"allowSearch.set(true)\">More</Tab>\r\n </TabsList>\r\n\r\n <div [class]=\"cn('relative mt-2 overflow-auto', compact() ? 'h-full grow' : 'min-h-0 flex-1')\">\r\n <TabContent value=\"top\" class=\"h-full\">\r\n <ul [class]=\"cn('flex w-full flex-col gap-2', compact() ? 'max-h-60' : 'h-full px-1')\">\r\n @if (context().contextDocuments.length > 0) {\r\n <p class=\"text-primary-foreground-muted px-3 text-xs font-medium\">\r\n Found {{ context().contextDocuments.length }} documents\r\n </p>\r\n @for (document of context().contextDocuments; track document.id; let isLast = $last) {\r\n <li><DocumentCard [document]=\"document\" /></li>\r\n @if (!isLast) {\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border\" />\r\n }\r\n }\r\n } @else {\r\n <li class=\"text-primary-foreground-muted flex flex-1 flex-col items-center justify-center gap-3 py-6\">\r\n <animated-robot-no-results />\r\n <span class=\"text-lg font-medium\">No results found</span>\r\n </li>\r\n }\r\n </ul>\r\n </TabContent>\r\n\r\n <TabContent value=\"more\" class=\"grid h-full w-full place-items-center\">\r\n @defer (on interaction(moreTab)) {\r\n @if (query.isPending()) {\r\n <LoadingCircle class=\"my-4 size-8 animate-spin\" />\r\n } @else {\r\n <ul class=\"flex w-full flex-col gap-2\" [class]=\"!compact() && 'h-full px-1'\">\r\n @for (page of query.data()?.pages; track page) {\r\n @for (article of page.records; track article.id + $index) {\r\n <li><DocumentCard [article]=\"article\" /></li>\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border last:hidden\" />\r\n } @empty {\r\n <li\r\n class=\"text-primary-foreground-muted flex flex-1 flex-col items-center justify-center gap-3 py-6\">\r\n <animated-robot-no-results />\r\n <span class=\"text-lg font-medium\">No results found</span>\r\n </li>\r\n }\r\n }\r\n @if (query.hasNextPage()) {\r\n <div infinity-scroll (onScroll)=\"query.fetchNextPage()\"></div>\r\n }\r\n </ul>\r\n }\r\n } @loading {\r\n <LoadingCircle class=\"my-4 size-8 animate-spin\" />\r\n }\r\n </TabContent>\r\n </div>\r\n </Tabs>\r\n `,\r\n host: { class: 'contents' }\r\n})\r\nexport class SearchResultsTabsComponent {\r\n protected readonly cn = cn;\r\n\r\n readonly context = input.required<SearchContext>();\r\n readonly queryText = input.required<string>();\r\n readonly compact = input(false);\r\n\r\n private readonly queryService = inject(QueryService);\r\n\r\n readonly allowSearch = signal(false);\r\n\r\n readonly query = injectInfiniteQuery<R>(() => ({\r\n queryKey: [this.queryText(), this.allowSearch()],\r\n queryFn: ({ pageParam }) => {\r\n const query = {\r\n text: this.queryText(),\r\n page: (pageParam as number) ?? 1,\r\n pageSize: 20,\r\n previousPage: (pageParam as number) > 1 ? (pageParam as number) - 1 : 0,\r\n nextPage: (pageParam as number) + 1\r\n };\r\n return lastValueFrom(this.queryService.search(query));\r\n },\r\n initialPageParam: 1,\r\n getPreviousPageParam: firstPage => firstPage.previousPage ?? undefined,\r\n getNextPageParam: lastPage => lastPage.nextPage ?? undefined,\r\n enabled: this.allowSearch()\r\n }));\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'maximize-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-maximize2-icon lucide-maximize-2\">\r\n <path d=\"M15 3h6v6\" />\r\n <path d=\"m21 3-7 7\" />\r\n <path d=\"m3 21 7-7\" />\r\n <path d=\"M9 21H3v-6\" />\r\n </svg>\r\n `\r\n})\r\nexport class MaximizeIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, computed, inject, signal } from '@angular/core';\n\nimport { ChevronDownIconComponent, FileSearchIcon, GlobeIcon, CircleCheckIconComponent, Square, TooltipDirective } from '@sinequa/ui';\n\nimport { AgentsStore } from '../../../../stores';\nimport { Reference } from '../../../../stores/reference-cache.feature';\nimport { MessageContentFunctionCall, MessageContentFunctionResult } from '../../../../types';\nimport { MessageFunctionComponent } from '../../message-function';\nimport { ButtonComponent } from '../../../../overrides';\nimport { SearchExpansionService } from '../../../../services/search-expansion.service';\nimport { SearchContext } from './search.types';\nimport { SearchResultsTabsComponent } from './search-results-tabs';\nimport { MaximizeIcon } from '../../../../overrides/icons/maximize.icon';\n\ntype Arguments = {\n searchQuery: string;\n};\n\ntype Result = { searchContext: string }[];\n\ntype FunctionData = {\n call: MessageContentFunctionCall & { arguments: Arguments };\n result?: MessageContentFunctionResult & { result: Result };\n approved: boolean;\n};\n\n@Component({\n selector: 'SearchFunction, search-function, searchfunction',\n imports: [\n ButtonComponent,\n ChevronDownIconComponent,\n CircleCheckIconComponent,\n FileSearchIcon,\n GlobeIcon,\n SearchResultsTabsComponent,\n Square,\n TooltipDirective,\n MaximizeIcon\n ],\n template: `\n @if (functionData(); as data) {\n <details\n class=\"group/search-plugin bg-tool-card border-tool-card-border hover:bg-tool-card-hovered my-1 rounded-2xl border p-4 transition-colors\">\n <summary class=\"text-primary-foreground-base flex cursor-pointer flex-row items-center gap-2 text-sm\">\n @switch (approvalState()) {\n @case ('approved') {\n <CircleCheck class=\"size-4 text-green-500\" />\n }\n @case ('rejected') {\n <Square class=\"size-4 text-red-500\" [fill]=\"true\" />\n }\n }\n <GlobeIcon />\n <span>\n Searching for <span class=\"font-semibold\">{{ data.call.arguments.searchQuery }}</span>\n </span>\n\n <span class=\"ms-auto flex items-center gap-2\">\n @if (data.result?.executionTime; as time) {\n <span class=\"text-xs text-gray-500\">{{ time }}</span>\n } @else if (!data.result) {\n <span class=\"h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-gray-300 border-t-gray-600\"></span>\n }\n <ChevronDown class=\"h-4 w-4 shrink-0 group-open/search-plugin:rotate-180\" />\n </span>\n </summary>\n\n <article class=\"mt-3 flex flex-col gap-3\">\n <ul>\n <li>\n <p class=\"text-primary-foreground-base text-sm font-medium\">\n Query:\n <span class=\"bg-accent-alt text-accent-foreground rounded-full px-1 py-0.5 text-xs font-normal\">\n {{ data.call.arguments.searchQuery }}\n </span>\n </p>\n </li>\n </ul>\n\n @if (searchContext(); as context) {\n <section class=\"bg-tool-card-widget flex w-full flex-col gap-2 rounded-2xl px-1 py-4\">\n <header class=\"text-primary-foreground-hovered flex items-center gap-2 px-3\">\n <FileSearchIcon />\n <span class=\"flex-1\">Results</span>\n <!-- @if (!isExpandedInPanel()) {\n <button variant=\"ghost\" size=\"icon\" tooltip=\"Expand results\" tooltip-position=\"top\"\n (click)=\"searchExpansion.expand(context, data.call.arguments.searchQuery, data.call.callId)\">\n <maximize-icon></maximize-icon>\n </button>\n } -->\n </header>\n\n @if (isExpandedInPanel()) {\n <div class=\"text-primary-foreground-muted flex h-20 items-center justify-center gap-2 text-sm\">\n <FileSearchIcon class=\"size-4\" />\n Results are open in expanded view\n </div>\n } @else {\n <SearchResultsTabs [context]=\"context\" [queryText]=\"data.call.arguments.searchQuery\" [compact]=\"true\" />\n }\n </section>\n }\n </article>\n </details>\n }\n `\n})\nexport class SearchFunctionComponent extends MessageFunctionComponent {\n override functionData = signal<FunctionData | undefined>(undefined);\n\n private readonly agentsStore = inject(AgentsStore);\n protected readonly searchExpansion = inject(SearchExpansionService);\n\n /** True only when THIS specific search widget is the one currently expanded. */\n readonly isExpandedInPanel = computed(() => this.searchExpansion.expandedCallId() === this.functionData()?.call.callId);\n\n readonly searchContext = computed<SearchContext | undefined>(() => {\n try {\n const rawData = this.toResultArray(this.functionData()?.result?.result)?.[0]?.['searchContext'];\n const parsedData = rawData ? JSON.parse(rawData as string) : undefined;\n return parsedData;\n } catch (error) {\n return undefined;\n }\n });\n override result(result: MessageContentFunctionResult): void {\n super.result(result);\n\n try {\n const rawReferences = (\n JSON.parse(this.toResultArray(result.result)[0]['searchContext'] as string) as { contextDocuments: Reference[] }\n ).contextDocuments;\n const references = rawReferences.reduce(\n (acc, curr) => {\n if (acc[curr.id]) {\n acc[curr.id].chunks.push(...curr.chunks);\n } else acc[curr.id] = curr;\n\n return acc;\n },\n {} as Record<string, Reference>\n );\n\n this.agentsStore.addReferences(references);\n } catch (error) {\n console.error('Failed to parse references from search result', error);\n }\n }\n\n /**\n * Normalizes the raw result value into an array of records.\n * Handles both the live-session format (already an array) and the saved-history\n * format where the backend may serialize the array as a JSON string.\n */\n private toResultArray(value: MessageContentFunctionResult['result'] | undefined): Record<string, unknown>[] {\n if (!value) return [];\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return [];\n }\n }\n if (Array.isArray(value)) return value as Record<string, any>[];\n return [];\n }\n}\n","import { Component, inject, output } from '@angular/core';\r\n\r\nimport { FileSearchIcon, Separator, TooltipDirective, XMarkICon } from '@sinequa/ui';\r\n\r\nimport { ButtonComponent } from '../../../../overrides';\r\nimport { SearchExpansionService } from '../../../../services/search-expansion.service';\r\nimport { SearchResultsTabsComponent } from './search-results-tabs';\r\n\r\n/**\r\n * Displays expanded search results in a dedicated panel outside the chat flow.\r\n *\r\n * Intended for use in host applications (e.g. agent-app) that implement a multi-panel\r\n * layout. This component is placed in a dedicated resizable panel alongside the chat and\r\n * document preview panels. It is shown when the user clicks \"expand\" on a search result\r\n * inside the chat, which triggers `SearchExpansionService.expand()`.\r\n *\r\n * Usage:\r\n * <ExpandedSearchResults (close)=\"onClose()\" />\r\n *\r\n * The component reads its context entirely from `SearchExpansionService` (injected globally),\r\n * so no inputs are required. It emits a `close` event when the user dismisses the panel;\r\n * the host is responsible for calling `SearchExpansionService.collapse()` in response.\r\n *\r\n * Tabs:\r\n * - \"Top Results\": the `contextDocuments` already retrieved by the search tool call.\r\n * - \"More\": lazy-loaded via `@defer`, triggers a paginated search using `QueryService`\r\n * with infinite scroll once the user navigates to that tab.\r\n */\r\n@Component({\r\n selector: 'ExpandedSearchResults,expanded-search-results',\r\n imports: [ButtonComponent, FileSearchIcon, Separator, SearchResultsTabsComponent, TooltipDirective, XMarkICon],\r\n template: `\r\n @if (store.context(); as context) {\r\n <section\r\n class=\"bg-tool-card-widget border-tool-card-border flex h-full w-full flex-col gap-2 rounded-2xl border px-1 py-4\">\r\n <header class=\"text-primary-foreground-hovered flex items-center gap-2 px-3\">\r\n <FileSearchIcon />\r\n <span class=\"flex min-w-0 flex-1 items-center gap-2 overflow-hidden\">\r\n Results\r\n @if (store.queryText(); as queryText) {\r\n <Separator orientation=\"vertical\" class=\"bg-primary-foreground-muted\" />\r\n <span class=\"text-primary-foreground-muted truncate text-sm font-normal\">{{ queryText }}</span>\r\n }\r\n </span>\r\n <button variant=\"ghost\" size=\"icon\" tooltip=\"Close\" tooltip-position=\"top\" (click)=\"close.emit()\">\r\n <XMarkIcon class=\"size-4\" />\r\n </button>\r\n </header>\r\n\r\n <SearchResultsTabs [context]=\"context\" [queryText]=\"store.queryText() ?? ''\" [compact]=\"false\" />\r\n </section>\r\n }\r\n `\r\n})\r\nexport class ExpandedSearchResultsComponent {\r\n /** Emitted when the user clicks the close button. The host must call SearchExpansionService.collapse(). */\r\n readonly close = output<void>();\r\n\r\n protected readonly store = inject(SearchExpansionService);\r\n}\r\n","import { Component, inject, output } from '@angular/core';\n\nimport { SquarePenIcon, TooltipDirective } from '@sinequa/ui';\n\nimport { AgentService } from '../../agent';\nimport { ButtonComponent } from '../../overrides';\nimport { MessageUserActionEvent } from '../../types';\nimport { CopyIcon } from '../../overrides/icons/copy.icon';\n\n@Component({\n selector: 'MessageUserToolbar,message-user-toolbar,messageusertoolbar',\n imports: [SquarePenIcon, ButtonComponent, CopyIcon, TooltipDirective],\n template: `\n <ul class=\"flex items-center py-1 [&_button]:hover:cursor-pointer\">\n <li>\n <button tooltip=\"Copy\" tooltip-position=\"bottom\" variant=\"ghost\" size=\"icon\" (click)=\"copyMessageToClipboard()\">\n <copy-icon class=\"size-4\" />\n </button>\n </li>\n\n <li>\n <button\n tooltip=\"Edit message\"\n tooltip-position=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n [disabled]=\"agentService.isAgentGenerating()\"\n (click)=\"editMessage()\">\n <SquarePenIcon class=\"size-4\" />\n </button>\n </li>\n </ul>\n `\n})\nexport class MessageUserToolbar {\n protected readonly agentService = inject(AgentService);\n\n readonly action = output<MessageUserActionEvent>();\n\n copyMessageToClipboard() {\n this.action.emit({ origin: 'user', action: 'copy' });\n }\n\n editMessage() {\n this.action.emit({ origin: 'user', action: 'edit' });\n }\n}\n","import { Component, computed, input, signal } from '@angular/core';\n\nimport { AGENT_ACTION_EVENT_NAME, Message, MessageComponentType, MessageUserAction, MessageUserActionEvent } from '../../types';\nimport { flattenMessageContent } from '../../utils/message';\nimport { MessageBaseComponent } from '../message-base';\nimport { MessageUserToolbar } from './message-user-toolbar';\n\n@Component({\n selector: 'MessageUser,message-user,messageuser',\n imports: [MessageUserToolbar],\n template: `\n <p class=\"bg-primary-lighter flex w-fit max-w-110 items-center rounded-3xl px-4 py-3 wrap-anywhere\">\n {{ flattenedContent() }}\n </p>\n\n <MessageUserToolbar\n class=\"flex items-center justify-end opacity-0 duration-200 ease-in group-hover:opacity-100 group-data-locked:!hidden\"\n [class]=\"showToolbar() ? '!opacity-100' : ''\"\n (action)=\"messageAction($event)\" />\n `,\n host: {\n class: 'group flex flex-col items-end mt-12 data-locked:opacity-60'\n }\n})\nexport class MessageUserComponent extends MessageBaseComponent {\n readonly message = input.required<Message>();\n\n readonly showToolbar = signal<boolean>(false);\n\n readonly messageId = computed(() => this.message().messageId);\n readonly messageContent = computed(() => this.message().contents);\n readonly flattenedContent = computed(() => flattenMessageContent(this.messageContent()));\n\n override getMessageId(): string | undefined {\n return this.messageId();\n }\n\n override getType(): MessageComponentType {\n return 'user';\n }\n\n messageAction(event: MessageUserActionEvent) {\n switch (event.action) {\n case 'copy':\n case 'edit':\n this.dispatchMessageAction(event.action);\n break;\n }\n }\n\n dispatchMessageAction(action: MessageUserAction, includeMessage: boolean = true) {\n this.dispatchEvent(\n new CustomEvent<MessageUserActionEvent>(AGENT_ACTION_EVENT_NAME, {\n detail: {\n origin: 'user',\n action,\n message: includeMessage ? this.message() : undefined\n },\n bubbles: true\n })\n );\n }\n}\n","import {\n afterNextRender,\n Component,\n ComponentRef,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n Type,\n untracked,\n ViewContainerRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\n\nimport { error } from '@sinequa/atomic';\n\nimport { AgentService } from '../agent';\nimport { LoggerService } from '../logger';\nimport { MessageDebugComponent } from '../messages';\nimport { AgentsStore } from '../stores';\nimport {\n ActionEvent,\n AGENT_ACTION_EVENT_NAME,\n DebugMessageProperties,\n FrameEvent,\n Message,\n MessageAgentActionEvent,\n MessageContentFunctionApprovalRequest,\n MessageContentFunctionApprovalResponse,\n MessageContentFunctionCall,\n MessageContentFunctionResult,\n MessageIdentity\n} from '../types';\nimport { flattenMessageContent, identifyMessage, isAStreamMessage } from '../utils';\nimport { MessageAgentComponent } from './agent/message-agent';\nimport { MessageFunctionComponent } from './function/message-function';\nimport { MessageBaseComponent } from './message-base';\nimport { MessageUserComponent } from './user/message-user';\nimport { AGENT_TOOL_CARD_PLUGINS } from '../tokens';\n\n@Component({\n selector: 'MessageList,message-list,messagelist',\n template: ``,\n host: {\n class: 'flex flex-col'\n }\n})\nexport class MessageList {\n private readonly el = inject(ElementRef);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly logger = inject(LoggerService);\n private readonly agentService = inject(AgentService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly agentsStore = inject(AgentsStore);\n private readonly toolCardPlugins = inject(AGENT_TOOL_CARD_PLUGINS);\n\n readonly chatId = input<string | undefined>(undefined);\n readonly message = input<Message | undefined>(undefined);\n readonly history = input<Message[] | undefined>(undefined);\n\n protected readonly isReady = computed(() => !this.chatId() || (!!this.chatId() && !!this.history()));\n protected readonly hasDebugFeature = this.agentsStore.debugMessages;\n\n private lastMessage: Message | undefined = undefined;\n private lastMessageComponent: ComponentRef<MessageAgentComponent> | undefined = undefined;\n private lastMessageDebug: ComponentRef<MessageDebugComponent> | undefined = undefined;\n private readonly messageComponents: ComponentRef<MessageBaseComponent>[] = [];\n private readonly functionComponents: ComponentRef<MessageFunctionComponent>[] = [];\n private messageRenderers: Record<MessageIdentity, (message: Message) => void> = {} as Record<MessageIdentity, (message: Message) => void>;\n /**\n * Text offset pending for the next MessageAgentComponent to be created.\n * Set when a functionCall frame interrupts a live stream: it snapshots the character\n * length of the already-displayed text so the continuation component can slice it off,\n * avoiding visual duplication. Consumed immediately on the next component creation.\n */\n private nextTextOffset: number = 0;\n\n constructor() {\n this.initMessageRenderers();\n effect(() => this.watchHistory());\n effect(() => this.watchMessage());\n\n // Handle frames from AgentService and route them to respective handlers based on frame name\n this.agentService.afterFrame$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(frame => new Set(['debugDisplay', 'functionCall', 'functionResult']).has(frame.name))\n )\n .subscribe(frame => this.handleFrame(frame));\n\n // listen to custom events from child components\n afterNextRender(() =>\n (this.el.nativeElement as HTMLElement).addEventListener(\n AGENT_ACTION_EVENT_NAME,\n (event: CustomEvent<ActionEvent>) =>\n event.detail.action === 'debug' &&\n event.detail.origin === 'agent' &&\n this.onDebugPanelClick(event as CustomEvent<MessageAgentActionEvent>)\n )\n );\n }\n\n /**\n * Returns the list of message ids\n * @returns - List of message ids\n */\n public getMessageIds(): (string | undefined)[] {\n return this.messageComponents.map(c => c.instance.getMessageId());\n }\n\n /**\n * Locks all messages from the message with the given messageId (inclusive).\n *\n * @param messageId - The messageId from which to lock messages.\n *\n * @remarks This method sets a 'locked' data attribute to 'true' on all message components.\n * @remarks This method is designed to be called from the parent component.\n */\n public lockFromMessageId(messageId: string | undefined) {\n if (!messageId) return;\n\n const index = this.messageComponents.findIndex(x => x.instance.getMessageId() === messageId);\n if (index < 0) {\n this.logger.warn(`[MessageList] Cannot find message with id ${messageId} to lock from`);\n return;\n }\n\n const list = this.messageComponents.toSpliced(0, index);\n list.forEach(component => ((component.location.nativeElement as HTMLElement).dataset['locked'] = 'true'));\n }\n\n /**\n * Unlocks all messages.\n *\n * @remarks This method sets a 'locked' data attribute to 'false' on all message components.\n * @remarks This method is designed to be called from the parent component.\n */\n public unlockMessages() {\n this.messageComponents.forEach(\n component => ((component.location.nativeElement as HTMLElement).dataset['locked'] = 'false')\n );\n }\n\n /**\n * Removes all locked messages from the message list and UI.\n */\n public clearLockedMessages() {\n const index = this.messageComponents.findIndex(c => c.location.nativeElement.dataset['locked'] === 'true');\n if (index < 0) {\n this.logger.warn(`[MessageList] Cannot find locked message to clear`);\n return;\n }\n\n this.clearFromMessageIndex(index);\n }\n\n /**\n * Removes messages from the message list and UI starting from the given messageId (inclusive).\n *\n * @param messageId - The messageId from which to clear messages.\n */\n public regenerateFromMessageId(messageId: string | undefined) {\n if (!messageId) return;\n\n let lastUserMessageIndex = -1;\n let messageIdIndex = 0;\n\n for (; messageIdIndex < this.messageComponents.length; messageIdIndex++) {\n const instance = this.messageComponents[messageIdIndex].instance;\n // save last message user index\n if (instance.getType() === 'user') lastUserMessageIndex = messageIdIndex;\n // break on selected id\n if (instance.getMessageId() === messageId) break;\n }\n\n if (messageIdIndex < 0 || messageIdIndex >= this.messageComponents.length) {\n this.logger.warn(`[MessageList] Cannot find message with id ${messageId} to clear from`);\n return;\n }\n\n if (lastUserMessageIndex < 0) throw new Error('No user message found, edge case reached, need to implement');\n\n // do not clear last user message\n this.clearFromMessageIndex(lastUserMessageIndex + 1);\n this.appendMessageDebugComponent(\n (this.messageComponents[lastUserMessageIndex]?.instance as MessageUserComponent).message()\n );\n }\n\n /**\n * Initializes the message renderers for different message identities. Each renderer is responsible for rendering a specific type of message based on its identity.\n * The renderers are stored in the `messageRenderers` object, which maps message identities to their respective rendering functions.\n * This method is called in the constructor to set up the renderers when the component is initialized.\n */\n private initMessageRenderers() {\n this.messageRenderers = {\n user: message => {\n this.appendMessageUser(message);\n this.appendMessageDebugComponent(message);\n },\n assistant: message => this.insertMessageAgent(message),\n // A functionCall message may contain text alongside tool calls (e.g. \"Let me search…\" +\n // [searchTool()]). Text is rendered first, tool cards follow, and a toolbar-only ghost\n // component is appended so the toolbar appears below the cards rather than above them.\n functionCall: message => {\n const textContents = message.contents.filter(c => c.$type === 'text');\n if (textContents.length > 0) {\n this.insertMessageAgent({ ...message, contents: textContents });\n // Suppress toolbar here, it will be shown below the tool cards via the ghost component\n this.lastMessageComponent?.setInput('hideToolbar', true);\n }\n const callContents = message.contents.filter(c => c.$type === 'functionCall');\n for (const content of callContents) {\n this.insertFunctionCallComponent(content as MessageContentFunctionCall);\n }\n if (textContents.length > 0) {\n // Ghost component: content hidden, toolbar visible. Carries text contents so that\n // copy/regenerate actions dispatch the correct message data.\n this.insertMessageAgent({ ...message, contents: textContents });\n this.lastMessageComponent?.setInput('hideContent', true);\n }\n },\n // A functionApprovalRequest message may contain text alongside approval requests (e.g.\n // \"I need to run this tool…\" + [approvalCard]). Same split-and-ghost pattern as above.\n functionApprovalRequest: message => {\n const textContents = message.contents.filter(c => c.$type === 'text');\n if (textContents.length > 0) {\n // Skip re-rendering if the text was already displayed during live streaming\n const alreadyRendered = this.messageComponents.some(c => c.instance.getMessageId() === message.messageId);\n if (!alreadyRendered) {\n this.insertMessageAgent({ ...message, contents: textContents });\n // Suppress toolbar only on the freshly created text component;\n // do NOT touch lastMessageComponent when alreadyRendered=true. it would hide the ghost's toolbar\n this.lastMessageComponent?.setInput('hideToolbar', true);\n }\n }\n const approvalContents = message.contents.filter(c => c.$type === 'functionApprovalRequest');\n if (approvalContents.length > 0) {\n this.insertMessageFunctionApprovalRequest({ ...message, contents: approvalContents });\n }\n // Ghost component: content hidden, toolbar visible. Carries text contents so that\n // copy/regenerate actions dispatch the correct message data.\n this.insertMessageAgent({ ...message, contents: textContents });\n this.lastMessageComponent?.setInput('hideContent', true);\n },\n functionResult: message => this.insertFunctionResult(message.contents[0] as MessageContentFunctionResult),\n functionApprovalResponse: message => this.insertMessageFunctionApprovalResponse(message)\n };\n }\n\n /**\n * Centralized frame handling to route different frame events to their respective handlers.\n * @param frame - The frame event to handle.\n */\n private handleFrame(frame: FrameEvent) {\n const { name, payload } = frame;\n switch (name) {\n // watch debug display frames\n case 'debugDisplay':\n this.lastMessageDebug?.instance.getService().nextDebug(payload as DebugMessageProperties);\n break;\n // watch function call frames\n case 'functionCall':\n // Finalize the current streaming assistant message so that subsequent\n // streamed text creates a new component below the tool card.\n if (this.lastMessageComponent) {\n this.lastMessageComponent.setInput('hideToolbar', true);\n // Snapshot the current text length: the next streaming component will receive this\n // as textOffset so it only displays the text that comes after the tool call.\n this.nextTextOffset = flattenMessageContent(this.lastMessage?.contents).length;\n }\n this.detachLastMessageSignal();\n this.lastMessageComponent = undefined;\n this.lastMessage = undefined;\n this.insertFunctionCallComponent(payload as any as MessageContentFunctionCall);\n break;\n // watch function result frames\n case 'functionResult':\n this.insertFunctionResult(payload as any as MessageContentFunctionResult);\n break;\n }\n }\n\n /**\n * Clears message from a given index by calling `component.destroy()`\n * @param index - Index to start deletion from\n */\n private clearFromMessageIndex(index: number) {\n const toDelete = this.messageComponents.splice(index);\n\n toDelete.forEach(component => {\n // If this is a function component, remove the matching entry from functionComponents\n if (component.instance.getType() === 'function') {\n const fcIdx = this.functionComponents.findIndex(\n fc => fc.instance.getMessageId() === component.instance.getMessageId()\n );\n if (fcIdx >= 0) this.functionComponents.splice(fcIdx, 1);\n }\n // Destroy the component\n component.destroy();\n });\n\n this.lastMessageComponent = undefined;\n this.lastMessage = undefined;\n }\n\n /** Effect function to watch over history changes */\n private watchHistory() {\n if (!this.isReady()) return;\n\n const history = this.history();\n untracked(() => {\n this.clearMessages();\n this.injectHistory(history);\n // Sync lastMessage after re-rendering so watchMessage can detect already-rendered messages\n this.lastMessage = history?.at(-1);\n });\n }\n\n /** Effect function to watch over message changes */\n private watchMessage() {\n if (!this.isReady()) return;\n\n const message = this.message();\n if (!message) return;\n\n untracked(() => {\n if (message.messageId === this.lastMessage?.messageId && isAStreamMessage(message)) {\n this.lastMessageComponent?.instance.getService().stream$.next(message);\n } else if (message.messageId !== this.lastMessage?.messageId) {\n this.detachLastMessageSignal();\n this.injectNewMessage(message);\n // If a tool call interrupted the previous stream, apply the pending offset so this\n // component only displays the text that follows the tool call (not the full accumulated\n // string which includes the already-displayed pre-tool prefix).\n if (this.nextTextOffset > 0 && this.lastMessageComponent) {\n this.lastMessageComponent.setInput('textOffset', this.nextTextOffset);\n this.nextTextOffset = 0;\n }\n }\n\n this.lastMessage = message;\n });\n }\n\n /**\n * Clears all messages from the message list and UI.\n */\n private clearMessages() {\n this.messageComponents.forEach(component => component.destroy());\n this.functionComponents.forEach(component => component.destroy());\n this.messageComponents.length = 0;\n this.functionComponents.length = 0;\n this.lastMessageComponent = undefined;\n this.lastMessage = undefined;\n this.nextTextOffset = 0;\n }\n\n /**\n * Injects the given messages from the history into the message list and the UI.\n *\n * @param history - The history to inject.\n */\n private injectHistory(history: Message[] | undefined) {\n if (!history) return;\n for (const message of history) {\n this.injectNewMessage(message);\n }\n }\n\n /**\n * Detaches the signal from the last message component, if any.\n */\n private detachLastMessageSignal() {\n this.lastMessageComponent?.instance.getService().complete();\n }\n\n /**\n * Injects a new message into the message list and the UI.\n * @param message - The new message to inject.\n */\n private injectNewMessage(message: Message) {\n const kind = identifyMessage(message) as MessageIdentity | undefined;\n if (kind) this.messageRenderers[kind]?.(message);\n else throw new Error(`Unknown message identity for message with id ${message.messageId}`);\n }\n\n /**\n * Append user message at the end of the message component list, user message is considered\n * to be the first stable message and act as an \"anchor\" for the agent turn.\n * @param message - Message object\n */\n private appendMessageUser(message: Message) {\n const component = this.viewContainer.createComponent(MessageUserComponent);\n\n component.setInput('message', message);\n\n this.messageComponents.push(component);\n this.el.nativeElement.appendChild(component.location.nativeElement);\n }\n\n /**\n * Insert agent message above debug message component and allow the debug button to be shown.\n * @param message - Message object\n */\n private insertMessageAgent(message: Message) {\n const component = this.viewContainer.createComponent(MessageAgentComponent);\n this.lastMessageComponent = component as ComponentRef<MessageAgentComponent>;\n\n (component.instance as MessageAgentComponent).getService().next(message);\n\n // TODO: change this when toolbar is split from MessageAgent\n // untracked: need to prevent watchHistory/watchMessage from re-running when debug is toggled\n if (untracked(() => this.hasDebugFeature())) component.instance.showDebugButton.set(true);\n\n this.insertMessageComponentAboveDebug(component);\n }\n\n /**\n * Insert function call component(s) in message component list.\n * @param payload - Content with function call, which will be used to create function component(s) and insert into the message list.\n */\n private insertFunctionCallComponent(payload: MessageContentFunctionCall): void {\n const exist = this.functionComponents.find(c => c.instance.getMessageId() === payload.callId);\n if (exist) return;\n const componentType = this.selectFunctionComponentType(payload);\n const component = this.viewContainer.createComponent(componentType);\n (component.instance as MessageFunctionComponent).call(payload);\n\n // TODO: might trigger issues with interspersed agent / function messages...\n this.functionComponents.push(component as ComponentRef<MessageFunctionComponent>);\n this.insertMessageComponentAboveDebug(component);\n }\n\n /**\n * Select Angular component type to render the function call based on the tool's\n * toolCardTemplateName, falling back to the function name.\n * Defaults to MessageFunctionComponent if no matching plugin found.\n * The value `_default_tool_template` explicitly means \"use the default template\".\n */\n private selectFunctionComponentType(payload: MessageContentFunctionCall): Type<MessageFunctionComponent> {\n const templateName =\n payload.toolCardTemplateName ??\n (payload.additionalProperties?.['toolCardTemplateName'] as string | undefined) ??\n (payload.additionalProperties?.['angularToolTemplateName'] as string | undefined);\n if (!templateName || templateName === '_default_tool_template') {\n return MessageFunctionComponent;\n }\n return this.toolCardPlugins[templateName] ?? MessageFunctionComponent;\n }\n\n /**\n * Inject function result into corresponding function call component.\n * @param payload - Content with function result, which will be used to find the matching function call component and inject the function result into it.\n */\n private insertFunctionResult(payload: MessageContentFunctionResult): void {\n const idx = this.functionComponents.findIndex(c => c.instance.getMessageId() === payload.callId);\n if (idx < 0) return;\n\n this.functionComponents[idx].instance.result(payload);\n this.functionComponents.splice(idx, 1);\n }\n\n /**\n * Insert function approval request message above debug message component\n * The function component(s) will be created from the content of the message and inserted into the message list.\n * @param message - Message object with function approval request content.\n */\n private insertMessageFunctionApprovalRequest(message: Message) {\n for (const content of message.contents) {\n\n const componentType = this.selectFunctionComponentType((content as MessageContentFunctionApprovalRequest).functionCall as MessageContentFunctionCall);\n const component = this.viewContainer.createComponent(componentType);\n\n (component.instance as MessageFunctionComponent).approvalRequest(content as MessageContentFunctionApprovalRequest);\n\n this.functionComponents.push(component as ComponentRef<MessageFunctionComponent>);\n this.insertMessageComponentAboveDebug(component);\n }\n }\n\n /**\n * Update function approval component with response message\n * The function component(s) will be updated based on the content of the message.\n * @param message - Message object with function approval response content.\n */\n private insertMessageFunctionApprovalResponse(message: Message) {\n for (const content of message.contents) {\n const component = this.functionComponents.find(\n c => c.instance.getMessageId() === (content as MessageContentFunctionApprovalResponse).functionCall.callId\n );\n (component?.instance as MessageFunctionComponent)?.approvalResponse(content as MessageContentFunctionApprovalResponse);\n\n this.functionComponents.splice(\n this.functionComponents.findIndex(c => c.instance.getMessageId() === component?.instance.getMessageId()),\n 1\n );\n };\n }\n\n /**\n * Append debug message component at the bottom of the DOM and the message component list.\n * @param message - Message object\n */\n private appendMessageDebugComponent(message: Message) {\n // untracked: need to prevent watchHistory/watchMessage from re-running when debug is toggled\n if (!untracked(() => this.hasDebugFeature())) return;\n\n const component = this.viewContainer.createComponent(MessageDebugComponent);\n this.lastMessageDebug = component as ComponentRef<MessageDebugComponent>;\n\n component.setInput('messageId', message.messageId);\n\n this.messageComponents.push(component);\n this.el.nativeElement.appendChild(component.location.nativeElement);\n }\n\n /**\n * Insert component above debug message component in both the DOM and the message component list.\n * @param component - Message component to be inserted\n */\n private insertMessageComponentAboveDebug(component: ComponentRef<MessageBaseComponent> | undefined) {\n if (!component) return;\n\n // The debug panel is the anchor for the current turn only when it is the last element in the list.\n // If debug was toggled off after a previous turn, old debug components remain in the array but are no longer the tail, in that case just append.\n const debugIsCurrentTurnAnchor = !!this.lastMessageDebug && this.messageComponents.at(-1)?.instance.getType() === 'debug';\n\n if (debugIsCurrentTurnAnchor) {\n // Insert this component right before the current turn's debug panel so it appears above it\n const lastIndex = this.messageComponents.length - 1;\n this.messageComponents.splice(lastIndex, 0, component);\n this.el.nativeElement.insertBefore(component.location.nativeElement, this.lastMessageDebug?.location.nativeElement);\n } else {\n // No active debug anchor for this turn: simply append at the bottom\n this.messageComponents.push(component);\n this.el.nativeElement.appendChild(component.location.nativeElement);\n }\n }\n\n /**\n * Handle the raising debug button click and open the next debug message in the DOM if any.\n * @param event - CustomEvent object\n */\n private onDebugPanelClick(event: CustomEvent<MessageAgentActionEvent>) {\n const messageId = event.detail.message?.messageId;\n\n if (!messageId) {\n error('No messageId defined for debug');\n return;\n }\n\n let debugMessageIndex = 0;\n\n // break on target message\n for (; debugMessageIndex < this.messageComponents.length; debugMessageIndex++)\n if (this.messageComponents[debugMessageIndex]?.instance?.getMessageId() === messageId) break;\n\n // greed for debug message\n for (; debugMessageIndex < this.messageComponents.length; debugMessageIndex++)\n if (this.messageComponents[debugMessageIndex]?.instance?.getType() === 'debug') break;\n\n const debugPanelComponent = this.messageComponents[debugMessageIndex];\n\n (debugPanelComponent?.location.nativeElement as HTMLElement)?.toggleAttribute('data-visible');\n }\n}\n","import { HttpClient, httpResource } from '@angular/common/http';\nimport { inject, Injectable, Signal } from '@angular/core';\nimport { catchError, firstValueFrom, iif, map, Observable, of, Subject, switchMap, take, tap, throwError } from 'rxjs';\n\nimport { globalConfig, Result } from '@sinequa/atomic';\n\nimport { LoggerService } from '../logger/logger.service';\nimport { AgentsStore } from '../stores';\nimport { AGENT_INSTANCE_ID } from '../tokens';\nimport { Message, SavedChat, SavedChatAddPayload, SavedChatDeletePayload, SavedChatEvent, SavedChatExistsPayload, SavedChatUpdatePayload } from '../types';\n\n@Injectable()\nexport class SavedChatsService {\n private readonly http = inject(HttpClient);\n private readonly instanceId = inject(AGENT_INSTANCE_ID);\n private readonly agentsStore = inject(AgentsStore);\n private readonly logger = inject(LoggerService);\n\n readonly savedChatsEvent = new Subject<SavedChatEvent>();\n\n /**\n * Returns an {@link HttpResourceRef} that resolves to the list of saved chats.\n *\n * @returns An {@link HttpResourceRef} that resolves to an array of {@link SavedChat}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatlist\n */\n getSavedChats(searchText: Signal<string | undefined> ) {\n return httpResource(() => {\n const data = {\n appName: globalConfig.app,\n query: {\n text: searchText()\n }\n };\n let url = `${globalConfig.backendUrl}/api/v2/agent/saved-chats/search`;\n\n return { method: 'POST', url, body: data, options: { responseType: 'json' as const } };\n },\n {\n defaultValue: [] as SavedChat[],\n parse: response => {\n const result = (response as { result?: Result | null } | null | undefined)?.result;\n const records = (result as any)?.records;\n if (Array.isArray(records)) {\n // Extract only the fields needed for display — avoids storing large article\n // objects (e.g. full conversation history) in memory for every list entry.\n return records.map((r: any): SavedChat => ({\n id: r.id,\n title: r.title ?? '',\n modifiedUTC: r.modified ?? r.modifiedUTC ?? ''\n }));\n }\n // Fallback to empty list if the response doesn't have the expected structure\n this.logger?.warn?.('Unexpected saved-chats search response shape', response);\n return [];\n },\n }\n );\n }\n\n /**\n * Returns an {@link HttpResourceRef} that resolves to the {@link SavedChat} identified by `chatId` value.\n *\n * @param chatId - The {@link Signal} handling the id of the saved chat to retrieve.\n * @param storeToDB - Whether to store the chat history in {@link SavedChatsDBService} for future reference (default: true).\n *\n * @returns A promise resolving to the {@link SavedChat} identified by `chatId` value.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatget\n */\n getSavedChat(chatId: string | undefined): Promise<SavedChat | undefined> {\n if (!chatId) return Promise.reject(undefined);\n\n const data: { [param: string]: string | number | boolean } = {\n appName: globalConfig.app ?? '',\n instanceId: this.instanceId ?? '',\n debug: this.agentsStore.debugMessages()\n };\n\n const url = `${globalConfig.backendUrl}/api/v2/agent/saved-chats/${chatId}`;\n\n return firstValueFrom(\n this.http.get(url, { params: data, responseType: 'json' }).pipe(\n take(1),\n map((response: unknown) => (response as SavedChat)),\n catchError(error => throwError(() => error))\n )\n );\n }\n\n /**\n * Checks if a chat with the given `chatId` exists.\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatId - The id of the chat to check for existence.\n *\n * @returns An {@link Observable} that emits a {@link SavedChatExistsPayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatexist\n */\n doesChatExists(chatId: string): Observable<SavedChatExistsPayload> {\n return this.http\n .head<SavedChatExistsPayload>(`${globalConfig.backendUrl}/api/v2/agent/saved-chats/${chatId}`)\n .pipe(\n take(1),\n map(() => ({ exists: true } as SavedChatExistsPayload)),\n catchError(error => {\n const status = (error && typeof error === 'object' && 'status' in error)\n ? (error as { status?: number }).status\n : undefined;\n\n // If the chat is not found, or if any HTTP/network error occurs, treat it as \"does not exist\".\n if (status === 404 || status === 0 || (typeof status === 'number' && status >= 400 && status < 600)) {\n return of({ exists: false } as SavedChatExistsPayload);\n }\n\n // For non-HTTP/unexpected errors, propagate the error.\n return throwError(() => error);\n })\n );\n }\n\n /**\n * Saves a new chat with the given `chatId` and `history`.\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatId - The id of the chat to save.\n * @param history - The history of the chat to save.\n * @param title - An optional title for the chat.\n *\n * @return An {@link Observable} that emits a {@link SavedChatAddPayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatadd\n */\n saveChat(chatId: string, history: Message[], title?: string): Observable<SavedChatAddPayload> {\n if (!this.canHistoryBeSaved(history)) {\n this.logger.error('[SavedChat] No user input found in history, aborting save');\n return throwError(() => 'No user input found in history');\n }\n\n const data = {\n appName: globalConfig.app,\n instanceId: this.instanceId,\n agentId: null, // where to get the agentId for now? should it be passed as a parameter from the component that calls saveChat?\n debug: this.agentsStore.debugMessages(),\n chatId,\n history,\n ...(title && { title })\n };\n\n return this.http\n .post<SavedChatAddPayload>(`${globalConfig.backendUrl}/api/v2/agent/saved-chats`, data)\n .pipe(\n take(1),\n // trigger savedChatsEvent on success\n tap(() => this.savedChatsEvent.next(SavedChatEvent.add)),\n map(response => response as SavedChatAddPayload),\n catchError(error => throwError(() => error))\n );\n }\n\n /**\n * Updates an existing chat identified by `chatId` with the given `update` object.\n * The `update` object can contain either or both of `history` and `title` properties.\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatId - The id of the chat to update.\n * @param update - An object containing the properties to update: `history` and/or `title`.\n *\n * @return An {@link Observable} that emits a {@link SavedChatUpdatePayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatupdate\n */\n updateSavedChat(chatId: string, update: { history?: Message[]; title?: string }): Observable<SavedChatUpdatePayload> {\n if (update.history && !this.canHistoryBeSaved(update.history)) {\n this.logger.error('[SavedChat] No user input found in history, aborting save');\n return throwError(() => 'No user input found in history');\n }\n\n return this.http\n .put<SavedChatUpdatePayload>(`${globalConfig.backendUrl}/api/v2/agent/saved-chats/${chatId}`, update)\n .pipe(\n take(1),\n // trigger savedChatsEvent on success\n tap(() => this.savedChatsEvent.next(update.title ? SavedChatEvent.rename : SavedChatEvent.update)),\n map(response => response as SavedChatUpdatePayload),\n catchError(error => throwError(() => error))\n );\n }\n\n /**\n * Combination of both save and update methods for chat history, by:\n * - Calling {@link doesChatExists} to check if the chat already exists\n * - Calling either {@link saveChat} or {@link updateSavedChat} based on the chat existence\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatId - The id of the chat to save or update.\n * @param history - The history of the chat to save or update.\n * @param title - An optional title for the chat (only used on first save).\n *\n * @return An {@link Observable} that emits either a {@link SavedChatAddPayload} or a {@link SavedChatUpdatePayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatadd\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatupdate\n */\n upsaveChat(chatId: string, history: Message[], title?: string): Observable<SavedChatAddPayload | SavedChatUpdatePayload> {\n if (history && !this.canHistoryBeSaved(history)) {\n this.logger.error('[SavedChat] No user input found in history, aborting save');\n return throwError(() => 'No user input found in history');\n }\n\n return this.doesChatExists(chatId).pipe(\n map(x => x.exists),\n switchMap(exists =>\n iif(() => !!exists, this.updateSavedChat(chatId, { history }), this.saveChat(chatId, history, title))\n ),\n take(1)\n );\n }\n\n /**\n * Deletes the chats identified by the given `chatIds`.\n *\n * The returned {@link Observable} emits once and completes.\n *\n * @param chatIds - The ids of the chats to delete.\n *\n * @return An {@link Observable} that emits a {@link SavedChatDeletePayload}.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/savedchatdelete\n */\n deleteSavedChat(chatIds: string[]): Observable<SavedChatDeletePayload> {\n const data = {\n debug: this.agentsStore.debugMessages(),\n chatIds\n };\n\n return this.http\n .delete<SavedChatDeletePayload>(`${globalConfig.backendUrl}/api/v2/agent/saved-chats`, { body: data })\n .pipe(\n take(1),\n // trigger savedChatsEvent on success\n tap(() => this.savedChatsEvent.next(SavedChatEvent.delete)),\n map(response => response as SavedChatDeletePayload),\n catchError(error => throwError(() => error))\n );\n }\n\n /**\n * Chat history is considered valid to be saved if it contains at least one message with:\n * - role equal to 'user'.\n * - additionalProperties.isUserInput equal to true.\n *\n * @param history - The chat history to check.\n *\n * @returns Whether the chat history is considered valid to be saved.\n */\n canHistoryBeSaved(history: Message[]): boolean {\n return history.filter(x => x.role === 'user' && x.additionalProperties?.isUserInput).length > 0;\n }\n}\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'more-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\r\n </svg>\r\n `\r\n})\r\nexport class MoreIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'square-pen-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\">\r\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\r\n <path\r\n d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\r\n </svg>\r\n `\r\n})\r\nexport class SquarePenIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'trash-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\">\r\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\r\n <path d=\"M3 6h18\" />\r\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n </svg>\r\n `\r\n})\r\nexport class TrashIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, signal } from '@angular/core';\r\n\r\nimport { ButtonComponent } from '../overrides';\r\nimport { BasePrompt, PromptActionRejected, PromptActionResolved } from '../feedback/base.prompt';\r\n\r\nexport type DeleteSubmit = PromptActionResolved;\r\nexport type DeleteCancel = PromptActionRejected;\r\n\r\n@Component({\r\n selector: 'DeletePrompt,deleteprompt,delete-prompt',\r\n imports: [ButtonComponent],\r\n template: `\r\n <div class=\"bg-menu-bg border-menu-border flex w-[min(90%,38rem)] flex-col gap-4 rounded-3xl border p-6 shadow-lg\">\r\n <div class=\"text-primary-foreground-dark flex flex-col gap-1\">\r\n <h2 class=\"text-lg font-semibold\">Delete chat</h2>\r\n <p>\r\n Are you sure you want to delete <span class=\"font-bold\">{{ chatTitle() }}</span\r\n >?\r\n </p>\r\n </div>\r\n\r\n <ul class=\"flex flex-row-reverse justify-start gap-2\">\r\n <li><button variant=\"destructive\" (click)=\"submit()\">Delete</button></li>\r\n <li><button variant=\"secondary\" (click)=\"cancel()\">Cancel</button></li>\r\n </ul>\r\n </div>\r\n `,\r\n host: {\r\n class: 'fixed inset-0 z-100000 flex items-center justify-center bg-black/30 backdrop-blur-sm',\r\n '[class.hidden]': 'hidden()',\r\n '[attr.tabIndex]': '-1'\r\n }\r\n})\r\nexport class DeletePrompt extends BasePrompt<DeleteSubmit, DeleteCancel> {\r\n protected readonly chatTitle = signal<string>('');\r\n\r\n override prompt(): Promise<DeleteSubmit | DeleteCancel>;\r\n /**\r\n * Displays the delete confirmation prompt for the given chat title.\r\n *\r\n * @param chatTitle - The title of the chat to be deleted, shown in the confirmation message.\r\n *\r\n * @returns A promise that resolves with the user's action (submit or cancel).\r\n */\r\n override prompt(chatTitle: string): Promise<DeleteSubmit | DeleteCancel>;\r\n override prompt(chatTitle?: string): Promise<DeleteSubmit | DeleteCancel> {\r\n this.chatTitle.set(chatTitle ?? '');\r\n return super.prompt();\r\n }\r\n}\r\n","import { Component, computed, ElementRef, inject, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { ButtonComponent } from '../overrides';\r\nimport { BasePrompt, PromptActionRejected, PromptActionResolved } from '../feedback/base.prompt';\r\n\r\nexport type RenameSubmit = PromptActionResolved & { name: string };\r\nexport type RenameCancel = PromptActionRejected;\r\n\r\n@Component({\r\n selector: 'RenamePrompt,renameprompt,rename-prompt',\r\n imports: [FormsModule, ButtonComponent],\r\n template: `\r\n <div class=\"bg-menu-bg border-menu-border flex w-[min(90%,28rem)] flex-col gap-4 rounded-3xl border p-6 shadow-lg\">\r\n <h2 class=\"text-primary-foreground-dark text-lg font-semibold\">Rename chat</h2>\r\n\r\n <input\r\n id=\"saved-chat-rename\"\r\n type=\"text\"\r\n class=\"placeholder-primary-foreground-muted border-stroke-primary-light bg-neutral-foreground-white text-primary-foreground-dark hover:border-stroke-primary-hovered hover:bg-primary-lighter hover:placeholder-primary-foreground-hovered hover:text-primary-foreground-dark focus:border-stroke-primary-pressed focus:bg-neutral-foreground-white focus:text-primary-foreground-dark focus:placeholder-primary-foreground-dark [&:not(:placeholder-shown)]:border-stroke-primary-base flex resize-none flex-col items-start justify-center gap-2 rounded-lg border px-2 py-1 transition-colors focus:border-2 focus:outline-none\"\r\n placeholder=\"Chat title...\"\r\n [(ngModel)]=\"name\"\r\n (keydown.enter)=\"canSubmit() && submit()\"\r\n (keydown.escape)=\"cancel()\" />\r\n\r\n <ul class=\"flex flex-row-reverse justify-start gap-2\">\r\n <li><button variant=\"primary\" [disabled]=\"!canSubmit()\" (click)=\"submit()\">Rename</button></li>\r\n <li><button variant=\"secondary\" (click)=\"cancel()\">Cancel</button></li>\r\n </ul>\r\n </div>\r\n `,\r\n host: {\r\n class: 'fixed inset-0 z-100000 flex items-center justify-center bg-black/30 backdrop-blur-sm',\r\n '[class.hidden]': 'hidden()',\r\n '[attr.tabIndex]': '-1'\r\n }\r\n})\r\nexport class RenamePrompt extends BasePrompt<RenameSubmit, RenameCancel> {\r\n private readonly el = inject(ElementRef);\r\n\r\n readonly name = model<string>('');\r\n\r\n protected readonly canSubmit = computed(() => this.name().trim().length > 0);\r\n\r\n override prompt(): Promise<RenameSubmit | RenameCancel>;\r\n /**\r\n * Displays the rename prompt pre-filled with the current chat title.\r\n *\r\n * @param currentName - The existing chat title to pre-fill in the input.\r\n *\r\n * @returns A promise that resolves with the user's action (submit with new name, or cancel).\r\n */\r\n override prompt(currentName: string): Promise<RenameSubmit | RenameCancel>;\r\n override prompt(currentName?: string): Promise<RenameSubmit | RenameCancel> {\r\n this.name.set(currentName ?? '');\r\n\r\n setTimeout(() => {\r\n const input = this.el.nativeElement.querySelector('input');\r\n input?.focus();\r\n input?.select();\r\n });\r\n\r\n return super.prompt();\r\n }\r\n\r\n override submit() {\r\n this.action.next({ action: 'submit', name: this.name().trim() } as RenameSubmit);\r\n }\r\n}\r\n","import { Component, computed, DestroyRef, effect, inject, input, output, signal, viewChild, viewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { filter, tap } from 'rxjs';\n\nimport { MenuComponent, MenuContentComponent } from '@sinequa/ui';\n\nimport { LoggerService } from '../logger/logger.service';\nimport { SignalRWebService } from '../signalr';\nimport { SavedChatEvent } from '../types';\nimport { SavedChatsService } from './saved-chats.service';\nimport { MoreIcon } from '../overrides/icons/more.icon';\nimport { SquarePenIcon } from '../overrides/icons/square-pen.icon';\nimport { TrashIcon } from '../overrides/icons/trash.icon';\nimport { isPromptActionRejected } from '../feedback/base.prompt';\nimport { DeletePrompt } from './delete.prompt';\nimport { RenamePrompt } from './rename.prompt';\n\n@Component({\n selector: 'SavedChat,saved-chat,savedchat',\n imports: [RouterLink, TrashIcon, MenuComponent, MenuContentComponent, MoreIcon, SquarePenIcon, RenamePrompt, DeletePrompt],\n template: `\n <RenamePrompt #renamePrompt />\n <DeletePrompt #deletePrompt />\n\n @for (chat of savedChats(); track chat.id) {\n <span\n class=\"data-[active=true]:bg-sage-900 data-[active=true]:text-sidebar-active-foreground hover:bg-sidebar-accent [&:active:not(:has(menu:active))]:bg-sage-900 flex items-center gap-1 rounded-lg px-3 py-1.5 [&:active:not(:has(menu:active))]:font-medium\"\n [attr.data-active]=\"chatId() === chat.id\"\n [class.bg-sidebar-accent]=\"openMenuChatId() === chat.id\"\n (mouseenter)=\"hoveredChatId.set(chat.id)\"\n (mouseleave)=\"hoveredChatId.set(null)\">\n <a\n class=\"grow truncate text-sm\"\n [routerLink]=\"'/chat/' + chat.id\"\n [class]=\"!isConnected() ? 'pointer-events-none opacity-50' : ''\"\n (click)=\"chatSelected.emit()\">\n {{ chat.title }}\n </a>\n\n @if (!readonly()) {\n <Menu\n #chatMenu\n [class.flex]=\"hoveredChatId() === chat.id || chatMenu.isOpen()\"\n [class.hidden]=\"hoveredChatId() !== chat.id && !chatMenu.isOpen()\"\n (mousedown)=\"$event.stopPropagation()\">\n <button\n class=\"text-sage-50 flex cursor-pointer justify-center rounded-lg opacity-50 hover:opacity-100\"\n [class.opacity-100]=\"chatMenu.isOpen()\">\n <more-icon class=\"h-5 w-5\" />\n </button>\n\n <MenuContent position=\"bottom-end\" class=\"border-menu-border bg-menu-bg rounded-3xl border p-2 shadow-lg\">\n <ul class=\"flex w-full flex-col gap-1\">\n <li>\n <button\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex w-full items-center gap-2 rounded-xl px-3 py-1.5\"\n (click)=\"renameSavedChat(chat.id, chat.title)\"\n [disabled]=\"!isConnected()\">\n <square-pen-icon />\n <label class=\"truncate\">Rename</label>\n </button>\n </li>\n <li>\n <button\n class=\"hover:bg-destructive-lightest hover:text-destructive-muted active:bg-destructive-lighter active:text-destructive-foreground text-destructive-foreground-muted flex w-full items-center gap-2 rounded-xl px-3 py-1.5\"\n (click)=\"deleteSavedChat(chat.id, chat.title)\"\n [disabled]=\"!isConnected()\">\n <trash-icon></trash-icon>\n Delete\n </button>\n </li>\n </ul>\n </MenuContent>\n </Menu>\n }\n </span>\n }\n `,\n host: {\n class: 'flex w-full flex-col gap-0.5 overflow-x-auto'\n }\n})\nexport class SavedChatComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly route = inject(ActivatedRoute);\n private readonly logger = inject(LoggerService);\n private readonly savedChatsService = inject(SavedChatsService, { optional: true });\n\n searchText = input<string | undefined>(undefined);\n\n /** When true, hides the edit and delete actions. */\n readonly readonly = input(false);\n\n /** Emitted when the user clicks on a chat link. */\n readonly chatSelected = output<void>();\n\n readonly savedChatsResource = this.savedChatsService?.getSavedChats(this.searchText);\n readonly savedChats = computed(() => (this.savedChatsResource?.hasValue() ? this.savedChatsResource.value() : []));\n readonly isConnected = inject(SignalRWebService).isConnected;\n\n readonly chatId = signal<string | undefined>(undefined);\n protected readonly hoveredChatId = signal<string | null>(null);\n protected readonly openMenuChatId = signal<string | null>(null);\n\n private readonly chatMenus = viewChildren(MenuComponent);\n private readonly renamePrompt = viewChild.required(RenamePrompt);\n private readonly deletePrompt = viewChild.required(DeletePrompt);\n\n constructor() {\n effect(() => {\n const chats = this.savedChats();\n const menus = this.chatMenus();\n const openIndex = menus.findIndex(m => m.isOpen());\n this.openMenuChatId.set(openIndex >= 0 ? (chats[openIndex]?.id ?? null) : null);\n });\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const { id } = params;\n if (id) this.chatId.set(id);\n });\n\n this.savedChatsService?.savedChatsEvent\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n // savedChats doesn't need to be reloaded on every event\n filter(\n event =>\n [SavedChatEvent.add, SavedChatEvent.rename, SavedChatEvent.delete].find(e => e === event) !== undefined\n ),\n tap(event => {\n this.logger.debug('[SavedChat] Received savedChatsEvent:', event);\n return event;\n })\n )\n .subscribe(() => this.savedChatsResource?.reload());\n }\n\n async renameSavedChat(id: string, currentName: string): Promise<void> {\n if (!this.savedChatsService) return;\n\n const result = await this.renamePrompt().prompt(currentName);\n\n if (isPromptActionRejected(result)) return;\n\n const { name } = result;\n this.savedChatsService.updateSavedChat(id, { title: name }).subscribe({\n next: () => this.logger.info('[SavedChat] Updated chat title', { id, name }),\n error: err => this.logger.error('[SavedChat] Error updating chat title', { id, err })\n });\n }\n\n async deleteSavedChat(id: string, chatTitle: string): Promise<void> {\n if (!this.savedChatsService) return;\n\n const result = await this.deletePrompt().prompt(chatTitle);\n\n if (isPromptActionRejected(result)) return;\n\n this.savedChatsService.deleteSavedChat([id]).subscribe({\n next: () => this.logger.info('[SavedChat] Saved chat deleted:', id),\n error: err => this.logger.error('[SavedChat] Error deleting saved chat:', { id, err })\n });\n }\n}","import { ChangeDetectionStrategy, Component, ElementRef, afterNextRender, signal, viewChild } from '@angular/core';\n\nimport { XMarkICon } from '@sinequa/ui';\n\nimport { ButtonComponent } from '../overrides';\nimport { SearchIcon } from '../overrides/icons/search.icon';\nimport { debouncedSignal } from '../utils';\nimport { SavedChatComponent } from './saved-chats';\n\n/**\n * Dialog component that lets the user browse and filter their saved chats.\n *\n * Open it programmatically by calling `open()` on a template reference:\n *\n * ```html\n * <saved-chats-dialog #savedChatsDialog />\n * <button (click)=\"savedChatsDialog.open()\">Open saved chats</button>\n * ```\n */\n@Component({\n selector: 'SavedChatsDialog,saved-chats-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [XMarkICon, ButtonComponent, SearchIcon, SavedChatComponent],\n template: `\n <dialog\n #dialogRef\n closedby=\"any\"\n class=\"m-auto w-[min(90%,36rem)] rounded-2xl p-0 outline-none backdrop:bg-black/50 backdrop:backdrop-blur-sm\">\n <div class=\"bg-menu-bg border-menu-border flex flex-col gap-3 rounded-2xl border p-4\">\n\n <div class=\"flex items-center justify-between\">\n <h2 class=\"text-primary-foreground-dark font-semibold\">Saved chats</h2>\n <button variant=\"ghost\" size=\"icon\" (click)=\"close()\">\n <XMarkIcon class=\"size-4\" />\n </button>\n </div>\n\n <div class=\"border-menu-border flex items-center gap-2 rounded-lg border px-3 py-1.5\">\n <search-icon class=\"text-primary-foreground-muted shrink-0\" />\n <input\n #searchInput\n type=\"search\"\n placeholder=\"Search chats...\"\n class=\"text-primary-foreground-base placeholder:text-primary-foreground-muted w-full bg-transparent text-sm focus:outline-none\"\n [value]=\"searchText() ?? ''\"\n (input)=\"searchText.set($any($event.target).value || undefined)\" />\n </div>\n\n <div class=\"max-h-72 overflow-y-auto\">\n <SavedChat [searchText]=\"debouncedSearchText()\" [readonly]=\"true\" (chatSelected)=\"close()\" />\n </div>\n\n </div>\n </dialog>\n `\n})\nexport class SavedChatsDialogComponent {\n private readonly dialogRef = viewChild.required<ElementRef<HTMLDialogElement>>('dialogRef');\n\n protected readonly searchText = signal<string | undefined>(undefined);\n protected readonly debouncedSearchText = debouncedSignal(this.searchText, 500);\n\n constructor() {\n afterNextRender(() => {\n // Restore body interactivity and scrollability when the dialog closes,\n // including cases triggered by closedby=\"any\" (outside click or Escape).\n this.dialogRef().nativeElement.addEventListener('close', () => {\n document.body.inert = false;\n document.body.classList.remove('overflow-hidden');\n });\n });\n }\n\n /** Opens the dialog and resets the search input. */\n public open(): void {\n this.searchText.set(undefined);\n // Prevent background scrolling and interaction while the dialog is open.\n // inert disables focus and pointer events; overflow-hidden hides the scrollbar.\n document.body.inert = true;\n document.body.classList.add('overflow-hidden');\n this.dialogRef().nativeElement.showModal();\n }\n\n /** Closes the dialog programmatically. */\n public close(): void {\n this.dialogRef().nativeElement.close();\n }\n}\n","import { Component, computed, DestroyRef, effect, inject, input, linkedSignal, signal } from '@angular/core';\nimport { createBrowserInspector } from '@statelyai/inspect';\nimport { filter, firstValueFrom, map } from 'rxjs';\nimport { assign, createActor, emit, fromPromise, setup, Subscription } from 'xstate';\nimport * as z from 'zod';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LoggerService } from '../logger/logger.service';\nimport { SavedChatsService } from '../saved-chats';\nimport { AgentsStore } from '../stores';\nimport { AGENT_INSTANCE_ID, INSPECT_XSTATE } from '../tokens';\nimport { AgentConfigSchema, HistoryFrame, Message } from '../types';\nimport { identifyMessage, sliceHistoryFromMessageId } from '../utils';\nimport { AgentService } from './agent.service';\n\n/** Data hold by the agent state machine */\nexport type AgentMachineContext = {\n history: Message[];\n message?: Message;\n hasSavedChat: boolean;\n connectionRetryCount: number;\n};\n\n/** Input to provide at state machine startup */\nexport type AgentMachineInput = {\n history: Message[];\n hasSavedChat: boolean;\n};\n\n/** State machine events */\nexport type AgentMachineEvents =\n // signalr connection events\n | { type: 'RETRY_CONNECTION' }\n | { type: 'CONNECTION_LOST' }\n // signalr frame events\n | { type: 'ON_FRAME_HISTORY'; history: Message[] }\n // initialization events\n | { type: 'LOAD_CHAT' }\n // user interaction events\n | { type: 'NEW_MESSAGE'; message: Message }\n | { type: 'REGENERATE_MESSAGE'; message: Message }\n | { type: 'EDIT_MESSAGE'; message: Message }\n | { type: 'EDITION_CANCELED' }\n | { type: 'EDITION_VALIDATED'; newMessage: Message; oldMessage: Message }\n | { type: 'PROMPT_USER' }\n | { type: 'PROMPT_FEEDBACK_POSITIVE'; message: Message; comment: string }\n | { type: 'PROMPT_FEEDBACK_NEGATIVE'; message: Message; comment: string; issueType: string }\n | { type: 'PROMPT_REJECTED' }\n | { type: 'APPROVAL_PROVIDED'; message: Message }\n | { type: 'STOP_GENERATION' };\n\n //#region shared events of the machine\n const onRegenerateMessage = {\n REGENERATE_MESSAGE: {\n description:\n 'The user requested to regenerate an Agent message\\n\\n' +\n 'The last Agent message is removed from history',\n target: 'AgentProcessing',\n actions: [\n {\n type: 'sliceHistoryFromMessageId'\n },\n {\n type: 'raiseEvent',\n params: {\n type: 'CLEAR_MESSAGE_LIST_FROM'\n }\n }\n ]\n }\n } as const\n\n/**\n * Base class for Agent components, providing state machine functionality.\n *\n * @remarks\n * This class isn't marked as abstract to allow Angular DI to work properly.\n * Extend this class to create specific Agent components.\n * Do not instantiate this class directly.\n */\n@Component({\n selector: 'abstract-agent-machine',\n providers: [LoggerService, AgentService],\n template: ` <h1>You should not see this.</h1> `\n})\nexport class Machine {\n protected readonly inspectXState = inject(INSPECT_XSTATE, { optional: true });\n protected readonly instanceId = inject(AGENT_INSTANCE_ID);\n protected readonly agentService = inject(AgentService);\n protected readonly agentsStore = inject(AgentsStore);\n protected readonly logger = inject(LoggerService);\n protected readonly savedChatsService = inject(SavedChatsService, { optional: true });\n protected readonly destroyRef = inject(DestroyRef);\n\n public readonly inputChatId = input<string | undefined>(undefined, { alias: 'chatId' });\n\n protected readonly chatId = linkedSignal(() => this.inputChatId() ?? undefined);\n protected readonly isReady = computed(() => this.agentsStore.ready());\n\n protected readonly afterHistoryFrame$ = this.agentService.afterFrame$.pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(x => x.name === 'history'),\n map(x => x.payload as HistoryFrame)\n );\n\n protected readonly config = signal<z.infer<typeof AgentConfigSchema> | undefined>(undefined);\n protected readonly state = signal<string | undefined>(undefined);\n\n protected agentActor;\n\n private actorSubscription: Subscription | undefined;\n\n // #region State Machine\n\n protected readonly machine = setup({\n types: {\n context: {} as AgentMachineContext,\n input: {} as AgentMachineInput,\n events: {} as AgentMachineEvents\n },\n actions: {\n incrementConnectionRetryCount: assign({\n connectionRetryCount: ({ context }) => context.connectionRetryCount + 1\n }),\n resetConnectionRetryCount: assign({\n connectionRetryCount: () => 0\n }),\n // ensure at initialization that a chatId exists, either:\n // 1. provided -> loaded chat\n // 2. generated -> new chat\n setupChatId: () => {\n if (!this.chatId()) this.chatId.set(crypto.randomUUID());\n this.agentService.chatId = this.chatId()!;\n },\n // raise a custom event to be caught by Agent component\n // wrap event with parentEvent to keep original event data\n raiseEvent: emit(({ event }, params: { type: string }) => ({ type: params.type, parentEvent: event })),\n injectFeedbackIntoMessage: assign({\n history: ({ context, event }, params: { action: 'positive' | 'negative' }) => {\n const { message, comment, issueType } = event as {\n type: 'PROMPT_FEEDBACK_POSITIVE' | 'PROMPT_FEEDBACK_NEGATIVE';\n message: Message;\n comment: string;\n issueType?: string;\n };\n const historyIndex = context.history.findIndex(msg => msg.messageId === message.messageId);\n\n // message found, inject feedback\n if (historyIndex > -1) {\n // ensure additionalProperties exists\n if (!context.history[historyIndex].additionalProperties)\n context.history[historyIndex].additionalProperties = {};\n // inject feedback\n context.history[historyIndex].additionalProperties.$userFeedback = {\n type: params.action,\n comment,\n issueType\n } as any;\n }\n\n return context.history;\n }\n }),\n sliceHistoryFromMessageId: assign({\n history: ({ context, event }) => {\n const { messageId } = (event as { type: 'REGENERATE_MESSAGE'; message: Message }).message;\n\n const idx = context.history.findIndex(m => m.messageId === messageId);\n if (idx < 0) throw new Error('Message to regenerate not found in history');\n\n const slicedHistory = context.history.slice(0, idx);\n const lastUserIdx = slicedHistory.findLastIndex(m => identifyMessage(m) === 'user');\n\n return slicedHistory.slice(0, lastUserIdx + 1);\n }\n }),\n updateAgentGeneratingStatus: (_, params: { value: boolean }) => this.agentService.setIsAgentGenerating(params.value)\n },\n // actors function are used in entry states\n actors: {\n // in case configuration hasn't been validated yet, validate it\n validateAgentConfiguration: fromPromise(async () => {\n try {\n this.agentsStore.getAgentInstanceConfiguration(this.instanceId);\n } catch (e) {\n this.logger.error(`[Agent] Invalid agent configuration for instanceId:`, this.instanceId);\n return Promise.reject(e);\n }\n\n return Promise.resolve();\n }),\n // start signalr connection\n startConnection: fromPromise(async () => {\n await this.agentService.buildAgentConnection();\n\n try {\n await this.agentService.startConnection();\n } catch (e) {\n return Promise.reject(e);\n }\n\n return Promise.resolve();\n }),\n // load current saved chat into context if a chatId is provided\n loadSavedChat: fromPromise(async () => {\n const savedChat = await this.savedChatsService?.getSavedChat(this.inputChatId());\n\n if (savedChat?.history) return Promise.resolve(savedChat.history);\n\n return Promise.reject();\n }),\n // save current chat history to backend\n upsaveChat: fromPromise(async ({ input }) =>\n this.savedChatsService\n ? firstValueFrom(\n this.savedChatsService!.upsaveChat(this.agentService.chatId, (input! as { history: Message[] }).history, this.agentService.generatedTitle)\n )\n : Promise.reject('No SavedChatsService available')\n ),\n // send current history to Agent to start an invocation\n sendHistoryToAgent: fromPromise(async ({ input }) =>\n this.agentService.sendHistoryToAgent((input as { history: Message[] }).history)\n ),\n // request the backend to abort the current generation\n stopGeneration: fromPromise(async () => this.agentService.stopGeneration())\n },\n guards: {\n canRetryToConnect: ({ context }) => context.connectionRetryCount < 2,\n hasSavedChat: ({ context }) => context.hasSavedChat,\n approvalRequired: ({ context }) => {\n if (context.history.length === 0) return false;\n return identifyMessage(context.history.at(-1)) === 'functionApprovalRequest';\n }\n }\n }).createMachine({\n context: ({ input }) => ({\n history: input.history ?? [],\n hasSavedChat: input.hasSavedChat ?? false,\n message: undefined,\n connectionRetryCount: 0\n }),\n id: 'AgentMachine',\n initial: 'CheckingAgentConfiguration',\n states: {\n CheckingAgentConfiguration: {\n description: 'Validates the Agent JSON configuration',\n invoke: {\n src: 'validateAgentConfiguration',\n onDone: {\n target: 'Connecting'\n },\n onError: {\n target: 'ConfigurationIsInvalid'\n }\n }\n },\n ConfigurationIsInvalid: {\n description: 'The agent configuration is invalid, cannot proceed further',\n type: 'final'\n },\n Connecting: {\n description: 'Start a SignalR connection if counter is not reached',\n invoke: {\n src: 'startConnection',\n onDone: {\n target: 'Connected'\n },\n onError: [\n {\n target: 'RetryToConnect',\n guard: {\n type: 'canRetryToConnect'\n }\n },\n {\n target: 'Disconnected'\n }\n ]\n }\n },\n RetryToConnect: {\n description: 'Increment counter, then waits before retrying to connect',\n after: {\n 2000: {\n target: 'Connecting'\n }\n },\n entry: {\n type: 'incrementConnectionRetryCount'\n }\n },\n Disconnected: {\n description: 'The agent is disconnected, connection can happen again on user action',\n on: {\n // TODO: this event is never emitted currently\n RETRY_CONNECTION: {\n target: 'Connecting'\n }\n }\n },\n Connected: {\n description: 'The agent is connected, ready to operate',\n initial: 'Initialize',\n on: {\n // TODO: this event is never emitted currently\n CONNECTION_LOST: {\n target: 'Connecting'\n }\n },\n entry: {\n type: 'resetConnectionRetryCount'\n },\n states: {\n Initialize: {\n description:\n `Setup minimal context for Agent operation:\\n` +\n `- no chatId provided, we start a new chat with a generated chatId\\n` +\n `- chatId provided, we load the saved chat from backend`,\n entry: {\n type: 'setupChatId'\n },\n invoke: {\n src: 'loadSavedChat',\n onDone: {\n target: 'SavedChatLoaded',\n actions: assign({\n history: ({ event }) => event.output ?? []\n })\n },\n onError: {\n target: 'SavedChatLoaded',\n actions: assign({\n history: () => []\n })\n }\n }\n },\n SavedChatLoaded: {\n description:\n `Saved chat has been loaded\\n\\n`,\n entry: {\n type: 'raiseEvent',\n params: { type: 'SAVED_CHAT_LOADED' }\n },\n after: {\n 100: {\n target: 'Idle'\n }\n }\n },\n Idle: {\n description: 'The Agent is idle, waiting for user interaction',\n entry: {\n type: 'updateAgentGeneratingStatus',\n params: { value: false }\n },\n // Check upon entering if we need to lock for approval\n after: {\n 50: {\n target: 'WaitingForApproval',\n guard: {\n type: 'approvalRequired'\n }\n }\n },\n on: {\n LOAD_CHAT: {\n description: 'Current chatId has been updated, load new saved chat',\n target: 'Initialize'\n },\n NEW_MESSAGE: {\n description:\n 'The user pressed enter with a new message to send to the Agent\\n\\n' +\n 'New message is appended to history',\n target: 'AgentProcessing',\n actions: assign({\n // append new message to history\n history: ({ context, event }: { context: any; event: { type: 'NEW_MESSAGE'; message: Message } }) => [\n ...(context.history ?? []),\n event.message\n ]\n })\n },\n ...onRegenerateMessage,\n EDIT_MESSAGE: {\n description: 'The user started a message edition\\n\\n' + 'Store editing message in context',\n target: 'Editing',\n actions: assign({\n // save editing message in context\n message: ({ event }) => (event as { type: 'EDIT_MESSAGE'; message: Message }).message\n })\n },\n PROMPT_USER: {\n description: 'Prompt the user for more information about current action',\n target: 'PromptingUser'\n }\n }\n },\n Editing: {\n description: 'The user is editing a message',\n entry: {\n type: 'raiseEvent',\n params: { type: 'EDITION_STARTED' }\n },\n on: {\n EDITION_VALIDATED: {\n target: 'EditionValidated'\n },\n EDITION_CANCELED: {\n target: 'EditionCanceled'\n }\n }\n },\n EditionValidated: {\n description:\n 'The user validated the message edition\\n\\n' +\n 'Update history by slicing up to old message and appending edited message',\n entry: [\n // Existing context update\n assign({\n // store new message in context\n message: ({ event }) => (event as { type: 'EDITION_VALIDATED'; newMessage: Message }).newMessage,\n // update history by slicing up to old message and appending new message\n history: ({ context, event }) => {\n const { newMessage, oldMessage } = event as {\n type: 'EDITION_VALIDATED';\n newMessage: Message;\n oldMessage: Message;\n };\n\n return [...sliceHistoryFromMessageId(context.history, oldMessage.messageId), newMessage];\n }\n }),\n // Emit event\n {\n type: 'raiseEvent',\n params: { type: 'EDITION_COMPLETED' }\n }\n ],\n after: {\n 100: {\n target: 'AgentProcessing'\n }\n }\n },\n EditionCanceled: {\n description: 'The user canceled the message edition',\n entry: {\n type: 'raiseEvent',\n params: { type: 'EDITION_ABORTED' }\n },\n after: {\n 50: {\n target: 'Idle'\n }\n }\n },\n PromptingUser: {\n description:\n 'State used to prompt the user for more information\\n\\n' +\n 'Could be for the feedback or the user-in-the-loop scenarios',\n entry: {\n type: 'raiseEvent',\n params: {\n type: 'PROMPT_USER_ENTER'\n }\n },\n on: {\n PROMPT_REJECTED: {\n description: 'User has canceled the prompt',\n target: 'Idle'\n },\n PROMPT_FEEDBACK_POSITIVE: {\n target: 'TryUpsaveChat',\n actions: {\n type: 'injectFeedbackIntoMessage',\n params: { action: 'positive' }\n }\n },\n PROMPT_FEEDBACK_NEGATIVE: {\n target: 'TryUpsaveChat',\n actions: {\n type: 'injectFeedbackIntoMessage',\n params: { action: 'negative' }\n }\n }\n },\n exit: {\n type: 'raiseEvent',\n params: {\n type: 'PROMPT_USER_EXIT'\n }\n }\n },\n WaitingForApproval: {\n description: '- Waiting for user to approve/reject function calls when Agent is locked for approval \\n\\n' +\n '- While in this state, Agent is locked and will not process any new messages until approval is provided\\n\\n' +\n '- Once approval is provided, approval message is injected into history and Agent can start processing again',\n entry: {\n type: 'raiseEvent',\n params: { type: 'APPROVAL_MODE_ENTER' }\n },\n on: {\n APPROVAL_PROVIDED: {\n target: 'AgentProcessing',\n actions: assign({\n // append approval message to history\n history: ({ context, event }: { context: any; event: { type: 'APPROVAL_PROVIDED'; message: Message } }) => [\n ...(context.history ?? []),\n event.message\n ]\n })\n },\n ...onRegenerateMessage\n },\n exit: {\n type: 'raiseEvent',\n params: { type: 'APPROVAL_MODE_EXIT' }\n },\n },\n AgentProcessing: {\n description: '- Invokes the Agent and listens for SignalR frames.\\n\\n' +\n '- When the Agent is generating an answer and triggers message frame through SignalR,\\n\\n' +\n '- component should be smart enough to process them\\n\\n' +\n '- Attach SignalR frames to the machine only if they trigger an update into the context\\n\\n' +\n ' to avoid any noise in the state machine',\n entry: {\n type: 'updateAgentGeneratingStatus',\n params: { value: true }\n },\n invoke: {\n src: 'sendHistoryToAgent',\n input: ({ context }) => ({ history: context.history }),\n onDone: {\n target: 'TryUpsaveChat'\n },\n onError: {\n target: 'Idle',\n actions: {\n type: 'raiseEvent',\n params: {\n type: 'AGENT_INVOCATION_FAILED'\n }\n }\n }\n },\n on: {\n ON_FRAME_HISTORY: {\n description: 'Agent received SignalR history frame,\\n\\n' + 'update context history accordingly',\n actions: assign({\n history: ({ event }) => (event as { type: 'ON_FRAME_HISTORY'; history: Message[] }).history\n })\n },\n STOP_GENERATION: {\n description: 'User requested to abort the current generation\\n\\n',\n target: 'StoppingGeneration'\n }\n }\n },\n StoppingGeneration: {\n description:\n '- User requested to stop the current generation\\n\\n' +\n '- On success: any partial history already received is preserved and saved via TryUpsaveChat\\n\\n' +\n '- On error: transitions directly to Idle — generation may still complete on the server',\n invoke: {\n src: 'stopGeneration',\n onDone: {\n target: 'TryUpsaveChat',\n actions: {\n type: 'raiseEvent',\n params: { type: 'AGENT_STOPPED_GENERATION' }\n }\n },\n onError: {\n target: 'Idle',\n actions: {\n type: 'raiseEvent',\n params: { type: 'AGENT_FAILED_TO_STOP_GENERATION' }\n }\n }\n },\n //TODO : to be reworked. Better to rely on the invocation response than the history frame\n on: {\n ON_FRAME_HISTORY: {\n description: 'Update history with partial response received during cancellation',\n actions: assign({\n history: ({ event }) => (event as { type: 'ON_FRAME_HISTORY'; history: Message[] }).history\n })\n }\n }\n },\n TryUpsaveChat: {\n description: 'Wrap upsaveChat called with hasSavedChat guard or go to EndOfInteraction',\n after: {\n 100: [\n {\n target: 'UpsaveChat',\n guard: {\n type: 'hasSavedChat'\n }\n },\n {\n target: 'EndOfInteraction'\n }\n ]\n }\n },\n UpsaveChat: {\n description: 'Saves current chatId history to backend',\n invoke: {\n src: 'upsaveChat',\n input: ({ context }) => ({ history: context.history }),\n onDone: {\n target: 'EndOfInteraction'\n },\n onError: {\n target: 'FailedToSaveChat'\n }\n }\n },\n FailedToSaveChat: {\n description: 'Notify that saving chat has failed',\n after: {\n 50: {\n target: 'EndOfInteraction'\n }\n }\n },\n EndOfInteraction: {\n description:\n '- Agent invocation has returned\\n' + '- Chat has been saved if needed\\n' + '- Go back to Idle state',\n always: {\n target: 'Idle'\n }\n }\n }\n }\n }\n });\n\n // #endregion\n\n constructor() {\n const inspect = this.inspectXState ? createBrowserInspector().inspect : undefined;\n\n this.agentActor = createActor(this.machine, {\n inspect,\n input: { history: [], hasSavedChat: true }\n });\n\n // listen to history frames\n this.afterHistoryFrame$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: history => this.onHistory(history) });\n\n // once ready, start listening to state changes and propagate them to state signal\n effect(() => this.isReady() && this.listenToStateChanges());\n\n // on chatId changes, load the chatId saved chat\n effect(() => {\n this.inputChatId();\n this.agentActor.send({ type: 'LOAD_CHAT' });\n });\n\n // cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.agentActor.stop();\n this.actorSubscription?.unsubscribe();\n this.actorSubscription = undefined;\n });\n }\n\n public getChatId(): string | undefined {\n return this.chatId();\n }\n\n /**\n * Updates the Agent machine context with the received history frame.\n *\n * @param history - History frame received from SignalR.\n */\n protected onHistory(history: HistoryFrame) {\n this.agentActor.send({ type: 'ON_FRAME_HISTORY', history: history.history });\n }\n\n /** Listen to state changes from the XState actor and propagate them to the state signal. */\n private listenToStateChanges() {\n this.actorSubscription = this.agentActor.subscribe(state => {\n // logic provided from xstate, avoid changing it\n const stateValueString = state._nodes\n .filter(s => s.type === 'atomic' || s.type === 'final')\n .map(s => s.id)\n .join(', ')\n .split('.')\n .slice(1)\n .join('.');\n\n const skimmedState = /Connected\\.(.*)/g.exec(stateValueString)?.[1];\n\n if (skimmedState) this.state.set(skimmedState);\n });\n\n this.agentActor.start();\n }\n}\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'animated-robot',\r\n standalone: true,\r\n template: `\r\n <svg\r\n width=\"clamp(110px,20vw,140px)\"\r\n height=\"clamp(110px,20vw,140px)\"\r\n viewBox=\"0 0 107 123\"\r\n overflow=\"visible\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <!-- Robot body -->\r\n <g class=\"robot-float\">\r\n <path\r\n d=\"M41.063 92.8533C41.063 89.9548 65.9327 89.9548 65.9327 92.8533C65.9327 102.919 57.8783 107.393 53.4978 107.393C49.1174 107.393 41.0629 103.199 41.063 92.8533Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M40.7705 87.1611H66.2254L65.247 92.0754C65.247 92.0754 61.544 98.5966 53.4979 98.5966C45.4519 98.5966 41.7488 92.0754 41.7488 92.0754L40.7705 87.1611Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M41.2095 89.3606C44.7504 95.2836 61.477 95.9873 65.7866 89.3606L65.1429 92.586C65.1429 92.586 61.6351 99.0523 53.589 99.0523C45.5429 99.0523 41.8399 92.5312 41.8399 92.5312L41.2095 89.3606Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M41.707 91.8535C48.5828 99.6237 58.3258 100.064 65.2923 91.8535L65.1431 92.5866C65.1431 92.5866 61.5799 99.2428 53.4428 99.0667C45.3058 98.8907 41.8387 92.5279 41.8387 92.5279L41.707 91.8535Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <path\r\n d=\"M36.2356 58.3379L42.6024 56.2755C43.1763 56.0896 43.6945 55.7628 44.1096 55.3249L44.8668 54.5261H53.4981H61.9946L62.9201 55.4161C63.3143 55.7952 63.7894 56.0798 64.3097 56.2483L70.7606 58.3379C70.7606 58.3379 79.977 92.6442 53.4981 92.6442C27.0192 92.6442 36.2356 58.3379 36.2356 58.3379Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M45.8008 51.5938H61.0152L62.4781 55.992C62.4781 55.992 62.4781 60.3902 53.408 60.3902C44.3379 60.3902 44.3379 55.992 44.3379 55.992L45.8008 51.5938Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M44.4842 55.5525C44.4842 55.5525 45.8008 59.3643 53.408 59.3643C61.1615 59.2177 62.3318 55.5525 62.3318 55.5525L62.4781 55.9923C62.4781 55.9923 62.4781 60.3906 53.408 60.3906C44.3379 60.3906 44.3379 55.9923 44.3379 55.9923L44.4842 55.5525Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <path\r\n d=\"M45.801 51.5938H61.0154L61.9897 54.5259C58.2358 55.992 49.0194 55.8454 44.8267 54.5259L45.801 51.5938Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M35.8369 61.116L38.7593 68.2758L21.7533 78.6587L17.6943 71.6132L35.8369 61.116Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <ellipse\r\n cx=\"6.12934\"\r\n cy=\"13.247\"\r\n rx=\"6.12934\"\r\n ry=\"13.247\"\r\n transform=\"matrix(-0.930676 0.365844 0.364479 0.931211 17.9902 51.9517)\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M24.1684 67.8669C24.125 68.3848 24.1877 68.8574 24.3774 69.2652C25.3183 71.2865 29.4416 71.972 33.6998 71.3643L38.7593 68.2751L35.8371 61.1162L24.1684 67.8669Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M12.7492 49.255C13.3863 51.8038 13.9028 53.87 15.9643 53.2778C18.0259 52.6857 17.5094 50.6195 16.8723 48.0707C16.2352 45.522 14.7958 43.7209 13.6572 44.048C12.5186 44.375 12.1121 46.7063 12.7492 49.255Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M12.3256 46.4137L13.8402 53.4262C13.9337 53.6256 14.2169 53.6761 14.2169 53.6761C14.797 50.1031 13.7835 47.4465 12.3256 46.4137Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M9.24327 49.195C9.88036 51.7438 10.3968 53.81 12.3539 53.2478C14.311 52.6857 13.7946 50.6195 13.1575 48.0707C12.5204 45.522 11.1277 43.7075 10.0468 44.0179C8.96593 44.3284 8.60617 46.6463 9.24327 49.195Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M9.11613 47.3609L10.6307 54.3734C10.7242 54.5729 11.0074 54.6234 11.0074 54.6234C11.5875 51.0503 10.574 48.3938 9.11613 47.3609Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M6.35345 51.079C6.84913 53.6636 7.25096 55.7588 9.17289 55.3353C11.0948 54.9117 10.693 52.8165 10.1973 50.2319C9.70163 47.6472 8.43933 45.7416 7.37788 45.9755C6.31642 46.2095 5.85777 48.4943 6.35345 51.079Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M17.8804 52.9711L22.1191 54.2944C21.8268 60.593 15.688 65.1338 11.0107 62.6387C7.6489 60.3 7.9413 58.3958 7.21048 54.2944C9.98759 51.9507 13.2032 51.2134 17.4419 51.2134L17.8804 52.9711Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M8.95401 60.7216C13.8651 63.6512 17.6063 61.5126 21.1143 58.2314C19.3603 62.0985 14.6667 64.6765 10.9542 62.6258C9.93606 61.8998 9.40999 61.4447 8.95401 60.7216Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <path\r\n d=\"M18.0259 52.8301C15.5412 54.7343 15.6873 58.1034 18.0259 58.6893C22.3765 59.7792 22.5686 53.1231 22.7032 51.3653C22.8377 49.6076 22.2499 48.1929 21.0954 47.9963C19.9409 47.7997 18.4644 49.4611 18.0259 52.8301Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M44.3311 60.4957C48.1976 70.1742 26.7457 72.7654 24.9504 68.2716C23.1552 63.7777 40.4647 50.8173 44.3311 60.4957Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M71.5269 60.8879L68.6045 68.0478L85.6105 78.4307L89.6695 71.3852L71.5269 60.8879Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <ellipse\r\n cx=\"6.12934\"\r\n cy=\"13.247\"\r\n rx=\"6.12934\"\r\n ry=\"13.247\"\r\n transform=\"matrix(0.930676 0.365844 -0.364479 0.931211 89.3735 51.7236)\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M83.1954 67.6389C83.2388 68.1568 83.1761 68.6293 82.9864 69.0371C82.0455 71.0585 77.9221 71.744 73.664 71.1363L68.6045 68.0471L71.5267 60.8882L83.1954 67.6389Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n d=\"M94.6141 49.027C93.977 51.5758 93.4605 53.642 91.399 53.0498C89.3375 52.4577 89.8539 50.3915 90.4911 47.8428C91.1282 45.294 92.5675 43.4929 93.7061 43.82C94.8447 44.147 95.2512 46.4783 94.6141 49.027Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M95.0377 46.1856L93.5231 53.1981C93.4296 53.3976 93.1464 53.4481 93.1464 53.4481C92.5663 49.875 93.5798 47.2185 95.0377 46.1856Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M98.12 48.9672C97.4829 51.516 96.9665 53.5822 95.0093 53.02C93.0522 52.4579 93.5687 50.3917 94.2058 47.843C94.8429 45.2942 96.2356 43.4797 97.3165 43.7902C98.3974 44.1006 98.7571 46.4185 98.12 48.9672Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M98.2471 47.1332L96.7325 54.1456C96.6391 54.3451 96.3558 54.3956 96.3558 54.3956C95.7758 50.8225 96.7892 48.166 98.2471 47.1332Z\"\r\n style=\"fill: var(--rc-6)\" />\r\n <path\r\n d=\"M101.01 50.8512C100.514 53.4358 100.112 55.531 98.1904 55.1075C96.2685 54.684 96.6703 52.5887 97.166 50.0041C97.6616 47.4195 98.924 45.5138 99.9854 45.7478C101.047 45.9817 101.506 48.2665 101.01 50.8512Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M89.4833 52.7431L85.2446 54.0664C85.537 60.3649 91.6758 64.9058 96.353 62.4107C99.7149 60.072 99.4225 58.1678 100.153 54.0664C97.3762 51.7227 94.1606 50.9854 89.9218 50.9854L89.4833 52.7431Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M98.4098 60.4936C93.4987 63.4231 89.7574 61.2845 86.2495 58.0034C88.0035 61.8705 92.697 64.4485 96.4096 62.3978C97.4277 61.6717 97.9538 61.2167 98.4098 60.4936Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <path\r\n d=\"M89.3373 52.6023C91.8221 54.5066 91.676 57.8756 89.3373 58.4615C84.9868 59.5515 84.7947 52.8953 84.6601 51.1375C84.5255 49.3798 85.1134 47.9651 86.2679 47.7685C87.4224 47.5719 88.8989 49.2333 89.3373 52.6023Z\"\r\n style=\"fill: var(--rc-5)\" />\r\n <path\r\n d=\"M62.8876 60.3985C59.0211 70.077 80.4731 72.6683 82.2683 68.1744C84.0636 63.6805 66.7541 50.7201 62.8876 60.3985Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n d=\"M86.1639 23.4558C85.3943 18.6693 80.8907 15.4155 76.1047 16.1883L79.3161 36.1626C84.102 35.3898 87.358 30.8832 86.5885 26.0967L86.1639 23.4558Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M14.2381 35.0696C13.4686 30.2831 16.7245 25.7764 21.5105 25.0036L24.7218 44.9779C19.9359 45.7507 15.4322 42.4969 14.6627 37.7104L14.2381 35.0696Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n d=\"M80.0403 22.2357C83.4701 43.5693 70.7841 50.9056 54.113 53.5974C37.4418 56.2893 23.0985 53.3174 19.6687 31.9838C17.1596 16.3773 26.0362 3.78033 45.596 0.622061C62.2671 -2.06979 77.0708 3.76567 80.0403 22.2357Z\"\r\n style=\"fill: var(--rc-1)\" />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M47.919 13.8394C69.1693 10.4002 73.1453 15.0776 75.0617 27.0259C75.0857 27.175 75.1068 27.3232 75.1281 27.4702C73.2787 16.558 69.1539 12.3496 48.2237 15.737C27.0835 19.1584 24.9597 26.1117 26.3574 35.4246C26.3282 35.2589 26.2989 35.0914 26.2718 34.9221C24.6524 24.8263 26.4427 17.3153 47.919 13.8394Z\"\r\n style=\"fill: var(--rc-7)\" />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M53.4003 48.0153C32.1501 51.4546 28.1741 46.7771 26.2576 34.8288C26.2337 34.6797 26.2125 34.5315 26.1912 34.3845C28.0406 45.2967 32.1655 49.5051 53.0956 46.1178C74.2358 42.6964 76.3596 35.743 74.9619 26.4301C74.9911 26.5958 75.0204 26.7634 75.0476 26.9326C76.6669 37.0285 74.8767 44.5395 53.4003 48.0153Z\"\r\n style=\"fill: var(--rc-8)\" />\r\n <path\r\n d=\"M75.0548 27.0061C77.1483 40.046 68.2044 44.7244 53.2621 47.1406C37.2408 49.7313 28.3645 47.9345 26.2711 34.8946C24.7396 25.3553 26.5899 18.2325 48.0638 14.7601C69.3116 11.3243 73.2424 15.7166 75.0548 27.0061Z\"\r\n style=\"fill: var(--rc-9)\" />\r\n <path\r\n d=\"M73.6115 27.2398C75.4806 38.8824 67.0417 43.1328 52.9838 45.4059C37.9106 47.8433 29.5838 46.3039 27.7147 34.6614C26.3474 26.1443 28.1394 19.7621 48.3424 16.4953C68.3328 13.2628 71.9933 17.16 73.6115 27.2398Z\"\r\n style=\"fill: var(--rc-3)\" />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M48.345 16.499C68.3369 13.2636 71.9974 17.1644 73.6157 27.253C73.6347 27.3716 73.6506 27.4897 73.6675 27.6067C72.0943 18.4104 68.2778 14.9163 48.6022 18.1005C28.7208 21.318 26.6171 27.2362 27.7854 35.0968C27.7611 34.9596 27.7372 34.8209 27.7147 34.6809C26.3474 26.1564 28.1403 19.7688 48.345 16.499Z\"\r\n style=\"fill: var(--rc-2)\" />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M52.9733 45.356C32.9815 48.5914 29.321 44.6905 27.7027 34.602C27.6837 34.4834 27.6678 34.3653 27.6509 34.2483C29.2241 43.4447 33.0411 46.9386 52.7171 43.7543C72.5981 40.5368 74.7013 34.6188 73.5329 26.7582C73.5572 26.8953 73.5812 27.0341 73.6037 27.1741C74.971 35.6985 73.1781 42.0861 52.9733 45.356Z\"\r\n style=\"fill: var(--rc-4)\" />\r\n <g filter=\"url(#filter0_f_974_23285)\">\r\n <path\r\n d=\"M39.2607 28.7388C42.2377 28.1544 44.6494 31.4575 44.8103 33.9976C44.8292 34.2962 44.8665 34.5933 44.8603 34.8857C44.86 34.9014 44.8572 34.9171 44.8511 34.9305C44.845 34.9439 44.8357 34.954 44.8243 34.9588C44.8128 34.9636 44.7998 34.9628 44.7872 34.9573C44.7745 34.9517 44.7635 34.9414 44.7533 34.9305C44.5727 34.7355 44.381 34.5469 44.1934 34.3694C42.4443 32.7139 41.0193 32.2441 39.8466 32.4851C39.8388 32.4868 39.8309 32.4881 39.8229 32.489C38.6281 32.622 37.429 33.5046 36.304 35.638C36.1834 35.8669 36.0625 36.1073 35.9543 36.3507C35.9482 36.3643 35.9411 36.3776 35.9309 36.387C35.9207 36.3964 35.9087 36.4013 35.8963 36.4005C35.884 36.3997 35.8719 36.3931 35.8618 36.3824C35.8517 36.3716 35.8442 36.3576 35.8389 36.3429C35.7399 36.0679 35.6634 35.7793 35.6035 35.4858C35.3369 34.1795 35.3743 32.7372 35.957 31.3746C36.5369 30.0185 37.8538 28.9369 39.2115 28.7467C39.2279 28.7444 39.2444 28.742 39.2607 28.7388Z\"\r\n fill=\"#F1F8F4\" />\r\n <path\r\n d=\"M60.5004 25.3091C63.4775 24.7247 65.8891 28.0278 66.0501 30.5679C66.069 30.8666 66.1063 31.1636 66.1 31.456C66.0997 31.4717 66.097 31.4874 66.0909 31.5008C66.0848 31.5142 66.0755 31.5243 66.064 31.5291C66.0526 31.5339 66.0396 31.5332 66.0269 31.5276C66.0143 31.522 66.0032 31.5117 65.9931 31.5008C65.8124 31.3058 65.6207 31.1172 65.4332 30.9397C63.684 29.2842 62.259 28.8144 61.0864 29.0555C61.0785 29.0571 61.0706 29.0584 61.0626 29.0593C59.8678 29.1923 58.6688 30.0749 57.5438 32.2083C57.4231 32.4372 57.3022 32.6777 57.194 32.921C57.188 32.9346 57.1808 32.948 57.1706 32.9573C57.1605 32.9667 57.1484 32.9716 57.1361 32.9708C57.1237 32.97 57.1116 32.9634 57.1016 32.9527C57.0915 32.9419 57.0839 32.928 57.0786 32.9132C56.9796 32.6382 56.9031 32.3497 56.8432 32.0561C56.5767 30.7498 56.6141 29.3076 57.1968 27.9449C57.7767 26.5888 59.0935 25.5072 60.4512 25.317C60.4677 25.3147 60.4841 25.3123 60.5004 25.3091Z\"\r\n fill=\"#F1F8F4\" />\r\n </g>\r\n <path\r\n d=\"M39.2607 28.7388C42.2377 28.1544 44.6494 31.4575 44.8103 33.9976C44.8292 34.2962 44.8665 34.5933 44.8603 34.8857C44.86 34.9014 44.8572 34.9171 44.8511 34.9305C44.845 34.9439 44.8357 34.954 44.8243 34.9588C44.8128 34.9636 44.7998 34.9628 44.7872 34.9573C44.7745 34.9517 44.7635 34.9414 44.7533 34.9305C44.5727 34.7355 44.381 34.5469 44.1934 34.3694C42.4443 32.7139 41.0193 32.2441 39.8466 32.4851C39.8388 32.4868 39.8309 32.4881 39.8229 32.489C38.6281 32.622 37.429 33.5046 36.304 35.638C36.1834 35.8669 36.0625 36.1073 35.9543 36.3507C35.9482 36.3643 35.9411 36.3776 35.9309 36.387C35.9207 36.3964 35.9087 36.4013 35.8963 36.4005C35.884 36.3997 35.8719 36.3931 35.8618 36.3824C35.8517 36.3716 35.8442 36.3576 35.8389 36.3429C35.7399 36.0679 35.6634 35.7793 35.6035 35.4858C35.3369 34.1795 35.3743 32.7372 35.957 31.3746C36.5369 30.0185 37.8538 28.9369 39.2115 28.7467C39.2279 28.7444 39.2444 28.742 39.2607 28.7388Z\"\r\n fill=\"#F1F8F4\" />\r\n <path\r\n d=\"M60.5004 25.3091C63.4775 24.7247 65.8891 28.0278 66.0501 30.5679C66.069 30.8666 66.1063 31.1636 66.1 31.456C66.0997 31.4717 66.097 31.4874 66.0909 31.5008C66.0848 31.5142 66.0755 31.5243 66.064 31.5291C66.0526 31.5339 66.0396 31.5332 66.0269 31.5276C66.0143 31.522 66.0032 31.5117 65.9931 31.5008C65.8124 31.3058 65.6207 31.1172 65.4332 30.9397C63.684 29.2842 62.259 28.8144 61.0864 29.0555C61.0785 29.0571 61.0706 29.0584 61.0626 29.0593C59.8678 29.1923 58.6688 30.0749 57.5438 32.2083C57.4231 32.4372 57.3022 32.6777 57.194 32.921C57.188 32.9346 57.1808 32.948 57.1706 32.9573C57.1605 32.9667 57.1484 32.9716 57.1361 32.9708C57.1237 32.97 57.1116 32.9634 57.1016 32.9527C57.0915 32.9419 57.0839 32.928 57.0786 32.9132C56.9796 32.6382 56.9031 32.3497 56.8432 32.0561C56.5767 30.7498 56.6141 29.3076 57.1968 27.9449C57.7767 26.5888 59.0935 25.5072 60.4512 25.317C60.4677 25.3147 60.4841 25.3123 60.5004 25.3091Z\"\r\n fill=\"#F1F8F4\" />\r\n </g>\r\n\r\n <!-- Shadow -->\r\n <ellipse\r\n class=\"robot-shadow\"\r\n cx=\"53.5\"\r\n cy=\"118.717\"\r\n rx=\"16.7832\"\r\n ry=\"3.65639\"\r\n style=\"fill: var(--rs)\"\r\n fill-opacity=\"0.2\" />\r\n\r\n <defs>\r\n <filter\r\n id=\"filter0_f_974_23285\"\r\n x=\"31.266\"\r\n y=\"21.1981\"\r\n width=\"38.3216\"\r\n height=\"18.5928\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\r\n <feGaussianBlur stdDeviation=\"1.68269\" result=\"effect1_foregroundBlur_974_23285\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n overflow: visible;\r\n box-sizing: content-box;\r\n padding-top: 20px;\r\n margin-top: -20px;\r\n\r\n --rc-1: #bad3ca;\r\n --rc-2: #152828;\r\n --rc-3: #2a5050;\r\n --rc-4: #468586;\r\n --rc-5: #d2e3dd;\r\n --rc-6: #aecac0;\r\n --rc-7: #cee6dd;\r\n --rc-8: #92b8aa;\r\n --rc-9: #effbf7;\r\n --rs: #607c7f;\r\n }\r\n\r\n :host-context(.dark) {\r\n --rc-1: #819d92;\r\n --rc-2: #070d0d;\r\n --rc-3: #152828;\r\n --rc-4: #2a5050;\r\n --rc-5: #a9c1b8;\r\n --rc-6: #8eada1;\r\n --rc-7: #92ada3;\r\n --rc-8: #6d8d81;\r\n --rc-9: #a9c1b8;\r\n --rs: #445556;\r\n }\r\n\r\n @keyframes robotFloat {\r\n from {\r\n transform: translateY(0);\r\n }\r\n to {\r\n transform: translateY(-10px);\r\n }\r\n }\r\n\r\n @keyframes shadowPulse {\r\n from {\r\n transform: scale(1.05);\r\n opacity: 0.25;\r\n }\r\n to {\r\n transform: scale(0.9);\r\n opacity: 0.15;\r\n }\r\n }\r\n\r\n .robot-float {\r\n animation: robotFloat 1.5s ease-in-out infinite alternate;\r\n }\r\n\r\n .robot-shadow {\r\n transform-box: fill-box;\r\n transform-origin: center;\r\n animation: shadowPulse 1.5s ease-in-out infinite alternate;\r\n }\r\n `\r\n ],\r\n host: {\r\n 'aria-hidden': 'true',\r\n class:\r\n 'inline-flex items-center justify-center overflow-visible w-[clamp(110px,20vw,144px)] h-[clamp(110px,20vw,140px)]'\r\n }\r\n})\r\nexport class AnimatedRobotComponent {}\r\n","import { afterNextRender, Component, ElementRef, computed, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, map } from 'rxjs';\n\nimport { MessageBuilder } from '../builders';\nimport { isPromptActionRejected, PromptActionRejected } from '../feedback/base.prompt';\nimport { DislikePrompt, DislikeSubmit } from '../feedback/dislike.prompt';\nimport { LikePrompt, LikeSubmit } from '../feedback/like.prompt';\nimport { ChatInput } from '../input';\nimport { LoggerService } from '../logger';\nimport { MessageList } from '../messages';\nimport { AuditService } from '../services';\nimport {\n ActionEvent,\n AGENT_ACTION_EVENT_NAME,\n AGENT_NEW_CHAT_EVENT_NAME,\n AgentNewChatEvent,\n createAgentEvent,\n isAgentActionEvent,\n isInputActionEvent,\n isUserActionEvent,\n Message,\n MessageAgentActionEvent,\n MessageContentFunctionApprovalRequest,\n MessageContentFunctionApprovalResponse,\n MessageFrame } from '../types';\nimport { createAgentErrorEvent } from '../types/custom-events/error.events.types';\nimport { flattenMessageContent, isAStreamMessage } from '../utils';\nimport { AgentService } from './agent.service';\nimport { Machine } from './machine';\nimport { PrincipalStore } from '@sinequa/atomic-angular';\nimport { AnimatedRobotComponent } from '../chaps-e/animated-robot';\n\n@Component({\n selector: 'Agent,agent',\n providers: [LoggerService, AgentService, AuditService],\n imports: [MessageList, ChatInput, LikePrompt, DislikePrompt, AnimatedRobotComponent],\n template: `\n <main class=\"mx-auto flex h-full max-w-[var(--agent-max-width,min(90%,700px))] flex-col\" #main>\n <MessageList\n #messageList\n class=\"peer/chat pb-[var(--chat-input-height)] empty:hidden\"\n [chatId]=\"chatId()\"\n [message]=\"message()\"\n [history]=\"history()\" />\n\n <div class=\"agent-empty-state-enter mb-5 flex items-start justify-center peer-not-empty/chat:hidden peer-empty/chat:mt-[28vh]\">\n <animated-robot />\n @if (firstName()) {\n <h1 class=\"text-primary text-left text-[clamp(1.4rem,5vw,2.2rem)]\">\n Hi, <span id=\"gradient-name\">{{ firstName() }}.</span>\n </h1>\n } @else {\n <h1 class=\"text-primary text-left text-[clamp(1.4rem,5vw,2.2rem)]\">Welcome.</h1>\n }\n </div>\n\n <ChatInput\n class=\"mb-4 w-full peer-not-empty/chat:fixed peer-not-empty/chat:bottom-4 peer-not-empty/chat:max-w-[var(--chat-input-max-width,min(90%,700px))] peer-not-empty/chat:shadow-[var(--shadow-lg),0_50px_var(--background)] peer-empty/chat:mb-auto\"\n [chatId]=\"chatId()\"\n [loading]=\"agentService.isAgentGenerating()\"\n (value)=\"userValidatedInput($event)\" />\n </main>\n\n <div\n class=\"top-0 right-0 bottom-0 left-0 z-5 bg-black opacity-50\"\n [class]=\"isUiLocked() ? 'absolute' : 'hidden'\"></div>\n\n <LikePrompt class=\"z-10\" [messageList]=\"messageList\" />\n <DislikePrompt class=\"z-10\" [messageList]=\"messageList\" />\n `,\n styles: [\n `\n @keyframes agent-entrance {\n from {\n opacity: 0;\n transform: translateY(70px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n .agent-empty-state-enter > animated-robot,\n .agent-empty-state-enter > h1 {\n animation: agent-entrance 2s cubic-bezier(0.16, 1, 0.3, 1) both;\n }\n .agent-empty-state-enter > h1 {\n animation-delay: 120ms;\n }\n `\n ],\n host: {\n class: 'overflow-y-auto size-full'\n }\n})\nexport class Agent extends Machine {\n private readonly el = inject(ElementRef).nativeElement as HTMLElement;\n private readonly parentEl = this.el.parentElement as HTMLElement;\n private readonly mainEl = viewChild.required<ElementRef>('main');\n\n private readonly principalStore = inject(PrincipalStore);\n readonly principal = this.principalStore.principal;\n readonly firstName = computed(() => {\n const p = this.principalStore.principal();\n const full = (p as any)?.fullName ?? (typeof (p as any)?.fullName === 'function' ? (p as any).fullName() : undefined);\n if (typeof full === 'string' && full.length > 0) {\n return full.split(/\\s+/)[0];\n }\n // Fallbacks\n const given = (p as any)?.firstName ?? (p as any)?.givenName;\n return given ?? '';\n });\n\n private readonly messageList = viewChild(MessageList);\n private readonly chatInput = viewChild(ChatInput);\n private readonly like = viewChild(LikePrompt);\n private readonly dislike = viewChild(DislikePrompt);\n\n protected readonly message = signal<Message | undefined>(undefined);\n protected readonly history = signal<Message[] | undefined>(undefined);\n protected readonly reportedMessage = signal<Message | undefined>(undefined);\n protected readonly isUiLocked = signal<boolean>(false);\n\n protected readonly afterMessageFrame$ = this.agentService.afterFrame$.pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(x => x.name === 'message'),\n map(x => x.payload as MessageFrame)\n );\n\n private pendingApprovalResponses = new Map<string, MessageContentFunctionApprovalResponse>();\n\n constructor() {\n super();\n\n // bind state machine events to update UI accordingly\n this.bindMachineEvents();\n\n const controller = new AbortController();\n\n afterNextRender(() => {\n // listen to custom events from child components (message actions, input actions, etc.)\n this.el.addEventListener(AGENT_ACTION_EVENT_NAME, (event: CustomEvent) => this.customEventSwitch(event), {\n signal: controller.signal\n });\n\n // sync computed width to a CSS variable\n this.initResizeObserver();\n\n // Add new listener for new-chat events\n document.addEventListener(AGENT_NEW_CHAT_EVENT_NAME, (event: Event) => this.startNewChat(event), {\n signal: controller.signal\n });\n });\n\n // listen to message frames\n this.afterMessageFrame$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: message => this.onMessage(message) });\n\n\n // cleanup on destroy\n this.destroyRef.onDestroy(() => controller.abort());\n }\n\n public getHistory(): Message[] | undefined {\n return this.history();\n }\n\n /**\n * Handles the start of a new chat session.\n * @param event The event triggering the new chat.\n * @returns void\n */\n private startNewChat(event: Event) {\n const customEvent = event as CustomEvent<AgentNewChatEvent>;\n const detail = customEvent.detail;\n\n // Check if this instance is the one meant to be reset (if there are multiple)\n if (!detail || detail.instanceId !== this.instanceId) return;\n\n // Reset machine chatId to trigger new chat and clear message\n this.chatId.set(crypto.randomUUID());\n this.message.set(undefined);\n\n // Trigger machine to init with new chatId\n this.agentActor.send({ type: 'LOAD_CHAT' });\n }\n\n /**\n * Binds event handlers to the agent actor's state machine events.\n *\n * This method sets up listeners for various state machine events and maps them to appropriate\n * handler functions that manage UI state, message list operations, and error handling.\n *\n * The following events are handled:\n * - `PROMPT_USER_ENTER`: Locks the UI when prompting the user\n * - `PROMPT_USER_EXIT`: Unlocks the UI when prompt is dismissed\n * - `CLEAR_MESSAGE_LIST_FROM`: Regenerates messages from a specific message ID\n * - `AGENT_INVOCATION_FAILED`: Dispatches an error event when agent invocation fails\n * - `EDITION_STARTED`: Locks messages and populates chat input for editing\n * - `EDITION_COMPLETED`: Clears locked messages after successful edit\n * - `EDITION_ABORTED`: Unlocks messages and cancels chat input on edit cancellation\n * - `SAVED_CHAT_LOADED`: Updates the history state when a saved chat is loaded\n * - `APPROVAL_MODE_ENTER`: Enters approval mode, clears pending approvals if any, and locks the UI\n * - `APPROVAL_MODE_EXIT`: Exits approval mode, unlocks the UI, and clears pending approvals\n * - `AGENT_STOPPED_GENERATION`: Generation was successfully stopped.\n * - `AGENT_FAILED_TO_STOP_GENERATION`: Generation failed to stop.\n *\n * @private\n */\n private bindMachineEvents() {\n const handlers: Record<string, (event: any) => void> = {\n // lock / unlock ui on prompt events\n PROMPT_USER_ENTER: () => this.isUiLocked.set(true),\n PROMPT_USER_EXIT: () => this.isUiLocked.set(false),\n\n // clear message list on regeneration from a specific message\n CLEAR_MESSAGE_LIST_FROM: event => {\n const messageId = (event.parentEvent.message as Message).messageId;\n this.messageList()?.regenerateFromMessageId(messageId);\n },\n\n // Listen to agent invocation errors\n AGENT_INVOCATION_FAILED: event => {\n const error = (event.parentEvent as any).data;\n this.el.dispatchEvent(\n createAgentErrorEvent(\n 'AGENT_FAILED_TO_INVOKE_AGENT',\n error,\n 'An error occurred while invoking the Agent endpoint, please contact your administrator.'\n )\n );\n },\n\n // Start Editing\n EDITION_STARTED: event => {\n const message = (event.parentEvent as any).message;\n this.messageList()?.lockFromMessageId(message.messageId);\n this.chatInput()?.edit(flattenMessageContent(message.contents));\n },\n\n // Edition Completed (Validated)\n EDITION_COMPLETED: () => this.messageList()?.clearLockedMessages(),\n\n // Edition Aborted (Canceled)\n EDITION_ABORTED: () => {\n this.messageList()?.unlockMessages();\n this.chatInput()?.cancel();\n },\n\n // Update history when saved chat is loaded\n SAVED_CHAT_LOADED: () => {\n this.history.set(this.agentActor.getSnapshot().context?.history as Message[] | undefined);\n },\n\n // Entering approval mode when agent is locked for approval\n APPROVAL_MODE_ENTER: () => {\n this.pendingApprovalResponses.clear();\n const lastMessage = this.agentActor.getSnapshot().context?.history.at(-1);\n if (lastMessage) this.message.set(lastMessage);\n },\n\n // Exiting approval mode when approval is provided\n APPROVAL_MODE_EXIT: () => {\n this.pendingApprovalResponses.clear();\n },\n\n // Generation was successfully stopped\n AGENT_STOPPED_GENERATION: () => {\n console.log(\"generation stopped\")\n this.el.dispatchEvent(createAgentEvent('AGENT_STOPPED_GENERATION'))\n },\n\n // Generation failed to stop\n AGENT_FAILED_TO_STOP_GENERATION: event => {\n console.log(\"generation failed to stop\")\n const error = (event.parentEvent as { data: unknown }).data;\n this.el.dispatchEvent(\n createAgentErrorEvent(\n 'AGENT_FAILED_TO_STOP_GENERATION',\n error,\n 'Failed to stop agent generation, please contact your administrator.'\n )\n );\n }\n };\n\n Object.entries(handlers).forEach(([event, handler]) => this.agentActor.on(event, handler));\n }\n\n /**\n * Handles custom events emitted by child components.\n * @param event - The custom event containing action details.\n */\n private customEventSwitch(event: CustomEvent<ActionEvent>) {\n const detail = event.detail;\n if (isUserActionEvent(detail))\n switch (detail.action) {\n case 'edit':\n this.agentActor.send({ type: 'EDIT_MESSAGE', message: detail.message! });\n break;\n }\n else if (isAgentActionEvent(detail))\n switch (detail.action) {\n case 'like':\n this.handleFeedbackPrompts('positive', event, this.like());\n break;\n case 'dislike':\n this.handleFeedbackPrompts('negative', event, this.dislike());\n break;\n case 'regenerate':\n this.agentActor.send({ type: 'REGENERATE_MESSAGE', message: detail.message! });\n // reset current message\n this.message.set(undefined);\n break;\n case 'function_approval':\n this.handleApprovalResponse(detail.approvalData!);\n break;\n }\n else if (isInputActionEvent(detail))\n switch (detail.action) {\n case 'cancel':\n this.agentActor.send({ type: 'EDITION_CANCELED' });\n break;\n case 'stop':\n this.agentActor.send({ type: 'STOP_GENERATION' });\n break;\n }\n }\n\n private handleFeedbackPrompts(\n type: 'positive' | 'negative',\n event: CustomEvent<ActionEvent>,\n feedbackPrompt: LikePrompt | DislikePrompt | undefined\n ) {\n // initiate prompt state\n this.agentActor.send({ type: 'PROMPT_USER' });\n // stop event from bubbling, update it with prompt result, and re-dispatch\n event.stopPropagation();\n\n const detail = event.detail as MessageAgentActionEvent;\n\n feedbackPrompt?.prompt(detail.message!).then((result: LikeSubmit | DislikeSubmit | PromptActionRejected) => {\n // prompt reject, do nothing\n if (isPromptActionRejected(result)) {\n // terminate prompt state\n this.agentActor.send({ type: 'PROMPT_REJECTED' });\n return;\n }\n\n // notify message action to lock feedback buttons\n detail.callback?.({ action: detail.action });\n\n if (type === 'positive')\n this.agentActor.send({\n type: 'PROMPT_FEEDBACK_POSITIVE',\n message: detail.message!,\n comment: result.comment!\n });\n else if (type === 'negative') {\n this.agentActor.send({\n type: 'PROMPT_FEEDBACK_NEGATIVE',\n message: detail.message!,\n comment: result.comment!,\n issueType: (result as DislikeSubmit).issueType!\n });\n }\n\n // dispatch from parent to avoid re-catching it here\n this.parentEl.dispatchEvent(\n new CustomEvent<MessageAgentActionEvent>(AGENT_ACTION_EVENT_NAME, {\n detail: Object.assign({}, result, event.detail),\n bubbles: true\n })\n );\n // clean reported message\n this.reportedMessage.set(undefined);\n });\n }\n\n /**\n * Handles the function approval response by storing it and checking if all pending approvals have been responded to.\n * @param data - The approval response data received\n */\n private handleApprovalResponse(data: MessageContentFunctionApprovalResponse) {\n const lastMessage = this.agentActor.getSnapshot().context?.history.at(-1);\n if (!lastMessage) return;\n const requests = lastMessage.contents.filter(\n (c): c is MessageContentFunctionApprovalRequest => c.$type === 'functionApprovalRequest'\n );\n\n // Store Response (Map handles duplicates/updates)\n this.pendingApprovalResponses.set(data.functionCall.callId, data);\n\n // Check all approvals have been responded to (in case of parallel function calls requiring approval)\n const allAnswered =\n requests.length > 0 && requests.every(req => this.pendingApprovalResponses.has(req.functionCall.callId));\n if (!allAnswered) return;\n\n // Create Message with all responses\n const builder = new MessageBuilder();\n builder.createFunctionApprovalResponseMessage();\n builder.setContent([...this.pendingApprovalResponses.values()]);\n\n // Send to Agent Actor\n this.agentActor.send({ type: 'APPROVAL_PROVIDED', message: builder.getMessage()! });\n }\n\n /**\n * Handles user sent text.\n * @param text - The user input text.\n */\n protected userValidatedInput(text: string): void {\n // create user message\n const builder = new MessageBuilder();\n builder.createUserMessage(text);\n this.message.set(builder.getMessage());\n\n // propagate to state machine depending on current state\n switch (this.state()) {\n case 'Idle':\n this.agentActor.send({ type: 'NEW_MESSAGE', message: this.message()! });\n break;\n case 'Editing':\n this.agentActor.send({\n type: 'EDITION_VALIDATED',\n newMessage: this.message()!,\n oldMessage: this.agentActor.getSnapshot().context.message!\n });\n break;\n default:\n console.warn(`User input interaction in unexpected state: ${this.state()}`);\n }\n }\n\n /**\n * Updates the UI with the received message frame.\n * @param message - Message frame received from SignalR.\n */\n private onMessage(message: MessageFrame) {\n // if last message is not a streamed message (assistant and type \"text\"), start new message\n if (!isAStreamMessage(this.message())) {\n const builder = new MessageBuilder();\n\n builder.createAgentMessage();\n builder.setMessageId(message.messageId);\n builder.appendContent({ $type: 'text', text: message.delta });\n\n this.message.set(builder.getMessage());\n }\n // else update content\n else {\n this.message.update(v => ({\n ...v!,\n contents: [{ $type: 'text', text: flattenMessageContent(this.message()?.contents ?? []) + message.delta }]\n }));\n }\n }\n\n private initResizeObserver(): void {\n const ro = new ResizeObserver(([entry]) => {\n this.el.style.setProperty('--chat-input-max-width', `${entry.contentRect.width}px`);\n });\n ro.observe(this.mainEl().nativeElement);\n this.destroyRef.onDestroy(() => ro.disconnect());\n }\n}\n","import { Component, ElementRef, inject, Injector, input, inputBinding, OnInit, Renderer2, ViewContainerRef } from '@angular/core';\n\nimport { AgentsStore } from '../stores';\nimport { AGENT_DEFAULT_NAME, AGENT_INSTANCE_ID } from '../tokens';\nimport { Agent } from './agent';\n\n@Component({\n selector: 'AgentInjector,agent-injector,agentinjector',\n template: ``\n})\nexport class AgentInjector implements OnInit {\n private readonly injector = inject(Injector);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly store = inject(AgentsStore);\n\n readonly instanceId = input.required<string>();\n readonly chatId = input<string | undefined>(undefined);\n\n ngOnInit(): void {\n if (!this.instanceId()) throw new Error('AgentInjector: instanceId input is required');\n\n // fetch the agent configuration for default agent name\n const config = this.store.getAgentInstanceConfiguration(this.instanceId());\n // create an injector that provides the instanceId to the Agent component\n const augmentedInjector = Injector.create({\n providers: [\n { provide: AGENT_INSTANCE_ID, useValue: this.instanceId() },\n { provide: AGENT_DEFAULT_NAME, useValue: config?.defaultAgent }\n ],\n parent: this.injector\n });\n // create the agent component with the augmented injector\n const agentComponent = this.viewContainer.createComponent(Agent, {\n injector: augmentedInjector,\n bindings: [inputBinding('chatId', this.chatId)]\n });\n\n // inject agent component into the application\n this.elementRef.nativeElement.after(agentComponent.location.nativeElement);\n // remove the <agent-injector> element from the DOM\n this.renderer.removeChild(this.elementRef.nativeElement.parentNode, this.elementRef.nativeElement);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { inject } from '@angular/core';\n\n/**\n * Handles the OAuth2 redirect callback.\n *\n * This component should be registered at the `/oauth-callback` route in the consuming application:\n * ```ts\n * { path: 'oauth-callback', component: OAuthCallbackComponent }\n * ```\n *\n * On load it reads the `code` query parameter and posts it back to the opener window\n * via `postMessage`, then closes itself.\n */\n@Component({\n selector: 'oauth-callback',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"flex h-screen flex-col items-center justify-center gap-3 text-center\">\n <p class=\"text-primary-foreground-dark text-base font-medium\">Authentication complete.</p>\n <p class=\"text-primary-foreground-muted text-sm\">You can close this tab.</p>\n </div>\n `\n})\nexport class OAuthCallbackComponent implements OnInit {\n private readonly route = inject(ActivatedRoute);\n\n ngOnInit(): void {\n const code = this.route.snapshot.queryParamMap.get('code');\n\n if (code && window.opener) {\n window.opener.postMessage(\n { type: 'mcp-oauth-callback', code },\n window.location.origin\n );\n }\n\n // Give the opener a moment to receive the message before closing.\n setTimeout(() => window.close(), 500);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { toast } from 'ngx-sonner';\n\nimport { ADMIN_EVENT_NAME, AdminEvent } from '../types';\n\n@Directive({\n selector: '[admin]'\n})\nexport class AdminDirective {\n private readonly el = inject(ElementRef);\n\n constructor() {\n this.el.nativeElement.addEventListener(ADMIN_EVENT_NAME, async (event: CustomEvent<AdminEvent>) => {\n if (!event.detail.details) return;\n\n switch (event.detail.status) {\n case 'success':\n toast.success(event.detail.details);\n break;\n case 'failure':\n toast.error(event.detail.details);\n break;\n default:\n toast.info(event.detail.details);\n break;\n }\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { toast } from 'ngx-sonner';\n\nimport { AGENT_ACTION_EVENT_NAME, AGENT_ERROR_EVENT_NAME, AGENT_EVENT_NAME, AgentErrorEvent, AgentEvent, InputActionEvent } from '../types';\n\n@Directive({\n selector: '[agentGeneration]'\n})\nexport class AgentGenerationDirective {\n private readonly el = inject(ElementRef);\n\n private t: any | undefined = undefined;\n\n constructor() {\n // get event from input component\n this.el.nativeElement.addEventListener(AGENT_ACTION_EVENT_NAME, async (event: CustomEvent<InputActionEvent>) => {\n if (event.detail.action !== 'stop') return;\n\n if (this.t) toast.dismiss(this.t);\n this.t = toast.loading('Requesting agent to stop generation...');\n });\n\n // get success event from agent component\n this.el.nativeElement.addEventListener(AGENT_EVENT_NAME, async (event: CustomEvent<AgentEvent>) => {\n if (event.detail.id !== 'AGENT_STOPPED_GENERATION') return;\n\n toast.dismiss(this.t);\n toast.success('Agent received notification!');\n });\n\n // get error event from agent component\n this.el.nativeElement.addEventListener(AGENT_ERROR_EVENT_NAME, async (event: CustomEvent<AgentErrorEvent>) => {\n if (event.detail.id !== 'AGENT_FAILED_TO_STOP_GENERATION') return;\n\n event.stopImmediatePropagation();\n\n toast.dismiss(this.t);\n toast.error(event.detail.errorMessage || 'An error occurred while stopping generation.');\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { toast } from 'ngx-sonner';\n\nimport { error } from '@sinequa/atomic';\n\nimport { ActionEvent, AGENT_ACTION_EVENT_NAME, isAgentActionEvent, isUserActionEvent } from '../types';\nimport { copyToClipboard, flattenMessageContent } from '../utils';\n\n@Directive({\n selector: '[copyToClipboard]'\n})\nexport class CopyToClipboardDirective {\n private readonly el = inject(ElementRef);\n\n constructor() {\n this.el.nativeElement.addEventListener(AGENT_ACTION_EVENT_NAME, async (event: CustomEvent<ActionEvent>) => {\n if (\n // copy content whether it comes from user or agent message\n (isUserActionEvent(event.detail) || isAgentActionEvent(event.detail)) &&\n event.detail.action === 'copy' &&\n event.detail.message\n )\n copyToClipboard(flattenMessageContent(event.detail.message.contents))\n .then(() => {\n toast.success('Content copied to clipboard');\n })\n .catch(err => {\n toast.error('Could not copy content to clipboard');\n error('Failed to copy to clipboard:', err);\n });\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { toast } from 'ngx-sonner';\n\nimport { AGENT_ERROR_EVENT_NAME, AgentErrorEvent } from '../types';\n\n@Directive({\n selector: '[error]'\n})\nexport class ErrorDirective {\n private readonly el = inject(ElementRef);\n\n constructor() {\n this.el.nativeElement.addEventListener(AGENT_ERROR_EVENT_NAME, async (event: CustomEvent<AgentErrorEvent>) => {\n toast.error(event.detail.errorMessage || 'An error occurred, please contact support.');\n console.error(event.detail.error);\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { toast } from 'ngx-sonner';\n\nimport { ActionEvent, AGENT_ACTION_EVENT_NAME, isAgentActionEvent } from '../types';\n\n@Directive({\n selector: '[feedback]'\n})\nexport class FeedbackDirective {\n private readonly el = inject(ElementRef);\n\n constructor() {\n this.el.nativeElement.addEventListener(AGENT_ACTION_EVENT_NAME, async (event: CustomEvent<ActionEvent>) => {\n if (!isAgentActionEvent(event.detail)) return;\n switch (event.detail.action) {\n case 'like':\n case 'dislike':\n toast.success('Thank you for your feedback!');\n break;\n }\n });\n }\n}\n","import { Injector, makeEnvironmentProviders } from '@angular/core';\nimport { createCustomElement } from '@angular/elements';\n\nimport { ChartPlotComponent, CodeBlockComponent, InlineReferenceComponent, markdownItChartJsPlugin, markdownItCodeBlockPlugin, markdownItInlineReferencePlugin, markdownItLinkPlugin, markdownItListPlugin, markdownItTableWrapperPlugin, TableWrapperComponent } from '../smart-renderer';\nimport { AGENT_RENDERER_PLUGINS, RendererPlugins } from '../tokens';\n\n/**\n * Factory function to provide renderer plugins.\n *\n * @param plugins - renderer plugins to provide\n *\n * @returns environment providers\n */\nexport const provideRendererPlugins = (plugins: RendererPlugins) =>\n makeEnvironmentProviders([\n {\n provide: AGENT_RENDERER_PLUGINS,\n deps: [Injector],\n useFactory: (injector: Injector) => {\n Object.entries(plugins)\n // create custom elements for plugins with a custom component\n .filter(([_, value]) => !!value.component)\n .forEach(([name, plugin]) => {\n const element = createCustomElement(plugin.component!, { injector });\n customElements.define(name, element);\n });\n\n return plugins;\n }\n }\n ]);\n\n/**\n * Provides default Agent renderer plugins.\n *\n * Includes:\n * - code block with custom component\n * - link with target and rel attributes\n * - table tools with custom component\n *\n * @returns environment providers\n */\nexport const provideDefaultRendererPlugins = () =>\n provideRendererPlugins({\n 'code-block': {\n markdownItPlugin: markdownItCodeBlockPlugin,\n component: CodeBlockComponent\n },\n link: {\n markdownItPlugin: markdownItLinkPlugin\n },\n 'table-wrapper': {\n markdownItPlugin: markdownItTableWrapperPlugin,\n component: TableWrapperComponent\n },\n 'chart-plot': {\n markdownItPlugin: markdownItChartJsPlugin,\n component: ChartPlotComponent\n },\n 'inline-reference': {\n markdownItPlugin: markdownItInlineReferencePlugin,\n component: InlineReferenceComponent\n },\n list: {\n markdownItPlugin: markdownItListPlugin\n }\n });\n","import { LoggerService } from '../logger/logger.service';\nimport { SavedChatsService } from '../saved-chats';\nimport { AgentsStore } from '../stores';\n\n/**\n * Factory function to provide the SavedChatsService only if enabled in the agent configuration.\n *\n * @param instanceId - The agent instance ID.\n * @param logger - Logger service for logging messages.\n * @param agentsStore - The agents store to access agent configurations.\n *\n * @returns An instance of {@link SavedChatsService} if enabled, otherwise `undefined`.\n *\n * @see https://doc-internal.sinequa.com/assistant/latest/app-json-customization#saved-chat---savedchatsettings-object\n */\nexport function provideSavedChatsService(\n instanceId: string,\n logger: LoggerService,\n agentsStore: InstanceType<typeof AgentsStore>\n) {\n if (agentsStore.getAgentInstanceConfiguration(instanceId)?.savedChatSettings?.enabled) {\n logger.debug('[SavedChatsProvider] SavedChats enabled, providing service.');\n return new SavedChatsService();\n } else {\n logger.debug('[SavedChatsProvider] SavedChats disabled.');\n return undefined;\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { SHIKI_HIGHLIGHTER_CONFIG, ShikiConfig } from '../tokens';\n\n\n/**\n * Creates environment providers for Shiki syntax highlighter configuration.\n *\n * @param config - The Shiki configuration object containing highlighter settings\n * @returns An array of environment providers that can be used in the application configuration\n */\nexport const provideShikiHighlighterConfig = (config: ShikiConfig) => makeEnvironmentProviders([\n { provide: SHIKI_HIGHLIGHTER_CONFIG, useValue: config }\n]);\n\n/**\n * Provides the default Shiki syntax highlighter configuration with commonly used programming languages and themes.\n *\n * @remarks\n * This configuration includes support for web technologies (HTML, CSS, JavaScript/TypeScript),\n * data formats (JSON, CSV, XML), and other common languages (Python, Markdown, SQL).\n * It uses GitHub's light and dark themes with light as the default.\n *\n * @returns A configured Shiki highlighter provider with predefined languages and themes.\n */\nexport const provideDefaultShikiHighlighterConfig = () => provideShikiHighlighterConfig({\n langs: [\n 'css','csv','html','javascript','json','json5','jsonc','jsx',\n 'markdown','mdx','python','regexp','sass','scss','sql','ts-tags',\n 'tsx','typescript','xml','text'\n ],\n themes: {\n light: 'github-light',\n dark: 'github-dark'\n }\n});\n","import { makeEnvironmentProviders } from '@angular/core';\n\nimport { ReadDocumentFunctionComponent } from '../messages/function/plugins/search/read-document';\nimport { SearchFunctionComponent } from '../messages/function/plugins/search/search';\nimport { AGENT_TOOL_CARD_PLUGINS, ToolCardPlugins } from '../tokens';\n\n/**\n * Factory function to provide tool card plugins.\n *\n * @param plugins - tool card plugins to provide\n *\n * @returns environment providers\n */\nexport const provideToolCardPlugins = (plugins: ToolCardPlugins) =>\n makeEnvironmentProviders([\n {\n provide: AGENT_TOOL_CARD_PLUGINS,\n useFactory: () => plugins\n }\n ]);\n\n/**\n * Provides default Agent tool card plugins.\n *\n * @returns environment providers\n */\nexport const provideDefaultToolCardPlugins = () =>\n provideToolCardPlugins({\n SinequaSearchContext: SearchFunctionComponent,\n SinequaReadDocument: ReadDocumentFunctionComponent\n });\n","import { Component, output } from '@angular/core';\n\nimport { ButtonComponent } from '../overrides';\nimport {\n Sidebar,\n SidebarContentComponent,\n SidebarGroupComponent,\n SidebarHeaderComponent,\n SidebarInsetComponent,\n SidebarMenuComponent,\n SidebarProviderComponent,\n TooltipDirective,\n XMarkICon\n} from '@sinequa/ui';\n\n/**\n * Generic modal shell with a side navigation menu.\n *\n * Provides a responsive two-layout shell:\n * - Mobile (below md): close button + projected body content\n * - Desktop (md+): fixed-width sidebar for navigation + scrollable content inset\n *\n * The caller fills three named content slots:\n * - [mobile-body] Full mobile body, e.g. a <tabs> component with nav + section content\n * - [desktop-nav] Sidebar navigation items, e.g. <sidebar-menu-item> elements\n * - [desktop-content] Content shown in the inset next to the sidebar\n *\n * The caller is responsible for managing active-section state and conditional\n * rendering of section content. Sidebar CSS variable theming (--sidebar-*, etc.)\n * can be overridden by setting them on the caller's :host styles block — they\n * cascade through the DOM to the sidebar-provider inside this component.\n *\n * Usage:\n * <MenuModal (closed)=\"onClose()\">\n * <tabs mobile-body>...</tabs>\n * <sidebar-menu-item desktop-nav>...</sidebar-menu-item>\n * <div desktop-content>...</div>\n * </MenuModal>\n */\n@Component({\n selector: 'MenuModal,menu-modal',\n imports: [\n ButtonComponent,\n TooltipDirective,\n XMarkICon,\n Sidebar,\n SidebarHeaderComponent,\n SidebarContentComponent,\n SidebarGroupComponent,\n SidebarMenuComponent,\n SidebarProviderComponent,\n SidebarInsetComponent\n ],\n template: `\n <!-- Mobile layout (below md): close button + projected body -->\n <div class=\"flex min-h-0 w-full flex-1 flex-col md:hidden\">\n <div class=\"shrink-0 px-3 pt-3\">\n <button tooltip=\"Close\" tooltip-position=\"right\" variant=\"ghost\" size=\"icon\" (click)=\"closed.emit()\">\n <XMarkIcon class=\"size-4\" />\n </button>\n </div>\n <ng-content select=\"[mobile-body]\" />\n </div>\n\n <!-- Desktop layout (md+): sidebar nav + content inset -->\n <sidebar-provider [style.--sidebar-width]=\"'13rem'\" class=\"hidden min-h-0 md:flex\">\n <sidebar collapsible=\"none\" class=\"max-h-full rounded-tr-4xl rounded-br-4xl\">\n <sidebar-header class=\"px-3 pt-3\">\n <button tooltip=\"Close\" tooltip-position=\"right\" variant=\"ghost\" size=\"icon\" (click)=\"closed.emit()\">\n <XMarkIcon class=\"size-4\" />\n </button>\n </sidebar-header>\n <sidebar-content>\n <sidebar-group class=\"px-3\">\n <sidebar-menu>\n <ng-content select=\"[desktop-nav]\" />\n </sidebar-menu>\n </sidebar-group>\n </sidebar-content>\n </sidebar>\n <sidebar-inset>\n <div class=\"h-full overflow-y-auto p-6\">\n <ng-content select=\"[desktop-content]\" />\n </div>\n </sidebar-inset>\n </sidebar-provider>\n `,\n host: {\n class: 'flex h-full w-full overflow-hidden bg-menu-bg rounded-3xl border border-menu-border'\n }\n})\nexport class MenuModalComponent {\n /** Emitted when the user clicks the close button in either mobile or desktop view. */\n readonly closed = output<void>();\n}","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'appearance-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-palette-icon lucide-palette\">\r\n <path\r\n d=\"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z\" />\r\n <circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\" />\r\n <circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\" />\r\n <circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\" />\r\n <circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\r\n </svg>\r\n `\r\n})\r\nexport class AppearanceIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'tools-icon',\r\n template: `\r\n <svg [class]=\"class()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M2.2001 3.4C1.8676 3.4 1.6001 3.6675 1.6001 4C1.6001 4.3325 1.8676 4.6 2.2001 4.6H4.4926C4.7476 5.4125 5.5051 6 6.4001 6C7.2951 6 8.0526 5.4125 8.3076 4.6H13.8001C14.1326 4.6 14.4001 4.3325 14.4001 4C14.4001 3.6675 14.1326 3.4 13.8001 3.4H8.3076C8.0526 2.5875 7.2951 2 6.4001 2C5.5051 2 4.7476 2.5875 4.4926 3.4H2.2001ZM2.2001 7.4C1.8676 7.4 1.6001 7.6675 1.6001 8C1.6001 8.3325 1.8676 8.6 2.2001 8.6H8.4926C8.7476 9.4125 9.5051 10 10.4001 10C11.2951 10 12.0526 9.4125 12.3076 8.6H13.8001C14.1326 8.6 14.4001 8.3325 14.4001 8C14.4001 7.6675 14.1326 7.4 13.8001 7.4H12.3076C12.0526 6.5875 11.2951 6 10.4001 6C9.5051 6 8.7476 6.5875 8.4926 7.4H2.2001ZM2.2001 11.4C1.8676 11.4 1.6001 11.6675 1.6001 12C1.6001 12.3325 1.8676 12.6 2.2001 12.6H3.6926C3.9476 13.4125 4.7051 14 5.6001 14C6.4951 14 7.2526 13.4125 7.5076 12.6H13.8001C14.1326 12.6 14.4001 12.3325 14.4001 12C14.4001 11.6675 14.1326 11.4 13.8001 11.4H7.5076C7.2526 10.5875 6.4951 10 5.6001 10C4.7051 10 3.9476 10.5875 3.6926 11.4H2.2001ZM5.6001 12.8C5.1576 12.8 4.8001 12.4425 4.8001 12C4.8001 11.5575 5.1576 11.2 5.6001 11.2C6.0426 11.2 6.4001 11.5575 6.4001 12C6.4001 12.4425 6.0426 12.8 5.6001 12.8ZM10.4001 8.8C9.9576 8.8 9.6001 8.4425 9.6001 8C9.6001 7.5575 9.9576 7.2 10.4001 7.2C10.8426 7.2 11.2001 7.5575 11.2001 8C11.2001 8.4425 10.8426 8.8 10.4001 8.8ZM5.6001 4C5.6001 3.5575 5.9576 3.2 6.4001 3.2C6.8426 3.2 7.2001 3.5575 7.2001 4C7.2001 4.4425 6.8426 4.8 6.4001 4.8C5.9576 4.8 5.6001 4.4425 5.6001 4Z\"\r\n fill=\"currentColor\" />\r\n </svg>\r\n `\r\n})\r\nexport class ToolsIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'logout-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"2o\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-log-out-icon lucide-log-out\">\r\n <path d=\"m16 17 5-5-5-5\" />\r\n <path d=\"M21 12H9\" />\r\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n </svg>\r\n `\r\n})\r\nexport class LogoutIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'flag-de',\n template: `\n <svg [class]=\"class()\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_12_1872)\">\n <path d=\"M0 10H20V15H0V10Z\" fill=\"#FFCC00\" />\n <path d=\"M0 0H20V5H0V0Z\" fill=\"#000001\" />\n <path d=\"M0 5H20V10H0V5Z\" fill=\"#FF0000\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12_1872\">\n <rect width=\"20\" height=\"15\" rx=\"2\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n `\n})\nexport class FlagDe {\n class = input<string>();\n}","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'flag-fr',\n template: `\n <svg [class]=\"class()\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_12_1727)\">\n <path d=\"M0 0H20V15H0V0Z\" fill=\"white\" />\n <path d=\"M0 0H6.66562V15H0V0Z\" fill=\"#000091\" />\n <path d=\"M13.3344 0H20V15H13.3344V0Z\" fill=\"#E1000F\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12_1727\">\n <rect width=\"20\" height=\"15\" rx=\"2\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n `\n})\nexport class FlagFr {\n class = input<string>();\n}","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'flag-gb',\n template: `\n <svg [class]=\"class()\" width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_1860_13229)\">\n <path d=\"M0 0H16V12H0V0Z\" fill=\"#012169\" />\n <path\n d=\"M1.875 0L7.975 4.525L14.05 0H16V1.55L10 6.025L16 10.475V12H14L8 7.525L2.025 12H0V10.5L5.975 6.05L0 1.6V0H1.875Z\"\n fill=\"white\" />\n <path\n d=\"M10.6 7.025L16 11V12L9.225 7.025H10.6ZM6 7.525L6.15 8.4L1.35 12H0L6 7.525ZM16 0V0.075L9.775 4.775L9.825 3.675L14.75 0H16ZM0 0L5.975 4.4H4.475L0 1.05V0Z\"\n fill=\"#C8102E\" />\n <path d=\"M6.025 0V12H10.025V0H6.025ZM0 4V8H16V4H0Z\" fill=\"white\" />\n <path d=\"M0 4.825V7.225H16V4.825H0ZM6.825 0V12H9.225V0H6.825Z\" fill=\"#C8102E\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1860_13229\">\n <rect width=\"16\" height=\"12\" rx=\"2\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n `\n})\nexport class FlagGb {\n class = input<string>();\n}","import { Component, computed, effect, inject, output, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\n\nimport { ChevronDownIconComponent, MenuComponent, MenuContentComponent, MenuItemComponent } from '@sinequa/ui';\n\nimport { ButtonComponent } from '../overrides';\nimport { CheckIcon } from '../overrides/icons/check.icon';\nimport { FlagDe } from '../overrides/flags/de';\nimport { FlagFr } from '../overrides/flags/fr';\nimport { FlagGb } from '../overrides/flags/gb';\n\nconst LANGUAGE_LABELS: Record<string, string> = {\n en: 'English',\n fr: 'French',\n de: 'German'\n};\n\n@Component({\n selector: 'LanguageSetting,language-setting',\n imports: [ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, FlagGb, FlagFr, FlagDe, ChevronDownIconComponent, CheckIcon],\n template: `\n <div class=\"flex flex-col gap-1\">\n <div class=\"flex items-center\">\n <label class=\"text-primary-foreground-dark flex-1 text-sm\">Language</label>\n <Menu>\n <button variant=\"ghost\" size=\"sm\" class=\"flex items-center gap-2 text-sm\">\n {{ languageLabel() }}\n <ChevronDown class=\"size-4\" />\n </button>\n <MenuContent\n position=\"bottom-end\"\n class=\"border-menu-border bg-menu-bg rounded-2xl border p-1.5 shadow-md\">\n @for (lang of availableLangs(); track $index) {\n <menu-item\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex cursor-pointer items-center gap-2 rounded-xl px-3 py-1.5 text-sm\"\n (click)=\"setLang(lang)\">\n @switch (lang) {\n @case ('en') { <flag-gb /> }\n @case ('fr') { <flag-fr /> }\n @case ('de') { <flag-de /> }\n }\n {{ getLabel(lang) }}\n @if (activeLang() === lang) {\n <check-icon class=\"text-primary-foreground-muted ml-auto size-3.5\" />\n }\n </menu-item>\n }\n </MenuContent>\n </Menu>\n </div>\n <span class=\"text-primary-foreground-muted text-xs\">Select the language for the user interface</span>\n </div>\n `\n})\nexport class LanguageSettingComponent {\n private readonly transloco = inject(TranslocoService);\n\n protected readonly menu = viewChild(MenuComponent);\n\n readonly menuOpened = output<void>();\n\n protected readonly activeLang = toSignal(this.transloco.langChanges$, { initialValue: this.transloco.getActiveLang() });\n protected readonly availableLangs = computed(() => {\n const langs = this.transloco.getAvailableLangs();\n return langs.map(l => (typeof l === 'string' ? l : l.id));\n });\n protected readonly languageLabel = computed(() => this.getLabel(this.activeLang()));\n\n constructor() {\n effect(() => {\n if (this.menu()?.isOpen()) this.menuOpened.emit();\n });\n }\n\n protected setLang(lang: string): void {\n this.transloco.setActiveLang(lang);\n this.menu()?.close();\n }\n\n protected getLabel(lang: string): string {\n return LANGUAGE_LABELS[lang] ?? lang;\n }\n\n closeMenu(): void {\n this.menu()?.close();\n }\n}","import { Component, model } from '@angular/core';\n\n@Component({\n selector: 'LayoutSetting,layout-setting',\n template: `\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-1\">\n <label class=\"text-primary-foreground-dark text-sm\">Layout</label>\n <span class=\"text-primary-foreground-muted text-xs\">Select the width of the chat layout</span>\n </div>\n\n <div class=\"bg-sage-50 dark:bg-sage-900 flex gap-4 rounded-2xl p-4\">\n <div class=\"flex flex-1 cursor-pointer flex-col items-center gap-2\" (click)=\"widerView.set(false)\">\n <div\n class=\"w-full rounded-xl border bg-[var(--menu-bg)] p-3 transition-colors\"\n [class]=\"!widerView() ? 'border-primary-foreground-dark' : 'border-transparent'\">\n <div class=\"flex w-full flex-col gap-1.5 px-4 py-2\">\n <div class=\"mx-auto flex w-2/3 flex-col gap-1.5\">\n <div class=\"bg-sage-300 dark:bg-sage-600 ml-auto h-2 w-1/2 rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-2/3 rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-1/2 rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-3/5 rounded-sm\"></div>\n </div>\n <div class=\"border-input-border relative mx-auto mt-1 h-5 w-2/3 rounded border\">\n <div class=\"bg-accent-alt absolute top-1/2 right-1 size-2 -translate-y-1/2 rounded-full\"></div>\n </div>\n </div>\n </div>\n <span class=\"text-primary-foreground-dark text-sm\">Default</span>\n <div\n class=\"flex size-5 items-center justify-center rounded-full border-2 transition-colors\"\n [class]=\"!widerView() ? 'border-primary-foreground-dark' : 'border-sage-300 dark:border-sage-600'\">\n @if (!widerView()) {\n <div class=\"bg-primary-foreground-dark size-2.5 rounded-full\"></div>\n }\n </div>\n </div>\n\n <div class=\"flex flex-1 cursor-pointer flex-col items-center gap-2\" (click)=\"widerView.set(true)\">\n <div\n class=\"w-full rounded-xl border bg-[var(--menu-bg)] p-3 transition-colors\"\n [class]=\"widerView() ? 'border-primary-foreground-dark' : 'border-transparent'\">\n <div class=\"flex w-full flex-col gap-1.5 px-2 py-2\">\n <div class=\"mx-auto flex w-4/5 flex-col gap-1.5\">\n <div class=\"bg-sage-300 dark:bg-sage-600 ml-auto h-2 w-4/5 rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-full rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-5/6 rounded-sm\"></div>\n <div class=\"bg-sage-200 dark:bg-sage-700 mr-auto h-1.5 w-full rounded-sm\"></div>\n </div>\n <div class=\"border-input-border relative mx-auto mt-1 h-5 w-4/5 rounded border\">\n <div class=\"bg-accent-alt absolute top-1/2 right-1 size-2 -translate-y-1/2 rounded-full\"></div>\n </div>\n </div>\n </div>\n <span class=\"text-primary-foreground-dark text-sm\">Wider</span>\n <div\n class=\"flex size-5 items-center justify-center rounded-full border-2 transition-colors\"\n [class]=\"widerView() ? 'border-primary-foreground-dark' : 'border-sage-300 dark:border-sage-600'\">\n @if (widerView()) {\n <div class=\"bg-primary-foreground-dark size-2.5 rounded-full\"></div>\n }\n </div>\n </div>\n </div>\n </div>\n `\n})\nexport class LayoutSettingComponent {\n readonly widerView = model<boolean>(false);\n}","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'moon-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-moon-icon lucide-moon\">\r\n <path\r\n d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />\r\n </svg>\r\n `\r\n})\r\nexport class MoonIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sun-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-sun-icon lucide-sun\">\r\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\r\n <path d=\"M12 2v2\" />\r\n <path d=\"M12 20v2\" />\r\n <path d=\"m4.93 4.93 1.41 1.41\" />\r\n <path d=\"m17.66 17.66 1.41 1.41\" />\r\n <path d=\"M2 12h2\" />\r\n <path d=\"M20 12h2\" />\r\n <path d=\"m6.34 17.66-1.41 1.41\" />\r\n <path d=\"m19.07 4.93-1.41 1.41\" />\r\n </svg>\r\n `\r\n})\r\nexport class SunIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sun-moon-icon',\r\n template: `\r\n <svg\r\n [class]=\"class()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"lucide lucide-sun-moon-icon lucide-sun-moon\">\r\n <path d=\"M12 2v2\" />\r\n <path\r\n d=\"M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715\" />\r\n <path d=\"M16 12a4 4 0 0 0-4-4\" />\r\n <path d=\"m19 5-1.256 1.256\" />\r\n <path d=\"M20 12h2\" />\r\n </svg>\r\n `\r\n})\r\nexport class SunMoonIcon {\r\n class = input<string>();\r\n}\r\n","import { Component, computed, effect, inject, model, output, viewChild } from '@angular/core';\n\nimport { ChevronDownIconComponent, MenuComponent, MenuContentComponent, MenuItemComponent } from '@sinequa/ui';\nimport { UserSettingsStore } from '@sinequa/atomic-angular';\n\nimport { ButtonComponent } from '../overrides';\nimport { CheckIcon } from '../overrides/icons/check.icon';\nimport { MoonIcon } from '../overrides/icons/moon.icon';\nimport { SunIcon } from '../overrides/icons/sun.icon';\nimport { SunMoonIcon } from '../overrides/icons/sun-moon.icon';\n\ntype Theme = 'light' | 'dark' | 'system';\n\n@Component({\n selector: 'ThemeSetting,theme-setting',\n imports: [ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, ChevronDownIconComponent, CheckIcon, SunMoonIcon, SunIcon, MoonIcon],\n template: `\n <div class=\"flex flex-col gap-1\">\n <div class=\"flex items-center\">\n <label class=\"text-primary-foreground-dark flex-1 text-sm\">Theme</label>\n <Menu>\n <button variant=\"ghost\" size=\"sm\" class=\"flex items-center gap-2 text-sm\">\n {{ themeLabel() }}\n <ChevronDown class=\"size-4\" />\n </button>\n <MenuContent\n position=\"bottom-end\"\n class=\"border-menu-border bg-menu-bg rounded-2xl border p-1.5 shadow-md\">\n @for (t of themes; track t.value) {\n <menu-item\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex cursor-pointer items-center gap-2 rounded-xl px-3 py-1.5 text-sm\"\n (click)=\"theme.set(t.value); menu()?.close()\">\n <span class=\"size-4\">\n @switch (t.value) {\n @case ('system') { <sun-moon-icon /> }\n @case ('light') { <sun-icon /> }\n @case ('dark') { <moon-icon /> }\n }\n </span>\n {{ t.label }}\n @if (theme() === t.value) {\n <check-icon class=\"text-primary-foreground-muted ml-auto size-3.5\" />\n }\n </menu-item>\n }\n </MenuContent>\n </Menu>\n </div>\n <span class=\"text-primary-foreground-muted text-xs\">Choose between light, dark or system appearance</span>\n </div>\n `\n})\nexport class ThemeSettingComponent {\n readonly userSettings = inject(UserSettingsStore);\n readonly theme = model<Theme>('system');\n readonly menuOpened = output<void>();\n\n protected readonly menu = viewChild(MenuComponent);\n\n protected readonly themes: { value: Theme; label: string }[] = [\n { value: 'system', label: 'System' },\n { value: 'light', label: 'Light' },\n { value: 'dark', label: 'Dark' }\n ];\n\n readonly themeLabel = computed(() => this.themes.find(t => t.value === this.theme())?.label);\n\n constructor() {\n effect(() => {\n if (this.menu()?.isOpen()) this.menuOpened.emit();\n });\n effect(() => this.userSettings.setUserTheme(this.theme()));\n }\n\n closeMenu(): void {\n this.menu()?.close();\n }\n}\n","import { Component, effect, output, signal } from '@angular/core';\r\n\r\nimport { AppearanceIcon } from '../overrides/icons/appearance.icon';\r\nimport { Separator, SidebarMenuButtonComponent, SidebarMenuItemComponent, TabComponent, TabContent, TabsComponent, TabsListComponent } from '@sinequa/ui';\r\n\r\nimport { LanguageSettingComponent } from './language-setting';\r\nimport { LayoutSettingComponent } from './layout-setting';\r\nimport { MenuModalComponent } from './menu-modal';\r\nimport { ThemeSettingComponent } from './theme-setting';\r\n\r\ntype Section = 'theme';\r\n\r\n@Component({\r\n selector: 'SettingsModal,settings-modal',\r\n imports: [\r\n MenuModalComponent,\r\n AppearanceIcon,\r\n TabsComponent,\r\n TabsListComponent,\r\n TabComponent,\r\n TabContent,\r\n SidebarMenuItemComponent,\r\n SidebarMenuButtonComponent,\r\n ThemeSettingComponent,\r\n LanguageSettingComponent,\r\n LayoutSettingComponent,\r\n Separator\r\n ],\r\n template: `\r\n <MenuModal (closed)=\"closed.emit()\">\r\n <!-- Mobile: tabs navigation + section content -->\r\n <tabs mobile-body class=\"flex min-h-0 flex-1 flex-col\">\r\n <div class=\"shrink-0 px-3 pt-2\">\r\n <tabs-list class=\"border-primary-light bg-primary-lightest w-full overflow-x-auto rounded-xl border\">\r\n <tab value=\"theme\" [active]=\"true\" class=\"shrink-0 rounded-xl\">\r\n <span class=\"flex items-center gap-1.5 text-sm\">\r\n <appearance-icon class=\"size-4\" />\r\n Appearance\r\n </span>\r\n </tab>\r\n </tabs-list>\r\n </div>\r\n <tab-content value=\"theme\" class=\"min-h-0 flex-1 overflow-y-auto\">\r\n <div class=\"flex flex-col gap-4 p-4\">\r\n <h3 class=\"text-primary-foreground-dark font-semibold\">Appearance</h3>\r\n <theme-setting #themeMobile [(theme)]=\"theme\" (menuOpened)=\"languageMobile.closeMenu()\" />\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border\" />\r\n <language-setting #languageMobile (menuOpened)=\"themeMobile.closeMenu()\" />\r\n </div>\r\n </tab-content>\r\n </tabs>\r\n\r\n <!-- Desktop: sidebar nav item -->\r\n <sidebar-menu-item desktop-nav>\r\n <sidebar-menu-button [isActive]=\"activeSection() === 'theme'\" (click)=\"activeSection.set('theme')\">\r\n <appearance-icon />\r\n <label class=\"truncate\">Appearance</label>\r\n </sidebar-menu-button>\r\n </sidebar-menu-item>\r\n\r\n <!-- Desktop: section content -->\r\n <div desktop-content>\r\n @if (activeSection() === 'theme') {\r\n <div class=\"flex flex-col gap-4\">\r\n <h3 class=\"text-primary-foreground-dark font-semibold\">Appearance</h3>\r\n <theme-setting #themeDesktop [(theme)]=\"theme\" (menuOpened)=\"languageDesktop.closeMenu()\" />\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border\" />\r\n <language-setting #languageDesktop (menuOpened)=\"themeDesktop.closeMenu()\" />\r\n <Separator orientation=\"horizontal\" class=\"bg-menu-border\" />\r\n <layout-setting [(widerView)]=\"widerView\" />\r\n </div>\r\n }\r\n </div>\r\n </MenuModal>\r\n `,\r\n styles: `\r\n :host {\r\n --sidebar: light-dark(var(--color-sage-100), var(--color-sage-900));\r\n --sidebar-foreground: light-dark(var(--color-sage-200), var(--color-sage-100));\r\n --sidebar-primary: light-dark(oklch(0.648 0.2 131.684), oklch(0.768 0.233 130.85));\r\n --sidebar-primary-foreground: light-dark(oklch(0.986 0.031 120.757), oklch(0.986 0.031 120.757));\r\n --sidebar-accent: light-dark(\r\n oklch(from var(--color-sage-800) l c h / 30%),\r\n oklch(from var(--color-sage-975) l c h / 30%)\r\n );\r\n --sidebar-accent-foreground: light-dark(var(--color-sage-50), oklch(0.985 0 0));\r\n --sidebar-active: light-dark(var(--color-sage-200), var(--color-sage-975));\r\n --sidebar-active-foreground: light-dark(var(--primary-foreground-dark), oklch(0.986 0.031 120.757));\r\n --sidebar-border: light-dark(var(--color-sage-900), oklch(1 0 0 / 10%));\r\n --sidebar-ring: light-dark(var(--color-pink-400), var(--color-pink-700));\r\n }\r\n `,\r\n host: {\r\n // display:contents makes this a transparent layout wrapper so <menu-modal>\r\n // receives the dialog's sizing directly, while :host CSS variables still cascade.\r\n class: 'contents'\r\n }\r\n})\r\nexport class SettingsModalComponent {\r\n readonly closed = output<void>();\r\n\r\n readonly activeSection = signal<Section>('theme');\r\n readonly theme = signal<'light' | 'dark' | 'system'>('system');\r\n readonly widerView = signal<boolean>(false);\r\n constructor() {\r\n effect(() => {\r\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n const isDark = this.theme() === 'dark' || (this.theme() === 'system' && prefersDark);\r\n document.documentElement.classList.toggle('dark', isDark);\r\n });\r\n\r\n effect(() => {\r\n const val = this.widerView() ? 'min(90%, 1000px)' : 'min(90%, 700px)';\r\n document.documentElement.style.setProperty('--agent-max-width', val);\r\n });\r\n }\r\n}\r\n","import { Component, effect, ElementRef, inject, model, signal, viewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { DebugIcon, SwitchComponent } from '@sinequa/ui';\r\n\r\nimport { AgentsStore } from '../stores';\r\nimport { AppearanceIcon } from '../overrides/icons/appearance.icon';\r\nimport { ToolsIcon } from '../overrides/icons/tools.icon';\r\nimport { LogoutIcon } from '../overrides/icons/logout.icon';\r\nimport { SettingsModalComponent } from './settings-modal';\r\n\r\n@Component({\r\n selector: 'Settings,settings',\r\n imports: [SwitchComponent, AppearanceIcon, ToolsIcon, DebugIcon, LogoutIcon, SettingsModalComponent],\r\n template: `\r\n <ul class=\"flex w-full flex-col gap-1\">\r\n <li>\r\n <button\r\n (click)=\"openAppearance()\"\r\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex w-full items-center gap-2 rounded-xl p-2\">\r\n <appearance-icon />\r\n <label class=\"truncate\">Appearance</label>\r\n </button>\r\n </li>\r\n\r\n <li\r\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex items-center gap-2 rounded-xl p-2\">\r\n <debug-icon />\r\n <label class=\"flex-1 truncate\">Debug</label>\r\n <Switch [variant]=\"debug() ? 'primary' : 'secondary'\" [(toggled)]=\"debug\" />\r\n </li>\r\n\r\n <hr class=\"border-menu-border\" />\r\n\r\n <li>\r\n <button\r\n (click)=\"logout()\"\r\n class=\"hover:bg-secondary-lightest hover:text-primary-foreground-dark active:bg-secondary-lighter active:text-primary-foreground-dark text-primary-foreground-hovered flex w-full items-center gap-2 rounded-xl p-2\">\r\n <logout-icon />\r\n <label class=\"truncate\">Logout</label>\r\n </button>\r\n </li>\r\n </ul>\r\n\r\n <dialog\r\n #appearanceDialog\r\n closedby=\"any\"\r\n class=\"m-auto h-[90%] max-h-[90%] w-[min(90%,52rem)] rounded-3xl p-0 outline-none backdrop:bg-black/50 backdrop:backdrop-blur-sm\">\r\n <SettingsModal (closed)=\"appearanceDialog.close()\" />\r\n </dialog>\r\n `,\r\n host: {\r\n class: ''\r\n }\r\n})\r\nexport class SettingsComponent {\r\n private readonly agentsStore = inject(AgentsStore);\r\n private readonly router = inject(Router);\r\n readonly toggled = signal<boolean>(false);\r\n readonly debug = model<boolean>(false);\r\n private readonly appearanceDialog = viewChild<ElementRef<HTMLDialogElement>>('appearanceDialog');\r\n\r\n logout() {\r\n this.router.navigate(['/logout']);\r\n }\r\n\r\n openAppearance() {\r\n const dialog = this.appearanceDialog()?.nativeElement;\r\n if (!dialog) return;\r\n // Move dialog to body so it survives menu teardown\r\n document.body.appendChild(dialog);\r\n dialog.showModal();\r\n }\r\n\r\n constructor() {\r\n effect(() => this.agentsStore.setDebugMessages(this.debug()));\r\n effect(() => {\r\n if (this.toggled()) document.documentElement.classList.add('dark');\r\n else document.documentElement.classList.remove('dark');\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["atomicDebug","atomicInfo","atomicWarn","error","atomicError","i1","ButtonComponent","SquarePenIcon"],"mappings":"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"}