oh-my-second-brain 0.3.0 → 0.6.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.
Files changed (104) 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 +4 -0
  6. package/CHANGELOG-cli.md +9 -0
  7. package/CHANGELOG-kernel.md +23 -0
  8. package/CHANGELOG-mcp.md +10 -0
  9. package/CHANGELOG-vendors.md +4 -0
  10. package/CHANGELOG.md +27 -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 +1 -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/engine/assemble.d.ts +22 -1
  33. package/dist/kernel/engine/assemble.js +202 -19
  34. package/dist/kernel/engine/assemble.js.map +1 -1
  35. package/dist/kernel/engine/axes/store.d.ts +90 -0
  36. package/dist/kernel/engine/axes/store.js +400 -0
  37. package/dist/kernel/engine/axes/store.js.map +1 -0
  38. package/dist/kernel/engine/embed/identity.d.ts +14 -4
  39. package/dist/kernel/engine/embed/identity.js +33 -1
  40. package/dist/kernel/engine/embed/identity.js.map +1 -1
  41. package/dist/kernel/engine/embed/model.d.ts +134 -0
  42. package/dist/kernel/engine/embed/model.js +302 -0
  43. package/dist/kernel/engine/embed/model.js.map +1 -0
  44. package/dist/kernel/engine/embed/provider.d.ts +36 -5
  45. package/dist/kernel/engine/embed/provider.js +240 -103
  46. package/dist/kernel/engine/embed/provider.js.map +1 -1
  47. package/dist/kernel/engine/embed/store.d.ts +5 -1
  48. package/dist/kernel/engine/embed/store.js +136 -26
  49. package/dist/kernel/engine/embed/store.js.map +1 -1
  50. package/dist/kernel/engine/embed/sync.d.ts +53 -0
  51. package/dist/kernel/engine/embed/sync.js +489 -59
  52. package/dist/kernel/engine/embed/sync.js.map +1 -1
  53. package/dist/kernel/engine/graph/builder.d.ts +9 -5
  54. package/dist/kernel/engine/graph/builder.js +213 -79
  55. package/dist/kernel/engine/graph/builder.js.map +1 -1
  56. package/dist/kernel/engine/graph/node.d.ts +49 -1
  57. package/dist/kernel/engine/graph/node.js +205 -0
  58. package/dist/kernel/engine/graph/node.js.map +1 -1
  59. package/dist/kernel/engine/mcp/facade.d.ts +21 -1
  60. package/dist/kernel/engine/mcp/facade.js +523 -28
  61. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  62. package/dist/kernel/engine/mcp/query-mapper.d.ts +27 -2
  63. package/dist/kernel/engine/mcp/query-mapper.js +157 -12
  64. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  65. package/dist/kernel/engine/mcp/types.d.ts +64 -2
  66. package/dist/kernel/engine/retrieval/dispatcher.d.ts +22 -0
  67. package/dist/kernel/engine/retrieval/dispatcher.js +84 -8
  68. package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
  69. package/dist/kernel/engine/retrieval/index.d.ts +2 -1
  70. package/dist/kernel/engine/retrieval/index.js +1 -1
  71. package/dist/kernel/engine/retrieval/index.js.map +1 -1
  72. package/dist/kernel/engine/retrieval/reranker.d.ts +82 -4
  73. package/dist/kernel/engine/retrieval/reranker.js +178 -3
  74. package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
  75. package/dist/kernel/engine/retrieval/rrf.d.ts +10 -2
  76. package/dist/kernel/engine/retrieval/rrf.js +39 -16
  77. package/dist/kernel/engine/retrieval/rrf.js.map +1 -1
  78. package/dist/kernel/engine/tracer.d.ts +13 -0
  79. package/dist/kernel/engine/tracer.js +63 -6
  80. package/dist/kernel/engine/tracer.js.map +1 -1
  81. package/dist/kernel/graph/cache.js +164 -20
  82. package/dist/kernel/graph/cache.js.map +1 -1
  83. package/dist/kernel/index.d.ts +2 -0
  84. package/dist/kernel/index.js +2 -0
  85. package/dist/kernel/index.js.map +1 -1
  86. package/dist/kernel/measurement/no-default-contract.d.ts +17 -0
  87. package/dist/kernel/measurement/no-default-contract.js +84 -0
  88. package/dist/kernel/measurement/no-default-contract.js.map +1 -0
  89. package/dist/kernel/searchbackend/engine-search-backend.js +93 -7
  90. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  91. package/dist/kernel/searchbackend/search-backend.d.ts +11 -1
  92. package/dist/kernel/searchbackend/search-backend.js +66 -5
  93. package/dist/kernel/searchbackend/search-backend.js.map +1 -1
  94. package/dist/kernel/semantic/semantic-engine.js +31 -5
  95. package/dist/kernel/semantic/semantic-engine.js.map +1 -1
  96. package/dist/kernel/semantic/semantic-retrieve-args.d.ts +19 -2
  97. package/dist/kernel/semantic/semantic-retrieve-args.js +81 -7
  98. package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
  99. package/dist/kernel/update/update.d.ts +7 -0
  100. package/dist/kernel/update/update.js +106 -8
  101. package/dist/kernel/update/update.js.map +1 -1
  102. package/dist/mcp/server.js +84 -34
  103. package/dist/mcp/server.js.map +1 -1
  104. package/package.json +3 -2
@@ -0,0 +1,400 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, readdir, realpath, stat } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import Database from "better-sqlite3";
5
+ import { parseNote } from "../../conventions/frontmatter.js";
6
+ function isAxisKind(value) {
7
+ return value === "folder" || value === "field" || value === "link";
8
+ }
9
+ function canonicalAxisKey(value) {
10
+ const key = value.trim().toLowerCase();
11
+ if (key.length === 0)
12
+ throw new Error("Axis key must be non-empty.");
13
+ return key;
14
+ }
15
+ function scalarType(value) {
16
+ if (value instanceof Date)
17
+ return "date";
18
+ if (typeof value === "string")
19
+ return "string";
20
+ if (typeof value === "number")
21
+ return "number";
22
+ return "boolean";
23
+ }
24
+ function canonicalScalar(value) {
25
+ if (value instanceof Date) {
26
+ if (Number.isNaN(value.getTime()))
27
+ throw new Error("Axis date value must be valid.");
28
+ return value.toISOString();
29
+ }
30
+ if (typeof value === "string") {
31
+ const normalized = value.trim().toLowerCase();
32
+ if (normalized.length === 0)
33
+ throw new Error("Axis string value must be non-empty.");
34
+ return normalized;
35
+ }
36
+ if (typeof value === "number") {
37
+ if (!Number.isFinite(value))
38
+ throw new Error("Axis number value must be finite.");
39
+ return value;
40
+ }
41
+ return value;
42
+ }
43
+ function flattenValue(value) {
44
+ if (Array.isArray(value))
45
+ return value.flatMap(flattenValue);
46
+ if (value instanceof Date || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
47
+ return [value];
48
+ }
49
+ if (value === null || value === undefined)
50
+ return [];
51
+ return [];
52
+ }
53
+ function normalizedLookup(value, type) {
54
+ if (type === "date")
55
+ return (value instanceof Date ? value.toISOString() : String(value)).toLowerCase();
56
+ return String(value).trim().toLowerCase();
57
+ }
58
+ export function normalizeAxisValue(value) {
59
+ const canonical = canonicalScalar(value);
60
+ const type = scalarType(value);
61
+ return { value: canonical, type, normalizedValue: normalizedLookup(canonical, type) };
62
+ }
63
+ function decodeValue(type, json) {
64
+ let value;
65
+ try {
66
+ value = JSON.parse(json);
67
+ }
68
+ catch {
69
+ throw new Error("Axis observation contains invalid stored JSON.");
70
+ }
71
+ if (type === "string" && typeof value === "string")
72
+ return value;
73
+ if (type === "number" && typeof value === "number" && Number.isFinite(value))
74
+ return value;
75
+ if (type === "boolean" && typeof value === "boolean")
76
+ return value;
77
+ if (type === "date" && typeof value === "string") {
78
+ const date = new Date(value);
79
+ if (!Number.isNaN(date.getTime()))
80
+ return date;
81
+ }
82
+ throw new Error(`Axis observation value does not match stored type ${type}.`);
83
+ }
84
+ function toObservation(row) {
85
+ if (!isAxisKind(row.axis_kind))
86
+ throw new Error(`Axis observation has unknown kind ${row.axis_kind}.`);
87
+ return {
88
+ notePath: row.note_path,
89
+ axisKind: row.axis_kind,
90
+ axisKey: row.axis_key,
91
+ value: decodeValue(row.value_type, row.value_json),
92
+ valueType: row.value_type,
93
+ normalizedValue: row.normalized_value,
94
+ count: row.count,
95
+ };
96
+ }
97
+ const CREATE_SCHEMA = `
98
+ CREATE TABLE IF NOT EXISTS axis_observation (
99
+ note_path TEXT NOT NULL,
100
+ axis_kind TEXT NOT NULL CHECK (axis_kind IN ('folder', 'field', 'link')),
101
+ axis_key TEXT NOT NULL,
102
+ value_type TEXT NOT NULL CHECK (value_type IN ('string', 'number', 'boolean', 'date')),
103
+ value_json TEXT NOT NULL,
104
+ normalized_value TEXT NOT NULL,
105
+ count INTEGER NOT NULL DEFAULT 1 CHECK (count > 0),
106
+ PRIMARY KEY (note_path, axis_kind, axis_key, value_type, normalized_value)
107
+ );
108
+ CREATE INDEX IF NOT EXISTS axis_observation_lookup
109
+ ON axis_observation (axis_kind, axis_key, normalized_value);
110
+ CREATE TABLE IF NOT EXISTS axis_meta (
111
+ id INTEGER PRIMARY KEY CHECK (id = 1),
112
+ source_signature TEXT NOT NULL
113
+ );
114
+ `;
115
+ /** Dedicated EAV repository; never shares the embedding engine database. */
116
+ export class AxisObservationStore {
117
+ dbPath;
118
+ db;
119
+ closed = false;
120
+ transactionDepth = 0;
121
+ constructor(dbPath, options = {}) {
122
+ this.dbPath = dbPath;
123
+ if (options.readonly === true || options.readOnly === true) {
124
+ this.db = new Database(dbPath, { readonly: true, fileMustExist: true });
125
+ }
126
+ else {
127
+ this.db = new Database(dbPath);
128
+ this.db.pragma("journal_mode = WAL");
129
+ this.db.exec(CREATE_SCHEMA);
130
+ }
131
+ }
132
+ ensureOpen() {
133
+ if (this.closed)
134
+ throw new Error("Axis observation store is closed.");
135
+ }
136
+ /**
137
+ * Run a group of writes as one rollback-safe publication. Nested writes from
138
+ * record/replaceNote participate in the outer transaction rather than
139
+ * attempting to open a second SQLite transaction.
140
+ */
141
+ runInTransaction(fn) {
142
+ this.ensureOpen();
143
+ if (this.transactionDepth > 0)
144
+ return fn();
145
+ this.transactionDepth += 1;
146
+ try {
147
+ return this.db.transaction(fn)();
148
+ }
149
+ finally {
150
+ this.transactionDepth -= 1;
151
+ }
152
+ }
153
+ insertValues(notePath, axisKind, axisKey, value, statement) {
154
+ for (const original of flattenValue(value)) {
155
+ const normalized = normalizeAxisValue(original);
156
+ statement.run(notePath, axisKind, axisKey, normalized.type, JSON.stringify(normalized.value), normalized.normalizedValue);
157
+ }
158
+ }
159
+ /** Source signature of the markdown set used for the last reconciliation. */
160
+ sourceSignature() {
161
+ this.ensureOpen();
162
+ const row = this.db.prepare("SELECT source_signature FROM axis_meta WHERE id = 1").get();
163
+ return row?.source_signature ?? null;
164
+ }
165
+ setSourceSignature(signature) {
166
+ this.ensureOpen();
167
+ this.db.prepare("INSERT INTO axis_meta (id, source_signature) VALUES (1, ?) ON CONFLICT(id) DO UPDATE SET source_signature = excluded.source_signature").run(signature);
168
+ }
169
+ /** Record one scalar or every scalar in a frontmatter list. */
170
+ record(input) {
171
+ this.ensureOpen();
172
+ const axisKind = input.axisKind ?? "field";
173
+ if (!isAxisKind(axisKind))
174
+ throw new Error(`Unknown axis kind ${String(axisKind)}.`);
175
+ const axisKey = canonicalAxisKey(input.axisKey);
176
+ const values = flattenValue(input.value);
177
+ const statement = this.db.prepare(`
178
+ INSERT INTO axis_observation
179
+ (note_path, axis_kind, axis_key, value_type, value_json, normalized_value, count)
180
+ VALUES (?, ?, ?, ?, ?, ?, 1)
181
+ ON CONFLICT(note_path, axis_kind, axis_key, value_type, normalized_value)
182
+ DO UPDATE SET count = axis_observation.count + 1
183
+ `);
184
+ this.runInTransaction(() => {
185
+ for (const value of values)
186
+ this.insertValues(input.notePath, axisKind, axisKey, value, statement);
187
+ });
188
+ }
189
+ /** Remove all observations for a note, then atomically replace them. */
190
+ replaceNote(notePath, fields, options = {}) {
191
+ this.ensureOpen();
192
+ this.runInTransaction(() => {
193
+ this.db.prepare("DELETE FROM axis_observation WHERE note_path = ?").run(notePath);
194
+ const statement = this.db.prepare(`
195
+ INSERT INTO axis_observation
196
+ (note_path, axis_kind, axis_key, value_type, value_json, normalized_value, count)
197
+ VALUES (?, ?, ?, ?, ?, ?, 1)
198
+ ON CONFLICT(note_path, axis_kind, axis_key, value_type, normalized_value)
199
+ DO UPDATE SET count = 1
200
+ `);
201
+ if (options.folder !== undefined)
202
+ this.insertValues(notePath, "folder", "folder", options.folder, statement);
203
+ for (const [axisKey, value] of Object.entries(fields)) {
204
+ this.insertValues(notePath, "field", canonicalAxisKey(axisKey), value, statement);
205
+ }
206
+ for (const link of options.links ?? [])
207
+ this.insertValues(notePath, "link", "link", link, statement);
208
+ });
209
+ }
210
+ /** Delete stale observations when a markdown note is removed. */
211
+ deleteNote(notePath) {
212
+ this.ensureOpen();
213
+ this.db.prepare("DELETE FROM axis_observation WHERE note_path = ?").run(notePath);
214
+ }
215
+ list(options = {}) {
216
+ this.ensureOpen();
217
+ const clauses = [];
218
+ const params = [];
219
+ if (options.axisKind !== undefined) {
220
+ if (!isAxisKind(options.axisKind))
221
+ throw new Error(`Unknown axis kind ${String(options.axisKind)}.`);
222
+ clauses.push("axis_kind = ?");
223
+ params.push(options.axisKind);
224
+ }
225
+ if (options.axisKey !== undefined) {
226
+ clauses.push("axis_key = ?");
227
+ params.push(canonicalAxisKey(options.axisKey));
228
+ }
229
+ if (options.notePath !== undefined) {
230
+ clauses.push("note_path = ?");
231
+ params.push(options.notePath);
232
+ }
233
+ const where = clauses.length === 0 ? "" : ` WHERE ${clauses.join(" AND ")}`;
234
+ const rows = this.db.prepare(`SELECT note_path, axis_kind, axis_key, value_type, value_json, normalized_value, count
235
+ FROM axis_observation${where}
236
+ ORDER BY note_path, axis_kind, axis_key, normalized_value`).all(...params);
237
+ return rows.map(toObservation);
238
+ }
239
+ /** Aggregate facets before any result limit is applied. */
240
+ facets(options = {}) {
241
+ const observations = this.list(options);
242
+ const grouped = new Map();
243
+ for (const observation of observations) {
244
+ const id = `${observation.axisKind}\0${observation.axisKey}\0${observation.valueType}\0${observation.normalizedValue}`;
245
+ const prior = grouped.get(id);
246
+ if (prior === undefined) {
247
+ grouped.set(id, {
248
+ axisKind: observation.axisKind,
249
+ axisKey: observation.axisKey,
250
+ value: observation.value,
251
+ valueType: observation.valueType,
252
+ normalizedValue: observation.normalizedValue,
253
+ count: observation.count,
254
+ });
255
+ }
256
+ else {
257
+ grouped.set(id, { ...prior, count: prior.count + observation.count });
258
+ }
259
+ }
260
+ return [...grouped.values()].sort((left, right) => left.axisKind.localeCompare(right.axisKind) || left.axisKey.localeCompare(right.axisKey) || left.normalizedValue.localeCompare(right.normalizedValue));
261
+ }
262
+ count(options = {}) {
263
+ return this.list(options).reduce((sum, row) => sum + row.count, 0);
264
+ }
265
+ close() {
266
+ if (this.closed)
267
+ return;
268
+ this.db.close();
269
+ this.closed = true;
270
+ }
271
+ }
272
+ export const openAxisStore = (dbPath, options = {}) => new AxisObservationStore(dbPath, options);
273
+ export function axisStorePath(vault) {
274
+ return path.resolve(vault, ".oms", "cache", "axes.sqlite");
275
+ }
276
+ export function openVaultAxisStore(vault, options = {}) {
277
+ return new AxisObservationStore(axisStorePath(vault), options);
278
+ }
279
+ function firstFolder(notePath) {
280
+ const slash = notePath.indexOf("/");
281
+ return slash > 0 ? notePath.slice(0, slash) : undefined;
282
+ }
283
+ function extractLinks(body) {
284
+ const links = [];
285
+ const pattern = /\[\[([^\]|#]+)(?:[#|][^\]]*)?\]\]/gu;
286
+ for (const match of body.matchAll(pattern)) {
287
+ const target = match[1]?.trim();
288
+ if (target)
289
+ links.push(target);
290
+ }
291
+ return [...new Set(links)];
292
+ }
293
+ const AXIS_SKIP_DIRS = new Set([
294
+ ".oms",
295
+ ".obsidian",
296
+ ".trash",
297
+ ".git",
298
+ ".claude",
299
+ "_archive",
300
+ "node_modules",
301
+ ]);
302
+ function ensureInsideVault(root, candidate, label) {
303
+ const relative = path.relative(root, candidate);
304
+ if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
305
+ throw new Error(`${label} escapes the configured vault root.`);
306
+ }
307
+ }
308
+ /**
309
+ * Strict scanner for EAV reconciliation. The shared convention walker is
310
+ * intentionally permissive for linting, but a persisted derived snapshot
311
+ * must fail when a directory/file disappears or a symlink leaves the vault.
312
+ */
313
+ async function* walkVaultMarkdownStrict(dir, base, rootRealPath, visitedDirectories = new Set()) {
314
+ const root = rootRealPath ?? await realpath(base);
315
+ const realDir = await realpath(dir);
316
+ ensureInsideVault(root, realDir, `Vault directory "${dir}"`);
317
+ if (visitedDirectories.has(realDir))
318
+ return;
319
+ visitedDirectories.add(realDir);
320
+ const entries = await readdir(dir, { withFileTypes: true });
321
+ for (const entry of entries) {
322
+ const fullPath = path.join(dir, entry.name);
323
+ const realEntry = await realpath(fullPath);
324
+ ensureInsideVault(root, realEntry, `Vault entry "${fullPath}"`);
325
+ if (AXIS_SKIP_DIRS.has(entry.name) || entry.name.startsWith("."))
326
+ continue;
327
+ const entryStat = await stat(fullPath);
328
+ if (entryStat.isDirectory()) {
329
+ yield* walkVaultMarkdownStrict(fullPath, base, root, visitedDirectories);
330
+ }
331
+ else if (entryStat.isFile() && entry.name.toLowerCase().endsWith(".md")) {
332
+ yield path.relative(base, fullPath).replace(/\\/g, "/");
333
+ }
334
+ }
335
+ }
336
+ /** Scan markdown into the dedicated EAV cache. Malformed YAML is loud. */
337
+ export async function collectVaultAxisObservations(vault, suppliedStore) {
338
+ const ownsStore = suppliedStore === undefined;
339
+ let store = suppliedStore;
340
+ const liveNotes = new Set();
341
+ const sourceFiles = new Map();
342
+ const parsedNotes = [];
343
+ try {
344
+ // Read and parse the complete source set before touching the existing
345
+ // snapshot. This keeps read/parse failures from exposing a partial scan.
346
+ for await (const notePath of walkVaultMarkdownStrict(vault, vault)) {
347
+ const raw = await readFile(path.join(vault, notePath), "utf-8");
348
+ sourceFiles.set(notePath, Buffer.from(raw, "utf8"));
349
+ const parsed = parseNote(raw);
350
+ if (parsed.diagnostics.length > 0) {
351
+ throw new Error(`${notePath}: malformed frontmatter (${parsed.diagnostics.map((item) => item.message).join("; ")})`);
352
+ }
353
+ liveNotes.add(notePath);
354
+ parsedNotes.push({ notePath, parsed });
355
+ }
356
+ const digest = createHash("sha256");
357
+ for (const notePath of [...sourceFiles.keys()].sort()) {
358
+ digest.update(notePath);
359
+ digest.update("\0");
360
+ digest.update(sourceFiles.get(notePath));
361
+ digest.update("\0");
362
+ }
363
+ // Do not create or open the derived database until the complete source
364
+ // scan has succeeded. A failed first scan must not publish an empty cache.
365
+ if (store === undefined) {
366
+ await ensureAxisStoreDirectory(vault);
367
+ store = openVaultAxisStore(vault);
368
+ }
369
+ const activeStore = store;
370
+ activeStore.runInTransaction(() => {
371
+ for (const { notePath, parsed } of parsedNotes) {
372
+ activeStore.replaceNote(notePath, parsed.frontmatter, {
373
+ folder: firstFolder(notePath),
374
+ links: extractLinks(parsed.body),
375
+ });
376
+ }
377
+ // A scan is a reconciliation, not an append-only import. Remove rows
378
+ // for notes that were present in an earlier snapshot but no longer
379
+ // exist.
380
+ const staleNotes = new Set(activeStore.list().map((observation) => observation.notePath));
381
+ for (const notePath of staleNotes) {
382
+ if (!liveNotes.has(notePath))
383
+ activeStore.deleteNote(notePath);
384
+ }
385
+ activeStore.setSourceSignature(digest.digest("hex"));
386
+ });
387
+ return activeStore;
388
+ }
389
+ catch (error) {
390
+ if (ownsStore)
391
+ store?.close();
392
+ throw error;
393
+ }
394
+ }
395
+ // `mkdir` is intentionally kept in the module so callers can create an empty
396
+ // cache path without touching the embedding engine store.
397
+ export async function ensureAxisStoreDirectory(vault) {
398
+ await mkdir(path.dirname(axisStorePath(vault)), { recursive: true });
399
+ }
400
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/kernel/engine/axes/store.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,21 @@
1
1
  import { type EmbeddingIdentity } from "./store.js";
2
+ /**
3
+ * The five model-shape fields are part of the fingerprint. Provider/model
4
+ * remain explicit labels as well, so changing either the runtime or model
5
+ * cannot silently reuse vectors produced by another configuration.
6
+ */
7
+ export interface EmbeddingShapeIdentity {
8
+ readonly dimensions: number;
9
+ readonly contextLength: number;
10
+ readonly mrlDim: number;
11
+ readonly normalization: string;
12
+ readonly prefixScheme: string;
13
+ }
2
14
  export declare function fingerprintEmbeddingIdentity(input: {
3
15
  provider: string;
4
16
  model: string;
5
- dimensions: number;
6
- }): string;
17
+ } & EmbeddingShapeIdentity): string;
7
18
  export declare function makeEmbeddingIdentity(input: {
8
19
  provider: string;
9
20
  model: string;
10
- dimensions: number;
11
- }): EmbeddingIdentity;
21
+ } & EmbeddingShapeIdentity): EmbeddingIdentity;
@@ -1,14 +1,46 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { ENGINE_EMBED_META_VERSION } from "./store.js";
3
+ function assertShape(input) {
4
+ if (!Number.isInteger(input.dimensions) || input.dimensions <= 0) {
5
+ throw new Error("Embedding identity dimensions must be a positive integer.");
6
+ }
7
+ if (!Number.isInteger(input.contextLength) || input.contextLength <= 0) {
8
+ throw new Error("Embedding identity contextLength must be a positive integer.");
9
+ }
10
+ if (!Number.isInteger(input.mrlDim) || input.mrlDim < 0) {
11
+ throw new Error("Embedding identity mrlDim must be a non-negative integer.");
12
+ }
13
+ if (typeof input.normalization !== "string" || input.normalization.trim() === "") {
14
+ throw new Error("Embedding identity normalization is required.");
15
+ }
16
+ if (typeof input.prefixScheme !== "string" || input.prefixScheme.trim() === "") {
17
+ throw new Error("Embedding identity prefixScheme is required.");
18
+ }
19
+ }
3
20
  export function fingerprintEmbeddingIdentity(input) {
4
- const raw = [ENGINE_EMBED_META_VERSION, input.provider, input.model, String(input.dimensions)].join("\u0000");
21
+ assertShape(input);
22
+ const raw = [
23
+ ENGINE_EMBED_META_VERSION,
24
+ input.provider,
25
+ input.model,
26
+ String(input.dimensions),
27
+ String(input.contextLength),
28
+ String(input.mrlDim),
29
+ input.normalization,
30
+ input.prefixScheme,
31
+ ].join("\u0000");
5
32
  return createHash("sha256").update(raw).digest("hex");
6
33
  }
7
34
  export function makeEmbeddingIdentity(input) {
35
+ assertShape(input);
8
36
  return {
9
37
  provider: input.provider,
10
38
  model: input.model,
11
39
  dimensions: input.dimensions,
40
+ contextLength: input.contextLength,
41
+ mrlDim: input.mrlDim,
42
+ normalization: input.normalization,
43
+ prefixScheme: input.prefixScheme,
12
44
  fingerprint: fingerprintEmbeddingIdentity(input),
13
45
  };
14
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/kernel/engine/embed/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAE/E,MAAM,UAAU,4BAA4B,CAAC,KAI5C;IACC,MAAM,GAAG,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9G,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAIrC;IACC,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,4BAA4B,CAAC,KAAK,CAAC;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/kernel/engine/embed/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAe/E,SAAS,WAAW,CAAC,KAA6B;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAGnB;IACxB,WAAW,CAAC,KAAK,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG;QACV,yBAAyB;QACzB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,KAAK;QACX,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACpB,KAAK,CAAC,aAAa;QACnB,KAAK,CAAC,YAAY;KACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAGZ;IACxB,WAAW,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,4BAA4B,CAAC,KAAK,CAAC;KACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,134 @@
1
+ /** The canonical environment variables for selecting an embedding model. */
2
+ export declare const EMBEDDING_PROVIDER_ENV: "OMS_EMBEDDING_PROVIDER";
3
+ export declare const EMBEDDING_MODEL_ENV: "OMS_EMBEDDING_MODEL";
4
+ export declare const INSTALLED_DEFAULT_DESCRIPTOR = "default-model.json";
5
+ export declare const CAPABILITY_RECEIPT = "capability-receipt.json";
6
+ /** Metadata needed to use an installed embedding model. */
7
+ export interface EmbeddingModelDescriptor {
8
+ readonly provider: string;
9
+ /** Provider model id. For local providers this may be a filename. */
10
+ readonly model: string;
11
+ /** Absolute path to a locally installed model, when applicable. */
12
+ readonly path?: string;
13
+ /** Alias accepted in descriptors produced by setup adapters. */
14
+ readonly modelPath?: string;
15
+ /** Source URL used by setup, when this model was acquired. */
16
+ readonly url?: string;
17
+ /** SHA-256 digest of the installed bytes, lowercase hexadecimal. */
18
+ readonly sha256?: string;
19
+ readonly dimensions?: number;
20
+ /** Canonical model context window in tokens. */
21
+ readonly context?: number;
22
+ /** Canonical context-length alias used by some setup adapters. */
23
+ readonly contextLength?: number;
24
+ readonly contextTokens?: number;
25
+ /** Optional Matryoshka (MRL) output width. */
26
+ readonly mrlDim?: number;
27
+ /** Declared output-vector normalization scheme. */
28
+ readonly normalization?: string;
29
+ /** Declared query/passage prefix scheme. */
30
+ readonly prefixScheme?: string;
31
+ /** Optional filename used for the cache artifact. */
32
+ readonly filename?: string;
33
+ }
34
+ export type ModelResolutionSource = "configured" | "installed-default" | "none";
35
+ export interface EmbeddingCapabilityReceipt {
36
+ readonly kind: "embedding-capability";
37
+ readonly available: boolean;
38
+ readonly source: ModelResolutionSource | "setup";
39
+ readonly provider?: string;
40
+ readonly model?: string;
41
+ readonly modelPath?: string;
42
+ readonly cachePath?: string;
43
+ readonly sha256?: string;
44
+ readonly dimensions?: number;
45
+ readonly context?: number;
46
+ readonly contextLength?: number;
47
+ readonly contextTokens?: number;
48
+ readonly mrlDim?: number;
49
+ readonly normalization?: string;
50
+ readonly prefixScheme?: string;
51
+ readonly guidance: string;
52
+ }
53
+ export interface EmbeddingModelResolution {
54
+ readonly available: boolean;
55
+ readonly source: ModelResolutionSource;
56
+ readonly provider?: string;
57
+ readonly model?: string;
58
+ readonly modelPath?: string;
59
+ readonly descriptor?: EmbeddingModelDescriptor;
60
+ readonly receipt: EmbeddingCapabilityReceipt;
61
+ }
62
+ export interface ResolveEmbeddingModelOptions {
63
+ /** Environment snapshot. Defaults to process.env. */
64
+ readonly env?: Readonly<Record<string, string | undefined>>;
65
+ /** Installed descriptor to use when the canonical env pair is absent. */
66
+ readonly installedDefault?: EmbeddingModelDescriptor | null;
67
+ /** Alias accepted for callers that call the descriptor a default model. */
68
+ readonly defaultModel?: EmbeddingModelDescriptor | null;
69
+ /** Optional cache root for automatic installed-default discovery. */
70
+ readonly cacheDir?: string;
71
+ }
72
+ /**
73
+ * Resolve the one canonical embedding selection.
74
+ *
75
+ * A complete environment pair always wins. A half-pair is an error rather than
76
+ * an invitation to silently use a different model. If neither environment
77
+ * variable is set, an explicitly supplied installed descriptor is used, then
78
+ * the result is an honest unavailable capability.
79
+ */
80
+ export declare function resolveEmbeddingModel(options?: ResolveEmbeddingModelOptions): EmbeddingModelResolution;
81
+ /** Short alias for code that refers to this operation as model resolution. */
82
+ export declare const resolveModel: typeof resolveEmbeddingModel;
83
+ /**
84
+ * Cache root for downloaded model bytes. It is deliberately user-level and
85
+ * never derived from a vault path. `cacheDir` can be supplied by setup/tests.
86
+ */
87
+ export declare function embeddingModelCacheDir(options?: {
88
+ readonly cacheDir?: string;
89
+ readonly env?: Readonly<Record<string, string | undefined>>;
90
+ readonly homeDir?: string;
91
+ }): string;
92
+ export declare const getEmbeddingModelCacheDir: typeof embeddingModelCacheDir;
93
+ /** Read the setup-written descriptor synchronously for engine assembly. */
94
+ export declare function readInstalledEmbeddingDefaultSync(options?: {
95
+ readonly cacheDir?: string;
96
+ }): EmbeddingModelDescriptor | null;
97
+ export interface AcquireEmbeddingModelOptions {
98
+ /** Descriptor must include URL and expected SHA-256 for setup acquisition. */
99
+ readonly descriptor: EmbeddingModelDescriptor & {
100
+ readonly url: string;
101
+ readonly sha256: string;
102
+ };
103
+ /** Optional explicit cache root. It must be outside `vault`, when provided. */
104
+ readonly cacheDir?: string;
105
+ /** Used only to reject an accidental cache path inside the vault. */
106
+ readonly vault?: string;
107
+ /** Injection point for focused tests; production uses the global fetch. */
108
+ readonly fetchImpl?: typeof fetch;
109
+ }
110
+ export interface AcquiredEmbeddingModel {
111
+ readonly descriptor: EmbeddingModelDescriptor;
112
+ readonly modelPath: string;
113
+ readonly cachePath: string;
114
+ readonly receipt: EmbeddingCapabilityReceipt;
115
+ }
116
+ /**
117
+ * Download and install a model for setup only.
118
+ *
119
+ * This function is intentionally not imported by the MCP server. It writes
120
+ * only to the user-level model cache, verifies bytes before publishing them,
121
+ * and leaves an installed-default descriptor plus capability receipt there for
122
+ * future model resolution.
123
+ */
124
+ export declare function acquireEmbeddingModel(options: AcquireEmbeddingModelOptions): Promise<AcquiredEmbeddingModel>;
125
+ /** Read the setup-written default descriptor without touching a vault. */
126
+ export declare function readInstalledEmbeddingDefault(options?: {
127
+ readonly cacheDir?: string;
128
+ }): Promise<EmbeddingModelDescriptor | null>;
129
+ /** Async resolver that consults the setup cache when no env pair is present. */
130
+ export declare function resolveEmbeddingModelFromCache(options?: {
131
+ readonly env?: Readonly<Record<string, string | undefined>>;
132
+ readonly cacheDir?: string;
133
+ }): Promise<EmbeddingModelResolution>;
134
+ export declare const resolveModelFromCache: typeof resolveEmbeddingModelFromCache;