mesauth-angular 1.18.0 → 1.20.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mesauth-angular",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"description": "Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications with dark/light theme support",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InjectionToken, EnvironmentProviders,
|
|
2
|
+
import { InjectionToken, EnvironmentProviders, AfterViewInit, OnDestroy, ElementRef, PipeTransform } from '@angular/core';
|
|
3
3
|
import { HttpClient, HttpInterceptorFn, HttpResponse, HttpParams } from '@angular/common/http';
|
|
4
4
|
import { Observable, OperatorFunction } from 'rxjs';
|
|
5
5
|
import { Router } from '@angular/router';
|
|
6
|
-
import { SafeHtml } from '@angular/platform-browser';
|
|
7
6
|
import * as mesauth_angular from 'mesauth-angular';
|
|
7
|
+
import { SafeHtml } from '@angular/platform-browser';
|
|
8
8
|
|
|
9
9
|
interface MesAuthConfig {
|
|
10
10
|
apiBaseUrl: string;
|
|
@@ -291,10 +291,12 @@ declare class UserProfileComponent {
|
|
|
291
291
|
showBell: _angular_core.InputSignal<boolean>;
|
|
292
292
|
showApproval: _angular_core.InputSignal<boolean>;
|
|
293
293
|
showName: _angular_core.InputSignal<boolean>;
|
|
294
|
+
showAi: _angular_core.InputSignal<boolean>;
|
|
294
295
|
showSignature: _angular_core.InputSignal<boolean[]>;
|
|
295
296
|
signatureHeight: _angular_core.InputSignal<number>;
|
|
296
297
|
notificationClick: _angular_core.OutputEmitterRef<void>;
|
|
297
298
|
approvalClick: _angular_core.OutputEmitterRef<void>;
|
|
299
|
+
aiClick: _angular_core.OutputEmitterRef<void>;
|
|
298
300
|
get themeClass(): string;
|
|
299
301
|
readonly currentUser: _angular_core.WritableSignal<IUser>;
|
|
300
302
|
readonly unreadCount: _angular_core.WritableSignal<number>;
|
|
@@ -317,6 +319,7 @@ declare class UserProfileComponent {
|
|
|
317
319
|
loadUnreadCount(): void;
|
|
318
320
|
loadPendingApprovalCount(): void;
|
|
319
321
|
onApprovalClick(): void;
|
|
322
|
+
onAiClick(): void;
|
|
320
323
|
getAvatarUrl(user: IUser): string;
|
|
321
324
|
getLastNameInitial(user: IUser): string;
|
|
322
325
|
toggleDropdown(): void;
|
|
@@ -329,7 +332,7 @@ declare class UserProfileComponent {
|
|
|
329
332
|
onNotificationClick(): void;
|
|
330
333
|
onSigErr(_ev: Event): void;
|
|
331
334
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserProfileComponent, never>;
|
|
332
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserProfileComponent, "ma-user-profile", never, { "inputAvatarShape": { "alias": "inputAvatarShape"; "required": false; "isSignal": true; }; "showBell": { "alias": "showBell"; "required": false; "isSignal": true; }; "showApproval": { "alias": "showApproval"; "required": false; "isSignal": true; }; "showName": { "alias": "showName"; "required": false; "isSignal": true; }; "showSignature": { "alias": "showSignature"; "required": false; "isSignal": true; }; "signatureHeight": { "alias": "signatureHeight"; "required": false; "isSignal": true; }; }, { "notificationClick": "notificationClick"; "approvalClick": "approvalClick"; }, never, ["*"], true, never>;
|
|
335
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserProfileComponent, "ma-user-profile", never, { "inputAvatarShape": { "alias": "inputAvatarShape"; "required": false; "isSignal": true; }; "showBell": { "alias": "showBell"; "required": false; "isSignal": true; }; "showApproval": { "alias": "showApproval"; "required": false; "isSignal": true; }; "showName": { "alias": "showName"; "required": false; "isSignal": true; }; "showAi": { "alias": "showAi"; "required": false; "isSignal": true; }; "showSignature": { "alias": "showSignature"; "required": false; "isSignal": true; }; "signatureHeight": { "alias": "signatureHeight"; "required": false; "isSignal": true; }; }, { "notificationClick": "notificationClick"; "approvalClick": "approvalClick"; "aiClick": "aiClick"; }, never, ["*"], true, never>;
|
|
333
336
|
}
|
|
334
337
|
|
|
335
338
|
declare enum ApprovalStepMode {
|
|
@@ -556,6 +559,195 @@ declare class MaApprovalPanelComponent {
|
|
|
556
559
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaApprovalPanelComponent, "ma-approval-panel", never, {}, { "approvalActioned": "approvalActioned"; }, never, never, true, never>;
|
|
557
560
|
}
|
|
558
561
|
|
|
562
|
+
/**
|
|
563
|
+
* Public AI types exported from mesauth-angular.
|
|
564
|
+
*
|
|
565
|
+
* The library ships a chat panel that talks to MesAuth.Api's /ai/chat SSE endpoint.
|
|
566
|
+
* Consumer apps may register additional client-side tools that the AI can invoke
|
|
567
|
+
* to drive their UI (navigation, dialogs, etc.) via provideMesAuthAi().
|
|
568
|
+
*/
|
|
569
|
+
/**
|
|
570
|
+
* A tool the host app registers. The AI may call it; the handler runs in the browser
|
|
571
|
+
* with the application's DI container available via Angular's inject() in the handler.
|
|
572
|
+
*
|
|
573
|
+
* `parameters` is a JSON schema (object type). Use `readOnly: true` to skip the
|
|
574
|
+
* confirm card for safe operations like navigation. Anything that mutates server state
|
|
575
|
+
* or is hard to undo should have readOnly: false (default).
|
|
576
|
+
*/
|
|
577
|
+
interface ClientTool {
|
|
578
|
+
name: string;
|
|
579
|
+
description: string;
|
|
580
|
+
parameters: ClientToolSchema;
|
|
581
|
+
readOnly?: boolean;
|
|
582
|
+
/**
|
|
583
|
+
* Handler executed when the AI calls this tool.
|
|
584
|
+
* Return a string (or anything JSON-serializable) describing the outcome; this is
|
|
585
|
+
* fed back to the AI as the tool result. Throw to signal failure.
|
|
586
|
+
*/
|
|
587
|
+
handler: (args: any) => Promise<unknown> | unknown;
|
|
588
|
+
}
|
|
589
|
+
interface ClientToolSchema {
|
|
590
|
+
type: 'object';
|
|
591
|
+
properties?: Record<string, unknown>;
|
|
592
|
+
required?: string[];
|
|
593
|
+
[k: string]: unknown;
|
|
594
|
+
}
|
|
595
|
+
/** A single message in the chat panel UI (different from the on-wire format). */
|
|
596
|
+
interface ChatBubble {
|
|
597
|
+
id: string;
|
|
598
|
+
role: 'user' | 'assistant' | 'tool';
|
|
599
|
+
/** Plain-text content (assistant + user). For tool: short summary. */
|
|
600
|
+
text: string;
|
|
601
|
+
/** Server tool calls that ran in this assistant turn (rendered as chips). */
|
|
602
|
+
toolEvents?: ChatToolEvent[];
|
|
603
|
+
pending?: boolean;
|
|
604
|
+
}
|
|
605
|
+
interface ChatToolEvent {
|
|
606
|
+
id: string;
|
|
607
|
+
name: string;
|
|
608
|
+
side: 'server' | 'client';
|
|
609
|
+
status: 'running' | 'ok' | 'error' | 'awaiting-approval' | 'declined';
|
|
610
|
+
summary?: string;
|
|
611
|
+
args?: any;
|
|
612
|
+
readOnly?: boolean;
|
|
613
|
+
}
|
|
614
|
+
/** Stream event types matching MesAuth.Api's AiStreamEvent JSON. */
|
|
615
|
+
type AiSseEvent = {
|
|
616
|
+
type: 'session';
|
|
617
|
+
sessionId: string;
|
|
618
|
+
} | {
|
|
619
|
+
type: 'token';
|
|
620
|
+
text: string;
|
|
621
|
+
} | {
|
|
622
|
+
type: 'tool_call_started';
|
|
623
|
+
id: string;
|
|
624
|
+
name: string;
|
|
625
|
+
args: any;
|
|
626
|
+
side: 'server' | 'client';
|
|
627
|
+
readOnly?: boolean;
|
|
628
|
+
} | {
|
|
629
|
+
type: 'tool_call_completed';
|
|
630
|
+
id: string;
|
|
631
|
+
ok: boolean;
|
|
632
|
+
summary?: string;
|
|
633
|
+
} | {
|
|
634
|
+
type: 'client_tool_call';
|
|
635
|
+
id: string;
|
|
636
|
+
name: string;
|
|
637
|
+
args: any;
|
|
638
|
+
side: 'client';
|
|
639
|
+
readOnly?: boolean;
|
|
640
|
+
} | {
|
|
641
|
+
type: 'error';
|
|
642
|
+
message: string;
|
|
643
|
+
} | {
|
|
644
|
+
type: 'done';
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
interface PendingApproval {
|
|
648
|
+
callId: string;
|
|
649
|
+
name: string;
|
|
650
|
+
args: any;
|
|
651
|
+
side: 'client';
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Drives the chat panel.
|
|
655
|
+
*
|
|
656
|
+
* Uses `fetch` + `ReadableStream` (not `EventSource`, which can't POST a body) to talk to
|
|
657
|
+
* `/ai/chat` SSE. State lives in signals so the panel can re-render reactively.
|
|
658
|
+
*/
|
|
659
|
+
declare class MaAiService {
|
|
660
|
+
private readonly auth;
|
|
661
|
+
private readonly aiConfig;
|
|
662
|
+
private readonly tools;
|
|
663
|
+
readonly messages: _angular_core.WritableSignal<ChatBubble[]>;
|
|
664
|
+
readonly streaming: _angular_core.WritableSignal<boolean>;
|
|
665
|
+
/** When non-null, a write-class client tool is awaiting user confirmation. */
|
|
666
|
+
readonly pendingApproval: _angular_core.WritableSignal<PendingApproval>;
|
|
667
|
+
readonly lastError: _angular_core.WritableSignal<string>;
|
|
668
|
+
private sessionId;
|
|
669
|
+
/** Verbs the user already chose "always approve" for in this session. */
|
|
670
|
+
private alwaysApproved;
|
|
671
|
+
private abortController;
|
|
672
|
+
/** ID of the current assistant bubble we're streaming tokens into. */
|
|
673
|
+
private currentAssistantId;
|
|
674
|
+
get enabled(): boolean;
|
|
675
|
+
/** Start a brand-new conversation. */
|
|
676
|
+
resetSession(): void;
|
|
677
|
+
/** Cancel the in-flight stream (if any). The session id is preserved so the user can resume. */
|
|
678
|
+
cancel(): void;
|
|
679
|
+
/** User typed and submitted a message. */
|
|
680
|
+
send(text: string, currentRoute?: string): Promise<void>;
|
|
681
|
+
/**
|
|
682
|
+
* Approve (or decline) a pending client tool call. If approved (and alwaysApprove),
|
|
683
|
+
* remember the verb so we skip the prompt next time in this session.
|
|
684
|
+
*/
|
|
685
|
+
resolvePendingApproval(decision: 'approve' | 'always' | 'decline'): Promise<void>;
|
|
686
|
+
private runStream;
|
|
687
|
+
private readSse;
|
|
688
|
+
private handleEvent;
|
|
689
|
+
private executeClientTool;
|
|
690
|
+
private continueWithToolResult;
|
|
691
|
+
private appendBubble;
|
|
692
|
+
private appendToken;
|
|
693
|
+
private appendToolEvent;
|
|
694
|
+
private markToolStatus;
|
|
695
|
+
private finalizeAssistant;
|
|
696
|
+
private verbOf;
|
|
697
|
+
private summarize;
|
|
698
|
+
private uid;
|
|
699
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaAiService, never>;
|
|
700
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MaAiService>;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* Right-side, resizable chat drawer. Open/close via the public open/close/toggle methods.
|
|
705
|
+
* Uses panel-shared.css for the header/empty-state styling so it looks like the approval
|
|
706
|
+
* and notification panels.
|
|
707
|
+
*/
|
|
708
|
+
declare class MaAiChatPanelComponent implements AfterViewInit {
|
|
709
|
+
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
710
|
+
readonly width: _angular_core.WritableSignal<number>;
|
|
711
|
+
readonly draft: _angular_core.WritableSignal<string>;
|
|
712
|
+
readonly ai: MaAiService;
|
|
713
|
+
private readonly router;
|
|
714
|
+
private readonly themeService;
|
|
715
|
+
private readonly uiConfig;
|
|
716
|
+
/** Suggested prompts shown in the empty state — manifest overridable. */
|
|
717
|
+
readonly quickPrompts: _angular_core.Signal<string[]>;
|
|
718
|
+
private readonly scrollContainer;
|
|
719
|
+
private readonly textArea;
|
|
720
|
+
get themeClass(): string;
|
|
721
|
+
readonly messages: _angular_core.WritableSignal<mesauth_angular.ChatBubble[]>;
|
|
722
|
+
readonly streaming: _angular_core.WritableSignal<boolean>;
|
|
723
|
+
readonly pendingApproval: _angular_core.WritableSignal<mesauth_angular.PendingApproval>;
|
|
724
|
+
readonly lastError: _angular_core.WritableSignal<string>;
|
|
725
|
+
readonly hasMessages: _angular_core.Signal<boolean>;
|
|
726
|
+
private isDragging;
|
|
727
|
+
private dragStartX;
|
|
728
|
+
private dragStartWidth;
|
|
729
|
+
constructor();
|
|
730
|
+
ngAfterViewInit(): void;
|
|
731
|
+
open(): void;
|
|
732
|
+
close(): void;
|
|
733
|
+
toggle(): void;
|
|
734
|
+
newConversation(): void;
|
|
735
|
+
send(): void;
|
|
736
|
+
cancel(): void;
|
|
737
|
+
onTextareaKey(ev: KeyboardEvent): void;
|
|
738
|
+
onTextareaInput(ev: Event): void;
|
|
739
|
+
approve(): void;
|
|
740
|
+
alwaysApprove(): void;
|
|
741
|
+
decline(): void;
|
|
742
|
+
startResize(ev: PointerEvent): void;
|
|
743
|
+
onResizeMove(ev: PointerEvent): void;
|
|
744
|
+
endResize(ev: PointerEvent): void;
|
|
745
|
+
private loadWidth;
|
|
746
|
+
private scrollToBottom;
|
|
747
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaAiChatPanelComponent, never>;
|
|
748
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaAiChatPanelComponent, "ma-ai-chat-panel", never, {}, {}, never, never, true, never>;
|
|
749
|
+
}
|
|
750
|
+
|
|
559
751
|
type Theme = 'light' | 'dark';
|
|
560
752
|
declare class ThemeService implements OnDestroy {
|
|
561
753
|
private readonly _currentTheme;
|
|
@@ -580,9 +772,11 @@ declare class ThemeService implements OnDestroy {
|
|
|
580
772
|
declare class MaUserComponent implements AfterViewInit {
|
|
581
773
|
userProfile?: UserProfileComponent;
|
|
582
774
|
approvalPanel: MaApprovalPanelComponent;
|
|
775
|
+
aiPanel?: MaAiChatPanelComponent;
|
|
583
776
|
avatarShape: _angular_core.InputSignal<"circle" | "rounded" | "rectangle">;
|
|
584
777
|
showBell: _angular_core.InputSignal<boolean>;
|
|
585
778
|
showApproval: _angular_core.InputSignal<boolean>;
|
|
779
|
+
showAi: _angular_core.InputSignal<boolean>;
|
|
586
780
|
showName: _angular_core.InputSignal<boolean>;
|
|
587
781
|
showSignature: _angular_core.InputSignal<boolean[]>;
|
|
588
782
|
theme: _angular_core.InputSignal<"light" | "dark">;
|
|
@@ -592,7 +786,7 @@ declare class MaUserComponent implements AfterViewInit {
|
|
|
592
786
|
onNotificationRead(): void;
|
|
593
787
|
onApprovalActioned(): void;
|
|
594
788
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaUserComponent, never>;
|
|
595
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaUserComponent, "ma-user", never, { "avatarShape": { "alias": "avatarShape"; "required": false; "isSignal": true; }; "showBell": { "alias": "showBell"; "required": false; "isSignal": true; }; "showApproval": { "alias": "showApproval"; "required": false; "isSignal": true; }; "showName": { "alias": "showName"; "required": false; "isSignal": true; }; "showSignature": { "alias": "showSignature"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
789
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaUserComponent, "ma-user", never, { "avatarShape": { "alias": "avatarShape"; "required": false; "isSignal": true; }; "showBell": { "alias": "showBell"; "required": false; "isSignal": true; }; "showApproval": { "alias": "showApproval"; "required": false; "isSignal": true; }; "showAi": { "alias": "showAi"; "required": false; "isSignal": true; }; "showName": { "alias": "showName"; "required": false; "isSignal": true; }; "showSignature": { "alias": "showSignature"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
596
790
|
}
|
|
597
791
|
|
|
598
792
|
declare class MaUserXComponent {
|
|
@@ -853,9 +1047,11 @@ interface MaUiManifest {
|
|
|
853
1047
|
labels?: Record<string, string>;
|
|
854
1048
|
/** Feature flags read by components at runtime. */
|
|
855
1049
|
features?: Record<string, boolean>;
|
|
1050
|
+
/** Suggested prompts shown in the AI panel empty state. Overrides the library default. */
|
|
1051
|
+
quickPrompts?: string[];
|
|
856
1052
|
}
|
|
857
1053
|
/** Current installed package version — keep in sync with package.json. */
|
|
858
|
-
declare const PACKAGE_VERSION = "1.
|
|
1054
|
+
declare const PACKAGE_VERSION = "1.19.0";
|
|
859
1055
|
/**
|
|
860
1056
|
* Provides server-driven UI configuration loaded from the hosted manifest.
|
|
861
1057
|
* Components read `labels()` and `features()` signals instead of hardcoded strings.
|
|
@@ -867,6 +1063,7 @@ declare class MaUiConfigService {
|
|
|
867
1063
|
private _features;
|
|
868
1064
|
private _updateRequired;
|
|
869
1065
|
private _manifestVersion;
|
|
1066
|
+
private _quickPrompts;
|
|
870
1067
|
/** Reactive map of UI string overrides from the server manifest. */
|
|
871
1068
|
readonly labels: _angular_core.Signal<Record<string, string>>;
|
|
872
1069
|
/** Reactive map of feature flags from the server manifest. */
|
|
@@ -875,6 +1072,8 @@ declare class MaUiConfigService {
|
|
|
875
1072
|
readonly updateRequired: _angular_core.Signal<boolean>;
|
|
876
1073
|
/** The manifest version string loaded from the server, or null if not yet loaded. */
|
|
877
1074
|
readonly manifestVersion: _angular_core.Signal<string>;
|
|
1075
|
+
/** AI panel "quick prompts" — populated from the manifest if provided, else empty. */
|
|
1076
|
+
readonly quickPrompts: _angular_core.Signal<string[]>;
|
|
878
1077
|
/**
|
|
879
1078
|
* Returns a label by key, falling back to `defaultValue` when the server
|
|
880
1079
|
* manifest has not provided an override.
|
|
@@ -983,5 +1182,108 @@ declare function runSsoCheckHandshake(authService: MesAuthService): Promise<void
|
|
|
983
1182
|
*/
|
|
984
1183
|
declare function runReturnViaPostMessageIfRequested(authService: MesAuthService): Promise<boolean>;
|
|
985
1184
|
|
|
986
|
-
|
|
987
|
-
|
|
1185
|
+
interface MesAuthAiConfig {
|
|
1186
|
+
/** Master switch — when false the Ask-AI button hides and the panel never opens. */
|
|
1187
|
+
enabled?: boolean;
|
|
1188
|
+
/**
|
|
1189
|
+
* Extra client-side tools the AI can invoke. The handler runs in the browser.
|
|
1190
|
+
* The library always exposes a set of built-in client tools (navigate, toggle theme, etc.)
|
|
1191
|
+
* — these are merged in addition.
|
|
1192
|
+
*/
|
|
1193
|
+
tools?: ClientTool[];
|
|
1194
|
+
/**
|
|
1195
|
+
* Optional extra paragraphs appended to the backend system prompt for this app.
|
|
1196
|
+
* Use to tell the AI what domain the consumer app handles (e.g. "You are inside the SPC app").
|
|
1197
|
+
*/
|
|
1198
|
+
systemPromptExtensions?: string[];
|
|
1199
|
+
/**
|
|
1200
|
+
* Optional friendly name of the host app; sent to the backend each turn.
|
|
1201
|
+
*/
|
|
1202
|
+
appName?: string;
|
|
1203
|
+
}
|
|
1204
|
+
declare const MES_AUTH_AI_CONFIG: InjectionToken<MesAuthAiConfig>;
|
|
1205
|
+
/** Default configuration when the consumer doesn't call provideMesAuthAi(). */
|
|
1206
|
+
declare const DEFAULT_AI_CONFIG: MesAuthAiConfig;
|
|
1207
|
+
/**
|
|
1208
|
+
* Provide AI assistant configuration to mesauth-angular.
|
|
1209
|
+
*
|
|
1210
|
+
* @example
|
|
1211
|
+
* ```ts
|
|
1212
|
+
* providers: [
|
|
1213
|
+
* provideMesAuth(...),
|
|
1214
|
+
* provideMesAuthAi({
|
|
1215
|
+
* enabled: true,
|
|
1216
|
+
* appName: 'MesExtensionSite',
|
|
1217
|
+
* tools: [
|
|
1218
|
+
* {
|
|
1219
|
+
* name: 'spc_open_chart',
|
|
1220
|
+
* description: 'Open the SPC chart for a given product line',
|
|
1221
|
+
* parameters: {
|
|
1222
|
+
* type: 'object',
|
|
1223
|
+
* properties: { lineId: { type: 'string' } },
|
|
1224
|
+
* required: ['lineId']
|
|
1225
|
+
* },
|
|
1226
|
+
* readOnly: true,
|
|
1227
|
+
* handler: (args) => inject(Router).navigateByUrl(`/spc/${args.lineId}`)
|
|
1228
|
+
* }
|
|
1229
|
+
* ]
|
|
1230
|
+
* })
|
|
1231
|
+
* ]
|
|
1232
|
+
* ```
|
|
1233
|
+
*/
|
|
1234
|
+
declare function provideMesAuthAi(config: MesAuthAiConfig): EnvironmentProviders;
|
|
1235
|
+
|
|
1236
|
+
/**
|
|
1237
|
+
* Resolves the full set of client tools available to the AI: built-ins + consumer-registered.
|
|
1238
|
+
* Handlers are invoked through `runTool(name, args)` which automatically threads the Injector
|
|
1239
|
+
* so consumer handlers can use inject() patterns.
|
|
1240
|
+
*/
|
|
1241
|
+
declare class MaAiToolsRegistry {
|
|
1242
|
+
private readonly config;
|
|
1243
|
+
private readonly injector;
|
|
1244
|
+
/** Built-in client tools shipped by the library. */
|
|
1245
|
+
private readonly builtIn;
|
|
1246
|
+
/** All tools, deduplicated by name (consumer wins on conflict). */
|
|
1247
|
+
list(): ClientTool[];
|
|
1248
|
+
resolve(name: string): ClientTool | undefined;
|
|
1249
|
+
/** Run a registered client tool and serialize its result for posting back to the agent loop. */
|
|
1250
|
+
runTool(name: string, args: any): Promise<{
|
|
1251
|
+
ok: boolean;
|
|
1252
|
+
result: string;
|
|
1253
|
+
}>;
|
|
1254
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaAiToolsRegistry, never>;
|
|
1255
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MaAiToolsRegistry>;
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
declare class MaAiButtonComponent {
|
|
1259
|
+
private readonly config;
|
|
1260
|
+
readonly enabled: _angular_core.Signal<boolean>;
|
|
1261
|
+
clicked: _angular_core.OutputEmitterRef<void>;
|
|
1262
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaAiButtonComponent, never>;
|
|
1263
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaAiButtonComponent, "ma-ai-button", never, {}, { "clicked": "clicked"; }, never, never, true, never>;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
/**
|
|
1267
|
+
* Tiny hand-rolled GitHub-flavoured Markdown renderer for AI chat bubbles.
|
|
1268
|
+
*
|
|
1269
|
+
* Supports: headings, paragraphs (with single-newline → <br>), pipe tables,
|
|
1270
|
+
* fenced + inline code, bullet/ordered lists (flat), blockquotes, bold, italic,
|
|
1271
|
+
* autolinks via [text](url). All input is HTML-escaped before any markup
|
|
1272
|
+
* is added, so the only HTML that reaches the DOM is what this pipe emits.
|
|
1273
|
+
* Wrapped in `bypassSecurityTrustHtml` so [innerHTML] doesn't re-sanitize and
|
|
1274
|
+
* strip the markup we explicitly want.
|
|
1275
|
+
*
|
|
1276
|
+
* Not supported (intentionally — keeps the renderer tiny and safe):
|
|
1277
|
+
* nested lists, images, raw HTML, strikethrough, task lists, footnotes.
|
|
1278
|
+
* If the model emits any of those, they appear as literal text.
|
|
1279
|
+
*/
|
|
1280
|
+
declare class MaAiMarkdownPipe implements PipeTransform {
|
|
1281
|
+
private readonly sanitizer;
|
|
1282
|
+
transform(value: string | null | undefined): SafeHtml;
|
|
1283
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaAiMarkdownPipe, never>;
|
|
1284
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<MaAiMarkdownPipe, "maAiMarkdown", true>;
|
|
1285
|
+
}
|
|
1286
|
+
declare function renderMarkdown(src: string): string;
|
|
1287
|
+
|
|
1288
|
+
export { ALL_ACTIONS, AVATAR_FRAMES, ApprovalActionType, ApprovalDocumentStatus, ApprovalStepMode, ApprovalStepStatus, DEFAULT_AI_CONFIG, MES_AUTH_AI_CONFIG, MES_AUTH_CONFIG, MaAiButtonComponent, MaAiChatPanelComponent, MaAiMarkdownPipe, MaAiService, MaAiToolsRegistry, MaApprovalPanelComponent, MaApprovalService, MaArvContainerComponent, MaAvatarComponent, MaIconComponent, MaThemeDirective, MaUiConfigService, MaUserComponent, MaUserMenuColor, MaUserMenuComponent, MaUserXComponent, MesAuthModule, MesAuthService, NotificationBadgeComponent, NotificationPanelComponent, NotificationType, PACKAGE_VERSION, ThemeService, ToastContainerComponent, ToastService, UserProfileComponent, extractXMaPerm, mesAuthInterceptor, provideMesAuth, provideMesAuthAi, renderMarkdown, runReturnViaPostMessageIfRequested, runSsoCheckHandshake, withXMaPerm, xMaResource };
|
|
1289
|
+
export type { AiSseEvent, ApprovalDashboardDto, ApprovalDocumentDto, ApprovalDocumentSummaryDto, ApprovalHistoryDto, ApprovalReferenceDto, ApprovalStepDto, ApprovalStepRequest, ApprovalSubmitResult, ApprovalTemplateDto, ApprovalTemplateStepDto, ApprovalTemplateSummaryDto, ApproveRejectRequest, AvatarFrameDef, AvatarShape, AvatarSize, ChatBubble, ChatToolEvent, ClientTool, ClientToolSchema, CreateApprovalRequest, CreateApprovalResponseDto, CreateApprovalTemplateRequest, DelegateRequest, FrontEndRoute, IUser, MaUiManifest, MesAuthAiConfig, MesAuthConfig, NotificationDto, PagedList, PendingApproval, PermissionHeader, RealTimeNotificationDto, RequestConfig, RolePreviewUserDto, StepRoleDto, Theme, Toast, UpdateApprovalTemplateRequest, UserFrontEndRoutesGrouped };
|