@xpert-ai/chatkit-types 0.3.6 → 0.3.7
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.cjs +48 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +16 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -155,6 +155,53 @@ function isHITLInterruptTask(value) {
|
|
|
155
155
|
function isHITLInterruptPayload(value) {
|
|
156
156
|
return isLangGraphInterruptPayload(value) && value.tasks.every(isHITLInterruptTask);
|
|
157
157
|
}
|
|
158
|
+
function resolveLocalizedText(value, language = "en-US") {
|
|
159
|
+
if (typeof value === "string") {
|
|
160
|
+
const trimmed = value.trim();
|
|
161
|
+
return trimmed || null;
|
|
162
|
+
}
|
|
163
|
+
if (!value || typeof value !== "object") return null;
|
|
164
|
+
const localized = value;
|
|
165
|
+
const normalizedLanguage = language.trim();
|
|
166
|
+
const underscoredLanguage = normalizedLanguage.replace(/-/g, "_");
|
|
167
|
+
const languagePrefix = normalizedLanguage.split(/[-_]/)[0];
|
|
168
|
+
const preferredKeys = normalizedLanguage.toLowerCase().startsWith("zh") ? [
|
|
169
|
+
normalizedLanguage,
|
|
170
|
+
underscoredLanguage,
|
|
171
|
+
"zh_Hans",
|
|
172
|
+
"zh-Hans",
|
|
173
|
+
"zh_CN",
|
|
174
|
+
"zh-CN",
|
|
175
|
+
"zh",
|
|
176
|
+
"en_US",
|
|
177
|
+
"en-US",
|
|
178
|
+
"en"
|
|
179
|
+
] : [
|
|
180
|
+
normalizedLanguage,
|
|
181
|
+
underscoredLanguage,
|
|
182
|
+
"en_US",
|
|
183
|
+
"en-US",
|
|
184
|
+
"en",
|
|
185
|
+
languagePrefix,
|
|
186
|
+
"zh_Hans",
|
|
187
|
+
"zh-Hans",
|
|
188
|
+
"zh_CN",
|
|
189
|
+
"zh-CN",
|
|
190
|
+
"zh"
|
|
191
|
+
];
|
|
192
|
+
for (const key of preferredKeys) {
|
|
193
|
+
const candidate = localized[key];
|
|
194
|
+
if (typeof candidate === "string" && candidate.trim()) {
|
|
195
|
+
return candidate.trim();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
for (const candidate of Object.values(localized)) {
|
|
199
|
+
if (typeof candidate === "string" && candidate.trim()) {
|
|
200
|
+
return candidate.trim();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
158
205
|
const PET_ANIMATION_NAMES = [
|
|
159
206
|
"idle",
|
|
160
207
|
"running-right",
|
|
@@ -444,5 +491,6 @@ exports.normalizeBoundsPadding = normalizeBoundsPadding;
|
|
|
444
491
|
exports.normalizeHITLRequest = normalizeHITLRequest;
|
|
445
492
|
exports.normalizePetOptions = normalizePetOptions;
|
|
446
493
|
exports.petSpriteAtlas = petSpriteAtlas;
|
|
494
|
+
exports.resolveLocalizedText = resolveLocalizedText;
|
|
447
495
|
exports.resolvePetCharacter = resolvePetCharacter;
|
|
448
496
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/interrupt.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 {\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":[],"mappings":";;;;AAEO,MAAM,+BAA+B;AAErC,MAAM,iCAAiC;AAEvC,MAAM,uDACX;AACK,MAAM,gEACX;AAuDK,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAoKA,SAAS,SAAS,OAAkD;AAClE,SAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,gBACP,UACG,MAC6B;AAChC,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,SAAS,KAAK,EAAG,QAAO;AAAA,EAC9B;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,UAAmC,MAAgB;AACzE,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAAA,EACnC;AAEA,SAAO;AACT;AAEA,SAAS,gBACP,UACG,MACY;AACf,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,OAAO,UAAU,YAAY,MAAM,KAAA,EAAQ,QAAO;AAAA,EACxD;AAEA,SAAO;AACT;AAEO,SAAS,mBACd,OAC2B;AAC3B,SACE,OAAO,UAAU,YAChB,oBAA0C,SAAS,KAAK;AAE7D;AAEA,SAAS,2BACP,OAC0B;AAC1B,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAE7B,QAAM,OAAO,gBAAgB,OAAO,MAAM;AAC1C,QAAM,OAAO,gBAAgB,OAAO,QAAQ,WAAW;AACvD,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAE3B,QAAM,cACJ,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAE9D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,gBAAgB,SAAY,EAAE,gBAAgB,CAAA;AAAA,EAAC;AAEvD;AAEA,SAAS,0BACP,OACyB;AACzB,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAE7B,QAAM,aAAa,gBAAgB,OAAO,cAAc,aAAa;AACrE,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,MAAI,CAAC,cAAc,CAAC,iBAAkB,QAAO;AAE7C,QAAM,sBAAsB,iBAAiB,OAAO,kBAAkB;AACtE,MAAI,oBAAoB,WAAW,iBAAiB,OAAQ,QAAO;AAEnE,QAAM,aAAa,gBAAgB,OAAO,cAAc,aAAa;AAErE,SAAO;AAAA,IACL;AAAA,IACA,kBAAkB;AAAA,IAClB,GAAI,aAAa,EAAE,eAAe,CAAA;AAAA,EAAC;AAEvC;AAEO,SAAS,qBAAqB,OAAoC;AACvE,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAE7B,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,MACE,CAAC,kBACD,CAAC,iBACD,eAAe,WAAW,KAC1B,cAAc,WAAW,GACzB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,2BAA2B,eAAe;AAAA,IAC9C;AAAA,EAAA;AAEF,QAAM,0BAA0B,cAAc;AAAA,IAC5C;AAAA,EAAA;AAEF,MACE,yBAAyB,KAAK,CAAC,YAAY,YAAY,IAAI,KAC3D,wBAAwB,KAAK,CAAC,WAAW,WAAW,IAAI,GACxD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,eAAe;AAAA,EAAA;AAEnB;AAEO,SAAS,oBACd,OAC4B;AAC5B,SAAO,SAAS,KAAK,KAAK,MAAM,QAAQ,MAAM,eAAe;AAC/D;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO,SAAS,KAAK,KAAK,MAAM,QAAQ,MAAM,SAAS;AACzD;AAEO,SAAS,cAAc,OAAsC;AAClE,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,MACE,CAAC,MAAM,QAAQ,MAAM,cAAc,KACnC,CAAC,MAAM,QAAQ,MAAM,aAAa,GAClC;AACA,WAAO;AAAA,EACT;AAEA,SAAO,qBAAqB,KAAK,MAAM;AACzC;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,SACE,kBAAkB,KAAK,KACvB,oBAAoB,KAAK,KACzB,cAAc,KAAK;AAEvB;AAEO,SAAS,qBACd,OAC6B;AAC7B,SACE,SAAS,KAAK,KACd,OAAO,MAAM,OAAO,YACpB,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO;AAEvD;AAEO,SAAS,yBACd,OACiC;AACjC,MACE,CAAC,SAAS,KAAK,KACf,OAAO,MAAM,OAAO,YACpB,OAAO,MAAM,SAAS,YACtB,CAAC,MAAM,QAAQ,MAAM,IAAI,KACzB,CAAC,MAAM,QAAQ,MAAM,UAAU,GAC/B;AACA,WAAO;AAAA,EACT;AAEA,SACE,MAAM,KAAK;AAAA,IACT,CAAC,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS;AAAA,EAAA,KACnD,MAAM,WAAW,MAAM,oBAAoB;AAEpD;AAEO,SAAS,4BACd,OACoC;AACpC,SACE,SAAS,KAAK,KACd,MAAM,QAAQ,MAAM,KAAK,KACzB,MAAM,MAAM,MAAM,wBAAwB;AAE9C;AAEO,SAAS,sBACd,OAC8B;AAC9B,SAAO,qBAAqB,KAAK,KAAK,oBAAoB,MAAM,KAAK;AACvE;AAEO,SAAS,0BACd,OACkC;AAClC,SACE,yBAAyB,KAAK,KAC9B,MAAM,WAAW,MAAM,qBAAqB;AAEhD;AAEO,SAAS,6BACd,OACqC;AACrC,SACE,4BAA4B,KAAK,KACjC,MAAM,MAAM,MAAM,yBAAyB;AAE/C;AAEO,SAAS,oBACd,OAC4B;AAC5B,SAAO,qBAAqB,KAAK,KAAK,kBAAkB,MAAM,KAAK;AACrE;AAEO,SAAS,wBACd,OACgC;AAChC,SACE,yBAAyB,KAAK,KAC9B,MAAM,WAAW,MAAM,mBAAmB;AAE9C;AAEO,SAAS,2BACd,OACmC;AACnC,SACE,4BAA4B,KAAK,KACjC,MAAM,MAAM,MAAM,uBAAuB;AAE7C;AAEO,SAAS,gBAAgB,OAAwC;AACtE,SAAO,qBAAqB,KAAK,KAAK,cAAc,MAAM,KAAK;AACjE;AAEO,SAAS,oBACd,OAC4B;AAC5B,SACE,yBAAyB,KAAK,KAAK,MAAM,WAAW,MAAM,eAAe;AAE7E;AAEO,SAAS,uBACd,OAC+B;AAC/B,SACE,4BAA4B,KAAK,KAAK,MAAM,MAAM,MAAM,mBAAmB;AAE/E;ACvbO,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,iBAAiB;AAAA,EAC5B,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,IACV,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAE/C,iBAAiB;AAAA,MACf,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAEzD,gBAAgB;AAAA,MACd,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAEzD,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAErC,SAAS;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAE1C,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAEzD,SAAS;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAE/C,SAAS;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,IAE/C,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,EAC/C;AAEJ;AAEO,MAAM,mBAAmB;AAAA,EAC9B,OAAO,eAAe;AAAA,EACtB,QAAQ,eAAe;AACzB;AAEO,MAAM,6BAAsD;AAAA,EACjE,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAEO,MAAM,0BAA0B;AAEhC,MAAM,8BAA8B;AAE3C,MAAM,wBAAwB;AAAA,EAC5B,MAAM;AAAA,EACN,KAAK;AACP;AAEA,MAAM,mBAAmB;AAAA,EACvB,KAAK;AAAA,EACL,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AACV;AAEA,SAAS,oBACP,MACA,UAC6B;AAC7B,SAAO;AAAA,IACL,MAAK,qCAAU,QAAO,KAAK;AAAA,IAC3B,SAAQ,qCAAU,WAAU,KAAK;AAAA,IACjC,iBACE,qCAAU,mBAAkB,SAAS,eAAe,SAAS,IACzD,SAAS,iBACT,KAAK;AAAA,EAAA;AAEf;AAEO,SAAS,oBACd,UAC0B;;AAC1B,QAAM,aAAa,CAAA;AAKnB,aAAW,QAAQ,qBAAqB;AACtC,eAAW,IAAI,IAAI;AAAA,MACjB,eAAe,WAAW,IAAI;AAAA,OAC9B,0CAAU,eAAV,mBAAuB;AAAA,IAAI;AAAA,EAE/B;AAEA,SAAO;AAAA,IACL,UAAS,qCAAU,YAAW,eAAe;AAAA,IAC7C,OAAM,qCAAU,SAAQ,eAAe;AAAA,IACvC,YAAW,qCAAU,cAAa,eAAe;AAAA,IACjD,aAAY,qCAAU,eAAc,eAAe;AAAA,IACnD;AAAA,EAAA;AAEJ;AAEA,SAAS,mBACP,WACqB;AACrB,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,KAAK;AACjB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,KAC6B;AAC7B,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,MAAM;AAChB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,IAAA;AAAA,EAEpB;AAEA,MAAI,IAAI,YAAY,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW,mBAAmB,IAAI,SAAS;AAAA,IAC3C,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG,IAAI;AAAA,IAAA;AAAA,IAET,UAAU,IAAI,YAAY;AAAA,IAC1B,WAAW,IAAI,aAAa;AAAA,IAC5B,gBAAgB,IAAI,kBAAkB;AAAA,EAAA;AAE1C;AAEO,SAAS,oBACd,WAC6B;AAC7B,MAAI,CAAC,UAAU,KAAK;AAClB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK,UAAU;AAAA,IACf,OAAO,oBAAoB,UAAU,KAAK;AAAA,EAAA;AAE9C;AAEO,SAAS,uBACd,OACyB;AACzB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EAEV;AAEA,SAAO;AAAA,IACL,MAAK,+BAAO,QAAO,2BAA2B;AAAA,IAC9C,QAAO,+BAAO,UAAS,2BAA2B;AAAA,IAClD,SAAQ,+BAAO,WAAU,2BAA2B;AAAA,IACpD,OAAM,+BAAO,SAAQ,2BAA2B;AAAA,EAAA;AAEpD;AAEO,SAAS,iBACd,UACA,MACA,UACA,SACa;AACb,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,KAAK,IAAI,MAAM,SAAS,QAAQ,KAAK,QAAQ,QAAQ,KAAK;AACvE,QAAM,OAAO,KAAK,IAAI,MAAM,SAAS,SAAS,KAAK,SAAS,QAAQ,MAAM;AAE1E,SAAO;AAAA,IACL,GAAG,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,SAAS,CAAC,CAAC;AAAA,IAC5C,GAAG,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,SAAS,CAAC,CAAC;AAAA,EAAA;AAEhD;AAEO,SAAS,qBACd,KACA,MACA,UACA,SACa;AACb,QAAM,oBAAoB,SAAS,QAAQ,KAAK,SAAS;AACzD,QAAM,kBAAkB,SAAS,SAAS,KAAK,UAAU;AACzD,QAAM,QAAQ,SAAS,QAAQ,KAAK,QAAQ,QAAQ;AACpD,QAAM,SAAS,SAAS,SAAS,KAAK,SAAS,QAAQ;AAEvD,UAAQ,KAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,QAAQ,MAAM,GAAG,QAAQ,IAAA;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,kBAAkB,GAAG,QAAQ,IAAA;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,OAAO,GAAG,QAAQ,IAAA;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,QAAQ,MAAM,GAAG,eAAA;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,kBAAkB,GAAG,eAAA;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,OAAO,GAAG,eAAA;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,QAAQ,MAAM,GAAG,OAAA;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,kBAAkB,GAAG,OAAA;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,KAAK;AAAA,IACL;AACE,aAAO,iBAAiB,EAAE,GAAG,OAAO,GAAG,UAAU,MAAM,UAAU,OAAO;AAAA,EAAA;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/interrupt.ts","../src/localized-text.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","export type I18nObject = {\n en_US?: string;\n en?: string;\n 'en-US'?: string;\n zh_Hans?: string;\n zh_CN?: string;\n zh?: string;\n 'zh-Hans'?: string;\n 'zh-CN'?: string;\n [locale: string]: string | undefined;\n};\n\nexport type LocalizedText = string | I18nObject;\n\nexport function resolveLocalizedText(\n value: unknown,\n language = 'en-US',\n): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n\n if (!value || typeof value !== 'object') return null;\n\n const localized = value as I18nObject;\n const normalizedLanguage = language.trim();\n const underscoredLanguage = normalizedLanguage.replace(/-/g, '_');\n const languagePrefix = normalizedLanguage.split(/[-_]/)[0];\n const preferredKeys = normalizedLanguage.toLowerCase().startsWith('zh')\n ? [\n normalizedLanguage,\n underscoredLanguage,\n 'zh_Hans',\n 'zh-Hans',\n 'zh_CN',\n 'zh-CN',\n 'zh',\n 'en_US',\n 'en-US',\n 'en',\n ]\n : [\n normalizedLanguage,\n underscoredLanguage,\n 'en_US',\n 'en-US',\n 'en',\n languagePrefix,\n 'zh_Hans',\n 'zh-Hans',\n 'zh_CN',\n 'zh-CN',\n 'zh',\n ];\n\n for (const key of preferredKeys) {\n const candidate = localized[key];\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n\n for (const candidate of Object.values(localized)) {\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n\n return 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":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1036,6 +1036,18 @@ declare type HostedApiConfig = {
|
|
|
1036
1036
|
xpertId?: string;
|
|
1037
1037
|
};
|
|
1038
1038
|
|
|
1039
|
+
export declare type I18nObject = {
|
|
1040
|
+
en_US?: string;
|
|
1041
|
+
en?: string;
|
|
1042
|
+
'en-US'?: string;
|
|
1043
|
+
zh_Hans?: string;
|
|
1044
|
+
zh_CN?: string;
|
|
1045
|
+
zh?: string;
|
|
1046
|
+
'zh-Hans'?: string;
|
|
1047
|
+
'zh-CN'?: string;
|
|
1048
|
+
[locale: string]: string | undefined;
|
|
1049
|
+
};
|
|
1050
|
+
|
|
1039
1051
|
export declare type Icon = {
|
|
1040
1052
|
type: 'Icon';
|
|
1041
1053
|
key?: string;
|
|
@@ -1216,6 +1228,8 @@ export declare type ListViewItem = {
|
|
|
1216
1228
|
align?: Alignment;
|
|
1217
1229
|
};
|
|
1218
1230
|
|
|
1231
|
+
export declare type LocalizedText = string | I18nObject;
|
|
1232
|
+
|
|
1219
1233
|
export declare type Markdown = {
|
|
1220
1234
|
type: 'Markdown';
|
|
1221
1235
|
key?: string;
|
|
@@ -1433,6 +1447,8 @@ export declare type ResolvedPetCharacter = {
|
|
|
1433
1447
|
atlas: PetSpriteAtlasDefinition;
|
|
1434
1448
|
};
|
|
1435
1449
|
|
|
1450
|
+
export declare function resolveLocalizedText(value: unknown, language?: string): string | null;
|
|
1451
|
+
|
|
1436
1452
|
export declare function resolvePetCharacter(character: ChatKitPetCharacter): ResolvedPetCharacter | null;
|
|
1437
1453
|
|
|
1438
1454
|
export declare type Row = {
|
package/dist/index.js
CHANGED
|
@@ -153,6 +153,53 @@ function isHITLInterruptTask(value) {
|
|
|
153
153
|
function isHITLInterruptPayload(value) {
|
|
154
154
|
return isLangGraphInterruptPayload(value) && value.tasks.every(isHITLInterruptTask);
|
|
155
155
|
}
|
|
156
|
+
function resolveLocalizedText(value, language = "en-US") {
|
|
157
|
+
if (typeof value === "string") {
|
|
158
|
+
const trimmed = value.trim();
|
|
159
|
+
return trimmed || null;
|
|
160
|
+
}
|
|
161
|
+
if (!value || typeof value !== "object") return null;
|
|
162
|
+
const localized = value;
|
|
163
|
+
const normalizedLanguage = language.trim();
|
|
164
|
+
const underscoredLanguage = normalizedLanguage.replace(/-/g, "_");
|
|
165
|
+
const languagePrefix = normalizedLanguage.split(/[-_]/)[0];
|
|
166
|
+
const preferredKeys = normalizedLanguage.toLowerCase().startsWith("zh") ? [
|
|
167
|
+
normalizedLanguage,
|
|
168
|
+
underscoredLanguage,
|
|
169
|
+
"zh_Hans",
|
|
170
|
+
"zh-Hans",
|
|
171
|
+
"zh_CN",
|
|
172
|
+
"zh-CN",
|
|
173
|
+
"zh",
|
|
174
|
+
"en_US",
|
|
175
|
+
"en-US",
|
|
176
|
+
"en"
|
|
177
|
+
] : [
|
|
178
|
+
normalizedLanguage,
|
|
179
|
+
underscoredLanguage,
|
|
180
|
+
"en_US",
|
|
181
|
+
"en-US",
|
|
182
|
+
"en",
|
|
183
|
+
languagePrefix,
|
|
184
|
+
"zh_Hans",
|
|
185
|
+
"zh-Hans",
|
|
186
|
+
"zh_CN",
|
|
187
|
+
"zh-CN",
|
|
188
|
+
"zh"
|
|
189
|
+
];
|
|
190
|
+
for (const key of preferredKeys) {
|
|
191
|
+
const candidate = localized[key];
|
|
192
|
+
if (typeof candidate === "string" && candidate.trim()) {
|
|
193
|
+
return candidate.trim();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
for (const candidate of Object.values(localized)) {
|
|
197
|
+
if (typeof candidate === "string" && candidate.trim()) {
|
|
198
|
+
return candidate.trim();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
156
203
|
const PET_ANIMATION_NAMES = [
|
|
157
204
|
"idle",
|
|
158
205
|
"running-right",
|
|
@@ -443,6 +490,7 @@ export {
|
|
|
443
490
|
normalizeHITLRequest,
|
|
444
491
|
normalizePetOptions,
|
|
445
492
|
petSpriteAtlas,
|
|
493
|
+
resolveLocalizedText,
|
|
446
494
|
resolvePetCharacter
|
|
447
495
|
};
|
|
448
496
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/interrupt.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 {\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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/interrupt.ts","../src/localized-text.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","export type I18nObject = {\n en_US?: string;\n en?: string;\n 'en-US'?: string;\n zh_Hans?: string;\n zh_CN?: string;\n zh?: string;\n 'zh-Hans'?: string;\n 'zh-CN'?: string;\n [locale: string]: string | undefined;\n};\n\nexport type LocalizedText = string | I18nObject;\n\nexport function resolveLocalizedText(\n value: unknown,\n language = 'en-US',\n): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n\n if (!value || typeof value !== 'object') return null;\n\n const localized = value as I18nObject;\n const normalizedLanguage = language.trim();\n const underscoredLanguage = normalizedLanguage.replace(/-/g, '_');\n const languagePrefix = normalizedLanguage.split(/[-_]/)[0];\n const preferredKeys = normalizedLanguage.toLowerCase().startsWith('zh')\n ? [\n normalizedLanguage,\n underscoredLanguage,\n 'zh_Hans',\n 'zh-Hans',\n 'zh_CN',\n 'zh-CN',\n 'zh',\n 'en_US',\n 'en-US',\n 'en',\n ]\n : [\n normalizedLanguage,\n underscoredLanguage,\n 'en_US',\n 'en-US',\n 'en',\n languagePrefix,\n 'zh_Hans',\n 'zh-Hans',\n 'zh_CN',\n 'zh-CN',\n 'zh',\n ];\n\n for (const key of preferredKeys) {\n const candidate = localized[key];\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n\n for (const candidate of Object.values(localized)) {\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n\n return 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":[],"mappings":"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"}
|