@tznthou/ccrecall 0.6.0 → 0.7.1

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.
@@ -11,14 +11,110 @@ const STOPWORDS = new Set([
11
11
  'node_modules', 'tmp', 'temp', 'mock', 'mocks', 'fixture', 'fixtures',
12
12
  'config', 'constants', 'const', 'let', 'var', 'function', 'return', 'error',
13
13
  'data', 'value', 'result',
14
+ // #84 — the English half of the list was ~21 words while the CJK half had 56,
15
+ // so English function words dominated the index: `when` was the single most
16
+ // frequent key in the whole table (244 memories). 133 distinct stopwords
17
+ // covered 2,224 of 24,047 topic rows (9.2%). Every topic-driven path matches
18
+ // on this table — Tier 0 startup selection, recall_context, and L1 recall —
19
+ // so a key this frequent creates spurious matches everywhere.
20
+ //
21
+ // Same discipline as the CJK pass: pure function words only. Terms that carry
22
+ // meaning in this domain stay out even when they read as generic — `code`,
23
+ // `session`, `memory`, `files`, `state`, `pattern`, `check`, `run` and `zero`
24
+ // are all high-frequency here and all deliberately absent.
25
+ //
26
+ // Verified before landing: adding these leaves **zero** memories without any
27
+ // topic (567 lose some but none go empty), so nothing drops out of
28
+ // knowledge_map or becomes unreachable by topic-driven selection.
29
+ 'about', 'above', 'across', 'after', 'again', 'against', 'also', 'always', 'among',
30
+ 'another', 'because', 'been', 'before', 'being', 'below', 'beside', 'best', 'better',
31
+ 'both', 'cannot', 'could', 'did', 'does', 'doing', 'done', 'down', 'during',
32
+ 'each', 'either', 'else', 'enough', 'even', 'ever', 'every', 'few', 'first',
33
+ 'further', 'get', 'gets', 'getting', 'give', 'given', 'goes', 'going', 'gone',
34
+ 'got', 'have', 'having', 'here', 'hers', 'him', 'his', 'how', 'however',
35
+ 'into', 'itself', 'just', 'keep', 'kept', 'last', 'least', 'less', 'let',
36
+ 'like', 'likely', 'made', 'make', 'makes', 'making', 'many', 'may', 'maybe',
37
+ 'mean', 'means', 'might', 'more', 'most', 'much', 'must', 'need', 'needs',
38
+ 'neither', 'never', 'next', 'non', 'nor', 'now', 'off', 'often', 'once',
39
+ 'one', 'only', 'onto', 'other', 'others', 'ought', 'ours', 'out', 'over',
40
+ 'own', 'per', 'perhaps', 'put', 'quite', 'rather', 'really', 'said', 'same',
41
+ 'say', 'says', 'see', 'seen', 'shall', 'she', 'should', 'since', 'some',
42
+ 'soon', 'still', 'such', 'take', 'taken', 'than', 'their', 'them', 'then',
43
+ 'there', 'these', 'they', 'thing', 'things', 'those', 'though', 'three', 'through',
44
+ 'thus', 'too', 'two', 'under', 'until', 'upon', 'use', 'used', 'uses',
45
+ 'using', 'very', 'via', 'want', 'way', 'well', 'were', 'what', 'when',
46
+ 'where', 'whether', 'which', 'while', 'who', 'whom', 'whose', 'why', 'within',
47
+ 'without', 'would', 'yet', 'your',
14
48
  ]);
15
49
  const CJK_STOPWORDS = new Set([
16
50
  '這個', '我們', '那個', '可以', '什麼', '然後', '因為', '所以',
17
51
  '但是', '已經', '沒有', '不是', '一個', '為什麼', '怎麼', '現在',
18
52
  '或者', '如果', '雖然', '還是', '他們', '自己', '這些', '那些',
19
53
  '而且', '只有', '之後', '以後', '以前', '應該', '需要', '可能',
54
+ // #80 — particles and function words now arrive as their own tokens from the
55
+ // segmenter instead of being deleted mid-word by a character substitution.
56
+ // Deliberately conservative: only pure function words. Terms that carry
57
+ // project meaning (一手/三路/修法…) stay out even when they look generic.
58
+ '是否', '新的', '出來', '掉了', '下個', '任何', '多個', '同一',
59
+ '不會', '不要', '不只', '詳見', '以及', '或是', '還有', '然而',
60
+ '因此', '於是', '目前', '剛才', '後來', '接著', '這樣', '那樣',
20
61
  ]);
21
62
  const HAN_RE = /\p{Script=Han}/u;
63
+ const HAN_ONLY_RE = /^\p{Script=Han}+$/u;
64
+ /** #80 — ICU word segmentation for Han runs. Latin is deliberately NOT routed
65
+ through the segmenter: it splits `better-sqlite3` into `better`/`sqlite3`,
66
+ which would invalidate the ~97% of the index that is Latin.
67
+
68
+ Constructed lazily behind hasIcuData() because calling segment() on a
69
+ small-icu build without runtime ICU data is a SIGSEGV, not an exception —
70
+ see nodejs/node#51752 (still open). A try/catch cannot save us there, and
71
+ this module is imported by the daemon and the MCP server, so the crash
72
+ would take down the whole process at import time. Fedora's `nodejs`
73
+ package without `nodejs-full-i18n` is exactly this build. */
74
+ function hasIcuData() {
75
+ // icu_small === true means the build ships only the English locale stub.
76
+ // Bail out even when NODE_ICU_DATA might supply real data: degrading to the
77
+ // legacy splitter is safe, probing to find out is not.
78
+ const vars = process.config?.variables;
79
+ if (vars?.icu_small === true)
80
+ return false;
81
+ return typeof Intl !== 'undefined' && typeof Intl.Segmenter === 'function';
82
+ }
83
+ const hanSegmenter = hasIcuData()
84
+ ? new Intl.Segmenter('zh-TW', { granularity: 'word' })
85
+ : null;
86
+ /** Confirms the runtime does dictionary-based CJK segmentation rather than
87
+ falling back to per-character breaks. Only ever runs once hasIcuData() has
88
+ ruled out the build that would crash. */
89
+ function probeSegmenter() {
90
+ if (!hanSegmenter)
91
+ return false;
92
+ try {
93
+ const out = [...hanSegmenter.segment('確認更新')]
94
+ .filter(s => s.isWordLike)
95
+ .map(s => s.segment);
96
+ return out.length === 2 && out[0] === '確認' && out[1] === '更新';
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ const SEGMENTER_OK = probeSegmenter();
103
+ /** Exposed so CI can assert the runtime actually segments rather than silently
104
+ falling back. Without this a small-icu build would degrade quietly and the
105
+ CJK assertions would fail for a reason no one could read off the output. */
106
+ export function isSegmenterAvailable() {
107
+ return SEGMENTER_OK;
108
+ }
109
+ /** Splits one all-Han run into words. Returns the run unchanged when the
110
+ runtime cannot segment, preserving the legacy MAX_HAN_RUN discard upstream. */
111
+ function segmentHanRun(run) {
112
+ if (!SEGMENTER_OK || !hanSegmenter)
113
+ return [run];
114
+ return [...hanSegmenter.segment(run)]
115
+ .filter(s => s.isWordLike)
116
+ .map(s => s.segment);
117
+ }
22
118
  /** 將原始字串正規化為 topic_key:以 / \ . 拆 segment 後各自 normalize、過濾 stopword/太短,再組合 */
23
119
  export function normalizeTopicKey(raw) {
24
120
  if (!raw)
@@ -48,15 +144,27 @@ export function extractTopicsFromContent(content) {
48
144
  if (!content)
49
145
  return [];
50
146
  const topics = new Set();
147
+ // #80 — the particle substitution `.replace(/[的了是在]/g, ' ')` used to live
148
+ // here. It deleted characters mid-word (是 out of 是否 → the `否開始作用`
149
+ // fragment in #79) and is now handled by segmentation + CJK_STOPWORDS.
51
150
  const processed = content
52
151
  .replace(/[,。、;:「」()【】!?…·—]+/g, ' ')
53
- .replace(/[的了是在]/g, ' ')
54
152
  .replace(/([\p{Script=Han}])([^\p{Script=Han}\s])/gu, '$1 $2')
55
153
  .replace(/([^\p{Script=Han}\s])([\p{Script=Han}])/gu, '$1 $2');
56
154
  const words = processed.split(/[\s,;:()[\]{}"'`|/\\]+/).filter(Boolean);
57
155
  for (const w of words) {
58
- if (/^\p{Script=Han}+$/u.test(w) && w.length > MAX_HAN_RUN)
156
+ if (HAN_ONLY_RE.test(w)) {
157
+ // Han runs go through ICU. Without a working segmenter this yields the
158
+ // run itself, so the legacy length guard still applies.
159
+ for (const piece of segmentHanRun(w)) {
160
+ if (!SEGMENTER_OK && piece.length > MAX_HAN_RUN)
161
+ continue;
162
+ const k = normalizeTopicKey(piece);
163
+ if (k)
164
+ topics.add(k);
165
+ }
59
166
  continue;
167
+ }
60
168
  const k = normalizeTopicKey(w);
61
169
  if (k)
62
170
  topics.add(k);
@@ -1 +1 @@
1
- {"version":3,"file":"topic-extractor.js","sourceRoot":"","sources":["../../src/core/topic-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topic-extractor.js","sourceRoot":"","sources":["../../src/core/topic-extractor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAiB1E,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,IAAI,CAAA;CACf,CAAA;AA6CD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAA2B,GACrC,eAAe,CAMjB;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,EACZ,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E,aAAa,CAsBf;AAgBD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,cAAc,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EAAE,EACxB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,EACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,GAAE,MAA2B,GACrC,eAAe,CAmDjB;AAWD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,EACZ,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACxF,aAAa,CA2Df;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GACA,aAAa,CAqCf;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAuHnE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAiB1E,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,IAAI,CAAA;CACf,CAAA;AAmDD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAA2B,GACrC,eAAe,CAMjB;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,EACZ,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E,aAAa,CAsBf;AAgBD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,cAAc,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EAAE,EACxB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,EACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,GAAE,MAA2B,GACrC,eAAe,CAmDjB;AAiBD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,EACZ,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACxF,aAAa,CA2Df;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GACA,aAAa,CAqCf;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CA4InE"}
package/dist/mcp/tools.js CHANGED
@@ -18,7 +18,11 @@ function textError(prefix, err) {
18
18
  }
19
19
  const recallQueryInput = {
20
20
  query: z.string().min(1).describe('FTS5 search query (keywords or phrase)'),
21
- projectId: z.string().min(1).describe('Project ID (derived from cwd, e.g. "-Users-foo-my-project")'),
21
+ projectId: z.string().min(1).describe('Project ID: the cwd with EVERY character outside [A-Za-z0-9] replaced by "-", ' +
22
+ 'one dash per character. Spaces, dots, underscores and CJK all become dashes, ' +
23
+ 'not just slashes: "/Users/foo/my project" -> "-Users-foo-my-project". ' +
24
+ 'This is how Claude Code names the folders under ~/.claude/projects/; ' +
25
+ 'an id derived any other way silently matches nothing.'),
22
26
  limit: z.number().int().positive().max(50).optional().describe('Max results (default 10, max 50)'),
23
27
  maxTokens: z.number().int().positive().max(2000).optional().describe(`Approximate total output token budget (default ${DEFAULT_MAX_TOKENS}). Results are truncated with per-row ellipsis and a trailer so clipping is always visible.`),
24
28
  };
@@ -139,7 +143,11 @@ export function formatContextResult(clusters, unmatchedKeywords, fallbackMemorie
139
143
  return { text: parts.join('\n').trimEnd(), emittedIds };
140
144
  }
141
145
  const recallContextInput = {
142
- projectId: z.string().min(1).describe('Project ID (derived from cwd, e.g. "-Users-foo-my-project")'),
146
+ projectId: z.string().min(1).describe('Project ID: the cwd with EVERY character outside [A-Za-z0-9] replaced by "-", ' +
147
+ 'one dash per character. Spaces, dots, underscores and CJK all become dashes, ' +
148
+ 'not just slashes: "/Users/foo/my project" -> "-Users-foo-my-project". ' +
149
+ 'This is how Claude Code names the folders under ~/.claude/projects/; ' +
150
+ 'an id derived any other way silently matches nothing.'),
143
151
  keywords: z.array(z.string().min(1)).min(1).describe('Candidate topic keywords (e.g. ["typescript", "mcp"])'),
144
152
  memoryLimit: z.number().int().positive().max(20).optional().describe('Max memories per topic (default 5)'),
145
153
  maxTokens: z.number().int().positive().max(2000).optional().describe(`Approximate total output token budget (default ${DEFAULT_MAX_TOKENS}). Results are truncated with per-row ellipsis and a trailer so clipping is always visible.`),
@@ -243,11 +251,17 @@ export function registerTools(server, db) {
243
251
  description: [
244
252
  'Search ccRecall memories by keyword (FTS5 full-text search).',
245
253
  '',
246
- 'ccRecall is a user-scoped memory store with project-aware ranking.',
247
- 'It complements the curated MEMORY.md index that loads at session',
248
- 'start: MEMORY.md carries a small hand-picked set; ccRecall carries',
249
- 'the rest — decisions, discoveries, patterns, and corrections across',
250
- 'sessions and projects.',
254
+ 'ccRecall is a user-scoped memory store. It complements the curated',
255
+ 'MEMORY.md index that loads at session start: MEMORY.md carries a',
256
+ 'small hand-picked set; ccRecall carries the rest — decisions,',
257
+ 'discoveries, patterns, and corrections from past sessions.',
258
+ '',
259
+ 'SCOPE — read this before interpreting an empty result:',
260
+ 'Results are restricted to the CURRENT project. This is a hard filter,',
261
+ 'not a ranking preference: memories from your other projects are not in',
262
+ 'the result set at all. "No memories found" therefore means "nothing in',
263
+ 'this project", NOT "this knowledge does not exist". A principle learned',
264
+ 'in another project will never appear here, however relevant it is.',
251
265
  '',
252
266
  'USE THIS WHEN:',
253
267
  '- The user references past work ("what did we decide", "last time",',
@@ -258,8 +272,23 @@ export function registerTools(server, db) {
258
272
  '- You want a specific keyword match (use recall_context for theme',
259
273
  ' exploration with depth signals)',
260
274
  '',
261
- 'If results are insufficient, try different keywords or more specific',
262
- 'terms — FTS works best with concrete nouns and technical terms.',
275
+ 'ALSO USE THIS WHEN NOBODY ASKED — the cases above all require someone',
276
+ 'to bring up the past, which is exactly when a forgotten constraint',
277
+ 'does NOT get mentioned:',
278
+ '- Before committing to an architectural pattern, a new dependency, or',
279
+ ' a security boundary — check whether a past decision constrains it',
280
+ '- Before concluding "X does not work" or "we should do Y instead"',
281
+ '',
282
+ 'HOW TO PHRASE THE QUERY:',
283
+ '- Give MORE terms rather than fewer. The index is trigram-based and',
284
+ ' ranked by BM25, which discriminates by how many query terms a',
285
+ ' document matches — a broad OR query ranks better than a narrow one.',
286
+ ' Do not use AND; it collapses the result set.',
287
+ '- Use English technical terms. Memory content is predominantly',
288
+ ' English and the tokenizer is trigram, so CJK queries return nothing.',
289
+ ' Translate the concept before searching.',
290
+ '- Search the GENERAL name of a pattern, not this project\'s own names.',
291
+ ' Project nouns pull local results to the top and bury the rest.',
263
292
  '',
264
293
  'Returns: formatted list of matching memories with type and confidence.',
265
294
  ].join('\n'),
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+
3
+ /**
4
+ * Encode a working directory the way Claude Code names its project folders
5
+ * under `~/.claude/projects/`: every character outside `[A-Za-z0-9]` becomes
6
+ * a single `-`.
7
+ *
8
+ * Deliberate duplicate of `src/core/project-id.ts`. The hooks ship as
9
+ * standalone .mjs installed straight from the npm package — they are never
10
+ * bundled through `dist/`, so they cannot import the TypeScript module.
11
+ * `tests/project-id-encoding.test.ts` asserts both copies against the same
12
+ * fixtures, which is what keeps them from drifting apart.
13
+ *
14
+ * See #89 for what the previous slash-only rule cost.
15
+ *
16
+ * @param {string} cwd
17
+ * @returns {string}
18
+ */
19
+ export function resolveProjectId(cwd) {
20
+ if (!cwd || typeof cwd !== 'string') return ''
21
+ return cwd.replace(/[^A-Za-z0-9]/g, '-')
22
+ }
@@ -12,6 +12,7 @@ import http from 'node:http'
12
12
  import fs from 'node:fs'
13
13
  import path from 'node:path'
14
14
  import os from 'node:os'
15
+ import { resolveProjectId } from './lib/project-id.mjs'
15
16
 
16
17
  const PORT = Number(process.env.CCRECALL_PORT ?? 7749)
17
18
  const HOST = '127.0.0.1'
@@ -114,10 +115,11 @@ function projectNameFromCwd(cwd) {
114
115
  }
115
116
 
116
117
  // Matches Claude Code's project-directory encoding under ~/.claude/projects/
117
- function projectIdFromCwd(cwd) {
118
- if (!cwd || typeof cwd !== 'string') return ''
119
- return cwd.replace(/\//g, '-')
120
- }
118
+ // — see hooks/lib/project-id.mjs. Until #89 this claimed to match but only
119
+ // replaced '/', so any cwd with a space, dot, underscore or CJK addressed a
120
+ // project that does not exist. Every hook firing under such a cwd failed
121
+ // silently: no error, no counter, just an empty recall.
122
+ const projectIdFromCwd = resolveProjectId
121
123
 
122
124
  function formatMemories(memories, query) {
123
125
  if (memories.length === 0) return ''
@@ -22,6 +22,7 @@
22
22
  // both for this event, and the JSON form errors on the first message of a new
23
23
  // session (anthropics/claude-code#17550).
24
24
  import http from 'node:http'
25
+ import { resolveProjectId } from './lib/project-id.mjs'
25
26
 
26
27
  const PORT = Number(process.env.CCRECALL_PORT ?? 7749)
27
28
  const HOST = '127.0.0.1'
@@ -96,10 +97,11 @@ function httpGet(pathWithQuery) {
96
97
  }
97
98
 
98
99
  // Matches Claude Code's project-directory encoding under ~/.claude/projects/
99
- function projectIdFromCwd(cwd) {
100
- if (!cwd || typeof cwd !== 'string') return ''
101
- return cwd.replace(/\//g, '-')
102
- }
100
+ // — see hooks/lib/project-id.mjs. Until #89 this claimed to match but only
101
+ // replaced '/', so any cwd with a space, dot, underscore or CJK addressed a
102
+ // project that does not exist. Every hook firing under such a cwd failed
103
+ // silently: no error, no counter, just an empty recall.
104
+ const projectIdFromCwd = resolveProjectId
103
105
 
104
106
  function formatRecall(memories) {
105
107
  if (!Array.isArray(memories) || memories.length === 0) return ''
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tznthou/ccrecall",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "AI memory service for Claude Code — on-demand context injection with metacognition",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,29 +1,86 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  //
3
- // One-off script: backfill memory_topics for existing memories + clean orphans.
4
- // Phase 3.0 prerequisite — Tier 0 cross-project queries need memory_topics.
3
+ // Maintenance script for memory_topics.
4
+ //
5
+ // Two modes:
6
+ // backfill (default) — topics for memories that have none. Phase 3.0
7
+ // prerequisite: Tier 0 cross-project queries need memory_topics.
8
+ // --rebuild — recompute topics for EVERY memory. Required whenever
9
+ // extractTopicsFromContent changes (e.g. #80's Intl.Segmenter switch),
10
+ // because backfill skips any memory that already has rows and therefore
11
+ // leaves stale topics in place.
5
12
  //
6
13
  // Usage:
7
14
  // pnpm tsx scripts/backfill-memory-topics.ts
15
+ // pnpm tsx scripts/backfill-memory-topics.ts --rebuild --dry-run
16
+ // pnpm tsx scripts/backfill-memory-topics.ts --rebuild
8
17
  // pnpm tsx scripts/backfill-memory-topics.ts --db <path>
18
+ //
19
+ // After a --rebuild, run rebuildKnowledgeMap for each affected project so the
20
+ // knowledge_map aggregate reflects the new topic keys.
9
21
 
10
22
  import path from 'node:path'
11
23
  import os from 'node:os'
12
24
  import { Database } from '../src/core/database.js'
13
25
  import { extractTopicsFromContent } from '../src/core/topic-extractor.js'
14
26
 
15
- const dbPath = process.argv.includes('--db')
16
- ? process.argv[process.argv.indexOf('--db') + 1]
27
+ const argv = process.argv
28
+ const dbPath = argv.includes('--db')
29
+ ? argv[argv.indexOf('--db') + 1]
17
30
  : path.join(os.homedir(), '.ccrecall', 'ccrecall.db')
31
+ const rebuild = argv.includes('--rebuild')
32
+ const dryRun = argv.includes('--dry-run')
33
+
34
+ // backfillMemoryTopics has no dry-run path, so the flag cannot be honoured in
35
+ // default mode. Refuse rather than write while the user believes nothing is
36
+ // being written.
37
+ if (dryRun && !rebuild) {
38
+ console.error('--dry-run is only supported with --rebuild.')
39
+ console.error('Backfill mode has no preview path; re-run with --rebuild --dry-run,')
40
+ console.error('or drop --dry-run to backfill topic-less memories for real.')
41
+ process.exit(1)
42
+ }
18
43
 
19
44
  console.log(`DB: ${dbPath}`)
45
+ console.log(`Mode: ${rebuild ? 'rebuild (all memories)' : 'backfill (topic-less only)'}${dryRun ? ' [dry run]' : ''}`)
20
46
 
21
47
  const db = new Database(dbPath)
22
48
 
23
- const orphansRemoved = db.cleanOrphanedMemoryTopics()
24
- console.log(`Orphaned memory_topics removed: ${orphansRemoved}`)
49
+ const orphansRemoved = dryRun ? 0 : db.cleanOrphanedMemoryTopics()
50
+ if (!dryRun) console.log(`Orphaned memory_topics removed: ${orphansRemoved}`)
51
+
52
+ if (rebuild) {
53
+ const cjkBefore = db.rawAll<{ c: number }>(
54
+ "SELECT COUNT(*) AS c FROM memory_topics WHERE topic_key GLOB '*[一-龥]*'",
55
+ )[0].c
56
+
57
+ const r = db.rebuildMemoryTopics(extractTopicsFromContent, { dryRun })
58
+
59
+ console.log(`Memories scanned : ${r.scanned}`)
60
+ console.log(`Memories with changed topics: ${r.changed}`)
61
+ console.log(`memory_topics rows before : ${r.topicsBefore}`)
62
+ console.log(`memory_topics rows after : ${r.topicsAfter}`)
63
+ console.log(` ...of which CJK before : ${cjkBefore}`)
25
64
 
26
- const backfilled = db.backfillMemoryTopics(extractTopicsFromContent)
27
- console.log(`Memories backfilled with topics: ${backfilled}`)
65
+ if (!dryRun) {
66
+ const cjkAfter = db.rawAll<{ c: number }>(
67
+ "SELECT COUNT(*) AS c FROM memory_topics WHERE topic_key GLOB '*[一-龥]*'",
68
+ )[0].c
69
+ console.log(` ...of which CJK after : ${cjkAfter}`)
70
+ console.log('')
71
+ console.log('Next: rebuild knowledge_map for affected projects.')
72
+ } else {
73
+ console.log('')
74
+ console.log('Dry run — nothing written.')
75
+ }
76
+ } else {
77
+ const backfilled = db.backfillMemoryTopics(extractTopicsFromContent)
78
+ console.log(`Memories backfilled with topics: ${backfilled}`)
79
+ if (backfilled === 0) {
80
+ console.log('')
81
+ console.log('0 processed. If the extractor changed, this mode cannot help —')
82
+ console.log('it only sees memories with no topics at all. Use --rebuild.')
83
+ }
84
+ }
28
85
 
29
86
  db.close()