somtum 3.1.0 → 3.2.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 (95) hide show
  1. package/README.md +31 -3
  2. package/dist/cli/backfill.d.ts +23 -0
  3. package/dist/cli/backfill.d.ts.map +1 -0
  4. package/dist/cli/backfill.js +134 -0
  5. package/dist/cli/backfill.js.map +1 -0
  6. package/dist/cli/doctor.d.ts.map +1 -1
  7. package/dist/cli/doctor.js +16 -11
  8. package/dist/cli/doctor.js.map +1 -1
  9. package/dist/cli/first_session_check.js +4 -4
  10. package/dist/cli/first_session_check.js.map +1 -1
  11. package/dist/cli/forget.d.ts +10 -0
  12. package/dist/cli/forget.d.ts.map +1 -1
  13. package/dist/cli/forget.js +30 -0
  14. package/dist/cli/forget.js.map +1 -1
  15. package/dist/cli/import.d.ts.map +1 -1
  16. package/dist/cli/import.js +21 -4
  17. package/dist/cli/import.js.map +1 -1
  18. package/dist/cli/index.js +24 -3
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/list.d.ts.map +1 -1
  21. package/dist/cli/list.js +4 -2
  22. package/dist/cli/list.js.map +1 -1
  23. package/dist/cli/search.d.ts.map +1 -1
  24. package/dist/cli/search.js +3 -0
  25. package/dist/cli/search.js.map +1 -1
  26. package/dist/cli/stats.d.ts.map +1 -1
  27. package/dist/cli/stats.js +4 -3
  28. package/dist/cli/stats.js.map +1 -1
  29. package/dist/config.d.ts +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +6 -1
  32. package/dist/config.js.map +1 -1
  33. package/dist/core/dedup.d.ts +5 -9
  34. package/dist/core/dedup.d.ts.map +1 -1
  35. package/dist/core/dedup.js +19 -8
  36. package/dist/core/dedup.js.map +1 -1
  37. package/dist/core/embeddings_xenova.d.ts +3 -0
  38. package/dist/core/embeddings_xenova.d.ts.map +1 -1
  39. package/dist/core/embeddings_xenova.js +18 -2
  40. package/dist/core/embeddings_xenova.js.map +1 -1
  41. package/dist/core/extractor.d.ts +1 -0
  42. package/dist/core/extractor.d.ts.map +1 -1
  43. package/dist/core/extractor.js +11 -1
  44. package/dist/core/extractor.js.map +1 -1
  45. package/dist/core/git_context.d.ts +20 -0
  46. package/dist/core/git_context.d.ts.map +1 -0
  47. package/dist/core/git_context.js +108 -0
  48. package/dist/core/git_context.js.map +1 -0
  49. package/dist/core/recall_filter.d.ts +9 -0
  50. package/dist/core/recall_filter.d.ts.map +1 -0
  51. package/dist/core/recall_filter.js +30 -0
  52. package/dist/core/recall_filter.js.map +1 -0
  53. package/dist/core/retriever/bm25.d.ts +2 -0
  54. package/dist/core/retriever/bm25.d.ts.map +1 -1
  55. package/dist/core/retriever/bm25.js +32 -7
  56. package/dist/core/retriever/bm25.js.map +1 -1
  57. package/dist/core/retriever/factory.d.ts.map +1 -1
  58. package/dist/core/retriever/factory.js +10 -6
  59. package/dist/core/retriever/factory.js.map +1 -1
  60. package/dist/core/schema.d.ts +129 -456
  61. package/dist/core/schema.d.ts.map +1 -1
  62. package/dist/core/schema.js +20 -11
  63. package/dist/core/schema.js.map +1 -1
  64. package/dist/core/session_discovery.d.ts +12 -0
  65. package/dist/core/session_discovery.d.ts.map +1 -0
  66. package/dist/core/session_discovery.js +111 -0
  67. package/dist/core/session_discovery.js.map +1 -0
  68. package/dist/core/store.d.ts.map +1 -1
  69. package/dist/core/store.js +6 -3
  70. package/dist/core/store.js.map +1 -1
  71. package/dist/db/migrations/007_git_branch.sql +15 -0
  72. package/dist/hooks/post_session.d.ts +19 -30
  73. package/dist/hooks/post_session.d.ts.map +1 -1
  74. package/dist/hooks/post_session.js +51 -24
  75. package/dist/hooks/post_session.js.map +1 -1
  76. package/dist/hooks/pre_prompt.d.ts +2 -30
  77. package/dist/hooks/pre_prompt.d.ts.map +1 -1
  78. package/dist/hooks/pre_prompt.js +40 -13
  79. package/dist/hooks/pre_prompt.js.map +1 -1
  80. package/dist/hooks/pre_read.d.ts +2 -36
  81. package/dist/hooks/pre_read.d.ts.map +1 -1
  82. package/dist/hooks/pre_read.js +1 -1
  83. package/dist/hooks/pre_read.js.map +1 -1
  84. package/dist/mcp/server.d.ts.map +1 -1
  85. package/dist/mcp/server.js +3 -2
  86. package/dist/mcp/server.js.map +1 -1
  87. package/dist/mcp/tools.d.ts +34 -67
  88. package/dist/mcp/tools.d.ts.map +1 -1
  89. package/dist/mcp/tools.js +14 -2
  90. package/dist/mcp/tools.js.map +1 -1
  91. package/dist/version.d.ts +2 -0
  92. package/dist/version.d.ts.map +1 -0
  93. package/dist/version.js +6 -0
  94. package/dist/version.js.map +1 -0
  95. package/package.json +13 -5
@@ -0,0 +1,108 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ function git(cwd, args) {
3
+ try {
4
+ return execFileSync('git', ['-C', cwd, ...args], {
5
+ encoding: 'utf8',
6
+ stdio: ['ignore', 'pipe', 'ignore'],
7
+ timeout: 2000,
8
+ }).trimEnd();
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ }
14
+ function lines(out) {
15
+ return (out ?? '')
16
+ .split('\n')
17
+ .map((l) => l.trim())
18
+ .filter((l) => l.length > 0);
19
+ }
20
+ function findDefaultBranch(cwd, localBranches) {
21
+ const remoteHead = git(cwd, ['symbolic-ref', '--quiet', '--short', 'refs/remotes/origin/HEAD']);
22
+ if (remoteHead)
23
+ return remoteHead.replace(/^origin\//, '');
24
+ for (const name of ['main', 'master', 'trunk']) {
25
+ if (localBranches.has(name))
26
+ return name;
27
+ }
28
+ return null;
29
+ }
30
+ export function captureGit(cwd) {
31
+ const branch = git(cwd, ['symbolic-ref', '--quiet', '--short', 'HEAD']);
32
+ if (branch === null && git(cwd, ['rev-parse', '--is-inside-work-tree']) !== 'true') {
33
+ return { branch: null, commit: null, defaultBranch: null, beforeFirstCommit: false };
34
+ }
35
+ const commit = git(cwd, ['rev-parse', '--verify', '--quiet', 'HEAD']);
36
+ const local = new Set(lines(git(cwd, ['for-each-ref', '--format=%(refname:short)', 'refs/heads'])));
37
+ const defaultBranch = findDefaultBranch(cwd, local);
38
+ const ownCommits = branch && defaultBranch && branch !== defaultBranch && commit
39
+ ? git(cwd, ['rev-list', '--count', `${defaultBranch}..HEAD`])
40
+ : null;
41
+ return { branch, commit, defaultBranch, beforeFirstCommit: ownCommits === '0' };
42
+ }
43
+ // Decides which memories belong in the current branch's context.
44
+ //
45
+ // A memory captured on branch B is recalled on the current branch when B is
46
+ // the current branch, B is the default branch, B has been merged into HEAD,
47
+ // or B no longer exists (deleted locally, or its upstream is gone: the usual
48
+ // state after a merged pull request, including squash merges). Only memories
49
+ // from a branch that still exists and hasn't been merged are hidden, and
50
+ // memories captured before B had a commit of its own stay hidden until B is
51
+ // deleted, since git reports such a branch as merged from the start.
52
+ export class BranchView {
53
+ current;
54
+ defaultBranch;
55
+ alive;
56
+ merged;
57
+ constructor(current, defaultBranch, alive, merged) {
58
+ this.current = current;
59
+ this.defaultBranch = defaultBranch;
60
+ this.alive = alive;
61
+ this.merged = merged;
62
+ }
63
+ // Two git calls: this runs on every prompt that has branch-tagged memories.
64
+ static load(cwd) {
65
+ const refs = git(cwd, [
66
+ 'for-each-ref',
67
+ '--format=%(HEAD)\t%(refname)\t%(upstream:track)\t%(symref)',
68
+ 'refs/heads',
69
+ 'refs/remotes/origin/HEAD',
70
+ ]);
71
+ if (refs === null)
72
+ return null;
73
+ let current = null;
74
+ let remoteDefault = null;
75
+ const local = new Set();
76
+ const alive = new Set();
77
+ // Not trimmed: %(HEAD) is a space for every branch but the current one.
78
+ for (const line of refs.split('\n').filter((l) => l.length > 0)) {
79
+ const [head = '', ref = '', track = '', symref = ''] = line.split('\t');
80
+ if (ref === 'refs/remotes/origin/HEAD') {
81
+ remoteDefault = symref.replace(/^refs\/remotes\/origin\//, '') || null;
82
+ continue;
83
+ }
84
+ const name = ref.replace(/^refs\/heads\//, '');
85
+ local.add(name);
86
+ if (head === '*')
87
+ current = name;
88
+ if (!track.includes('gone'))
89
+ alive.add(name);
90
+ }
91
+ const merged = new Set(lines(git(cwd, ['for-each-ref', '--merged', 'HEAD', '--format=%(refname:short)', 'refs/heads'])));
92
+ const fallbackDefault = ['main', 'master', 'trunk'].find((n) => local.has(n)) ?? null;
93
+ return new BranchView(current, remoteDefault ?? fallbackDefault, alive, merged);
94
+ }
95
+ isVisible(memory) {
96
+ const b = memory.git_branch;
97
+ if (!b)
98
+ return true;
99
+ if (b === this.current || b === this.defaultBranch)
100
+ return true;
101
+ if (!this.alive.has(b))
102
+ return true;
103
+ if (memory.git_before_first_commit)
104
+ return false;
105
+ return this.merged.has(b);
106
+ }
107
+ }
108
+ //# sourceMappingURL=git_context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git_context.js","sourceRoot":"","sources":["../../src/core/git_context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BranchView } from './git_context.js';
2
+ import type { Observation } from './schema.js';
3
+ type WithObservation = {
4
+ observation: Observation;
5
+ };
6
+ export declare function scopeToBranch<T extends WithObservation>(results: T[], cwd: string, view?: BranchView | null): T[];
7
+ export declare function newestOfDuplicates<T extends WithObservation>(results: T[]): T[];
8
+ export {};
9
+ //# sourceMappingURL=recall_filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall_filter.d.ts","sourceRoot":"","sources":["../../src/core/recall_filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,eAAe,GAAG;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC;AAKpD,wBAAgB,aAAa,CAAC,CAAC,SAAS,eAAe,EACrD,OAAO,EAAE,CAAC,EAAE,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,CAAC,EAAE,CAKL;AAID,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAc/E"}
@@ -0,0 +1,30 @@
1
+ import { BranchView } from './git_context.js';
2
+ import { titleSimilarity, TITLE_SIM_THRESHOLD } from './dedup.js';
3
+ // Drops memories captured on another branch that still exists and hasn't been
4
+ // merged into the current one. Git is only consulted when a candidate was
5
+ // captured on a branch, so stores from before 3.2 pay nothing.
6
+ export function scopeToBranch(results, cwd, view) {
7
+ if (!results.some((r) => r.observation.git_branch))
8
+ return results;
9
+ const v = view === undefined ? BranchView.load(cwd) : view;
10
+ if (!v)
11
+ return results;
12
+ return results.filter((r) => v.isVisible(r.observation));
13
+ }
14
+ // When two visible memories are near-duplicates of the same kind (typically the
15
+ // same decision made on two branches that have since merged), keep the newer.
16
+ export function newestOfDuplicates(results) {
17
+ const kept = [];
18
+ const byAge = [...results].sort((a, b) => b.observation.created_at - a.observation.created_at);
19
+ const stale = new Set();
20
+ for (const r of byAge) {
21
+ const dup = kept.some((k) => k.observation.kind === r.observation.kind &&
22
+ titleSimilarity(k.observation.title, r.observation.title) >= TITLE_SIM_THRESHOLD);
23
+ if (dup)
24
+ stale.add(r.observation.id);
25
+ else
26
+ kept.push(r);
27
+ }
28
+ return results.filter((r) => !stale.has(r.observation.id));
29
+ }
30
+ //# sourceMappingURL=recall_filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall_filter.js","sourceRoot":"","sources":["../../src/core/recall_filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKlE,8EAA8E;AAC9E,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAC3B,OAAY,EACZ,GAAW,EACX,IAAwB;IAExB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IACnE,MAAM,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,IAAI,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAA4B,OAAY;IACxE,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI;YACzC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,mBAAmB,CACnF,CAAC;QACF,IAAI,GAAG;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;YAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { DB } from '../db.js';
2
2
  import type { Observation } from '../schema.js';
3
3
  import type { RetrievalResult, Retriever, SearchOptions } from './types.js';
4
+ export declare function queryTerms(query: string): string[];
5
+ export declare function countMatchedTerms(keys: string[], text: string): number;
4
6
  export declare class Bm25Retriever implements Retriever {
5
7
  private readonly db;
6
8
  readonly name: "bm25";
@@ -1 +1 @@
1
- {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../../src/core/retriever/bm25.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmC5E,qBAAa,aAAc,YAAW,SAAS;IAIjC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAEP,EAAE,EAAE,EAAE;IAI7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA2BhF;AAED,wBAAgB,eAAe,IAAI;IAAE,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAE3E;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../../src/core/retriever/bm25.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGlD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtE;AAaD,qBAAa,aAAc,YAAW,SAAS;IAIjC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAEP,EAAE,EAAE,EAAE;IAI7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA2BhF;AAED,wBAAgB,eAAe,IAAI;IAAE,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAE3E;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -12,15 +12,40 @@ const STOPWORDS = new Set(('a about above after again all am an and any are as a
12
12
  'same she should so some such than thank thanks that the their theirs them then there these ' +
13
13
  'they this those through to too under until up us very was we were what when where which ' +
14
14
  'while who whom why will with would you your yours').split(' '));
15
+ // Strips common English inflections so "installed" finds "install" and
16
+ // "classes" finds "class". Deliberately light: no stemming of word roots.
17
+ function stem(word) {
18
+ if (word.length > 5 && word.endsWith('ing'))
19
+ return word.slice(0, -3);
20
+ if (word.length > 4 && word.endsWith('ed'))
21
+ return word.slice(0, -2);
22
+ if (word.length > 4 && /(ss|x|ch|sh)es$/.test(word))
23
+ return word.slice(0, -2);
24
+ if (word.length > 3 && word.endsWith('s') && !word.endsWith('ss'))
25
+ return word.slice(0, -1);
26
+ return word;
27
+ }
28
+ // Below this length a prefix match is too loose ("form" would match "format").
29
+ const MIN_PREFIX = 5;
30
+ // The distinct content words of a query as match keys: lowercased, stemmed,
31
+ // split the way the FTS5 unicode61 tokenizer splits text.
32
+ export function queryTerms(query) {
33
+ const words = query.toLowerCase().split(/[^\p{L}\p{N}]+/u);
34
+ return [...new Set(words.filter((w) => w.length > 0 && !STOPWORDS.has(w)).map(stem))];
35
+ }
36
+ function keyMatches(key, word) {
37
+ return key.length >= MIN_PREFIX ? word.startsWith(key) : word === key;
38
+ }
39
+ // How many of the `queryTerms` keys occur in `text`.
40
+ export function countMatchedTerms(keys, text) {
41
+ const words = text.toLowerCase().split(/[^\p{L}\p{N}]+/u);
42
+ return keys.filter((k) => words.some((w) => keyMatches(k, w))).length;
43
+ }
15
44
  function escapeFtsQuery(query) {
16
- const tokens = query
17
- .split(/\s+/)
18
- .map((t) => t.replace(/["]/g, '').trim())
19
- .filter((t) => t.length > 0)
20
- .filter((t) => !STOPWORDS.has(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu, '')));
21
- if (tokens.length === 0)
45
+ const keys = queryTerms(query);
46
+ if (keys.length === 0)
22
47
  return '""';
23
- return tokens.map((t) => `"${t}"`).join(' OR ');
48
+ return keys.map((k) => (k.length >= MIN_PREFIX ? `"${k}"*` : `"${k}"`)).join(' OR ');
24
49
  }
25
50
  export class Bm25Retriever {
26
51
  db;
@@ -1 +1 @@
1
- {"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../../src/core/retriever/bm25.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,yEAAyE;AACzE,2EAA2E;AAC3E,uEAAuE;AACvE,sDAAsD;AACtD,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,CACE,2FAA2F;IAC3F,6FAA6F;IAC7F,8FAA8F;IAC9F,+FAA+F;IAC/F,6FAA6F;IAC7F,0FAA0F;IAC1F,mDAAmD,CACpD,CAAC,KAAK,CAAC,GAAG,CAAC,CACb,CAAC;AAEF,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,KAAK;SACjB,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAOD,MAAM,OAAO,aAAa;IAIK;IAHpB,IAAI,GAAG,MAAe,CAAC;IACf,KAAK,CAAc;IAEpC,YAA6B,EAAM;QAAN,OAAE,GAAF,EAAE,CAAI;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAsB;QAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAEjC,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;;;;iBAQS,CACV;aACA,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAc,CAAC;QAE5D,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../../src/core/retriever/bm25.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/core/retriever/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAY5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAuB5F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAUvF"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/core/retriever/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiB5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAyB5F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CASvF"}
@@ -4,7 +4,11 @@ import { EmbeddingsRetriever } from './embeddings.js';
4
4
  import { HybridRetriever } from './hybrid.js';
5
5
  import { LlmIndexRetriever } from './llm_index.js';
6
6
  import { anthropicCaller } from '../extractor.js';
7
- import { isEmbedderReady } from '../embeddings.js';
7
+ import { ensureEmbedderConfigured } from '../embeddings_bootstrap.js';
8
+ import { embeddingsPackageInstalled } from '../embeddings_xenova.js';
9
+ function embeddingsUsable(config) {
10
+ return config.retrieval.embeddings.enabled && embeddingsPackageInstalled();
11
+ }
8
12
  // Returns a retriever by strategy name. Falls back to BM25 when the requested
9
13
  // strategy's prerequisites are missing (e.g. embeddings disabled in config or
10
14
  // the model has not been loaded). Callers that care about the fallback can
@@ -14,12 +18,14 @@ export function makeRetriever(strategy, db, config) {
14
18
  case 'bm25':
15
19
  return new Bm25Retriever(db);
16
20
  case 'embeddings':
17
- if (!config.retrieval.embeddings.enabled)
21
+ if (!embeddingsUsable(config))
18
22
  return new Bm25Retriever(db);
23
+ ensureEmbedderConfigured(config);
19
24
  return new EmbeddingsRetriever(db);
20
25
  case 'hybrid':
21
- if (!config.retrieval.embeddings.enabled)
26
+ if (!embeddingsUsable(config))
22
27
  return new Bm25Retriever(db);
28
+ ensureEmbedderConfigured(config);
23
29
  return new HybridRetriever(db);
24
30
  case 'index': {
25
31
  if (!config.retrieval.index.enabled)
@@ -41,9 +47,7 @@ export function strategyAvailable(strategy, config) {
41
47
  if (strategy === 'bm25')
42
48
  return true;
43
49
  if (strategy === 'embeddings' || strategy === 'hybrid') {
44
- if (!config?.retrieval.embeddings.enabled)
45
- return false;
46
- return isEmbedderReady() || true;
50
+ return config !== undefined && embeddingsUsable(config);
47
51
  }
48
52
  if (strategy === 'index') {
49
53
  return Boolean(config?.retrieval.index.enabled && process.env['ANTHROPIC_API_KEY']);
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/core/retriever/factory.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAI1C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,EAAM,EAAE,MAAc;IAC/E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,YAAY;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,IAAI,iBAAiB,CAAC,EAAE,EAAE;gBAC/B,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;aACpC,CAAC,CAAC;QACL,CAAC;QACD;YACE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA2B,EAAE,MAAe;IAC5E,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACxD,OAAO,eAAe,EAAE,IAAI,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/core/retriever/factory.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAI1C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,IAAI,0BAA0B,EAAE,CAAC;AAC7E,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,EAAM,EAAE,MAAc;IAC/E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,YAAY;YACf,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAC5D,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACjC,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAC5D,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACjC,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,IAAI,iBAAiB,CAAC,EAAE,EAAE;gBAC/B,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;aACpC,CAAC,CAAC;QACL,CAAC;QACD;YACE,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA2B,EAAE,MAAe;IAC5E,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}