conversationalist 0.0.10 → 0.0.11

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.
Files changed (67) hide show
  1. package/README.md +89 -15
  2. package/dist/adapters/anthropic/index.d.ts.map +1 -1
  3. package/dist/adapters/anthropic/index.js +255 -2
  4. package/dist/adapters/anthropic/index.js.map +8 -4
  5. package/dist/adapters/gemini/index.d.ts.map +1 -1
  6. package/dist/adapters/gemini/index.js +255 -3
  7. package/dist/adapters/gemini/index.js.map +8 -4
  8. package/dist/adapters/openai/index.d.ts.map +1 -1
  9. package/dist/adapters/openai/index.js +247 -3
  10. package/dist/adapters/openai/index.js.map +8 -4
  11. package/dist/context.d.ts +6 -0
  12. package/dist/context.d.ts.map +1 -1
  13. package/dist/conversation/append.d.ts +5 -0
  14. package/dist/conversation/append.d.ts.map +1 -1
  15. package/dist/conversation/create.d.ts +9 -0
  16. package/dist/conversation/create.d.ts.map +1 -1
  17. package/dist/conversation/index.d.ts +8 -3
  18. package/dist/conversation/index.d.ts.map +1 -1
  19. package/dist/conversation/integrity.d.ts +16 -0
  20. package/dist/conversation/integrity.d.ts.map +1 -0
  21. package/dist/conversation/modify.d.ts +8 -2
  22. package/dist/conversation/modify.d.ts.map +1 -1
  23. package/dist/conversation/serialization.d.ts +0 -17
  24. package/dist/conversation/serialization.d.ts.map +1 -1
  25. package/dist/conversation/system-messages.d.ts.map +1 -1
  26. package/dist/conversation/tool-interactions.d.ts +45 -0
  27. package/dist/conversation/tool-interactions.d.ts.map +1 -0
  28. package/dist/conversation/transform.d.ts.map +1 -1
  29. package/dist/conversation/validation.d.ts +8 -0
  30. package/dist/conversation/validation.d.ts.map +1 -0
  31. package/dist/errors.d.ts +6 -1
  32. package/dist/errors.d.ts.map +1 -1
  33. package/dist/export/index.js +249 -12
  34. package/dist/export/index.js.map +10 -6
  35. package/dist/history.d.ts +4 -1
  36. package/dist/history.d.ts.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +604 -231
  40. package/dist/index.js.map +24 -13
  41. package/dist/markdown/index.js +595 -215
  42. package/dist/markdown/index.js.map +22 -12
  43. package/dist/schemas/index.js +35 -19
  44. package/dist/schemas/index.js.map +3 -3
  45. package/dist/schemas.d.ts +15 -35
  46. package/dist/schemas.d.ts.map +1 -1
  47. package/dist/streaming.d.ts.map +1 -1
  48. package/dist/types.d.ts +0 -4
  49. package/dist/types.d.ts.map +1 -1
  50. package/dist/utilities/index.d.ts +0 -1
  51. package/dist/utilities/index.d.ts.map +1 -1
  52. package/dist/utilities/markdown.d.ts.map +1 -1
  53. package/dist/utilities/tool-calls.d.ts +2 -6
  54. package/dist/utilities/tool-calls.d.ts.map +1 -1
  55. package/dist/utilities/tool-results.d.ts.map +1 -1
  56. package/dist/utilities/transient.d.ts.map +1 -1
  57. package/dist/utilities.d.ts +0 -1
  58. package/dist/utilities.d.ts.map +1 -1
  59. package/dist/versioning/index.d.ts +0 -1
  60. package/dist/versioning/index.d.ts.map +1 -1
  61. package/dist/versioning/index.js +1 -52
  62. package/dist/versioning/index.js.map +4 -5
  63. package/dist/with-conversation.d.ts +4 -1
  64. package/dist/with-conversation.d.ts.map +1 -1
  65. package/package.json +6 -4
  66. package/dist/conversation.d.ts +0 -109
  67. package/dist/conversation.d.ts.map +0 -1
package/dist/index.js.map CHANGED
@@ -1,27 +1,38 @@
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/guards.ts", "../src/context.ts", "../src/streaming.ts", "../src/with-conversation.ts", "../node_modules/event-emission/dist/index.js", "../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/errors.ts", "../src/conversation/integrity.ts", "../src/conversation/validation.ts", "../src/utilities/message-store.ts", "../src/utilities/transient.ts", "../src/environment.ts", "../src/types.ts", "../src/conversation/create.ts", "../src/conversation/tool-tracking.ts", "../src/conversation/append.ts", "../src/conversation/query.ts", "../src/conversation/system-messages.ts", "../src/utilities/tool-results.ts", "../src/conversation/modify.ts", "../src/conversation/serialization.ts", "../src/conversation/transform.ts", "../src/conversation/tool-interactions.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 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",
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\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') return false;\n const prototype = Reflect.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\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 const jsonObjectSchema = z.preprocess(\n (value, ctx) => {\n if (!isPlainObject(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'expected a plain object',\n });\n return z.NEVER;\n }\n return value;\n },\n z.record(z.string(), jsonValueSchema),\n );\n\n return z.union([\n z.string(),\n z.number().refine((value) => Number.isFinite(value), {\n message: 'expected a finite number',\n }),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n jsonObjectSchema,\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\n .object({\n id: z.string(),\n name: z.string(),\n arguments: jsonValueSchema,\n })\n .strict() satisfies z.ZodType<ToolCall>;\n\n/**\n * Zod schema for tool result metadata.\n */\nexport const toolResultSchema = z\n .object({\n callId: z.string(),\n outcome: z.enum(['success', 'error']),\n content: jsonValueSchema,\n })\n .strict() 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\n .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 })\n .strict() 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 .strict() 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\n .object(conversationShape)\n .strict() 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 : `![${part.text ?? ''}](${(part as { url: string }).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",
10
- "import type { JSONValue, Message, ToolResult } from '../types';\n\n/**\n * Represents a paired tool call with its optional result.\n */\nexport interface ToolCallPair {\n /** The tool call */\n call: {\n id: string;\n name: string;\n arguments: JSONValue;\n };\n /** The corresponding result, if available */\n result?: ToolResult | undefined;\n}\n\n/**\n * Pairs tool calls with their corresponding results from a list of messages.\n *\n * This is useful for UI rendering where tool calls and their results need\n * to be displayed together. The function performs two passes:\n * 1. Collects all tool results into a map by their callId\n * 2. Pairs each tool call with its matching result (if any)\n *\n * @param messages - Messages that may contain tool calls and results (array or record)\n * @returns Array of tool call pairs, preserving the order of tool calls\n *\n * @example\n * ```ts\n * const pairs = pairToolCallsWithResults(conversation.messages);\n * // pairs: [{ call: ToolCall, result?: ToolResult }, ...]\n * ```\n */\nexport function pairToolCallsWithResults(\n messages: ReadonlyArray<Message> | Readonly<Record<string, Message>>,\n): ToolCallPair[] {\n const isMessageArray = (\n value: ReadonlyArray<Message> | Readonly<Record<string, Message>>,\n ): value is ReadonlyArray<Message> => Array.isArray(value);\n\n const ordered = isMessageArray(messages)\n ? messages\n : Object.values(messages).sort((a, b) => a.position - b.position);\n const pairs: ToolCallPair[] = [];\n const resultsMap = new Map<string, ToolResult>();\n\n // First pass: collect all results\n for (const msg of ordered) {\n if (msg.toolResult) {\n resultsMap.set(msg.toolResult.callId, msg.toolResult);\n }\n }\n\n // Second pass: pair calls with results\n for (const msg of ordered) {\n if (msg.toolCall) {\n pairs.push({\n call: msg.toolCall,\n result: resultsMap.get(msg.toolCall.id),\n });\n }\n }\n\n return pairs;\n}\n",
10
+ "import type { Message, ToolCall, ToolResult } from '../types';\n\n/**\n * Represents a paired tool call with its optional result.\n */\nexport interface ToolCallPair {\n /** The tool call */\n call: ToolCall;\n /** The corresponding result, if available */\n result?: ToolResult | undefined;\n}\n\n/**\n * Pairs tool calls with their corresponding results from a list of messages.\n *\n * This is useful for UI rendering where tool calls and their results need\n * to be displayed together. The function performs two passes:\n * 1. Collects all tool results into a map by their callId\n * 2. Pairs each tool call with its matching result (if any)\n *\n * @param messages - Messages that may contain tool calls and results (array or record)\n * @returns Array of tool call pairs, preserving the order of tool calls\n *\n * @example\n * ```ts\n * const pairs = pairToolCallsWithResults(conversation.messages);\n * // pairs: [{ call: ToolCall, result?: ToolResult }, ...]\n * ```\n */\nexport function pairToolCallsWithResults(\n messages: ReadonlyArray<Message> | Readonly<Record<string, Message>>,\n): ToolCallPair[] {\n const isMessageArray = (\n value: ReadonlyArray<Message> | Readonly<Record<string, Message>>,\n ): value is ReadonlyArray<Message> => Array.isArray(value);\n\n const ordered = isMessageArray(messages)\n ? messages\n : Object.values(messages).sort((a, b) => a.position - b.position);\n const pairs: ToolCallPair[] = [];\n const resultsMap = new Map<string, ToolResult>();\n\n // First pass: collect all results\n for (const msg of ordered) {\n if (msg.toolResult) {\n resultsMap.set(msg.toolResult.callId, msg.toolResult);\n }\n }\n\n // Second pass: pair calls with results\n for (const msg of ordered) {\n if (msg.toolCall) {\n pairs.push({\n call: msg.toolCall,\n result: resultsMap.get(msg.toolCall.id),\n });\n }\n }\n\n return pairs;\n}\n",
11
+ "/**\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 | 'error:integrity';\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\n/**\n * Creates an integrity error (ERR_INTEGRITY).\n * Thrown when conversation invariants are violated.\n */\nexport function createIntegrityError(\n message: string,\n context?: Record<string, unknown>,\n): ConversationalistError {\n return new ConversationalistError('error:integrity', message, { context });\n}\n",
12
+ "import { createIntegrityError } from '../errors';\nimport type { Conversation } from '../types';\n\nexport type IntegrityIssueCode =\n | 'integrity:missing-message'\n | 'integrity:unlisted-message'\n | 'integrity:duplicate-message-id'\n | 'integrity:orphan-tool-result'\n | 'integrity:tool-result-before-call'\n | 'integrity:duplicate-tool-call';\n\nexport interface IntegrityIssue {\n code: IntegrityIssueCode;\n message: string;\n data?: Record<string, unknown> | undefined;\n}\n\n/**\n * Validates conversation invariants and returns a list of issues.\n */\nexport function validateConversationIntegrity(\n conversation: Conversation,\n): IntegrityIssue[] {\n const issues: IntegrityIssue[] = [];\n const seenIds = new Set<string>();\n\n conversation.ids.forEach((id, index) => {\n if (seenIds.has(id)) {\n issues.push({\n code: 'integrity:duplicate-message-id',\n message: `duplicate message id in ids: ${id}`,\n data: { id, position: index },\n });\n } else {\n seenIds.add(id);\n }\n\n if (!conversation.messages[id]) {\n issues.push({\n code: 'integrity:missing-message',\n message: `missing message for id ${id}`,\n data: { id, position: index },\n });\n }\n });\n\n for (const id of Object.keys(conversation.messages)) {\n if (!seenIds.has(id)) {\n issues.push({\n code: 'integrity:unlisted-message',\n message: `message ${id} is not listed in ids`,\n data: { id },\n });\n }\n }\n\n const toolUses = new Map<string, { position: number; messageId: string }>();\n\n conversation.ids.forEach((id, index) => {\n const message = conversation.messages[id];\n if (!message) return;\n\n if (message.role === 'tool-use' && message.toolCall) {\n if (toolUses.has(message.toolCall.id)) {\n issues.push({\n code: 'integrity:duplicate-tool-call',\n message: `duplicate toolCall.id ${message.toolCall.id}`,\n data: { toolCallId: message.toolCall.id, messageId: message.id },\n });\n } else {\n toolUses.set(message.toolCall.id, { position: index, messageId: message.id });\n }\n }\n });\n\n conversation.ids.forEach((id, index) => {\n const message = conversation.messages[id];\n if (!message) return;\n\n if (message.role === 'tool-result' && message.toolResult) {\n const toolUse = toolUses.get(message.toolResult.callId);\n if (!toolUse) {\n issues.push({\n code: 'integrity:orphan-tool-result',\n message: `tool-result references missing tool-use ${message.toolResult.callId}`,\n data: { callId: message.toolResult.callId, messageId: message.id },\n });\n } else if (toolUse.position >= index) {\n issues.push({\n code: 'integrity:tool-result-before-call',\n message: `tool-result ${message.toolResult.callId} occurs before tool-use`,\n data: {\n callId: message.toolResult.callId,\n messageId: message.id,\n toolUseMessageId: toolUse.messageId,\n },\n });\n }\n }\n });\n\n return issues;\n}\n\n/**\n * Throws an integrity error if the conversation fails validation.\n */\nexport function assertConversationIntegrity(conversation: Conversation): void {\n const issues = validateConversationIntegrity(conversation);\n if (issues.length === 0) return;\n\n throw createIntegrityError('conversation integrity check failed', { issues });\n}\n",
13
+ "import { createValidationError } from '../errors';\nimport { conversationSchema } from '../schemas';\nimport type { Conversation } from '../types';\nimport { assertConversationIntegrity } from './integrity';\n\n/**\n * Ensures a conversation conforms to the schema (JSON-safe) and integrity rules.\n * Internal helper for public API enforcement points.\n */\nexport function assertConversationSafe(conversation: Conversation): void {\n const parsed = conversationSchema.safeParse(conversation);\n if (!parsed.success) {\n throw createValidationError('conversation failed schema validation', {\n issues: parsed.error.issues,\n });\n }\n\n assertConversationIntegrity(conversation);\n}\n\nexport function ensureConversationSafe(conversation: Conversation): Conversation {\n assertConversationSafe(conversation);\n return conversation;\n}\n",
11
14
  "import type { Conversation, Message } from '../types';\n\nexport function getOrderedMessages(conversation: Conversation): Message[] {\n const ordered: Message[] = [];\n for (const id of conversation.ids) {\n const message = conversation.messages[id];\n if (message) {\n ordered.push(message);\n }\n }\n return ordered;\n}\n\nexport function toIdRecord<T extends { id: string }>(\n items: readonly T[],\n): Record<string, T> {\n const record: Record<string, T> = {};\n for (const item of items) {\n record[item.id] = item;\n }\n return record;\n}\n",
12
- "import type { AssistantMessage, Conversation, JSONValue, Message } from '../types';\nimport { isAssistantMessage } from './message';\nimport { getOrderedMessages, toIdRecord } from './message-store';\nimport { toReadonly } from './type-helpers';\n\n/**\n * Checks if a metadata key is transient (starts with '_').\n * Transient metadata is intended for temporary UI state and should not be persisted.\n *\n * @param key - The metadata key to check\n * @returns true if the key starts with '_'\n *\n * @example\n * ```ts\n * isTransientKey('_tempId'); // true\n * isTransientKey('__internal'); // true\n * isTransientKey('source'); // false\n * ```\n */\nexport function isTransientKey(key: string): boolean {\n return key.startsWith('_');\n}\n\n/**\n * Strips transient metadata (keys starting with '_') from a metadata object.\n *\n * @param metadata - The metadata object to filter\n * @returns A new object with transient keys removed\n *\n * @example\n * ```ts\n * stripTransientFromRecord({ _temp: 1, source: 'web' });\n * // Returns: { source: 'web' }\n * ```\n */\nexport function stripTransientFromRecord(\n metadata: Record<string, JSONValue>,\n): Record<string, JSONValue> {\n const result: Record<string, JSONValue> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (!isTransientKey(key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Strips all transient metadata from a conversation.\n * Transient metadata is identified by keys starting with '_'.\n * This is useful for persisting conversations without temporary UI state.\n *\n * @param conversation - The conversation to process\n * @returns A new conversation with transient metadata removed from both\n * the conversation and all messages\n *\n * @example\n * ```ts\n * const cleaned = stripTransientMetadata(conversation);\n * // conversation.metadata._tempState is removed\n * // message.metadata._deliveryStatus is removed\n * ```\n */\nexport function stripTransientMetadata(conversation: Conversation): Conversation {\n const strippedMessages = getOrderedMessages(conversation).map((message): Message => {\n const baseMessage = {\n id: message.id,\n role: message.role,\n content: message.content,\n position: message.position,\n createdAt: message.createdAt,\n metadata: toReadonly(stripTransientFromRecord({ ...message.metadata })),\n hidden: message.hidden,\n toolCall: message.toolCall,\n toolResult: message.toolResult,\n tokenUsage: message.tokenUsage,\n };\n\n if (isAssistantMessage(message)) {\n const assistantMessage: AssistantMessage = {\n ...baseMessage,\n role: 'assistant',\n goalCompleted: message.goalCompleted,\n };\n return toReadonly(assistantMessage);\n }\n\n return toReadonly(baseMessage);\n });\n\n return toReadonly({\n schemaVersion: conversation.schemaVersion,\n id: conversation.id,\n title: conversation.title,\n status: conversation.status,\n metadata: toReadonly(stripTransientFromRecord({ ...conversation.metadata })),\n ids: strippedMessages.map((message) => message.id),\n messages: toIdRecord(strippedMessages),\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n });\n}\n",
15
+ "import { ensureConversationSafe } from '../conversation/validation';\nimport type { AssistantMessage, Conversation, JSONValue, Message } from '../types';\nimport { isAssistantMessage } from './message';\nimport { getOrderedMessages, toIdRecord } from './message-store';\nimport { toReadonly } from './type-helpers';\n\n/**\n * Checks if a metadata key is transient (starts with '_').\n * Transient metadata is intended for temporary UI state and should not be persisted.\n *\n * @param key - The metadata key to check\n * @returns true if the key starts with '_'\n *\n * @example\n * ```ts\n * isTransientKey('_tempId'); // true\n * isTransientKey('__internal'); // true\n * isTransientKey('source'); // false\n * ```\n */\nexport function isTransientKey(key: string): boolean {\n return key.startsWith('_');\n}\n\n/**\n * Strips transient metadata (keys starting with '_') from a metadata object.\n *\n * @param metadata - The metadata object to filter\n * @returns A new object with transient keys removed\n *\n * @example\n * ```ts\n * stripTransientFromRecord({ _temp: 1, source: 'web' });\n * // Returns: { source: 'web' }\n * ```\n */\nexport function stripTransientFromRecord(\n metadata: Record<string, JSONValue>,\n): Record<string, JSONValue> {\n const result: Record<string, JSONValue> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (!isTransientKey(key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Strips all transient metadata from a conversation.\n * Transient metadata is identified by keys starting with '_'.\n * This is useful for persisting conversations without temporary UI state.\n *\n * @param conversation - The conversation to process\n * @returns A new conversation with transient metadata removed from both\n * the conversation and all messages\n *\n * @example\n * ```ts\n * const cleaned = stripTransientMetadata(conversation);\n * // conversation.metadata._tempState is removed\n * // message.metadata._deliveryStatus is removed\n * ```\n */\nexport function stripTransientMetadata(conversation: Conversation): Conversation {\n const strippedMessages = getOrderedMessages(conversation).map((message): Message => {\n const baseMessage = {\n id: message.id,\n role: message.role,\n content: message.content,\n position: message.position,\n createdAt: message.createdAt,\n metadata: toReadonly(stripTransientFromRecord({ ...message.metadata })),\n hidden: message.hidden,\n toolCall: message.toolCall,\n toolResult: message.toolResult,\n tokenUsage: message.tokenUsage,\n };\n\n if (isAssistantMessage(message)) {\n const assistantMessage: AssistantMessage = {\n ...baseMessage,\n role: 'assistant',\n goalCompleted: message.goalCompleted,\n };\n return toReadonly(assistantMessage);\n }\n\n return toReadonly(baseMessage);\n });\n\n return ensureConversationSafe(\n toReadonly({\n schemaVersion: conversation.schemaVersion,\n id: conversation.id,\n title: conversation.title,\n status: conversation.status,\n metadata: toReadonly(stripTransientFromRecord({ ...conversation.metadata })),\n ids: strippedMessages.map((message) => message.id),\n messages: toIdRecord(strippedMessages),\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n }),\n );\n}\n",
13
16
  "import type { Message, MessagePlugin, TokenEstimator } from './types';\nimport { messageText } from './utilities';\n\n/**\n * Environment functions for conversation operations.\n * Allows dependency injection for testing and custom ID generation.\n */\nexport interface ConversationEnvironment {\n now: () => string;\n randomId: () => string;\n estimateTokens: TokenEstimator;\n plugins: MessagePlugin[];\n}\n\n/**\n * Simple character-based token estimator.\n * Approximates ~4 characters per token (rough average for English text).\n */\nexport function simpleTokenEstimator(message: Message): number {\n const text = messageText(message);\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Default environment using Date.toISOString(), crypto.randomUUID(), and simple token estimation.\n */\nexport const defaultConversationEnvironment: ConversationEnvironment = {\n now: () => new Date().toISOString(),\n randomId: () => crypto.randomUUID(),\n estimateTokens: simpleTokenEstimator,\n plugins: [],\n};\n\n/**\n * Merges a partial environment with defaults.\n * Returns a complete environment with all required functions.\n */\nexport function resolveConversationEnvironment(\n environment?: Partial<ConversationEnvironment>,\n): ConversationEnvironment {\n return {\n now: environment?.now ?? defaultConversationEnvironment.now,\n randomId: environment?.randomId ?? defaultConversationEnvironment.randomId,\n estimateTokens:\n environment?.estimateTokens ?? defaultConversationEnvironment.estimateTokens,\n plugins: [...(environment?.plugins ?? defaultConversationEnvironment.plugins)],\n };\n}\n\n/**\n * Type guard to distinguish environment objects from message inputs.\n * Returns true if the value has environment functions but no role property.\n */\nexport function isConversationEnvironmentParameter(\n value: unknown,\n): value is Partial<ConversationEnvironment> {\n if (!value || typeof value !== 'object' || value === null) return false;\n if ('role' in (value as Record<string, unknown>)) return false;\n\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate['now'] === 'function' ||\n typeof candidate['randomId'] === 'function' ||\n typeof candidate['estimateTokens'] === 'function' ||\n (Array.isArray(candidate['plugins']) && candidate['plugins'].length > 0)\n );\n}\n\n/**\n * Binds a partial environment to a function that accepts an environment as its last argument.\n */\nexport function withEnvironment<T extends unknown[], R>(\n environment: Partial<ConversationEnvironment>,\n fn: (...args: [...T, Partial<ConversationEnvironment>?]) => R,\n): (...args: T) => R {\n return (...args: T) => fn(...args, environment);\n}\n",
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
- "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
- "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 '@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}\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",
18
+ "import {\n type ConversationEnvironment,\n resolveConversationEnvironment,\n} from '../environment';\nimport type { Conversation, ConversationStatus, JSONValue } from '../types';\nimport { CURRENT_SCHEMA_VERSION } from '../types';\nimport { toReadonly } from '../utilities';\nimport { ensureConversationSafe } from './validation';\n\n/**\n * Creates a new empty conversation with the specified options.\n * Returns an immutable conversation object with timestamps set to the current time.\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 ensureConversationSafe(toReadonly(conv));\n}\n\n/**\n * Creates a new empty conversation without validating schema or integrity.\n */\nexport function createConversationUnsafe(\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",
19
+ "import { createInvalidToolReferenceError } from '../errors';\nimport type { Message } from '../types';\n\n/**\n * A map of tool use IDs to their names, used for tracking tool calls\n * and validating tool results reference valid calls.\n */\nexport type ToolUseIndex = Map<string, { name: string }>;\n\n/**\n * Builds an index of all tool use messages from a list of messages.\n * Used to validate that tool results reference existing tool uses.\n */\nexport const 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\n/**\n * Registers a new tool use in the index, returning a new immutable index.\n */\nexport const 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\n/**\n * Throws an error if the given call ID does not exist in the tool use index.\n * Used to ensure tool results reference valid tool uses.\n */\nexport const assertToolReference = (index: ToolUseIndex, callId: string): void => {\n if (!index.has(callId)) {\n throw createInvalidToolReferenceError(callId);\n }\n};\n",
20
+ "import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n} from '../environment';\nimport { createIntegrityError } from '../errors';\nimport type {\n AssistantMessage,\n Conversation,\n JSONValue,\n Message,\n MessageInput,\n} from '../types';\nimport { createMessage, normalizeContent, toReadonly } from '../utilities';\nimport { getOrderedMessages, toIdRecord } from '../utilities/message-store';\nimport {\n assertToolReference,\n buildToolUseIndex,\n registerToolUse,\n type ToolUseIndex,\n} from './tool-tracking';\nimport { ensureConversationSafe } from './validation';\n\n/**\n * Separates message inputs from an optional trailing environment argument.\n */\nfunction partitionAppendArgs(\n args: Array<MessageInput | Partial<ConversationEnvironment> | undefined>,\n): {\n inputs: MessageInput[];\n environment?: Partial<ConversationEnvironment> | undefined;\n} {\n const filtered = args.filter((arg) => arg !== undefined);\n\n if (filtered.length === 0) {\n return { inputs: [] };\n }\n\n const last = filtered[filtered.length - 1];\n if (isConversationEnvironmentParameter(last)) {\n return {\n inputs: filtered.slice(0, -1) as MessageInput[],\n environment: last,\n };\n }\n\n return { inputs: filtered as MessageInput[] };\n}\n\n/**\n * Appends one or more messages to a conversation.\n * Validates that tool results reference existing function calls.\n * Returns a new immutable conversation with the messages added.\n */\nexport function appendMessages(\n conversation: Conversation,\n ...inputs: MessageInput[]\n): Conversation;\nexport function appendMessages(\n conversation: Conversation,\n ...inputsAndEnvironment: [\n ...MessageInput[],\n Partial<ConversationEnvironment> | undefined,\n ]\n): Conversation;\nexport function appendMessages(\n conversation: Conversation,\n ...args: (MessageInput | Partial<ConversationEnvironment> | undefined)[]\n): Conversation {\n return appendMessagesInternal(conversation, args, true);\n}\n\n/**\n * Appends a message without validating conversation integrity or JSON-safety.\n * Use only when you have already validated the conversation yourself.\n */\nexport function appendUnsafeMessage(\n conversation: Conversation,\n input: MessageInput,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n return appendMessagesInternal(conversation, [input, environment], false);\n}\n\nconst appendMessagesInternal = (\n conversation: Conversation,\n args: Array<MessageInput | Partial<ConversationEnvironment> | undefined>,\n validate: boolean,\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 = validate\n ? buildToolUseIndex(getOrderedMessages(conversation))\n : new Map<string, { name: string }>();\n\n const { messages } = inputs.reduce<{\n toolUses: ToolUseIndex;\n messages: Message[];\n }>(\n (state, input, index) => {\n const processedInput = resolvedEnvironment.plugins.reduce(\n (acc, plugin) => plugin(acc),\n input,\n );\n\n if (\n validate &&\n processedInput.role === 'tool-result' &&\n processedInput.toolResult\n ) {\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 let toolUses = state.toolUses;\n if (processedInput.role === 'tool-use' && processedInput.toolCall) {\n if (validate && state.toolUses.has(processedInput.toolCall.id)) {\n throw createIntegrityError('duplicate toolCall.id in conversation', {\n toolCallId: processedInput.toolCall.id,\n messageId: baseMessage.id,\n });\n }\n\n toolUses = validate\n ? registerToolUse(state.toolUses, processedInput.toolCall)\n : state.toolUses;\n }\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 const readonly = toReadonly(next);\n return validate ? ensureConversationSafe(readonly) : readonly;\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 const resolvedEnvironment = isConversationEnvironmentParameter(metadata)\n ? metadata\n : environment;\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\n return appendMessages(\n conversation,\n { role: 'user', content, metadata: resolvedMetadata },\n resolvedEnvironment,\n );\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 const resolvedEnvironment = isConversationEnvironmentParameter(metadata)\n ? metadata\n : environment;\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\n return appendMessages(\n conversation,\n { role: 'assistant', content, metadata: resolvedMetadata },\n resolvedEnvironment,\n );\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 const resolvedEnvironment = isConversationEnvironmentParameter(metadata)\n ? metadata\n : environment;\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\n return appendMessages(\n conversation,\n { role: 'system', content, metadata: resolvedMetadata },\n resolvedEnvironment,\n );\n}\n",
21
+ "import type { Conversation, Message } from '../types';\nimport { messageHasImages } from '../utilities';\nimport { getOrderedMessages } from '../utilities/message-store';\n\n/**\n * Returns all messages from a conversation in order.\n * By default excludes hidden messages unless includeHidden is true.\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 the specified position index.\n * Returns undefined if no message exists at that position.\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 * Returns undefined if no message with that ID exists.\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 custom predicate function.\n * Returns all messages for which the predicate returns true.\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 statistics about a conversation's messages.\n * Returns totals, counts by role, hidden message count, and image count.\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",
22
+ "import {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n} from '../environment';\nimport { copyContent } from '../multi-modal';\nimport type { Conversation, JSONValue, Message } from '../types';\nimport { createMessage, toReadonly } from '../utilities';\nimport { getOrderedMessages, toIdRecord } from '../utilities/message-store';\nimport { ensureConversationSafe } from './validation';\n\n/**\n * Checks if a 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.\n * Returns undefined if no system message exists.\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 * Inserts a system message at the beginning of the conversation.\n * Renumbers all existing message positions.\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(\n isConversationEnvironmentParameter(metadata) ? metadata : environment,\n );\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\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: { ...(resolvedMetadata ?? {}) },\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 ensureConversationSafe(\n 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/**\n * Replaces the first system message with new content.\n * If no system message exists, prepends a new one.\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(\n isConversationEnvironmentParameter(metadata) ? metadata : environment,\n );\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\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(\n conversation,\n content,\n resolvedMetadata,\n resolvedEnvironment,\n );\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: { ...(resolvedMetadata ?? 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 ensureConversationSafe(toReadonly(next));\n}\n\n/**\n * Merges all system messages into a single message at the first position.\n * Duplicate content is removed. Returns unchanged if 0 or 1 system messages.\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 ensureConversationSafe(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 ensureConversationSafe(toReadonly(next));\n}\n",
23
+ "import type { ToolResult } from '../types';\n\n/**\n * Returns a shallow copy of a tool result.\n */\nexport function copyToolResult(toolResult: ToolResult): ToolResult {\n return { ...toolResult };\n}\n\n/**\n * Redacts tool result payload fields while preserving the original shape.\n */\nexport function redactToolResult(\n toolResult: ToolResult,\n placeholder: string,\n): ToolResult {\n return { ...toolResult, content: placeholder };\n}\n",
24
+ "import {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n} from '../environment';\nimport { createInvalidPositionError } from '../errors';\nimport type { Conversation, Message } from '../types';\nimport { createMessage, toReadonly } from '../utilities';\nimport { redactToolResult } from '../utilities/tool-results';\nimport { ensureConversationSafe } from './validation';\n\nexport interface RedactMessageOptions {\n placeholder?: string;\n redactToolArguments?: boolean;\n redactToolResults?: boolean;\n clearToolMetadata?: boolean;\n}\n\nconst isRedactMessageOptions = (value: unknown): value is RedactMessageOptions => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n return (\n 'placeholder' in candidate ||\n 'redactToolArguments' in candidate ||\n 'redactToolResults' in candidate ||\n 'clearToolMetadata' in candidate\n );\n};\n\n/**\n * Replaces the content of a message at the specified position with a placeholder.\n * By default preserves tool identifiers/outcomes while redacting tool payloads.\n * Throws if the position is out of bounds.\n */\nexport function redactMessageAtPosition(\n conversation: Conversation,\n position: number,\n placeholderOrOptions?: string | RedactMessageOptions | Partial<ConversationEnvironment>,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n let placeholder = '[REDACTED]';\n let options: RedactMessageOptions = {};\n let env = environment;\n\n if (typeof placeholderOrOptions === 'string') {\n placeholder = placeholderOrOptions;\n } else if (placeholderOrOptions) {\n if (!environment && isConversationEnvironmentParameter(placeholderOrOptions)) {\n env = placeholderOrOptions;\n } else if (isRedactMessageOptions(placeholderOrOptions)) {\n options = placeholderOrOptions;\n if (options.placeholder) {\n placeholder = options.placeholder;\n }\n }\n }\n\n const redactToolArguments = options.redactToolArguments ?? true;\n const redactToolResults = options.redactToolResults ?? true;\n const clearToolMetadata = options.clearToolMetadata ?? false;\n\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\n let toolCall = original.toolCall ? { ...original.toolCall } : undefined;\n let toolResult = original.toolResult ? { ...original.toolResult } : undefined;\n\n if (clearToolMetadata) {\n toolCall = undefined;\n toolResult = undefined;\n } else {\n if (original.role === 'tool-use' && toolCall) {\n toolCall = {\n ...toolCall,\n arguments: redactToolArguments ? placeholder : toolCall.arguments,\n };\n }\n\n if (original.role === 'tool-result' && toolResult) {\n toolResult = redactToolResults\n ? redactToolResult(toolResult, placeholder)\n : { ...toolResult };\n }\n }\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,\n toolResult,\n tokenUsage: original.tokenUsage ? { ...original.tokenUsage } : undefined,\n });\n\n const resolvedEnvironment = resolveConversationEnvironment(env);\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 ensureConversationSafe(toReadonly(next));\n}\n",
25
+ "import { createInvalidPositionError, createSerializationError } from '../errors';\nimport { conversationSchema } from '../schemas';\nimport type { AssistantMessage, Conversation, Message, ToolResult } from '../types';\nimport { createMessage, isAssistantMessage, toReadonly } from '../utilities';\nimport { toIdRecord } from '../utilities/message-store';\nimport { assertConversationIntegrity } from './integrity';\nimport { assertToolReference, registerToolUse, type ToolUseIndex } from './tool-tracking';\n\nfunction normalizeToolResult(toolResult: Message['toolResult']): ToolResult | undefined {\n if (!toolResult) return undefined;\n return {\n callId: toolResult.callId,\n outcome: toolResult.outcome,\n content: toolResult.content,\n };\n}\n\nfunction normalizeMessage(message: Message): Message | AssistantMessage {\n const base: Message = {\n id: message.id,\n role: message.role,\n content: 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: normalizeToolResult(message.toolResult),\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 * Reconstructs a conversation from a JSON object.\n * Validates message positions are contiguous and tool results reference valid calls.\n * Throws a serialization error if validation fails.\n *\n * @param json - The conversation JSON to deserialize (may be from an older version)\n * @returns A Conversation object\n * @throws {SerializationError} If validation fails\n */\nexport function deserializeConversation(json: unknown): Conversation {\n const parsed = conversationSchema.safeParse(json);\n if (!parsed.success) {\n throw createSerializationError('failed to deserialize conversation: invalid data');\n }\n const data = parsed.data;\n\n try {\n const messageIds = new Set(Object.keys(data.messages));\n const orderedMessages = data.ids.map((id, index) => {\n const message = data.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 messageIds.delete(id);\n return normalizeMessage(message);\n });\n\n if (messageIds.size > 0) {\n throw createSerializationError(\n `messages not listed in ids: ${[...messageIds].join(', ')}`,\n );\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((message) =>\n createMessage(message),\n );\n const conv: Conversation = {\n schemaVersion: data.schemaVersion,\n id: data.id,\n title: data.title,\n status: data.status,\n metadata: { ...data.metadata },\n ids: orderedMessages.map((message) => message.id),\n messages: toIdRecord(messageInstances),\n createdAt: data.createdAt,\n updatedAt: data.updatedAt,\n };\n const readonly = toReadonly(conv);\n assertConversationIntegrity(readonly);\n return readonly;\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",
26
+ "import type {\n Message as ExternalMessage,\n MultiModalContent,\n} from '@lasercat/homogenaize';\n\nimport type { Conversation } from '../types';\nimport { getOrderedMessages } from '../utilities/message-store';\nimport { assertConversationSafe } from './validation';\n\n/**\n * Converts conversation messages to the external chat message format.\n * Maps internal roles to standard user/assistant/system roles.\n * Hidden messages are excluded from the output.\n */\nexport function toChatMessages(conversation: Conversation): ExternalMessage[] {\n assertConversationSafe(conversation);\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",
27
+ "import {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n} from '../environment';\nimport type {\n Conversation,\n JSONValue,\n MessageInput,\n TokenUsage,\n ToolCall,\n ToolResult,\n} from '../types';\nimport { getOrderedMessages } from '../utilities/message-store';\nimport { pairToolCallsWithResults } from '../utilities/tool-calls';\nimport { appendMessages } from './append';\n\nexport interface AppendToolUseOptions {\n content?: MessageInput['content'];\n metadata?: Record<string, JSONValue>;\n hidden?: boolean;\n tokenUsage?: TokenUsage;\n}\n\nexport interface AppendToolResultOptions {\n content?: MessageInput['content'];\n metadata?: Record<string, JSONValue>;\n hidden?: boolean;\n tokenUsage?: TokenUsage;\n}\n\nexport interface ToolUseInput {\n toolId: string;\n callId?: string;\n args: JSONValue;\n}\n\nexport interface ToolResultInput {\n callId: string;\n outcome: 'success' | 'error';\n result: JSONValue;\n}\n\nexport interface ToolInteraction {\n call: ToolCall;\n result?: ToolResult | undefined;\n}\n\n/**\n * Appends a tool-use message with the provided tool call metadata.\n */\nexport function appendToolUse(\n conversation: Conversation,\n toolCall: ToolUseInput,\n options?: AppendToolUseOptions,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolved = resolveConversationEnvironment(\n isConversationEnvironmentParameter(options) ? options : environment,\n );\n const resolvedOptions = isConversationEnvironmentParameter(options)\n ? undefined\n : options;\n const callId = toolCall.callId ?? resolved.randomId();\n const toolCallMeta: ToolCall = {\n id: callId,\n name: toolCall.toolId,\n arguments: toolCall.args,\n };\n\n return appendMessages(\n conversation,\n {\n role: 'tool-use',\n content: resolvedOptions?.content ?? '',\n metadata: resolvedOptions?.metadata,\n hidden: resolvedOptions?.hidden,\n toolCall: toolCallMeta,\n tokenUsage: resolvedOptions?.tokenUsage,\n },\n resolved,\n );\n}\n\n/**\n * Appends a tool-result message with the provided tool result metadata.\n */\nexport function appendToolResult(\n conversation: Conversation,\n toolResult: ToolResultInput,\n options?: AppendToolResultOptions,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n const resolvedOptions = isConversationEnvironmentParameter(options)\n ? undefined\n : options;\n const toolResultMeta: ToolResult = {\n callId: toolResult.callId,\n outcome: toolResult.outcome,\n content: toolResult.result,\n };\n\n return appendMessages(\n conversation,\n {\n role: 'tool-result',\n content: resolvedOptions?.content ?? '',\n metadata: resolvedOptions?.metadata,\n hidden: resolvedOptions?.hidden,\n toolResult: toolResultMeta,\n tokenUsage: resolvedOptions?.tokenUsage,\n },\n isConversationEnvironmentParameter(options) ? options : environment,\n );\n}\n\n/**\n * Returns tool calls that have no corresponding tool result yet.\n */\nexport function getPendingToolCalls(conversation: Conversation): ToolCall[] {\n const ordered = getOrderedMessages(conversation);\n const completed = new Set<string>();\n\n for (const message of ordered) {\n if (message.role === 'tool-result' && message.toolResult) {\n completed.add(message.toolResult.callId);\n }\n }\n\n const pending: ToolCall[] = [];\n for (const message of ordered) {\n if (message.role === 'tool-use' && message.toolCall) {\n if (!completed.has(message.toolCall.id)) {\n pending.push(message.toolCall);\n }\n }\n }\n\n return pending;\n}\n\n/**\n * Returns tool calls paired with their optional results in message order.\n */\nexport function getToolInteractions(conversation: Conversation): ToolInteraction[] {\n return pairToolCallsWithResults(getOrderedMessages(conversation));\n}\n",
17
28
  "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",
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",
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",
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",
29
+ "import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport {\n assertConversationSafe,\n ensureConversationSafe,\n} from './conversation/validation';\nimport {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\n resolveConversationEnvironment,\n simpleTokenEstimator,\n} from './environment';\nimport { ConversationalistError, createIntegrityError } from './errors';\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\ntype MessageBlock = {\n messages: Message[];\n minPosition: number;\n maxPosition: number;\n tokenCount: number;\n orphanToolResult?: boolean;\n};\n\nconst createMessageBlock = (\n message: Message,\n estimator: TokenEstimator,\n): MessageBlock => ({\n messages: [message],\n minPosition: message.position,\n maxPosition: message.position,\n tokenCount: estimator(message),\n});\n\nconst buildMessageBlocks = (\n messages: ReadonlyArray<Message>,\n estimator: TokenEstimator,\n preserveToolPairs: boolean,\n): {\n blocks: MessageBlock[];\n messageToBlock: Map<string, MessageBlock>;\n} => {\n if (!preserveToolPairs) {\n const blocks = messages.map((message) => createMessageBlock(message, estimator));\n const messageToBlock = new Map<string, MessageBlock>();\n for (const block of blocks) {\n const message = block.messages[0];\n if (message) {\n messageToBlock.set(message.id, block);\n }\n }\n return { blocks, messageToBlock };\n }\n\n const blocks: MessageBlock[] = [];\n const toolUses = new Map<string, MessageBlock>();\n\n for (const message of messages) {\n if (message.role === 'tool-use' && message.toolCall) {\n const block = createMessageBlock(message, estimator);\n toolUses.set(message.toolCall.id, block);\n blocks.push(block);\n continue;\n }\n\n if (message.role === 'tool-result' && message.toolResult) {\n const existing = toolUses.get(message.toolResult.callId);\n if (existing) {\n existing.messages.push(message);\n existing.maxPosition = Math.max(existing.maxPosition, message.position);\n existing.tokenCount += estimator(message);\n continue;\n }\n\n const orphanBlock = createMessageBlock(message, estimator);\n orphanBlock.orphanToolResult = true;\n blocks.push(orphanBlock);\n continue;\n }\n\n blocks.push(createMessageBlock(message, estimator));\n }\n\n const filteredBlocks = blocks.filter((block) => !block.orphanToolResult);\n const messageToBlock = new Map<string, MessageBlock>();\n for (const block of filteredBlocks) {\n for (const message of block.messages) {\n messageToBlock.set(message.id, block);\n }\n }\n\n return { blocks: filteredBlocks, messageToBlock };\n};\n\nconst collectBlocksForMessages = (\n messages: ReadonlyArray<Message>,\n messageToBlock: Map<string, MessageBlock>,\n): MessageBlock[] => {\n const blocks: MessageBlock[] = [];\n const seen = new Set<MessageBlock>();\n\n for (const message of messages) {\n const block = messageToBlock.get(message.id);\n if (block && !seen.has(block)) {\n seen.add(block);\n blocks.push(block);\n }\n }\n\n return blocks;\n};\n\nconst collectMessagesFromBlocks = (blocks: ReadonlyArray<MessageBlock>): Message[] => {\n const messages: Message[] = [];\n const seen = new Set<string>();\n\n for (const block of blocks) {\n for (const message of block.messages) {\n if (!seen.has(message.id)) {\n seen.add(message.id);\n messages.push(message);\n }\n }\n }\n\n messages.sort((a, b) => a.position - b.position);\n return messages;\n};\n\nconst ensureTruncationSafe = (\n conversation: Conversation,\n preserveToolPairs: boolean,\n operation: 'truncateToTokenLimit' | 'truncateFromPosition',\n): Conversation => {\n try {\n return ensureConversationSafe(conversation);\n } catch (error) {\n if (\n !preserveToolPairs &&\n error instanceof ConversationalistError &&\n error.code === 'error:integrity'\n )\n throw createIntegrityError(\n `${operation} produced invalid tool linkage; use preserveToolPairs: true to keep tool interactions intact`,\n { preserveToolPairs, issues: error.context?.['issues'] },\n );\n /* v8 ignore next */\n throw error;\n }\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 preserveToolPairs?: boolean;\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 * Tool interactions are preserved as atomic blocks by default.\n */\nexport function truncateToTokenLimit(\n conversation: Conversation,\n maxTokens: number,\n optionsOrEstimator?: TruncateOptions | TokenEstimator,\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n assertConversationSafe(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 const preserveToolPairs = options.preserveToolPairs ?? true;\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 const orderedMessages = getOrderedMessages(conversation);\n const { blocks, messageToBlock } = buildMessageBlocks(\n orderedMessages,\n estimator,\n preserveToolPairs,\n );\n\n const systemMessages = preserveSystem\n ? orderedMessages.filter((m) => m.role === 'system')\n : [];\n const nonSystemMessages = orderedMessages.filter((m) => m.role !== 'system');\n const protectedMessages =\n preserveLastN > 0 ? nonSystemMessages.slice(-preserveLastN) : [];\n\n const systemBlocks = collectBlocksForMessages(systemMessages, messageToBlock);\n const protectedBlocks = collectBlocksForMessages(protectedMessages, messageToBlock);\n const lockedBlocks = new Set([...systemBlocks, ...protectedBlocks]);\n const removableBlocks = blocks.filter((block) => !lockedBlocks.has(block));\n\n const systemTokens = systemBlocks.reduce((sum, block) => sum + block.tokenCount, 0);\n const protectedTokens = protectedBlocks.reduce(\n (sum, block) => sum + block.tokenCount,\n 0,\n );\n const availableTokens = maxTokens - systemTokens - protectedTokens;\n\n let selectedBlocks: MessageBlock[] = [];\n if (availableTokens <= 0) {\n selectedBlocks = [...systemBlocks, ...protectedBlocks];\n } else {\n const sortedRemovable = [...removableBlocks].sort(\n (a, b) => a.maxPosition - b.maxPosition,\n );\n const keptRemovable: MessageBlock[] = [];\n let usedTokens = 0;\n\n for (let i = sortedRemovable.length - 1; i >= 0; i--) {\n const block = sortedRemovable[i]!;\n if (usedTokens + block.tokenCount <= availableTokens) {\n keptRemovable.unshift(block);\n usedTokens += block.tokenCount;\n } else {\n break;\n }\n }\n\n selectedBlocks = [...systemBlocks, ...keptRemovable, ...protectedBlocks];\n }\n\n const allMessages = collectMessagesFromBlocks(selectedBlocks);\n const renumbered = allMessages.map((message, index) =>\n cloneMessageWithPosition(message, index, copyContent(message.content)),\n );\n\n const next = toReadonly({\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n });\n return ensureTruncationSafe(next, preserveToolPairs, 'truncateToTokenLimit');\n}\n\n/**\n * Returns the last N messages from the conversation.\n * By default excludes system messages and hidden messages.\n * Tool interactions are preserved as atomic blocks by default.\n */\nexport function getRecentMessages(\n conversation: Conversation,\n count: number,\n options?: {\n includeHidden?: boolean;\n includeSystem?: boolean;\n preserveToolPairs?: boolean;\n },\n): ReadonlyArray<Message> {\n const includeHidden = options?.includeHidden ?? false;\n const includeSystem = options?.includeSystem ?? false;\n const preserveToolPairs = options?.preserveToolPairs ?? true;\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 if (!preserveToolPairs) {\n return filtered.slice(-count);\n }\n\n const { messageToBlock } = buildMessageBlocks(filtered, () => 0, preserveToolPairs);\n const tail = filtered.slice(-count);\n const blocks = collectBlocksForMessages(tail, messageToBlock);\n return collectMessagesFromBlocks(blocks);\n}\n\n/**\n * Truncates conversation to keep only messages from the specified position onwards.\n * Optionally preserves system messages regardless of position.\n * Tool interactions are preserved as atomic blocks by default.\n */\nexport function truncateFromPosition(\n conversation: Conversation,\n position: number,\n options?: {\n preserveSystemMessages?: boolean;\n preserveToolPairs?: boolean;\n },\n environment?: Partial<ConversationEnvironment>,\n): Conversation {\n assertConversationSafe(conversation);\n const preserveSystem = options?.preserveSystemMessages ?? true;\n const preserveToolPairs = options?.preserveToolPairs ?? true;\n const resolvedEnvironment = resolveConversationEnvironment(environment);\n const now = resolvedEnvironment.now();\n\n const ordered = getOrderedMessages(conversation);\n const { messageToBlock } = buildMessageBlocks(ordered, () => 0, preserveToolPairs);\n const systemMessages = preserveSystem\n ? ordered.filter((m) => m.role === 'system' && m.position < position)\n : [];\n const keptMessages = ordered.filter((m) => m.position >= position);\n const systemBlocks = collectBlocksForMessages(systemMessages, messageToBlock);\n const keptBlocks = collectBlocksForMessages(keptMessages, messageToBlock);\n const allMessages = collectMessagesFromBlocks([...systemBlocks, ...keptBlocks]);\n\n // Renumber positions\n const renumbered = allMessages.map((message, index) =>\n cloneMessageWithPosition(message, index, copyContent(message.content)),\n );\n\n const next = toReadonly({\n ...conversation,\n ids: renumbered.map((message) => message.id),\n messages: toIdRecord(renumbered),\n updatedAt: now,\n });\n return ensureTruncationSafe(next, preserveToolPairs, 'truncateFromPosition');\n}\n",
30
+ "import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport { ensureConversationSafe } from './conversation/validation';\nimport {\n type ConversationEnvironment,\n isConversationEnvironmentParameter,\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(\n isConversationEnvironmentParameter(metadata) ? metadata : environment,\n );\n const resolvedMetadata = isConversationEnvironmentParameter(metadata)\n ? undefined\n : metadata;\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: { ...(resolvedMetadata ?? {}), [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: ensureConversationSafe(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 ensureConversationSafe(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 ensureConversationSafe(\n toReadonly({\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [updated.id]: updated },\n updatedAt: now,\n }),\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(\n isConversationEnvironmentParameter(options) ? options : environment,\n );\n const resolvedOptions = isConversationEnvironmentParameter(options)\n ? undefined\n : options;\n const now = resolvedEnvironment.now();\n\n const original = conversation.messages[messageId];\n if (!original) {\n return ensureConversationSafe(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 ...(resolvedOptions?.metadata ?? {}),\n };\n\n const finalizeOverrides: {\n metadata?: Record<string, JSONValue>;\n tokenUsage?: TokenUsage;\n } = {\n metadata: finalMetadata,\n };\n if (resolvedOptions?.tokenUsage) {\n finalizeOverrides.tokenUsage = { ...resolvedOptions.tokenUsage };\n }\n\n const updated = cloneMessage(original, finalizeOverrides);\n\n return ensureConversationSafe(\n toReadonly({\n ...conversation,\n ids: [...conversation.ids],\n messages: { ...conversation.messages, [updated.id]: updated },\n updatedAt: now,\n }),\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 ensureConversationSafe(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 ensureConversationSafe(\n toReadonly({\n ...conversation,\n ids: messages.map((message) => message.id),\n messages: toIdRecord(messages),\n updatedAt: now,\n }),\n );\n}\n",
31
+ "import type { MultiModalContent } from '@lasercat/homogenaize';\n\nimport { truncateFromPosition, truncateToTokenLimit } from './context';\nimport type { RedactMessageOptions } from './conversation/index';\nimport {\n appendAssistantMessage,\n appendMessages,\n appendSystemMessage,\n appendUserMessage,\n collapseSystemMessages,\n prependSystemMessage,\n redactMessageAtPosition,\n replaceSystemMessage,\n} from './conversation/index';\nimport { ensureConversationSafe } from './conversation/validation';\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: (\n position: number,\n placeholderOrOptions?: string | RedactMessageOptions,\n ) => 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; preserveToolPairs?: 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 preserveToolPairs?: boolean;\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, placeholderOrOptions) => {\n current = redactMessageAtPosition(current, position, placeholderOrOptions);\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(ensureConversationSafe(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(() => ensureConversationSafe(draft.value));\n }\n return ensureConversationSafe(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 const result = fns.reduce((current, fn) => fn(current), conversation);\n return ensureConversationSafe(result);\n}\n",
21
32
  "// @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"
33
+ "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 type { RedactMessageOptions } from './conversation/index';\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/index';\nimport { ensureConversationSafe } from './conversation/validation';\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 const safeInitial = ensureConversationSafe(initial);\n this.currentNode = {\n conversation: safeInitial,\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?: {\n includeHidden?: boolean;\n includeSystem?: boolean;\n preserveToolPairs?: boolean;\n },\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(\n position: number,\n placeholderOrOptions?: string | RedactMessageOptions,\n ): void {\n this.push(\n redactMessageAtPosition(this.current, position, placeholderOrOptions, this.env),\n );\n }\n\n /**\n * Truncates the conversation from a specific position.\n */\n truncateFromPosition(\n position: number,\n options?: { preserveSystemMessages?: boolean; preserveToolPairs?: 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"
23
34
  ],
24
- "mappings": "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",
25
- "debugId": "684D5332D9139AFC64756E2164756E21",
35
+ "mappings": "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",
36
+ "debugId": "F37C8EF457F39BC364756E2164756E21",
26
37
  "names": []
27
38
  }