mcp-memory-keeper 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +433 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1051 -0
  4. package/bin/mcp-memory-keeper +52 -0
  5. package/dist/__tests__/helpers/database-test-helper.js +160 -0
  6. package/dist/__tests__/helpers/test-server.js +92 -0
  7. package/dist/__tests__/integration/advanced-features.test.js +614 -0
  8. package/dist/__tests__/integration/backward-compatibility.test.js +245 -0
  9. package/dist/__tests__/integration/batchOperationsE2E.test.js +396 -0
  10. package/dist/__tests__/integration/batchOperationsHandler.test.js +1230 -0
  11. package/dist/__tests__/integration/channelManagementHandler.test.js +1291 -0
  12. package/dist/__tests__/integration/channels.test.js +376 -0
  13. package/dist/__tests__/integration/checkpoint.test.js +251 -0
  14. package/dist/__tests__/integration/concurrent-access.test.js +190 -0
  15. package/dist/__tests__/integration/context-operations.test.js +243 -0
  16. package/dist/__tests__/integration/contextDiff.test.js +852 -0
  17. package/dist/__tests__/integration/contextDiffHandler.test.js +976 -0
  18. package/dist/__tests__/integration/contextExportHandler.test.js +510 -0
  19. package/dist/__tests__/integration/contextGetPaginationDefaults.test.js +298 -0
  20. package/dist/__tests__/integration/contextReassignChannelHandler.test.js +908 -0
  21. package/dist/__tests__/integration/contextRelationshipsHandler.test.js +1151 -0
  22. package/dist/__tests__/integration/contextSearch.test.js +938 -0
  23. package/dist/__tests__/integration/contextSearchHandler.test.js +552 -0
  24. package/dist/__tests__/integration/contextWatchActual.test.js +165 -0
  25. package/dist/__tests__/integration/contextWatchHandler.test.js +1500 -0
  26. package/dist/__tests__/integration/cross-session-sharing.test.js +302 -0
  27. package/dist/__tests__/integration/database-initialization.test.js +134 -0
  28. package/dist/__tests__/integration/enhanced-context-operations.test.js +1082 -0
  29. package/dist/__tests__/integration/enhancedContextGetHandler.test.js +915 -0
  30. package/dist/__tests__/integration/enhancedContextTimelineHandler.test.js +716 -0
  31. package/dist/__tests__/integration/error-cases.test.js +407 -0
  32. package/dist/__tests__/integration/export-import.test.js +367 -0
  33. package/dist/__tests__/integration/feature-flags.test.js +542 -0
  34. package/dist/__tests__/integration/file-operations.test.js +264 -0
  35. package/dist/__tests__/integration/git-integration.test.js +237 -0
  36. package/dist/__tests__/integration/index-tools.test.js +496 -0
  37. package/dist/__tests__/integration/issue11-actual-bug-demo.test.js +304 -0
  38. package/dist/__tests__/integration/issue11-search-filters-bug.test.js +561 -0
  39. package/dist/__tests__/integration/issue12-checkpoint-restore-behavior.test.js +621 -0
  40. package/dist/__tests__/integration/issue13-key-validation.test.js +433 -0
  41. package/dist/__tests__/integration/knowledge-graph.test.js +338 -0
  42. package/dist/__tests__/integration/migrations.test.js +528 -0
  43. package/dist/__tests__/integration/multi-agent.test.js +546 -0
  44. package/dist/__tests__/integration/pagination-critical-fix.test.js +296 -0
  45. package/dist/__tests__/integration/paginationDefaultsHandler.test.js +600 -0
  46. package/dist/__tests__/integration/project-directory.test.js +283 -0
  47. package/dist/__tests__/integration/resource-cleanup.test.js +149 -0
  48. package/dist/__tests__/integration/retention.test.js +513 -0
  49. package/dist/__tests__/integration/search.test.js +333 -0
  50. package/dist/__tests__/integration/semantic-search.test.js +266 -0
  51. package/dist/__tests__/integration/server-initialization.test.js +307 -0
  52. package/dist/__tests__/integration/session-management.test.js +219 -0
  53. package/dist/__tests__/integration/simplified-sharing.test.js +346 -0
  54. package/dist/__tests__/integration/smart-compaction.test.js +230 -0
  55. package/dist/__tests__/integration/summarization.test.js +308 -0
  56. package/dist/__tests__/integration/watcher-migration-validation.test.js +544 -0
  57. package/dist/__tests__/security/input-validation.test.js +115 -0
  58. package/dist/__tests__/utils/agents.test.js +473 -0
  59. package/dist/__tests__/utils/database.test.js +177 -0
  60. package/dist/__tests__/utils/git.test.js +122 -0
  61. package/dist/__tests__/utils/knowledge-graph.test.js +297 -0
  62. package/dist/__tests__/utils/migrationHealthCheck.test.js +302 -0
  63. package/dist/__tests__/utils/project-directory-messages.test.js +188 -0
  64. package/dist/__tests__/utils/timezone-safe-dates.js +119 -0
  65. package/dist/__tests__/utils/validation.test.js +200 -0
  66. package/dist/__tests__/utils/vector-store.test.js +231 -0
  67. package/dist/handlers/contextWatchHandlers.js +206 -0
  68. package/dist/index.js +4310 -0
  69. package/dist/index.phase1.backup.js +410 -0
  70. package/dist/index.phase2.backup.js +704 -0
  71. package/dist/migrations/003_add_channels.js +174 -0
  72. package/dist/migrations/004_add_context_watch.js +151 -0
  73. package/dist/migrations/005_add_context_watch.js +98 -0
  74. package/dist/migrations/simplify-sharing.js +117 -0
  75. package/dist/repositories/BaseRepository.js +30 -0
  76. package/dist/repositories/CheckpointRepository.js +140 -0
  77. package/dist/repositories/ContextRepository.js +1873 -0
  78. package/dist/repositories/FileRepository.js +104 -0
  79. package/dist/repositories/RepositoryManager.js +62 -0
  80. package/dist/repositories/SessionRepository.js +66 -0
  81. package/dist/repositories/WatcherRepository.js +252 -0
  82. package/dist/repositories/index.js +15 -0
  83. package/dist/server.js +384 -0
  84. package/dist/test-helpers/database-helper.js +128 -0
  85. package/dist/types/entities.js +3 -0
  86. package/dist/utils/agents.js +791 -0
  87. package/dist/utils/channels.js +150 -0
  88. package/dist/utils/database.js +731 -0
  89. package/dist/utils/feature-flags.js +476 -0
  90. package/dist/utils/git.js +145 -0
  91. package/dist/utils/knowledge-graph.js +264 -0
  92. package/dist/utils/migrationHealthCheck.js +373 -0
  93. package/dist/utils/migrations.js +452 -0
  94. package/dist/utils/retention.js +460 -0
  95. package/dist/utils/timestamps.js +112 -0
  96. package/dist/utils/validation.js +296 -0
  97. package/dist/utils/vector-store.js +247 -0
  98. package/package.json +84 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,433 @@
1
+ # Changelog
2
+
3
+ All notable changes to MCP Memory Keeper will be documented in this file.
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).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Fixed
11
+
12
+ - **Pagination Defaults in context_get** - Improved consistency
13
+ - Added proper validation of pagination parameters at handler level
14
+ - Default limit of 100 items now properly applied when not specified
15
+ - Invalid limit/offset values are validated and fallback to defaults
16
+ - Response includes `defaultsApplied` metadata to indicate when defaults were used
17
+ - Consistent behavior with `context_search_all` and other paginated endpoints
18
+
19
+ ### Added
20
+
21
+ - **Batch Operations** - Atomic multi-item operations
22
+
23
+ - `context_batch_save` - Save multiple items in one transaction
24
+ - `context_batch_delete` - Delete multiple items by keys or pattern
25
+ - `context_batch_update` - Update multiple items with partial changes
26
+ - Ensures data consistency with all-or-nothing transactions
27
+
28
+ - **Channel Reassignment** - Reorganize context items
29
+
30
+ - `context_reassign_channel` - Move items between channels
31
+ - Support for key patterns, specific keys, or entire channels
32
+ - Filter by category and priority during moves
33
+ - Dry run option to preview changes
34
+
35
+ - **Context Relationships** - Build knowledge graphs
36
+
37
+ - `context_link` - Create typed relationships between items
38
+ - `context_get_related` - Find related items with traversal
39
+ - 14 relationship types (contains, depends_on, references, etc.)
40
+ - Multi-level depth traversal support
41
+ - Directional queries (incoming/outgoing/both)
42
+
43
+ - **Real-time Monitoring** - Watch for context changes
44
+ - `context_watch` - Create filtered watchers for changes
45
+ - Support for long polling and immediate returns
46
+ - Filter by keys, categories, channels, priorities
47
+ - Track added vs updated items
48
+
49
+ ### Documentation
50
+
51
+ - Added comprehensive documentation for all new features in API.md
52
+ - Added practical examples in EXAMPLES.md
53
+ - Added recipes for common patterns in RECIPES.md
54
+ - Added troubleshooting tips for new features
55
+
56
+ ## [0.10.0] - 2025-01-26
57
+
58
+ ### Added
59
+
60
+ - **Channels** - Persistent topic-based organization (#22)
61
+
62
+ - Auto-derived from git branch names (20 chars max)
63
+ - Survives session crashes and restarts
64
+ - `defaultChannel` parameter in `context_session_start`
65
+ - `channel` parameter in `context_save` and `context_get`
66
+ - Perfect for multi-branch development and team collaboration
67
+
68
+ - **Enhanced Filtering** in `context_get` (#21)
69
+
70
+ - `includeMetadata` - Get timestamps and size information
71
+ - `sort` - Sort by created/updated time (asc/desc) or priority
72
+ - `limit` and `offset` - Pagination support
73
+ - `createdAfter` and `createdBefore` - Time-based filtering
74
+ - `keyPattern` - Regex pattern matching for keys
75
+ - `priorities` - Filter by multiple priority levels
76
+
77
+ - **Enhanced Timeline** (#21)
78
+ - `includeItems` - Show actual items, not just counts
79
+ - `categories` - Filter timeline by specific categories
80
+ - `relativeTime` - Display "2 hours ago" format
81
+ - `itemsPerPeriod` - Limit items shown per time period
82
+
83
+ ### Changed
84
+
85
+ - Database schema updated with `channel` column in context_items table
86
+ - Improved query performance with channel indexing
87
+ - Better support for cross-branch context queries
88
+
89
+ ### Technical
90
+
91
+ - Added channels migration (003_add_channels.ts)
92
+ - Enhanced validation for channel names
93
+ - Backward compatible - existing items default to 'default' channel
94
+
95
+ ## [0.9.0] - 2025-01-20
96
+
97
+ ### Changed (BREAKING)
98
+
99
+ - **Simplified Sharing Model** (#19)
100
+ - Context items are now shared across all sessions by default (public)
101
+ - Removed broken `context_share` and `context_get_shared` commands
102
+ - Added `private` flag to `context_save` for session-specific items
103
+ - Database schema updated: replaced `shared` and `shared_with_sessions` columns with `is_private`
104
+ - Migration included to make ALL existing items public (accessible across sessions)
105
+
106
+ ### Fixed
107
+
108
+ - Cross-session collaboration now works reliably
109
+ - Context accessibility is consistent across all retrieval methods
110
+ - Search operations properly respect privacy settings
111
+
112
+ ### Removed
113
+
114
+ - `context_share` tool (sharing is now automatic)
115
+ - `context_get_shared` tool (use `context_get` instead)
116
+ - Complex sharing mechanism that was causing inconsistencies
117
+
118
+ ## [0.8.4] - 2025-01-19
119
+
120
+ ### Fixed
121
+
122
+ - Critical fix for "table sessions has no column named working_directory" error
123
+ - Added defensive checks before using working_directory column
124
+ - Gracefully handles existing databases without the new column
125
+
126
+ ### Added
127
+
128
+ - Tiered storage and retention policies (planned)
129
+ - Feature flags system (planned)
130
+ - Database migration system (planned)
131
+
132
+ ## [0.8.3] - 2025-01-19
133
+
134
+ ### Added
135
+
136
+ - **Smart Project Directory Management**
137
+ - `context_session_start` provides intelligent suggestions when no project directory is set
138
+ - Detects git repositories in current directory and subdirectories
139
+ - Suggests appropriate project paths based on directory structure
140
+ - Working directory is stored in the sessions table when explicitly provided
141
+ - Git-dependent tools now prompt for project directory setup when needed
142
+
143
+ ### Changed
144
+
145
+ - Sessions table now includes a `working_directory` column
146
+ - Improved user guidance for setting up git tracking
147
+ - More helpful messages when project directory is not set
148
+
149
+ ### Fixed
150
+
151
+ - Automatic schema migration for existing databases to add the `working_directory` column
152
+
153
+ ## [0.8.0] - 2024-01-18
154
+
155
+ ### Added
156
+
157
+ - **Session Branching & Merging** (#14)
158
+ - `context_branch_session` tool for creating session branches
159
+ - Support for shallow (high-priority only) and deep (full copy) branching
160
+ - `context_merge_sessions` tool with three conflict resolution strategies
161
+ - Parent-child relationship tracking in sessions table
162
+ - **Journal Entries** (#16)
163
+ - `context_journal_entry` tool for time-stamped reflections
164
+ - Support for tags and mood tracking
165
+ - Integration with timeline visualization
166
+ - **Timeline View** (#16)
167
+ - `context_timeline` tool to visualize activity patterns
168
+ - Grouping by hour, day, or week
169
+ - Category distribution over time
170
+ - Journal entry integration
171
+ - **Progressive Compression** (#17)
172
+ - `context_compress` tool for intelligent space management
173
+ - Preserve important categories while compressing old data
174
+ - Automatic compression ratio calculation
175
+ - Target size optimization support
176
+ - **Cross-Tool Integration** (#18)
177
+ - `context_integrate_tool` to record events from other MCP tools
178
+ - Automatic high-priority context item creation for important events
179
+ - Support for tool event metadata storage
180
+
181
+ ### Changed
182
+
183
+ - Updated database schema to support new features
184
+ - Enhanced documentation with comprehensive examples
185
+ - Improved test coverage with 19 new test cases
186
+
187
+ ### Technical
188
+
189
+ - Added `parent_id` column to sessions table
190
+ - New tables: `journal_entries`, `compressed_context`, `tool_events`
191
+ - All 255 tests passing
192
+
193
+ ## [0.7.0] - 2024-01-18
194
+
195
+ ### Added
196
+
197
+ - **Multi-Agent System** (#9)
198
+ - Agent framework with specialized roles
199
+ - `AnalyzerAgent` for pattern detection and relationship analysis
200
+ - `SynthesizerAgent` for summarization and recommendations
201
+ - `AgentCoordinator` for managing agent workflows
202
+ - `context_delegate` tool for intelligent task delegation
203
+ - Agent chaining capability for complex workflows
204
+ - Confidence scoring for agent outputs
205
+
206
+ ### Changed
207
+
208
+ - Improved documentation with multi-agent examples
209
+ - Enhanced EXAMPLES.md with agent usage patterns
210
+
211
+ ### Technical
212
+
213
+ - Created `src/utils/agents.ts` with complete agent implementation
214
+ - Added comprehensive test coverage (30 new tests)
215
+ - All 236 tests passing
216
+
217
+ ## [0.6.0] - 2024-01-17
218
+
219
+ ### Added
220
+
221
+ - **Semantic Search** (#4)
222
+ - `context_semantic_search` tool for natural language queries
223
+ - Lightweight vector embeddings using character n-grams
224
+ - No external dependencies required
225
+ - Similarity threshold filtering
226
+ - Integration with existing search infrastructure
227
+
228
+ ### Changed
229
+
230
+ - Updated examples with semantic search patterns
231
+ - Enhanced documentation for natural language queries
232
+
233
+ ### Technical
234
+
235
+ - Implemented `VectorStore` class for embedding management
236
+ - Added `vector_embeddings` table to database schema
237
+ - Comprehensive test coverage for semantic search
238
+ - All 206 tests passing
239
+
240
+ ## [0.5.0] - 2024-01-17
241
+
242
+ ### Added
243
+
244
+ - **Knowledge Graph Integration** (#3)
245
+ - Automatic entity extraction from context
246
+ - Relationship detection between entities
247
+ - `context_analyze` tool for building knowledge graph
248
+ - `context_find_related` tool for exploring connections
249
+ - `context_visualize` tool with graph/timeline/heatmap views
250
+ - Confidence scoring for relationships
251
+
252
+ ### Changed
253
+
254
+ - Enhanced database schema for knowledge graph support
255
+ - Improved context analysis capabilities
256
+
257
+ ### Technical
258
+
259
+ - New tables: `entities`, `relations`, `observations`
260
+ - Added `knowledge-graph.ts` utility module
261
+ - Comprehensive test coverage for graph operations
262
+
263
+ ## [0.4.2] - 2024-01-16
264
+
265
+ ### Added
266
+
267
+ - **Documentation Improvements**
268
+ - Comprehensive TROUBLESHOOTING.md guide
269
+ - Enhanced EXAMPLES.md with real-world scenarios
270
+ - Started RECIPES.md for common patterns
271
+
272
+ ### Fixed
273
+
274
+ - Git integration error handling
275
+ - Session list date filtering
276
+
277
+ ## [0.4.1] - 2024-01-16
278
+
279
+ ### Fixed
280
+
281
+ - Database initialization race condition
282
+ - Checkpoint restoration with missing files
283
+ - Search result ranking accuracy
284
+
285
+ ### Changed
286
+
287
+ - Improved error messages for better debugging
288
+ - Enhanced validation for file paths
289
+
290
+ ## [0.4.0] - 2024-01-15
291
+
292
+ ### Added
293
+
294
+ - **Git Integration** (#2)
295
+ - `context_git_commit` tool with auto-save
296
+ - Automatic context correlation with commits
297
+ - Git status capture in checkpoints
298
+ - Branch tracking
299
+
300
+ ### Changed
301
+
302
+ - Checkpoint system now includes git information
303
+ - Enhanced session metadata with git branch
304
+
305
+ ### Technical
306
+
307
+ - Added `simple-git` dependency
308
+ - Created `git.ts` utility module
309
+ - 97% test coverage maintained
310
+
311
+ ## [0.3.0] - 2024-01-14
312
+
313
+ ### Added
314
+
315
+ - **Smart Compaction** (#1)
316
+ - `context_prepare_compaction` tool
317
+ - Automatic identification of critical items
318
+ - Unfinished task preservation
319
+ - Restoration instructions generation
320
+ - **Search Functionality**
321
+ - `context_search` tool with full-text search
322
+ - Search in keys and values
323
+ - Category and session filtering
324
+ - **Export/Import**
325
+ - `context_export` tool for JSON/CSV export
326
+ - `context_import` tool with merge strategies
327
+ - Session backup and restore capability
328
+
329
+ ### Changed
330
+
331
+ - Improved checkpoint metadata
332
+ - Enhanced error handling across all tools
333
+
334
+ ### Technical
335
+
336
+ - Added search indexes for performance
337
+ - Implemented streaming for large exports
338
+ - Transaction support for atomic operations
339
+
340
+ ## [0.2.0] - 2024-01-13
341
+
342
+ ### Added
343
+
344
+ - **Checkpoint System**
345
+ - `context_checkpoint` tool for complete snapshots
346
+ - `context_restore_checkpoint` for state restoration
347
+ - File cache inclusion in checkpoints
348
+ - Git status integration
349
+ - **Context Summarization**
350
+ - `context_summarize` tool
351
+ - AI-friendly markdown summaries
352
+ - Category and priority grouping
353
+ - Session statistics
354
+ - **Enhanced File Management**
355
+ - SHA-256 hash-based change detection
356
+ - File size tracking
357
+ - Automatic cache invalidation
358
+
359
+ ### Changed
360
+
361
+ - Improved session management with metadata
362
+ - Better error messages with error codes
363
+ - Enhanced validation for all inputs
364
+
365
+ ### Fixed
366
+
367
+ - Memory leak in file cache operations
368
+ - Session switching race condition
369
+
370
+ ## [0.1.0] - 2024-01-12
371
+
372
+ ### Added
373
+
374
+ - Initial release
375
+ - **Core Features**
376
+ - `context_save` and `context_get` tools
377
+ - `context_delete` for item removal
378
+ - Session management with `context_session_start` and `context_session_list`
379
+ - File caching with `context_cache_file` and `context_file_changed`
380
+ - Status monitoring with `context_status`
381
+ - **Database Setup**
382
+ - SQLite with WAL mode
383
+ - Automatic database creation
384
+ - Size tracking and limits
385
+ - **MCP Integration**
386
+ - Full MCP protocol implementation
387
+ - Tool discovery and schema validation
388
+ - Error handling and reporting
389
+
390
+ ### Technical
391
+
392
+ - TypeScript implementation
393
+ - Comprehensive test suite
394
+ - Zero runtime dependencies (except MCP SDK and SQLite)
395
+
396
+ ## Development Releases
397
+
398
+ ### [0.1.0-beta.2] - 2024-01-11
399
+
400
+ - Fixed Windows path handling
401
+ - Added Node.js 18+ compatibility
402
+
403
+ ### [0.1.0-beta.1] - 2024-01-10
404
+
405
+ - Initial beta release
406
+ - Basic functionality testing
407
+ - Community feedback integration
408
+
409
+ ## Legend
410
+
411
+ - **Added**: New features
412
+ - **Changed**: Changes in existing functionality
413
+ - **Deprecated**: Soon-to-be removed features
414
+ - **Removed**: Removed features
415
+ - **Fixed**: Bug fixes
416
+ - **Security**: Security updates
417
+ - **Technical**: Internal improvements
418
+
419
+ [Unreleased]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.10.0...HEAD
420
+ [0.10.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.9.0...v0.10.0
421
+ [0.9.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.8.4...v0.9.0
422
+ [0.8.4]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.8.3...v0.8.4
423
+ [0.8.3]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.8.0...v0.8.3
424
+ [0.8.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.7.0...v0.8.0
425
+ [0.7.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.6.0...v0.7.0
426
+ [0.6.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.5.0...v0.6.0
427
+ [0.5.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.4.2...v0.5.0
428
+ [0.4.2]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.4.1...v0.4.2
429
+ [0.4.1]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.4.0...v0.4.1
430
+ [0.4.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.3.0...v0.4.0
431
+ [0.3.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.2.0...v0.3.0
432
+ [0.2.0]: https://github.com/mkreyman/mcp-memory-keeper/compare/v0.1.0...v0.2.0
433
+ [0.1.0]: https://github.com/mkreyman/mcp-memory-keeper/releases/tag/v0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Mark Kreyman
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.