conversationalist 0.0.9 → 0.0.10
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/README.md +63 -19
- package/dist/guards.d.ts +13 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/history.d.ts +17 -7
- package/dist/history.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1603 -23
- package/dist/index.js.map +7 -5
- package/dist/markdown/index.js +1579 -43
- package/dist/markdown/index.js.map +5 -4
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -4
- package/dist/schemas/index.js.map +3 -3
- package/dist/schemas.d.ts +2 -2
- package/dist/schemas.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/multi-modal.ts", "../src/schemas.ts", "../src/utilities/content.ts", "../src/utilities/type-helpers.ts", "../src/utilities/message.ts", "../src/utilities/tool-calls.ts", "../src/utilities/message-store.ts", "../src/utilities/transient.ts", "../src/environment.ts", "../src/errors.ts", "../src/types.ts", "../src/conversation.ts", "../src/context.ts", "../src/streaming.ts", "../src/with-conversation.ts", "../src/history.ts"],
|
|
3
|
+
"sources": ["../src/multi-modal.ts", "../src/schemas.ts", "../src/utilities/content.ts", "../src/utilities/type-helpers.ts", "../src/utilities/message.ts", "../src/utilities/tool-calls.ts", "../src/utilities/message-store.ts", "../src/utilities/transient.ts", "../src/environment.ts", "../src/errors.ts", "../src/types.ts", "../src/conversation.ts", "../src/guards.ts", "../src/context.ts", "../src/streaming.ts", "../src/with-conversation.ts", "../node_modules/event-emission/dist/index.js", "../src/history.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Re-exports multi-modal types from @lasercat/homogenaize\n */\n\nimport type { MultiModalContent } from '@lasercat/homogenaize';\n\nexport type { Message, MultiModalContent } from '@lasercat/homogenaize';\n\n/**\n * TextContent and ImageContent are convenience types for discriminating MultiModalContent.\n */\nexport interface TextContent {\n type: 'text';\n text: string;\n}\n\n/**\n * ImageContent is a convenience type for image parts in multi-modal content.\n */\nexport interface ImageContent {\n type: 'image';\n url: string;\n mimeType?: string;\n text?: string;\n}\n\n/**\n * Creates a shallow copy of a MultiModalContent item.\n */\nexport function copyMultiModalContent(item: MultiModalContent): MultiModalContent {\n if (item.type === 'text') {\n const result: MultiModalContent = { type: 'text' };\n if (item.text !== undefined) result.text = item.text;\n return result;\n }\n const result: MultiModalContent = { type: 'image' };\n if (item.url !== undefined) result.url = item.url;\n if (item.mimeType !== undefined) result.mimeType = item.mimeType;\n if (item.text !== undefined) result.text = item.text;\n return result;\n}\n\n/**\n * Copies content, ensuring a mutable array is returned for multi-modal content.\n */\nexport function copyContent(\n content: string | ReadonlyArray<MultiModalContent>,\n): string | MultiModalContent[] {\n if (typeof content === 'string') {\n return content;\n }\n return content.map(copyMultiModalContent);\n}\n",
|
|
6
|
-
"import type { MultiModalContent } from '@lasercat/homogenaize';\nimport { z } from 'zod';\n\nimport type {\n Conversation,\n ConversationStatus,\n JSONValue,\n Message,\n MessageInput,\n MessageRole,\n TokenUsage,\n ToolCall,\n ToolResult,\n} from './types';\n\ntype RawMultiModalContent = {\n type: 'text' | 'image';\n text?: string | undefined;\n url?: string | undefined;\n mimeType?: string | undefined;\n};\n\nfunction toMultiModalContent(value: RawMultiModalContent): MultiModalContent {\n const result: MultiModalContent = { type: value.type };\n if (value.text !== undefined) result.text = value.text;\n if (value.url !== undefined) result.url = value.url;\n if (value.mimeType !== undefined) result.mimeType = value.mimeType;\n return result;\n}\n\n/**\n * Zod schema for JSON-serializable values.\n */\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n) satisfies z.ZodType<JSONValue>;\n\n/**\n * Zod schema for multi-modal content parts (text or image).\n */\nexport const multiModalContentSchema = z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('image'),\n url: z.string().url(),\n mimeType: z.string().optional(),\n text: z.string().optional(),\n }),\n ])\n .transform(toMultiModalContent) satisfies z.ZodType<MultiModalContent>;\n\n/**\n * Zod schema for valid message roles.\n */\nexport const messageRoleSchema = z.enum([\n 'user',\n 'assistant',\n 'system',\n 'developer',\n 'tool-use',\n 'tool-result',\n 'snapshot',\n]) satisfies z.ZodType<MessageRole>;\n\n/**\n * Zod schema for tool call metadata.\n */\nexport const toolCallSchema = z.object({\n id: z.string(),\n name: z.string(),\n arguments: jsonValueSchema,\n}) satisfies z.ZodType<ToolCall>;\n\n/**\n * Zod schema for tool result metadata.\n */\nexport const toolResultSchema = z.object({\n callId: z.string(),\n outcome: z.enum(['success', 'error']),\n content: jsonValueSchema,\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n result: jsonValueSchema.optional(),\n error: z.string().optional(),\n}) satisfies z.ZodType<ToolResult>;\n\n/**\n * Zod schema for token usage accounting.\n */\nexport const tokenUsageSchema = z.object({\n prompt: z.number().int().min(0),\n completion: z.number().int().min(0),\n total: z.number().int().min(0),\n}) satisfies z.ZodType<TokenUsage>;\n\n/**\n * Zod schema for message input payloads.\n */\nexport const messageInputSchema = z.object({\n role: messageRoleSchema,\n content: z.union([z.string(), z.array(multiModalContentSchema)]),\n metadata: z.record(z.string(), jsonValueSchema).optional(),\n hidden: z.boolean().optional(),\n toolCall: toolCallSchema.optional(),\n toolResult: toolResultSchema.optional(),\n tokenUsage: tokenUsageSchema.optional(),\n goalCompleted: z.boolean().optional(),\n}) satisfies z.ZodType<MessageInput>;\n\n/**\n * Zod schema for
|
|
6
|
+
"import type { MultiModalContent } from '@lasercat/homogenaize';\nimport { z } from 'zod';\n\nimport type {\n Conversation,\n ConversationStatus,\n JSONValue,\n Message,\n MessageInput,\n MessageRole,\n TokenUsage,\n ToolCall,\n ToolResult,\n} from './types';\n\ntype RawMultiModalContent = {\n type: 'text' | 'image';\n text?: string | undefined;\n url?: string | undefined;\n mimeType?: string | undefined;\n};\n\nfunction toMultiModalContent(value: RawMultiModalContent): MultiModalContent {\n const result: MultiModalContent = { type: value.type };\n if (value.text !== undefined) result.text = value.text;\n if (value.url !== undefined) result.url = value.url;\n if (value.mimeType !== undefined) result.mimeType = value.mimeType;\n return result;\n}\n\n/**\n * Zod schema for JSON-serializable values.\n */\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n) satisfies z.ZodType<JSONValue>;\n\n/**\n * Zod schema for multi-modal content parts (text or image).\n */\nexport const multiModalContentSchema = z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('image'),\n url: z.string().url(),\n mimeType: z.string().optional(),\n text: z.string().optional(),\n }),\n ])\n .transform(toMultiModalContent) satisfies z.ZodType<MultiModalContent>;\n\n/**\n * Zod schema for valid message roles.\n */\nexport const messageRoleSchema = z.enum([\n 'user',\n 'assistant',\n 'system',\n 'developer',\n 'tool-use',\n 'tool-result',\n 'snapshot',\n]) satisfies z.ZodType<MessageRole>;\n\n/**\n * Zod schema for tool call metadata.\n */\nexport const toolCallSchema = z.object({\n id: z.string(),\n name: z.string(),\n arguments: jsonValueSchema,\n}) satisfies z.ZodType<ToolCall>;\n\n/**\n * Zod schema for tool result metadata.\n */\nexport const toolResultSchema = z.object({\n callId: z.string(),\n outcome: z.enum(['success', 'error']),\n content: jsonValueSchema,\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n result: jsonValueSchema.optional(),\n error: z.string().optional(),\n}) satisfies z.ZodType<ToolResult>;\n\n/**\n * Zod schema for token usage accounting.\n */\nexport const tokenUsageSchema = z.object({\n prompt: z.number().int().min(0),\n completion: z.number().int().min(0),\n total: z.number().int().min(0),\n}) satisfies z.ZodType<TokenUsage>;\n\n/**\n * Zod schema for message input payloads.\n */\nexport const messageInputSchema = z.object({\n role: messageRoleSchema,\n content: z.union([z.string(), z.array(multiModalContentSchema)]),\n metadata: z.record(z.string(), jsonValueSchema).optional(),\n hidden: z.boolean().optional(),\n toolCall: toolCallSchema.optional(),\n toolResult: toolResultSchema.optional(),\n tokenUsage: tokenUsageSchema.optional(),\n goalCompleted: z.boolean().optional(),\n}) satisfies z.ZodType<MessageInput>;\n\n/**\n * Zod schema for messages.\n */\nexport const messageSchema = z\n .object({\n id: z.string(),\n role: messageRoleSchema,\n content: z.union([z.string(), z.array(multiModalContentSchema)]),\n position: z.number().int().min(0),\n createdAt: z.string(),\n metadata: z.record(z.string(), jsonValueSchema),\n hidden: z.boolean(),\n toolCall: toolCallSchema.optional(),\n toolResult: toolResultSchema.optional(),\n tokenUsage: tokenUsageSchema.optional(),\n goalCompleted: z.boolean().optional(),\n })\n .loose() satisfies z.ZodType<Message>;\n\n/**\n * Zod schema for conversation status values.\n */\nexport const conversationStatusSchema = z.enum([\n 'active',\n 'archived',\n 'deleted',\n]) satisfies z.ZodType<ConversationStatus>;\n\n/**\n * Raw conversation shape for storage systems that need direct access to fields.\n */\nexport const conversationShape = {\n schemaVersion: z.number().int().min(1),\n id: z.string(),\n title: z.string().optional(),\n status: conversationStatusSchema,\n metadata: z.record(z.string(), jsonValueSchema),\n ids: z.array(z.string()),\n messages: z.record(z.string(), messageSchema),\n createdAt: z.string(),\n updatedAt: z.string(),\n} as const;\n\n/**\n * Zod schema for serialized conversations.\n */\nexport const conversationSchema = z.object(\n conversationShape,\n) satisfies z.ZodType<Conversation>;\n",
|
|
7
7
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\n/**\n * Converts content to a multi-modal array format.\n * Wraps strings in a text content object, normalizes single items to arrays.\n */\nexport function toMultiModalArray(\n input: string | MultiModalContent | MultiModalContent[],\n): MultiModalContent[] {\n if (typeof input === 'string') return [{ type: 'text', text: input }];\n return Array.isArray(input) ? input : [input];\n}\n\n/**\n * Normalizes content to either a string or multi-modal array.\n * Single MultiModalContent items are wrapped in an array.\n */\nexport function normalizeContent(\n content?: string | MultiModalContent | MultiModalContent[],\n): string | MultiModalContent[] | undefined {\n if (content === undefined) return undefined;\n if (typeof content === 'string') return content;\n return Array.isArray(content) ? content : [content];\n}\n",
|
|
8
8
|
"/**\n * Type-safe hasOwnProperty check.\n * Narrows the type to include the checked property.\n */\nexport function hasOwnProperty<X extends object, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n/**\n * Casts a value to its readonly variant.\n * Used to enforce immutability at the type level.\n */\nexport function toReadonly<T>(value: T): Readonly<T> {\n return value as Readonly<T>;\n}\n",
|
|
9
9
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport { copyContent } from '../multi-modal';\nimport type { AssistantMessage, Message } from '../types';\nimport { toReadonly } from './type-helpers';\n\n/**\n * Creates an immutable Message from a JSON representation.\n * Deep copies nested objects and arrays to ensure immutability.\n */\nexport function createMessage(props: AssistantMessage): AssistantMessage;\nexport function createMessage(props: Message): Message;\nexport function createMessage(\n props: Message | AssistantMessage,\n): Message | AssistantMessage {\n const content =\n typeof props.content === 'string'\n ? props.content\n : toReadonly(props.content.map((part) => part));\n\n const message: Message = {\n id: props.id,\n role: props.role,\n content,\n position: props.position,\n createdAt: props.createdAt,\n metadata: toReadonly({ ...props.metadata }),\n hidden: props.hidden,\n toolCall: props.toolCall ? toReadonly({ ...props.toolCall }) : undefined,\n toolResult: props.toolResult ? toReadonly({ ...props.toolResult }) : undefined,\n tokenUsage: props.tokenUsage ? toReadonly({ ...props.tokenUsage }) : undefined,\n };\n\n if (isAssistantMessage(props)) {\n return toReadonly({\n ...message,\n role: 'assistant',\n goalCompleted: props.goalCompleted,\n });\n }\n\n return toReadonly(message);\n}\n\n/**\n * Converts an immutable Message to a mutable JSON representation.\n * Creates deep copies of all nested objects.\n */\nexport function messageToJSON(message: AssistantMessage): AssistantMessage;\nexport function messageToJSON(message: Message): Message;\nexport function messageToJSON(\n message: Message | AssistantMessage,\n): Message | AssistantMessage {\n const base: Message = {\n id: message.id,\n role: message.role,\n content: copyContent(message.content),\n position: message.position,\n createdAt: message.createdAt,\n metadata: { ...message.metadata },\n hidden: message.hidden,\n toolCall: message.toolCall ? { ...message.toolCall } : undefined,\n toolResult: message.toolResult ? { ...message.toolResult } : undefined,\n tokenUsage: message.tokenUsage ? { ...message.tokenUsage } : undefined,\n };\n\n if (isAssistantMessage(message)) {\n return {\n ...base,\n role: 'assistant',\n goalCompleted: message.goalCompleted,\n };\n }\n\n return base;\n}\n\n/**\n * Extracts the content parts from a message as a multi-modal array.\n * String content is converted to a single text part.\n */\nexport function messageParts(message: Message): ReadonlyArray<MultiModalContent> {\n if (typeof message.content === 'string') {\n return message.content\n ? [{ type: 'text', text: message.content } as MultiModalContent]\n : [];\n }\n return message.content;\n}\n\n/**\n * Extracts all text content from a message, joined by the specified separator.\n * Non-text parts are excluded from the result.\n */\nexport function messageText(message: Message, joiner: string = '\\n\\n'): string {\n if (typeof message.content === 'string') return message.content;\n return messageParts(message)\n .filter((p) => p.type === 'text')\n .map((p: MultiModalContent) => (p.type === 'text' ? p.text : ''))\n .join(joiner);\n}\n\n/**\n * Checks if a message contains any image content.\n */\nexport function messageHasImages(message: Message): boolean {\n return messageParts(message).some((p) => p.type === 'image');\n}\n\n/**\n * Converts a message to a string representation.\n * Images are rendered as markdown image syntax.\n */\nexport function messageToString(message: Message): string {\n if (typeof message.content === 'string') return message.content;\n return messageParts(message)\n .map((part) =>\n part.type === 'text'\n ? part.text\n : `.url})`,\n )\n .join('\\n\\n');\n}\n\n/**\n * Type guard for narrowing a Message to an AssistantMessage.\n */\nexport function isAssistantMessage(message: Message): message is AssistantMessage {\n return message.role === 'assistant';\n}\n",
|
|
@@ -14,12 +14,14 @@
|
|
|
14
14
|
"/**\n * Error codes for Conversationalist errors (kebab-case with `error:` prefix).\n */\nexport type ConversationalistErrorCode =\n | 'error:locked'\n | 'error:invalid-input'\n | 'error:invalid-position'\n | 'error:invalid-tool-reference'\n | 'error:duplicate-id'\n | 'error:not-found'\n | 'error:serialization'\n | 'error:validation';\n\n/**\n * Base error class for all Conversationalist errors.\n *\n * Provides structured error information with error codes, context data,\n * and cause chains for better debugging.\n */\nexport class ConversationalistError extends Error {\n /** Structured error code */\n readonly code: ConversationalistErrorCode;\n\n /** Additional context data */\n readonly context?: Record<string, unknown> | undefined;\n\n /** Underlying cause (if any) */\n override readonly cause?: Error | undefined;\n\n constructor(\n code: ConversationalistErrorCode,\n message: string,\n options?: {\n context?: Record<string, unknown> | undefined;\n cause?: Error | undefined;\n },\n ) {\n super(message);\n this.name = 'ConversationalistError';\n this.code = code;\n this.context = options?.context;\n this.cause = options?.cause;\n\n // Maintain proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ConversationalistError);\n }\n }\n\n /**\n * Formats the error as a detailed string with code and context.\n */\n toDetailedString(): string {\n const parts = [`[${this.code}] ${this.message}`];\n\n if (this.context && Object.keys(this.context).length > 0) {\n parts.push(`Context: ${JSON.stringify(this.context, null, 2)}`);\n }\n\n if (this.cause) {\n parts.push(`Caused by: ${this.cause.message}`);\n }\n\n return parts.join('\\n');\n }\n}\n\n/**\n * Creates a lock error (ERR_LOCKED).\n * Thrown when a conversation is already being modified.\n */\nexport function createLockedError(conversationId: string): ConversationalistError {\n return new ConversationalistError(\n 'error:locked',\n `conversation ${conversationId} is locked (concurrent modification detected)`,\n { context: { conversationId } },\n );\n}\n\n/**\n * Creates an invalid input error (ERR_INVALID_INPUT).\n * Thrown when message input data is invalid.\n */\nexport function createInvalidInputError(\n message: string,\n context?: Record<string, unknown>,\n): ConversationalistError {\n return new ConversationalistError('error:invalid-input', message, { context });\n}\n\n/**\n * Creates an invalid position error (ERR_INVALID_POSITION).\n * Thrown when positions are non-contiguous or invalid.\n */\nexport function createInvalidPositionError(\n expected: number,\n actual: number,\n): ConversationalistError {\n return new ConversationalistError(\n 'error:invalid-position',\n `invalid position: expected ${expected}, got ${actual}`,\n { context: { expected, actual } },\n );\n}\n\n/**\n * Creates an invalid tool reference error (ERR_INVALID_TOOL_REFERENCE).\n * Thrown when a tool result references a non-existent tool-use message.\n */\nexport function createInvalidToolReferenceError(callId: string): ConversationalistError {\n return new ConversationalistError(\n 'error:invalid-tool-reference',\n `tool result references non-existent tool-use: ${callId}`,\n { context: { callId } },\n );\n}\n\n/**\n * Creates a duplicate ID error (ERR_DUPLICATE_ID).\n * Thrown when a conversation with the given ID already exists.\n */\nexport function createDuplicateIdError(id: string): ConversationalistError {\n return new ConversationalistError(\n 'error:duplicate-id',\n `conversation with id ${id} already exists`,\n { context: { id } },\n );\n}\n\n/**\n * Creates a not found error (ERR_NOT_FOUND).\n * Thrown when a conversation cannot be found.\n */\nexport function createNotFoundError(id: string): ConversationalistError {\n return new ConversationalistError(\n 'error:not-found',\n `conversation with id ${id} not found`,\n {\n context: { id },\n },\n );\n}\n\n/**\n * Creates a serialization error (ERR_SERIALIZATION).\n * Thrown when JSON serialization/deserialization fails.\n */\nexport function createSerializationError(\n message: string,\n cause?: Error,\n): ConversationalistError {\n return new ConversationalistError('error:serialization', message, { cause });\n}\n\n/**\n * Creates a validation error (ERR_VALIDATION).\n * Thrown when data validation fails (e.g., Zod schema validation).\n */\nexport function createValidationError(\n message: string,\n context?: Record<string, unknown>,\n cause?: Error,\n): ConversationalistError {\n return new ConversationalistError('error:validation', message, { context, cause });\n}\n",
|
|
15
15
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\n/**\n * Current schema version for serialized conversation data.\n * Increment when making breaking changes to the schema.\n */\nexport const CURRENT_SCHEMA_VERSION = 3;\n\n/**\n * JSON-serializable value types.\n */\nexport type JSONPrimitive = string | number | boolean | null;\nexport type JSONValue = JSONPrimitive | JSONValue[] | { [key: string]: JSONValue };\n\n/**\n * Supported message roles in a conversation.\n */\nexport type MessageRole =\n | 'user'\n | 'assistant'\n | 'system'\n | 'developer'\n | 'tool-use'\n | 'tool-result'\n | 'snapshot';\n\n/**\n * Tool call metadata for tool-use messages.\n */\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: JSONValue;\n}\n\n/**\n * Tool execution result metadata for tool-result messages.\n */\nexport interface ToolResult {\n callId: string;\n outcome: 'success' | 'error';\n content: JSONValue;\n toolCallId?: string | undefined;\n toolName?: string | undefined;\n result?: JSONValue | undefined;\n error?: string | undefined;\n}\n\n/**\n * Token usage accounting for a message.\n */\nexport interface TokenUsage {\n prompt: number;\n completion: number;\n total: number;\n}\n\n/**\n * Mutable input shape for creating a message.\n */\nexport interface MessageInput {\n role: MessageRole;\n content: string | MultiModalContent[];\n metadata?: Record<string, JSONValue> | undefined;\n hidden?: boolean | undefined;\n toolCall?: ToolCall | undefined;\n toolResult?: ToolResult | undefined;\n tokenUsage?: TokenUsage | undefined;\n /** Indicates if this message represents goal completion (assistant only) */\n goalCompleted?: boolean | undefined;\n}\n\n/**\n * Immutable message shape exposed by the library.\n */\nexport interface Message {\n id: string;\n role: MessageRole;\n content: string | ReadonlyArray<MultiModalContent>;\n position: number;\n createdAt: string;\n metadata: Readonly<Record<string, JSONValue>>;\n hidden: boolean;\n toolCall?: Readonly<ToolCall> | undefined;\n toolResult?: Readonly<ToolResult> | undefined;\n tokenUsage?: Readonly<TokenUsage> | undefined;\n}\n\n/**\n * Assistant-only message shape with optional goal completion metadata.\n */\nexport interface AssistantMessage extends Message {\n role: 'assistant';\n /** Indicates if this message represents goal completion */\n goalCompleted?: boolean | undefined;\n}\n\n/**\n * Status values for a conversation lifecycle.\n */\nexport type ConversationStatus = 'active' | 'archived' | 'deleted';\n\n/**\n * Immutable conversation state.\n */\nexport interface Conversation {\n schemaVersion: number;\n id: string;\n title?: string | undefined;\n status: ConversationStatus;\n metadata: Readonly<Record<string, JSONValue>>;\n ids: ReadonlyArray<string>;\n messages: Readonly<Record<string, Message>>;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * A function that estimates the number of tokens in a message.\n */\nexport type TokenEstimator = (message: Message) => number;\n\n/**\n * A plugin that can transform a MessageInput before it is appended.\n */\nexport type MessagePlugin = (input: MessageInput) => MessageInput;\n\n/**\n * Serialized form of a single node in the conversation history tree.\n */\nexport interface HistoryNodeSnapshot {\n conversation: Conversation;\n children: HistoryNodeSnapshot[];\n}\n\n/**\n * Serialized form of the entire conversation history.\n */\nexport interface ConversationHistorySnapshot {\n root: HistoryNodeSnapshot;\n currentPath: number[];\n}\n\n/**\n * Base options for all export operations.\n */\nexport interface ExportOptions {\n /**\n * When true, strips transient metadata (keys starting with '_').\n * @default false\n */\n stripTransient?: boolean;\n\n /**\n * When false, hidden messages are omitted from export output.\n * @default true\n */\n includeHidden?: boolean;\n\n /**\n * When true, hidden message content is replaced with a redacted placeholder.\n * Only applies when includeHidden is true.\n * @default false\n */\n redactHiddenContent?: boolean;\n\n /**\n * Placeholder used when redacting tool or hidden content.\n * @default \"[REDACTED]\"\n */\n redactedPlaceholder?: string;\n\n /**\n * When true, redacts tool call arguments with '[REDACTED]'.\n * @default false\n */\n redactToolArguments?: boolean;\n\n /**\n * When true, redacts tool result content with '[REDACTED]'.\n * @default false\n */\n redactToolResults?: boolean;\n}\n\n/**\n * Options for exporting to markdown format.\n */\nexport interface ToMarkdownOptions extends ExportOptions {\n /**\n * When true, includes YAML frontmatter with full metadata for lossless round-trip.\n * Headers include message ID: `### Role (msg-id)`\n * @default false\n */\n includeMetadata?: boolean;\n}\n",
|
|
16
16
|
"import type {\n Message as ExternalMessage,\n MultiModalContent,\n} from '@lasercat/homogenaize';\n\nimport {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n} from './environment';\nimport {\n createInvalidPositionError,\n createInvalidToolReferenceError,\n createSerializationError,\n} from './errors';\nimport { copyContent } from './multi-modal';\nimport type {\n AssistantMessage,\n Conversation,\n ConversationStatus,\n JSONValue,\n Message,\n MessageInput,\n} from './types';\nimport { CURRENT_SCHEMA_VERSION } from './types';\nimport {\n createMessage,\n messageHasImages,\n normalizeContent,\n toReadonly,\n} from './utilities';\nimport { getOrderedMessages, toIdRecord } from './utilities/message-store';\n\nexport type { ConversationEnvironment } from './environment';\n\ntype ToolUseIndex = Map<string, { name: string }>;\n\nconst buildToolUseIndex = (messages: ReadonlyArray<Message>): ToolUseIndex =>\n messages.reduce((index, message) => {\n if (message.role === 'tool-use' && message.toolCall) {\n index.set(message.toolCall.id, { name: message.toolCall.name });\n }\n return index;\n }, new Map<string, { name: string }>());\n\nconst registerToolUse = (\n index: ToolUseIndex,\n toolCall: { id: string; name: string },\n): ToolUseIndex => {\n const next = new Map(index);\n next.set(toolCall.id, { name: toolCall.name });\n return next;\n};\n\nconst assertToolReference = (index: ToolUseIndex, callId: string): void => {\n if (!index.has(callId)) {\n throw createInvalidToolReferenceError(callId);\n }\n};\n\nfunction partitionAppendArgs(\n args: Array<MessageInput | Partial<ConversationEnvironment>>,\n): {\n inputs: MessageInput[];\n environment?: Partial<ConversationEnvironment> | undefined;\n} {\n if (args.length === 0) {\n return { inputs: [] };\n }\n\n const last = args[args.length - 1];\n if (isConversationEnvironmentParameter(last)) {\n return {\n inputs: args.slice(0, -1) as MessageInput[],\n environment: last,\n };\n }\n\n return { inputs: args as MessageInput[] };\n}\n\n/**\n * Creates a new immutable conversation with optional metadata and environment overrides.\n */\nexport function createConversation(\n options?: {\n id?: string;\n title?: string;\n status?: ConversationStatus;\n metadata?: Record<string, JSONValue>;\n },\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n const conv: Conversation = {\n schemaVersion: CURRENT_SCHEMA_VERSION,\n id: options?.id ?? resolvedEnvironment.randomId(),\n title: options?.title,\n status: options?.status ?? 'active',\n metadata: { ...(options?.metadata ?? {}) },\n ids: [],\n messages: {},\n createdAt: now,\n updatedAt: now,\n };\n return toReadonly(conv);\n}\n\n/**\n * Appends one or more messages to a conversation.\n * Validates tool-result references and returns a new immutable conversation.\n */\nexport function appendMessages(\n conversation: Conversation,\n ...inputs: MessageInput[]\n): Conversation;\nexport function appendMessages(\n conversation: Conversation,\n ...inputsAndEnvironment: [...MessageInput[], Partial<ConversationEnvironment>]\n): Conversation;\nexport function appendMessages(\n conversation: Conversation,\n ...args: (MessageInput | Partial<ConversationEnvironment>)[]\n): Conversation {\n const { inputs, environment } = partitionAppendArgs(args);\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n const startPosition = conversation.ids.length;\n const initialToolUses = buildToolUseIndex(getOrderedMessages(conversation));\n\n const { messages } = inputs.reduce<{\n toolUses: ToolUseIndex;\n messages: Message[];\n }>(\n (state, input, index) => {\n // Apply plugins to the input\n const processedInput = resolvedEnvironment.plugins.reduce(\n (acc, plugin) => plugin(acc),\n input,\n );\n\n if (processedInput.role === 'tool-result' && processedInput.toolResult) {\n assertToolReference(state.toolUses, processedInput.toolResult.callId);\n }\n\n const normalizedContent = normalizeContent(processedInput.content) as\n | string\n | MultiModalContent[];\n\n const baseMessage = {\n id: resolvedEnvironment.randomId(),\n role: processedInput.role,\n content: normalizedContent,\n position: startPosition + index,\n createdAt: now,\n metadata: { ...(processedInput.metadata ?? {}) },\n hidden: processedInput.hidden ?? false,\n toolCall: processedInput.toolCall,\n toolResult: processedInput.toolResult,\n tokenUsage: processedInput.tokenUsage,\n };\n\n let message: Message;\n if (processedInput.role === 'assistant') {\n const assistantMessage: AssistantMessage = {\n ...baseMessage,\n role: 'assistant',\n goalCompleted: processedInput.goalCompleted,\n };\n message = createMessage(assistantMessage);\n } else {\n message = createMessage(baseMessage);\n }\n\n const toolUses =\n processedInput.role === 'tool-use' && processedInput.toolCall\n ? registerToolUse(state.toolUses, processedInput.toolCall)\n : state.toolUses;\n\n return {\n toolUses,\n messages: [...state.messages, message],\n };\n },\n { toolUses: initialToolUses, messages: [] },\n );\n\n const messageIds = messages.map((message) => message.id);\n const next: Conversation = {\n ...conversation,\n ids: [...conversation.ids, ...messageIds],\n messages: { ...conversation.messages, ...toIdRecord(messages) },\n updatedAt: now,\n };\n return toReadonly(next);\n}\n\n/**\n * Appends a user message to the conversation.\n */\nexport function appendUserMessage(\n conversation: Conversation,\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n return environment\n ? appendMessages(conversation, { role: 'user', content, metadata }, environment)\n : appendMessages(conversation, { role: 'user', content, metadata });\n}\n\n/**\n * Appends an assistant message to the conversation.\n */\nexport function appendAssistantMessage(\n conversation: Conversation,\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n return environment\n ? appendMessages(conversation, { role: 'assistant', content, metadata }, environment)\n : appendMessages(conversation, { role: 'assistant', content, metadata });\n}\n\n/**\n * Appends a system message to the conversation.\n */\nexport function appendSystemMessage(\n conversation: Conversation,\n content: string,\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n return environment\n ? appendMessages(conversation, { role: 'system', content, metadata }, environment)\n : appendMessages(conversation, { role: 'system', content, metadata });\n}\n\n/**\n * Returns messages from a conversation in order.\n * Hidden messages are excluded by default.\n */\nexport function getMessages(\n conversation: Conversation,\n options?: { includeHidden?: boolean },\n): Message[] {\n const includeHidden = options?.includeHidden ?? false;\n const ordered = getOrderedMessages(conversation);\n return includeHidden ? ordered : ordered.filter((m) => !m.hidden);\n}\n\n/**\n * Returns the message at a specific position index.\n */\nexport function getMessageAtPosition(\n conversation: Conversation,\n position: number,\n): Message | undefined {\n const id = conversation.ids[position];\n return id ? conversation.messages[id] : undefined;\n}\n\n/**\n * Returns all message IDs for the conversation in order.\n */\nexport function getMessageIds(conversation: Conversation): string[] {\n return [...conversation.ids];\n}\n\n/**\n * Finds a message by its unique identifier.\n */\nexport function getMessageById(\n conversation: Conversation,\n id: string,\n): Message | undefined {\n return conversation.messages[id];\n}\n\n/**\n * Filters messages using a predicate.\n */\nexport function searchConversationMessages(\n conversation: Conversation,\n predicate: (m: Message) => boolean,\n): Message[] {\n return getOrderedMessages(conversation).filter(predicate);\n}\n\n/**\n * Computes basic statistics about a conversation's messages.\n */\nexport function getStatistics(conversation: Conversation): {\n total: number;\n byRole: Record<string, number>;\n hidden: number;\n withImages: number;\n} {\n const ordered = getOrderedMessages(conversation);\n const stats = ordered.reduce(\n (acc, message) => {\n const byRole = {\n ...acc.byRole,\n [message.role]: (acc.byRole[message.role] ?? 0) + 1,\n };\n\n return {\n byRole,\n hidden: acc.hidden + (message.hidden ? 1 : 0),\n withImages: acc.withImages + (messageHasImages(message) ? 1 : 0),\n };\n },\n { byRole: {} as Record<string, number>, hidden: 0, withImages: 0 },\n );\n return { total: ordered.length, ...stats };\n}\n\n/**\n * Returns true if the conversation contains any system messages.\n */\nexport function hasSystemMessage(conversation: Conversation): boolean {\n return getOrderedMessages(conversation).some((m) => m.role === 'system');\n}\n\n/**\n * Returns the first system message in the conversation, if any.\n */\nexport function getFirstSystemMessage(conversation: Conversation): Message | undefined {\n return getOrderedMessages(conversation).find((m) => m.role === 'system');\n}\n\n/**\n * Returns all system messages in the conversation.\n */\nexport function getSystemMessages(conversation: Conversation): ReadonlyArray<Message> {\n return getOrderedMessages(conversation).filter((m) => m.role === 'system');\n}\n\n/**\n * Prepends a system message and renumbers existing messages.\n */\nexport function prependSystemMessage(\n conversation: Conversation,\n content: string,\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const newMessage: Message = createMessage({\n id: resolvedEnvironment.randomId(),\n role: 'system',\n content,\n position: 0,\n createdAt: now,\n metadata: { ...(metadata ?? {}) },\n hidden: false,\n toolCall: undefined,\n toolResult: undefined,\n tokenUsage: undefined,\n });\n\n const ordered = getOrderedMessages(conversation);\n const renumberedMessages = ordered.map((message) =>\n createMessage({\n id: message.id,\n role: message.role,\n content: copyContent(message.content),\n position: message.position + 1,\n createdAt: message.createdAt,\n metadata: { ...message.metadata },\n hidden: message.hidden,\n toolCall: message.toolCall,\n toolResult: message.toolResult,\n tokenUsage: message.tokenUsage,\n }),\n );\n\n return toReadonly({\n ...conversation,\n ids: [newMessage.id, ...ordered.map((message) => message.id)],\n messages: toIdRecord([newMessage, ...renumberedMessages]),\n updatedAt: now,\n });\n}\n\n/**\n * Replaces the first system message, or prepends one if none exist.\n */\nexport function replaceSystemMessage(\n conversation: Conversation,\n content: string,\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n const ordered = getOrderedMessages(conversation);\n const firstSystemIndex = ordered.findIndex((m) => m.role === 'system');\n\n if (firstSystemIndex === -1) {\n return prependSystemMessage(conversation, content, metadata, resolvedEnvironment);\n }\n\n const original = ordered[firstSystemIndex]!;\n const replaced: Message = createMessage({\n id: original.id,\n role: 'system',\n content,\n position: original.position,\n createdAt: original.createdAt,\n metadata: { ...(metadata ?? original.metadata) },\n hidden: original.hidden,\n toolCall: undefined,\n toolResult: undefined,\n tokenUsage: undefined,\n });\n\n const next: Conversation = {\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [replaced.id]: replaced },\n updatedAt: now,\n };\n return toReadonly(next);\n}\n\n/**\n * Collapses multiple system messages into a single deduplicated message.\n */\nexport function collapseSystemMessages(\n conversation: Conversation,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const ordered = getOrderedMessages(conversation);\n const systemMessages = ordered.filter((m) => m.role === 'system');\n\n if (systemMessages.length <= 1) {\n return conversation;\n }\n\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const { parts } = systemMessages.reduce(\n (state, message) => {\n const contentStr =\n typeof message.content === 'string'\n ? message.content\n : message.content\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('');\n\n if (!contentStr || state.seen.has(contentStr)) {\n return state;\n }\n\n const seen = new Set(state.seen);\n seen.add(contentStr);\n\n return { seen, parts: [...state.parts, contentStr] };\n },\n { seen: new Set<string>(), parts: [] as string[] },\n );\n\n const collapsedContent = parts.join('\\n');\n const firstSystemMsg = systemMessages[0]!;\n\n const collapsed: Message = createMessage({\n id: firstSystemMsg.id,\n role: 'system',\n content: collapsedContent,\n position: firstSystemMsg.position,\n createdAt: firstSystemMsg.createdAt,\n metadata: { ...firstSystemMsg.metadata },\n hidden: firstSystemMsg.hidden,\n toolCall: undefined,\n toolResult: undefined,\n tokenUsage: undefined,\n });\n\n const systemIdsToRemove = systemMessages.slice(1).reduce((ids, message) => {\n const nextIds = new Set(ids);\n nextIds.add(message.id);\n return nextIds;\n }, new Set<string>());\n\n const messages = ordered\n .filter((m) => !systemIdsToRemove.has(m.id))\n .map((m) => (m.id === firstSystemMsg.id ? collapsed : m));\n\n const renumbered = messages.map((message, index) => {\n if (message.position === index) return message;\n return createMessage({\n id: message.id,\n role: message.role,\n content: copyContent(message.content),\n position: index,\n createdAt: message.createdAt,\n metadata: { ...message.metadata },\n hidden: message.hidden,\n toolCall: message.toolCall,\n toolResult: message.toolResult,\n tokenUsage: message.tokenUsage,\n });\n });\n\n const next: Conversation = {\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n };\n return toReadonly(next);\n}\n\n/**\n * Replaces message content at the specified position with a placeholder.\n * Clears tool and token metadata for the redacted message.\n */\nexport function redactMessageAtPosition(\n conversation: Conversation,\n position: number,\n placeholder: string = '[REDACTED]',\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n if (position < 0 || position >= conversation.ids.length) {\n throw createInvalidPositionError(conversation.ids.length - 1, position);\n }\n\n const id = conversation.ids[position];\n const original = id ? conversation.messages[id] : undefined;\n if (!original) {\n throw createInvalidPositionError(conversation.ids.length - 1, position);\n }\n const redacted: Message = createMessage({\n id: original.id,\n role: original.role,\n content: placeholder,\n position: original.position,\n createdAt: original.createdAt,\n metadata: { ...original.metadata },\n hidden: original.hidden,\n toolCall: undefined,\n toolResult: undefined,\n tokenUsage: undefined,\n });\n\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n const next: Conversation = {\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [redacted.id]: redacted },\n updatedAt: now,\n };\n return toReadonly(next);\n}\n\n/**\n * Migrates a conversation JSON object to the current schema version.\n * Handles data from older versions that may not have a schemaVersion field.\n */\nexport function migrateConversation(json: unknown): Conversation {\n // Handle non-object input\n if (typeof json !== 'object' || json === null || Array.isArray(json)) {\n return {\n schemaVersion: CURRENT_SCHEMA_VERSION,\n id: '',\n status: 'active',\n metadata: {},\n ids: [],\n messages: {},\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n }\n\n const data = json as Conversation & { messages?: unknown };\n const rawMessages = data.messages;\n let messages: Record<string, Message> = {};\n let ids: string[] = [];\n const rawIds = (data as { ids?: unknown }).ids;\n const isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((item) => typeof item === 'string');\n\n if (Array.isArray(rawMessages)) {\n const rawMessageArray = rawMessages as Message[];\n ids = rawMessageArray.map((message) => message.id);\n messages = Object.fromEntries(\n rawMessageArray.map((message) => [message.id, message]),\n );\n } else if (rawMessages && typeof rawMessages === 'object') {\n messages = { ...(rawMessages as Record<string, Message>) };\n if (isStringArray(rawIds) && rawIds.length > 0) {\n ids = [...rawIds];\n } else {\n ids = Object.values(messages)\n .sort((a, b) => a.position - b.position)\n .map((message) => message.id);\n }\n }\n\n if (ids.length > 0) {\n ids = ids.filter((id) => id in messages);\n const missing = Object.keys(messages).filter((id) => !ids.includes(id));\n if (missing.length > 0) {\n const sortedMissing = missing.sort(\n (a, b) => (messages[a]?.position ?? 0) - (messages[b]?.position ?? 0),\n );\n ids = [...ids, ...sortedMissing];\n }\n }\n\n // If no schemaVersion, assume pre-versioning data (version 0) and add it\n if (!('schemaVersion' in json)) {\n return {\n ...data,\n schemaVersion: CURRENT_SCHEMA_VERSION,\n ids,\n messages,\n };\n }\n\n // Future: add migration logic between versions here\n return { ...data, ids, messages };\n}\n\n/**\n * Reconstructs a conversation from a JSON object.\n * Automatically migrates data from older schema versions.\n * Validates message positions are contiguous and tool results reference valid calls.\n */\nexport function deserializeConversation(json: unknown): Conversation {\n // Migrate to current schema version\n const migrated = migrateConversation(json);\n\n try {\n const orderedMessages = migrated.ids.map((id, index) => {\n const message = migrated.messages[id];\n if (!message) {\n throw createSerializationError(`missing message for id ${id}`);\n }\n if (message.position !== index) {\n throw createInvalidPositionError(index, message.position);\n }\n return message;\n });\n\n orderedMessages.reduce<{ toolUses: ToolUseIndex }>(\n (state, message) => {\n if (message.role === 'tool-use' && message.toolCall) {\n return {\n toolUses: registerToolUse(state.toolUses, message.toolCall),\n };\n }\n\n if (message.role === 'tool-result' && message.toolResult) {\n assertToolReference(state.toolUses, message.toolResult.callId);\n }\n\n return state;\n },\n { toolUses: new Map<string, { name: string }>() },\n );\n\n const messageInstances: Message[] = orderedMessages.map((m) => createMessage(m));\n const conv: Conversation = {\n schemaVersion: migrated.schemaVersion,\n id: migrated.id,\n title: migrated.title,\n status: migrated.status,\n metadata: { ...migrated.metadata },\n ids: orderedMessages.map((message) => message.id),\n messages: toIdRecord(messageInstances),\n createdAt: migrated.createdAt,\n updatedAt: migrated.updatedAt,\n };\n return toReadonly(conv);\n } catch (error) {\n throw createSerializationError(\n `failed to deserialize conversation: ${\n error instanceof Error ? error.message : String(error)\n }`,\n error as Error,\n );\n }\n}\n\n/**\n * Converts a conversation into a provider-agnostic external message array.\n * Hidden messages are skipped and roles are normalized.\n */\nexport function toChatMessages(conversation: Conversation): ExternalMessage[] {\n const roleMap: Record<string, 'user' | 'assistant' | 'system'> = {\n user: 'user',\n assistant: 'assistant',\n system: 'system',\n developer: 'system',\n 'tool-use': 'assistant',\n 'tool-result': 'user',\n snapshot: 'system',\n };\n\n const result: ExternalMessage[] = [];\n for (const message of getOrderedMessages(conversation)) {\n if (message.hidden) continue;\n const externalRole = roleMap[message.role] as 'user' | 'assistant' | 'system';\n result.push({\n role: externalRole,\n content: message.content as string | MultiModalContent[],\n });\n }\n return result;\n}\n",
|
|
17
|
+
"import type { MultiModalContent } from './multi-modal';\nimport {\n conversationSchema,\n conversationStatusSchema,\n jsonValueSchema,\n messageInputSchema,\n messageRoleSchema,\n messageSchema,\n multiModalContentSchema,\n tokenUsageSchema,\n toolCallSchema,\n toolResultSchema,\n} from './schemas';\nimport type {\n Conversation,\n ConversationStatus,\n JSONValue,\n Message,\n MessageInput,\n MessageRole,\n TokenUsage,\n ToolCall,\n ToolResult,\n} from './types';\n\ntype SchemaGuard = {\n safeParse: (value: unknown) => { success: boolean };\n};\n\nfunction isSchema<T>(schema: SchemaGuard, value: unknown): value is T {\n return schema.safeParse(value).success;\n}\n\nexport function isConversation(value: unknown): value is Conversation {\n return isSchema(conversationSchema, value);\n}\n\nexport function isConversationStatus(value: unknown): value is ConversationStatus {\n return isSchema(conversationStatusSchema, value);\n}\n\nexport function isJSONValue(value: unknown): value is JSONValue {\n return isSchema(jsonValueSchema, value);\n}\n\nexport function isMessage(value: unknown): value is Message {\n return isSchema(messageSchema, value);\n}\n\nexport function isMessageInput(value: unknown): value is MessageInput {\n return isSchema(messageInputSchema, value);\n}\n\nexport function isMessageRole(value: unknown): value is MessageRole {\n return isSchema(messageRoleSchema, value);\n}\n\nexport function isMultiModalContent(value: unknown): value is MultiModalContent {\n return isSchema(multiModalContentSchema, value);\n}\n\nexport function isTokenUsage(value: unknown): value is TokenUsage {\n return isSchema(tokenUsageSchema, value);\n}\n\nexport function isToolCall(value: unknown): value is ToolCall {\n return isSchema(toolCallSchema, value);\n}\n\nexport function isToolResult(value: unknown): value is ToolResult {\n return isSchema(toolResultSchema, value);\n}\n",
|
|
17
18
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n simpleTokenEstimator,\n} from './environment';\nimport { copyContent } from './multi-modal';\nimport type { AssistantMessage, Conversation, Message, TokenEstimator } from './types';\nimport { createMessage, isAssistantMessage, toReadonly } from './utilities';\nimport { getOrderedMessages, toIdRecord } from './utilities/message-store';\n\nexport { simpleTokenEstimator };\n\nconst cloneMessageWithPosition = (\n message: Message,\n position: number,\n content: string | ReadonlyArray<MultiModalContent>,\n): Message => {\n const baseMessage = {\n id: message.id,\n role: message.role,\n content,\n position,\n createdAt: message.createdAt,\n metadata: { ...message.metadata },\n hidden: message.hidden,\n toolCall: message.toolCall ? { ...message.toolCall } : undefined,\n toolResult: message.toolResult ? { ...message.toolResult } : undefined,\n tokenUsage: message.tokenUsage ? { ...message.tokenUsage } : undefined,\n };\n\n if (isAssistantMessage(message)) {\n const assistantMessage: AssistantMessage = {\n ...baseMessage,\n role: 'assistant',\n goalCompleted: message.goalCompleted,\n };\n return createMessage(assistantMessage);\n }\n\n return createMessage(baseMessage);\n};\n\n/**\n * Estimates total tokens in a conversation using the provided estimator function.\n * If no estimator is provided, the environment's default estimator is used.\n */\nexport function estimateConversationTokens(\n conversation: Conversation,\n estimateTokens?: TokenEstimator,\n environment?: Partial<ConversationEnvironment>,\n): number {\n let estimator = estimateTokens;\n let env = environment;\n\n if (\n !environment &&\n estimateTokens &&\n isConversationEnvironmentParameter(estimateTokens)\n ) {\n env = estimateTokens;\n estimator = undefined;\n }\n\n const resolvedEnvironment = resolveConversationEnvironment(env);\n const finalEstimator =\n typeof estimator === 'function' ? estimator : resolvedEnvironment.estimateTokens;\n\n return getOrderedMessages(conversation).reduce(\n (total, message) => total + finalEstimator(message),\n 0,\n );\n}\n\n/**\n * Options for truncateToTokenLimit.\n */\nexport interface TruncateOptions {\n estimateTokens?: TokenEstimator;\n preserveSystemMessages?: boolean;\n preserveLastN?: number;\n}\n\n/**\n * Truncates conversation to fit within an estimated token limit.\n * Removes oldest messages first while preserving system messages and optionally the last N messages.\n * If no estimator is provided, the environment's default estimator is used.\n */\nexport function truncateToTokenLimit(\n conversation: Conversation,\n maxTokens: number,\n optionsOrEstimator?: TruncateOptions | TokenEstimator,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n // Handle overloaded arguments\n let options: TruncateOptions = {};\n let env = environment;\n\n if (typeof optionsOrEstimator === 'function') {\n options = { estimateTokens: optionsOrEstimator };\n } else if (optionsOrEstimator) {\n // If environment was not explicitly passed, check if optionsOrEstimator IS the environment\n if (!environment && isConversationEnvironmentParameter(optionsOrEstimator)) {\n // Disambiguate between TruncateOptions and ConversationEnvironment.\n // Environment fields (now, randomId, non-empty plugins) take priority because they're\n // exclusive to ConversationEnvironment, while estimateTokens exists in both types.\n const candidate = optionsOrEstimator as Record<string, unknown>;\n const hasEnvFields = !!(\n candidate['now'] ||\n candidate['randomId'] ||\n (Array.isArray(candidate['plugins']) && candidate['plugins'].length > 0)\n );\n\n if (hasEnvFields) {\n // Treat as environment, not options\n env = optionsOrEstimator;\n } else {\n // Has estimateTokens but no exclusive environment fields, treat as options\n options = optionsOrEstimator;\n }\n } else {\n options = optionsOrEstimator;\n }\n }\n\n const resolvedEnvironment = resolveConversationEnvironment(env);\n const estimator = options.estimateTokens ?? resolvedEnvironment.estimateTokens;\n const preserveSystem = options.preserveSystemMessages ?? true;\n const preserveLastN = options.preserveLastN ?? 0;\n\n // Calculate current token count\n const currentTokens = estimateConversationTokens(\n conversation,\n estimator,\n resolvedEnvironment,\n );\n if (currentTokens <= maxTokens) {\n return conversation;\n }\n\n const now = resolvedEnvironment.now();\n\n // Separate messages into categories\n const orderedMessages = getOrderedMessages(conversation);\n const systemMessages = preserveSystem\n ? orderedMessages.filter((m) => m.role === 'system')\n : [];\n\n const nonSystemMessages = orderedMessages.filter((m) => m.role !== 'system');\n\n // Preserve the last N non-system messages\n const protectedMessages =\n preserveLastN > 0 ? nonSystemMessages.slice(-preserveLastN) : [];\n\n const removableMessages =\n preserveLastN > 0 ? nonSystemMessages.slice(0, -preserveLastN) : nonSystemMessages;\n\n // Calculate tokens for protected content\n const systemTokens = systemMessages.reduce((sum, m) => sum + estimator(m), 0);\n const protectedTokens = protectedMessages.reduce((sum, m) => sum + estimator(m), 0);\n const availableTokens = maxTokens - systemTokens - protectedTokens;\n\n if (availableTokens <= 0) {\n // Can only fit system and protected messages\n const allMessages = [...systemMessages, ...protectedMessages];\n const renumbered = allMessages.map((message, index) =>\n cloneMessageWithPosition(message, index, copyContent(message.content)),\n );\n\n return toReadonly({\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n });\n }\n\n // Keep as many removable messages as possible, starting from the end (most recent)\n const keptRemovable: Message[] = [];\n let usedTokens = 0;\n\n for (let i = removableMessages.length - 1; i >= 0; i--) {\n const message = removableMessages[i]!;\n const messageTokens = estimator(message);\n if (usedTokens + messageTokens <= availableTokens) {\n keptRemovable.unshift(message);\n usedTokens += messageTokens;\n } else {\n break;\n }\n }\n\n // Combine: system messages + kept removable + protected\n const allMessages = [...systemMessages, ...keptRemovable, ...protectedMessages];\n\n // Sort by original position then renumber\n allMessages.sort((a, b) => a.position - b.position);\n\n const renumbered = allMessages.map((message, index) =>\n cloneMessageWithPosition(message, index, copyContent(message.content)),\n );\n\n return toReadonly({\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n });\n}\n\n/**\n * Returns the last N messages from the conversation.\n * By default excludes system messages and hidden messages.\n */\nexport function getRecentMessages(\n conversation: Conversation,\n count: number,\n options?: {\n includeHidden?: boolean;\n includeSystem?: boolean;\n },\n): ReadonlyArray<Message> {\n const includeHidden = options?.includeHidden ?? false;\n const includeSystem = options?.includeSystem ?? false;\n\n const filtered = getOrderedMessages(conversation).filter((m) => {\n if (!includeHidden && m.hidden) return false;\n if (!includeSystem && m.role === 'system') return false;\n return true;\n });\n\n return filtered.slice(-count);\n}\n\n/**\n * Truncates conversation to keep only messages from the specified position onwards.\n * Optionally preserves system messages regardless of position.\n */\nexport function truncateFromPosition(\n conversation: Conversation,\n position: number,\n options?: {\n preserveSystemMessages?: boolean;\n },\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const preserveSystem = options?.preserveSystemMessages ?? true;\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const ordered = getOrderedMessages(conversation);\n const systemMessages = preserveSystem\n ? ordered.filter((m) => m.role === 'system' && m.position < position)\n : [];\n\n const keptMessages = ordered.filter((m) => m.position >= position);\n const allMessages = [...systemMessages, ...keptMessages];\n\n // Renumber positions\n const renumbered = allMessages.map((message, index) =>\n cloneMessageWithPosition(message, index, copyContent(message.content)),\n );\n\n return toReadonly({\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n });\n}\n",
|
|
18
19
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport {\n type ConversationEnvironment,\n resolveConversationEnvironment,\n} from './environment';\nimport type {\n AssistantMessage,\n Conversation,\n JSONValue,\n Message,\n TokenUsage,\n} from './types';\nimport { createMessage, isAssistantMessage, toReadonly } from './utilities';\nimport { getOrderedMessages, toIdRecord } from './utilities/message-store';\n\nconst STREAMING_KEY = '__streaming';\n\nconst cloneMessage = (\n original: Message,\n overrides: {\n content?: string | MultiModalContent[];\n metadata?: Record<string, JSONValue>;\n position?: number;\n tokenUsage?: TokenUsage;\n } = {},\n): Message => {\n const baseMessage = {\n id: original.id,\n role: original.role,\n content:\n overrides.content ??\n (typeof original.content === 'string'\n ? original.content\n : [...(original.content as MultiModalContent[])]),\n position: overrides.position ?? original.position,\n createdAt: original.createdAt,\n metadata: overrides.metadata ?? { ...original.metadata },\n hidden: original.hidden,\n toolCall: original.toolCall ? { ...original.toolCall } : undefined,\n toolResult: original.toolResult ? { ...original.toolResult } : undefined,\n tokenUsage: overrides.tokenUsage,\n };\n\n if (isAssistantMessage(original)) {\n const assistantMessage: AssistantMessage = {\n ...baseMessage,\n role: 'assistant',\n goalCompleted: original.goalCompleted,\n };\n return createMessage(assistantMessage);\n }\n\n return createMessage(baseMessage);\n};\n\n/**\n * Checks if a message is currently streaming (has the streaming metadata flag).\n */\nexport function isStreamingMessage(message: Message): boolean {\n return message.metadata[STREAMING_KEY] === true;\n}\n\n/**\n * Gets the currently streaming message from a conversation, if any.\n */\nexport function getStreamingMessage(conversation: Conversation): Message | undefined {\n return getOrderedMessages(conversation).find(isStreamingMessage);\n}\n\n/**\n * Creates a pending/streaming message placeholder and appends it to the conversation.\n * Returns both the updated conversation and the ID of the new streaming message.\n */\nexport function appendStreamingMessage(\n conversation: Conversation,\n role: 'assistant' | 'user',\n metadata?: Record<string, JSONValue>,\n environment?: Partial<ConversationEnvironment>,\n): { conversation: Conversation; messageId: string } {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n const messageId = resolvedEnvironment.randomId();\n\n const newMessage = createMessage({\n id: messageId,\n role,\n content: '',\n position: conversation.ids.length,\n createdAt: now,\n metadata: { ...(metadata ?? {}), [STREAMING_KEY]: true },\n hidden: false,\n toolCall: undefined,\n toolResult: undefined,\n tokenUsage: undefined,\n });\n\n const updatedConversation = toReadonly({\n ...conversation,\n ids: [...conversation.ids, messageId],\n messages: { ...conversation.messages, [messageId]: newMessage },\n updatedAt: now,\n });\n\n return { conversation: updatedConversation, messageId };\n}\n\n/**\n * Updates the content of a streaming message.\n * This replaces the existing content (use for accumulating streamed tokens).\n */\nexport function updateStreamingMessage(\n conversation: Conversation,\n messageId: string,\n content: string | MultiModalContent[],\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const original = conversation.messages[messageId];\n if (!original) {\n return conversation;\n }\n\n const overrides: {\n content?: string | MultiModalContent[];\n tokenUsage?: TokenUsage;\n } = {\n content: typeof content === 'string' ? content : [...content],\n };\n if (original.tokenUsage) {\n overrides.tokenUsage = { ...original.tokenUsage };\n }\n\n const updated = cloneMessage(original, overrides);\n\n return toReadonly({\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [updated.id]: updated },\n updatedAt: now,\n });\n}\n\n/**\n * Marks a streaming message as complete, removing the streaming flag.\n * Optionally adds token usage and additional metadata.\n */\nexport function finalizeStreamingMessage(\n conversation: Conversation,\n messageId: string,\n options?: {\n tokenUsage?: TokenUsage;\n metadata?: Record<string, JSONValue>;\n },\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const original = conversation.messages[messageId];\n if (!original) {\n return conversation;\n }\n\n // Remove the streaming flag and merge in any new metadata\n const { [STREAMING_KEY]: _, ...restMetadata } = original.metadata as Record<\n string,\n JSONValue\n >;\n const finalMetadata: Record<string, JSONValue> = {\n ...restMetadata,\n ...(options?.metadata ?? {}),\n };\n\n const finalizeOverrides: {\n metadata?: Record<string, JSONValue>;\n tokenUsage?: TokenUsage;\n } = {\n metadata: finalMetadata,\n };\n if (options?.tokenUsage) {\n finalizeOverrides.tokenUsage = { ...options.tokenUsage };\n }\n\n const updated = cloneMessage(original, finalizeOverrides);\n\n return toReadonly({\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [updated.id]: updated },\n updatedAt: now,\n });\n}\n\n/**\n * Cancels a streaming message by removing it from the conversation.\n */\nexport function cancelStreamingMessage(\n conversation: Conversation,\n messageId: string,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n if (!conversation.messages[messageId]) {\n return conversation;\n }\n\n const messages = getOrderedMessages(conversation)\n .filter((m) => m.id !== messageId)\n .map((message, index) =>\n message.position === index\n ? message\n : (() => {\n const overrides: { position: number; tokenUsage?: TokenUsage } = {\n position: index,\n };\n if (message.tokenUsage) {\n overrides.tokenUsage = { ...message.tokenUsage };\n }\n return cloneMessage(message, overrides);\n })(),\n );\n\n return toReadonly({\n ...conversation,\n ids: messages.map((message) => message.id),\n messages: toIdRecord(messages),\n updatedAt: now,\n });\n}\n",
|
|
19
20
|
"import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport { truncateFromPosition, truncateToTokenLimit } from './context';\nimport {\n appendAssistantMessage,\n appendMessages,\n appendSystemMessage,\n appendUserMessage,\n collapseSystemMessages,\n prependSystemMessage,\n redactMessageAtPosition,\n replaceSystemMessage,\n} from './conversation';\nimport {\n appendStreamingMessage,\n cancelStreamingMessage,\n finalizeStreamingMessage,\n updateStreamingMessage,\n} from './streaming';\nimport type { Conversation, JSONValue, Message, MessageInput, TokenUsage } from './types';\n\n/**\n * A mutable draft wrapper around a conversation.\n * Methods return the draft for chaining and mutate the internal state.\n *\n * @example\n * ```ts\n * const result = withConversation(conversation, (draft) => {\n * draft\n * .appendSystemMessage('You are helpful.')\n * .appendUserMessage('Hello!')\n * .appendAssistantMessage('Hi there!');\n * });\n * ```\n */\nexport interface ConversationDraft {\n /** The current immutable conversation value. */\n readonly value: Conversation;\n\n /**\n * Appends one or more messages to the conversation.\n * @param inputs - Message inputs to append.\n */\n appendMessages: (...inputs: MessageInput[]) => ConversationDraft;\n\n /**\n * Appends a user message to the conversation.\n * @param content - Text or multi-modal content.\n * @param metadata - Optional metadata to attach to the message.\n */\n appendUserMessage: (\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ) => ConversationDraft;\n\n /**\n * Appends an assistant message to the conversation.\n * @param content - Text or multi-modal content.\n * @param metadata - Optional metadata to attach to the message.\n */\n appendAssistantMessage: (\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ) => ConversationDraft;\n\n /**\n * Appends a system message to the conversation.\n * @param content - The system message content.\n * @param metadata - Optional metadata to attach to the message.\n */\n appendSystemMessage: (\n content: string,\n metadata?: Record<string, JSONValue>,\n ) => ConversationDraft;\n\n /**\n * Prepends a system message at position 0, renumbering existing messages.\n * @param content - The system message content.\n * @param metadata - Optional metadata to attach to the message.\n */\n prependSystemMessage: (\n content: string,\n metadata?: Record<string, JSONValue>,\n ) => ConversationDraft;\n\n /**\n * Replaces the first system message, or prepends if none exists.\n * @param content - The new system message content.\n * @param metadata - Optional metadata (uses original if not provided).\n */\n replaceSystemMessage: (\n content: string,\n metadata?: Record<string, JSONValue>,\n ) => ConversationDraft;\n\n /**\n * Collapses all system messages into the first one, deduplicating content.\n */\n collapseSystemMessages: () => ConversationDraft;\n\n /**\n * Redacts a message at the given position, replacing its content.\n * @param position - The message position to redact.\n * @param placeholder - Replacement text (default: '[REDACTED]').\n */\n redactMessageAtPosition: (position: number, placeholder?: string) => ConversationDraft;\n\n /**\n * Appends a streaming message placeholder.\n * Returns the draft and the new message ID for subsequent updates.\n * @param role - The role of the streaming message ('assistant' or 'user').\n * @param metadata - Optional metadata to attach to the message.\n */\n appendStreamingMessage: (\n role: 'assistant' | 'user',\n metadata?: Record<string, JSONValue>,\n ) => { draft: ConversationDraft; messageId: string };\n\n /**\n * Updates the content of a streaming message.\n * @param messageId - The ID of the streaming message to update.\n * @param content - The new content (replaces existing content).\n */\n updateStreamingMessage: (\n messageId: string,\n content: string | MultiModalContent[],\n ) => ConversationDraft;\n\n /**\n * Finalizes a streaming message, removing the streaming flag.\n * @param messageId - The ID of the streaming message to finalize.\n * @param options - Optional token usage and additional metadata.\n */\n finalizeStreamingMessage: (\n messageId: string,\n options?: { tokenUsage?: TokenUsage; metadata?: Record<string, JSONValue> },\n ) => ConversationDraft;\n\n /**\n * Cancels a streaming message by removing it from the conversation.\n * @param messageId - The ID of the streaming message to cancel.\n */\n cancelStreamingMessage: (messageId: string) => ConversationDraft;\n\n /**\n * Truncates the conversation to keep only messages from position onwards.\n * @param position - The starting position to keep.\n * @param options - Options for preserving system messages.\n */\n truncateFromPosition: (\n position: number,\n options?: { preserveSystemMessages?: boolean },\n ) => ConversationDraft;\n\n /**\n * Truncates the conversation to fit within a token limit.\n * Removes oldest messages first while preserving system messages and optionally the last N messages.\n * @param maxTokens - Maximum token count to target.\n * @param options - Options for estimation and preservation.\n */\n truncateToTokenLimit: (\n maxTokens: number,\n options?: {\n estimateTokens?: (message: Message) => number;\n preserveSystemMessages?: boolean;\n preserveLastN?: number;\n },\n ) => ConversationDraft;\n}\n\n/**\n * Creates a mutable draft wrapper around a conversation.\n */\nfunction createDraft(initial: Conversation): ConversationDraft {\n let current = initial;\n\n const draft: ConversationDraft = {\n get value() {\n return current;\n },\n\n // Message appending\n appendMessages: (...inputs: MessageInput[]) => {\n current = appendMessages(current, ...inputs);\n return draft;\n },\n appendUserMessage: (content, metadata) => {\n current = appendUserMessage(current, content, metadata);\n return draft;\n },\n appendAssistantMessage: (content, metadata) => {\n current = appendAssistantMessage(current, content, metadata);\n return draft;\n },\n appendSystemMessage: (content, metadata) => {\n current = appendSystemMessage(current, content, metadata);\n return draft;\n },\n\n // System message management\n prependSystemMessage: (content, metadata) => {\n current = prependSystemMessage(current, content, metadata);\n return draft;\n },\n replaceSystemMessage: (content, metadata) => {\n current = replaceSystemMessage(current, content, metadata);\n return draft;\n },\n collapseSystemMessages: () => {\n current = collapseSystemMessages(current);\n return draft;\n },\n\n // Message modification\n redactMessageAtPosition: (position, placeholder) => {\n current = redactMessageAtPosition(current, position, placeholder);\n return draft;\n },\n\n // Streaming support\n appendStreamingMessage: (role, metadata) => {\n const result = appendStreamingMessage(current, role, metadata);\n current = result.conversation;\n return { draft, messageId: result.messageId };\n },\n updateStreamingMessage: (messageId, content) => {\n current = updateStreamingMessage(current, messageId, content);\n return draft;\n },\n finalizeStreamingMessage: (messageId, options) => {\n current = finalizeStreamingMessage(current, messageId, options);\n return draft;\n },\n cancelStreamingMessage: (messageId) => {\n current = cancelStreamingMessage(current, messageId);\n return draft;\n },\n\n // Context window management\n truncateFromPosition: (position, options) => {\n current = truncateFromPosition(current, position, options);\n return draft;\n },\n truncateToTokenLimit: (maxTokens, options) => {\n current = truncateToTokenLimit(current, maxTokens, options);\n return draft;\n },\n };\n\n return draft;\n}\n\n/**\n * Executes a function with a mutable draft and returns the final conversation.\n * Supports both synchronous and asynchronous operations.\n */\nexport function withConversation(\n conversation: Conversation,\n fn: (draft: ConversationDraft) => void | Promise<void>,\n): Conversation | Promise<Conversation> {\n const draft = createDraft(conversation);\n const maybePromise = fn(draft);\n if (\n maybePromise &&\n typeof (maybePromise as unknown) === 'object' &&\n typeof maybePromise.then === 'function'\n ) {\n return maybePromise.then(() => draft.value);\n }\n return draft.value;\n}\n\n/**\n * Applies a series of transformation functions to a conversation.\n * Each function receives the result of the previous one.\n */\nexport function pipeConversation(\n conversation: Conversation,\n ...fns: Array<(conversation: Conversation) => Conversation>\n): Conversation {\n return fns.reduce((current, fn) => fn(current), conversation);\n}\n",
|
|
20
|
-
"import {\n estimateConversationTokens,\n getRecentMessages,\n truncateFromPosition,\n type TruncateOptions,\n truncateToTokenLimit,\n} from './context';\nimport {\n appendAssistantMessage,\n appendMessages,\n appendSystemMessage,\n appendUserMessage,\n collapseSystemMessages,\n createConversation,\n deserializeConversation,\n getFirstSystemMessage,\n getMessageAtPosition,\n getMessageById,\n getMessageIds,\n getMessages,\n getStatistics,\n getSystemMessages,\n hasSystemMessage,\n prependSystemMessage,\n redactMessageAtPosition,\n replaceSystemMessage,\n searchConversationMessages,\n toChatMessages,\n} from './conversation';\nimport {\n type ConversationEnvironment,\n resolveConversationEnvironment,\n} from './environment';\nimport {\n appendStreamingMessage,\n cancelStreamingMessage,\n finalizeStreamingMessage,\n getStreamingMessage,\n updateStreamingMessage,\n} from './streaming';\nimport type {\n Conversation,\n ConversationHistorySnapshot,\n HistoryNodeSnapshot,\n JSONValue,\n Message,\n MessageInput,\n TokenUsage,\n} from './types';\n\n/**\n * Event detail for conversation history changes.\n */\nexport interface ConversationHistoryEventDetail {\n type: string;\n conversation: Conversation;\n}\n\n/**\n * Custom event emitted by ConversationHistory.\n */\nexport class ConversationHistoryEvent extends CustomEvent<ConversationHistoryEventDetail> {\n constructor(type: string, detail: ConversationHistoryEventDetail) {\n super(type, { detail });\n }\n}\n\ninterface HistoryNode {\n conversation: Conversation;\n parent: HistoryNode | null;\n children: HistoryNode[];\n}\n\n/**\n * Manages a stack of conversation versions to support undo, redo, and branching.\n */\nexport class ConversationHistory extends EventTarget {\n private currentNode: HistoryNode;\n private environment: ConversationEnvironment;\n\n constructor(\n initial: Conversation = createConversation(),\n environment?: Partial<ConversationEnvironment>,\n ) {\n super();\n this.environment = resolveConversationEnvironment(environment);\n this.currentNode = {\n conversation: initial,\n parent: null,\n children: [],\n };\n }\n\n /**\n * Dispatches a change event.\n */\n private notifyChange(type: string): void {\n const detail: ConversationHistoryEventDetail = {\n type,\n conversation: this.current,\n };\n this.dispatchEvent(new ConversationHistoryEvent('change', detail));\n this.dispatchEvent(new ConversationHistoryEvent(type, detail));\n }\n\n /**\n * Overrides addEventListener to optionally return an unsubscribe function.\n * This is a convenience for modern frontend frameworks.\n */\n override addEventListener(\n type: string,\n callback:\n | ((event: ConversationHistoryEvent) => void)\n | EventListenerOrEventListenerObject\n | null,\n options?: boolean | AddEventListenerOptions,\n ): void | (() => void) {\n if (!callback) return;\n super.addEventListener(type, callback as EventListenerOrEventListenerObject, options);\n const unsubscribe = () =>\n this.removeEventListener(\n type,\n callback as EventListenerOrEventListenerObject,\n options,\n );\n return unsubscribe;\n }\n\n /**\n * Subscribes to conversation changes.\n * This follows the Svelte store contract, making ConversationHistory a valid Svelte store.\n * @param run - Callback called with the current conversation whenever it changes.\n * @returns An unsubscribe function.\n */\n subscribe(run: (value: Conversation) => void): () => void {\n // Call immediately with current value (Svelte store contract)\n run(this.current);\n\n const handler = (event: Event) => {\n if (event instanceof ConversationHistoryEvent) {\n run(event.detail.conversation);\n }\n };\n\n const unsubscribe = this.addEventListener(\n 'change',\n handler as (event: ConversationHistoryEvent) => void,\n );\n return (unsubscribe as () => void) || (() => {});\n }\n\n /**\n * Returns the current conversation.\n * Useful for useSyncExternalStore in React.\n */\n getSnapshot(): Conversation {\n return this.current;\n }\n\n /**\n * The current conversation state.\n */\n get current(): Conversation {\n return this.currentNode.conversation;\n }\n\n /**\n * Returns the message IDs for the current conversation.\n */\n get ids(): string[] {\n return getMessageIds(this.current);\n }\n\n /**\n * Whether an undo operation is possible.\n */\n get canUndo(): boolean {\n return this.currentNode.parent !== null;\n }\n\n /**\n * Whether a redo operation is possible.\n */\n get canRedo(): boolean {\n return this.currentNode.children.length > 0;\n }\n\n /**\n * Returns the environment associated with this history.\n */\n get env(): ConversationEnvironment {\n return this.environment;\n }\n\n /**\n * Returns the number of branches available at the current level.\n */\n get branchCount(): number {\n return this.currentNode.parent ? this.currentNode.parent.children.length : 1;\n }\n\n /**\n * Returns the index of the current branch at this level.\n */\n get branchIndex(): number {\n if (!this.currentNode.parent) return 0;\n return this.currentNode.parent.children.indexOf(this.currentNode);\n }\n\n /**\n * Returns the number of alternate paths available from the current state.\n */\n get redoCount(): number {\n return this.currentNode.children.length;\n }\n\n /**\n * Pushes a new conversation state onto the history.\n * If the current state is not a leaf, a new branch is created.\n */\n push(next: Conversation): void {\n const newNode: HistoryNode = {\n conversation: next,\n parent: this.currentNode,\n children: [],\n };\n this.currentNode.children.push(newNode);\n this.currentNode = newNode;\n this.notifyChange('push');\n }\n\n /**\n * Reverts to the previous conversation state.\n * @returns The conversation state after undo, or undefined if not possible.\n */\n undo(): Conversation | undefined {\n if (this.currentNode.parent) {\n this.currentNode = this.currentNode.parent;\n this.notifyChange('undo');\n return this.current;\n }\n return undefined;\n }\n\n /**\n * Advances to the next conversation state.\n * @param childIndex - The index of the branch to follow (default: 0).\n * @returns The conversation state after redo, or undefined if not possible.\n */\n redo(childIndex: number = 0): Conversation | undefined {\n const next = this.currentNode.children[childIndex];\n if (next) {\n this.currentNode = next;\n this.notifyChange('redo');\n return this.current;\n }\n return undefined;\n }\n\n /**\n * Switches to a different branch at the current level.\n * @param index - The index of the sibling branch to switch to.\n * @returns The new conversation state, or undefined if not possible.\n */\n switchToBranch(index: number): Conversation | undefined {\n if (this.currentNode.parent) {\n const target = this.currentNode.parent.children[index];\n if (target) {\n this.currentNode = target;\n this.notifyChange('switch');\n return this.current;\n }\n }\n return undefined;\n }\n\n /**\n * Returns the sequence of conversations from root to current.\n */\n getPath(): Conversation[] {\n const path: Conversation[] = [];\n let curr: HistoryNode | null = this.currentNode;\n while (curr) {\n path.unshift(curr.conversation);\n curr = curr.parent;\n }\n return path;\n }\n\n // --- QUERY METHODS ---\n\n /**\n * Returns messages from the current conversation.\n */\n getMessages(options?: { includeHidden?: boolean }): ReadonlyArray<Message> {\n return getMessages(this.current, options);\n }\n\n /**\n * Returns the message at the specified position.\n */\n getMessageAtPosition(position: number): Message | undefined {\n return getMessageAtPosition(this.current, position);\n }\n\n /**\n * Returns all message IDs for the current conversation in order.\n */\n getMessageIds(): string[] {\n return getMessageIds(this.current);\n }\n\n /**\n * Returns the message with the specified ID, if present.\n */\n getMessageById(id: string): Message | undefined {\n return getMessageById(this.current, id);\n }\n\n /**\n * Shorthand for getMessageById.\n */\n get(id: string): Message | undefined {\n return getMessageById(this.current, id);\n }\n\n /**\n * Filters messages using a predicate.\n */\n searchMessages(predicate: (m: Message) => boolean): Message[] {\n return searchConversationMessages(this.current, predicate);\n }\n\n /**\n * Computes basic statistics for the current conversation.\n */\n getStatistics() {\n return getStatistics(this.current);\n }\n\n /**\n * Returns true if any system message exists in the current conversation.\n */\n hasSystemMessage(): boolean {\n return hasSystemMessage(this.current);\n }\n\n /**\n * Returns the first system message in the current conversation, if any.\n */\n getFirstSystemMessage(): Message | undefined {\n return getFirstSystemMessage(this.current);\n }\n\n /**\n * Returns all system messages in the current conversation.\n */\n getSystemMessages(): ReadonlyArray<Message> {\n return getSystemMessages(this.current);\n }\n\n /**\n * Converts the current conversation to external chat message format.\n */\n toChatMessages() {\n return toChatMessages(this.current);\n }\n\n /**\n * Estimates tokens for the current conversation.\n */\n estimateTokens(estimator?: (message: Message) => number): number {\n return estimateConversationTokens(this.current, estimator, this.env);\n }\n\n /**\n * Returns the most recent messages, with optional filtering.\n */\n getRecentMessages(\n count: number,\n options?: { includeHidden?: boolean; includeSystem?: boolean },\n ): ReadonlyArray<Message> {\n return getRecentMessages(this.current, count, options);\n }\n\n /**\n * Returns the current streaming message, if any.\n */\n getStreamingMessage(): Message | undefined {\n return getStreamingMessage(this.current);\n }\n\n // --- MUTATION METHODS ---\n\n /**\n * Appends one or more messages to the history.\n */\n appendMessages(...inputs: MessageInput[]): void {\n this.push(appendMessages(this.current, ...inputs, this.env));\n }\n\n /**\n * Appends a user message to the history.\n */\n appendUserMessage(\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ): void {\n this.push(appendUserMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Appends an assistant message to the history.\n */\n appendAssistantMessage(\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ): void {\n this.push(appendAssistantMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Appends a system message to the history.\n */\n appendSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(appendSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Prepends a system message to the history.\n */\n prependSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(prependSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Replaces the first system message or prepends one if none exist.\n */\n replaceSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(replaceSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Collapses multiple system messages into a single message.\n */\n collapseSystemMessages(): void {\n this.push(collapseSystemMessages(this.current, this.env));\n }\n\n /**\n * Redacts the message at the given position.\n */\n redactMessageAtPosition(position: number, placeholder?: string): void {\n this.push(redactMessageAtPosition(this.current, position, placeholder, this.env));\n }\n\n /**\n * Truncates the conversation from a specific position.\n */\n truncateFromPosition(\n position: number,\n options?: { preserveSystemMessages?: boolean },\n ): void {\n this.push(truncateFromPosition(this.current, position, options, this.env));\n }\n\n /**\n * Truncates the conversation to fit within a token limit.\n */\n truncateToTokenLimit(maxTokens: number, options?: TruncateOptions): void {\n this.push(truncateToTokenLimit(this.current, maxTokens, options, this.env));\n }\n\n /**\n * Appends a streaming message placeholder and returns its ID.\n */\n appendStreamingMessage(\n role: 'assistant' | 'user',\n metadata?: Record<string, JSONValue>,\n ): string {\n const { conversation, messageId } = appendStreamingMessage(\n this.current,\n role,\n metadata,\n this.env,\n );\n this.push(conversation);\n return messageId;\n }\n\n /**\n * Updates a streaming message's content.\n */\n updateStreamingMessage(messageId: string, content: string): void {\n this.push(updateStreamingMessage(this.current, messageId, content, this.env));\n }\n\n /**\n * Finalizes a streaming message and optionally adds metadata or token usage.\n */\n finalizeStreamingMessage(\n messageId: string,\n options?: { tokenUsage?: TokenUsage; metadata?: Record<string, JSONValue> },\n ): void {\n this.push(finalizeStreamingMessage(this.current, messageId, options, this.env));\n }\n\n /**\n * Cancels a streaming message by removing it from the conversation.\n */\n cancelStreamingMessage(messageId: string): void {\n this.push(cancelStreamingMessage(this.current, messageId, this.env));\n }\n\n /**\n * Captures the entire history tree and current state in a plain snapshot.\n */\n snapshot(): ConversationHistorySnapshot {\n const getPath = (node: HistoryNode): number[] => {\n const path: number[] = [];\n let curr = node;\n while (curr.parent) {\n path.unshift(curr.parent.children.indexOf(curr));\n curr = curr.parent;\n }\n return path;\n };\n\n const serializeNode = (node: HistoryNode): HistoryNodeSnapshot => ({\n conversation: node.conversation,\n children: node.children.map(serializeNode),\n });\n\n let root = this.currentNode;\n while (root.parent) {\n root = root.parent;\n }\n\n return {\n root: serializeNode(root),\n currentPath: getPath(this.currentNode),\n };\n }\n\n /**\n * Reconstructs a ConversationHistory instance from JSON.\n */\n static from(\n json: ConversationHistorySnapshot,\n environment?: Partial<ConversationEnvironment>,\n ): ConversationHistory {\n const rootConv = deserializeConversation(json.root.conversation);\n const history = new ConversationHistory(rootConv, environment);\n\n // Recursive function to build the tree\n const buildTree = (\n nodeJSON: HistoryNodeSnapshot,\n parentNode: HistoryNode,\n ): HistoryNode => {\n const nodeConv = deserializeConversation(nodeJSON.conversation);\n const node: HistoryNode = {\n conversation: nodeConv,\n parent: parentNode,\n children: [],\n };\n node.children = nodeJSON.children.map((child) => buildTree(child, node));\n return node;\n };\n\n const h = history as unknown as { currentNode: HistoryNode };\n const rootNode = h.currentNode;\n rootNode.children = json.root.children.map((child) => buildTree(child, rootNode));\n\n // Traverse to find the current node\n let current: HistoryNode = rootNode;\n for (const index of json.currentPath) {\n const target = current.children[index];\n if (target) {\n current = target;\n }\n }\n h.currentNode = current;\n\n return history;\n }\n\n /**\n * Binds a function to this history instance.\n * The first argument of the function must be a Conversation.\n * If the function returns a new Conversation, it is automatically pushed to the history.\n */\n bind<T extends unknown[], R>(\n fn: (\n conversation: Conversation,\n ...args: [...T, Partial<ConversationEnvironment>?]\n ) => R,\n ): (...args: T) => R {\n return (...args: T): R => {\n // We pass the history's environment as the last argument if the function supports it\n const boundFn = fn as (conversation: Conversation, ...args: unknown[]) => R;\n const result = boundFn(this.current, ...args, this.env);\n\n if (isConversation(result)) {\n this.push(result);\n }\n\n return result;\n };\n }\n\n /**\n * Cleans up all listeners and resources.\n */\n [Symbol.dispose](): void {\n // Clear references to help GC\n let root: HistoryNode | null = this.currentNode;\n while (root?.parent) {\n root = root.parent;\n }\n\n const clearNode = (node: HistoryNode) => {\n for (const child of node.children) {\n clearNode(child);\n }\n node.children = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const n = node as any;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n n.parent = null;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n n.conversation = null;\n };\n\n if (root) clearNode(root);\n }\n}\n\n/**\n * Simple type guard to check if a value is a Conversation.\n */\nfunction isConversation(value: unknown): value is Conversation {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as Conversation).schemaVersion === 'number' &&\n typeof (value as Conversation).id === 'string' &&\n typeof (value as Conversation).status === 'string' &&\n (value as Conversation).metadata !== null &&\n typeof (value as Conversation).metadata === 'object' &&\n Array.isArray((value as Conversation).ids) &&\n typeof (value as Conversation).messages === 'object' &&\n (value as Conversation).messages !== null &&\n !Array.isArray((value as Conversation).messages) &&\n typeof (value as Conversation).createdAt === 'string' &&\n typeof (value as Conversation).updatedAt === 'string'\n );\n}\n"
|
|
21
|
+
"// @bun\n// src/symbols.ts\nvar SymbolObservable = typeof Symbol === \"function\" && Symbol.observable || Symbol.for(\"@@observable\");\nif (typeof Symbol === \"function\") {\n Symbol.observable = SymbolObservable;\n}\n\n// src/observable.ts\nfunction getMethod(obj, key) {\n if (obj === null || obj === undefined)\n return;\n const value = obj[key];\n if (value == null)\n return;\n if (typeof value !== \"function\") {\n throw new TypeError(value + \" is not a function\");\n }\n return value;\n}\nfunction hostReportError(e) {\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(() => {\n throw e;\n });\n } else {\n setTimeout(() => {\n throw e;\n });\n }\n}\nfunction SubscriptionObserverImpl(subscription) {\n this._subscription = subscription;\n}\nSubscriptionObserverImpl.prototype = Object.create(Object.prototype);\nObject.defineProperties(SubscriptionObserverImpl.prototype, {\n constructor: { value: Object, configurable: true, writable: true },\n closed: {\n get() {\n return this._subscription._closed;\n },\n configurable: true\n },\n next: {\n value: function next(value) {\n const subscription = this._subscription;\n if (subscription._closed)\n return;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, \"next\");\n if (!m)\n return;\n return m.call(observer, value);\n } catch (e) {\n try {\n this.error(e);\n } catch (err) {\n hostReportError(err);\n }\n }\n },\n configurable: true,\n writable: true\n },\n error: {\n value: function error(errorValue) {\n const subscription = this._subscription;\n if (subscription._closed)\n throw errorValue;\n subscription._closed = true;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, \"error\");\n if (m) {\n return m.call(observer, errorValue);\n }\n throw errorValue;\n } finally {\n subscription._cleanup();\n }\n },\n configurable: true,\n writable: true\n },\n complete: {\n value: function complete(value) {\n const subscription = this._subscription;\n if (subscription._closed)\n return;\n subscription._closed = true;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, \"complete\");\n if (m) {\n return m.call(observer, value);\n }\n return;\n } finally {\n subscription._cleanup();\n }\n },\n configurable: true,\n writable: true\n }\n});\nObject.defineProperty(SubscriptionObserverImpl.prototype.next, \"length\", { value: 1 });\nObject.defineProperty(SubscriptionObserverImpl.prototype.error, \"length\", { value: 1 });\nObject.defineProperty(SubscriptionObserverImpl.prototype.complete, \"length\", {\n value: 1\n});\nfunction Subscription(observer, subscriber) {\n this._observer = observer;\n this._cleanupFn = undefined;\n this._closed = false;\n const subscriptionObserver = new SubscriptionObserverImpl(this);\n try {\n const start = getMethod(observer, \"start\");\n if (start) {\n start.call(observer, this);\n }\n } catch (e) {\n hostReportError(e);\n }\n if (this._closed)\n return;\n try {\n const cleanup = subscriber(subscriptionObserver);\n if (cleanup != null) {\n if (typeof cleanup !== \"function\" && typeof cleanup.unsubscribe !== \"function\") {\n throw new TypeError(cleanup + \" is not a function or a subscription\");\n }\n this._cleanupFn = cleanup;\n if (this._closed) {\n this._cleanup();\n }\n }\n } catch (e) {\n subscriptionObserver.error(e);\n }\n}\nSubscription.prototype = Object.create(Object.prototype);\nObject.defineProperties(Subscription.prototype, {\n constructor: { value: Object, configurable: true, writable: true },\n closed: {\n get() {\n return this._closed;\n },\n configurable: true\n },\n unsubscribe: {\n value: function unsubscribe() {\n if (this._closed)\n return;\n this._closed = true;\n this._cleanup();\n },\n configurable: true,\n writable: true\n },\n _cleanup: {\n value: function _cleanup() {\n const cleanup = this._cleanupFn;\n if (!cleanup)\n return;\n this._cleanupFn = undefined;\n try {\n if (typeof cleanup === \"function\") {\n cleanup();\n } else if (cleanup && typeof cleanup.unsubscribe === \"function\") {\n cleanup.unsubscribe();\n }\n } catch (e) {\n hostReportError(e);\n }\n },\n configurable: true,\n writable: true\n }\n});\n\nclass Observable {\n _subscriber;\n constructor(subscriber) {\n if (typeof subscriber !== \"function\") {\n throw new TypeError(\"Observable initializer must be a function\");\n }\n this._subscriber = subscriber;\n }\n subscribe(observerOrNext, error2, complete2) {\n let observer;\n if (typeof observerOrNext === \"function\") {\n observer = {\n next: observerOrNext,\n error: error2,\n complete: complete2\n };\n } else if (typeof observerOrNext !== \"object\" || observerOrNext === null) {\n throw new TypeError(observerOrNext + \" is not an object\");\n } else {\n observer = observerOrNext;\n }\n return new Subscription(observer, this._subscriber);\n }\n [SymbolObservable]() {\n return this;\n }\n static of(...items) {\n const C = typeof this === \"function\" ? this : Observable;\n return new C((observer) => {\n for (let i = 0;i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed)\n return;\n }\n observer.complete();\n });\n }\n static from(x) {\n const C = typeof this === \"function\" ? this : Observable;\n if (x == null)\n throw new TypeError(x + \" is not an object\");\n const method = x[SymbolObservable];\n if (method != null) {\n if (typeof method !== \"function\") {\n throw new TypeError(method + \" is not a function\");\n }\n const observable = method.call(x);\n if (Object(observable) !== observable) {\n throw new TypeError(observable + \" is not an object\");\n }\n if (observable.constructor === C) {\n return observable;\n }\n return new C((observer) => observable.subscribe(observer));\n }\n if (Symbol.iterator in x) {\n return new C((observer) => {\n for (const item of x) {\n observer.next(item);\n if (observer.closed)\n return;\n }\n observer.complete();\n });\n }\n throw new TypeError(x + \" is not observable\");\n }\n}\n\n// src/observe.ts\nvar PROXY_MARKER = Symbol.for(\"@lasercat/event-emission/proxy\");\nvar ORIGINAL_TARGET = Symbol.for(\"@lasercat/event-emission/original\");\nvar ARRAY_MUTATORS = new Set([\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\",\n \"splice\",\n \"sort\",\n \"reverse\",\n \"fill\",\n \"copyWithin\"\n]);\nfunction isProxyable(value) {\n return value !== null && typeof value === \"object\" && !isProxied(value) && !(value instanceof Date) && !(value instanceof RegExp) && !(value instanceof Map) && !(value instanceof Set) && !(value instanceof WeakMap) && !(value instanceof WeakSet) && !(value instanceof Promise) && !(value instanceof Error) && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value);\n}\nfunction isProxied(value) {\n return typeof value === \"object\" && value !== null && value[PROXY_MARKER] === true;\n}\nfunction isArrayMutator(prop) {\n return typeof prop === \"string\" && ARRAY_MUTATORS.has(prop);\n}\nfunction cloneAlongPath(obj, path) {\n const isArray = Array.isArray(obj);\n const rootClone = isArray ? [...obj] : { ...obj };\n if (!path || isArray) {\n return rootClone;\n }\n const parts = path.split(\".\");\n const result = rootClone;\n let current = result;\n for (let i = 0;i < parts.length; i++) {\n const key = parts[i];\n const value = current[key];\n if (value !== null && typeof value === \"object\") {\n current[key] = Array.isArray(value) ? [...value] : { ...value };\n if (i < parts.length - 1) {\n current = current[key];\n }\n } else {\n break;\n }\n }\n return result;\n}\nfunction cloneForComparison(obj, strategy, changedPath, deepClone) {\n if (obj === null || typeof obj !== \"object\")\n return obj;\n switch (strategy) {\n case \"shallow\":\n return Array.isArray(obj) ? [...obj] : { ...obj };\n case \"deep\":\n if (deepClone) {\n return deepClone(obj);\n }\n if (typeof structuredClone !== \"function\") {\n throw new Error(\"structuredClone is not available in this runtime; provide observe.deepClone, or use cloneStrategy 'path' or 'shallow'.\");\n }\n return structuredClone(obj);\n case \"path\":\n return cloneAlongPath(obj, changedPath);\n default:\n return obj;\n }\n}\nfunction computeArrayDiff(method, before, _after, args) {\n switch (method) {\n case \"push\":\n return { added: args };\n case \"pop\":\n return { removed: before.length > 0 ? [before[before.length - 1]] : [] };\n case \"shift\":\n return { removed: before.length > 0 ? [before[0]] : [] };\n case \"unshift\":\n return { added: args };\n case \"splice\": {\n const [start, deleteCount, ...items] = args;\n const actualStart = start < 0 ? Math.max(before.length + start, 0) : Math.min(start, before.length);\n const actualDeleteCount = Math.min(deleteCount ?? before.length - actualStart, before.length - actualStart);\n return {\n removed: before.slice(actualStart, actualStart + actualDeleteCount),\n added: items\n };\n }\n case \"sort\":\n case \"reverse\":\n case \"fill\":\n case \"copyWithin\":\n return {};\n default:\n return {};\n }\n}\nvar proxyRegistry = new WeakMap;\nfunction getContextRegistry(target) {\n let contextMap = proxyRegistry.get(target);\n if (!contextMap) {\n contextMap = new WeakMap;\n proxyRegistry.set(target, contextMap);\n }\n return contextMap;\n}\nfunction createArrayMethodInterceptor(array, method, path, context) {\n const original = array[method];\n return function(...args) {\n const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, path, context.options.deepClone);\n const previousItems = [...array];\n const result = original.apply(this, args);\n const { added, removed } = computeArrayDiff(method, previousItems, array, args);\n const methodEventPath = path ? `update:${path}.${method}` : `update:${method}`;\n const arrayEventPath = path ? `update:${path}` : \"update:\";\n context.eventTarget.dispatchEvent({\n type: methodEventPath,\n detail: {\n method,\n args,\n result,\n added,\n removed,\n current: context.originalRoot,\n previous: previousState\n }\n });\n if (path) {\n context.eventTarget.dispatchEvent({\n type: arrayEventPath,\n detail: {\n value: array,\n current: context.originalRoot,\n previous: previousState\n }\n });\n }\n context.eventTarget.dispatchEvent({\n type: \"update\",\n detail: {\n current: context.originalRoot,\n previous: previousState\n }\n });\n return result;\n };\n}\nfunction createObservableProxyInternal(target, path, context) {\n const contextRegistry = getContextRegistry(target);\n const existing = contextRegistry.get(context);\n if (existing) {\n return existing.proxy;\n }\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n if (prop === PROXY_MARKER)\n return true;\n if (prop === ORIGINAL_TARGET)\n return obj;\n if (typeof prop === \"symbol\") {\n return Reflect.get(obj, prop, receiver);\n }\n const value = Reflect.get(obj, prop, receiver);\n if (Array.isArray(obj) && isArrayMutator(prop)) {\n return createArrayMethodInterceptor(obj, prop, path, context);\n }\n if (context.options.deep && isProxyable(value)) {\n const nestedPath = path ? `${path}.${prop}` : prop;\n return createObservableProxyInternal(value, nestedPath, context);\n }\n return value;\n },\n set(obj, prop, value, receiver) {\n if (typeof prop === \"symbol\") {\n return Reflect.set(obj, prop, value, receiver);\n }\n const oldValue = Reflect.get(obj, prop, receiver);\n if (Object.is(oldValue, value)) {\n return true;\n }\n const propPath = path ? `${path}.${prop}` : prop;\n const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, propPath, context.options.deepClone);\n const success = Reflect.set(obj, prop, value, receiver);\n if (success) {\n context.eventTarget.dispatchEvent({\n type: `update:${propPath}`,\n detail: {\n value,\n current: context.originalRoot,\n previous: previousState\n }\n });\n context.eventTarget.dispatchEvent({\n type: \"update\",\n detail: {\n current: context.originalRoot,\n previous: previousState\n }\n });\n }\n return success;\n },\n deleteProperty(obj, prop) {\n if (typeof prop === \"symbol\") {\n return Reflect.deleteProperty(obj, prop);\n }\n const propPath = path ? `${path}.${String(prop)}` : String(prop);\n const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, propPath, context.options.deepClone);\n const success = Reflect.deleteProperty(obj, prop);\n if (success) {\n context.eventTarget.dispatchEvent({\n type: `update:${propPath}`,\n detail: {\n value: undefined,\n current: context.originalRoot,\n previous: previousState\n }\n });\n context.eventTarget.dispatchEvent({\n type: \"update\",\n detail: {\n current: context.originalRoot,\n previous: previousState\n }\n });\n }\n return success;\n }\n });\n contextRegistry.set(context, {\n proxy,\n path\n });\n return proxy;\n}\nfunction isEventTarget(obj) {\n return typeof obj === \"object\" && obj !== null && typeof obj.addEventListener === \"function\" && typeof obj.removeEventListener === \"function\" && typeof obj.dispatchEvent === \"function\";\n}\nfunction setupEventForwarding(source, target) {\n const handlers = new Map;\n const sourceAddEventListener = source.addEventListener.bind(source);\n const sourceRemoveEventListener = source.removeEventListener.bind(source);\n const forwardHandler = (type) => (event) => {\n const detail = event.detail ?? event;\n target.dispatchEvent({\n type,\n detail\n });\n };\n const originalAddEventListener = target.addEventListener.bind(target);\n const wrappedAddEventListener = (type, listener, options) => {\n if (!handlers.has(type) && type !== \"update\" && !type.startsWith(\"update:\")) {\n const handler = forwardHandler(type);\n handlers.set(type, handler);\n sourceAddEventListener(type, handler);\n }\n return originalAddEventListener(type, listener, options);\n };\n target.addEventListener = wrappedAddEventListener;\n return () => {\n target.addEventListener = originalAddEventListener;\n for (const [type, handler] of handlers) {\n sourceRemoveEventListener(type, handler);\n }\n handlers.clear();\n };\n}\nfunction isObserved(obj) {\n return isProxied(obj);\n}\nfunction getOriginal(proxy) {\n if (!isProxied(proxy)) {\n return proxy;\n }\n return proxy[ORIGINAL_TARGET] ?? proxy;\n}\nfunction createObservableProxy(target, eventTarget, options) {\n const resolvedOptions = {\n deep: options?.deep ?? true,\n cloneStrategy: options?.cloneStrategy ?? \"path\",\n deepClone: options?.deepClone\n };\n const context = {\n eventTarget,\n originalRoot: target,\n options: resolvedOptions\n };\n const proxy = createObservableProxyInternal(target, \"\", context);\n if (isEventTarget(target)) {\n const cleanupForwarding = setupEventForwarding(target, eventTarget);\n const maybeComplete = eventTarget.complete;\n if (typeof maybeComplete === \"function\") {\n const originalComplete = maybeComplete.bind(eventTarget);\n let cleaned = false;\n eventTarget.complete = () => {\n if (!cleaned) {\n cleaned = true;\n cleanupForwarding();\n }\n return originalComplete();\n };\n }\n }\n return proxy;\n}\n// src/errors.ts\nclass BufferOverflowError extends Error {\n constructor(eventType, bufferSize) {\n super(`Buffer overflow for event type \"${eventType}\" (max: ${bufferSize})`);\n this.name = \"BufferOverflowError\";\n }\n}\n// src/factory.ts\nfunction matchesWildcard(eventType, pattern) {\n if (pattern === \"*\")\n return true;\n return pattern.endsWith(\":*\") && eventType.startsWith(pattern.slice(0, -2) + \":\");\n}\nvar EVENT_STATE = Symbol(\"event-emission:event-state\");\nfunction createEventTarget(targetOrOpts, opts) {\n if (opts?.observe === true && targetOrOpts && typeof targetOrOpts === \"object\") {\n const target = targetOrOpts;\n const eventTarget = createEventTargetInternal({\n onListenerError: opts.onListenerError\n });\n const proxy = createObservableProxy(target, eventTarget, {\n deep: opts.deep,\n cloneStrategy: opts.cloneStrategy,\n deepClone: opts.deepClone\n });\n const methodNames = [\n \"addEventListener\",\n \"removeEventListener\",\n \"dispatchEvent\",\n \"clear\",\n \"on\",\n \"once\",\n \"removeAllListeners\",\n \"pipe\",\n \"addWildcardListener\",\n \"removeWildcardListener\",\n \"complete\",\n \"subscribe\",\n \"toObservable\",\n \"events\"\n ];\n for (const name of methodNames) {\n Object.defineProperty(proxy, name, {\n value: eventTarget[name],\n writable: false,\n enumerable: false,\n configurable: true\n });\n }\n Object.defineProperty(proxy, \"completed\", {\n get: () => eventTarget.completed,\n enumerable: false,\n configurable: true\n });\n return proxy;\n }\n return createEventTargetInternal(targetOrOpts);\n}\nfunction createEventTargetInternal(opts) {\n const listeners = new Map;\n const wildcardListeners = new Set;\n let isCompleted = false;\n const completionCallbacks = new Set;\n const now = () => typeof globalThis.performance?.now === \"function\" ? globalThis.performance.now() : Date.now();\n const initializeEventState = (state, type, bubbles, cancelable) => {\n state.initializedFlag = true;\n state.stopPropagationFlag = false;\n state.stopImmediatePropagationFlag = false;\n state.canceledFlag = false;\n state.isTrusted = false;\n state.target = null;\n state.currentTarget = null;\n state.eventPhase = 0;\n state.type = type;\n state.bubbles = bubbles;\n state.cancelable = cancelable;\n };\n const setCanceledFlag = (state) => {\n if (state.cancelable && !state.inPassiveListenerFlag) {\n state.canceledFlag = true;\n }\n };\n const createEvent = (type, detail, init) => {\n const state = {\n dispatchFlag: false,\n initializedFlag: true,\n stopPropagationFlag: false,\n stopImmediatePropagationFlag: false,\n canceledFlag: false,\n inPassiveListenerFlag: false,\n composedFlag: Boolean(init?.composed),\n eventPhase: init?.eventPhase ?? 0,\n currentTarget: init?.currentTarget ?? init?.target ?? null,\n target: init?.target ?? null,\n timeStamp: init?.timeStamp ?? now(),\n path: [],\n type,\n bubbles: Boolean(init?.bubbles),\n cancelable: Boolean(init?.cancelable),\n isTrusted: false\n };\n const event = { detail };\n Object.defineProperties(event, {\n type: {\n get: () => state.type,\n enumerable: true,\n configurable: true\n },\n bubbles: {\n get: () => state.bubbles,\n enumerable: true,\n configurable: true\n },\n cancelable: {\n get: () => state.cancelable,\n enumerable: true,\n configurable: true\n },\n cancelBubble: {\n get: () => state.stopPropagationFlag,\n set: (value) => {\n if (value)\n state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true\n },\n composed: {\n get: () => state.composedFlag,\n enumerable: true,\n configurable: true\n },\n currentTarget: {\n get: () => state.currentTarget,\n enumerable: true,\n configurable: true\n },\n defaultPrevented: {\n get: () => state.canceledFlag,\n enumerable: true,\n configurable: true\n },\n eventPhase: {\n get: () => state.eventPhase,\n enumerable: true,\n configurable: true\n },\n isTrusted: {\n get: () => state.isTrusted,\n enumerable: true,\n configurable: true\n },\n returnValue: {\n get: () => !state.canceledFlag,\n set: (value) => {\n if (value === false)\n setCanceledFlag(state);\n },\n enumerable: true,\n configurable: true\n },\n srcElement: {\n get: () => state.target,\n enumerable: true,\n configurable: true\n },\n target: {\n get: () => state.target,\n enumerable: true,\n configurable: true\n },\n timeStamp: {\n get: () => state.timeStamp,\n enumerable: true,\n configurable: true\n },\n composedPath: {\n value: () => state.path.map((entry) => entry.invocationTarget),\n enumerable: true,\n configurable: true\n },\n initEvent: {\n value: (newType, bubbles = false, cancelable = false) => {\n if (state.dispatchFlag)\n return;\n initializeEventState(state, newType, Boolean(bubbles), Boolean(cancelable));\n },\n enumerable: true,\n configurable: true\n },\n preventDefault: {\n value: () => setCanceledFlag(state),\n enumerable: true,\n configurable: true\n },\n stopImmediatePropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n state.stopImmediatePropagationFlag = true;\n },\n enumerable: true,\n configurable: true\n },\n stopPropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true\n },\n NONE: { value: 0, enumerable: true, configurable: true },\n CAPTURING_PHASE: { value: 1, enumerable: true, configurable: true },\n AT_TARGET: { value: 2, enumerable: true, configurable: true },\n BUBBLING_PHASE: { value: 3, enumerable: true, configurable: true },\n [EVENT_STATE]: {\n value: state,\n enumerable: false,\n configurable: false\n }\n });\n return event;\n };\n const getEventState = (event) => event[EVENT_STATE];\n const normalizeAddListenerOptions = (options) => {\n if (typeof options === \"boolean\") {\n return {\n capture: options,\n passive: false,\n once: false,\n signal: null\n };\n }\n return {\n capture: Boolean(options?.capture),\n passive: Boolean(options?.passive),\n once: Boolean(options?.once),\n signal: options?.signal ?? null\n };\n };\n const normalizeCaptureOption = (options) => {\n if (typeof options === \"boolean\")\n return options;\n return Boolean(options?.capture);\n };\n const removeListenerRecord = (type, record) => {\n if (record.removed)\n return;\n record.removed = true;\n const list = listeners.get(type);\n if (list) {\n const idx = list.indexOf(record);\n if (idx >= 0)\n list.splice(idx, 1);\n if (list.length === 0)\n listeners.delete(type);\n }\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n };\n const handleListenerError = (eventType, error2) => {\n if (eventType === \"error\")\n return;\n if (opts?.onListenerError) {\n opts.onListenerError(eventType, error2);\n return;\n }\n const errorListeners = listeners.get(\"error\");\n if (errorListeners && errorListeners.length > 0) {\n dispatchEvent({ type: \"error\", detail: error2 });\n } else {\n throw error2;\n }\n };\n const notifyWildcardListeners = (eventType, event) => {\n if (wildcardListeners.size === 0)\n return;\n for (const rec of Array.from(wildcardListeners)) {\n if (!matchesWildcard(eventType, rec.pattern))\n continue;\n const baseEvent = createEvent(rec.pattern, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed\n });\n const wildcardEvent = Object.defineProperties(baseEvent, {\n originalType: { value: eventType, enumerable: true, configurable: true }\n });\n try {\n const fn = rec.fn;\n const res = fn(wildcardEvent);\n if (res && typeof res.then === \"function\") {\n res.catch((error2) => {\n try {\n handleListenerError(eventType, error2);\n } catch (rethrown) {\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error2) {\n handleListenerError(eventType, error2);\n } finally {\n if (rec.once)\n wildcardListeners.delete(rec);\n }\n const state = getEventState(wildcardEvent);\n if (state?.stopImmediatePropagationFlag || state?.stopPropagationFlag) {\n break;\n }\n }\n };\n const addEventListener = (type, listener, options) => {\n if (isCompleted || !listener) {\n return () => {};\n }\n const { capture, passive, once, signal } = normalizeAddListenerOptions(options);\n let list = listeners.get(type);\n if (!list) {\n list = [];\n listeners.set(type, list);\n }\n for (const existing of list) {\n if (existing.original === listener && existing.capture === capture) {\n return () => removeEventListener(type, listener, options);\n }\n }\n const original = listener;\n const callback = typeof listener === \"function\" ? listener : (event) => listener.handleEvent(event);\n const record = {\n type,\n original,\n callback,\n capture,\n passive,\n once,\n signal,\n removed: false\n };\n list.push(record);\n const unsubscribe2 = () => removeListenerRecord(type, record);\n if (signal) {\n const onAbort = () => removeListenerRecord(type, record);\n record.abortHandler = onAbort;\n signal.addEventListener(\"abort\", onAbort, { once: true });\n if (signal.aborted)\n onAbort();\n }\n return unsubscribe2;\n };\n const addWildcardListener = (pattern, listener, options) => {\n if (isCompleted)\n return () => {};\n const opts2 = options ?? {};\n for (const existing of wildcardListeners) {\n if (existing.pattern === pattern && existing.fn === listener) {\n return () => removeWildcardListener(pattern, listener);\n }\n }\n const record = {\n fn: listener,\n pattern,\n once: opts2.once,\n signal: opts2.signal\n };\n wildcardListeners.add(record);\n const unsubscribe2 = () => {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n };\n if (opts2.signal) {\n const onAbort = () => unsubscribe2();\n record.abortHandler = onAbort;\n opts2.signal.addEventListener(\"abort\", onAbort, { once: true });\n if (opts2.signal.aborted)\n onAbort();\n }\n return unsubscribe2;\n };\n const removeWildcardListener = (pattern, listener) => {\n for (const record of Array.from(wildcardListeners)) {\n if (record.pattern === pattern && record.fn === listener) {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n }\n }\n };\n const invokeListeners = (eventType, event, phase, listenersSnapshot) => {\n const state = getEventState(event);\n if (!state || state.stopPropagationFlag)\n return;\n state.currentTarget = target;\n state.target = target;\n state.eventPhase = event.AT_TARGET;\n for (const rec of listenersSnapshot) {\n if (rec.removed)\n continue;\n if (phase === \"capturing\" && !rec.capture)\n continue;\n if (phase === \"bubbling\" && rec.capture)\n continue;\n if (rec.once)\n removeListenerRecord(rec.type, rec);\n if (rec.passive)\n state.inPassiveListenerFlag = true;\n try {\n const res = rec.callback.call(state.currentTarget, event);\n if (res && typeof res.then === \"function\") {\n res.catch((error2) => {\n try {\n handleListenerError(eventType, error2);\n } catch (rethrown) {\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error2) {\n handleListenerError(eventType, error2);\n } finally {\n if (rec.passive)\n state.inPassiveListenerFlag = false;\n }\n if (state.stopImmediatePropagationFlag)\n break;\n }\n };\n const dispatchEvent = (eventInput) => {\n if (isCompleted)\n return false;\n let event;\n let state;\n if (eventInput && typeof eventInput === \"object\") {\n state = getEventState(eventInput);\n if (state) {\n event = eventInput;\n } else {\n const input = eventInput;\n if (typeof input.type !== \"string\") {\n throw new TypeError(\"Event type must be a string\");\n }\n event = createEvent(input.type, input.detail, {\n bubbles: input.bubbles,\n cancelable: input.cancelable,\n composed: input.composed,\n timeStamp: input.timeStamp\n });\n state = getEventState(event);\n }\n } else {\n throw new TypeError(\"dispatchEvent expects an event object\");\n }\n const dispatchState = state ?? getEventState(event);\n if (dispatchState.dispatchFlag || !dispatchState.initializedFlag) {\n const message = \"Failed to execute dispatchEvent: event is already being dispatched\";\n if (typeof globalThis.DOMException === \"function\") {\n throw new globalThis.DOMException(message, \"InvalidStateError\");\n }\n const err = new Error(message);\n err.name = \"InvalidStateError\";\n throw err;\n }\n dispatchState.isTrusted = false;\n dispatchState.dispatchFlag = true;\n dispatchState.path = [\n {\n invocationTarget: target,\n invocationTargetInShadowTree: false,\n shadowAdjustedTarget: target,\n relatedTarget: null,\n touchTargets: [],\n rootOfClosedTree: false,\n slotInClosedTree: false\n }\n ];\n notifyWildcardListeners(dispatchState.type, event);\n const list = listeners.get(dispatchState.type);\n const snapshot = list ? list.slice() : [];\n invokeListeners(dispatchState.type, event, \"capturing\", snapshot);\n invokeListeners(dispatchState.type, event, \"bubbling\", snapshot);\n dispatchState.eventPhase = event.NONE;\n dispatchState.currentTarget = null;\n dispatchState.path = [];\n dispatchState.dispatchFlag = false;\n dispatchState.stopPropagationFlag = false;\n dispatchState.stopImmediatePropagationFlag = false;\n return !dispatchState.canceledFlag;\n };\n const removeEventListener = (type, listener, options) => {\n if (!listener)\n return;\n const capture = normalizeCaptureOption(options);\n const list = listeners.get(type);\n if (!list)\n return;\n for (const record of [...list]) {\n if (record.original === listener && record.capture === capture) {\n removeListenerRecord(type, record);\n }\n }\n };\n const clear = () => {\n for (const [type, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n }\n listeners.clear();\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n }\n wildcardListeners.clear();\n };\n const on = (type, options) => {\n return new Observable((observer) => {\n let opts2;\n if (typeof options === \"boolean\") {\n opts2 = { capture: options };\n } else {\n opts2 = options ?? {};\n }\n const handler = opts2.handler;\n const once = opts2.once;\n const eventHandler = (e) => {\n let success = false;\n try {\n if (handler) {\n handler(e);\n }\n observer.next(e);\n success = true;\n } finally {\n if (once && success) {\n observer.complete();\n }\n }\n };\n const errorHandler = (e) => {\n observer.error(e.detail);\n };\n const unsubscribeEvent = addEventListener(type, eventHandler, opts2);\n let unsubscribeError;\n if (opts2.receiveError) {\n unsubscribeError = addEventListener(\"error\", errorHandler, opts2);\n }\n return () => {\n unsubscribeEvent();\n if (unsubscribeError) {\n unsubscribeError();\n }\n };\n });\n };\n const onceMethod = (type, listener, options) => {\n if (typeof options === \"boolean\") {\n return addEventListener(type, listener, { capture: options, once: true });\n }\n return addEventListener(type, listener, { ...options ?? {}, once: true });\n };\n const removeAllListeners = (type) => {\n if (type !== undefined) {\n const list = listeners.get(type);\n if (list) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n listeners.delete(type);\n }\n } else {\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n }\n wildcardListeners.clear();\n }\n };\n const pipe = (target2, mapFn) => {\n if (isCompleted) {\n return () => {};\n }\n const unsubscribe2 = addWildcardListener(\"*\", (event) => {\n if (mapFn) {\n const mapped = mapFn(createEvent(event.originalType, event.detail, {\n target: target2,\n currentTarget: target2,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed\n }));\n if (mapped !== null) {\n target2.dispatchEvent(mapped);\n }\n } else {\n target2.dispatchEvent({\n type: event.originalType,\n detail: event.detail\n });\n }\n });\n const completionUnsub = () => {\n unsubscribe2();\n };\n completionCallbacks.add(completionUnsub);\n return () => {\n completionCallbacks.delete(completionUnsub);\n unsubscribe2();\n };\n };\n const complete2 = () => {\n if (isCompleted)\n return;\n isCompleted = true;\n for (const cb of completionCallbacks) {\n try {\n cb();\n } catch (err) {\n try {\n handleListenerError(\"complete\", err);\n } catch {}\n }\n }\n completionCallbacks.clear();\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener(\"abort\", record.abortHandler);\n }\n }\n wildcardListeners.clear();\n };\n const subscribe = (type, observerOrNext, error2, completeHandler) => {\n let observer;\n if (typeof observerOrNext === \"function\") {\n observer = {\n next: observerOrNext,\n error: error2,\n complete: completeHandler\n };\n } else {\n observer = observerOrNext ?? {};\n }\n let closed = false;\n if (isCompleted) {\n if (observer.complete) {\n try {\n observer.complete();\n } catch {}\n }\n return {\n unsubscribe: () => {\n closed = true;\n },\n get closed() {\n return closed || isCompleted;\n }\n };\n }\n const unsub = addEventListener(type, (event) => {\n if (closed)\n return;\n if (observer.next) {\n try {\n observer.next(event);\n } catch (err) {\n if (observer.error) {\n try {\n observer.error(err);\n } catch {}\n }\n }\n }\n });\n const onComplete = () => {\n if (closed)\n return;\n closed = true;\n if (observer.complete) {\n try {\n observer.complete();\n } catch {}\n }\n };\n completionCallbacks.add(onComplete);\n return {\n unsubscribe: () => {\n if (closed)\n return;\n closed = true;\n completionCallbacks.delete(onComplete);\n unsub();\n },\n get closed() {\n return closed || isCompleted;\n }\n };\n };\n const toObservable = () => {\n return new Observable((observer) => {\n if (isCompleted) {\n observer.complete();\n return;\n }\n const wildcardListener = (event) => {\n observer.next(createEvent(event.originalType, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed\n }));\n };\n const unsubscribe2 = addWildcardListener(\"*\", wildcardListener);\n const onComplete = () => {\n observer.complete();\n };\n completionCallbacks.add(onComplete);\n return () => {\n unsubscribe2();\n completionCallbacks.delete(onComplete);\n };\n });\n };\n function events(type, options) {\n if (isCompleted) {\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next() {\n return Promise.resolve({\n value: undefined,\n done: true\n });\n },\n return() {\n return Promise.resolve({\n value: undefined,\n done: true\n });\n }\n };\n }\n const signal = options?.signal;\n const bufferSize = options?.bufferSize ?? Infinity;\n const overflowStrategy = options?.overflowStrategy ?? \"drop-oldest\";\n const buffer = [];\n let resolve = null;\n let done = false;\n let hasOverflow = false;\n let onAbort = null;\n const cleanupAbortListener = () => {\n if (signal && onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n };\n const unsub = addEventListener(type, (event) => {\n if (done)\n return;\n const typedEvent = event;\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: typedEvent, done: false });\n } else {\n if (buffer.length >= bufferSize && bufferSize !== Infinity) {\n switch (overflowStrategy) {\n case \"drop-oldest\":\n buffer.shift();\n buffer.push(typedEvent);\n break;\n case \"drop-latest\":\n break;\n case \"throw\":\n unsub();\n completionCallbacks.delete(onComplete);\n done = true;\n hasOverflow = true;\n cleanupAbortListener();\n return;\n }\n } else {\n buffer.push(typedEvent);\n }\n }\n });\n const onComplete = () => {\n done = true;\n cleanupAbortListener();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined, done: true });\n }\n };\n completionCallbacks.add(onComplete);\n if (signal) {\n onAbort = () => {\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined, done: true });\n }\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n if (signal.aborted)\n onAbort();\n }\n const iterator = {\n [Symbol.asyncIterator]() {\n return this;\n },\n async next() {\n if (buffer.length > 0) {\n return { value: buffer.shift(), done: false };\n }\n if (resolve !== null) {\n return Promise.reject(new Error(\"Concurrent calls to next() are not supported on this async iterator\"));\n }\n return new Promise((_resolve, _reject) => {\n if (hasOverflow) {\n hasOverflow = false;\n _reject(new BufferOverflowError(type, bufferSize));\n return;\n }\n if (done) {\n _resolve({\n value: undefined,\n done: true\n });\n return;\n }\n resolve = _resolve;\n });\n },\n return() {\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined, done: true });\n }\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n cleanupAbortListener();\n return Promise.resolve({\n value: undefined,\n done: true\n });\n }\n };\n return iterator;\n }\n const target = {\n addEventListener,\n removeEventListener,\n dispatchEvent,\n clear,\n on,\n once: onceMethod,\n removeAllListeners,\n pipe,\n addWildcardListener,\n removeWildcardListener,\n complete: complete2,\n get completed() {\n return isCompleted;\n },\n subscribe,\n toObservable,\n events\n };\n target[SymbolObservable] = () => {\n return toObservable();\n };\n return target;\n}\n// src/event-emission.ts\nclass EventEmission {\n #target;\n constructor() {\n this.#target = createEventTarget();\n }\n addEventListener(type, listener, options) {\n return this.#target.addEventListener(type, listener, options);\n }\n removeEventListener(type, listener, options) {\n this.#target.removeEventListener(type, listener, options);\n }\n dispatchEvent(event) {\n return this.#target.dispatchEvent(event);\n }\n on(type, options) {\n return this.#target.on(type, options);\n }\n once(type, listener, options) {\n return this.#target.once(type, listener, options);\n }\n removeAllListeners(type) {\n this.#target.removeAllListeners(type);\n }\n clear() {\n this.#target.clear();\n }\n pipe(target, mapFn) {\n return this.#target.pipe(target, mapFn);\n }\n addWildcardListener(pattern, listener, options) {\n return this.#target.addWildcardListener(pattern, listener, options);\n }\n removeWildcardListener(pattern, listener) {\n this.#target.removeWildcardListener(pattern, listener);\n }\n subscribe(typeOrObserver, observerOrNext, error2, completeHandler) {\n if (typeof typeOrObserver === \"string\") {\n return this.#target.subscribe(typeOrObserver, observerOrNext, error2, completeHandler);\n }\n if (typeof typeOrObserver === \"function\") {\n return this.#target.toObservable().subscribe(typeOrObserver);\n }\n if (typeof typeOrObserver === \"object\" && typeOrObserver !== null) {\n const maybeObserver = typeOrObserver;\n if (typeof maybeObserver.next === \"function\" || typeof maybeObserver.error === \"function\" || typeof maybeObserver.complete === \"function\") {\n return this.#target.toObservable().subscribe(typeOrObserver);\n }\n return this.#target.toObservable().subscribe({});\n }\n throw new Error(\"subscribe() requires a string event type, callback function, or observer object\");\n }\n toObservable() {\n return this.#target.toObservable();\n }\n [SymbolObservable]() {\n return this.toObservable();\n }\n complete() {\n this.#target.complete();\n }\n get completed() {\n return this.#target.completed;\n }\n events(type, options) {\n return this.#target.events(type, options);\n }\n}\nexport {\n createEventTarget,\n SymbolObservable,\n EventEmission,\n BufferOverflowError\n};\n\n//# debugId=60621EDDB80DC90E64756E2164756E21\n",
|
|
22
|
+
"import type {\n AddEventListenerOptionsLike,\n EmissionEvent,\n EventListenerLike,\n EventListenerOptionsLike,\n EventTargetLike,\n} from 'event-emission';\nimport { createEventTarget } from 'event-emission';\n\nimport {\n estimateConversationTokens,\n getRecentMessages,\n truncateFromPosition,\n type TruncateOptions,\n truncateToTokenLimit,\n} from './context';\nimport {\n appendAssistantMessage,\n appendMessages,\n appendSystemMessage,\n appendUserMessage,\n collapseSystemMessages,\n createConversation,\n deserializeConversation,\n getFirstSystemMessage,\n getMessageAtPosition,\n getMessageById,\n getMessageIds,\n getMessages,\n getStatistics,\n getSystemMessages,\n hasSystemMessage,\n prependSystemMessage,\n redactMessageAtPosition,\n replaceSystemMessage,\n searchConversationMessages,\n toChatMessages,\n} from './conversation';\nimport {\n type ConversationEnvironment,\n resolveConversationEnvironment,\n} from './environment';\nimport {\n appendStreamingMessage,\n cancelStreamingMessage,\n finalizeStreamingMessage,\n getStreamingMessage,\n updateStreamingMessage,\n} from './streaming';\nimport type {\n Conversation,\n ConversationHistorySnapshot,\n HistoryNodeSnapshot,\n JSONValue,\n Message,\n MessageInput,\n TokenUsage,\n} from './types';\n\n/**\n * Event detail for conversation history changes.\n */\nexport interface ConversationHistoryEventDetail {\n type: ConversationHistoryActionType;\n conversation: Conversation;\n}\n\nexport type ConversationHistoryEvent = EmissionEvent<\n ConversationHistoryEventDetail,\n ConversationHistoryEventType\n>;\n\ntype ConversationHistoryActionType = 'push' | 'undo' | 'redo' | 'switch';\ntype ConversationHistoryEventType = 'change' | ConversationHistoryActionType;\ntype ConversationHistoryEventMap = Record<\n ConversationHistoryEventType,\n ConversationHistoryEventDetail\n>;\ntype ConversationHistoryEventTarget = EventTargetLike<ConversationHistoryEventMap>;\n\ninterface HistoryNode {\n conversation: Conversation;\n parent: HistoryNode | null;\n children: HistoryNode[];\n}\n\n/**\n * Manages a stack of conversation versions to support undo, redo, and branching.\n */\nexport class ConversationHistory extends EventTarget {\n private currentNode: HistoryNode;\n private environment: ConversationEnvironment;\n private readonly events: ConversationHistoryEventTarget;\n\n constructor(\n initial: Conversation = createConversation(),\n environment?: Partial<ConversationEnvironment>,\n ) {\n super();\n this.environment = resolveConversationEnvironment(environment);\n this.events = createEventTarget<ConversationHistoryEventMap>();\n this.currentNode = {\n conversation: initial,\n parent: null,\n children: [],\n };\n }\n\n /**\n * Dispatches a change event.\n */\n private notifyChange(type: ConversationHistoryActionType): void {\n const detail: ConversationHistoryEventDetail = {\n type,\n conversation: this.current,\n };\n this.events.dispatchEvent({ type: 'change', detail });\n this.events.dispatchEvent({ type, detail });\n }\n\n private toAddListenerOptions(\n options?: boolean | AddEventListenerOptions,\n ): AddEventListenerOptionsLike | boolean | undefined {\n if (typeof options === 'boolean' || options === undefined) return options;\n const mapped: AddEventListenerOptionsLike = {};\n if (options.capture !== undefined) mapped.capture = options.capture;\n if (options.once !== undefined) mapped.once = options.once;\n if (options.passive !== undefined) mapped.passive = options.passive;\n if (options.signal !== undefined) {\n mapped.signal = options.signal as NonNullable<\n AddEventListenerOptionsLike['signal']\n >;\n }\n return mapped;\n }\n\n private toRemoveListenerOptions(\n options?: boolean | EventListenerOptions,\n ): EventListenerOptionsLike | boolean | undefined {\n if (typeof options === 'boolean' || options === undefined) return options;\n const mapped: EventListenerOptionsLike = {};\n if (options.capture !== undefined) mapped.capture = options.capture;\n return mapped;\n }\n\n /**\n * Overrides addEventListener to optionally return an unsubscribe function.\n * This is a convenience for modern frontend frameworks.\n */\n override addEventListener(\n type: string,\n callback:\n | ((event: ConversationHistoryEvent) => void)\n | EventListenerOrEventListenerObject\n | null,\n options?: boolean | AddEventListenerOptions,\n ): void | (() => void) {\n if (!callback) return;\n return this.events.addEventListener(\n type as ConversationHistoryEventType,\n callback as EventListenerLike<ConversationHistoryEvent>,\n this.toAddListenerOptions(options),\n );\n }\n\n /**\n * Removes a listener registered with addEventListener.\n */\n override removeEventListener(\n type: string,\n callback:\n | ((event: ConversationHistoryEvent) => void)\n | EventListenerOrEventListenerObject\n | null,\n options?: boolean | EventListenerOptions,\n ): void {\n if (!callback) return;\n this.events.removeEventListener(\n type as ConversationHistoryEventType,\n callback as EventListenerLike<ConversationHistoryEvent>,\n this.toRemoveListenerOptions(options),\n );\n }\n\n /**\n * Dispatches a DOM-style event through the event-emission target.\n */\n override dispatchEvent(event: Event): boolean {\n return this.events.dispatchEvent(\n event as Parameters<ConversationHistoryEventTarget['dispatchEvent']>[0],\n );\n }\n\n /**\n * Subscribes to conversation changes.\n * This follows the Svelte store contract, making ConversationHistory a valid Svelte store.\n * @param run - Callback called with the current conversation whenever it changes.\n * @returns An unsubscribe function.\n */\n subscribe(run: (value: Conversation) => void): () => void {\n // Call immediately with current value (Svelte store contract)\n run(this.current);\n\n const handler = (event: ConversationHistoryEvent) => {\n if (event?.detail?.conversation) {\n run(event.detail.conversation);\n }\n };\n\n const unsubscribe = this.addEventListener(\n 'change',\n handler as (event: ConversationHistoryEvent) => void,\n );\n return (unsubscribe as () => void) || (() => {});\n }\n\n /**\n * Returns the current conversation.\n * Useful for useSyncExternalStore in React.\n */\n getSnapshot(): Conversation {\n return this.current;\n }\n\n /**\n * The current conversation state.\n */\n get current(): Conversation {\n return this.currentNode.conversation;\n }\n\n /**\n * Returns the message IDs for the current conversation.\n */\n get ids(): string[] {\n return getMessageIds(this.current);\n }\n\n /**\n * Whether an undo operation is possible.\n */\n get canUndo(): boolean {\n return this.currentNode.parent !== null;\n }\n\n /**\n * Whether a redo operation is possible.\n */\n get canRedo(): boolean {\n return this.currentNode.children.length > 0;\n }\n\n /**\n * Returns the environment associated with this history.\n */\n get env(): ConversationEnvironment {\n return this.environment;\n }\n\n /**\n * Returns the number of branches available at the current level.\n */\n get branchCount(): number {\n return this.currentNode.parent ? this.currentNode.parent.children.length : 1;\n }\n\n /**\n * Returns the index of the current branch at this level.\n */\n get branchIndex(): number {\n if (!this.currentNode.parent) return 0;\n return this.currentNode.parent.children.indexOf(this.currentNode);\n }\n\n /**\n * Returns the number of alternate paths available from the current state.\n */\n get redoCount(): number {\n return this.currentNode.children.length;\n }\n\n /**\n * Pushes a new conversation state onto the history.\n * If the current state is not a leaf, a new branch is created.\n */\n push(next: Conversation): void {\n const newNode: HistoryNode = {\n conversation: next,\n parent: this.currentNode,\n children: [],\n };\n this.currentNode.children.push(newNode);\n this.currentNode = newNode;\n this.notifyChange('push');\n }\n\n /**\n * Reverts to the previous conversation state.\n * @returns The conversation state after undo, or undefined if not possible.\n */\n undo(): Conversation | undefined {\n if (this.currentNode.parent) {\n this.currentNode = this.currentNode.parent;\n this.notifyChange('undo');\n return this.current;\n }\n return undefined;\n }\n\n /**\n * Advances to the next conversation state.\n * @param childIndex - The index of the branch to follow (default: 0).\n * @returns The conversation state after redo, or undefined if not possible.\n */\n redo(childIndex: number = 0): Conversation | undefined {\n const next = this.currentNode.children[childIndex];\n if (next) {\n this.currentNode = next;\n this.notifyChange('redo');\n return this.current;\n }\n return undefined;\n }\n\n /**\n * Switches to a different branch at the current level.\n * @param index - The index of the sibling branch to switch to.\n * @returns The new conversation state, or undefined if not possible.\n */\n switchToBranch(index: number): Conversation | undefined {\n if (this.currentNode.parent) {\n const target = this.currentNode.parent.children[index];\n if (target) {\n this.currentNode = target;\n this.notifyChange('switch');\n return this.current;\n }\n }\n return undefined;\n }\n\n /**\n * Returns the sequence of conversations from root to current.\n */\n getPath(): Conversation[] {\n const path: Conversation[] = [];\n let curr: HistoryNode | null = this.currentNode;\n while (curr) {\n path.unshift(curr.conversation);\n curr = curr.parent;\n }\n return path;\n }\n\n // --- QUERY METHODS ---\n\n /**\n * Returns messages from the current conversation.\n */\n getMessages(options?: { includeHidden?: boolean }): ReadonlyArray<Message> {\n return getMessages(this.current, options);\n }\n\n /**\n * Returns the message at the specified position.\n */\n getMessageAtPosition(position: number): Message | undefined {\n return getMessageAtPosition(this.current, position);\n }\n\n /**\n * Returns all message IDs for the current conversation in order.\n */\n getMessageIds(): string[] {\n return getMessageIds(this.current);\n }\n\n /**\n * Returns the message with the specified ID, if present.\n */\n getMessageById(id: string): Message | undefined {\n return getMessageById(this.current, id);\n }\n\n /**\n * Shorthand for getMessageById.\n */\n get(id: string): Message | undefined {\n return getMessageById(this.current, id);\n }\n\n /**\n * Filters messages using a predicate.\n */\n searchMessages(predicate: (m: Message) => boolean): Message[] {\n return searchConversationMessages(this.current, predicate);\n }\n\n /**\n * Computes basic statistics for the current conversation.\n */\n getStatistics() {\n return getStatistics(this.current);\n }\n\n /**\n * Returns true if any system message exists in the current conversation.\n */\n hasSystemMessage(): boolean {\n return hasSystemMessage(this.current);\n }\n\n /**\n * Returns the first system message in the current conversation, if any.\n */\n getFirstSystemMessage(): Message | undefined {\n return getFirstSystemMessage(this.current);\n }\n\n /**\n * Returns all system messages in the current conversation.\n */\n getSystemMessages(): ReadonlyArray<Message> {\n return getSystemMessages(this.current);\n }\n\n /**\n * Converts the current conversation to external chat message format.\n */\n toChatMessages() {\n return toChatMessages(this.current);\n }\n\n /**\n * Estimates tokens for the current conversation.\n */\n estimateTokens(estimator?: (message: Message) => number): number {\n return estimateConversationTokens(this.current, estimator, this.env);\n }\n\n /**\n * Returns the most recent messages, with optional filtering.\n */\n getRecentMessages(\n count: number,\n options?: { includeHidden?: boolean; includeSystem?: boolean },\n ): ReadonlyArray<Message> {\n return getRecentMessages(this.current, count, options);\n }\n\n /**\n * Returns the current streaming message, if any.\n */\n getStreamingMessage(): Message | undefined {\n return getStreamingMessage(this.current);\n }\n\n // --- MUTATION METHODS ---\n\n /**\n * Appends one or more messages to the history.\n */\n appendMessages(...inputs: MessageInput[]): void {\n this.push(appendMessages(this.current, ...inputs, this.env));\n }\n\n /**\n * Appends a user message to the history.\n */\n appendUserMessage(\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ): void {\n this.push(appendUserMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Appends an assistant message to the history.\n */\n appendAssistantMessage(\n content: MessageInput['content'],\n metadata?: Record<string, JSONValue>,\n ): void {\n this.push(appendAssistantMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Appends a system message to the history.\n */\n appendSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(appendSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Prepends a system message to the history.\n */\n prependSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(prependSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Replaces the first system message or prepends one if none exist.\n */\n replaceSystemMessage(content: string, metadata?: Record<string, JSONValue>): void {\n this.push(replaceSystemMessage(this.current, content, metadata, this.env));\n }\n\n /**\n * Collapses multiple system messages into a single message.\n */\n collapseSystemMessages(): void {\n this.push(collapseSystemMessages(this.current, this.env));\n }\n\n /**\n * Redacts the message at the given position.\n */\n redactMessageAtPosition(position: number, placeholder?: string): void {\n this.push(redactMessageAtPosition(this.current, position, placeholder, this.env));\n }\n\n /**\n * Truncates the conversation from a specific position.\n */\n truncateFromPosition(\n position: number,\n options?: { preserveSystemMessages?: boolean },\n ): void {\n this.push(truncateFromPosition(this.current, position, options, this.env));\n }\n\n /**\n * Truncates the conversation to fit within a token limit.\n */\n truncateToTokenLimit(maxTokens: number, options?: TruncateOptions): void {\n this.push(truncateToTokenLimit(this.current, maxTokens, options, this.env));\n }\n\n /**\n * Appends a streaming message placeholder and returns its ID.\n */\n appendStreamingMessage(\n role: 'assistant' | 'user',\n metadata?: Record<string, JSONValue>,\n ): string {\n const { conversation, messageId } = appendStreamingMessage(\n this.current,\n role,\n metadata,\n this.env,\n );\n this.push(conversation);\n return messageId;\n }\n\n /**\n * Updates a streaming message's content.\n */\n updateStreamingMessage(messageId: string, content: string): void {\n this.push(updateStreamingMessage(this.current, messageId, content, this.env));\n }\n\n /**\n * Finalizes a streaming message and optionally adds metadata or token usage.\n */\n finalizeStreamingMessage(\n messageId: string,\n options?: { tokenUsage?: TokenUsage; metadata?: Record<string, JSONValue> },\n ): void {\n this.push(finalizeStreamingMessage(this.current, messageId, options, this.env));\n }\n\n /**\n * Cancels a streaming message by removing it from the conversation.\n */\n cancelStreamingMessage(messageId: string): void {\n this.push(cancelStreamingMessage(this.current, messageId, this.env));\n }\n\n /**\n * Captures the entire history tree and current state in a plain snapshot.\n */\n snapshot(): ConversationHistorySnapshot {\n const getPath = (node: HistoryNode): number[] => {\n const path: number[] = [];\n let curr = node;\n while (curr.parent) {\n path.unshift(curr.parent.children.indexOf(curr));\n curr = curr.parent;\n }\n return path;\n };\n\n const serializeNode = (node: HistoryNode): HistoryNodeSnapshot => ({\n conversation: node.conversation,\n children: node.children.map(serializeNode),\n });\n\n let root = this.currentNode;\n while (root.parent) {\n root = root.parent;\n }\n\n return {\n root: serializeNode(root),\n currentPath: getPath(this.currentNode),\n };\n }\n\n /**\n * Reconstructs a ConversationHistory instance from JSON.\n */\n static from(\n json: ConversationHistorySnapshot,\n environment?: Partial<ConversationEnvironment>,\n ): ConversationHistory {\n const rootConv = deserializeConversation(json.root.conversation);\n const history = new ConversationHistory(rootConv, environment);\n\n // Recursive function to build the tree\n const buildTree = (\n nodeJSON: HistoryNodeSnapshot,\n parentNode: HistoryNode,\n ): HistoryNode => {\n const nodeConv = deserializeConversation(nodeJSON.conversation);\n const node: HistoryNode = {\n conversation: nodeConv,\n parent: parentNode,\n children: [],\n };\n node.children = nodeJSON.children.map((child) => buildTree(child, node));\n return node;\n };\n\n const h = history as unknown as { currentNode: HistoryNode };\n const rootNode = h.currentNode;\n rootNode.children = json.root.children.map((child) => buildTree(child, rootNode));\n\n // Traverse to find the current node\n let current: HistoryNode = rootNode;\n for (const index of json.currentPath) {\n const target = current.children[index];\n if (target) {\n current = target;\n }\n }\n h.currentNode = current;\n\n return history;\n }\n\n /**\n * Binds a function to this history instance.\n * The first argument of the function must be a Conversation.\n * If the function returns a new Conversation, it is automatically pushed to the history.\n */\n bind<T extends unknown[], R>(\n fn: (\n conversation: Conversation,\n ...args: [...T, Partial<ConversationEnvironment>?]\n ) => R,\n ): (...args: T) => R {\n return (...args: T): R => {\n // We pass the history's environment as the last argument if the function supports it\n const boundFn = fn as (conversation: Conversation, ...args: unknown[]) => R;\n const result = boundFn(this.current, ...args, this.env);\n\n if (isConversation(result)) {\n this.push(result);\n }\n\n return result;\n };\n }\n\n /**\n * Cleans up all listeners and resources.\n */\n [Symbol.dispose](): void {\n // Clear references to help GC\n let root: HistoryNode | null = this.currentNode;\n while (root?.parent) {\n root = root.parent;\n }\n\n const clearNode = (node: HistoryNode) => {\n for (const child of node.children) {\n clearNode(child);\n }\n node.children = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const n = node as any;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n n.parent = null;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n n.conversation = null;\n };\n\n if (root) clearNode(root);\n this.events.clear();\n }\n}\n\n/**\n * Simple type guard to check if a value is a Conversation.\n */\nfunction isConversation(value: unknown): value is Conversation {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as Conversation).schemaVersion === 'number' &&\n typeof (value as Conversation).id === 'string' &&\n typeof (value as Conversation).status === 'string' &&\n (value as Conversation).metadata !== null &&\n typeof (value as Conversation).metadata === 'object' &&\n Array.isArray((value as Conversation).ids) &&\n typeof (value as Conversation).messages === 'object' &&\n (value as Conversation).messages !== null &&\n !Array.isArray((value as Conversation).messages) &&\n typeof (value as Conversation).createdAt === 'string' &&\n typeof (value as Conversation).updatedAt === 'string'\n );\n}\n"
|
|
21
23
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
24
|
+
"mappings": "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",
|
|
25
|
+
"debugId": "684D5332D9139AFC64756E2164756E21",
|
|
24
26
|
"names": []
|
|
25
27
|
}
|