oh-my-second-brain 0.3.0 → 0.6.2

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 (110) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/ACKNOWLEDGMENTS.md +8 -0
  5. package/CHANGELOG-assets.md +10 -0
  6. package/CHANGELOG-cli.md +11 -0
  7. package/CHANGELOG-kernel.md +31 -0
  8. package/CHANGELOG-mcp.md +12 -0
  9. package/CHANGELOG-vendors.md +6 -0
  10. package/CHANGELOG.md +35 -0
  11. package/assets/hermes-manifest.json +1 -1
  12. package/assets/skills/doctor/SKILL.md +2 -2
  13. package/assets/skills/search/SKILL.md +17 -1
  14. package/dist/cli/args.d.ts +2 -0
  15. package/dist/cli/args.js +13 -0
  16. package/dist/cli/args.js.map +1 -1
  17. package/dist/cli/host-commands.js +2 -1
  18. package/dist/cli/host-commands.js.map +1 -1
  19. package/dist/cli/oms.d.ts +1 -1
  20. package/dist/cli/oms.js +26 -3
  21. package/dist/cli/oms.js.map +1 -1
  22. package/dist/cli/semantic-args.js +102 -3
  23. package/dist/cli/semantic-args.js.map +1 -1
  24. package/dist/cli/semantic.js +30 -6
  25. package/dist/cli/semantic.js.map +1 -1
  26. package/dist/cli/setup-command.d.ts +16 -0
  27. package/dist/cli/setup-command.js +50 -1
  28. package/dist/cli/setup-command.js.map +1 -1
  29. package/dist/kernel/contracts/index.d.ts +144 -0
  30. package/dist/kernel/contracts/index.js +401 -0
  31. package/dist/kernel/contracts/index.js.map +1 -0
  32. package/dist/kernel/conventions/note-exclude.d.ts +14 -0
  33. package/dist/kernel/conventions/note-exclude.js +95 -0
  34. package/dist/kernel/conventions/note-exclude.js.map +1 -0
  35. package/dist/kernel/engine/assemble.d.ts +22 -1
  36. package/dist/kernel/engine/assemble.js +202 -19
  37. package/dist/kernel/engine/assemble.js.map +1 -1
  38. package/dist/kernel/engine/axes/store.d.ts +90 -0
  39. package/dist/kernel/engine/axes/store.js +422 -0
  40. package/dist/kernel/engine/axes/store.js.map +1 -0
  41. package/dist/kernel/engine/conventions/vault-lint.d.ts +7 -2
  42. package/dist/kernel/engine/conventions/vault-lint.js +7 -21
  43. package/dist/kernel/engine/conventions/vault-lint.js.map +1 -1
  44. package/dist/kernel/engine/embed/identity.d.ts +14 -4
  45. package/dist/kernel/engine/embed/identity.js +33 -1
  46. package/dist/kernel/engine/embed/identity.js.map +1 -1
  47. package/dist/kernel/engine/embed/model.d.ts +134 -0
  48. package/dist/kernel/engine/embed/model.js +302 -0
  49. package/dist/kernel/engine/embed/model.js.map +1 -0
  50. package/dist/kernel/engine/embed/provider.d.ts +36 -5
  51. package/dist/kernel/engine/embed/provider.js +240 -103
  52. package/dist/kernel/engine/embed/provider.js.map +1 -1
  53. package/dist/kernel/engine/embed/store.d.ts +5 -1
  54. package/dist/kernel/engine/embed/store.js +136 -26
  55. package/dist/kernel/engine/embed/store.js.map +1 -1
  56. package/dist/kernel/engine/embed/sync.d.ts +53 -0
  57. package/dist/kernel/engine/embed/sync.js +489 -59
  58. package/dist/kernel/engine/embed/sync.js.map +1 -1
  59. package/dist/kernel/engine/graph/builder.d.ts +9 -5
  60. package/dist/kernel/engine/graph/builder.js +225 -82
  61. package/dist/kernel/engine/graph/builder.js.map +1 -1
  62. package/dist/kernel/engine/graph/node.d.ts +49 -1
  63. package/dist/kernel/engine/graph/node.js +205 -0
  64. package/dist/kernel/engine/graph/node.js.map +1 -1
  65. package/dist/kernel/engine/mcp/facade.d.ts +21 -1
  66. package/dist/kernel/engine/mcp/facade.js +523 -28
  67. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  68. package/dist/kernel/engine/mcp/query-mapper.d.ts +27 -2
  69. package/dist/kernel/engine/mcp/query-mapper.js +157 -12
  70. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  71. package/dist/kernel/engine/mcp/types.d.ts +64 -2
  72. package/dist/kernel/engine/retrieval/dispatcher.d.ts +22 -0
  73. package/dist/kernel/engine/retrieval/dispatcher.js +84 -8
  74. package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
  75. package/dist/kernel/engine/retrieval/index.d.ts +2 -1
  76. package/dist/kernel/engine/retrieval/index.js +1 -1
  77. package/dist/kernel/engine/retrieval/index.js.map +1 -1
  78. package/dist/kernel/engine/retrieval/reranker.d.ts +82 -4
  79. package/dist/kernel/engine/retrieval/reranker.js +178 -3
  80. package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
  81. package/dist/kernel/engine/retrieval/rrf.d.ts +10 -2
  82. package/dist/kernel/engine/retrieval/rrf.js +39 -16
  83. package/dist/kernel/engine/retrieval/rrf.js.map +1 -1
  84. package/dist/kernel/engine/tracer.d.ts +13 -0
  85. package/dist/kernel/engine/tracer.js +63 -6
  86. package/dist/kernel/engine/tracer.js.map +1 -1
  87. package/dist/kernel/graph/cache.js +174 -23
  88. package/dist/kernel/graph/cache.js.map +1 -1
  89. package/dist/kernel/index.d.ts +2 -0
  90. package/dist/kernel/index.js +2 -0
  91. package/dist/kernel/index.js.map +1 -1
  92. package/dist/kernel/measurement/no-default-contract.d.ts +17 -0
  93. package/dist/kernel/measurement/no-default-contract.js +84 -0
  94. package/dist/kernel/measurement/no-default-contract.js.map +1 -0
  95. package/dist/kernel/searchbackend/engine-search-backend.js +93 -7
  96. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  97. package/dist/kernel/searchbackend/search-backend.d.ts +11 -1
  98. package/dist/kernel/searchbackend/search-backend.js +66 -5
  99. package/dist/kernel/searchbackend/search-backend.js.map +1 -1
  100. package/dist/kernel/semantic/semantic-engine.js +31 -5
  101. package/dist/kernel/semantic/semantic-engine.js.map +1 -1
  102. package/dist/kernel/semantic/semantic-retrieve-args.d.ts +19 -2
  103. package/dist/kernel/semantic/semantic-retrieve-args.js +81 -7
  104. package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
  105. package/dist/kernel/update/update.d.ts +7 -0
  106. package/dist/kernel/update/update.js +106 -8
  107. package/dist/kernel/update/update.js.map +1 -1
  108. package/dist/mcp/server.js +84 -34
  109. package/dist/mcp/server.js.map +1 -1
  110. package/package.json +3 -2
@@ -22,48 +22,46 @@ import { cpus } from "node:os";
22
22
  // ---------------------------------------------------------------------------
23
23
  /** Default embedding dimension for the GGUF provider (EmbeddingGemma-300M). */
24
24
  export const GGUF_EMBEDDING_DIMENSIONS = 768;
25
+ /** Default context length for the GGUF provider (EmbeddingGemma-300M). */
26
+ export const GGUF_EMBEDDING_CONTEXT_LENGTH = 2048;
25
27
  /** Milliseconds of inactivity before the GGUF pool is unloaded (plan.md:83). */
26
28
  const IDLE_UNLOAD_MS = 5 * 60 * 1000;
27
- /**
28
- * Embedding context window for EmbeddingGemma-300M (its trained n_ctx).
29
- *
30
- * Each pooled context is sized to this EXPLICITLY rather than left to
31
- * node-llama-cpp's "auto": a pool of N auto-sized contexts divides available
32
- * memory N ways and each can silently shrink below the largest chunk, making
33
- * getEmbeddingFor() throw "Input is longer than the context size". Pinning the
34
- * window makes embedding deterministic across pool sizes and keeps inputs
35
- * in-distribution (2048 = trained context → no overflow degradation).
36
- */
37
- const EMBED_CONTEXT_TOKENS = 2048;
38
29
  /**
39
30
  * Hard input-token ceiling enforced before every embed() call.
40
31
  *
41
- * Sits a margin below EMBED_CONTEXT_TOKENS to leave room for any special /
32
+ * Sits a margin below the descriptor context length to leave room for any special /
42
33
  * task-prefix tokens getEmbeddingFor() injects. Inputs above this are
43
34
  * token-exactly truncated via the model's own tokenizer rather than thrown —
44
35
  * the engine MUST never choke on one oversized chunk the way the whole-doc
45
36
  * floor (src/search) does. This bounds INPUT LENGTH only; it is NOT a dimension
46
- * fold (ADR-007) — the emitted vector is still the full 768d.
37
+ * fold (ADR-007) — the emitted vector remains the provider width.
47
38
  */
48
- const EMBED_MAX_INPUT_TOKENS = 1900;
39
+ const EMBED_INPUT_TOKEN_MARGIN = 148;
49
40
  // ---------------------------------------------------------------------------
50
41
  // L2-normalise helper (GGUF provider — full vector, NO dimension folding)
51
42
  // ---------------------------------------------------------------------------
52
43
  /**
53
44
  * L2-normalise a raw embedding vector and return as Float32Array.
54
45
  *
55
- * There is NO modulo fold or projection here: the full 768-element vector is
56
- * preserved (no lossy fold to a smaller width).
57
- * For EmbeddingGemma-300M this means float[768], no lossy fold to 64d.
46
+ * There is NO modulo fold or projection here: the full provider vector is
47
+ * preserved. A malformed model response is a hard error. Replacing NaN or
48
+ * Infinity with zero would make a corrupted index look valid and, worse,
49
+ * produce vectors that cannot be reproduced on a later sync.
58
50
  */
59
51
  function normalizeVector(values) {
60
52
  const vec = new Float32Array(values.length);
61
53
  let mag = 0;
62
54
  for (let i = 0; i < values.length; i++) {
63
- const v = values[i] ?? 0;
64
- vec[i] = Number.isFinite(v) ? v : 0;
55
+ const v = values[i];
56
+ if (typeof v !== "number" || !Number.isFinite(v)) {
57
+ throw new Error(`Embedding vector contains a non-finite value at index ${i}.`);
58
+ }
59
+ vec[i] = v;
65
60
  mag += vec[i] * vec[i];
66
61
  }
62
+ if (!Number.isFinite(mag)) {
63
+ throw new Error("Embedding vector norm is non-finite.");
64
+ }
67
65
  if (mag === 0)
68
66
  return vec;
69
67
  const norm = Math.sqrt(mag);
@@ -71,9 +69,81 @@ function normalizeVector(values) {
71
69
  vec[i] = vec[i] / norm;
72
70
  return vec;
73
71
  }
72
+ /**
73
+ * Parse the descriptor's compact prefix declaration. Setup descriptors use
74
+ * either `none`, a JSON object (`{"query":"...","passage":"..."}`), or a
75
+ * delimited pair such as `query=search_query:,passage=search_document:`.
76
+ * Keeping parsing here makes the actual embedding calls deterministic and
77
+ * prevents silently ignoring a non-`none` declaration.
78
+ */
79
+ function parsePrefixScheme(value) {
80
+ const scheme = typeof value === "string" ? value.trim() : "none";
81
+ if (scheme === "" || scheme.toLowerCase() === "none" || scheme.toLowerCase() === "symmetric") {
82
+ return { query: "", passage: "" };
83
+ }
84
+ if (scheme.startsWith("{")) {
85
+ let parsed;
86
+ try {
87
+ parsed = JSON.parse(scheme);
88
+ }
89
+ catch {
90
+ throw new Error(`Invalid embedding prefixScheme JSON: ${scheme}`);
91
+ }
92
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
93
+ throw new Error("Embedding prefixScheme JSON must be an object.");
94
+ }
95
+ const record = parsed;
96
+ const query = record["query"] ?? record["queryPrefix"];
97
+ const passage = record["passage"] ?? record["document"] ?? record["passagePrefix"] ?? record["documentPrefix"];
98
+ if ((query !== undefined && typeof query !== "string") ||
99
+ (passage !== undefined && typeof passage !== "string") ||
100
+ (query === undefined && passage === undefined)) {
101
+ throw new Error("Embedding prefixScheme JSON requires a string query or passage value.");
102
+ }
103
+ return {
104
+ query: typeof query === "string" ? query : "",
105
+ passage: typeof passage === "string" ? passage : "",
106
+ };
107
+ }
108
+ const fields = {};
109
+ const keyPattern = /(?:^|[;,|])\s*(query|queryPrefix|passage|passagePrefix|document|documentPrefix)\s*[:=]\s*/giu;
110
+ const matches = [...scheme.matchAll(keyPattern)];
111
+ for (let i = 0; i < matches.length; i++) {
112
+ const match = matches[i];
113
+ const key = match[1].toLowerCase().startsWith("document")
114
+ ? "passage"
115
+ : match[1].toLowerCase().startsWith("passage")
116
+ ? "passage"
117
+ : "query";
118
+ const start = (match.index ?? 0) + match[0].length;
119
+ const end = i + 1 < matches.length ? (matches[i + 1].index ?? scheme.length) : scheme.length;
120
+ fields[key] = scheme.slice(start, end).trim();
121
+ }
122
+ if (fields.query !== undefined || fields.passage !== undefined) {
123
+ return { query: fields.query ?? "", passage: fields.passage ?? "" };
124
+ }
125
+ throw new Error(`Unsupported embedding prefixScheme "${scheme}". Use "none", JSON, or query/passage declarations.`);
126
+ }
127
+ function positiveInteger(value, fallback, label) {
128
+ const resolved = value ?? fallback;
129
+ if (!Number.isInteger(resolved) || resolved <= 0) {
130
+ throw new Error(`Embedding ${label} must be a positive integer.`);
131
+ }
132
+ return resolved;
133
+ }
134
+ function runtimeOptions(value, contextLength) {
135
+ const dimensionsInput = typeof value === "number" ? value : value?.dimensions;
136
+ const contextInput = typeof value === "number"
137
+ ? contextLength
138
+ : value?.context ?? value?.contextLength ?? value?.contextTokens ?? contextLength;
139
+ return {
140
+ dimensions: positiveInteger(dimensionsInput, GGUF_EMBEDDING_DIMENSIONS, "dimensions"),
141
+ contextLength: positiveInteger(contextInput, GGUF_EMBEDDING_CONTEXT_LENGTH, "context length"),
142
+ };
143
+ }
74
144
  /**
75
145
  * Create a production EmbeddingProvider backed by a local GGUF model via
76
- * node-llama-cpp. Target model: EmbeddingGemma-300M (768d).
146
+ * node-llama-cpp. Target model: EmbeddingGemma-300M (descriptor width).
77
147
  *
78
148
  * Design (ported idea-only from qmd, MIT — ACKNOWLEDGMENTS.md M1):
79
149
  * - Lazy-load: model/contexts are not initialised until the first embed() call.
@@ -84,9 +154,13 @@ function normalizeVector(values) {
84
154
  * Contexts are selected round-robin; embed calls do not queue.
85
155
  *
86
156
  * @param modelPath - Absolute path to the GGUF model file.
87
- * @param dimensions - Expected embedding dimension (default 768 for Gemma-300M).
157
+ * @param dimensionsOrOptions - Expected width or descriptor runtime options.
158
+ * @param contextLength - Legacy positional context-length override.
88
159
  */
89
- export function createGGUFEmbeddingProvider(modelPath, dimensions = GGUF_EMBEDDING_DIMENSIONS) {
160
+ export function createGGUFEmbeddingProvider(modelPath, dimensionsOrOptions = GGUF_EMBEDDING_DIMENSIONS, contextLength) {
161
+ const runtime = runtimeOptions(dimensionsOrOptions, contextLength);
162
+ const prefixes = parsePrefixScheme(typeof dimensionsOrOptions === "object" ? dimensionsOrOptions.prefixScheme : undefined);
163
+ const maxInputTokens = Math.max(1, runtime.contextLength - EMBED_INPUT_TOKEN_MARGIN);
90
164
  // Hardware-adaptive pool size (P-01 pattern, qmd MIT)
91
165
  const poolSize = Math.min(4, Math.max(1, cpus().length - 1));
92
166
  let pool = null;
@@ -118,8 +192,8 @@ export function createGGUFEmbeddingProvider(modelPath, dimensions = GGUF_EMBEDDI
118
192
  const llama = await getLlama();
119
193
  const model = await llama.loadModel({ modelPath });
120
194
  const contexts = await Promise.all(Array.from({ length: poolSize }, () => model.createEmbeddingContext({
121
- contextSize: EMBED_CONTEXT_TOKENS,
122
- batchSize: EMBED_CONTEXT_TOKENS,
195
+ contextSize: runtime.contextLength,
196
+ batchSize: runtime.contextLength,
123
197
  })));
124
198
  pool = { model, contexts, nextIdx: 0 };
125
199
  return pool;
@@ -128,49 +202,77 @@ export function createGGUFEmbeddingProvider(modelPath, dimensions = GGUF_EMBEDDI
128
202
  });
129
203
  return loadPromise;
130
204
  }
131
- return {
205
+ const provider = {
132
206
  model: `node-llama-cpp:${modelPath}`,
133
- dimensions,
207
+ dimensions: runtime.dimensions,
208
+ // Expose the descriptor-derived context to identity/sync without widening
209
+ // the shared EmbeddingProvider contract.
210
+ context: runtime.contextLength,
211
+ contextLength: runtime.contextLength,
212
+ ...(typeof dimensionsOrOptions === "object" && dimensionsOrOptions.mrlDim !== undefined
213
+ ? { mrlDim: dimensionsOrOptions.mrlDim }
214
+ : {}),
215
+ ...(typeof dimensionsOrOptions === "object" && dimensionsOrOptions.normalization !== undefined
216
+ ? { normalization: dimensionsOrOptions.normalization }
217
+ : {}),
218
+ ...(typeof dimensionsOrOptions === "object" && dimensionsOrOptions.prefixScheme !== undefined
219
+ ? { prefixScheme: dimensionsOrOptions.prefixScheme }
220
+ : {}),
134
221
  async embed(text) {
135
- resetIdleTimer();
136
- const p = await ensurePool();
137
- // Token-exact truncation: never feed more than the context can hold, so a
138
- // single oversized chunk can never throw "Input is longer than the context
139
- // size". Bounds INPUT LENGTH only via the model's own tokenizer — NOT a
140
- // dimension fold (ADR-007); the output stays full 768d.
141
- let input = text;
142
- const tokens = p.model.tokenize(text);
143
- if (tokens.length > EMBED_MAX_INPUT_TOKENS) {
144
- input = p.model.detokenize(tokens.slice(0, EMBED_MAX_INPUT_TOKENS));
145
- }
146
- // Round-robin context selection across the pool
147
- const idx = p.nextIdx % p.contexts.length;
148
- p.nextIdx = idx + 1;
149
- const ctx = p.contexts[idx];
150
- const result = await ctx.getEmbeddingFor(input);
151
- // No fold — return full 768d, L2-normalised
152
- return normalizeVector(result.vector);
222
+ return embedPassage(text);
153
223
  },
154
- async dispose() {
155
- if (idleTimer !== null) {
156
- clearTimeout(idleTimer);
157
- idleTimer = null;
158
- }
159
- // Wait for any in-flight load to complete before disposing
160
- if (loadPromise !== null) {
161
- try {
162
- await loadPromise;
163
- }
164
- catch { /* load failed, nothing to dispose */ }
165
- }
166
- if (pool !== null) {
167
- const p = pool;
168
- pool = null;
169
- await Promise.all(p.contexts.map((ctx) => ctx.dispose().catch(() => undefined)));
170
- await p.model.dispose().catch(() => undefined);
171
- }
224
+ async embedQuery(text) {
225
+ return embedText(`${prefixes.query}${text}`);
172
226
  },
227
+ dispose: disposeProvider,
173
228
  };
229
+ async function embedText(text) {
230
+ resetIdleTimer();
231
+ const p = await ensurePool();
232
+ // Token-exact truncation: never feed more than the context can hold, so a
233
+ // single oversized chunk can never throw "Input is longer than the context
234
+ // size". Bounds INPUT LENGTH only via the model's own tokenizer — NOT a
235
+ // dimension fold (ADR-007); the output stays at the provider width.
236
+ let input = text;
237
+ const tokens = p.model.tokenize(text);
238
+ if (tokens.length > maxInputTokens) {
239
+ input = p.model.detokenize(tokens.slice(0, maxInputTokens));
240
+ }
241
+ // Round-robin context selection across the pool
242
+ const idx = p.nextIdx % p.contexts.length;
243
+ p.nextIdx = idx + 1;
244
+ const ctx = p.contexts[idx];
245
+ const result = await ctx.getEmbeddingFor(input);
246
+ // No fold — return the full provider vector, L2-normalised
247
+ const vector = normalizeVector(result.vector);
248
+ if (vector.length !== runtime.dimensions) {
249
+ throw new Error(`GGUF embedding returned ${vector.length} dimensions; expected ${runtime.dimensions}.`);
250
+ }
251
+ return vector;
252
+ }
253
+ async function embedPassage(text) {
254
+ return embedText(`${prefixes.passage}${text}`);
255
+ }
256
+ async function disposeProvider() {
257
+ if (idleTimer !== null) {
258
+ clearTimeout(idleTimer);
259
+ idleTimer = null;
260
+ }
261
+ // Wait for any in-flight load to complete before disposing
262
+ if (loadPromise !== null) {
263
+ try {
264
+ await loadPromise;
265
+ }
266
+ catch { /* load failed, nothing to dispose */ }
267
+ }
268
+ if (pool !== null) {
269
+ const p = pool;
270
+ pool = null;
271
+ await Promise.all(p.contexts.map((ctx) => ctx.dispose().catch(() => undefined)));
272
+ await p.model.dispose().catch(() => undefined);
273
+ }
274
+ }
275
+ return provider;
174
276
  }
175
277
  // ---------------------------------------------------------------------------
176
278
  // Upstage Solar provider (4096d, REST API, opt-in commercial, ADR-002)
@@ -184,50 +286,70 @@ const UPSTAGE_API_URL = "https://api.upstage.ai/v1/embeddings";
184
286
  * when UPSTAGE_API_KEY is set in the environment; never use by default.
185
287
  * The API key MUST come from env — never hardcoded (R4 secrets-via-env).
186
288
  */
187
- export function createUpstageProvider(apiKey, model) {
188
- return {
289
+ export function createUpstageProvider(apiKey, model, dimensions = UPSTAGE_DIMENSIONS, metadata = {}) {
290
+ const resolvedDimensions = positiveInteger(dimensions, UPSTAGE_DIMENSIONS, "dimensions");
291
+ const contextLength = metadata.context ?? metadata.contextLength ?? metadata.contextTokens;
292
+ const prefixes = parsePrefixScheme(metadata.prefixScheme);
293
+ const provider = {
189
294
  model: `upstage:${model}`,
190
- dimensions: UPSTAGE_DIMENSIONS,
295
+ dimensions: resolvedDimensions,
296
+ ...(contextLength === undefined ? {} : { context: contextLength }),
297
+ ...(contextLength === undefined ? {} : { contextLength }),
298
+ ...(metadata.mrlDim === undefined ? {} : { mrlDim: metadata.mrlDim }),
299
+ ...(metadata.normalization === undefined ? {} : { normalization: metadata.normalization }),
300
+ ...(metadata.prefixScheme === undefined ? {} : { prefixScheme: metadata.prefixScheme }),
191
301
  async embed(text) {
192
- let input = (text ?? "").trim();
193
- // Upstage rejects empty input with HTTP 400. Empty/whitespace chunks
194
- // carry no semantic signal — return a zero vector so sync proceeds.
195
- if (input.length === 0)
196
- return new Float32Array(UPSTAGE_DIMENSIONS);
197
- // Solar caps input at 4000 tokens. Rather than fail the whole sync on a
198
- // single oversized chunk, shrink the input and retry until it fits.
199
- for (let attempt = 0; attempt < 6; attempt += 1) {
200
- const response = await fetch(UPSTAGE_API_URL, {
201
- method: "POST",
202
- headers: {
203
- "Content-Type": "application/json",
204
- Authorization: `Bearer ${apiKey}`,
205
- },
206
- body: JSON.stringify({ input, model }),
207
- });
208
- if (response.ok) {
209
- const json = (await response.json());
210
- const embedding = json.data[0]?.embedding;
211
- if (!embedding) {
212
- throw new Error("Upstage Solar API returned no embedding");
213
- }
214
- return normalizeVector(embedding);
215
- }
216
- const body = await response.text().catch(() => "");
217
- if (response.status === 400 &&
218
- /maximum context length/i.test(body) &&
219
- input.length > 200) {
220
- input = input.slice(0, Math.floor(input.length * 0.6));
221
- continue;
222
- }
223
- throw new Error(`Upstage Solar API error: ${response.status} ${response.statusText} ${body.slice(0, 160)}`);
224
- }
225
- throw new Error("Upstage Solar API error: input could not be reduced under the 4000-token limit");
302
+ return embedPassage(text);
226
303
  },
227
- dispose() {
228
- return Promise.resolve();
304
+ async embedQuery(text) {
305
+ return embedText(`${prefixes.query}${text}`);
229
306
  },
307
+ dispose: () => Promise.resolve(),
230
308
  };
309
+ async function embedPassage(text) {
310
+ return embedText(`${prefixes.passage}${text}`);
311
+ }
312
+ async function embedText(text) {
313
+ let input = (text ?? "").trim();
314
+ // Upstage rejects empty input with HTTP 400. Empty/whitespace chunks
315
+ // carry no semantic signal — return a zero vector so sync proceeds.
316
+ if (input.length === 0)
317
+ return new Float32Array(resolvedDimensions);
318
+ // Solar caps input at 4000 tokens. Rather than fail the whole sync on a
319
+ // single oversized chunk, shrink the input and retry until it fits.
320
+ for (let attempt = 0; attempt < 6; attempt += 1) {
321
+ const response = await fetch(UPSTAGE_API_URL, {
322
+ method: "POST",
323
+ headers: {
324
+ "Content-Type": "application/json",
325
+ Authorization: `Bearer ${apiKey}`,
326
+ },
327
+ body: JSON.stringify({ input, model }),
328
+ });
329
+ if (response.ok) {
330
+ const json = (await response.json());
331
+ const embedding = json.data[0]?.embedding;
332
+ if (!embedding) {
333
+ throw new Error("Upstage Solar API returned no embedding");
334
+ }
335
+ const vector = normalizeVector(embedding);
336
+ if (vector.length !== resolvedDimensions) {
337
+ throw new Error(`Upstage Solar API returned ${vector.length} dimensions; expected ${resolvedDimensions}.`);
338
+ }
339
+ return vector;
340
+ }
341
+ const body = await response.text().catch(() => "");
342
+ if (response.status === 400 &&
343
+ /maximum context length/i.test(body) &&
344
+ input.length > 200) {
345
+ input = input.slice(0, Math.floor(input.length * 0.6));
346
+ continue;
347
+ }
348
+ throw new Error(`Upstage Solar API error: ${response.status} ${response.statusText} ${body.slice(0, 160)}`);
349
+ }
350
+ throw new Error("Upstage Solar API error: input could not be reduced under the 4000-token limit");
351
+ }
352
+ return provider;
231
353
  }
232
354
  /**
233
355
  * Resolve a REAL embedding provider or throw.
@@ -251,14 +373,29 @@ export function requireRealEmbeddingProvider(opts = {}) {
251
373
  "Set OMS_EMBEDDING_MODEL and rerun sync.");
252
374
  }
253
375
  if (providerRaw === "gguf") {
254
- return createGGUFEmbeddingProvider(model);
376
+ return createGGUFEmbeddingProvider(model, {
377
+ dimensions: opts.dimensions,
378
+ context: opts.context,
379
+ contextLength: opts.contextLength,
380
+ contextTokens: opts.contextTokens,
381
+ mrlDim: opts.mrlDim,
382
+ normalization: opts.normalization,
383
+ prefixScheme: opts.prefixScheme,
384
+ });
255
385
  }
256
386
  if (providerRaw === "upstage") {
257
387
  const upstageKey = process.env["UPSTAGE_API_KEY"];
258
388
  if (!upstageKey) {
259
389
  throw new Error("OMS embedding provider is configured as upstage but UPSTAGE_API_KEY is missing.");
260
390
  }
261
- return createUpstageProvider(upstageKey, model);
391
+ return createUpstageProvider(upstageKey, model, opts.dimensions, {
392
+ context: opts.context,
393
+ contextLength: opts.contextLength,
394
+ contextTokens: opts.contextTokens,
395
+ mrlDim: opts.mrlDim,
396
+ normalization: opts.normalization,
397
+ prefixScheme: opts.prefixScheme,
398
+ });
262
399
  }
263
400
  throw new Error(`OMS embedding provider "${providerRaw}" is unsupported. ` +
264
401
  "Supported providers: gguf, upstage.");
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/kernel/engine/embed/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/kernel/engine/embed/provider.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,10 @@ export interface EmbeddingIdentity {
17
17
  readonly provider: string;
18
18
  readonly model: string;
19
19
  readonly dimensions: number;
20
+ readonly contextLength: number;
21
+ readonly mrlDim: number;
22
+ readonly normalization: string;
23
+ readonly prefixScheme: string;
20
24
  readonly fingerprint: string;
21
25
  }
22
26
  /**
@@ -43,7 +47,7 @@ export interface EngineStore extends VectorStore {
43
47
  /** Return every distinct `doc_path` currently stored. */
44
48
  listDocPaths(): string[];
45
49
  }
46
- export declare const ENGINE_EMBED_META_VERSION = "oms-embed-meta-v1";
50
+ export declare const ENGINE_EMBED_META_VERSION = "oms-embed-meta-v2";
47
51
  /**
48
52
  * Open (or create) an engine store at `dbPath` in CORE-ONLY mode.
49
53
  *