psychmem 1.0.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 (93) hide show
  1. package/README.md +632 -0
  2. package/dist/adapters/claude-code/index.d.ts +125 -0
  3. package/dist/adapters/claude-code/index.d.ts.map +1 -0
  4. package/dist/adapters/claude-code/index.js +398 -0
  5. package/dist/adapters/claude-code/index.js.map +1 -0
  6. package/dist/adapters/opencode/index.d.ts +50 -0
  7. package/dist/adapters/opencode/index.d.ts.map +1 -0
  8. package/dist/adapters/opencode/index.js +793 -0
  9. package/dist/adapters/opencode/index.js.map +1 -0
  10. package/dist/adapters/types.d.ts +226 -0
  11. package/dist/adapters/types.d.ts.map +1 -0
  12. package/dist/adapters/types.js +6 -0
  13. package/dist/adapters/types.js.map +1 -0
  14. package/dist/cli.d.ts +19 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +461 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/hooks/index.d.ts +92 -0
  19. package/dist/hooks/index.d.ts.map +1 -0
  20. package/dist/hooks/index.js +304 -0
  21. package/dist/hooks/index.js.map +1 -0
  22. package/dist/hooks/post-tool-use.d.ts +26 -0
  23. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  24. package/dist/hooks/post-tool-use.js +69 -0
  25. package/dist/hooks/post-tool-use.js.map +1 -0
  26. package/dist/hooks/session-end.d.ts +32 -0
  27. package/dist/hooks/session-end.d.ts.map +1 -0
  28. package/dist/hooks/session-end.js +66 -0
  29. package/dist/hooks/session-end.js.map +1 -0
  30. package/dist/hooks/session-start.d.ts +55 -0
  31. package/dist/hooks/session-start.d.ts.map +1 -0
  32. package/dist/hooks/session-start.js +173 -0
  33. package/dist/hooks/session-start.js.map +1 -0
  34. package/dist/hooks/stop.d.ts +72 -0
  35. package/dist/hooks/stop.d.ts.map +1 -0
  36. package/dist/hooks/stop.js +273 -0
  37. package/dist/hooks/stop.js.map +1 -0
  38. package/dist/index.d.ts +114 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +191 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/memory/context-sweep.d.ts +107 -0
  43. package/dist/memory/context-sweep.d.ts.map +1 -0
  44. package/dist/memory/context-sweep.js +557 -0
  45. package/dist/memory/context-sweep.js.map +1 -0
  46. package/dist/memory/patterns.d.ts +106 -0
  47. package/dist/memory/patterns.d.ts.map +1 -0
  48. package/dist/memory/patterns.js +613 -0
  49. package/dist/memory/patterns.js.map +1 -0
  50. package/dist/memory/selective-memory.d.ts +78 -0
  51. package/dist/memory/selective-memory.d.ts.map +1 -0
  52. package/dist/memory/selective-memory.js +227 -0
  53. package/dist/memory/selective-memory.js.map +1 -0
  54. package/dist/memory/structural-analyzer.d.ts +75 -0
  55. package/dist/memory/structural-analyzer.d.ts.map +1 -0
  56. package/dist/memory/structural-analyzer.js +359 -0
  57. package/dist/memory/structural-analyzer.js.map +1 -0
  58. package/dist/retrieval/index.d.ts +106 -0
  59. package/dist/retrieval/index.d.ts.map +1 -0
  60. package/dist/retrieval/index.js +291 -0
  61. package/dist/retrieval/index.js.map +1 -0
  62. package/dist/storage/database.d.ts +138 -0
  63. package/dist/storage/database.d.ts.map +1 -0
  64. package/dist/storage/database.js +748 -0
  65. package/dist/storage/database.js.map +1 -0
  66. package/dist/storage/sqlite-adapter.d.ts +35 -0
  67. package/dist/storage/sqlite-adapter.d.ts.map +1 -0
  68. package/dist/storage/sqlite-adapter.js +103 -0
  69. package/dist/storage/sqlite-adapter.js.map +1 -0
  70. package/dist/transcript/index.d.ts +8 -0
  71. package/dist/transcript/index.d.ts.map +1 -0
  72. package/dist/transcript/index.js +6 -0
  73. package/dist/transcript/index.js.map +1 -0
  74. package/dist/transcript/parser.d.ts +93 -0
  75. package/dist/transcript/parser.d.ts.map +1 -0
  76. package/dist/transcript/parser.js +373 -0
  77. package/dist/transcript/parser.js.map +1 -0
  78. package/dist/transcript/sweep.d.ts +75 -0
  79. package/dist/transcript/sweep.d.ts.map +1 -0
  80. package/dist/transcript/sweep.js +202 -0
  81. package/dist/transcript/sweep.js.map +1 -0
  82. package/dist/types/index.d.ts +328 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/dist/types/index.js +80 -0
  85. package/dist/types/index.js.map +1 -0
  86. package/dist/utils/paths.d.ts +19 -0
  87. package/dist/utils/paths.d.ts.map +1 -0
  88. package/dist/utils/paths.js +43 -0
  89. package/dist/utils/paths.js.map +1 -0
  90. package/hooks/hooks.json +54 -0
  91. package/package.json +83 -0
  92. package/plugin.js +45 -0
  93. package/plugin.json +19 -0
@@ -0,0 +1,613 @@
1
+ /**
2
+ * Multilingual Importance Pattern Dictionaries
3
+ *
4
+ * Patterns for detecting importance signals across 15 languages:
5
+ * English, Spanish, French, German, Portuguese, Japanese, Chinese, Korean,
6
+ * Russian, Arabic, Hindi, Italian, Dutch, Turkish, Polish
7
+ *
8
+ * For Latin scripts: compiled to single \b-bounded regex per category
9
+ * For CJK/Arabic/Hindi: matched via string.includes() since \b doesn't work
10
+ */
11
+ // =============================================================================
12
+ // Pattern Categories
13
+ // =============================================================================
14
+ /**
15
+ * Explicit remember signals - user explicitly asks to remember something
16
+ * Weight: 0.9 (highest - direct user intent)
17
+ */
18
+ export const EXPLICIT_REMEMBER = {
19
+ signalType: 'explicit_remember',
20
+ weight: 0.9,
21
+ latin: [
22
+ // English
23
+ 'remember this', 'don\'t forget', 'keep in mind', 'note that', 'important to remember',
24
+ 'make sure to remember', 'never forget', 'always remember',
25
+ // Spanish
26
+ 'recuerda esto', 'no olvides', 'ten en cuenta', 'nota que', 'importante recordar',
27
+ // French
28
+ 'souviens-toi', 'n\'oublie pas', 'garde en tête', 'note que', 'retiens',
29
+ // German
30
+ 'merk dir', 'vergiss nicht', 'beachte', 'denk daran', 'wichtig zu merken',
31
+ // Portuguese
32
+ 'lembre-se', 'não esqueça', 'tenha em mente', 'note que', 'importante lembrar',
33
+ // Italian
34
+ 'ricorda questo', 'non dimenticare', 'tieni a mente', 'nota che',
35
+ // Dutch
36
+ 'onthoud dit', 'vergeet niet', 'houd in gedachten', 'let op',
37
+ // Turkish
38
+ 'bunu unutma', 'aklında tut', 'dikkat et', 'not et',
39
+ // Polish
40
+ 'zapamiętaj to', 'nie zapomnij', 'pamiętaj że', 'zwróć uwagę',
41
+ // Russian (transliterated)
42
+ 'zapomni eto', 'ne zabud',
43
+ ],
44
+ nonLatin: [
45
+ // Japanese
46
+ '覚えておいて', '忘れないで', '覚えて', 'メモして', '重要なこと',
47
+ // Chinese (Simplified)
48
+ '记住这个', '不要忘记', '请记住', '重要的是', '注意',
49
+ // Chinese (Traditional)
50
+ '記住這個', '不要忘記', '請記住',
51
+ // Korean
52
+ '기억해', '잊지마', '명심해', '메모해',
53
+ // Russian
54
+ 'запомни это', 'не забудь', 'имей в виду', 'обрати внимание',
55
+ // Arabic
56
+ 'تذكر هذا', 'لا تنسى', 'ضع في اعتبارك',
57
+ // Hindi
58
+ 'याद रखो', 'मत भूलो', 'ध्यान रखें',
59
+ ],
60
+ };
61
+ /**
62
+ * Emphasis cue signals - words indicating importance/emphasis
63
+ * Weight: 0.8
64
+ */
65
+ export const EMPHASIS_CUE = {
66
+ signalType: 'emphasis_cue',
67
+ weight: 0.8,
68
+ latin: [
69
+ // English
70
+ 'always', 'never', 'must', 'critical', 'essential', 'crucial', 'vital',
71
+ 'extremely important', 'absolutely', 'definitely', 'certainly',
72
+ // Spanish
73
+ 'siempre', 'nunca', 'debe', 'crítico', 'esencial', 'crucial', 'vital',
74
+ 'absolutamente', 'definitivamente',
75
+ // French
76
+ 'toujours', 'jamais', 'doit', 'critique', 'essentiel', 'crucial',
77
+ 'absolument', 'certainement',
78
+ // German
79
+ 'immer', 'niemals', 'muss', 'kritisch', 'wesentlich', 'entscheidend',
80
+ 'unbedingt', 'definitiv',
81
+ // Portuguese
82
+ 'sempre', 'nunca', 'deve', 'crítico', 'essencial', 'crucial',
83
+ 'absolutamente', 'definitivamente',
84
+ // Italian
85
+ 'sempre', 'mai', 'deve', 'critico', 'essenziale', 'cruciale',
86
+ 'assolutamente', 'certamente',
87
+ // Dutch
88
+ 'altijd', 'nooit', 'moet', 'kritiek', 'essentieel', 'cruciaal',
89
+ 'absoluut', 'zeker',
90
+ // Turkish
91
+ 'her zaman', 'asla', 'mutlaka', 'kritik', 'temel', 'kesinlikle',
92
+ // Polish
93
+ 'zawsze', 'nigdy', 'musi', 'krytyczny', 'niezbędny', 'kluczowy',
94
+ 'absolutnie', 'zdecydowanie',
95
+ ],
96
+ nonLatin: [
97
+ // Japanese
98
+ '必ず', '絶対に', '常に', '決して', '重要', '必須', '不可欠',
99
+ // Chinese
100
+ '必须', '一定要', '总是', '从不', '关键', '重要', '绝对',
101
+ '必須', '一定要', '總是', '從不', '關鍵', '重要', '絕對',
102
+ // Korean
103
+ '항상', '절대', '반드시', '필수', '중요한', '결정적인',
104
+ // Russian
105
+ 'всегда', 'никогда', 'должен', 'критично', 'важно', 'обязательно',
106
+ // Arabic
107
+ 'دائما', 'أبدا', 'يجب', 'حرج', 'أساسي', 'بالتأكيد',
108
+ // Hindi
109
+ 'हमेशा', 'कभी नहीं', 'ज़रूरी', 'महत्वपूर्ण', 'अनिवार्य',
110
+ ],
111
+ };
112
+ /**
113
+ * Correction signals - user correcting themselves or the AI
114
+ * Weight: 0.7
115
+ */
116
+ export const CORRECTION = {
117
+ signalType: 'correction',
118
+ weight: 0.7,
119
+ latin: [
120
+ // English
121
+ 'actually', 'wait', 'no,', 'correction', 'wrong', 'mistake', 'oops',
122
+ 'sorry, I meant', 'let me correct', 'that\'s not right', 'I was wrong',
123
+ 'my bad', 'scratch that', 'disregard',
124
+ // Spanish
125
+ 'en realidad', 'espera', 'no,', 'corrección', 'incorrecto', 'error',
126
+ 'perdón, quise decir', 'me equivoqué',
127
+ // French
128
+ 'en fait', 'attends', 'non,', 'correction', 'faux', 'erreur',
129
+ 'pardon, je voulais dire', 'je me suis trompé',
130
+ // German
131
+ 'eigentlich', 'warte', 'nein,', 'korrektur', 'falsch', 'fehler',
132
+ 'ich meinte', 'das war falsch',
133
+ // Portuguese
134
+ 'na verdade', 'espera', 'não,', 'correção', 'errado', 'erro',
135
+ 'desculpa, quis dizer', 'me enganei',
136
+ // Italian
137
+ 'in realtà', 'aspetta', 'no,', 'correzione', 'sbagliato', 'errore',
138
+ 'scusa, intendevo', 'mi sono sbagliato',
139
+ // Dutch
140
+ 'eigenlijk', 'wacht', 'nee,', 'correctie', 'fout', 'vergissing',
141
+ 'ik bedoelde',
142
+ // Turkish
143
+ 'aslında', 'bekle', 'hayır,', 'düzeltme', 'yanlış', 'hata',
144
+ // Polish
145
+ 'właściwie', 'czekaj', 'nie,', 'korekta', 'błąd', 'pomyłka',
146
+ 'miałem na myśli',
147
+ ],
148
+ nonLatin: [
149
+ // Japanese
150
+ '実は', 'ちょっと待って', '違う', '訂正', '間違い', 'ごめん',
151
+ // Chinese
152
+ '其实', '等一下', '不对', '更正', '错了', '抱歉',
153
+ '其實', '等一下', '不對', '更正', '錯了',
154
+ // Korean
155
+ '사실', '잠깐', '아니', '수정', '틀렸어', '죄송',
156
+ // Russian
157
+ 'на самом деле', 'подожди', 'нет,', 'исправление', 'ошибка', 'неправильно',
158
+ // Arabic
159
+ 'في الواقع', 'انتظر', 'لا،', 'تصحيح', 'خطأ',
160
+ // Hindi
161
+ 'असल में', 'रुको', 'नहीं,', 'सुधार', 'गलती', 'माफ करें',
162
+ ],
163
+ };
164
+ /**
165
+ * Preference signals - user expressing preferences
166
+ * Weight: 0.6
167
+ */
168
+ export const PREFERENCE = {
169
+ signalType: 'preference',
170
+ weight: 0.6,
171
+ latin: [
172
+ // English
173
+ 'prefer', 'like', 'want', 'don\'t like', 'hate', 'avoid',
174
+ 'I\'d rather', 'better if', 'instead of', 'rather than',
175
+ // Spanish
176
+ 'prefiero', 'me gusta', 'quiero', 'no me gusta', 'odio', 'evitar',
177
+ 'preferiría', 'mejor si',
178
+ // French
179
+ 'je préfère', 'j\'aime', 'je veux', 'je n\'aime pas', 'je déteste', 'éviter',
180
+ 'plutôt', 'mieux si',
181
+ // German
182
+ 'bevorzuge', 'mag', 'will', 'mag nicht', 'hasse', 'vermeiden',
183
+ 'lieber', 'besser wenn',
184
+ // Portuguese
185
+ 'prefiro', 'gosto', 'quero', 'não gosto', 'odeio', 'evitar',
186
+ 'preferiria', 'melhor se',
187
+ // Italian
188
+ 'preferisco', 'mi piace', 'voglio', 'non mi piace', 'odio', 'evitare',
189
+ 'piuttosto', 'meglio se',
190
+ // Dutch
191
+ 'ik geef de voorkeur', 'ik hou van', 'ik wil', 'ik haat', 'vermijden',
192
+ 'liever', 'beter als',
193
+ // Turkish
194
+ 'tercih ederim', 'seviyorum', 'istiyorum', 'sevmiyorum', 'nefret', 'kaçınmak',
195
+ // Polish
196
+ 'wolę', 'lubię', 'chcę', 'nie lubię', 'nienawidzę', 'unikać',
197
+ 'lepiej gdyby',
198
+ ],
199
+ nonLatin: [
200
+ // Japanese
201
+ '好き', '嫌い', '欲しい', '避けたい', 'の方がいい', '好み',
202
+ // Chinese
203
+ '喜欢', '不喜欢', '想要', '讨厌', '避免', '偏好', '宁愿',
204
+ '喜歡', '不喜歡', '想要', '討厭', '避免', '偏好', '寧願',
205
+ // Korean
206
+ '좋아해', '싫어해', '원해', '피하고 싶어', '선호해',
207
+ // Russian
208
+ 'предпочитаю', 'нравится', 'хочу', 'не нравится', 'ненавижу', 'избегать',
209
+ // Arabic
210
+ 'أفضل', 'أحب', 'أريد', 'لا أحب', 'أكره', 'تجنب',
211
+ // Hindi
212
+ 'पसंद', 'नापसंद', 'चाहिए', 'नफरत', 'बचना',
213
+ ],
214
+ };
215
+ /**
216
+ * Decision signals - decisions being made
217
+ * Weight: 0.7
218
+ */
219
+ export const DECISION = {
220
+ signalType: 'decision',
221
+ weight: 0.7,
222
+ latin: [
223
+ // English
224
+ 'decided', 'decision', 'chose', 'going with', 'let\'s use', 'we\'ll use',
225
+ 'we decided', 'the plan is', 'settled on', 'final choice',
226
+ // Spanish
227
+ 'decidí', 'decisión', 'elegí', 'vamos con', 'usaremos', 'el plan es',
228
+ // French
229
+ 'décidé', 'décision', 'choisi', 'on va utiliser', 'le plan est',
230
+ // German
231
+ 'entschieden', 'entscheidung', 'gewählt', 'wir nehmen', 'der plan ist',
232
+ // Portuguese
233
+ 'decidi', 'decisão', 'escolhi', 'vamos usar', 'o plano é',
234
+ // Italian
235
+ 'deciso', 'decisione', 'scelto', 'useremo', 'il piano è',
236
+ // Dutch
237
+ 'besloten', 'beslissing', 'gekozen', 'we gebruiken', 'het plan is',
238
+ // Turkish
239
+ 'karar verdim', 'karar', 'seçtim', 'kullanacağız', 'plan şu',
240
+ // Polish
241
+ 'zdecydowałem', 'decyzja', 'wybrałem', 'użyjemy', 'plan jest',
242
+ ],
243
+ nonLatin: [
244
+ // Japanese
245
+ '決めた', '決定', '選んだ', 'にする', '使うことにした', '計画は',
246
+ // Chinese
247
+ '决定了', '选择了', '我们用', '计划是', '最终选择',
248
+ '決定了', '選擇了', '我們用', '計劃是',
249
+ // Korean
250
+ '결정했어', '선택했어', '사용하기로', '계획은',
251
+ // Russian
252
+ 'решил', 'решение', 'выбрал', 'будем использовать', 'план',
253
+ // Arabic
254
+ 'قررت', 'قرار', 'اخترت', 'سنستخدم', 'الخطة',
255
+ // Hindi
256
+ 'तय किया', 'फैसला', 'चुना', 'इस्तेमाल करेंगे', 'योजना है',
257
+ ],
258
+ };
259
+ /**
260
+ * Constraint signals - rules and limitations
261
+ * Weight: 0.7
262
+ */
263
+ export const CONSTRAINT = {
264
+ signalType: 'constraint',
265
+ weight: 0.7,
266
+ latin: [
267
+ // English
268
+ 'can\'t', 'cannot', 'shouldn\'t', 'must not', 'forbidden', 'not allowed',
269
+ 'don\'t ever', 'never do', 'off limits', 'prohibited', 'restricted',
270
+ // Spanish
271
+ 'no puedo', 'no puede', 'no debería', 'prohibido', 'no permitido',
272
+ 'nunca hagas', 'restringido',
273
+ // French
274
+ 'ne peut pas', 'ne doit pas', 'interdit', 'pas autorisé', 'jamais faire',
275
+ // German
276
+ 'kann nicht', 'darf nicht', 'verboten', 'nicht erlaubt', 'niemals',
277
+ // Portuguese
278
+ 'não pode', 'não deve', 'proibido', 'não permitido', 'nunca faça',
279
+ // Italian
280
+ 'non può', 'non deve', 'vietato', 'non permesso', 'mai fare',
281
+ // Dutch
282
+ 'kan niet', 'mag niet', 'verboden', 'niet toegestaan', 'nooit doen',
283
+ // Turkish
284
+ 'yapamam', 'yapmamalı', 'yasak', 'izin verilmiyor', 'asla yapma',
285
+ // Polish
286
+ 'nie może', 'nie wolno', 'zabronione', 'niedozwolone', 'nigdy nie rób',
287
+ ],
288
+ nonLatin: [
289
+ // Japanese
290
+ 'できない', 'してはいけない', '禁止', '許可されていない', '絶対にしない',
291
+ // Chinese
292
+ '不能', '不可以', '禁止', '不允许', '绝不要',
293
+ '不能', '不可以', '禁止', '不允許', '絕不要',
294
+ // Korean
295
+ '할 수 없어', '하면 안 돼', '금지', '허용되지 않아',
296
+ // Russian
297
+ 'нельзя', 'не может', 'запрещено', 'не разрешено', 'никогда не делай',
298
+ // Arabic
299
+ 'لا يمكن', 'لا يجب', 'ممنوع', 'غير مسموح',
300
+ // Hindi
301
+ 'नहीं कर सकते', 'नहीं करना चाहिए', 'मना है', 'अनुमति नहीं',
302
+ ],
303
+ };
304
+ /**
305
+ * Bug/error signals - errors and issues
306
+ * Weight: 0.8
307
+ */
308
+ export const BUG_FIX = {
309
+ signalType: 'bug_fix',
310
+ weight: 0.8,
311
+ latin: [
312
+ // English
313
+ 'bug', 'error', 'exception', 'crash', 'fail', 'broken', 'issue',
314
+ 'fix', 'fixed', 'resolved', 'solved', 'patched', 'workaround',
315
+ 'TypeError', 'ReferenceError', 'SyntaxError', 'null', 'undefined',
316
+ 'stack trace', 'traceback', 'segfault', 'memory leak',
317
+ // Spanish
318
+ 'error', 'excepción', 'fallo', 'roto', 'problema', 'arreglado', 'solucionado',
319
+ // French
320
+ 'erreur', 'exception', 'plantage', 'cassé', 'problème', 'corrigé', 'résolu',
321
+ // German
322
+ 'fehler', 'ausnahme', 'absturz', 'kaputt', 'problem', 'behoben', 'gelöst',
323
+ // Portuguese
324
+ 'erro', 'exceção', 'falha', 'quebrado', 'problema', 'corrigido', 'resolvido',
325
+ // Italian
326
+ 'errore', 'eccezione', 'crash', 'rotto', 'problema', 'risolto', 'corretto',
327
+ // Dutch
328
+ 'fout', 'uitzondering', 'crash', 'kapot', 'probleem', 'opgelost', 'gerepareerd',
329
+ // Turkish
330
+ 'hata', 'istisna', 'çökme', 'bozuk', 'sorun', 'düzeltildi', 'çözüldü',
331
+ // Polish
332
+ 'błąd', 'wyjątek', 'awaria', 'zepsuty', 'problem', 'naprawiono', 'rozwiązano',
333
+ ],
334
+ nonLatin: [
335
+ // Japanese
336
+ 'バグ', 'エラー', '例外', 'クラッシュ', '失敗', '壊れた', '問題',
337
+ '修正', '解決', 'ワークアラウンド',
338
+ // Chinese
339
+ '错误', '异常', '崩溃', '失败', '问题', '修复', '解决',
340
+ '錯誤', '異常', '崩潰', '失敗', '問題', '修復', '解決',
341
+ // Korean
342
+ '버그', '오류', '예외', '크래시', '실패', '문제', '수정됨', '해결됨',
343
+ // Russian
344
+ 'ошибка', 'исключение', 'сбой', 'сломано', 'проблема', 'исправлено', 'решено',
345
+ // Arabic
346
+ 'خطأ', 'استثناء', 'تعطل', 'مشكلة', 'تم الإصلاح', 'تم الحل',
347
+ // Hindi
348
+ 'त्रुटि', 'अपवाद', 'क्रैश', 'समस्या', 'ठीक किया', 'हल किया',
349
+ ],
350
+ };
351
+ /**
352
+ * Learning signals - discoveries and insights
353
+ * Weight: 0.8
354
+ */
355
+ export const LEARNING = {
356
+ signalType: 'learning',
357
+ weight: 0.8,
358
+ latin: [
359
+ // English
360
+ 'learned', 'realized', 'discovered', 'found out', 'turns out',
361
+ 'TIL', 'insight', 'aha', 'gotcha', 'trick', 'tip',
362
+ 'the key is', 'the trick is', 'the solution is', 'the way to',
363
+ 'now I understand', 'I see now',
364
+ // Spanish
365
+ 'aprendí', 'descubrí', 'resulta que', 'el truco es', 'la clave es',
366
+ 'ahora entiendo',
367
+ // French
368
+ 'j\'ai appris', 'j\'ai découvert', 'il s\'avère', 'l\'astuce est', 'la clé est',
369
+ 'maintenant je comprends',
370
+ // German
371
+ 'gelernt', 'entdeckt', 'herausgefunden', 'der trick ist', 'der schlüssel ist',
372
+ 'jetzt verstehe ich',
373
+ // Portuguese
374
+ 'aprendi', 'descobri', 'percebi', 'o truque é', 'a chave é',
375
+ 'agora entendo',
376
+ // Italian
377
+ 'ho imparato', 'ho scoperto', 'il trucco è', 'la chiave è',
378
+ 'ora capisco',
379
+ // Dutch
380
+ 'geleerd', 'ontdekt', 'blijkt dat', 'de truc is', 'de sleutel is',
381
+ 'nu begrijp ik',
382
+ // Turkish
383
+ 'öğrendim', 'keşfettim', 'anladım ki', 'hile şu', 'anahtar şu',
384
+ // Polish
385
+ 'nauczyłem się', 'odkryłem', 'okazuje się', 'sztuczka to', 'klucz to',
386
+ 'teraz rozumiem',
387
+ ],
388
+ nonLatin: [
389
+ // Japanese
390
+ '学んだ', '分かった', '発見した', 'コツは', 'ポイントは', '理解した',
391
+ // Chinese
392
+ '学到了', '发现了', '原来', '诀窍是', '关键是', '明白了',
393
+ '學到了', '發現了', '原來', '訣竅是', '關鍵是', '明白了',
394
+ // Korean
395
+ '배웠어', '알게 됐어', '발견했어', '비결은', '핵심은', '이해했어',
396
+ // Russian
397
+ 'узнал', 'обнаружил', 'понял', 'фишка в том', 'ключ в том', 'теперь понимаю',
398
+ // Arabic
399
+ 'تعلمت', 'اكتشفت', 'اتضح', 'الحيلة هي', 'المفتاح هو', 'الآن أفهم',
400
+ // Hindi
401
+ 'सीखा', 'पता चला', 'समझ गया', 'तरीका है', 'कुंजी है',
402
+ ],
403
+ };
404
+ // =============================================================================
405
+ // All Pattern Categories
406
+ // =============================================================================
407
+ export const ALL_PATTERNS = [
408
+ EXPLICIT_REMEMBER,
409
+ EMPHASIS_CUE,
410
+ CORRECTION,
411
+ PREFERENCE,
412
+ DECISION,
413
+ CONSTRAINT,
414
+ BUG_FIX,
415
+ LEARNING,
416
+ ];
417
+ // =============================================================================
418
+ // Classification Patterns (for classifyContent)
419
+ // =============================================================================
420
+ /**
421
+ * Patterns for classifying content after importance is detected.
422
+ * More specific than importance patterns - used to determine MemoryClassification.
423
+ */
424
+ export const CLASSIFICATION_PATTERNS = {
425
+ bugfix: {
426
+ latin: [
427
+ 'bug', 'error', 'exception', 'crash', 'fail', 'broken', 'issue',
428
+ 'fix', 'fixed', 'resolved', 'solved', 'patched', 'workaround',
429
+ 'TypeError', 'ReferenceError', 'SyntaxError', 'null pointer',
430
+ 'stack trace', 'traceback', 'segfault',
431
+ ],
432
+ nonLatin: [
433
+ 'バグ', 'エラー', '修正', '解決',
434
+ '错误', '修复', '解决', '錯誤', '修復', '解決',
435
+ '버그', '오류', '수정',
436
+ 'ошибка', 'исправлено',
437
+ 'خطأ', 'إصلاح',
438
+ 'त्रुटि', 'ठीक',
439
+ ],
440
+ },
441
+ learning: {
442
+ latin: [
443
+ 'learned', 'realized', 'discovered', 'found out', 'turns out',
444
+ 'TIL', 'insight', 'the key is', 'the trick is', 'now I understand',
445
+ ],
446
+ nonLatin: [
447
+ '学んだ', '分かった', '発見',
448
+ '学到', '发现', '明白', '學到', '發現',
449
+ '배웠', '알게',
450
+ 'узнал', 'понял',
451
+ 'تعلمت', 'اكتشفت',
452
+ 'सीखा', 'समझ',
453
+ ],
454
+ },
455
+ constraint: {
456
+ latin: [
457
+ 'can\'t', 'cannot', 'shouldn\'t', 'must not', 'forbidden', 'not allowed',
458
+ 'never', 'must', 'prohibited', 'restricted', 'off limits',
459
+ ],
460
+ nonLatin: [
461
+ 'できない', 'してはいけない', '禁止',
462
+ '不能', '不可以', '禁止', '不允许',
463
+ '안 돼', '금지',
464
+ 'нельзя', 'запрещено',
465
+ 'ممنوع', 'لا يجب',
466
+ 'मना है', 'नहीं',
467
+ ],
468
+ },
469
+ decision: {
470
+ latin: [
471
+ 'decided', 'decision', 'chose', 'going with', 'let\'s use', 'we\'ll use',
472
+ 'settled on', 'final choice', 'the plan is',
473
+ ],
474
+ nonLatin: [
475
+ '決めた', '決定', '選んだ',
476
+ '决定', '选择', '決定', '選擇',
477
+ '결정', '선택',
478
+ 'решил', 'выбрал',
479
+ 'قررت', 'اخترت',
480
+ 'तय किया', 'चुना',
481
+ ],
482
+ },
483
+ preference: {
484
+ latin: [
485
+ 'prefer', 'like', 'want', 'don\'t like', 'hate', 'avoid',
486
+ 'I\'d rather', 'better if', 'always',
487
+ ],
488
+ nonLatin: [
489
+ '好き', '嫌い', '好み',
490
+ '喜欢', '不喜欢', '偏好', '喜歡', '不喜歡',
491
+ '좋아', '싫어', '선호',
492
+ 'предпочитаю', 'нравится',
493
+ 'أفضل', 'أحب',
494
+ 'पसंद', 'नापसंद',
495
+ ],
496
+ },
497
+ procedural: {
498
+ latin: [
499
+ 'step', 'workflow', 'process', 'procedure', 'how to', 'the way to',
500
+ 'first', 'then', 'finally', 'next',
501
+ ],
502
+ nonLatin: [
503
+ 'ステップ', '手順', '方法',
504
+ '步骤', '流程', '方法', '步驟', '流程',
505
+ '단계', '절차', '방법',
506
+ 'шаг', 'процесс', 'процедура',
507
+ 'خطوة', 'إجراء',
508
+ 'कदम', 'प्रक्रिया',
509
+ ],
510
+ },
511
+ };
512
+ // =============================================================================
513
+ // Pattern Matching Functions
514
+ // =============================================================================
515
+ /**
516
+ * Compile a pattern category's Latin keywords into a single regex.
517
+ * Caches the compiled regex on the category object.
518
+ */
519
+ function compileLatinRegex(category) {
520
+ if (category.compiledRegex) {
521
+ return category.compiledRegex;
522
+ }
523
+ // Escape special regex characters and join with |
524
+ const escaped = category.latin.map(keyword => keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
525
+ // Create case-insensitive regex with word boundaries
526
+ category.compiledRegex = new RegExp(`\\b(${escaped.join('|')})\\b`, 'i');
527
+ return category.compiledRegex;
528
+ }
529
+ /**
530
+ * Check if text matches any non-Latin keyword via includes()
531
+ */
532
+ function matchNonLatin(text, keywords) {
533
+ for (const keyword of keywords) {
534
+ if (text.includes(keyword)) {
535
+ return keyword;
536
+ }
537
+ }
538
+ return null;
539
+ }
540
+ /**
541
+ * Match text against a pattern category, returning an ImportanceSignal if matched.
542
+ */
543
+ export function matchPattern(text, category) {
544
+ // Try Latin regex first
545
+ if (category.latin.length > 0) {
546
+ const regex = compileLatinRegex(category);
547
+ const match = text.match(regex);
548
+ if (match) {
549
+ return {
550
+ type: category.signalType,
551
+ source: match[0],
552
+ weight: category.weight,
553
+ };
554
+ }
555
+ }
556
+ // Try non-Latin includes
557
+ if (category.nonLatin.length > 0) {
558
+ const match = matchNonLatin(text, category.nonLatin);
559
+ if (match) {
560
+ return {
561
+ type: category.signalType,
562
+ source: match,
563
+ weight: category.weight,
564
+ };
565
+ }
566
+ }
567
+ return null;
568
+ }
569
+ /**
570
+ * Match text against all pattern categories, returning all matched signals.
571
+ */
572
+ export function matchAllPatterns(text) {
573
+ const signals = [];
574
+ for (const category of ALL_PATTERNS) {
575
+ const signal = matchPattern(text, category);
576
+ if (signal) {
577
+ signals.push(signal);
578
+ }
579
+ }
580
+ return signals;
581
+ }
582
+ /**
583
+ * Classify content based on matched keywords.
584
+ * Returns the best-matching MemoryClassification.
585
+ */
586
+ export function classifyByPatterns(text) {
587
+ const lowerText = text.toLowerCase();
588
+ // Check each classification in priority order
589
+ const checks = [
590
+ { classification: 'bugfix', patterns: CLASSIFICATION_PATTERNS.bugfix },
591
+ { classification: 'learning', patterns: CLASSIFICATION_PATTERNS.learning },
592
+ { classification: 'constraint', patterns: CLASSIFICATION_PATTERNS.constraint },
593
+ { classification: 'decision', patterns: CLASSIFICATION_PATTERNS.decision },
594
+ { classification: 'preference', patterns: CLASSIFICATION_PATTERNS.preference },
595
+ { classification: 'procedural', patterns: CLASSIFICATION_PATTERNS.procedural },
596
+ ];
597
+ for (const { classification, patterns } of checks) {
598
+ // Check Latin patterns
599
+ for (const keyword of patterns.latin) {
600
+ if (lowerText.includes(keyword.toLowerCase())) {
601
+ return classification;
602
+ }
603
+ }
604
+ // Check non-Latin patterns
605
+ for (const keyword of patterns.nonLatin) {
606
+ if (text.includes(keyword)) {
607
+ return classification;
608
+ }
609
+ }
610
+ }
611
+ return null;
612
+ }
613
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/memory/patterns.ts"],"names":[],"mappings":"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"}