{"version":3,"file":"c8y-ngx-components-ai-agent-chat.mjs","sources":["../../ai/agent-chat/agent-step-feedback.component.ts","../../ai/agent-chat/agent-step-feedback.component.html","../../ai/agent-chat/agent-chat.component.ts","../../ai/agent-chat/agent-chat.component.html","../../ai/agent-chat/widget-ai-chat-section.component.ts","../../ai/agent-chat/widget-ai-chat-section.component.html","../../ai/agent-chat/c8y-ngx-components-ai-agent-chat.ts"],"sourcesContent":["import { JsonPipe, NgClass, AsyncPipe } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {\n  ListGroupComponent,\n  ListItemBodyComponent,\n  ListItemCollapseComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  MarkdownToHtmlPipe,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AgentStep } from '@c8y/ngx-components/ai';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n  selector: 'c8y-agent-step-feedback',\n  templateUrl: './agent-step-feedback.component.html',\n  standalone: true,\n  imports: [\n    ListGroupComponent,\n    ListItemComponent,\n    ListItemCollapseComponent,\n    ListItemBodyComponent,\n    ListItemIconComponent,\n    NgClass,\n    JsonPipe,\n    MarkdownToHtmlPipe,\n    AsyncPipe,\n    C8yTranslatePipe\n  ],\n  host: { class: 'agent-step-feedback' }\n})\nexport class AgentStepFeedbackComponent implements OnInit, OnChanges {\n  @Input({ required: true }) step: AgentStep;\n\n  @Input() label: string;\n  @Input() loading = false;\n  @Input() collapsed = true;\n  @Input() canCollapse = false;\n\n  ngOnInit(): void {\n    if (this.step) {\n      this.parseDefaultAgentStep(this.step);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.step) {\n      this.parseDefaultAgentStep(changes.step.currentValue);\n    }\n  }\n\n  parseDefaultAgentStep(step: AgentStep): void {\n    if (step.reasoning) {\n      this.label = gettext('Reasoning');\n      this.loading = false;\n      this.canCollapse = true;\n      this.collapsed = false;\n    }\n\n    if (step.toolCalls.length > 0 && !step.toolResults?.length) {\n      this.label = gettext('Calling a tool');\n      this.loading = true;\n      this.canCollapse = true;\n      this.collapsed = true;\n    } else if (step.toolResults?.length > 0) {\n      this.label = gettext('Tool result');\n      this.loading = false;\n      this.canCollapse = true;\n      this.collapsed = true;\n    }\n  }\n}\n","@if (!step.reasoning) {\n  <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (label) {\n  <c8y-list-group class=\"m-t-16 m-b-16\">\n    <c8y-li\n      [active]=\"!loading\"\n      [collapsed]=\"collapsed\"\n    >\n      <c8y-li-icon>\n        <span\n          class=\"btn-ai btn-ai-hint btn-sm\"\n          [ngClass]=\"{ working: loading }\"\n        >\n          <span></span>\n        </span>\n      </c8y-li-icon>\n      <c8y-li-body>\n        {{ label | translate }}\n      </c8y-li-body>\n\n      @if (canCollapse) {\n        <c8y-li-collapse>\n          @if (step.reasoning) {\n            <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n          } @else if (step) {\n            <pre\n              class=\"fit-w\"\n              style=\"max-height: 320px\"\n              >{{ step | json }}</pre\n            >\n          }\n        </c8y-li-collapse>\n      }\n    </c8y-li>\n  </c8y-list-group>\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Type\n} from '@angular/core';\nimport {\n  AlertService,\n  AppStateService,\n  C8Y_PLUGIN_CONTEXT_PATH,\n  C8yTranslatePipe,\n  EmptyStateComponent,\n  GainsightService,\n  LoadingComponent,\n  MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n  AgentHealthCheckResponse,\n  AgentStep,\n  AIMessage,\n  AIMessageStreamSteps,\n  AIService,\n  ClientAgentDefinition,\n  ToolResult\n} from '@c8y/ngx-components/ai';\nimport {\n  AiChatComponent,\n  AiChatMessageActionComponent,\n  AiChatMessageComponent,\n  AiChatSuggestionComponent\n} from '@c8y/ngx-components/ai/ai-chat';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  BehaviorSubject,\n  firstValueFrom,\n  map,\n  Observable,\n  of,\n  OperatorFunction,\n  Subscription\n} from 'rxjs';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n  selector: 'c8y-agent-chat',\n  templateUrl: './agent-chat.component.html',\n  imports: [\n    AiChatComponent,\n    AiChatSuggestionComponent,\n    AiChatMessageComponent,\n    AiChatMessageActionComponent,\n    LoadingComponent,\n    MarkdownToHtmlPipe,\n    AsyncPipe,\n    NgComponentOutlet,\n    C8yTranslatePipe,\n    EmptyStateComponent\n  ]\n})\nexport class AgentChatComponent implements OnInit, OnDestroy {\n  private _agent: string | ClientAgentDefinition;\n\n  @Input({ required: true })\n  set agent(value: string | ClientAgentDefinition) {\n    if (typeof value === 'string') {\n      this.agentName = value;\n      this.agentDefinition = undefined;\n    } else {\n      this.agentName = value.definition.name;\n      this.agentDefinition = value;\n    }\n  }\n\n  @Input() suggestions: { label: string; prompt: string; icon?: string }[] = [];\n  @Input() title: string;\n  @Input() headline: string = gettext('Welcome!');\n  @Input() welcomeText: string;\n  @Input() autoInstallAgents = true;\n  @Input() variables = {};\n  @Input() stepRenderComponent: Type<any> = AgentStepFeedbackComponent;\n\n  @Output() onMessageDelta = new EventEmitter<string>();\n  @Output() onMessageText = new EventEmitter<string>();\n  @Output() onMessageFinish = new EventEmitter<string>();\n  @Output() onToolResult = new EventEmitter<ToolResult>();\n\n  isLoading = false;\n\n  /**\n   * A stream of AI messages representing the conversation.\n   */\n  messages$: BehaviorSubject<AIMessageStreamSteps[]> = new BehaviorSubject<AIMessageStreamSteps[]>(\n    []\n  );\n  agentName: string;\n  agentDefinition: ClientAgentDefinition | undefined;\n  hasError = true;\n  canCreate = false;\n  errorMsg = '';\n  prompt = '';\n\n  private aiService = inject(AIService);\n  private gainsightService = inject(GainsightService);\n  private alertService = inject(AlertService);\n  private pluginContextPath = inject(C8Y_PLUGIN_CONTEXT_PATH, { optional: true });\n  private appState = inject(AppStateService);\n  private abortController: AbortController;\n  private assistantSubscription: Subscription;\n\n  private get currentContextPath(): string {\n    return this.pluginContextPath || this.appState.currentApplication?.value?.contextPath || '';\n  }\n\n  defaultAgentStepRendererPipe: OperatorFunction<\n    AgentStep[],\n    { content: Type<any> | string; origin: AgentStep }[]\n  > = <T extends AgentStep[]>(source: Observable<T>) => {\n    return source.pipe(\n      map(steps =>\n        steps.map(step => {\n          if (step.reasoning || step.toolCalls || step.toolResults) {\n            return { content: this.stepRenderComponent, origin: { ...step } };\n          }\n          return { content: step.text, origin: { ...step } };\n        })\n      )\n    );\n  };\n\n  async ngOnInit(): Promise<void> {\n    if (this.agentDefinition.snapshot) {\n      this.hasError = false;\n      return;\n    }\n    this.isLoading = true;\n    try {\n      const agentHealth: AgentHealthCheckResponse = await this.aiService.getAgentHealth(\n        this.agentName,\n        this.currentContextPath\n      );\n      this.composeErrorMessage(agentHealth);\n    } catch (ex) {\n      this.errorMsg = gettext('Microservice not found. Please contact your administrator.');\n      this.hasError = true;\n    }\n    this.isLoading = false;\n  }\n\n  async sendMessage(message: AIMessage) {\n    this.messages$.next([...this.messages$.value, message]);\n    this.isLoading = true;\n    this.abortController = new AbortController();\n    const currentAssistantMessage: AIMessageStreamSteps = {\n      role: 'assistant',\n      content: ''\n    };\n    this.messages$.next([...this.messages$.value, currentAssistantMessage]);\n    const stream = await this.aiService.stream$(\n      this.agentDefinition || this.agentName,\n      this.messages$.value.filter(m => m !== currentAssistantMessage),\n      this.variables,\n      this.abortController,\n      this.currentContextPath\n    );\n\n    if (this.assistantSubscription) {\n      this.assistantSubscription.unsubscribe();\n    }\n\n    this.assistantSubscription = stream.subscribe((messageFromAssistant: AIMessage) =>\n      this.processAgentMessage(\n        currentAssistantMessage,\n        messageFromAssistant,\n        this.agentName,\n        message\n      )\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.cancel();\n  }\n\n  reprompt(userMessage: AIMessageStreamSteps) {\n    const index = this.messages$.value.indexOf(userMessage);\n    if (index > -1) {\n      this.messages$.next(this.messages$.value.slice(0, index));\n      this.prompt = userMessage.content;\n    }\n  }\n\n  rate(assistantMessage: AIMessageStreamSteps, positive) {\n    const agentName = typeof this.agent === 'string' ? this.agent : this.agent.label;\n    this.gainsightService.triggerEvent('ai.agent.feedback', {\n      positive,\n      assistant: assistantMessage,\n      user: this.messages$.value[this.messages$.value.indexOf(assistantMessage) - 1],\n      agent: agentName\n    });\n  }\n\n  reload(assistantMessage: AIMessageStreamSteps) {\n    const index = this.messages$.value.indexOf(assistantMessage);\n    const userMessage = this.messages$.value[index - 1];\n    if (index > -1) {\n      this.messages$.next(this.messages$.value.slice(0, index - 1));\n      this.sendMessage({\n        role: 'user',\n        content: userMessage.content,\n        timestamp: new Date().toISOString()\n      });\n    }\n  }\n\n  async cancel() {\n    if (this.abortController) {\n      this.abortController.abort();\n    }\n\n    const lastMessage = this.messages$.value[this.messages$.value.length - 1];\n    if (lastMessage && lastMessage.role === 'assistant') {\n      if (lastMessage.content === '') {\n        // if message is aborted before content is even populated, remove it entirely\n        this.messages$.next(this.messages$.value.slice(0, -1));\n      } else {\n        // if message has content, mark the last step as aborted to indicate incomplete processing\n        const lastMessageSteps: AgentStep[] =\n          (await firstValueFrom(lastMessage.componentSteps$))\n            .map(s => s.origin)\n            .map((step, index, arr) =>\n              index === arr.length - 1 ? { ...step, aborted: true } : step\n            ) || [];\n        if (lastMessageSteps.length) {\n          lastMessage.componentSteps$ = of(lastMessageSteps).pipe(\n            this.defaultAgentStepRendererPipe\n          );\n\n          this.messages$.next([...this.messages$.value]);\n        }\n      }\n    }\n\n    if (this.assistantSubscription) {\n      this.assistantSubscription.unsubscribe();\n    }\n\n    this.isLoading = false;\n  }\n\n  async createAgent() {\n    this.isLoading = true;\n    try {\n      await this.aiService.createOrUpdateAgent(this.agentDefinition.definition);\n      this.hasError = false;\n    } catch (ex) {\n      this.alertService.danger(gettext('Failed to create the agent.'));\n      this.hasError = true;\n    }\n    this.isLoading = false;\n  }\n\n  private composeErrorMessage(agentHealth: AgentHealthCheckResponse) {\n    if (agentHealth.exists) {\n      this.errorMsg = '';\n      this.hasError = false;\n      return;\n    }\n    this.hasError = true;\n    if (!agentHealth.isProviderConfigured) {\n      this.errorMsg = gettext('AI provider is not configured. Please contact your administrator.');\n      return;\n    }\n    if (agentHealth.canCreate && typeof this.agent === 'string') {\n      this.errorMsg = gettext(\n        'The agent does not exist. Provide the agent definition in the agent manager to use it.'\n      );\n      return;\n    }\n    if (agentHealth.canCreate && typeof this.agent !== 'string') {\n      this.canCreate = true;\n      if (this.autoInstallAgents && this.agentDefinition) {\n        this.createAgent();\n        return;\n      }\n      this.errorMsg = gettext('The agent does not exist. You can create it now.');\n      return;\n    }\n    if (!agentHealth.canCreate) {\n      this.errorMsg = gettext('The agent does not exist. Please contact your administrator.');\n      if (agentHealth.messages?.length) {\n        this.errorMsg += '\\n' + agentHealth.messages.join(' ');\n      }\n      return;\n    }\n    this.errorMsg = gettext('Unknown error. Please contact your administrator.');\n  }\n\n  private processAgentMessage(\n    currentAssistantMessage: AIMessageStreamSteps,\n    messageFromAssistant: AIMessage,\n    agentName: string,\n    message: AIMessage\n  ) {\n    currentAssistantMessage.content = messageFromAssistant.content;\n\n    const steps = messageFromAssistant.steps || [];\n    const lastStep = steps.length ? steps[steps.length - 1] : null;\n\n    this.onMessageDelta.emit(lastStep.textDelta);\n    this.onMessageText.emit(lastStep.text);\n    currentAssistantMessage.componentSteps$ = of(steps).pipe(this.defaultAgentStepRendererPipe);\n\n    if (messageFromAssistant.finishReason === 'stop') {\n      currentAssistantMessage.timestamp = new Date().toISOString();\n      this.onMessageFinish.emit(currentAssistantMessage.content);\n      this.gainsightService.triggerEvent('ai.agent.message', {\n        agent: agentName,\n        user: message,\n        assistant: currentAssistantMessage.content\n      });\n      this.isLoading = false;\n    }\n\n    if (messageFromAssistant.finishReason === 'error') {\n      currentAssistantMessage.timestamp = new Date().toISOString();\n      this.isLoading = false;\n    }\n\n    if (lastStep?.toolResults) {\n      lastStep.toolResults.forEach(toolResult => {\n        this.onToolResult.emit(toolResult);\n      });\n    }\n\n    // as we are mutating the currentAssistantMessage object\n    // which is already in the messages array we need to emit a new array reference\n    this.messages$.next([...this.messages$.value]);\n  }\n}\n","@if (hasError && isLoading) {\n  <c8y-loading class=\"m-auto\"></c8y-loading>\n}\n@if (hasError && !isLoading) {\n  <c8y-ui-empty-state\n    class=\"m-auto\"\n    [icon]=\"'disclaimer'\"\n    [title]=\"'An error occurred' | translate\"\n    [subtitle]=\"errorMsg | translate\"\n    [horizontal]=\"true\"\n  >\n    @if (canCreate) {\n      <div class=\"text-center m-t-16 m-b-16\">\n        <button\n          class=\"btn btn-primary\"\n          (click)=\"createAgent()\"\n        >\n          {{ 'Create agent' | translate }}\n        </button>\n      </div>\n    }\n  </c8y-ui-empty-state>\n}\n\n@if (!hasError) {\n  <c8y-ai-chat\n    (onMessage)=\"sendMessage($event)\"\n    [isLoading]=\"isLoading\"\n    (onCancel)=\"cancel()\"\n    [config]=\"{ title: title, headline: headline, welcomeText: welcomeText }\"\n    [prompt]=\"prompt\"\n  >\n    @for (message of messages$ | async; track $index; let i = $index) {\n      <c8y-ai-chat-message\n        [message]=\"{ role: message.role, content: '', timestamp: message.timestamp }\"\n      >\n        @if (!message.componentSteps$) {\n          <div [innerHTML]=\"message.content | markdownToHtml | async\"></div>\n        }\n        @for (step of message.componentSteps$ | async; track $index) {\n          @if (typeof step.content === 'string') {\n            <div [innerHTML]=\"step.content | markdownToHtml | async\"></div>\n          } @else {\n            <ng-container\n              [ngComponentOutlet]=\"step.content\"\n              [ngComponentOutletInputs]=\"{ step: step.origin }\"\n            ></ng-container>\n          }\n        }\n\n        @if (message.role === 'user') {\n          <c8y-ai-chat-message-action\n            icon=\"pencil\"\n            [tooltip]=\"'Edit and resend this message' | translate\"\n            [disabled]=\"isLoading\"\n            (click)=\"reprompt(message)\"\n          ></c8y-ai-chat-message-action>\n        }\n\n        @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n          <c8y-ai-chat-message-action\n            icon=\"thumbs-up\"\n            [tooltip]=\"'This is useful' | translate\"\n            [disabled]=\"isLoading\"\n            (click)=\"rate(message, true)\"\n          ></c8y-ai-chat-message-action>\n        }\n\n        @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n          <c8y-ai-chat-message-action\n            icon=\"thumbs-down\"\n            [tooltip]=\"'This is not useful' | translate\"\n            [disabled]=\"isLoading\"\n            (click)=\"rate(message, false)\"\n          ></c8y-ai-chat-message-action>\n        }\n\n        @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n          <c8y-ai-chat-message-action\n            icon=\"refresh\"\n            [tooltip]=\"'Regenerate this response' | translate\"\n            [disabled]=\"isLoading\"\n            (click)=\"reload(message)\"\n          ></c8y-ai-chat-message-action>\n        }\n\n        @if (\n          !message.content && message.role === 'assistant' && i === (messages$ | async)?.length - 1\n        ) {\n          <div class=\"text-center\">\n            <c8y-loading></c8y-loading>\n          </div>\n        }\n      </c8y-ai-chat-message>\n    }\n\n    @for (suggestion of suggestions; track $index) {\n      <c8y-ai-chat-suggestion\n        [icon]=\"suggestion.icon || 'c8y-bulb'\"\n        [useAiButtons]=\"true\"\n        [label]=\"suggestion.label\"\n        [prompt]=\"suggestion.prompt\"\n        (suggestionClicked)=\"sendMessage($event)\"\n        [disabled]=\"isLoading\"\n      ></c8y-ai-chat-suggestion>\n    }\n  </c8y-ai-chat>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, OnInit, Type } from '@angular/core';\nimport { AlertService, C8yTranslatePipe, ContextRouteService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ClientAgentDefinition, ToolResult } from '@c8y/ngx-components/ai';\nimport {\n  WidgetConfigFeedbackComponent,\n  WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { AgentChatComponent } from './agent-chat.component';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n  selector: 'c8y-widget-ai-chat-section',\n  imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent],\n  standalone: true,\n  templateUrl: './widget-ai-chat-section.component.html'\n})\nexport class WidgetAiChatSectionComponent implements OnInit {\n  @Input()\n  suggestions: Array<{ label: string; prompt: string }> = [];\n  @Input()\n  agent: string | ClientAgentDefinition;\n  @Input()\n  headline = gettext('Welcome!');\n  @Input()\n  title: string = gettext('What can I help you with?');\n  @Input()\n  welcomeText;\n  @Input()\n  variables: { [key: string]: any };\n  @Input()\n  useContextAsVariable = true;\n  @Input()\n  contextVariableName = 'c8yContext';\n  _renderStepComponent: Type<any>;\n\n  private readonly widgetConfigService = inject(WidgetConfigService);\n  private readonly alertService = inject(AlertService);\n  private readonly contextRouteService = inject(ContextRouteService);\n\n  /**\n   * A component that is used to render each step in the chat. By default, it uses the `AgentStepFeedbackComponent`.\n   * You can provide your own component by returning it from this callback.\n   *\n   * @returns A promise that resolves to a component type.\n   */\n  @Input()\n  loadRenderStepComponent: () => Promise<Type<any>> = () =>\n    Promise.resolve(AgentStepFeedbackComponent);\n\n  /**\n   * A callback that is invoked when a tool result is returned. The function can return either:\n   * - `undefined` or `void`: No action is taken.\n   * - an object which is stored to the widget configuration.\n   */\n  onToolResult: (step: ToolResult) => undefined | any = () => undefined;\n\n  /**\n   * @ignore\n   */\n  async ngOnInit(): Promise<void> {\n    if (!this.variables && this.useContextAsVariable) {\n      const { contextData } = this.contextRouteService.activatedContextData;\n      this.variables = {\n        [this.contextVariableName]: contextData || this.widgetConfigService.currentConfig.device\n      };\n    }\n\n    this._renderStepComponent = await this.loadRenderStepComponent();\n  }\n\n  /**\n   * Handles the tool result returned from the AI agent.\n   * @param tool The tool result returned from the AI agent.\n   */\n  toolResultHandler(tool: ToolResult) {\n    try {\n      const parsedResult = this.onToolResult(tool);\n      if (!parsedResult) {\n        return;\n      }\n      this.widgetConfigService.updateConfig(\n        {\n          config: {\n            ...this.widgetConfigService.currentConfig,\n            ...parsedResult\n          }\n        },\n        true\n      );\n    } catch (e) {\n      this.alertService.danger(gettext('There was an error processing the AI response.'));\n    }\n  }\n}\n","<c8y-widget-config-feedback>\n  <div\n    class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n    [title]=\"'AI code assistant' | translate\"\n  >\n    <span></span>\n  </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n  [title]=\"title | translate\"\n  [headline]=\"headline | translate\"\n  [welcomeText]=\"welcomeText | translate\"\n  #agentChat\n  [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n  [agent]=\"agent\"\n  [variables]=\"variables\"\n  [stepRenderComponent]=\"_renderStepComponent\"\n  (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}