@node-llm/orm 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,64 +1,229 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to `@node-llm/orm` will be documented in this file.
3
+ All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+ ## [1.6.2] - 2026-01-21 (@node-llm/core)
7
6
 
8
- ## [0.1.0] - 2026-01-18
7
+ ### Extensibility
8
+
9
+ - **fetchWithTimeout Export**: Exported `fetchWithTimeout` utility from the core package to support custom providers that need manual request signing while maintaining library-standard timeout protections.
10
+
11
+ ## [0.1.2] - 2026-01-21 (@node-llm/orm)
12
+
13
+ ### Compatibility
14
+
15
+ - **Custom Provider Support**: Verified and improved support for custom LLM providers. Custom providers registered via `NodeLLM.registerProvider()` now work seamlessly with the ORM's automated persistence layer.
16
+
17
+ ## [1.6.1] - 2026-01-19 (@node-llm/core)
18
+
19
+ ### Documentation & Examples
20
+
21
+ - **Example Reorganization**: Better structure for examples, separating full applications from scripts.
22
+ - **Improved READMEs**: Updated examples to use absolute GitHub URLs for better compatibility with npm.
23
+ - **ORM Integration**: Added references to the new `@node-llm/orm` package.
24
+ - **Test Stability**: Fixed integration test paths for vision and audio examples after reorganization.
25
+
26
+ ## [0.1.1] - 2026-01-19 (@node-llm/orm)
27
+
28
+ ### Fixed
29
+
30
+ - **Broken Links**: Corrected documentation and example links in README.
31
+
32
+ ## [0.1.0] - 2026-01-18 (@node-llm/orm)
33
+
34
+ ### Added
35
+
36
+ - **Initial Release**: Comprehensive persistence layer for NodeLLM using Prisma.
37
+ - **Chat Persistence**: Automatic tracking of chat sessions, messages, and history.
38
+ - **Streaming Support**: `chat.askStream()` with automatic token persistence.
39
+ - **Tool Audit Trail**: Tracking of every tool execution, parameters, and results.
40
+ - **API Metrics**: Automatic logging of latency, token usage, and cost.
41
+
42
+ ## [1.6.0] - 2026-01-16 (@node-llm/core)
43
+
44
+ ### Major Changes
45
+
46
+ - **Rename LLM to NodeLLM**: Standardized naming across the library. `createLLM` now returns a `NodeLLM` instance.
47
+ - **Singleton Removal**: Moved away from global singleton patterns to support multiple independent LLM instances.
48
+ - **Improved Factory Pattern**: Refactored `createLLM()` for better provider initialization and type safety.
49
+
50
+ ## [1.5.4] - 2026-01-15
51
+
52
+ ### Fixed
53
+
54
+ - **Async I/O Safety**: Refactored internal file loading utilities (`Binary.ts`, `FileLoader.ts`) to strictly use non-blocking `fs.promises` for all file operations, eliminating potential event loop blocking in high-throughput node servers.
55
+
56
+ ### Changed
57
+
58
+ - **Centralized Logging**: Replaced scattered `console.log/error/warn` calls with a unified `Logger` adapter. All internal library logs now respect `NODELLM_DEBUG=true` configuration and use a consistent format, preventing log pollution in production environments.
59
+
60
+ ## [1.5.3] - 2026-01-15
61
+
62
+ ### Fixed
63
+
64
+ - **Multi-turn Tool Loop State Loss (CRITICAL)**: Fixed a critical bug where `response_format` (Structured Outputs), `temperature`, `max_tokens`, and provider-specific `params` were being dropped after the first tool call in agentic workflows. This caused the model to revert to plain text or markdown in subsequent turns, resulting in empty or malformed data when using `withSchema()`. The fix ensures all configuration state is maintained across all tool-calling turns in `Chat.ask()`.
65
+ - **ToolHandler Serialization**: Ensuring tool return values are always stringified before being sent back to the LLM. This fixes issues where tools returning objects would cause provider errors, enabling better "AI Self-Correction" workflows where the model sees the raw object data.
66
+
67
+ ### Added
68
+
69
+ - **AbortSignal Support**: Added proper cancellation support for long-running LLM requests via `signal?: AbortSignal` in `AskOptions`. Users can now abort requests using standard `AbortController`, enabling proper cleanup in interactive applications and server environments. The signal is propagated through all tool-calling turns and underlying fetch requests.
70
+
71
+ ## [1.5.2] - 2026-01-15
72
+
73
+ ### Fixed
74
+
75
+ - **ESM & Dotenv Safety**: Implemented lazy initialization for all environment-backed configuration (like `OPENAI_API_KEY`). This resolves race conditions where `process.env` might be accessed before `dotenv.config()` is called in ESM modules.
76
+ - **OpenAI o1/o3-mini Compatibility**: Automatically map `max_tokens` to `max_completion_tokens` for OpenAI reasoning models, which are required for these specific models.
77
+ - **withProvider Inheritance**: Fixed a bug where scoped instances created via `withProvider()` failed to inherit global defaults due to getter-based property enumeration.
78
+ - **Process Lifecycle Protection**: Added unreferenced timers and explicit exit handling to prevent Node.js processes from hanging after completion.
79
+ - **Ollama Base URL**: Fixed a typo in the `ollamaApiBase` configuration setter.
80
+
81
+ ### Added
82
+
83
+ - **Reasoning Content Capture**: Support for capturing and returning `reasoning_content` (thinking text) from OpenAI reasoning models.
84
+ - **Enhanced Usage Tracking**: Precise capture of `reasoning_tokens` and `cached_tokens` in usage metadata for supported providers.
85
+
86
+ ### Changed
87
+
88
+ - **Internal Architecture Cleanup**: Refactored shared validation and tool execution logic between `Chat.ask()` and `Chat.stream()` for 100% feature parity and better maintainability.
89
+ - **Configuration Snapshotting**: Enhanced the internal configuration system to support dynamic property discovery and cloning for custom providers.
90
+
91
+ ## [1.5.0] - 2026-01-12
92
+
93
+ ### Added
94
+
95
+ - **🚦 Tool Execution Policies**: Introduced granular control over tool execution with three modes:
96
+ - `auto` (default): Tools execute automatically as proposed by the LLM
97
+ - `confirm`: Human-in-the-loop approval via `onConfirmToolCall` hook before each tool execution
98
+ - `dry-run`: Model proposes tools but execution is prevented, returning the plan for inspection
99
+ - **ToolExecutionMode Enum**: New exported enum for type-safe execution mode configuration
100
+ - **Tool Call Inspection**: Added `tool_calls` property to `ChatResponseString` for inspecting proposed tool executions
101
+ - **Enhanced Observability**: New audit hooks for comprehensive tool execution tracking:
102
+ - `onToolCallStart`: Triggered when a tool call begins
103
+ - `onToolCallEnd`: Triggered when a tool call completes successfully
104
+ - `onToolCallError`: Triggered when a tool call fails
105
+ - **Security Documentation**: New comprehensive [Security & Compliance](https://node-llm.eshaiju.com/advanced/security.html) guide covering:
106
+ - Smart Context Isolation
107
+ - Content Policy Hooks
108
+ - Tool Execution Policies
109
+ - Observability as Security
110
+ - Loop Protection & Resource Limits (new section)
111
+ - **🛡️ Request Timeout Security**: Comprehensive timeout protection across all API operations
112
+ - Global `requestTimeout` configuration (default: 30 seconds)
113
+ - Per-chat and per-request timeout overrides
114
+ - Applies to: chat, streaming, image generation, transcription, embeddings, and moderation
115
+ - Prevents DoS attacks, hanging requests, and resource exhaustion
116
+ - **🛡️ Global MaxTokens Configuration**: Cost control and output limiting for text generation
117
+ - Global `maxTokens` configuration (default: 4096 tokens)
118
+ - Per-chat and per-request token limit overrides
119
+ - Prevents excessive output generation and cost overruns
120
+ - Resolution order: per-request → chat-level → global config → default
121
+ - **🛡️ Complete Security Framework**: Four-pillar defense-in-depth protection
122
+ - `requestTimeout`: DoS protection (new)
123
+ - `maxRetries`: Retry storm prevention
124
+ - `maxToolCalls`: Infinite loop prevention
125
+ - `maxTokens`: Cost control (new)
126
+ - **Custom Provider Timeout Support**: Updated custom provider documentation with `fetchWithTimeout` utility guidance
127
+ - **Real-World Example**: Added `examples/security-tool-policies.mjs` demonstrating human-in-the-loop security patterns
128
+
129
+ ### Changed
130
+
131
+ - **Deprecated Hook Aliases**: `onToolCall` and `onToolResult` now internally map to `onToolCallStart` and `onToolCallEnd` for backward compatibility
132
+
133
+ ### Documentation
134
+
135
+ - Updated configuration guide with security limits section
136
+ - Enhanced security documentation with Loop Protection & Resource Limits section
137
+ - Updated README with four-pillar security framework
138
+ - Added timeout handling to custom provider guide
139
+ - Updated tool calling documentation with execution policy examples
140
+ - Added tool execution policies to security documentation
141
+ - Enhanced README with observability and security features
142
+ - Added comprehensive security examples to documentation site
143
+
144
+ ## [1.4.0] - 2026-01-06
145
+
146
+ ### Added
147
+
148
+ - **Plugin System for Custom Providers**: Introduced `NodeLLM.registerProvider()` and exported `BaseProvider`, allowing developers to easily add proprietary or custom LLM services at runtime.
149
+ - **Improved Extensibility Documentation**: Dedicated "Custom Providers" guide with real-world patterns for handling provider-specific configurations and extra fields.
150
+ - **Community Health Patterns**: Added standardized GitHub issue templates (`bug_report.yml`, `feature_request.yml`), contributing guide, and pull request templates.
151
+
152
+ ## [1.3.0] - 2026-01-05
153
+
154
+ ### Added
155
+
156
+ - **Class-based Tool DSL**: Official documentation and examples for creating tools using a clean, class-based syntax extending `Tool`.
157
+ - **Enhanced Example Library**: Added missing runnable examples to the documentation, covering embeddings, usage tracking, and provider-specific features.
158
+ - **Improved Documentation Navigation**: Fixed internal linking and integrated all examples directly into the documentation site.
159
+
160
+ ### Changed
161
+
162
+ - **Documentation Imports**: Updated all documentation and examples to recommend importing `z` directly from `@node-llm/core` instead of `zod`, promoting a more unified API surface.
163
+ - **Example Paths**: Converted all example file paths in the documentation into direct GitHub links for easier access.
164
+ - **Provider Consistency**: Ensured all providers (OpenAI, Gemini, Anthropic, DeepSeek) have a consistent set of documented examples.
165
+
166
+ ## [1.2.0] - 2026-01-04
167
+
168
+ ### Added
169
+
170
+ - **🚀 Streaming with Tool Calling**: Revolutionary feature enabling automatic tool execution during streaming across all providers (OpenAI, Anthropic, Gemini, DeepSeek). Tools are executed transparently and the stream continues with the model's final response.
171
+ - **🔍 Comprehensive Debug Logging**: Added detailed HTTP request/response logging for every feature and provider. Enable with `NODELLM_DEBUG=true` to see method, URL, status, and full payloads.
172
+ - Coverage: Chat, Streaming, Images, Embeddings, Transcription, Moderation
173
+ - Providers: OpenAI, Anthropic, Gemini, DeepSeek, Ollama
174
+ - **Enhanced Logger**: New `logRequest()` and `logResponse()` methods for structured logging
175
+ - **Tool Event Handlers in Streaming**: `onToolCall()` and `onToolResult()` now work seamlessly during streaming
176
+ - **Comprehensive Examples**: Added streaming + tools examples for all providers
177
+
178
+ ### Changed
179
+
180
+ - Updated `ChatChunk` interface to support `tool_calls` field
181
+ - Enhanced `ChatStream` to handle multi-round tool execution loops
182
+ - All streaming providers now parse and yield tool calls
183
+
184
+ ### Documentation
185
+
186
+ - Updated streaming documentation with tool calling examples
187
+ - Enhanced tools documentation to highlight streaming support
188
+ - Improved debugging documentation with comprehensive coverage details
189
+ - Updated README with streaming + tools examples and debug logging section
190
+
191
+ ## [1.0.0] - 2026-01-03
192
+
193
+ ### Added
194
+
195
+ - **Major Stable Release**: Consolidated architectural foundation for production-ready LLM integrations.
196
+ - **Advanced Streaming API**: Introduced a powerful global `Stream` utility supporting `.tee()`, `.toArray()`, and native `.abort()`.
197
+ - **Comprehensive Model Registry**: Synchronized with `models.dev` for verified models across OpenAI, Anthropic, Gemini, DeepSeek, OpenRouter, and Ollama.
198
+ - **First-class OpenRouter Support**: High-performance implementation with automated capability detection and discovery.
199
+ - **Enhanced Local LLM Support**: Deep integration with Ollama, including vision and tool-calling models.
200
+ - **Rich Documentation**: Complete documentation overhaul with dedicated provider guides, examples, and architectural deep-dives.
201
+
202
+ ### Changed
203
+
204
+ - Refactored `Chat.stream()` to return the advanced `Stream` object.
205
+ - Standardized provider registration and error handling architecture.
206
+
207
+ ## [0.8.0] - 2026-01-02
208
+
209
+ ### Added
210
+
211
+ - **Ollama Provider**: Native support for local inference via Ollama.
212
+ - **Model Discovery**: Ability to list and inspect local models using `NodeLLM.listModels()`.
213
+ - **DeepSeek V3 and R1**: Full support for DeepSeek's latest chat and reasoning models.
214
+ - **Enhanced Model Registry**: Now includes Gemini 1.5 Flash 8B and popular local models with accurate pricing and capabilities.
215
+ - **Rich Documentation**: New guides and examples for local integration, vision, and tool-calling.
216
+
217
+ ## [0.7.0] - 2026-01-02
218
+
219
+ ### Added
220
+
221
+ - Unified configuration system via `NodeLLM.configure`.
222
+ - Better support for custom endpoints.
223
+
224
+ ## [0.6.0] - 2026-01-01
9
225
 
10
226
  ### Added
11
227
 
12
- - **Chat Persistence**: Automatic tracking of chat sessions, messages, and conversation history
13
- - **Streaming Support**: Full support for `chat.askStream()` with automatic message persistence as tokens arrive
14
- - **Custom Fields Support**: Pass additional fields (e.g., `userId`, `projectId`) directly to `createChat()` - they're automatically spread into the Prisma create call
15
- - **Native JSON Metadata**: Metadata passed as-is to support native `Json`/`JSONB` database types for efficient querying
16
- - **Optional Persistence Configuration**: New `persistence` option allows selective disabling of tool call and request tracking
17
- - `persistence.toolCalls`: Enable/disable tool call persistence (default: `true`)
18
- - `persistence.requests`: Enable/disable API request metrics (default: `true`)
19
- - **Tool Call Tracking**: Audit log of every tool execution with arguments and results
20
- - **API Request Metrics**: Track latency, tokens, and cost for every API call
21
- - **Custom Table Names**: Support for custom Prisma table names
22
- - **Comprehensive Tests**: 24 unit tests covering all features
23
- - **Example Application**: Complete HR Chatbot RAG example demonstrating all ORM features
24
- - **TypeScript Support**: Full type safety with Prisma and TypeScript
25
- - **Prisma Adapter**: Production-ready adapter for Prisma ORM
26
-
27
- ### Example Usage
28
-
29
- ```typescript
30
- // Custom fields
31
- const chat = await createChat(prisma, llm, {
32
- model: "gpt-4",
33
- userId: "user_123",
34
- projectId: "proj_456",
35
- metadata: { source: "web-ui", tags: ["support"] }
36
- });
37
-
38
- // Optional persistence
39
- const chat = await createChat(prisma, llm, {
40
- model: "gpt-4",
41
- persistence: {
42
- toolCalls: false, // Skip tool call tracking
43
- requests: true // Keep request metrics
44
- }
45
- });
46
-
47
- // Streaming with persistence
48
- for await (const token of chat.askStream("Hello")) {
49
- process.stdout.write(token);
50
- }
51
- // Messages automatically persisted after stream completes
52
- ```
53
-
54
- ## [Unreleased]
55
-
56
- ### Planned
57
-
58
- - Support for custom message types
59
- - Batch operations for message history
60
- - Advanced query helpers
61
-
62
- ---
63
-
64
- [0.1.0]: https://github.com/node-llm/node-llm/releases/tag/orm-v0.1.0
228
+ - Initial support for DeepSeek R1 reasoning.
229
+ - Enhanced tool execution logic.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 NodeLLM contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  > Database persistence layer for NodeLLM. Automatically tracks chats, messages, tool calls, and API requests.
9
9
 
10
- **[Read the Full Documentation](https://node-llm.github.io/orm/prisma.html)** | **[View Example App](../../examples/hr-chatbot-rag/)**
10
+ **[Read the Full Documentation](https://node-llm.eshaiju.com/orm/prisma)** | **[View Example App](https://github.com/node-llm/node-llm/tree/main/examples/applications/hr-chatbot-rag)**
11
11
 
12
12
  ## Features
13
13
 
@@ -0,0 +1,64 @@
1
+ export interface ChatRecord {
2
+ id: string;
3
+ model?: string | null;
4
+ provider?: string | null;
5
+ instructions?: string | null;
6
+ metadata?: string | null;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ }
10
+ export interface ChatOptions {
11
+ model?: string;
12
+ provider?: string;
13
+ instructions?: string;
14
+ metadata?: Record<string, any>;
15
+ debug?: boolean;
16
+ persistence?: {
17
+ toolCalls?: boolean;
18
+ requests?: boolean;
19
+ };
20
+ }
21
+ export interface UserHooks {
22
+ onToolCallStart: ((call: any) => void | Promise<void>)[];
23
+ onToolCallEnd: ((call: any, result: any) => void | Promise<void>)[];
24
+ afterResponse: ((resp: any) => any | Promise<any>)[];
25
+ onNewMessage: (() => void | Promise<void>)[];
26
+ onEndMessage: ((message: any) => void | Promise<void>)[];
27
+ onBeforeRequest: ((messages: any[]) => any | Promise<any>)[];
28
+ }
29
+ /**
30
+ * BaseChat - A generic base class for ORM chat implementations.
31
+ */
32
+ export declare abstract class BaseChat<R extends ChatRecord = ChatRecord, O extends ChatOptions = ChatOptions> {
33
+ record: R;
34
+ options: O;
35
+ id: string;
36
+ protected localOptions: any;
37
+ protected customTools: any[];
38
+ protected userHooks: UserHooks;
39
+ constructor(record: R, options?: O);
40
+ protected log(...args: any[]): void;
41
+ withInstructions(instruction: string, options?: {
42
+ replace?: boolean;
43
+ }): this;
44
+ system(instruction: string, options?: {
45
+ replace?: boolean;
46
+ }): this;
47
+ withTemperature(temp: number): this;
48
+ withModel(model: string): this;
49
+ withProvider(provider: string): this;
50
+ withTools(tools: any[]): this;
51
+ withTool(tool: any): this;
52
+ use(tool: any): this;
53
+ withSchema(schema: any): this;
54
+ withParams(params: Record<string, any>): this;
55
+ onToolCallStart(callback: (call: any) => void | Promise<void>): this;
56
+ onToolCall(callback: (call: any) => void | Promise<void>): this;
57
+ onToolCallEnd(callback: (call: any, result: any) => void | Promise<void>): this;
58
+ onToolResult(callback: (result: any) => void | Promise<void>): this;
59
+ afterResponse(callback: (resp: any) => any | Promise<any>): this;
60
+ onBeforeRequest(callback: (messages: any[]) => any | Promise<any>): this;
61
+ onNewMessage(callback: () => void | Promise<void>): this;
62
+ onEndMessage(callback: (message: any) => void | Promise<void>): this;
63
+ }
64
+ //# sourceMappingURL=BaseChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseChat.d.ts","sourceRoot":"","sources":["../src/BaseChat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACpE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACrD,YAAY,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC7C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CAC9D;AAED;;GAEG;AACH,8BAAsB,QAAQ,CAC5B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,WAAW,GAAG,WAAW;IAe1B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IAdZ,EAAE,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,YAAY,EAAE,GAAG,CAAM;IACjC,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAM;IAClC,SAAS,CAAC,SAAS,EAAE,SAAS,CAO5B;gBAGO,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,CAAW;IAU7B,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ5B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAS5E,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAIlE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI;IAK7B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAKzB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIpB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO7C,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKpE,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/D,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAK/E,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAInE,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKhE,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKxE,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKxD,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAIrE"}
@@ -0,0 +1,108 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /**
3
+ * BaseChat - A generic base class for ORM chat implementations.
4
+ */
5
+ export class BaseChat {
6
+ record;
7
+ options;
8
+ id;
9
+ localOptions = {};
10
+ customTools = [];
11
+ userHooks = {
12
+ onToolCallStart: [],
13
+ onToolCallEnd: [],
14
+ afterResponse: [],
15
+ onNewMessage: [],
16
+ onEndMessage: [],
17
+ onBeforeRequest: []
18
+ };
19
+ constructor(record, options = {}) {
20
+ this.record = record;
21
+ this.options = options;
22
+ this.id = record.id;
23
+ // Initialize local options from record/options
24
+ this.localOptions.instructions = options.instructions || record.instructions;
25
+ this.localOptions.model = options.model || record.model;
26
+ this.localOptions.provider = options.provider || record.provider;
27
+ }
28
+ log(...args) {
29
+ if (this.options?.debug) {
30
+ console.log(`[@node-llm/orm]`, ...args);
31
+ }
32
+ }
33
+ // --- Fluent Configuration Methods ---
34
+ withInstructions(instruction, options) {
35
+ if (options?.replace) {
36
+ this.localOptions.instructions = instruction;
37
+ }
38
+ else {
39
+ this.localOptions.instructions = (this.localOptions.instructions || "") + "\n" + instruction;
40
+ }
41
+ return this;
42
+ }
43
+ system(instruction, options) {
44
+ return this.withInstructions(instruction, options);
45
+ }
46
+ withTemperature(temp) {
47
+ this.localOptions.temperature = temp;
48
+ return this;
49
+ }
50
+ withModel(model) {
51
+ this.localOptions.model = model;
52
+ return this;
53
+ }
54
+ withProvider(provider) {
55
+ this.localOptions.provider = provider;
56
+ return this;
57
+ }
58
+ withTools(tools) {
59
+ this.customTools.push(...tools);
60
+ return this;
61
+ }
62
+ withTool(tool) {
63
+ this.customTools.push(tool);
64
+ return this;
65
+ }
66
+ use(tool) {
67
+ return this.withTool(tool);
68
+ }
69
+ withSchema(schema) {
70
+ this.localOptions.schema = schema;
71
+ return this;
72
+ }
73
+ withParams(params) {
74
+ this.localOptions.params = { ...(this.localOptions.params || {}), ...params };
75
+ return this;
76
+ }
77
+ // --- Hook Registration ---
78
+ onToolCallStart(callback) {
79
+ this.userHooks.onToolCallStart.push(callback);
80
+ return this;
81
+ }
82
+ onToolCall(callback) {
83
+ return this.onToolCallStart(callback);
84
+ }
85
+ onToolCallEnd(callback) {
86
+ this.userHooks.onToolCallEnd.push(callback);
87
+ return this;
88
+ }
89
+ onToolResult(callback) {
90
+ return this.onToolCallEnd((_call, result) => callback(result));
91
+ }
92
+ afterResponse(callback) {
93
+ this.userHooks.afterResponse.push(callback);
94
+ return this;
95
+ }
96
+ onBeforeRequest(callback) {
97
+ this.userHooks.onBeforeRequest.push(callback);
98
+ return this;
99
+ }
100
+ onNewMessage(callback) {
101
+ this.userHooks.onNewMessage.push(callback);
102
+ return this;
103
+ }
104
+ onEndMessage(callback) {
105
+ this.userHooks.onEndMessage.push(callback);
106
+ return this;
107
+ }
108
+ }
@@ -0,0 +1,62 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ import type { NodeLLMCore } from "@node-llm/core";
3
+ import { BaseChat, type ChatRecord, type ChatOptions } from "../../BaseChat.js";
4
+ export { type ChatRecord, type ChatOptions };
5
+ export interface MessageRecord {
6
+ id: string;
7
+ chatId: string;
8
+ role: string;
9
+ content: string | null;
10
+ contentRaw: string | null;
11
+ reasoning: string | null;
12
+ inputTokens: number | null;
13
+ outputTokens: number | null;
14
+ modelId: string | null;
15
+ provider: string | null;
16
+ createdAt: Date;
17
+ }
18
+ export interface TableNames {
19
+ chat?: string;
20
+ message?: string;
21
+ toolCall?: string;
22
+ request?: string;
23
+ }
24
+ /**
25
+ * Prisma-based Chat Implementation.
26
+ */
27
+ export declare class Chat extends BaseChat {
28
+ private prisma;
29
+ private llm;
30
+ private tables;
31
+ private persistenceConfig;
32
+ constructor(prisma: PrismaClient, llm: NodeLLMCore, record: ChatRecord, options?: ChatOptions, tableNames?: TableNames);
33
+ /**
34
+ * Internal prep for core Chat instance with persistence hooks.
35
+ */
36
+ private prepareCoreChat;
37
+ /**
38
+ * Send a message and persist the conversation.
39
+ */
40
+ ask(input: string): Promise<MessageRecord>;
41
+ /**
42
+ * Stream a response and persist the conversation.
43
+ */
44
+ askStream(input: string): AsyncGenerator<string, MessageRecord, undefined>;
45
+ /**
46
+ * Get all messages for this chat.
47
+ */
48
+ messages(): Promise<MessageRecord[]>;
49
+ }
50
+ /**
51
+ * Convenience method to create a new chat session.
52
+ */
53
+ export declare function createChat<T = Record<string, any>>(prisma: PrismaClient, llm: NodeLLMCore, options?: ChatOptions & {
54
+ tableNames?: TableNames;
55
+ } & T): Promise<Chat>;
56
+ /**
57
+ * Convenience method to load an existing chat session.
58
+ */
59
+ export declare function loadChat(prisma: PrismaClient, llm: NodeLLMCore, chatId: string, options?: ChatOptions & {
60
+ tableNames?: TableNames;
61
+ }): Promise<Chat | null>;
62
+ //# sourceMappingURL=Chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/Chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,IAAK,SAAQ,QAAQ;IAK9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IALb,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,iBAAiB,CAAoD;gBAGnE,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,WAAgB,EACzB,UAAU,GAAE,UAAe;IAgB7B;;OAEG;YACW,eAAe;IAmH7B;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA2ChD;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC;IAwDjF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAO3C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,CAAa,GACjE,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAQtB"}
@@ -0,0 +1,262 @@
1
+ import { BaseChat } from "../../BaseChat.js";
2
+ /**
3
+ * Prisma-based Chat Implementation.
4
+ */
5
+ export class Chat extends BaseChat {
6
+ prisma;
7
+ llm;
8
+ tables;
9
+ persistenceConfig;
10
+ constructor(prisma, llm, record, options = {}, tableNames = {}) {
11
+ super(record, options);
12
+ this.prisma = prisma;
13
+ this.llm = llm;
14
+ this.tables = {
15
+ chat: tableNames.chat || "chat",
16
+ message: tableNames.message || "message",
17
+ toolCall: tableNames.toolCall || "toolCall",
18
+ request: tableNames.request || "assistantRequest"
19
+ };
20
+ this.persistenceConfig = {
21
+ toolCalls: options.persistence?.toolCalls ?? true,
22
+ requests: options.persistence?.requests ?? true
23
+ };
24
+ }
25
+ /**
26
+ * Internal prep for core Chat instance with persistence hooks.
27
+ */
28
+ async prepareCoreChat(history = [], assistantMessageId) {
29
+ const provider = this.localOptions.provider || this.record.provider;
30
+ const model = this.localOptions.model || this.record.model;
31
+ const llmInstance = provider ? this.llm.withProvider(provider) : this.llm;
32
+ const coreChat = llmInstance.chat(model || undefined, {
33
+ messages: history,
34
+ ...this.localOptions
35
+ });
36
+ // Register tools
37
+ if (this.customTools.length > 0) {
38
+ coreChat.withTools(this.customTools);
39
+ }
40
+ // --- Persistence Hooks ---
41
+ coreChat.onToolCallStart(async (call) => {
42
+ // Only persist if toolCalls persistence is enabled
43
+ if (this.persistenceConfig.toolCalls) {
44
+ const toolCallModel = this.tables.toolCall;
45
+ await this.prisma[toolCallModel].create({
46
+ data: {
47
+ messageId: assistantMessageId,
48
+ toolCallId: call.id,
49
+ name: call.function?.name || "unknown",
50
+ arguments: JSON.stringify(call.function?.arguments || {}),
51
+ thought: call.thought || null
52
+ }
53
+ });
54
+ }
55
+ // User hooks
56
+ for (const h of this.userHooks.onToolCallStart)
57
+ await h(call);
58
+ });
59
+ coreChat.onToolCallEnd(async (call, result) => {
60
+ // Only persist if toolCalls persistence is enabled
61
+ if (this.persistenceConfig.toolCalls) {
62
+ const toolCallModel = this.tables.toolCall;
63
+ const resString = typeof result === "string" ? result : JSON.stringify(result);
64
+ await this.prisma[toolCallModel].update({
65
+ where: { messageId_toolCallId: { messageId: assistantMessageId, toolCallId: call.id } },
66
+ data: {
67
+ result: resString,
68
+ thought: call.thought || null
69
+ }
70
+ });
71
+ }
72
+ // User hooks
73
+ for (const h of this.userHooks.onToolCallEnd)
74
+ await h(call, result);
75
+ });
76
+ coreChat.afterResponse(async (finalResp) => {
77
+ this.log(`Internal afterResponse triggered. Calling ${this.userHooks.afterResponse.length} user hooks.`);
78
+ // User hooks
79
+ for (const h of this.userHooks.afterResponse) {
80
+ const modified = await h(finalResp);
81
+ if (modified)
82
+ finalResp = modified;
83
+ }
84
+ // Only persist if requests persistence is enabled
85
+ if (this.persistenceConfig.requests) {
86
+ const modelName = this.tables.request;
87
+ await this.prisma[modelName].create({
88
+ data: {
89
+ chatId: this.id,
90
+ messageId: assistantMessageId,
91
+ provider: finalResp.provider || provider || "unknown",
92
+ model: finalResp.model || model || "unknown",
93
+ statusCode: 200,
94
+ duration: finalResp.latency || 0,
95
+ inputTokens: finalResp.usage?.input_tokens || 0,
96
+ outputTokens: finalResp.usage?.output_tokens || 0,
97
+ cost: finalResp.usage?.cost || 0
98
+ }
99
+ });
100
+ }
101
+ return finalResp;
102
+ });
103
+ // Other core hooks
104
+ if (this.userHooks.onNewMessage.length > 0) {
105
+ coreChat.onNewMessage(async () => {
106
+ for (const h of this.userHooks.onNewMessage)
107
+ await h();
108
+ });
109
+ }
110
+ if (this.userHooks.onEndMessage.length > 0) {
111
+ coreChat.onEndMessage(async (msg) => {
112
+ for (const h of this.userHooks.onEndMessage)
113
+ await h(msg);
114
+ });
115
+ }
116
+ if (this.userHooks.onBeforeRequest.length > 0) {
117
+ coreChat.beforeRequest(async (msgs) => {
118
+ let current = msgs;
119
+ for (const h of this.userHooks.onBeforeRequest) {
120
+ const mod = await h(current);
121
+ if (mod)
122
+ current = mod;
123
+ }
124
+ return current;
125
+ });
126
+ }
127
+ return coreChat;
128
+ }
129
+ /**
130
+ * Send a message and persist the conversation.
131
+ */
132
+ async ask(input) {
133
+ const messageModel = this.tables.message;
134
+ const userMessage = await this.prisma[messageModel].create({
135
+ data: { chatId: this.id, role: "user", content: input }
136
+ });
137
+ const assistantMessage = await this.prisma[messageModel].create({
138
+ data: { chatId: this.id, role: "assistant", content: null }
139
+ });
140
+ try {
141
+ const historyRecords = await this.prisma[messageModel].findMany({
142
+ where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
143
+ orderBy: { createdAt: "asc" }
144
+ });
145
+ const history = historyRecords.map((m) => ({
146
+ role: m.role,
147
+ content: m.content || ""
148
+ }));
149
+ const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
150
+ const response = await coreChat.ask(input);
151
+ return await this.prisma[messageModel].update({
152
+ where: { id: assistantMessage.id },
153
+ data: {
154
+ content: response.content,
155
+ contentRaw: JSON.stringify(response.meta),
156
+ inputTokens: response.usage?.input_tokens || 0,
157
+ outputTokens: response.usage?.output_tokens || 0,
158
+ modelId: response.model || null,
159
+ provider: response.provider || null
160
+ }
161
+ });
162
+ }
163
+ catch (error) {
164
+ // Delete the empty assistant message, but keep the user message
165
+ // so there's a record of what was asked (useful for debugging)
166
+ await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
167
+ throw error;
168
+ }
169
+ }
170
+ /**
171
+ * Stream a response and persist the conversation.
172
+ */
173
+ async *askStream(input) {
174
+ const messageModel = this.tables.message;
175
+ const userMessage = await this.prisma[messageModel].create({
176
+ data: { chatId: this.id, role: "user", content: input }
177
+ });
178
+ const assistantMessage = await this.prisma[messageModel].create({
179
+ data: { chatId: this.id, role: "assistant", content: null }
180
+ });
181
+ try {
182
+ const historyRecords = await this.prisma[messageModel].findMany({
183
+ where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
184
+ orderBy: { createdAt: "asc" }
185
+ });
186
+ const history = historyRecords.map((m) => ({
187
+ role: m.role,
188
+ content: m.content || ""
189
+ }));
190
+ const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
191
+ const stream = coreChat.stream(input);
192
+ let fullContent = "";
193
+ let metadata = {};
194
+ for await (const chunk of stream) {
195
+ if (chunk.content) {
196
+ fullContent += chunk.content;
197
+ yield chunk.content;
198
+ }
199
+ if (chunk.usage) {
200
+ metadata = { ...metadata, ...chunk.usage };
201
+ }
202
+ }
203
+ return await this.prisma[messageModel].update({
204
+ where: { id: assistantMessage.id },
205
+ data: {
206
+ content: fullContent,
207
+ contentRaw: JSON.stringify(metadata),
208
+ inputTokens: metadata.input_tokens || 0,
209
+ outputTokens: metadata.output_tokens || 0,
210
+ modelId: this.localOptions.model || this.record.model || null,
211
+ provider: this.localOptions.provider || this.record.provider || null
212
+ }
213
+ });
214
+ }
215
+ catch (error) {
216
+ // Delete the empty assistant message, but keep the user message
217
+ // so there's a record of what was asked (useful for debugging)
218
+ await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
219
+ throw error;
220
+ }
221
+ }
222
+ /**
223
+ * Get all messages for this chat.
224
+ */
225
+ async messages() {
226
+ const messageModel = this.tables.message;
227
+ return await this.prisma[messageModel].findMany({
228
+ where: { chatId: this.id },
229
+ orderBy: { createdAt: "asc" }
230
+ });
231
+ }
232
+ }
233
+ /**
234
+ * Convenience method to create a new chat session.
235
+ */
236
+ export async function createChat(prisma, llm, options = {}) {
237
+ const chatTable = options.tableNames?.chat || "chat";
238
+ // Extract known options so we don't double-pass them or pass them incorrectly
239
+ const { model, provider, instructions, metadata, tableNames: _tableNames, debug: _debug, persistence: _persistence, ...extras } = options;
240
+ const record = await prisma[chatTable].create({
241
+ data: {
242
+ model,
243
+ provider,
244
+ instructions,
245
+ metadata: metadata ?? null,
246
+ ...extras
247
+ }
248
+ });
249
+ return new Chat(prisma, llm, record, options, options.tableNames);
250
+ }
251
+ /**
252
+ * Convenience method to load an existing chat session.
253
+ */
254
+ export async function loadChat(prisma, llm, chatId, options = {}) {
255
+ const chatTable = options.tableNames?.chat || "chat";
256
+ const record = await prisma[chatTable].findUnique({
257
+ where: { id: chatId }
258
+ });
259
+ if (!record)
260
+ return null;
261
+ return new Chat(prisma, llm, record, options, options.tableNames);
262
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @node-llm/orm/prisma
3
+ *
4
+ * Prisma adapter for NodeLLM ORM.
5
+ * Provides automatic persistence of chats, messages, tool calls, and API requests.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { PrismaClient } from '@prisma/client';
10
+ * import { createLLM } from '@node-llm/core';
11
+ * import { createChat } from '@node-llm/orm/prisma';
12
+ *
13
+ * const prisma = new PrismaClient();
14
+ * const llm = createLLM({ provider: 'openai' });
15
+ *
16
+ * const chat = await createChat(prisma, llm, {
17
+ * model: 'gpt-4',
18
+ * instructions: 'You are a helpful assistant.'
19
+ * });
20
+ *
21
+ * const response = await chat.ask('Hello!');
22
+ * console.log(response.content);
23
+ * ```
24
+ */
25
+ export { Chat, createChat, loadChat } from "./Chat.js";
26
+ export type { ChatRecord, MessageRecord, ChatOptions, TableNames } from "./Chat.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @node-llm/orm/prisma
3
+ *
4
+ * Prisma adapter for NodeLLM ORM.
5
+ * Provides automatic persistence of chats, messages, tool calls, and API requests.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { PrismaClient } from '@prisma/client';
10
+ * import { createLLM } from '@node-llm/core';
11
+ * import { createChat } from '@node-llm/orm/prisma';
12
+ *
13
+ * const prisma = new PrismaClient();
14
+ * const llm = createLLM({ provider: 'openai' });
15
+ *
16
+ * const chat = await createChat(prisma, llm, {
17
+ * model: 'gpt-4',
18
+ * instructions: 'You are a helpful assistant.'
19
+ * });
20
+ *
21
+ * const response = await chat.ask('Hello!');
22
+ * console.log(response.content);
23
+ * ```
24
+ */
25
+ export { Chat, createChat, loadChat } from "./Chat.js";
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @node-llm/orm
3
+ *
4
+ * Database persistence layer for NodeLLM.
5
+ * Automatically tracks chats, messages, tool calls, and API requests.
6
+ *
7
+ * ## Quick Start
8
+ *
9
+ * 1. Copy `schema.prisma` from this package into your project
10
+ * 2. Run `npx prisma migrate dev`
11
+ * 3. Use the ORM:
12
+ *
13
+ * ```typescript
14
+ * import { createChat } from '@node-llm/orm/prisma';
15
+ * import { prisma } from './db.js';
16
+ * import { llm } from './llm.js';
17
+ *
18
+ * const chat = await createChat(prisma, llm, {
19
+ * model: 'gpt-4',
20
+ * instructions: 'You are a helpful assistant.'
21
+ * });
22
+ *
23
+ * await chat.ask('Hello!');
24
+ * ```
25
+ *
26
+ * ## Adapters
27
+ *
28
+ * - `@node-llm/orm/prisma` - Prisma adapter (recommended)
29
+ *
30
+ * ## Schema
31
+ *
32
+ * The ORM tracks four core entities:
33
+ * - **Chat** - Session container (model, provider, instructions)
34
+ * - **Message** - User/Assistant conversation history
35
+ * - **ToolCall** - Tool executions (name, arguments, results)
36
+ * - **Request** - API call metrics (tokens, latency, cost)
37
+ */
38
+ export * from "./adapters/prisma/index.js";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,cAAc,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @node-llm/orm
3
+ *
4
+ * Database persistence layer for NodeLLM.
5
+ * Automatically tracks chats, messages, tool calls, and API requests.
6
+ *
7
+ * ## Quick Start
8
+ *
9
+ * 1. Copy `schema.prisma` from this package into your project
10
+ * 2. Run `npx prisma migrate dev`
11
+ * 3. Use the ORM:
12
+ *
13
+ * ```typescript
14
+ * import { createChat } from '@node-llm/orm/prisma';
15
+ * import { prisma } from './db.js';
16
+ * import { llm } from './llm.js';
17
+ *
18
+ * const chat = await createChat(prisma, llm, {
19
+ * model: 'gpt-4',
20
+ * instructions: 'You are a helpful assistant.'
21
+ * });
22
+ *
23
+ * await chat.ask('Hello!');
24
+ * ```
25
+ *
26
+ * ## Adapters
27
+ *
28
+ * - `@node-llm/orm/prisma` - Prisma adapter (recommended)
29
+ *
30
+ * ## Schema
31
+ *
32
+ * The ORM tracks four core entities:
33
+ * - **Chat** - Session container (model, provider, instructions)
34
+ * - **Message** - User/Assistant conversation history
35
+ * - **ToolCall** - Tool executions (name, arguments, results)
36
+ * - **Request** - API call metrics (tokens, latency, cost)
37
+ */
38
+ // Re-export Prisma adapter as default
39
+ export * from "./adapters/prisma/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-llm/orm",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Database persistence layer for NodeLLM - Chat, Message, and ToolCall tracking with streaming support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,11 +18,6 @@
18
18
  "types": "./dist/adapters/prisma/index.d.ts"
19
19
  }
20
20
  },
21
- "scripts": {
22
- "build": "tsc",
23
- "test": "vitest run",
24
- "test:watch": "vitest"
25
- },
26
21
  "keywords": [
27
22
  "llm",
28
23
  "orm",
@@ -65,8 +60,14 @@
65
60
  "@node-llm/core": "file:../core",
66
61
  "@prisma/client": "^5.0.0",
67
62
  "@types/node": "^20.0.0",
63
+ "prisma": "^5.0.0",
68
64
  "typescript": "^5.0.0",
69
65
  "vitest": "^1.0.0"
70
66
  },
71
- "dependencies": {}
72
- }
67
+ "dependencies": {},
68
+ "scripts": {
69
+ "build": "prisma generate --schema=schema.prisma && tsc",
70
+ "test": "vitest run",
71
+ "test:watch": "vitest"
72
+ }
73
+ }
package/src/BaseChat.ts CHANGED
@@ -28,8 +28,6 @@ export interface UserHooks {
28
28
  afterResponse: ((resp: any) => any | Promise<any>)[];
29
29
  onNewMessage: (() => void | Promise<void>)[];
30
30
  onEndMessage: ((message: any) => void | Promise<void>)[];
31
- onToolCallError: ((call: any, error: Error) => any | Promise<any>)[];
32
- onConfirmToolCall: ((call: any) => boolean | Promise<boolean>)[];
33
31
  onBeforeRequest: ((messages: any[]) => any | Promise<any>)[];
34
32
  }
35
33
 
@@ -49,8 +47,6 @@ export abstract class BaseChat<
49
47
  afterResponse: [],
50
48
  onNewMessage: [],
51
49
  onEndMessage: [],
52
- onToolCallError: [],
53
- onConfirmToolCall: [],
54
50
  onBeforeRequest: []
55
51
  };
56
52
 
@@ -211,8 +211,9 @@ export class Chat extends BaseChat {
211
211
  }
212
212
  });
213
213
  } catch (error) {
214
+ // Delete the empty assistant message, but keep the user message
215
+ // so there's a record of what was asked (useful for debugging)
214
216
  await (this.prisma as any)[messageModel].delete({ where: { id: assistantMessage!.id } });
215
- // await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
216
217
  throw error;
217
218
  }
218
219
  }
@@ -264,13 +265,14 @@ export class Chat extends BaseChat {
264
265
  contentRaw: JSON.stringify(metadata),
265
266
  inputTokens: metadata.input_tokens || 0,
266
267
  outputTokens: metadata.output_tokens || 0,
267
- modelId: coreChat.model || null,
268
- provider: coreChat.provider?.id || null
268
+ modelId: this.localOptions.model || this.record.model || null,
269
+ provider: this.localOptions.provider || this.record.provider || null
269
270
  }
270
271
  });
271
272
  } catch (error) {
273
+ // Delete the empty assistant message, but keep the user message
274
+ // so there's a record of what was asked (useful for debugging)
272
275
  await (this.prisma as any)[messageModel].delete({ where: { id: assistantMessage!.id } });
273
- // await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
274
276
  throw error;
275
277
  }
276
278
  }
@@ -298,8 +300,16 @@ export async function createChat<T = Record<string, any>>(
298
300
  const chatTable = options.tableNames?.chat || "chat";
299
301
 
300
302
  // Extract known options so we don't double-pass them or pass them incorrectly
301
- const { model, provider, instructions, metadata, tableNames, debug, persistence, ...extras } =
302
- options;
303
+ const {
304
+ model,
305
+ provider,
306
+ instructions,
307
+ metadata,
308
+ tableNames: _tableNames,
309
+ debug: _debug,
310
+ persistence: _persistence,
311
+ ...extras
312
+ } = options;
303
313
 
304
314
  const record = await (prisma as any)[chatTable].create({
305
315
  data: {
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.full.d.ts","./src/BaseChat.ts","../../node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client/runtime/library.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/.prisma/client/index.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/.prisma/client/default.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client/default.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Role.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Tool.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Content.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/Provider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatResponse.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Message.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/schema/Schema.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/constants.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatOptions.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/streaming/Stream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatStream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/image/GeneratedImage.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/types.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/ModelRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/PricingRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/transcription/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/moderation/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/embedding/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/config.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/llm.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/anthropic/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/BaseProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/GeminiProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/DeepSeekProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Capabilities.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Streaming.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Image.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/OpenAIProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/OllamaProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/OpenRouterProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/registry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/model_aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/utils/fetch.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/index.d.ts","./src/adapters/prisma/Chat.ts","./src/adapters/prisma/index.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/index.d.ts"],"fileIdsList":[[66,139,185],[65,139,185],[67,139,185],[139,185],[139,182,185],[139,184,185],[185],[139,185,190,218],[139,185,186,191,196,204,215,226],[139,185,186,187,196,204],[134,135,136,139,185],[139,185,188,227],[139,185,189,190,197,205],[139,185,190,215,223],[139,185,191,193,196,204],[139,184,185,192],[139,185,193,194],[139,185,195,196],[139,184,185,196],[139,185,196,197,198,215,226],[139,185,196,197,198,211,215,218],[139,185,193,196,199,204,215,226],[139,185,196,197,199,200,204,215,223,226],[139,185,199,201,215,223,226],[137,138,139,140,141,142,143,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232],[139,185,196,202],[139,185,203,226,231],[139,185,193,196,204,215],[139,185,205],[139,185,206],[139,184,185,207],[139,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232],[139,185,209],[139,185,210],[139,185,196,211,212],[139,185,211,213,227,229],[139,185,196,215,216,218],[139,185,217,218],[139,185,215,216],[139,185,218],[139,185,219],[139,182,185,215,220],[139,185,196,221,222],[139,185,221,222],[139,185,190,204,215,223],[139,185,224],[139,185,204,225],[139,185,199,210,226],[139,185,190,227],[139,185,215,228],[139,185,203,229],[139,185,230],[139,180,185],[139,180,185,196,198,207,215,218,226,229,231],[139,185,215,232],[83,84,85,86,87,88,89,90,91,92,139,185],[84,86,87,88,89,90,139,185],[84,86,139,185],[85,86,88,91,92,93,139,185],[69,84,85,86,87,139,185],[83,139,185],[90,139,185],[86,139,185],[86,139,185,215],[83,84,85,87,88,89,90,91,92,93,94,102,103,106,126,127,128,129,139,185],[86,91,93,95,97,98,99,100,101,102,139,185],[96,139,185],[86,88,139,185],[84,88,139,185],[86,106,139,185],[109,110,111,112,139,185],[107,139,185],[121,139,185],[122,139,185],[86,121,139,185],[86,96,139,185],[86,106,114,115,116,117,118,119,120,139,185],[124,139,185],[86,102,104,105,108,113,123,125,139,185],[139,152,156,185,226],[139,152,185,215,226],[139,147,185],[139,149,152,185,223,226],[139,185,204,223],[139,185,233],[139,147,185,233],[139,149,152,185,204,226],[139,144,145,148,151,185,196,215,226],[139,152,159,185],[139,144,150,185],[139,152,173,174,185],[139,148,152,185,218,226,233],[139,173,185,233],[139,146,147,185,233],[139,152,185],[139,146,147,148,149,150,151,152,153,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,185],[139,152,167,185],[139,152,159,160,185],[139,150,152,160,161,185],[139,151,185],[139,144,147,152,185],[139,152,156,160,161,185],[139,156,185],[139,150,152,155,185,226],[139,144,149,152,159,185],[139,185,215],[139,147,152,173,185,231,233],[82,139,185],[70,71,72,139,185],[73,74,139,185],[70,71,73,75,76,81,139,185],[71,73,139,185],[81,139,185],[73,139,185],[70,71,73,76,77,78,79,80,139,185],[64,68,130,139,185],[131,139,185],[132,139,185]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"d48af338df13ddb051449297791e562507ff602c5905373520acef78c8e66969","signature":"5a634decec68cf1268f740ac7262ba130ee281439ab540c572b12ce4877b3a86","impliedFormat":99},{"version":"21247c958d397091ec30e63b27294baa1d1434c333da4fda697743190311dc62","impliedFormat":1},{"version":"a4bdfea41dc3265efddd775fd708be1587d2897ed8af32ea75a59f971b7c3374","impliedFormat":1},{"version":"d5eb5865d4cbaa9985cc3cfb920b230cdcf3363f1e70903a08dc4baab80b0ce1","impliedFormat":1},{"version":"51ebca098538b252953b1ef83c165f25b52271bfb6049cd09d197dddd4cd43c5","impliedFormat":1},{"version":"df41e12c868eac7a8eae373906cb60e9c6128f91b8f0c49e3311488d5c20bdde","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"85054db69473c5f3011329758e39480d5a1e177ef09c035fc54614aa98fd74f4","impliedFormat":99},{"version":"f78d61c966023b8e1808ee8644b983541c5c08b10d501171fdaa3b59ced89c32","impliedFormat":99},{"version":"9328f8ce11ce74072988669e69eb40326f1486c244a806034e8c7dfbdd88eaac","impliedFormat":99},{"version":"3b44e9e63ddfec2be4917454293ed956bd6cbafcc92f071340cb4446c965c281","impliedFormat":99},{"version":"f7963c9a812222c2436c2cf084125877e58a0909c6f82af8529b9c8aa785d110","impliedFormat":99},{"version":"58cac8e1268a9047d6c1f8bae7fd330b4896df5b7da6b4ecb576ac9763588853","impliedFormat":99},{"version":"45924327d47f4d6f4bc923d8c2df1e73d16f3c511ff8662eaf1d01b7c46e2506","impliedFormat":99},{"version":"8d2ee15310498f68cb0c585d5cb0e14a4393e70f1780508a853541c757f6932d","impliedFormat":99},{"version":"571f2a23b4d8db490894c3f06039ba8a4a05cfd46ce74f8d8e8b9ac92e505150","impliedFormat":99},{"version":"bca2816969296a8fdf7735ff7b6500f88573ca4c5ef790cc989967b2479169fd","impliedFormat":99},{"version":"5b26dc2f18cf265e1b044c269263ae45da16f2f19a350fb14af98d61b8468aec","impliedFormat":99},{"version":"a58ac9509800c7eb6f69e770ff8fca99f6caf8532faac75cffdd62b8564a99c7","impliedFormat":99},{"version":"9c653bd35750be294edb51b8a16b0fc25b7234ac9ac5f89f5138942d7222152e","impliedFormat":99},{"version":"b5c3f80141815dd5910090c4ce28cd98db342605f4a7cfb48814fb20565bcce8","impliedFormat":99},{"version":"9fdf07bf69bbba5041b81761bc5333176bd90fba388014869151ec47769ecb44","impliedFormat":99},{"version":"e05a7b9152a1a20cffbcfec9ffd16619f33e50d97c3c82354d4a18c5e5550e56","impliedFormat":99},{"version":"4169b5a94f1812cafeb891b190d8f59c8734b79c12050eea812d85dca83bff92","impliedFormat":99},{"version":"074f511000dd9c28a83a1fd65a929fea666524b062e1400b50d305b379d096a3","impliedFormat":99},{"version":"39c0fd3809411a5bd0ed4a2b9cf776526db2ec7f7b37cc5caadfe34e1927c5a4","impliedFormat":99},{"version":"bebe305c5c17e5f4a541e83f6394e0531500b4a2a552a384d07577d0dabf2f51","impliedFormat":99},{"version":"69192e09da8a319a76f4084a19ac77ef4db23465e3dc42d28c99d8af5a14a42b","impliedFormat":99},{"version":"d4c2dd8ce9a021c8f7dbb00e9508c7085ac5c3e8b60bc7c92bf4b787845c3ea8","impliedFormat":99},{"version":"8bad90fd5b485d6ea772717835dc60692ab7572819383a47ef8e97e674f8df48","impliedFormat":99},{"version":"16b9d3c3fe7c4f508e2431a439cdb2c32f2783ae7adad023451b5b1518622173","impliedFormat":99},{"version":"e7c8fee70a3e9f8df00d74de3d258ea8b961c9bace2c485075b9e04025ea4382","impliedFormat":99},{"version":"9016e349de895461db3bb28a342e46e36b539c40877ef9c805fa62db0692b8f2","impliedFormat":99},{"version":"bcc1345f4449ec15100221ebfb8dbd59538f5ccafddf2469d1519c071cd4dae8","impliedFormat":99},{"version":"7b962f5ac4599c2c8300c84fec82cfa4e611b6bfef81b73068d11219761eb7ef","impliedFormat":99},{"version":"b734844adc45e90266d347e0039d21dadc30cdc858e8529566691a1a0d20848a","impliedFormat":99},{"version":"aab3fca58b163bc67f2209c0b3b445f05cb98f6aee142e5b0399917f3b3108cc","impliedFormat":99},{"version":"1c856e1c497470497a253102fbff5bf9bc64312cd241e2ddd623112e2865d2bf","impliedFormat":99},{"version":"1fc29969ce8facb1c332b6b2779f31a402b4107b97a75505d01fa7fcc152f4da","impliedFormat":99},{"version":"2539181da1a9d49b9632cd8355be866ffe0a0a118a3c0e698d9ee96d1363a72b","impliedFormat":99},{"version":"a78ca3ad50d3c0d8fbd9df9cd5ebdd93251eb5b1910860f7522687d79e08dd63","impliedFormat":99},{"version":"56030521b956d964325edb08949b6d4dbd97ed7d36af0526964ad0c7ffa20379","impliedFormat":99},{"version":"8e8abb1fd13e3656120960984d8c57ff78cfd2811f0fc338b81770d5b76204d5","impliedFormat":99},{"version":"6ff021084f4b397df86d9f83a344eb5b41adf015fa6a1d8911642e49c10bf40b","impliedFormat":99},{"version":"4e97ea793c63e62836381a529896c89d6e153cf8671cd80216aa786cd67b39c1","impliedFormat":99},{"version":"d471a3803f7e8136dea84fbfbb17d24e61ceeb6812226940889848d733c35e02","impliedFormat":99},{"version":"d82997f65bf4f33cedbf3c742646649a13728a6fd5b13b582b09b06eb1c7de5a","impliedFormat":99},{"version":"1de667d4ff0329ccb886144c2bb7bba64ed7780df99ea5ec49a7bd2d020344a6","impliedFormat":99},{"version":"127e20c67d325cab272200948a849d1fb83c066cadc3852f778bbc39915fa79a","impliedFormat":99},{"version":"883acf44b6127ddf60b92c39e52688fcc8a415c484d3939b71f046c703127aae","impliedFormat":99},{"version":"f6a80a9c380ee91f1434fb4a46b29ef9c4fce4abe4b9187415110e6a2cdaec92","impliedFormat":99},{"version":"88e2d31be26c636f6d9a878040865a2dd2b046ef6f4cdb6c1a9c1809f7c639b4","impliedFormat":99},{"version":"c78a1451720a649ec706e8d8ae89cb86939818b5c075b6e006da79285758a23c","impliedFormat":99},{"version":"2f97f051a8b71329ea0f197108dc37d0a04519c1bea3b9088711309496de5a81","impliedFormat":99},{"version":"17d8edad130c623224082657243d7b77543ead178b303930ca0e0786959a78e3","signature":"014961606ef96d04899a1f6716b527678e20cf69c08bd16c3086a9b0c28d792f","impliedFormat":99},{"version":"0c71dcff28ef103af2b6cd1354e85c0fc7c2842b011748ad7dfce0d660187215","signature":"9afa8d4286367147b5f00fd220257afa3d6daa625d5371136a143ec9911e4919","impliedFormat":99},{"version":"80a3876c6ffa07a29aca0ac468a92db73847cc561bb283c60d3917d2dfad20f9","signature":"27ea85f1fbb701f6e6e3520c3388615c6d9e2b1f598cda7251d8f5516ed47e04","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e456fd5b101271183d99a9087875a282323e3a3ff0d7bcf1881537eaa8b8e63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"ddc734b4fae82a01d247e9e342d020976640b5e93b4e9b3a1e30e5518883a060","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[64,[131,133]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"noImplicitAny":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[67,1],[66,2],[68,3],[65,4],[182,5],[183,5],[184,6],[139,7],[185,8],[186,9],[187,10],[134,4],[137,11],[135,4],[136,4],[188,12],[189,13],[190,14],[191,15],[192,16],[193,17],[194,17],[195,18],[196,19],[197,20],[198,21],[140,4],[138,4],[199,22],[200,23],[201,24],[233,25],[202,26],[203,27],[204,28],[205,29],[206,30],[207,31],[208,32],[209,33],[210,34],[211,35],[212,35],[213,36],[214,4],[215,37],[217,38],[216,39],[218,40],[219,41],[220,42],[221,43],[222,44],[223,45],[224,46],[225,47],[226,48],[227,49],[228,50],[229,51],[230,52],[141,4],[142,4],[143,4],[181,53],[231,54],[232,55],[128,4],[93,56],[91,57],[87,58],[94,59],[85,4],[88,60],[69,4],[84,61],[102,62],[90,4],[101,63],[95,64],[130,65],[103,66],[127,4],[97,67],[98,67],[96,4],[100,63],[106,68],[86,69],[105,4],[112,67],[110,63],[109,70],[111,63],[113,71],[107,70],[108,72],[122,73],[123,74],[114,75],[120,63],[117,63],[116,76],[119,63],[121,77],[115,75],[118,63],[104,4],[124,73],[125,78],[126,79],[89,61],[92,4],[99,63],[129,4],[61,4],[62,4],[12,4],[10,4],[11,4],[16,4],[15,4],[2,4],[17,4],[18,4],[19,4],[20,4],[21,4],[22,4],[23,4],[24,4],[3,4],[25,4],[26,4],[4,4],[27,4],[31,4],[28,4],[29,4],[30,4],[32,4],[33,4],[34,4],[5,4],[35,4],[36,4],[37,4],[38,4],[6,4],[42,4],[39,4],[40,4],[41,4],[43,4],[7,4],[44,4],[49,4],[50,4],[45,4],[46,4],[47,4],[48,4],[8,4],[54,4],[51,4],[52,4],[53,4],[55,4],[9,4],[56,4],[63,4],[57,4],[58,4],[60,4],[59,4],[1,4],[14,4],[13,4],[159,80],[169,81],[158,80],[179,82],[150,83],[149,84],[178,85],[172,86],[177,87],[152,88],[166,89],[151,90],[175,91],[147,92],[146,85],[176,93],[148,94],[153,95],[154,4],[157,95],[144,4],[180,96],[170,97],[161,98],[162,99],[164,100],[160,101],[163,102],[173,85],[155,103],[156,104],[165,105],[145,106],[168,97],[167,95],[171,4],[174,107],[83,108],[73,109],[75,110],[82,111],[77,4],[78,4],[76,112],[79,113],[70,4],[71,4],[72,108],[74,114],[80,4],[81,115],[64,4],[131,116],[132,117],[133,118]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}