@xpert-ai/chatkit-types 0.2.2 → 0.3.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/dist/index.d.ts +375 -4
- package/dist/index.js +376 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -197,6 +197,15 @@ export declare type ChatKitCodeReference = ChatKitReferenceBase & {
|
|
|
197
197
|
taskId?: string;
|
|
198
198
|
};
|
|
199
199
|
|
|
200
|
+
export declare type ChatKitCommandSource = {
|
|
201
|
+
type: 'slash_command';
|
|
202
|
+
name: string;
|
|
203
|
+
source: 'builtin' | 'host' | 'runtime';
|
|
204
|
+
executionType: ChatKitSlashCommandExecutionType;
|
|
205
|
+
kind?: ChatKitSlashCommandKind;
|
|
206
|
+
workflow?: ChatKitPromptWorkflow;
|
|
207
|
+
};
|
|
208
|
+
|
|
200
209
|
export declare interface ChatKitElementEventMap {
|
|
201
210
|
'chatkit.error': CustomEvent<{
|
|
202
211
|
error: Error;
|
|
@@ -278,6 +287,14 @@ export declare type ChatKitOptions = {
|
|
|
278
287
|
* ChatKit iframe URL for web component integrations.
|
|
279
288
|
*/
|
|
280
289
|
frameUrl?: string;
|
|
290
|
+
/**
|
|
291
|
+
* Controls how the ChatKit web component is presented.
|
|
292
|
+
* - `chat`: render the ChatKit iframe in the host layout.
|
|
293
|
+
* - `pet`: render only the pet launcher until the user clicks the pet.
|
|
294
|
+
*
|
|
295
|
+
* @default "chat"
|
|
296
|
+
*/
|
|
297
|
+
displayMode?: 'chat' | 'pet';
|
|
281
298
|
api: CustomApiConfig | HostedApiConfig;
|
|
282
299
|
/**
|
|
283
300
|
* Default request values that should be injected into every user message sent
|
|
@@ -296,6 +313,14 @@ export declare type ChatKitOptions = {
|
|
|
296
313
|
* * @default "light"
|
|
297
314
|
*/
|
|
298
315
|
theme?: ColorScheme | ChatKitTheme;
|
|
316
|
+
/**
|
|
317
|
+
* Optional animated pet companion rendered by the ChatKit web component over
|
|
318
|
+
* the host page viewport.
|
|
319
|
+
* Passing `true` enables the default built-in pet.
|
|
320
|
+
*
|
|
321
|
+
* @default false
|
|
322
|
+
*/
|
|
323
|
+
pet?: boolean | ChatKitPetOptions;
|
|
299
324
|
/**
|
|
300
325
|
* The ID of the thread to show when ChatKit is mounted or opened for the first time.
|
|
301
326
|
* Passing `null` will show the new thread view.
|
|
@@ -434,6 +459,11 @@ export declare type ChatKitOptions = {
|
|
|
434
459
|
tools?: ToolOption[];
|
|
435
460
|
/** A list of models that users can choose from before sending a message. */
|
|
436
461
|
models?: ModelOption[];
|
|
462
|
+
/**
|
|
463
|
+
* Slash commands shown when users type `/` at the start of the composer.
|
|
464
|
+
* Command names should not include the leading slash.
|
|
465
|
+
*/
|
|
466
|
+
slashCommands?: ChatKitSlashCommand[];
|
|
437
467
|
};
|
|
438
468
|
/**
|
|
439
469
|
* Disclaimer text to display below the composer. Supports links with markdown formatting.
|
|
@@ -464,6 +494,65 @@ export declare type ChatKitOptions = {
|
|
|
464
494
|
};
|
|
465
495
|
};
|
|
466
496
|
|
|
497
|
+
export declare type ChatKitPetAnimationMode = 'loop' | 'once';
|
|
498
|
+
|
|
499
|
+
export declare type ChatKitPetAnimationName = 'idle' | 'running-right' | 'running-left' | 'waving' | 'jumping' | 'failed' | 'waiting' | 'running' | 'review';
|
|
500
|
+
|
|
501
|
+
export declare type ChatKitPetBoundsPadding = {
|
|
502
|
+
top: number;
|
|
503
|
+
right: number;
|
|
504
|
+
bottom: number;
|
|
505
|
+
left: number;
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
export declare type ChatKitPetCharacter = {
|
|
509
|
+
type: 'sprite-atlas';
|
|
510
|
+
src: string;
|
|
511
|
+
atlas?: ChatKitPetSpriteAtlas;
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
export declare type ChatKitPetFrameAnimation = {
|
|
515
|
+
row?: number;
|
|
516
|
+
frames?: number;
|
|
517
|
+
frameDurations?: readonly number[];
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
export declare type ChatKitPetOptions = {
|
|
521
|
+
enabled?: boolean;
|
|
522
|
+
character?: ChatKitPetCharacter;
|
|
523
|
+
position?: ChatKitPetPositionOptions;
|
|
524
|
+
behavior?: 'auto' | 'manual';
|
|
525
|
+
ariaLabel?: string;
|
|
526
|
+
imageRendering?: 'auto' | 'pixelated' | 'crisp-edges';
|
|
527
|
+
};
|
|
528
|
+
|
|
529
|
+
export declare type ChatKitPetPin = 'top-left' | 'top' | 'top-right' | 'left' | 'center' | 'right' | 'bottom-left' | 'bottom' | 'bottom-right';
|
|
530
|
+
|
|
531
|
+
export declare type ChatKitPetPositionOptions = {
|
|
532
|
+
pin?: ChatKitPetPin | null;
|
|
533
|
+
draggable?: boolean;
|
|
534
|
+
scale?: number;
|
|
535
|
+
persist?: boolean;
|
|
536
|
+
boundsPadding?: number | Partial<ChatKitPetBoundsPadding>;
|
|
537
|
+
zIndex?: number;
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
export declare type ChatKitPetSpriteAtlas = {
|
|
541
|
+
columns?: number;
|
|
542
|
+
rows?: number;
|
|
543
|
+
cellWidth?: number;
|
|
544
|
+
cellHeight?: number;
|
|
545
|
+
animations?: Partial<Record<ChatKitPetAnimationName, ChatKitPetFrameAnimation>>;
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
export declare type ChatKitPromptWorkflow = {
|
|
549
|
+
type: 'prompt_workflow';
|
|
550
|
+
name?: string;
|
|
551
|
+
label?: string;
|
|
552
|
+
description?: string;
|
|
553
|
+
tags?: string[];
|
|
554
|
+
};
|
|
555
|
+
|
|
467
556
|
export declare type ChatKitQuoteReference = ChatKitReferenceBase & {
|
|
468
557
|
type: 'quote';
|
|
469
558
|
messageId?: string;
|
|
@@ -512,6 +601,70 @@ export declare type ChatKitRequestOptions<TState = Record<string, any>, TContext
|
|
|
512
601
|
config?: TConfig;
|
|
513
602
|
};
|
|
514
603
|
|
|
604
|
+
export declare type ChatKitSlashCommand = {
|
|
605
|
+
/**
|
|
606
|
+
* Command name without the leading slash.
|
|
607
|
+
* Valid names use lowercase letters, digits, hyphens, and underscores.
|
|
608
|
+
*/
|
|
609
|
+
name: string;
|
|
610
|
+
label?: string;
|
|
611
|
+
description?: string;
|
|
612
|
+
icon?: string | Record<string, unknown>;
|
|
613
|
+
category?: string;
|
|
614
|
+
aliases?: string[];
|
|
615
|
+
argsHint?: string;
|
|
616
|
+
availability?: ChatKitSlashCommandAvailability;
|
|
617
|
+
kind?: ChatKitSlashCommandKind;
|
|
618
|
+
workflow?: ChatKitPromptWorkflow;
|
|
619
|
+
action: ChatKitSlashCommandAction;
|
|
620
|
+
source?: Record<string, unknown>;
|
|
621
|
+
meta?: Record<string, unknown>;
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
export declare type ChatKitSlashCommandAction = {
|
|
625
|
+
type: 'insert_text';
|
|
626
|
+
template: string;
|
|
627
|
+
runtimeCapabilities?: unknown;
|
|
628
|
+
} | {
|
|
629
|
+
type: 'insert_invocation';
|
|
630
|
+
template: string;
|
|
631
|
+
runtimeCapabilities?: unknown;
|
|
632
|
+
} | {
|
|
633
|
+
type: 'submit_prompt';
|
|
634
|
+
template: string;
|
|
635
|
+
runtimeCapabilities?: unknown;
|
|
636
|
+
} | {
|
|
637
|
+
type: 'client_action';
|
|
638
|
+
action: {
|
|
639
|
+
type: string;
|
|
640
|
+
payload?: Record<string, unknown>;
|
|
641
|
+
};
|
|
642
|
+
} | {
|
|
643
|
+
type: 'select_capability';
|
|
644
|
+
capability: ChatKitSlashCommandCapability;
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
export declare type ChatKitSlashCommandAvailability = {
|
|
648
|
+
disabled?: boolean;
|
|
649
|
+
reason?: string;
|
|
650
|
+
[key: string]: unknown;
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
export declare type ChatKitSlashCommandCapability = {
|
|
654
|
+
type: 'skill';
|
|
655
|
+
id: string;
|
|
656
|
+
} | {
|
|
657
|
+
type: 'plugin';
|
|
658
|
+
id: string;
|
|
659
|
+
} | {
|
|
660
|
+
type: 'subAgent';
|
|
661
|
+
id: string;
|
|
662
|
+
};
|
|
663
|
+
|
|
664
|
+
export declare type ChatKitSlashCommandExecutionType = 'insert_text' | 'insert_invocation' | 'submit_prompt' | 'client_action' | 'select_capability';
|
|
665
|
+
|
|
666
|
+
export declare type ChatKitSlashCommandKind = 'command' | 'prompt_workflow';
|
|
667
|
+
|
|
515
668
|
export declare type ChatKitTheme = {
|
|
516
669
|
/**
|
|
517
670
|
* The color scheme to use for the ChatKit UI.
|
|
@@ -629,6 +782,8 @@ export declare type Checkbox = {
|
|
|
629
782
|
required?: boolean;
|
|
630
783
|
};
|
|
631
784
|
|
|
785
|
+
export declare function clampPetPosition(position: PetPosition, size: PetSize, viewport: PetViewport, padding: ChatKitPetBoundsPadding): PetPosition;
|
|
786
|
+
|
|
632
787
|
export declare type ClientToolInterrupt<TRequest extends ClientToolRequest = ClientToolRequest> = LangGraphInterrupt<TRequest>;
|
|
633
788
|
|
|
634
789
|
export declare type ClientToolInterruptPayload<TRequest extends ClientToolRequest = ClientToolRequest> = LangGraphInterruptPayload<TRequest>;
|
|
@@ -717,6 +872,17 @@ export declare type DatePicker = {
|
|
|
717
872
|
disabled?: boolean;
|
|
718
873
|
};
|
|
719
874
|
|
|
875
|
+
export declare const DEFAULT_PET_BOUNDS_PADDING: ChatKitPetBoundsPadding;
|
|
876
|
+
|
|
877
|
+
export declare const DEFAULT_PET_SIZE: {
|
|
878
|
+
width: 192;
|
|
879
|
+
height: 208;
|
|
880
|
+
};
|
|
881
|
+
|
|
882
|
+
export declare const DEFAULT_PET_SPRITESHEET_URL = "/pets/boba/spritesheet.webp";
|
|
883
|
+
|
|
884
|
+
export declare const DEFAULT_PET_STORAGE_KEY = "chatkit:pet:position:v1";
|
|
885
|
+
|
|
720
886
|
export declare type Divider = {
|
|
721
887
|
type: 'Divider';
|
|
722
888
|
key?: string;
|
|
@@ -788,6 +954,8 @@ export declare type Form = {
|
|
|
788
954
|
direction?: 'row' | 'col';
|
|
789
955
|
} & BoxBaseProps;
|
|
790
956
|
|
|
957
|
+
export declare function getPinnedPetPosition(pin: ChatKitPetPin, size: PetSize, viewport: PetViewport, padding: ChatKitPetBoundsPadding): PetPosition;
|
|
958
|
+
|
|
791
959
|
export declare type GrayscaleOptions = {
|
|
792
960
|
hue: number;
|
|
793
961
|
tint: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
@@ -796,6 +964,61 @@ export declare type GrayscaleOptions = {
|
|
|
796
964
|
|
|
797
965
|
export declare type HeaderIcon = 'sidebar-left' | 'sidebar-right' | 'sidebar-open-left' | 'sidebar-open-right' | 'sidebar-open-left-alt' | 'sidebar-open-right-alt' | 'sidebar-floating-left' | 'sidebar-floating-right' | 'sidebar-floating-open-left' | 'sidebar-floating-open-right' | 'sidebar-collapse-left' | 'sidebar-collapse-right' | 'collapse-left' | 'collapse-right' | 'open-left' | 'open-right' | 'double-chevron-left' | 'double-chevron-right' | 'home' | 'home-alt' | 'back-small' | 'back-large' | 'expand-large' | 'collapse-large' | 'expand-small' | 'collapse-small' | 'star' | 'star-filled' | 'chat-temporary' | 'settings-cog' | 'grid' | 'dots-horizontal' | 'dots-vertical' | 'dots-horizontal-circle' | 'dots-vertical-circle' | 'menu' | 'menu-inverted' | 'hamburger' | 'compose' | 'light-mode' | 'dark-mode' | 'close';
|
|
798
966
|
|
|
967
|
+
export declare const HITL_DECISION_TYPES: readonly ["approve", "edit", "reject", "respond"];
|
|
968
|
+
|
|
969
|
+
export declare interface HITLAction {
|
|
970
|
+
name: string;
|
|
971
|
+
args: Record<string, unknown>;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
export declare interface HITLActionRequest extends HITLAction {
|
|
975
|
+
description?: string;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
export declare interface HITLApproveDecision {
|
|
979
|
+
type: 'approve';
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
export declare type HITLDecision = HITLApproveDecision | HITLEditDecision | HITLRejectDecision | HITLRespondDecision;
|
|
983
|
+
|
|
984
|
+
export declare type HITLDecisionType = (typeof HITL_DECISION_TYPES)[number];
|
|
985
|
+
|
|
986
|
+
export declare interface HITLEditDecision {
|
|
987
|
+
type: 'edit';
|
|
988
|
+
editedAction: HITLAction;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
export declare type HITLInterrupt<TRequest extends HITLRequest = HITLRequest> = LangGraphInterrupt<TRequest>;
|
|
992
|
+
|
|
993
|
+
export declare type HITLInterruptPayload<TRequest extends HITLRequest = HITLRequest> = LangGraphInterruptPayload<TRequest>;
|
|
994
|
+
|
|
995
|
+
export declare type HITLInterruptTask<TRequest extends HITLRequest = HITLRequest> = LangGraphInterruptTask<TRequest>;
|
|
996
|
+
|
|
997
|
+
export declare interface HITLRejectDecision {
|
|
998
|
+
type: 'reject';
|
|
999
|
+
message?: string;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
export declare interface HITLRequest {
|
|
1003
|
+
actionRequests: HITLActionRequest[];
|
|
1004
|
+
reviewConfigs: HITLReviewConfig[];
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
export declare interface HITLRespondDecision {
|
|
1008
|
+
type: 'respond';
|
|
1009
|
+
message: string;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
export declare interface HITLResponse {
|
|
1013
|
+
decisions: HITLDecision[];
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
export declare interface HITLReviewConfig {
|
|
1017
|
+
actionName: string;
|
|
1018
|
+
allowedDecisions: HITLDecisionType[];
|
|
1019
|
+
argsSchema?: Record<string, unknown>;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
799
1022
|
declare type HostedApiConfig = {
|
|
800
1023
|
/**
|
|
801
1024
|
* Function to get a client token or refresh if the current token is expired.
|
|
@@ -864,6 +1087,8 @@ export declare type Input = {
|
|
|
864
1087
|
*
|
|
865
1088
|
* Ordinary tool-call interrupts use `toolCalls`; ChatKit client-tool middleware
|
|
866
1089
|
* uses `clientToolCalls` so the UI can route those calls to the client.
|
|
1090
|
+
* Human-in-the-loop interrupts use `actionRequests` and `reviewConfigs` so
|
|
1091
|
+
* ChatKit can collect reviewer decisions and resume with `{ decisions }`.
|
|
867
1092
|
```json
|
|
868
1093
|
{
|
|
869
1094
|
"type": "event",
|
|
@@ -900,7 +1125,7 @@ export declare type Input = {
|
|
|
900
1125
|
export declare interface InterruptPayload extends LangGraphInterruptPayload<InterruptRequest> {
|
|
901
1126
|
}
|
|
902
1127
|
|
|
903
|
-
export declare type InterruptRequest = ToolCallRequest | ClientToolRequest;
|
|
1128
|
+
export declare type InterruptRequest = ToolCallRequest | ClientToolRequest | HITLRequest;
|
|
904
1129
|
|
|
905
1130
|
export declare function isClientToolInterrupt(value: unknown): value is ClientToolInterrupt;
|
|
906
1131
|
|
|
@@ -910,6 +1135,16 @@ export declare function isClientToolInterruptTask(value: unknown): value is Clie
|
|
|
910
1135
|
|
|
911
1136
|
export declare function isClientToolRequest(value: unknown): value is ClientToolRequest;
|
|
912
1137
|
|
|
1138
|
+
export declare function isHITLDecisionType(value: unknown): value is HITLDecisionType;
|
|
1139
|
+
|
|
1140
|
+
export declare function isHITLInterrupt(value: unknown): value is HITLInterrupt;
|
|
1141
|
+
|
|
1142
|
+
export declare function isHITLInterruptPayload(value: unknown): value is HITLInterruptPayload;
|
|
1143
|
+
|
|
1144
|
+
export declare function isHITLInterruptTask(value: unknown): value is HITLInterruptTask;
|
|
1145
|
+
|
|
1146
|
+
export declare function isHITLRequest(value: unknown): value is HITLRequest;
|
|
1147
|
+
|
|
913
1148
|
export declare function isInterruptRequest(value: unknown): value is InterruptRequest;
|
|
914
1149
|
|
|
915
1150
|
export declare function isLangGraphInterrupt(value: unknown): value is LangGraphInterrupt;
|
|
@@ -987,6 +1222,8 @@ export declare type Markdown = {
|
|
|
987
1222
|
streaming?: boolean;
|
|
988
1223
|
};
|
|
989
1224
|
|
|
1225
|
+
export declare function mergePetSpriteAtlas(override?: ChatKitPetSpriteAtlas): PetSpriteAtlasDefinition;
|
|
1226
|
+
|
|
990
1227
|
export declare type MessageContentImageUrl = {
|
|
991
1228
|
type: 'image_url';
|
|
992
1229
|
image_url: string | {
|
|
@@ -1013,6 +1250,105 @@ export declare type ModelOption = {
|
|
|
1013
1250
|
default?: boolean;
|
|
1014
1251
|
};
|
|
1015
1252
|
|
|
1253
|
+
export declare function normalizeBoundsPadding(value?: number | Partial<ChatKitPetBoundsPadding>): ChatKitPetBoundsPadding;
|
|
1254
|
+
|
|
1255
|
+
export declare type NormalizedPetOptions = {
|
|
1256
|
+
character: ChatKitPetCharacter;
|
|
1257
|
+
position: Required<Pick<NonNullable<ChatKitPetOptions['position']>, 'draggable' | 'persist' | 'scale' | 'zIndex'>> & Pick<NonNullable<ChatKitPetOptions['position']>, 'pin' | 'boundsPadding'>;
|
|
1258
|
+
behavior: NonNullable<ChatKitPetOptions['behavior']>;
|
|
1259
|
+
ariaLabel: string;
|
|
1260
|
+
imageRendering: NonNullable<ChatKitPetOptions['imageRendering']>;
|
|
1261
|
+
};
|
|
1262
|
+
|
|
1263
|
+
export declare function normalizeHITLRequest(value: unknown): HITLRequest | null;
|
|
1264
|
+
|
|
1265
|
+
export declare function normalizePetOptions(pet: ChatKitOptions['pet'] | null): NormalizedPetOptions | null;
|
|
1266
|
+
|
|
1267
|
+
export declare const PET_ANIMATION_NAMES: readonly ["idle", "running-right", "running-left", "waving", "jumping", "failed", "waiting", "running", "review"];
|
|
1268
|
+
|
|
1269
|
+
export declare type PetFrameAnimationDefinition = {
|
|
1270
|
+
row: number;
|
|
1271
|
+
frames: number;
|
|
1272
|
+
frameDurations: readonly number[];
|
|
1273
|
+
};
|
|
1274
|
+
|
|
1275
|
+
export declare type PetPosition = {
|
|
1276
|
+
x: number;
|
|
1277
|
+
y: number;
|
|
1278
|
+
};
|
|
1279
|
+
|
|
1280
|
+
export declare type PetSize = {
|
|
1281
|
+
width: number;
|
|
1282
|
+
height: number;
|
|
1283
|
+
};
|
|
1284
|
+
|
|
1285
|
+
export declare const petSpriteAtlas: {
|
|
1286
|
+
readonly columns: 8;
|
|
1287
|
+
readonly rows: 9;
|
|
1288
|
+
readonly cellWidth: 192;
|
|
1289
|
+
readonly cellHeight: 208;
|
|
1290
|
+
readonly animations: {
|
|
1291
|
+
readonly idle: {
|
|
1292
|
+
readonly row: 0;
|
|
1293
|
+
readonly frames: 6;
|
|
1294
|
+
readonly frameDurations: readonly [280, 110, 110, 140, 140, 320];
|
|
1295
|
+
};
|
|
1296
|
+
readonly 'running-right': {
|
|
1297
|
+
readonly row: 1;
|
|
1298
|
+
readonly frames: 8;
|
|
1299
|
+
readonly frameDurations: readonly [120, 120, 120, 120, 120, 120, 120, 220];
|
|
1300
|
+
};
|
|
1301
|
+
readonly 'running-left': {
|
|
1302
|
+
readonly row: 2;
|
|
1303
|
+
readonly frames: 8;
|
|
1304
|
+
readonly frameDurations: readonly [120, 120, 120, 120, 120, 120, 120, 220];
|
|
1305
|
+
};
|
|
1306
|
+
readonly waving: {
|
|
1307
|
+
readonly row: 3;
|
|
1308
|
+
readonly frames: 4;
|
|
1309
|
+
readonly frameDurations: readonly [140, 140, 140, 280];
|
|
1310
|
+
};
|
|
1311
|
+
readonly jumping: {
|
|
1312
|
+
readonly row: 4;
|
|
1313
|
+
readonly frames: 5;
|
|
1314
|
+
readonly frameDurations: readonly [140, 140, 140, 140, 280];
|
|
1315
|
+
};
|
|
1316
|
+
readonly failed: {
|
|
1317
|
+
readonly row: 5;
|
|
1318
|
+
readonly frames: 8;
|
|
1319
|
+
readonly frameDurations: readonly [140, 140, 140, 140, 140, 140, 140, 240];
|
|
1320
|
+
};
|
|
1321
|
+
readonly waiting: {
|
|
1322
|
+
readonly row: 6;
|
|
1323
|
+
readonly frames: 6;
|
|
1324
|
+
readonly frameDurations: readonly [150, 150, 150, 150, 150, 260];
|
|
1325
|
+
};
|
|
1326
|
+
readonly running: {
|
|
1327
|
+
readonly row: 7;
|
|
1328
|
+
readonly frames: 6;
|
|
1329
|
+
readonly frameDurations: readonly [120, 120, 120, 120, 120, 220];
|
|
1330
|
+
};
|
|
1331
|
+
readonly review: {
|
|
1332
|
+
readonly row: 8;
|
|
1333
|
+
readonly frames: 6;
|
|
1334
|
+
readonly frameDurations: readonly [150, 150, 150, 150, 150, 280];
|
|
1335
|
+
};
|
|
1336
|
+
};
|
|
1337
|
+
};
|
|
1338
|
+
|
|
1339
|
+
export declare type PetSpriteAtlasDefinition = {
|
|
1340
|
+
columns: number;
|
|
1341
|
+
rows: number;
|
|
1342
|
+
cellWidth: number;
|
|
1343
|
+
cellHeight: number;
|
|
1344
|
+
animations: Record<ChatKitPetAnimationName, PetFrameAnimationDefinition>;
|
|
1345
|
+
};
|
|
1346
|
+
|
|
1347
|
+
export declare type PetViewport = {
|
|
1348
|
+
width: number;
|
|
1349
|
+
height: number;
|
|
1350
|
+
};
|
|
1351
|
+
|
|
1016
1352
|
export declare type RadioGroup = {
|
|
1017
1353
|
type: 'RadioGroup';
|
|
1018
1354
|
key?: string;
|
|
@@ -1089,6 +1425,14 @@ export declare type RequestUserInputToolCall = ToolCall & {
|
|
|
1089
1425
|
|
|
1090
1426
|
export declare type RequestUserInputToolName = typeof REQUEST_USER_INPUT_TOOL_NAME;
|
|
1091
1427
|
|
|
1428
|
+
export declare type ResolvedPetCharacter = {
|
|
1429
|
+
kind: 'atlas';
|
|
1430
|
+
src: string;
|
|
1431
|
+
atlas: PetSpriteAtlasDefinition;
|
|
1432
|
+
};
|
|
1433
|
+
|
|
1434
|
+
export declare function resolvePetCharacter(character: ChatKitPetCharacter): ResolvedPetCharacter | null;
|
|
1435
|
+
|
|
1092
1436
|
export declare type Row = {
|
|
1093
1437
|
type: 'Row';
|
|
1094
1438
|
key?: string;
|
|
@@ -1104,6 +1448,9 @@ export declare type RuntimeCapabilitiesSelection = {
|
|
|
1104
1448
|
plugins: {
|
|
1105
1449
|
nodeKeys: string[];
|
|
1106
1450
|
};
|
|
1451
|
+
subAgents?: {
|
|
1452
|
+
nodeKeys: string[];
|
|
1453
|
+
};
|
|
1107
1454
|
};
|
|
1108
1455
|
|
|
1109
1456
|
export declare type Select = {
|
|
@@ -1204,9 +1551,7 @@ export declare type TChatRequest = {
|
|
|
1204
1551
|
/**
|
|
1205
1552
|
* Custom graph state
|
|
1206
1553
|
*/
|
|
1207
|
-
state?:
|
|
1208
|
-
[STATE_VARIABLE_HUMAN]: TChatRequestHuman;
|
|
1209
|
-
} & Record<string, any>;
|
|
1554
|
+
state?: TXpertChatState;
|
|
1210
1555
|
agentKey?: string;
|
|
1211
1556
|
projectId?: string;
|
|
1212
1557
|
conversationId?: string;
|
|
@@ -1234,6 +1579,7 @@ export declare type TChatRequestHuman = {
|
|
|
1234
1579
|
referenceComposition?: ChatKitReferenceCompositionMode;
|
|
1235
1580
|
planMode?: boolean;
|
|
1236
1581
|
runtimeCapabilities?: RuntimeCapabilitiesSelection;
|
|
1582
|
+
commandSource?: ChatKitCommandSource;
|
|
1237
1583
|
[key: string]: unknown;
|
|
1238
1584
|
};
|
|
1239
1585
|
|
|
@@ -1502,6 +1848,31 @@ export declare type TThreadContextUsageMetrics = {
|
|
|
1502
1848
|
currency?: string | null;
|
|
1503
1849
|
};
|
|
1504
1850
|
|
|
1851
|
+
export declare type TXpertChatInterruptPatch = Pick<TInterruptCommand, 'agentKey' | 'toolCalls' | 'update'>;
|
|
1852
|
+
|
|
1853
|
+
export declare type TXpertChatResumeDecision = {
|
|
1854
|
+
type: 'confirm' | 'reject';
|
|
1855
|
+
payload?: unknown;
|
|
1856
|
+
};
|
|
1857
|
+
|
|
1858
|
+
export declare type TXpertChatResumeRequest = {
|
|
1859
|
+
action: 'resume';
|
|
1860
|
+
conversationId: string;
|
|
1861
|
+
target: TXpertChatTarget;
|
|
1862
|
+
decision: TXpertChatResumeDecision;
|
|
1863
|
+
patch?: TXpertChatInterruptPatch;
|
|
1864
|
+
state?: TXpertChatState;
|
|
1865
|
+
};
|
|
1866
|
+
|
|
1867
|
+
export declare type TXpertChatState = {
|
|
1868
|
+
[STATE_VARIABLE_HUMAN]?: TChatRequestHuman;
|
|
1869
|
+
} & Record<string, any>;
|
|
1870
|
+
|
|
1871
|
+
export declare type TXpertChatTarget = {
|
|
1872
|
+
aiMessageId?: string;
|
|
1873
|
+
executionId?: string;
|
|
1874
|
+
};
|
|
1875
|
+
|
|
1505
1876
|
export declare type UserMessageContent = unknown;
|
|
1506
1877
|
|
|
1507
1878
|
export declare type WidgetComponent = TextComponent | Title | Caption | Badge | Markdown | Box | Row | Col | Divider | Icon | Image_2 | Button | Checkbox | Spacer | Select | DatePicker | Form | Input | Label | RadioGroup | Textarea | Transition;
|
package/dist/index.js
CHANGED
|
@@ -4,17 +4,113 @@ const REQUEST_USER_INPUT_TOOL_NAME = "request_user_input";
|
|
|
4
4
|
const REQUEST_USER_INPUT_RESULT_TYPE = "request_user_input_result";
|
|
5
5
|
const REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION = "plan_clarification";
|
|
6
6
|
const REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION = "implementation_confirmation";
|
|
7
|
+
const HITL_DECISION_TYPES = [
|
|
8
|
+
"approve",
|
|
9
|
+
"edit",
|
|
10
|
+
"reject",
|
|
11
|
+
"respond"
|
|
12
|
+
];
|
|
7
13
|
function isRecord(value) {
|
|
8
14
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
9
15
|
}
|
|
16
|
+
function readRecordField(value, ...keys) {
|
|
17
|
+
for (const key of keys) {
|
|
18
|
+
const field = value[key];
|
|
19
|
+
if (isRecord(field)) return field;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function readArrayField(value, ...keys) {
|
|
24
|
+
for (const key of keys) {
|
|
25
|
+
const field = value[key];
|
|
26
|
+
if (Array.isArray(field)) return field;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function readStringField(value, ...keys) {
|
|
31
|
+
for (const key of keys) {
|
|
32
|
+
const field = value[key];
|
|
33
|
+
if (typeof field === "string" && field.trim()) return field;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function isHITLDecisionType(value) {
|
|
38
|
+
return typeof value === "string" && HITL_DECISION_TYPES.includes(value);
|
|
39
|
+
}
|
|
40
|
+
function normalizeHITLActionRequest(value) {
|
|
41
|
+
if (!isRecord(value)) return null;
|
|
42
|
+
const name = readStringField(value, "name");
|
|
43
|
+
const args = readRecordField(value, "args", "arguments");
|
|
44
|
+
if (!name || !args) return null;
|
|
45
|
+
const description = typeof value.description === "string" ? value.description : void 0;
|
|
46
|
+
return {
|
|
47
|
+
name,
|
|
48
|
+
args,
|
|
49
|
+
...description !== void 0 ? { description } : {}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function normalizeHITLReviewConfig(value) {
|
|
53
|
+
if (!isRecord(value)) return null;
|
|
54
|
+
const actionName = readStringField(value, "actionName", "action_name");
|
|
55
|
+
const allowedDecisions = readArrayField(
|
|
56
|
+
value,
|
|
57
|
+
"allowedDecisions",
|
|
58
|
+
"allowed_decisions"
|
|
59
|
+
);
|
|
60
|
+
if (!actionName || !allowedDecisions) return null;
|
|
61
|
+
const normalizedDecisions = allowedDecisions.filter(isHITLDecisionType);
|
|
62
|
+
if (normalizedDecisions.length !== allowedDecisions.length) return null;
|
|
63
|
+
const argsSchema = readRecordField(value, "argsSchema", "args_schema");
|
|
64
|
+
return {
|
|
65
|
+
actionName,
|
|
66
|
+
allowedDecisions: normalizedDecisions,
|
|
67
|
+
...argsSchema ? { argsSchema } : {}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function normalizeHITLRequest(value) {
|
|
71
|
+
if (!isRecord(value)) return null;
|
|
72
|
+
const actionRequests = readArrayField(
|
|
73
|
+
value,
|
|
74
|
+
"actionRequests",
|
|
75
|
+
"action_requests"
|
|
76
|
+
);
|
|
77
|
+
const reviewConfigs = readArrayField(
|
|
78
|
+
value,
|
|
79
|
+
"reviewConfigs",
|
|
80
|
+
"review_configs"
|
|
81
|
+
);
|
|
82
|
+
if (!actionRequests || !reviewConfigs || actionRequests.length === 0 || reviewConfigs.length === 0) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const normalizedActionRequests = actionRequests.map(
|
|
86
|
+
normalizeHITLActionRequest
|
|
87
|
+
);
|
|
88
|
+
const normalizedReviewConfigs = reviewConfigs.map(
|
|
89
|
+
normalizeHITLReviewConfig
|
|
90
|
+
);
|
|
91
|
+
if (normalizedActionRequests.some((request) => request === null) || normalizedReviewConfigs.some((config) => config === null)) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
actionRequests: normalizedActionRequests,
|
|
96
|
+
reviewConfigs: normalizedReviewConfigs
|
|
97
|
+
};
|
|
98
|
+
}
|
|
10
99
|
function isClientToolRequest(value) {
|
|
11
100
|
return isRecord(value) && Array.isArray(value.clientToolCalls);
|
|
12
101
|
}
|
|
13
102
|
function isToolCallRequest(value) {
|
|
14
103
|
return isRecord(value) && Array.isArray(value.toolCalls);
|
|
15
104
|
}
|
|
105
|
+
function isHITLRequest(value) {
|
|
106
|
+
if (!isRecord(value)) return false;
|
|
107
|
+
if (!Array.isArray(value.actionRequests) || !Array.isArray(value.reviewConfigs)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return normalizeHITLRequest(value) !== null;
|
|
111
|
+
}
|
|
16
112
|
function isInterruptRequest(value) {
|
|
17
|
-
return isToolCallRequest(value) || isClientToolRequest(value);
|
|
113
|
+
return isToolCallRequest(value) || isClientToolRequest(value) || isHITLRequest(value);
|
|
18
114
|
}
|
|
19
115
|
function isLangGraphInterrupt(value) {
|
|
20
116
|
return isRecord(value) && typeof value.id === "string" && Object.prototype.hasOwnProperty.call(value, "value");
|
|
@@ -48,6 +144,15 @@ function isToolCallInterruptTask(value) {
|
|
|
48
144
|
function isToolCallInterruptPayload(value) {
|
|
49
145
|
return isLangGraphInterruptPayload(value) && value.tasks.every(isToolCallInterruptTask);
|
|
50
146
|
}
|
|
147
|
+
function isHITLInterrupt(value) {
|
|
148
|
+
return isLangGraphInterrupt(value) && isHITLRequest(value.value);
|
|
149
|
+
}
|
|
150
|
+
function isHITLInterruptTask(value) {
|
|
151
|
+
return isLangGraphInterruptTask(value) && value.interrupts.every(isHITLInterrupt);
|
|
152
|
+
}
|
|
153
|
+
function isHITLInterruptPayload(value) {
|
|
154
|
+
return isLangGraphInterruptPayload(value) && value.tasks.every(isHITLInterruptTask);
|
|
155
|
+
}
|
|
51
156
|
var ChatMessageTypeEnum = /* @__PURE__ */ ((ChatMessageTypeEnum2) => {
|
|
52
157
|
ChatMessageTypeEnum2["MESSAGE"] = "message";
|
|
53
158
|
ChatMessageTypeEnum2["EVENT"] = "event";
|
|
@@ -87,20 +192,283 @@ var ChatMessageStepCategory = /* @__PURE__ */ ((ChatMessageStepCategory2) => {
|
|
|
87
192
|
})(ChatMessageStepCategory || {});
|
|
88
193
|
const STATE_VARIABLE_HUMAN = "human";
|
|
89
194
|
const CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED = "follow_up_consumed";
|
|
195
|
+
const PET_ANIMATION_NAMES = [
|
|
196
|
+
"idle",
|
|
197
|
+
"running-right",
|
|
198
|
+
"running-left",
|
|
199
|
+
"waving",
|
|
200
|
+
"jumping",
|
|
201
|
+
"failed",
|
|
202
|
+
"waiting",
|
|
203
|
+
"running",
|
|
204
|
+
"review"
|
|
205
|
+
];
|
|
206
|
+
const petSpriteAtlas = {
|
|
207
|
+
columns: 8,
|
|
208
|
+
rows: 9,
|
|
209
|
+
cellWidth: 192,
|
|
210
|
+
cellHeight: 208,
|
|
211
|
+
animations: {
|
|
212
|
+
idle: {
|
|
213
|
+
row: 0,
|
|
214
|
+
frames: 6,
|
|
215
|
+
frameDurations: [280, 110, 110, 140, 140, 320]
|
|
216
|
+
},
|
|
217
|
+
"running-right": {
|
|
218
|
+
row: 1,
|
|
219
|
+
frames: 8,
|
|
220
|
+
frameDurations: [120, 120, 120, 120, 120, 120, 120, 220]
|
|
221
|
+
},
|
|
222
|
+
"running-left": {
|
|
223
|
+
row: 2,
|
|
224
|
+
frames: 8,
|
|
225
|
+
frameDurations: [120, 120, 120, 120, 120, 120, 120, 220]
|
|
226
|
+
},
|
|
227
|
+
waving: {
|
|
228
|
+
row: 3,
|
|
229
|
+
frames: 4,
|
|
230
|
+
frameDurations: [140, 140, 140, 280]
|
|
231
|
+
},
|
|
232
|
+
jumping: {
|
|
233
|
+
row: 4,
|
|
234
|
+
frames: 5,
|
|
235
|
+
frameDurations: [140, 140, 140, 140, 280]
|
|
236
|
+
},
|
|
237
|
+
failed: {
|
|
238
|
+
row: 5,
|
|
239
|
+
frames: 8,
|
|
240
|
+
frameDurations: [140, 140, 140, 140, 140, 140, 140, 240]
|
|
241
|
+
},
|
|
242
|
+
waiting: {
|
|
243
|
+
row: 6,
|
|
244
|
+
frames: 6,
|
|
245
|
+
frameDurations: [150, 150, 150, 150, 150, 260]
|
|
246
|
+
},
|
|
247
|
+
running: {
|
|
248
|
+
row: 7,
|
|
249
|
+
frames: 6,
|
|
250
|
+
frameDurations: [120, 120, 120, 120, 120, 220]
|
|
251
|
+
},
|
|
252
|
+
review: {
|
|
253
|
+
row: 8,
|
|
254
|
+
frames: 6,
|
|
255
|
+
frameDurations: [150, 150, 150, 150, 150, 280]
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const DEFAULT_PET_SIZE = {
|
|
260
|
+
width: petSpriteAtlas.cellWidth,
|
|
261
|
+
height: petSpriteAtlas.cellHeight
|
|
262
|
+
};
|
|
263
|
+
const DEFAULT_PET_BOUNDS_PADDING = {
|
|
264
|
+
top: 0,
|
|
265
|
+
right: 0,
|
|
266
|
+
bottom: 0,
|
|
267
|
+
left: 0
|
|
268
|
+
};
|
|
269
|
+
const DEFAULT_PET_STORAGE_KEY = "chatkit:pet:position:v1";
|
|
270
|
+
const DEFAULT_PET_SPRITESHEET_URL = "/pets/boba/spritesheet.webp";
|
|
271
|
+
const DEFAULT_PET_CHARACTER = {
|
|
272
|
+
type: "sprite-atlas",
|
|
273
|
+
src: DEFAULT_PET_SPRITESHEET_URL
|
|
274
|
+
};
|
|
275
|
+
const DEFAULT_POSITION = {
|
|
276
|
+
pin: "bottom-right",
|
|
277
|
+
draggable: true,
|
|
278
|
+
scale: 0.25,
|
|
279
|
+
persist: true,
|
|
280
|
+
zIndex: 40
|
|
281
|
+
};
|
|
282
|
+
function mergeFrameAnimation(base, override) {
|
|
283
|
+
return {
|
|
284
|
+
row: (override == null ? void 0 : override.row) ?? base.row,
|
|
285
|
+
frames: (override == null ? void 0 : override.frames) ?? base.frames,
|
|
286
|
+
frameDurations: (override == null ? void 0 : override.frameDurations) && override.frameDurations.length > 0 ? override.frameDurations : base.frameDurations
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
function mergePetSpriteAtlas(override) {
|
|
290
|
+
var _a;
|
|
291
|
+
const animations = {};
|
|
292
|
+
for (const name of PET_ANIMATION_NAMES) {
|
|
293
|
+
animations[name] = mergeFrameAnimation(
|
|
294
|
+
petSpriteAtlas.animations[name],
|
|
295
|
+
(_a = override == null ? void 0 : override.animations) == null ? void 0 : _a[name]
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
columns: (override == null ? void 0 : override.columns) ?? petSpriteAtlas.columns,
|
|
300
|
+
rows: (override == null ? void 0 : override.rows) ?? petSpriteAtlas.rows,
|
|
301
|
+
cellWidth: (override == null ? void 0 : override.cellWidth) ?? petSpriteAtlas.cellWidth,
|
|
302
|
+
cellHeight: (override == null ? void 0 : override.cellHeight) ?? petSpriteAtlas.cellHeight,
|
|
303
|
+
animations
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
function normalizeCharacter(character) {
|
|
307
|
+
if (!character) {
|
|
308
|
+
return DEFAULT_PET_CHARACTER;
|
|
309
|
+
}
|
|
310
|
+
if (character.src) {
|
|
311
|
+
return character;
|
|
312
|
+
}
|
|
313
|
+
return DEFAULT_PET_CHARACTER;
|
|
314
|
+
}
|
|
315
|
+
function normalizePetOptions(pet) {
|
|
316
|
+
if (!pet) {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
if (pet === true) {
|
|
320
|
+
return {
|
|
321
|
+
character: DEFAULT_PET_CHARACTER,
|
|
322
|
+
position: DEFAULT_POSITION,
|
|
323
|
+
behavior: "auto",
|
|
324
|
+
ariaLabel: "Animated pet",
|
|
325
|
+
imageRendering: "auto"
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
if (pet.enabled === false) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
character: normalizeCharacter(pet.character),
|
|
333
|
+
position: {
|
|
334
|
+
...DEFAULT_POSITION,
|
|
335
|
+
...pet.position
|
|
336
|
+
},
|
|
337
|
+
behavior: pet.behavior ?? "auto",
|
|
338
|
+
ariaLabel: pet.ariaLabel ?? "Animated pet",
|
|
339
|
+
imageRendering: pet.imageRendering ?? "auto"
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
function resolvePetCharacter(character) {
|
|
343
|
+
if (!character.src) {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
kind: "atlas",
|
|
348
|
+
src: character.src,
|
|
349
|
+
atlas: mergePetSpriteAtlas(character.atlas)
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function normalizeBoundsPadding(value) {
|
|
353
|
+
if (typeof value === "number") {
|
|
354
|
+
return {
|
|
355
|
+
top: value,
|
|
356
|
+
right: value,
|
|
357
|
+
bottom: value,
|
|
358
|
+
left: value
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
return {
|
|
362
|
+
top: (value == null ? void 0 : value.top) ?? DEFAULT_PET_BOUNDS_PADDING.top,
|
|
363
|
+
right: (value == null ? void 0 : value.right) ?? DEFAULT_PET_BOUNDS_PADDING.right,
|
|
364
|
+
bottom: (value == null ? void 0 : value.bottom) ?? DEFAULT_PET_BOUNDS_PADDING.bottom,
|
|
365
|
+
left: (value == null ? void 0 : value.left) ?? DEFAULT_PET_BOUNDS_PADDING.left
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
function clampPetPosition(position, size, viewport, padding) {
|
|
369
|
+
const minX = padding.left;
|
|
370
|
+
const minY = padding.top;
|
|
371
|
+
const maxX = Math.max(minX, viewport.width - size.width - padding.right);
|
|
372
|
+
const maxY = Math.max(minY, viewport.height - size.height - padding.bottom);
|
|
373
|
+
return {
|
|
374
|
+
x: Math.min(maxX, Math.max(minX, position.x)),
|
|
375
|
+
y: Math.min(maxY, Math.max(minY, position.y))
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
function getPinnedPetPosition(pin, size, viewport, padding) {
|
|
379
|
+
const horizontalCenter = (viewport.width - size.width) / 2;
|
|
380
|
+
const verticalCenter = (viewport.height - size.height) / 2;
|
|
381
|
+
const right = viewport.width - size.width - padding.right;
|
|
382
|
+
const bottom = viewport.height - size.height - padding.bottom;
|
|
383
|
+
switch (pin) {
|
|
384
|
+
case "top-left":
|
|
385
|
+
return clampPetPosition(
|
|
386
|
+
{ x: padding.left, y: padding.top },
|
|
387
|
+
size,
|
|
388
|
+
viewport,
|
|
389
|
+
padding
|
|
390
|
+
);
|
|
391
|
+
case "top":
|
|
392
|
+
return clampPetPosition(
|
|
393
|
+
{ x: horizontalCenter, y: padding.top },
|
|
394
|
+
size,
|
|
395
|
+
viewport,
|
|
396
|
+
padding
|
|
397
|
+
);
|
|
398
|
+
case "top-right":
|
|
399
|
+
return clampPetPosition(
|
|
400
|
+
{ x: right, y: padding.top },
|
|
401
|
+
size,
|
|
402
|
+
viewport,
|
|
403
|
+
padding
|
|
404
|
+
);
|
|
405
|
+
case "left":
|
|
406
|
+
return clampPetPosition(
|
|
407
|
+
{ x: padding.left, y: verticalCenter },
|
|
408
|
+
size,
|
|
409
|
+
viewport,
|
|
410
|
+
padding
|
|
411
|
+
);
|
|
412
|
+
case "center":
|
|
413
|
+
return clampPetPosition(
|
|
414
|
+
{ x: horizontalCenter, y: verticalCenter },
|
|
415
|
+
size,
|
|
416
|
+
viewport,
|
|
417
|
+
padding
|
|
418
|
+
);
|
|
419
|
+
case "right":
|
|
420
|
+
return clampPetPosition(
|
|
421
|
+
{ x: right, y: verticalCenter },
|
|
422
|
+
size,
|
|
423
|
+
viewport,
|
|
424
|
+
padding
|
|
425
|
+
);
|
|
426
|
+
case "bottom-left":
|
|
427
|
+
return clampPetPosition(
|
|
428
|
+
{ x: padding.left, y: bottom },
|
|
429
|
+
size,
|
|
430
|
+
viewport,
|
|
431
|
+
padding
|
|
432
|
+
);
|
|
433
|
+
case "bottom":
|
|
434
|
+
return clampPetPosition(
|
|
435
|
+
{ x: horizontalCenter, y: bottom },
|
|
436
|
+
size,
|
|
437
|
+
viewport,
|
|
438
|
+
padding
|
|
439
|
+
);
|
|
440
|
+
case "bottom-right":
|
|
441
|
+
default:
|
|
442
|
+
return clampPetPosition({ x: right, y: bottom }, size, viewport, padding);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
90
445
|
export {
|
|
91
446
|
CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED,
|
|
92
447
|
ChatMessageEventTypeEnum,
|
|
93
448
|
ChatMessageStepCategory,
|
|
94
449
|
ChatMessageTypeEnum,
|
|
450
|
+
DEFAULT_PET_BOUNDS_PADDING,
|
|
451
|
+
DEFAULT_PET_SIZE,
|
|
452
|
+
DEFAULT_PET_SPRITESHEET_URL,
|
|
453
|
+
DEFAULT_PET_STORAGE_KEY,
|
|
454
|
+
HITL_DECISION_TYPES,
|
|
455
|
+
PET_ANIMATION_NAMES,
|
|
95
456
|
REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION,
|
|
96
457
|
REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION,
|
|
97
458
|
REQUEST_USER_INPUT_RESULT_TYPE,
|
|
98
459
|
REQUEST_USER_INPUT_TOOL_NAME,
|
|
99
460
|
STATE_VARIABLE_HUMAN,
|
|
461
|
+
clampPetPosition,
|
|
462
|
+
getPinnedPetPosition,
|
|
100
463
|
isClientToolInterrupt,
|
|
101
464
|
isClientToolInterruptPayload,
|
|
102
465
|
isClientToolInterruptTask,
|
|
103
466
|
isClientToolRequest,
|
|
467
|
+
isHITLDecisionType,
|
|
468
|
+
isHITLInterrupt,
|
|
469
|
+
isHITLInterruptPayload,
|
|
470
|
+
isHITLInterruptTask,
|
|
471
|
+
isHITLRequest,
|
|
104
472
|
isInterruptRequest,
|
|
105
473
|
isLangGraphInterrupt,
|
|
106
474
|
isLangGraphInterruptPayload,
|
|
@@ -108,6 +476,12 @@ export {
|
|
|
108
476
|
isToolCallInterrupt,
|
|
109
477
|
isToolCallInterruptPayload,
|
|
110
478
|
isToolCallInterruptTask,
|
|
111
|
-
isToolCallRequest
|
|
479
|
+
isToolCallRequest,
|
|
480
|
+
mergePetSpriteAtlas,
|
|
481
|
+
normalizeBoundsPadding,
|
|
482
|
+
normalizeHITLRequest,
|
|
483
|
+
normalizePetOptions,
|
|
484
|
+
petSpriteAtlas,
|
|
485
|
+
resolvePetCharacter
|
|
112
486
|
};
|
|
113
487
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/interrupt.ts","../src/message.ts"],"sourcesContent":["import { type ToolCall } from '@langchain/core/messages/tool';\n\nexport const REQUEST_USER_INPUT_TOOL_NAME = 'request_user_input';\nexport type RequestUserInputToolName = typeof REQUEST_USER_INPUT_TOOL_NAME;\nexport const REQUEST_USER_INPUT_RESULT_TYPE = 'request_user_input_result';\nexport type RequestUserInputResultType = typeof REQUEST_USER_INPUT_RESULT_TYPE;\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION =\n 'plan_clarification';\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION =\n 'implementation_confirmation';\nexport type RequestUserInputResultPurpose =\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION;\n\nexport interface RequestUserInputOption {\n label: string;\n description: string;\n}\n\nexport interface RequestUserInputQuestion {\n id: string;\n header: string;\n question: string;\n options: RequestUserInputOption[];\n}\n\nexport interface RequestUserInputParams {\n questions: RequestUserInputQuestion[];\n}\n\nexport type RequestUserInputToolArgs = RequestUserInputParams;\n\nexport type RequestUserInputAnswerType = 'option' | 'other';\n\nexport interface RequestUserInputAnswer {\n id: string;\n question: string;\n value: string;\n type: RequestUserInputAnswerType;\n label?: string;\n description?: string;\n}\n\nexport interface RequestUserInputResult {\n type: RequestUserInputResultType;\n purpose: RequestUserInputResultPurpose;\n answers: RequestUserInputAnswer[];\n}\n\nexport type RequestUserInputToolCall = ToolCall & {\n name: RequestUserInputToolName;\n args: RequestUserInputToolArgs;\n id: string;\n type?: 'tool_call';\n};\n\nexport interface ClientToolRequest {\n clientToolCalls: ToolCall[];\n}\n\nexport interface ToolCallRequest {\n toolCalls: ToolCall[];\n}\n\nexport type InterruptRequest = ToolCallRequest | ClientToolRequest;\n\nexport interface LangGraphInterrupt<TValue = unknown> {\n id: string;\n value: TValue;\n when?: string;\n resumable?: boolean;\n ns?: string[];\n}\n\nexport interface LangGraphInterruptTask<TValue = unknown> {\n id: string;\n name: string;\n path: Array<string | number>;\n interrupts: Array<LangGraphInterrupt<TValue>>;\n}\n\nexport interface LangGraphInterruptPayload<TValue = unknown> {\n tasks: Array<LangGraphInterruptTask<TValue>>;\n}\n\nexport type ClientToolInterrupt<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ClientToolInterruptTask<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ClientToolInterruptPayload<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\nexport type ToolCallInterrupt<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ToolCallInterruptTask<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ToolCallInterruptPayload<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\n/**\n * When an interrupt occurs during task execution, the system generates an InterruptPayload.\n *\n * Ordinary tool-call interrupts use `toolCalls`; ChatKit client-tool middleware\n * uses `clientToolCalls` so the UI can route those calls to the client.\n```json\n{\n \"type\": \"event\",\n \"event\": \"on_interrupt\",\n \"data\": {\n \"tasks\": [\n {\n \"id\": \"9c4d2ac5-8808-5b6f-855c-4d48aa3d77a7\",\n \"name\": \"Middleware_wPzR2bIXqE_after_model\",\n \"path\": [\"__pregel_pull\", \"Middleware_wPzR2bIXqE_after_model\"],\n \"interrupts\": [\n {\n \"id\": \"b42f7887d65e57ed11cf08b8927763db\",\n \"value\": {\n \"toolCalls\": [\n {\n \"name\": \"getUserStation\",\n \"args\": {\n \"input\": \"Query the site selected by the user\"\n },\n \"id\": \"call_00_swcaUjIaACXOHHaZyNmQB3Vm\",\n \"type\": \"tool_call\"\n }\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n */\nexport interface InterruptPayload extends LangGraphInterruptPayload<InterruptRequest> {}\n\nexport interface ClientToolMessageInput {\n content: unknown;\n name?: string;\n tool_call_id?: string;\n status?: 'success' | 'error';\n artifact?: unknown;\n}\n\nexport interface ClientToolResponse {\n toolMessages: ClientToolMessageInput[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function isClientToolRequest(\n value: unknown,\n): value is ClientToolRequest {\n return isRecord(value) && Array.isArray(value.clientToolCalls);\n}\n\nexport function isToolCallRequest(value: unknown): value is ToolCallRequest {\n return isRecord(value) && Array.isArray(value.toolCalls);\n}\n\nexport function isInterruptRequest(value: unknown): value is InterruptRequest {\n return isToolCallRequest(value) || isClientToolRequest(value);\n}\n\nexport function isLangGraphInterrupt(\n value: unknown,\n): value is LangGraphInterrupt {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n Object.prototype.hasOwnProperty.call(value, 'value')\n );\n}\n\nexport function isLangGraphInterruptTask(\n value: unknown,\n): value is LangGraphInterruptTask {\n if (\n !isRecord(value) ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string' ||\n !Array.isArray(value.path) ||\n !Array.isArray(value.interrupts)\n ) {\n return false;\n }\n\n return (\n value.path.every(\n (item) => typeof item === 'string' || typeof item === 'number',\n ) && value.interrupts.every(isLangGraphInterrupt)\n );\n}\n\nexport function isLangGraphInterruptPayload(\n value: unknown,\n): value is LangGraphInterruptPayload {\n return (\n isRecord(value) &&\n Array.isArray(value.tasks) &&\n value.tasks.every(isLangGraphInterruptTask)\n );\n}\n\nexport function isClientToolInterrupt(\n value: unknown,\n): value is ClientToolInterrupt {\n return isLangGraphInterrupt(value) && isClientToolRequest(value.value);\n}\n\nexport function isClientToolInterruptTask(\n value: unknown,\n): value is ClientToolInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isClientToolInterrupt)\n );\n}\n\nexport function isClientToolInterruptPayload(\n value: unknown,\n): value is ClientToolInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isClientToolInterruptTask)\n );\n}\n\nexport function isToolCallInterrupt(\n value: unknown,\n): value is ToolCallInterrupt {\n return isLangGraphInterrupt(value) && isToolCallRequest(value.value);\n}\n\nexport function isToolCallInterruptTask(\n value: unknown,\n): value is ToolCallInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isToolCallInterrupt)\n );\n}\n\nexport function isToolCallInterruptPayload(\n value: unknown,\n): value is ToolCallInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isToolCallInterruptTask)\n );\n}\n","import type { ToolCall } from '@langchain/core/messages/tool';\nimport { Types } from '@a2ui/lit/0.8';\nimport type { FollowUpBehavior } from './options';\n\nexport enum ChatMessageTypeEnum {\n // LOG = 'log',\n MESSAGE = 'message',\n EVENT = 'event',\n}\n\n/**\n * https://js.langchain.com/docs/how_to/streaming/#event-reference\n */\nexport enum ChatMessageEventTypeEnum {\n ON_CONVERSATION_START = 'on_conversation_start',\n ON_CONVERSATION_END = 'on_conversation_end',\n ON_MESSAGE_START = 'on_message_start',\n ON_MESSAGE_END = 'on_message_end',\n ON_TOOL_START = 'on_tool_start',\n ON_TOOL_END = 'on_tool_end',\n ON_TOOL_ERROR = 'on_tool_error',\n /**\n * Step message in tool call\n */\n ON_TOOL_MESSAGE = 'on_tool_message',\n ON_AGENT_START = 'on_agent_start',\n ON_AGENT_END = 'on_agent_end',\n ON_RETRIEVER_START = 'on_retriever_start',\n ON_RETRIEVER_END = 'on_retriever_end',\n ON_RETRIEVER_ERROR = 'on_retriever_error',\n ON_INTERRUPT = 'on_interrupt',\n ON_ERROR = 'on_error',\n ON_CHAT_EVENT = 'on_chat_event',\n\n ON_CLIENT_EFFECT = 'on_client_effect',\n}\n\n/**\n * Encapsulate multi-agent message events\n */\nexport interface ChatEventEnvelope<T = unknown> {\n type: ChatMessageTypeEnum;\n event?: ChatMessageEventTypeEnum;\n tags: string[];\n data: T;\n}\n\n/**\n * Category of step message: determines the display components of computer use\n */\nexport enum ChatMessageStepCategory {\n /**\n * List of items: urls, files, etc.\n */\n List = 'list',\n /**\n * Websearch results\n */\n WebSearch = 'web_search',\n /**\n * Files list\n */\n Files = 'files',\n /**\n * View a file\n */\n File = 'file',\n /**\n * Program Execution\n */\n Program = 'program',\n /**\n * Iframe\n */\n Iframe = 'iframe',\n\n Memory = 'memory',\n\n Tasks = 'tasks',\n\n /**\n * Knowledges (knowledge base retriever results)\n */\n Knowledges = 'knowledges',\n}\n\n/**\n * Step message type, in canvas and ai message.\n */\nexport type TChatMessageStep<T = any> = TMessageComponent<\n TMessageComponentStep<T>\n>;\n\nexport type ImageDetail = 'auto' | 'low' | 'high';\nexport type MessageContentText = {\n type: 'text';\n text: string;\n};\nexport type MessageContentImageUrl = {\n type: 'image_url';\n image_url:\n | string\n | {\n url: string;\n detail?: ImageDetail;\n };\n};\n\n/**\n * Similar to {@link MessageContentText} | {@link MessageContentImageUrl}, which together form {@link MessageContentComplex}\n */\nexport type TMessageContentComponent<T extends object = object> = {\n id: string;\n type: 'component';\n data: TMessageComponent<T>;\n xpertName?: string;\n agentKey?: string;\n};\n\n/**\n * Defines the data type of the sub-message of `component` type in the message `content` {@link MessageContentComplex}\n */\nexport type TMessageComponent<T extends object = object> = T & {\n id?: string;\n category: 'Dashboard' | 'Computer' | 'Tool';\n type?: string;\n created_date?: Date | string;\n};\n\nexport type TMessageComponentWidgetItem = {\n name: string;\n config: Types.Surface;\n values?: Record<string, unknown>;\n};\n\nexport type TMessageComponentWidgetData = {\n type: 'Widget';\n mode?: string;\n widgets: TMessageComponentWidgetItem[];\n executionId?: string;\n};\n\nexport type TMessageComponentWidget =\n TMessageComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentWidget =\n TMessageContentComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentText = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'text';\n text: string;\n};\nexport type TMessageContentMemory = {\n id?: string;\n agentKey?: string;\n type: 'memory';\n data: any[];\n};\nexport type TMessageContentReasoning = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'reasoning';\n text: string;\n};\n/**\n * Enhance {@link MessageContentComplex} in Langchain.js\n */\nexport type TMessageContentComplex = (\n | TMessageContentText\n | TMessageContentReasoning\n | MessageContentImageUrl\n | TMessageContentComponent\n | TMessageContentMemory\n | (Record<string, any> & {\n type?: 'text' | 'image_url' | string;\n })\n | (Record<string, any> & {\n type?: never;\n })\n) & {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n/**\n * Enhance {@link MessageContent} in Langchain.js\n *\n * @deprecated use {@link TMessageItems} instead\n */\nexport type TMessageContent = string | TMessageContentComplex[];\n\nexport type TMessageComponentIframe = {\n type: 'iframe';\n title: string;\n url?: string;\n data?: {\n url?: string;\n };\n};\n\nexport type TMessageComponentStep<T = unknown> = {\n type: ChatMessageStepCategory;\n toolset: string;\n toolset_id: string;\n tool?: string;\n title: string;\n message: string;\n status: 'success' | 'fail' | 'running';\n created_date: Date | string;\n end_date: Date | string;\n error?: string;\n data?: T;\n input?: any;\n output?: unknown;\n artifact?: any;\n};\n\n/**\n * Data type for chat event message\n */\nexport type TChatEventMessage = {\n type?: string;\n title?: string;\n message?: string;\n status?: 'success' | 'fail' | 'running';\n created_date?: Date | string;\n end_date?: Date | string;\n error?: string;\n};\n\nexport interface ChatkitMessage {\n status?: string;\n content: TMessageItems | string;\n reasoning?: TMessageContentReasoning[];\n type: 'user' | 'assistant' | 'system' | 'tool' | 'event';\n id: string;\n followUpMode?: FollowUpBehavior;\n followUpStatus?: 'pending' | 'consumed' | 'canceled';\n targetExecutionId?: string | null;\n visibleAt?: string | Date | null;\n}\n\nexport type TMessageItems = TMessageContentComplex[];\n\nexport type ChatKitReferenceBase = {\n id?: string;\n label?: string;\n text: string;\n};\n\nexport type ChatKitCodeReference = ChatKitReferenceBase & {\n type: 'code';\n path: string;\n startLine: number;\n endLine: number;\n language?: string;\n taskId?: string;\n};\n\nexport type ChatKitQuoteReference = ChatKitReferenceBase & {\n type: 'quote';\n messageId?: string;\n source?: string;\n};\n\nexport type ChatKitImageReference = ChatKitReferenceBase & {\n type: 'image';\n fileId?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n size?: number;\n width?: number;\n height?: number;\n};\n\nexport type ChatKitReference =\n | ChatKitCodeReference\n | ChatKitQuoteReference\n | ChatKitImageReference;\n\nexport type ChatKitReferenceCompositionMode = 'compose' | 'preserve';\n\nexport type RuntimeCapabilitiesSelection = {\n mode: 'allowlist';\n skills: {\n workspaceId?: string;\n ids: string[];\n };\n plugins: {\n nodeKeys: string[];\n };\n};\n\nexport const STATE_VARIABLE_HUMAN = 'human';\n\n/**\n * Human input message, include parameters and attachments\n */\nexport type TChatRequestHuman = {\n input?: string;\n files?: Partial<File>[];\n references?: ChatKitReference[];\n referenceComposition?: ChatKitReferenceCompositionMode;\n planMode?: boolean;\n runtimeCapabilities?: RuntimeCapabilitiesSelection;\n [key: string]: unknown;\n};\n\n/**\n * Command to resume with streaming after human decision\n */\nexport type TInterruptCommand = {\n resume?: any;\n update?: any;\n toolCalls?: ToolCall[];\n agentKey?: string;\n};\n\nexport type TChatRequest = {\n /**\n * The human input, include parameters\n */\n input: TChatRequestHuman;\n /**\n * Custom graph state\n */\n state?: { [STATE_VARIABLE_HUMAN]: TChatRequestHuman } & Record<string, any>;\n agentKey?: string;\n projectId?: string;\n conversationId?: string;\n environmentId?: string;\n id?: string;\n executionId?: string;\n confirm?: boolean;\n command?: TInterruptCommand;\n retry?: boolean;\n followUpMode?: FollowUpBehavior;\n /**\n * PRO: Sandbox Environment Id\n * PRO: @description Sandbox environment ID to force using the specified container.\n */\n sandboxEnvironmentId?: string;\n};\n\n/**\n * Data type for client effect message\n */\nexport type TClientEeffectMessage = {\n name: string;\n args: Record<string, any>;\n tool_call_id?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n// Thread context usage\nexport type TThreadContextUsageMetrics = {\n contextTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n embedTokens?: number;\n totalPrice?: number;\n currency?: string | null;\n};\n\nexport type TThreadContextUsageEvent = {\n type: 'thread_context_usage';\n threadId: string;\n runId: string | null;\n agentKey: string;\n updatedAt: string;\n usage: TThreadContextUsageMetrics;\n};\n\nexport const CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED = 'follow_up_consumed' as const;\n\nexport type TFollowUpConsumedEvent = TChatEventMessage & {\n type: typeof CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED;\n mode: 'queue' | 'steer';\n messageIds: string[];\n clientMessageIds?: string[];\n executionId?: string | null;\n visibleAt?: string | null;\n};\n"],"names":["ChatMessageTypeEnum","ChatMessageEventTypeEnum","ChatMessageStepCategory"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/interrupt.ts","../src/message.ts","../src/pet.ts"],"sourcesContent":["import { type ToolCall } from '@langchain/core/messages/tool';\n\nexport const REQUEST_USER_INPUT_TOOL_NAME = 'request_user_input';\nexport type RequestUserInputToolName = typeof REQUEST_USER_INPUT_TOOL_NAME;\nexport const REQUEST_USER_INPUT_RESULT_TYPE = 'request_user_input_result';\nexport type RequestUserInputResultType = typeof REQUEST_USER_INPUT_RESULT_TYPE;\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION =\n 'plan_clarification';\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION =\n 'implementation_confirmation';\nexport type RequestUserInputResultPurpose =\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION;\n\nexport interface RequestUserInputOption {\n label: string;\n description: string;\n}\n\nexport interface RequestUserInputQuestion {\n id: string;\n header: string;\n question: string;\n options: RequestUserInputOption[];\n}\n\nexport interface RequestUserInputParams {\n questions: RequestUserInputQuestion[];\n}\n\nexport type RequestUserInputToolArgs = RequestUserInputParams;\n\nexport type RequestUserInputAnswerType = 'option' | 'other';\n\nexport interface RequestUserInputAnswer {\n id: string;\n question: string;\n value: string;\n type: RequestUserInputAnswerType;\n label?: string;\n description?: string;\n}\n\nexport interface RequestUserInputResult {\n type: RequestUserInputResultType;\n purpose: RequestUserInputResultPurpose;\n answers: RequestUserInputAnswer[];\n}\n\nexport type RequestUserInputToolCall = ToolCall & {\n name: RequestUserInputToolName;\n args: RequestUserInputToolArgs;\n id: string;\n type?: 'tool_call';\n};\n\nexport interface ClientToolRequest {\n clientToolCalls: ToolCall[];\n}\n\nexport interface ToolCallRequest {\n toolCalls: ToolCall[];\n}\n\nexport const HITL_DECISION_TYPES = [\n 'approve',\n 'edit',\n 'reject',\n 'respond',\n] as const;\n\nexport type HITLDecisionType = (typeof HITL_DECISION_TYPES)[number];\n\nexport interface HITLAction {\n name: string;\n args: Record<string, unknown>;\n}\n\nexport interface HITLActionRequest extends HITLAction {\n description?: string;\n}\n\nexport interface HITLReviewConfig {\n actionName: string;\n allowedDecisions: HITLDecisionType[];\n argsSchema?: Record<string, unknown>;\n}\n\nexport interface HITLRequest {\n actionRequests: HITLActionRequest[];\n reviewConfigs: HITLReviewConfig[];\n}\n\nexport interface HITLApproveDecision {\n type: 'approve';\n}\n\nexport interface HITLEditDecision {\n type: 'edit';\n editedAction: HITLAction;\n}\n\nexport interface HITLRejectDecision {\n type: 'reject';\n message?: string;\n}\n\nexport interface HITLRespondDecision {\n type: 'respond';\n message: string;\n}\n\nexport type HITLDecision =\n | HITLApproveDecision\n | HITLEditDecision\n | HITLRejectDecision\n | HITLRespondDecision;\n\nexport interface HITLResponse {\n decisions: HITLDecision[];\n}\n\nexport type InterruptRequest =\n | ToolCallRequest\n | ClientToolRequest\n | HITLRequest;\n\nexport interface LangGraphInterrupt<TValue = unknown> {\n id: string;\n value: TValue;\n when?: string;\n resumable?: boolean;\n ns?: string[];\n}\n\nexport interface LangGraphInterruptTask<TValue = unknown> {\n id: string;\n name: string;\n path: Array<string | number>;\n interrupts: Array<LangGraphInterrupt<TValue>>;\n}\n\nexport interface LangGraphInterruptPayload<TValue = unknown> {\n tasks: Array<LangGraphInterruptTask<TValue>>;\n}\n\nexport type ClientToolInterrupt<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ClientToolInterruptTask<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ClientToolInterruptPayload<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\nexport type ToolCallInterrupt<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ToolCallInterruptTask<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ToolCallInterruptPayload<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\nexport type HITLInterrupt<TRequest extends HITLRequest = HITLRequest> =\n LangGraphInterrupt<TRequest>;\n\nexport type HITLInterruptTask<TRequest extends HITLRequest = HITLRequest> =\n LangGraphInterruptTask<TRequest>;\n\nexport type HITLInterruptPayload<TRequest extends HITLRequest = HITLRequest> =\n LangGraphInterruptPayload<TRequest>;\n\n/**\n * When an interrupt occurs during task execution, the system generates an InterruptPayload.\n *\n * Ordinary tool-call interrupts use `toolCalls`; ChatKit client-tool middleware\n * uses `clientToolCalls` so the UI can route those calls to the client.\n * Human-in-the-loop interrupts use `actionRequests` and `reviewConfigs` so\n * ChatKit can collect reviewer decisions and resume with `{ decisions }`.\n```json\n{\n \"type\": \"event\",\n \"event\": \"on_interrupt\",\n \"data\": {\n \"tasks\": [\n {\n \"id\": \"9c4d2ac5-8808-5b6f-855c-4d48aa3d77a7\",\n \"name\": \"Middleware_wPzR2bIXqE_after_model\",\n \"path\": [\"__pregel_pull\", \"Middleware_wPzR2bIXqE_after_model\"],\n \"interrupts\": [\n {\n \"id\": \"b42f7887d65e57ed11cf08b8927763db\",\n \"value\": {\n \"toolCalls\": [\n {\n \"name\": \"getUserStation\",\n \"args\": {\n \"input\": \"Query the site selected by the user\"\n },\n \"id\": \"call_00_swcaUjIaACXOHHaZyNmQB3Vm\",\n \"type\": \"tool_call\"\n }\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n */\nexport interface InterruptPayload extends LangGraphInterruptPayload<InterruptRequest> {}\n\nexport interface ClientToolMessageInput {\n content: unknown;\n name?: string;\n tool_call_id?: string;\n status?: 'success' | 'error';\n artifact?: unknown;\n}\n\nexport interface ClientToolResponse {\n toolMessages: ClientToolMessageInput[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction readRecordField(\n value: Record<string, unknown>,\n ...keys: string[]\n): Record<string, unknown> | null {\n for (const key of keys) {\n const field = value[key];\n if (isRecord(field)) return field;\n }\n\n return null;\n}\n\nfunction readArrayField(value: Record<string, unknown>, ...keys: string[]) {\n for (const key of keys) {\n const field = value[key];\n if (Array.isArray(field)) return field;\n }\n\n return null;\n}\n\nfunction readStringField(\n value: Record<string, unknown>,\n ...keys: string[]\n): string | null {\n for (const key of keys) {\n const field = value[key];\n if (typeof field === 'string' && field.trim()) return field;\n }\n\n return null;\n}\n\nexport function isHITLDecisionType(\n value: unknown,\n): value is HITLDecisionType {\n return (\n typeof value === 'string' &&\n (HITL_DECISION_TYPES as readonly string[]).includes(value)\n );\n}\n\nfunction normalizeHITLActionRequest(\n value: unknown,\n): HITLActionRequest | null {\n if (!isRecord(value)) return null;\n\n const name = readStringField(value, 'name');\n const args = readRecordField(value, 'args', 'arguments');\n if (!name || !args) return null;\n\n const description =\n typeof value.description === 'string' ? value.description : undefined;\n\n return {\n name,\n args,\n ...(description !== undefined ? { description } : {}),\n };\n}\n\nfunction normalizeHITLReviewConfig(\n value: unknown,\n): HITLReviewConfig | null {\n if (!isRecord(value)) return null;\n\n const actionName = readStringField(value, 'actionName', 'action_name');\n const allowedDecisions = readArrayField(\n value,\n 'allowedDecisions',\n 'allowed_decisions',\n );\n if (!actionName || !allowedDecisions) return null;\n\n const normalizedDecisions = allowedDecisions.filter(isHITLDecisionType);\n if (normalizedDecisions.length !== allowedDecisions.length) return null;\n\n const argsSchema = readRecordField(value, 'argsSchema', 'args_schema');\n\n return {\n actionName,\n allowedDecisions: normalizedDecisions,\n ...(argsSchema ? { argsSchema } : {}),\n };\n}\n\nexport function normalizeHITLRequest(value: unknown): HITLRequest | null {\n if (!isRecord(value)) return null;\n\n const actionRequests = readArrayField(\n value,\n 'actionRequests',\n 'action_requests',\n );\n const reviewConfigs = readArrayField(\n value,\n 'reviewConfigs',\n 'review_configs',\n );\n if (\n !actionRequests ||\n !reviewConfigs ||\n actionRequests.length === 0 ||\n reviewConfigs.length === 0\n ) {\n return null;\n }\n\n const normalizedActionRequests = actionRequests.map(\n normalizeHITLActionRequest,\n );\n const normalizedReviewConfigs = reviewConfigs.map(\n normalizeHITLReviewConfig,\n );\n if (\n normalizedActionRequests.some((request) => request === null) ||\n normalizedReviewConfigs.some((config) => config === null)\n ) {\n return null;\n }\n\n return {\n actionRequests: normalizedActionRequests as HITLActionRequest[],\n reviewConfigs: normalizedReviewConfigs as HITLReviewConfig[],\n };\n}\n\nexport function isClientToolRequest(\n value: unknown,\n): value is ClientToolRequest {\n return isRecord(value) && Array.isArray(value.clientToolCalls);\n}\n\nexport function isToolCallRequest(value: unknown): value is ToolCallRequest {\n return isRecord(value) && Array.isArray(value.toolCalls);\n}\n\nexport function isHITLRequest(value: unknown): value is HITLRequest {\n if (!isRecord(value)) return false;\n if (\n !Array.isArray(value.actionRequests) ||\n !Array.isArray(value.reviewConfigs)\n ) {\n return false;\n }\n\n return normalizeHITLRequest(value) !== null;\n}\n\nexport function isInterruptRequest(value: unknown): value is InterruptRequest {\n return (\n isToolCallRequest(value) ||\n isClientToolRequest(value) ||\n isHITLRequest(value)\n );\n}\n\nexport function isLangGraphInterrupt(\n value: unknown,\n): value is LangGraphInterrupt {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n Object.prototype.hasOwnProperty.call(value, 'value')\n );\n}\n\nexport function isLangGraphInterruptTask(\n value: unknown,\n): value is LangGraphInterruptTask {\n if (\n !isRecord(value) ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string' ||\n !Array.isArray(value.path) ||\n !Array.isArray(value.interrupts)\n ) {\n return false;\n }\n\n return (\n value.path.every(\n (item) => typeof item === 'string' || typeof item === 'number',\n ) && value.interrupts.every(isLangGraphInterrupt)\n );\n}\n\nexport function isLangGraphInterruptPayload(\n value: unknown,\n): value is LangGraphInterruptPayload {\n return (\n isRecord(value) &&\n Array.isArray(value.tasks) &&\n value.tasks.every(isLangGraphInterruptTask)\n );\n}\n\nexport function isClientToolInterrupt(\n value: unknown,\n): value is ClientToolInterrupt {\n return isLangGraphInterrupt(value) && isClientToolRequest(value.value);\n}\n\nexport function isClientToolInterruptTask(\n value: unknown,\n): value is ClientToolInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isClientToolInterrupt)\n );\n}\n\nexport function isClientToolInterruptPayload(\n value: unknown,\n): value is ClientToolInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isClientToolInterruptTask)\n );\n}\n\nexport function isToolCallInterrupt(\n value: unknown,\n): value is ToolCallInterrupt {\n return isLangGraphInterrupt(value) && isToolCallRequest(value.value);\n}\n\nexport function isToolCallInterruptTask(\n value: unknown,\n): value is ToolCallInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isToolCallInterrupt)\n );\n}\n\nexport function isToolCallInterruptPayload(\n value: unknown,\n): value is ToolCallInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isToolCallInterruptTask)\n );\n}\n\nexport function isHITLInterrupt(value: unknown): value is HITLInterrupt {\n return isLangGraphInterrupt(value) && isHITLRequest(value.value);\n}\n\nexport function isHITLInterruptTask(\n value: unknown,\n): value is HITLInterruptTask {\n return (\n isLangGraphInterruptTask(value) && value.interrupts.every(isHITLInterrupt)\n );\n}\n\nexport function isHITLInterruptPayload(\n value: unknown,\n): value is HITLInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) && value.tasks.every(isHITLInterruptTask)\n );\n}\n","import type { ToolCall } from '@langchain/core/messages/tool';\nimport { Types } from '@a2ui/lit/0.8';\nimport type { FollowUpBehavior } from './options';\nimport type { ChatKitCommandSource } from './commands';\n\nexport enum ChatMessageTypeEnum {\n // LOG = 'log',\n MESSAGE = 'message',\n EVENT = 'event',\n}\n\n/**\n * https://js.langchain.com/docs/how_to/streaming/#event-reference\n */\nexport enum ChatMessageEventTypeEnum {\n ON_CONVERSATION_START = 'on_conversation_start',\n ON_CONVERSATION_END = 'on_conversation_end',\n ON_MESSAGE_START = 'on_message_start',\n ON_MESSAGE_END = 'on_message_end',\n ON_TOOL_START = 'on_tool_start',\n ON_TOOL_END = 'on_tool_end',\n ON_TOOL_ERROR = 'on_tool_error',\n /**\n * Step message in tool call\n */\n ON_TOOL_MESSAGE = 'on_tool_message',\n ON_AGENT_START = 'on_agent_start',\n ON_AGENT_END = 'on_agent_end',\n ON_RETRIEVER_START = 'on_retriever_start',\n ON_RETRIEVER_END = 'on_retriever_end',\n ON_RETRIEVER_ERROR = 'on_retriever_error',\n ON_INTERRUPT = 'on_interrupt',\n ON_ERROR = 'on_error',\n ON_CHAT_EVENT = 'on_chat_event',\n\n ON_CLIENT_EFFECT = 'on_client_effect',\n}\n\n/**\n * Encapsulate multi-agent message events\n */\nexport interface ChatEventEnvelope<T = unknown> {\n type: ChatMessageTypeEnum;\n event?: ChatMessageEventTypeEnum;\n tags: string[];\n data: T;\n}\n\n/**\n * Category of step message: determines the display components of computer use\n */\nexport enum ChatMessageStepCategory {\n /**\n * List of items: urls, files, etc.\n */\n List = 'list',\n /**\n * Websearch results\n */\n WebSearch = 'web_search',\n /**\n * Files list\n */\n Files = 'files',\n /**\n * View a file\n */\n File = 'file',\n /**\n * Program Execution\n */\n Program = 'program',\n /**\n * Iframe\n */\n Iframe = 'iframe',\n\n Memory = 'memory',\n\n Tasks = 'tasks',\n\n /**\n * Knowledges (knowledge base retriever results)\n */\n Knowledges = 'knowledges',\n}\n\n/**\n * Step message type, in canvas and ai message.\n */\nexport type TChatMessageStep<T = any> = TMessageComponent<\n TMessageComponentStep<T>\n>;\n\nexport type ImageDetail = 'auto' | 'low' | 'high';\nexport type MessageContentText = {\n type: 'text';\n text: string;\n};\nexport type MessageContentImageUrl = {\n type: 'image_url';\n image_url:\n | string\n | {\n url: string;\n detail?: ImageDetail;\n };\n};\n\n/**\n * Similar to {@link MessageContentText} | {@link MessageContentImageUrl}, which together form {@link MessageContentComplex}\n */\nexport type TMessageContentComponent<T extends object = object> = {\n id: string;\n type: 'component';\n data: TMessageComponent<T>;\n xpertName?: string;\n agentKey?: string;\n};\n\n/**\n * Defines the data type of the sub-message of `component` type in the message `content` {@link MessageContentComplex}\n */\nexport type TMessageComponent<T extends object = object> = T & {\n id?: string;\n category: 'Dashboard' | 'Computer' | 'Tool';\n type?: string;\n created_date?: Date | string;\n};\n\nexport type TMessageComponentWidgetItem = {\n name: string;\n config: Types.Surface;\n values?: Record<string, unknown>;\n};\n\nexport type TMessageComponentWidgetData = {\n type: 'Widget';\n mode?: string;\n widgets: TMessageComponentWidgetItem[];\n executionId?: string;\n};\n\nexport type TMessageComponentWidget =\n TMessageComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentWidget =\n TMessageContentComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentText = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'text';\n text: string;\n};\nexport type TMessageContentMemory = {\n id?: string;\n agentKey?: string;\n type: 'memory';\n data: any[];\n};\nexport type TMessageContentReasoning = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'reasoning';\n text: string;\n};\n/**\n * Enhance {@link MessageContentComplex} in Langchain.js\n */\nexport type TMessageContentComplex = (\n | TMessageContentText\n | TMessageContentReasoning\n | MessageContentImageUrl\n | TMessageContentComponent\n | TMessageContentMemory\n | (Record<string, any> & {\n type?: 'text' | 'image_url' | string;\n })\n | (Record<string, any> & {\n type?: never;\n })\n) & {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n/**\n * Enhance {@link MessageContent} in Langchain.js\n *\n * @deprecated use {@link TMessageItems} instead\n */\nexport type TMessageContent = string | TMessageContentComplex[];\n\nexport type TMessageComponentIframe = {\n type: 'iframe';\n title: string;\n url?: string;\n data?: {\n url?: string;\n };\n};\n\nexport type TMessageComponentStep<T = unknown> = {\n type: ChatMessageStepCategory;\n toolset: string;\n toolset_id: string;\n tool?: string;\n title: string;\n message: string;\n status: 'success' | 'fail' | 'running';\n created_date: Date | string;\n end_date: Date | string;\n error?: string;\n data?: T;\n input?: any;\n output?: unknown;\n artifact?: any;\n};\n\n/**\n * Data type for chat event message\n */\nexport type TChatEventMessage = {\n type?: string;\n title?: string;\n message?: string;\n status?: 'success' | 'fail' | 'running';\n created_date?: Date | string;\n end_date?: Date | string;\n error?: string;\n};\n\nexport interface ChatkitMessage {\n status?: string;\n content: TMessageItems | string;\n reasoning?: TMessageContentReasoning[];\n type: 'user' | 'assistant' | 'system' | 'tool' | 'event';\n id: string;\n followUpMode?: FollowUpBehavior;\n followUpStatus?: 'pending' | 'consumed' | 'canceled';\n targetExecutionId?: string | null;\n visibleAt?: string | Date | null;\n}\n\nexport type TMessageItems = TMessageContentComplex[];\n\nexport type ChatKitReferenceBase = {\n id?: string;\n label?: string;\n text: string;\n};\n\nexport type ChatKitCodeReference = ChatKitReferenceBase & {\n type: 'code';\n path: string;\n startLine: number;\n endLine: number;\n language?: string;\n taskId?: string;\n};\n\nexport type ChatKitQuoteReference = ChatKitReferenceBase & {\n type: 'quote';\n messageId?: string;\n source?: string;\n};\n\nexport type ChatKitImageReference = ChatKitReferenceBase & {\n type: 'image';\n fileId?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n size?: number;\n width?: number;\n height?: number;\n};\n\nexport type ChatKitReference =\n | ChatKitCodeReference\n | ChatKitQuoteReference\n | ChatKitImageReference;\n\nexport type ChatKitReferenceCompositionMode = 'compose' | 'preserve';\n\nexport type RuntimeCapabilitiesSelection = {\n mode: 'allowlist';\n skills: {\n workspaceId?: string;\n ids: string[];\n };\n plugins: {\n nodeKeys: string[];\n };\n subAgents?: {\n nodeKeys: string[];\n };\n};\n\nexport const STATE_VARIABLE_HUMAN = 'human';\n\n/**\n * Human input message, include parameters and attachments\n */\nexport type TChatRequestHuman = {\n input?: string;\n files?: Partial<File>[];\n references?: ChatKitReference[];\n referenceComposition?: ChatKitReferenceCompositionMode;\n planMode?: boolean;\n runtimeCapabilities?: RuntimeCapabilitiesSelection;\n commandSource?: ChatKitCommandSource;\n [key: string]: unknown;\n};\n\n/**\n * Command to resume with streaming after human decision\n */\nexport type TInterruptCommand = {\n resume?: any;\n update?: any;\n toolCalls?: ToolCall[];\n agentKey?: string;\n};\n\nexport type TXpertChatState = {\n [STATE_VARIABLE_HUMAN]?: TChatRequestHuman;\n} & Record<string, any>;\n\nexport type TXpertChatResumeDecision = {\n type: 'confirm' | 'reject';\n payload?: unknown;\n};\n\nexport type TXpertChatInterruptPatch = Pick<\n TInterruptCommand,\n 'agentKey' | 'toolCalls' | 'update'\n>;\n\nexport type TXpertChatTarget = {\n aiMessageId?: string;\n executionId?: string;\n};\n\nexport type TXpertChatResumeRequest = {\n action: 'resume';\n conversationId: string;\n target: TXpertChatTarget;\n decision: TXpertChatResumeDecision;\n patch?: TXpertChatInterruptPatch;\n state?: TXpertChatState;\n};\n\nexport type TChatRequest = {\n /**\n * The human input, include parameters\n */\n input: TChatRequestHuman;\n /**\n * Custom graph state\n */\n state?: TXpertChatState;\n agentKey?: string;\n projectId?: string;\n conversationId?: string;\n environmentId?: string;\n id?: string;\n executionId?: string;\n confirm?: boolean;\n command?: TInterruptCommand;\n retry?: boolean;\n followUpMode?: FollowUpBehavior;\n /**\n * PRO: Sandbox Environment Id\n * PRO: @description Sandbox environment ID to force using the specified container.\n */\n sandboxEnvironmentId?: string;\n};\n\n/**\n * Data type for client effect message\n */\nexport type TClientEeffectMessage = {\n name: string;\n args: Record<string, any>;\n tool_call_id?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n// Thread context usage\nexport type TThreadContextUsageMetrics = {\n contextTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n embedTokens?: number;\n totalPrice?: number;\n currency?: string | null;\n};\n\nexport type TThreadContextUsageEvent = {\n type: 'thread_context_usage';\n threadId: string;\n runId: string | null;\n agentKey: string;\n updatedAt: string;\n usage: TThreadContextUsageMetrics;\n};\n\nexport const CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED = 'follow_up_consumed' as const;\n\nexport type TFollowUpConsumedEvent = TChatEventMessage & {\n type: typeof CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED;\n mode: 'queue' | 'steer';\n messageIds: string[];\n clientMessageIds?: string[];\n executionId?: string | null;\n visibleAt?: string | null;\n};\n","import type {\n ChatKitOptions,\n ChatKitPetAnimationName,\n ChatKitPetBoundsPadding,\n ChatKitPetCharacter,\n ChatKitPetFrameAnimation,\n ChatKitPetOptions,\n ChatKitPetPin,\n ChatKitPetSpriteAtlas,\n} from './options.js';\n\nexport type PetFrameAnimationDefinition = {\n row: number;\n frames: number;\n frameDurations: readonly number[];\n};\n\nexport type PetSpriteAtlasDefinition = {\n columns: number;\n rows: number;\n cellWidth: number;\n cellHeight: number;\n animations: Record<ChatKitPetAnimationName, PetFrameAnimationDefinition>;\n};\n\nexport type NormalizedPetOptions = {\n character: ChatKitPetCharacter;\n position: Required<\n Pick<\n NonNullable<ChatKitPetOptions['position']>,\n 'draggable' | 'persist' | 'scale' | 'zIndex'\n >\n > &\n Pick<NonNullable<ChatKitPetOptions['position']>, 'pin' | 'boundsPadding'>;\n behavior: NonNullable<ChatKitPetOptions['behavior']>;\n ariaLabel: string;\n imageRendering: NonNullable<ChatKitPetOptions['imageRendering']>;\n};\n\nexport type ResolvedPetCharacter =\n {\n kind: 'atlas';\n src: string;\n atlas: PetSpriteAtlasDefinition;\n };\n\nexport type PetPosition = {\n x: number;\n y: number;\n};\n\nexport type PetSize = {\n width: number;\n height: number;\n};\n\nexport type PetViewport = {\n width: number;\n height: number;\n};\n\nexport const PET_ANIMATION_NAMES = [\n 'idle',\n 'running-right',\n 'running-left',\n 'waving',\n 'jumping',\n 'failed',\n 'waiting',\n 'running',\n 'review',\n] as const satisfies readonly ChatKitPetAnimationName[];\n\nexport const petSpriteAtlas = {\n columns: 8,\n rows: 9,\n cellWidth: 192,\n cellHeight: 208,\n animations: {\n idle: {\n row: 0,\n frames: 6,\n frameDurations: [280, 110, 110, 140, 140, 320],\n },\n 'running-right': {\n row: 1,\n frames: 8,\n frameDurations: [120, 120, 120, 120, 120, 120, 120, 220],\n },\n 'running-left': {\n row: 2,\n frames: 8,\n frameDurations: [120, 120, 120, 120, 120, 120, 120, 220],\n },\n waving: {\n row: 3,\n frames: 4,\n frameDurations: [140, 140, 140, 280],\n },\n jumping: {\n row: 4,\n frames: 5,\n frameDurations: [140, 140, 140, 140, 280],\n },\n failed: {\n row: 5,\n frames: 8,\n frameDurations: [140, 140, 140, 140, 140, 140, 140, 240],\n },\n waiting: {\n row: 6,\n frames: 6,\n frameDurations: [150, 150, 150, 150, 150, 260],\n },\n running: {\n row: 7,\n frames: 6,\n frameDurations: [120, 120, 120, 120, 120, 220],\n },\n review: {\n row: 8,\n frames: 6,\n frameDurations: [150, 150, 150, 150, 150, 280],\n },\n },\n} as const satisfies PetSpriteAtlasDefinition;\n\nexport const DEFAULT_PET_SIZE = {\n width: petSpriteAtlas.cellWidth,\n height: petSpriteAtlas.cellHeight,\n};\n\nexport const DEFAULT_PET_BOUNDS_PADDING: ChatKitPetBoundsPadding = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n};\n\nexport const DEFAULT_PET_STORAGE_KEY = 'chatkit:pet:position:v1';\n\nexport const DEFAULT_PET_SPRITESHEET_URL = '/pets/boba/spritesheet.webp';\n\nconst DEFAULT_PET_CHARACTER = {\n type: 'sprite-atlas',\n src: DEFAULT_PET_SPRITESHEET_URL,\n} as const satisfies ChatKitPetCharacter;\n\nconst DEFAULT_POSITION = {\n pin: 'bottom-right',\n draggable: true,\n scale: 0.25,\n persist: true,\n zIndex: 40,\n} as const satisfies NormalizedPetOptions['position'];\n\nfunction mergeFrameAnimation(\n base: PetFrameAnimationDefinition,\n override?: ChatKitPetFrameAnimation,\n): PetFrameAnimationDefinition {\n return {\n row: override?.row ?? base.row,\n frames: override?.frames ?? base.frames,\n frameDurations:\n override?.frameDurations && override.frameDurations.length > 0\n ? override.frameDurations\n : base.frameDurations,\n };\n}\n\nexport function mergePetSpriteAtlas(\n override?: ChatKitPetSpriteAtlas,\n): PetSpriteAtlasDefinition {\n const animations = {} as Record<\n ChatKitPetAnimationName,\n PetFrameAnimationDefinition\n >;\n\n for (const name of PET_ANIMATION_NAMES) {\n animations[name] = mergeFrameAnimation(\n petSpriteAtlas.animations[name],\n override?.animations?.[name],\n );\n }\n\n return {\n columns: override?.columns ?? petSpriteAtlas.columns,\n rows: override?.rows ?? petSpriteAtlas.rows,\n cellWidth: override?.cellWidth ?? petSpriteAtlas.cellWidth,\n cellHeight: override?.cellHeight ?? petSpriteAtlas.cellHeight,\n animations,\n };\n}\n\nfunction normalizeCharacter(\n character: ChatKitPetCharacter | undefined,\n): ChatKitPetCharacter {\n if (!character) {\n return DEFAULT_PET_CHARACTER;\n }\n\n if (character.src) {\n return character;\n }\n\n return DEFAULT_PET_CHARACTER;\n}\n\nexport function normalizePetOptions(\n pet: ChatKitOptions['pet'] | null,\n): NormalizedPetOptions | null {\n if (!pet) {\n return null;\n }\n\n if (pet === true) {\n return {\n character: DEFAULT_PET_CHARACTER,\n position: DEFAULT_POSITION,\n behavior: 'auto',\n ariaLabel: 'Animated pet',\n imageRendering: 'auto',\n };\n }\n\n if (pet.enabled === false) {\n return null;\n }\n\n return {\n character: normalizeCharacter(pet.character),\n position: {\n ...DEFAULT_POSITION,\n ...pet.position,\n },\n behavior: pet.behavior ?? 'auto',\n ariaLabel: pet.ariaLabel ?? 'Animated pet',\n imageRendering: pet.imageRendering ?? 'auto',\n };\n}\n\nexport function resolvePetCharacter(\n character: ChatKitPetCharacter,\n): ResolvedPetCharacter | null {\n if (!character.src) {\n return null;\n }\n\n return {\n kind: 'atlas',\n src: character.src,\n atlas: mergePetSpriteAtlas(character.atlas),\n };\n}\n\nexport function normalizeBoundsPadding(\n value?: number | Partial<ChatKitPetBoundsPadding>,\n): ChatKitPetBoundsPadding {\n if (typeof value === 'number') {\n return {\n top: value,\n right: value,\n bottom: value,\n left: value,\n };\n }\n\n return {\n top: value?.top ?? DEFAULT_PET_BOUNDS_PADDING.top,\n right: value?.right ?? DEFAULT_PET_BOUNDS_PADDING.right,\n bottom: value?.bottom ?? DEFAULT_PET_BOUNDS_PADDING.bottom,\n left: value?.left ?? DEFAULT_PET_BOUNDS_PADDING.left,\n };\n}\n\nexport function clampPetPosition(\n position: PetPosition,\n size: PetSize,\n viewport: PetViewport,\n padding: ChatKitPetBoundsPadding,\n): PetPosition {\n const minX = padding.left;\n const minY = padding.top;\n const maxX = Math.max(minX, viewport.width - size.width - padding.right);\n const maxY = Math.max(minY, viewport.height - size.height - padding.bottom);\n\n return {\n x: Math.min(maxX, Math.max(minX, position.x)),\n y: Math.min(maxY, Math.max(minY, position.y)),\n };\n}\n\nexport function getPinnedPetPosition(\n pin: ChatKitPetPin,\n size: PetSize,\n viewport: PetViewport,\n padding: ChatKitPetBoundsPadding,\n): PetPosition {\n const horizontalCenter = (viewport.width - size.width) / 2;\n const verticalCenter = (viewport.height - size.height) / 2;\n const right = viewport.width - size.width - padding.right;\n const bottom = viewport.height - size.height - padding.bottom;\n\n switch (pin) {\n case 'top-left':\n return clampPetPosition(\n { x: padding.left, y: padding.top },\n size,\n viewport,\n padding,\n );\n case 'top':\n return clampPetPosition(\n { x: horizontalCenter, y: padding.top },\n size,\n viewport,\n padding,\n );\n case 'top-right':\n return clampPetPosition(\n { x: right, y: padding.top },\n size,\n viewport,\n padding,\n );\n case 'left':\n return clampPetPosition(\n { x: padding.left, y: verticalCenter },\n size,\n viewport,\n padding,\n );\n case 'center':\n return clampPetPosition(\n { x: horizontalCenter, y: verticalCenter },\n size,\n viewport,\n padding,\n );\n case 'right':\n return clampPetPosition(\n { x: right, y: verticalCenter },\n size,\n viewport,\n padding,\n );\n case 'bottom-left':\n return clampPetPosition(\n { x: padding.left, y: bottom },\n size,\n viewport,\n padding,\n );\n case 'bottom':\n return clampPetPosition(\n { x: horizontalCenter, y: bottom },\n size,\n viewport,\n padding,\n );\n case 'bottom-right':\n default:\n return clampPetPosition({ x: right, y: bottom }, size, viewport, padding);\n }\n}\n"],"names":["ChatMessageTypeEnum","ChatMessageEventTypeEnum","ChatMessageStepCategory"],"mappings":"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"}
|