claude-conversation-memory-mcp 0.1.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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +223 -0
  3. package/dist/ConversationMemory.d.ts +80 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +203 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  8. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  9. package/dist/documentation/CodeAnalyzer.js +122 -0
  10. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  11. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  12. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  13. package/dist/documentation/ConversationAnalyzer.js +156 -0
  14. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  15. package/dist/documentation/CrossReferencer.d.ts +67 -0
  16. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  17. package/dist/documentation/CrossReferencer.js +247 -0
  18. package/dist/documentation/CrossReferencer.js.map +1 -0
  19. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  20. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  21. package/dist/documentation/DocumentationGenerator.js +57 -0
  22. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  23. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  24. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  25. package/dist/documentation/MarkdownFormatter.js +301 -0
  26. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  27. package/dist/documentation/types.d.ts +176 -0
  28. package/dist/documentation/types.d.ts.map +1 -0
  29. package/dist/documentation/types.js +5 -0
  30. package/dist/documentation/types.js.map +1 -0
  31. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  32. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  33. package/dist/embeddings/EmbeddingConfig.js +132 -0
  34. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  35. package/dist/embeddings/EmbeddingGenerator.d.ts +45 -0
  36. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  37. package/dist/embeddings/EmbeddingGenerator.js +129 -0
  38. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  39. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  40. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  41. package/dist/embeddings/EmbeddingProvider.js +6 -0
  42. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  43. package/dist/embeddings/VectorStore.d.ts +75 -0
  44. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  45. package/dist/embeddings/VectorStore.js +220 -0
  46. package/dist/embeddings/VectorStore.js.map +1 -0
  47. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  48. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  49. package/dist/embeddings/providers/OllamaEmbeddings.js +132 -0
  50. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  51. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  52. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  53. package/dist/embeddings/providers/OpenAIEmbeddings.js +128 -0
  54. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  55. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  56. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  57. package/dist/embeddings/providers/TransformersEmbeddings.js +114 -0
  58. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  59. package/dist/index.d.ts +7 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +127 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/parsers/ConversationParser.d.ts +138 -0
  64. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  65. package/dist/parsers/ConversationParser.js +325 -0
  66. package/dist/parsers/ConversationParser.js.map +1 -0
  67. package/dist/parsers/DecisionExtractor.d.ts +76 -0
  68. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  69. package/dist/parsers/DecisionExtractor.js +305 -0
  70. package/dist/parsers/DecisionExtractor.js.map +1 -0
  71. package/dist/parsers/GitIntegrator.d.ts +71 -0
  72. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  73. package/dist/parsers/GitIntegrator.js +283 -0
  74. package/dist/parsers/GitIntegrator.js.map +1 -0
  75. package/dist/parsers/MistakeExtractor.d.ts +86 -0
  76. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  77. package/dist/parsers/MistakeExtractor.js +341 -0
  78. package/dist/parsers/MistakeExtractor.js.map +1 -0
  79. package/dist/parsers/RequirementsExtractor.d.ts +70 -0
  80. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  81. package/dist/parsers/RequirementsExtractor.js +252 -0
  82. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  83. package/dist/search/SemanticSearch.d.ts +90 -0
  84. package/dist/search/SemanticSearch.d.ts.map +1 -0
  85. package/dist/search/SemanticSearch.js +352 -0
  86. package/dist/search/SemanticSearch.js.map +1 -0
  87. package/dist/storage/ConversationStorage.d.ts +53 -0
  88. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  89. package/dist/storage/ConversationStorage.js +249 -0
  90. package/dist/storage/ConversationStorage.js.map +1 -0
  91. package/dist/storage/SQLiteManager.d.ts +88 -0
  92. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  93. package/dist/storage/SQLiteManager.js +281 -0
  94. package/dist/storage/SQLiteManager.js.map +1 -0
  95. package/dist/storage/migrations.d.ts +54 -0
  96. package/dist/storage/migrations.d.ts.map +1 -0
  97. package/dist/storage/migrations.js +153 -0
  98. package/dist/storage/migrations.js.map +1 -0
  99. package/dist/storage/schema.sql +321 -0
  100. package/dist/tools/ToolDefinitions.d.ts +265 -0
  101. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  102. package/dist/tools/ToolDefinitions.js +261 -0
  103. package/dist/tools/ToolDefinitions.js.map +1 -0
  104. package/dist/tools/ToolHandlers.d.ts +56 -0
  105. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  106. package/dist/tools/ToolHandlers.js +431 -0
  107. package/dist/tools/ToolHandlers.js.map +1 -0
  108. package/dist/types/ToolTypes.d.ts +333 -0
  109. package/dist/types/ToolTypes.d.ts.map +1 -0
  110. package/dist/types/ToolTypes.js +6 -0
  111. package/dist/types/ToolTypes.js.map +1 -0
  112. package/dist/utils/sanitization.d.ts +35 -0
  113. package/dist/utils/sanitization.d.ts.map +1 -0
  114. package/dist/utils/sanitization.js +97 -0
  115. package/dist/utils/sanitization.js.map +1 -0
  116. package/package.json +87 -0
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Git Integrator
3
+ * Links git commits to conversations based on temporal and contextual analysis
4
+ */
5
+ import simpleGit from "simple-git";
6
+ export class GitIntegrator {
7
+ git;
8
+ constructor(projectPath) {
9
+ this.git = simpleGit(projectPath);
10
+ }
11
+ /**
12
+ * Parse git history and link to conversations
13
+ */
14
+ async linkCommitsToConversations(conversations, fileEdits, decisions) {
15
+ console.log("Parsing git history...");
16
+ // Get git log
17
+ const commits = await this.parseGitHistory();
18
+ console.log(`Found ${commits.length} commits`);
19
+ // Link commits to conversations
20
+ const linkedCommits = [];
21
+ for (const commit of commits) {
22
+ const linkage = this.findBestConversationMatch(commit, conversations, fileEdits, decisions);
23
+ if (linkage && linkage.confidence > 0.3) {
24
+ commit.conversation_id = linkage.conversation.id;
25
+ console.log(`Linked commit ${commit.hash.substring(0, 7)} to conversation (confidence: ${(linkage.confidence * 100).toFixed(0)}%)`);
26
+ console.log(` Reasons: ${linkage.reasons.join(", ")}`);
27
+ }
28
+ linkedCommits.push(commit);
29
+ }
30
+ console.log(`Linked ${linkedCommits.filter((c) => c.conversation_id).length} commits to conversations`);
31
+ return linkedCommits;
32
+ }
33
+ /**
34
+ * Parse git history
35
+ */
36
+ async parseGitHistory() {
37
+ try {
38
+ const log = await this.git.log({
39
+ "--all": null,
40
+ "--name-only": null,
41
+ });
42
+ const commits = [];
43
+ for (const entry of log.all) {
44
+ // Get current branch (if available)
45
+ let branch;
46
+ try {
47
+ const branches = await this.git.branch(["--contains", entry.hash]);
48
+ branch = branches.current || branches.all[0];
49
+ }
50
+ catch (_e) {
51
+ // Branch info not available
52
+ }
53
+ // Parse changed files from diff
54
+ const files = await this.getChangedFiles(entry.hash);
55
+ commits.push({
56
+ hash: entry.hash,
57
+ message: entry.message,
58
+ author: entry.author_name,
59
+ timestamp: new Date(entry.date).getTime(),
60
+ branch,
61
+ files_changed: files,
62
+ metadata: {
63
+ author_email: entry.author_email,
64
+ refs: entry.refs,
65
+ body: entry.body,
66
+ },
67
+ });
68
+ }
69
+ return commits;
70
+ }
71
+ catch (error) {
72
+ console.error("Error parsing git history:", error);
73
+ return [];
74
+ }
75
+ }
76
+ /**
77
+ * Get files changed in a commit
78
+ */
79
+ async getChangedFiles(commitHash) {
80
+ try {
81
+ const diff = await this.git.show([
82
+ "--name-only",
83
+ "--format=",
84
+ commitHash,
85
+ ]);
86
+ return diff
87
+ .split("\n")
88
+ .map((f) => f.trim())
89
+ .filter((f) => f.length > 0);
90
+ }
91
+ catch (_error) {
92
+ return [];
93
+ }
94
+ }
95
+ /**
96
+ * Find best conversation match for a commit
97
+ */
98
+ findBestConversationMatch(commit, conversations, fileEdits, decisions) {
99
+ let bestMatch = null;
100
+ let highestConfidence = 0;
101
+ for (const conversation of conversations) {
102
+ const linkage = this.scoreCommitConversationMatch(commit, conversation, fileEdits, decisions);
103
+ if (linkage.confidence > highestConfidence) {
104
+ highestConfidence = linkage.confidence;
105
+ bestMatch = linkage;
106
+ }
107
+ }
108
+ return bestMatch;
109
+ }
110
+ /**
111
+ * Score how well a commit matches a conversation
112
+ */
113
+ scoreCommitConversationMatch(commit, conversation, fileEdits, decisions) {
114
+ let score = 0;
115
+ const reasons = [];
116
+ const maxScore = 10; // Total possible points
117
+ // 1. Timestamp proximity (3 points max)
118
+ const timestampScore = this.scoreTimestampProximity(commit, conversation);
119
+ score += timestampScore;
120
+ if (timestampScore > 0) {
121
+ reasons.push(`timestamp proximity (${timestampScore.toFixed(1)}/3)`);
122
+ }
123
+ // 2. File overlap (4 points max)
124
+ const fileScore = this.scoreFileOverlap(commit, conversation, fileEdits);
125
+ score += fileScore;
126
+ if (fileScore > 0) {
127
+ reasons.push(`file overlap (${fileScore.toFixed(1)}/4)`);
128
+ }
129
+ // 3. Branch match (1 point)
130
+ if (commit.branch && commit.branch === conversation.git_branch) {
131
+ score += 1;
132
+ reasons.push("branch match");
133
+ }
134
+ // 4. Commit message keywords (2 points max)
135
+ const keywordScore = this.scoreCommitMessageKeywords(commit, conversation, decisions);
136
+ score += keywordScore;
137
+ if (keywordScore > 0) {
138
+ reasons.push(`message keywords (${keywordScore.toFixed(1)}/2)`);
139
+ }
140
+ return {
141
+ commit,
142
+ conversation,
143
+ confidence: score / maxScore,
144
+ reasons,
145
+ };
146
+ }
147
+ /**
148
+ * Score based on timestamp proximity
149
+ * Returns 0-3 points
150
+ */
151
+ scoreTimestampProximity(commit, conversation) {
152
+ const { first_message_at, last_message_at } = conversation;
153
+ // Check if commit is within conversation timespan
154
+ if (commit.timestamp >= first_message_at &&
155
+ commit.timestamp <= last_message_at) {
156
+ return 3; // Perfect match
157
+ }
158
+ // Check if commit is within 5 minutes before/after conversation
159
+ const fiveMinutes = 5 * 60 * 1000;
160
+ const timeDelta = Math.min(Math.abs(commit.timestamp - first_message_at), Math.abs(commit.timestamp - last_message_at));
161
+ if (timeDelta < fiveMinutes) {
162
+ return 2; // Very close
163
+ }
164
+ // Check if commit is within 1 hour
165
+ const oneHour = 60 * 60 * 1000;
166
+ if (timeDelta < oneHour) {
167
+ return 1; // Somewhat close
168
+ }
169
+ return 0; // Too far away
170
+ }
171
+ /**
172
+ * Score based on file overlap
173
+ * Returns 0-4 points
174
+ */
175
+ scoreFileOverlap(commit, conversation, fileEdits) {
176
+ // Get files discussed in conversation
177
+ const conversationFiles = fileEdits
178
+ .filter((edit) => edit.conversation_id === conversation.id)
179
+ .map((edit) => edit.file_path);
180
+ if (conversationFiles.length === 0) {
181
+ return 0;
182
+ }
183
+ // Calculate overlap
184
+ const commitFilesSet = new Set(commit.files_changed);
185
+ const overlappingFiles = conversationFiles.filter((file) => commitFilesSet.has(file));
186
+ const overlapRatio = overlappingFiles.length /
187
+ Math.max(commit.files_changed.length, conversationFiles.length);
188
+ // 4 points for 100% overlap, scaling down
189
+ return overlapRatio * 4;
190
+ }
191
+ /**
192
+ * Score based on commit message keywords
193
+ * Returns 0-2 points
194
+ */
195
+ scoreCommitMessageKeywords(commit, conversation, decisions) {
196
+ const commitMessage = commit.message.toLowerCase();
197
+ // Get keywords from conversation decisions
198
+ const conversationDecisions = decisions.filter((d) => d.conversation_id === conversation.id);
199
+ if (conversationDecisions.length === 0) {
200
+ return 0;
201
+ }
202
+ // Extract keywords from decisions
203
+ const keywords = new Set();
204
+ for (const decision of conversationDecisions) {
205
+ // Extract significant words (3+ characters)
206
+ const words = decision.decision_text
207
+ .toLowerCase()
208
+ .split(/\s+/)
209
+ .filter((w) => w.length >= 3);
210
+ words.forEach((w) => keywords.add(w));
211
+ if (decision.context) {
212
+ keywords.add(decision.context.toLowerCase());
213
+ }
214
+ }
215
+ // Count keyword matches
216
+ let matches = 0;
217
+ for (const keyword of keywords) {
218
+ if (commitMessage.includes(keyword)) {
219
+ matches++;
220
+ }
221
+ }
222
+ // 2 points for 3+ matches, scaling down
223
+ return Math.min(matches / 3, 1) * 2;
224
+ }
225
+ /**
226
+ * Get recent commits (last N days)
227
+ */
228
+ async getRecentCommits(days = 30) {
229
+ const sinceDate = new Date();
230
+ sinceDate.setDate(sinceDate.getDate() - days);
231
+ try {
232
+ const log = await this.git.log({
233
+ "--since": sinceDate.toISOString(),
234
+ });
235
+ const commits = [];
236
+ for (const entry of log.all) {
237
+ const files = await this.getChangedFiles(entry.hash);
238
+ commits.push({
239
+ hash: entry.hash,
240
+ message: entry.message,
241
+ author: entry.author_name,
242
+ timestamp: new Date(entry.date).getTime(),
243
+ files_changed: files,
244
+ metadata: {
245
+ author_email: entry.author_email,
246
+ refs: entry.refs,
247
+ },
248
+ });
249
+ }
250
+ return commits;
251
+ }
252
+ catch (error) {
253
+ console.error("Error getting recent commits:", error);
254
+ return [];
255
+ }
256
+ }
257
+ /**
258
+ * Get commits affecting a specific file
259
+ */
260
+ async getCommitsForFile(filePath) {
261
+ try {
262
+ const log = await this.git.log({
263
+ file: filePath,
264
+ });
265
+ return log.all.map((entry) => ({
266
+ hash: entry.hash,
267
+ message: entry.message,
268
+ author: entry.author_name,
269
+ timestamp: new Date(entry.date).getTime(),
270
+ files_changed: [filePath],
271
+ metadata: {
272
+ author_email: entry.author_email,
273
+ refs: entry.refs,
274
+ },
275
+ }));
276
+ }
277
+ catch (error) {
278
+ console.error(`Error getting commits for ${filePath}:`, error);
279
+ return [];
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=GitIntegrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitIntegrator.js","sourceRoot":"","sources":["../../src/parsers/GitIntegrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Mistake Extractor
3
+ * Identifies errors and how they were corrected to prevent repetition
4
+ */
5
+ import type { Message, ToolResult } from "./ConversationParser.js";
6
+ export interface Mistake {
7
+ id: string;
8
+ conversation_id: string;
9
+ message_id: string;
10
+ mistake_type: "logic_error" | "wrong_approach" | "misunderstanding" | "tool_error" | "syntax_error";
11
+ what_went_wrong: string;
12
+ correction?: string;
13
+ user_correction_message?: string;
14
+ files_affected: string[];
15
+ timestamp: number;
16
+ }
17
+ export declare class MistakeExtractor {
18
+ private readonly CORRECTION_INDICATORS;
19
+ private readonly ERROR_INDICATORS;
20
+ private readonly MISTAKE_PATTERNS;
21
+ /**
22
+ * Extract mistakes from messages and tool results
23
+ */
24
+ extractMistakes(messages: Message[], toolResults: ToolResult[]): Mistake[];
25
+ /**
26
+ * Extract mistakes from tool execution errors
27
+ */
28
+ private extractToolErrors;
29
+ /**
30
+ * Extract mistakes from user corrections
31
+ */
32
+ private extractUserCorrections;
33
+ /**
34
+ * Extract mistakes from error discussions in messages
35
+ */
36
+ private extractErrorDiscussions;
37
+ /**
38
+ * Classify the type of mistake
39
+ */
40
+ private classifyMistakeType;
41
+ /**
42
+ * Summarize error message
43
+ */
44
+ private summarizeError;
45
+ /**
46
+ * Find correction in subsequent messages
47
+ */
48
+ private findCorrection;
49
+ /**
50
+ * Extract files mentioned in error
51
+ */
52
+ private extractFilesFromError;
53
+ /**
54
+ * Extract files from message metadata
55
+ */
56
+ private extractFilesFromMessage;
57
+ /**
58
+ * Find previous assistant message
59
+ */
60
+ private findPreviousAssistantMessage;
61
+ /**
62
+ * Extract what went wrong from correction message
63
+ */
64
+ private extractWhatWentWrong;
65
+ /**
66
+ * Extract correction from user message
67
+ */
68
+ private extractCorrection;
69
+ /**
70
+ * Extract error discussion from message
71
+ */
72
+ private extractErrorDiscussion;
73
+ /**
74
+ * Extract solution from same message that discusses error
75
+ */
76
+ private extractSolutionFromSameMessage;
77
+ /**
78
+ * Deduplicate similar mistakes
79
+ */
80
+ private deduplicateMistakes;
81
+ /**
82
+ * Score mistake severity (for prioritization)
83
+ */
84
+ scoreMistakeSeverity(mistake: Mistake): number;
85
+ }
86
+ //# sourceMappingURL=MistakeExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MistakeExtractor.d.ts","sourceRoot":"","sources":["../../src/parsers/MistakeExtractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,aAAa,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,YAAY,GAAG,cAAc,CAAC;IACpG,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAOpC;IAGF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAO/B;IAGF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAa/B;IAEF;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE;IAkB1E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyC9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAYpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAQtC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CA8B/C"}