codesift-mcp 0.8.10 → 0.8.11
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.
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +2 -1
- package/dist/cli/hooks.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +39 -1
- package/dist/register-tools.js.map +1 -1
- package/dist/search/model2vec-tokenize.d.ts +22 -0
- package/dist/search/model2vec-tokenize.d.ts.map +1 -0
- package/dist/search/model2vec-tokenize.js +140 -0
- package/dist/search/model2vec-tokenize.js.map +1 -0
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +7 -0
- package/dist/search/semantic.js.map +1 -1
- package/dist/search/static-embedding-provider.d.ts +24 -0
- package/dist/search/static-embedding-provider.d.ts.map +1 -0
- package/dist/search/static-embedding-provider.js +149 -0
- package/dist/search/static-embedding-provider.js.map +1 -0
- package/dist/storage/_shared.d.ts.map +1 -1
- package/dist/storage/_shared.js +4 -1
- package/dist/storage/_shared.js.map +1 -1
- package/dist/storage/hash-snapshot.d.ts +36 -0
- package/dist/storage/hash-snapshot.d.ts.map +1 -0
- package/dist/storage/hash-snapshot.js +101 -0
- package/dist/storage/hash-snapshot.js.map +1 -0
- package/dist/storage/usage-stats.d.ts +8 -0
- package/dist/storage/usage-stats.d.ts.map +1 -1
- package/dist/storage/usage-stats.js +74 -24
- package/dist/storage/usage-stats.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts +16 -0
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +23 -3
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/index-tools.d.ts +31 -2
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +460 -33
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/pg-introspect-tools.d.ts +147 -0
- package/dist/tools/pg-introspect-tools.d.ts.map +1 -0
- package/dist/tools/pg-introspect-tools.js +396 -0
- package/dist/tools/pg-introspect-tools.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/hf-download-stream.d.ts +21 -0
- package/dist/utils/hf-download-stream.d.ts.map +1 -0
- package/dist/utils/hf-download-stream.js +101 -0
- package/dist/utils/hf-download-stream.js.map +1 -0
- package/dist/utils/hf-hub-download.d.ts +8 -0
- package/dist/utils/hf-hub-download.d.ts.map +1 -0
- package/dist/utils/hf-hub-download.js +149 -0
- package/dist/utils/hf-hub-download.js.map +1 -0
- package/dist/utils/safetensors-loader.d.ts +9 -0
- package/dist/utils/safetensors-loader.d.ts.map +1 -0
- package/dist/utils/safetensors-loader.js +95 -0
- package/dist/utils/safetensors-loader.js.map +1 -0
- package/dist/utils/safetensors-meta-guard.d.ts +7 -0
- package/dist/utils/safetensors-meta-guard.d.ts.map +1 -0
- package/dist/utils/safetensors-meta-guard.js +50 -0
- package/dist/utils/safetensors-meta-guard.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a HF tokenizer.json vocab map, tolerating both the nested WordPiece shape
|
|
3
|
+
* `{ model: { vocab: {...} } }` and the flat `{ vocab: {...} }` shape. Throws a
|
|
4
|
+
* descriptive error when no usable map is present (CQ8: external file, validated).
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseVocab(raw: unknown): Map<string, number>;
|
|
7
|
+
/**
|
|
8
|
+
* Code-aware pre-split + greedy longest-match (max-munch) SUBWORD tokenization.
|
|
9
|
+
* Real Model2Vec/potion vocabs are subword vocabs, so naive whole-word lookup
|
|
10
|
+
* would catastrophically OOV. Whole words are tried first (fast path); otherwise
|
|
11
|
+
* each word is split into the longest vocab pieces, honoring the WordPiece "##"
|
|
12
|
+
* continuation convention. OOV pieces (and ids outside the matrix) are skipped,
|
|
13
|
+
* not errored. Returns the matched row indices in order.
|
|
14
|
+
*/
|
|
15
|
+
export declare function tokenize(text: string, vocab: Map<string, number>, rows: number): number[];
|
|
16
|
+
/**
|
|
17
|
+
* Mean-pool the matched rows, then L2-normalize. With no matched rows (empty /
|
|
18
|
+
* OOV-only input) the mean is the zero vector; normalization leaves it zero
|
|
19
|
+
* (never divides by zero — guards against NaN).
|
|
20
|
+
*/
|
|
21
|
+
export declare function embedOne(rowIds: number[], matrix: Float32Array, cols: number): number[];
|
|
22
|
+
//# sourceMappingURL=model2vec-tokenize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model2vec-tokenize.d.ts","sourceRoot":"","sources":["../../src/search/model2vec-tokenize.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB5D;AAkED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQzF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAkBV"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Model2Vec tokenization helpers — extracted from static-embedding-provider.ts.
|
|
2
|
+
//
|
|
3
|
+
// All logic here is pure (no I/O, no caching). The provider imports these to
|
|
4
|
+
// keep its own line count inside the project's 100-exec-line cap.
|
|
5
|
+
/**
|
|
6
|
+
* Parse a HF tokenizer.json vocab map, tolerating both the nested WordPiece shape
|
|
7
|
+
* `{ model: { vocab: {...} } }` and the flat `{ vocab: {...} }` shape. Throws a
|
|
8
|
+
* descriptive error when no usable map is present (CQ8: external file, validated).
|
|
9
|
+
*/
|
|
10
|
+
export function parseVocab(raw) {
|
|
11
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
12
|
+
throw new Error("static-embedding: tokenizer.json must be a JSON object");
|
|
13
|
+
const obj = raw;
|
|
14
|
+
const model = obj["model"];
|
|
15
|
+
const nested = model && typeof model === "object" && !Array.isArray(model)
|
|
16
|
+
? model["vocab"]
|
|
17
|
+
: undefined;
|
|
18
|
+
const flat = obj["vocab"];
|
|
19
|
+
const vocabRaw = nested ?? flat;
|
|
20
|
+
if (!vocabRaw || typeof vocabRaw !== "object" || Array.isArray(vocabRaw))
|
|
21
|
+
throw new Error("static-embedding: tokenizer.json missing a usable vocab map");
|
|
22
|
+
const vocab = new Map();
|
|
23
|
+
for (const [token, id] of Object.entries(vocabRaw)) {
|
|
24
|
+
if (typeof id === "number" && Number.isInteger(id) && id >= 0) {
|
|
25
|
+
vocab.set(token, id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (vocab.size === 0)
|
|
29
|
+
throw new Error("static-embedding: tokenizer.json vocab map is empty");
|
|
30
|
+
return vocab;
|
|
31
|
+
}
|
|
32
|
+
// Bound the max-munch window: the longest vocab key (minus any "##" prefix) per
|
|
33
|
+
// vocab, computed once and memoized so repeated tokenize calls don't rescan.
|
|
34
|
+
const maxKeyLenCache = new WeakMap();
|
|
35
|
+
function maxKeyLen(vocab) {
|
|
36
|
+
const cached = maxKeyLenCache.get(vocab);
|
|
37
|
+
if (cached !== undefined)
|
|
38
|
+
return cached;
|
|
39
|
+
let max = 1;
|
|
40
|
+
for (const k of vocab.keys()) {
|
|
41
|
+
const len = k.startsWith("##") ? k.length - 2 : k.length;
|
|
42
|
+
if (len > max)
|
|
43
|
+
max = len;
|
|
44
|
+
}
|
|
45
|
+
maxKeyLenCache.set(vocab, max);
|
|
46
|
+
return max;
|
|
47
|
+
}
|
|
48
|
+
// Code-aware pre-split: lowercase, break camelCase/PascalCase boundaries, split
|
|
49
|
+
// on snake_case/kebab/whitespace, and keep punctuation/symbol runs as their own
|
|
50
|
+
// candidate tokens (each char) instead of silently deleting them.
|
|
51
|
+
function preSplit(text) {
|
|
52
|
+
const withBoundaries = text
|
|
53
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2") // camelCase → camel Case
|
|
54
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2"); // HTTPServer → HTTP Server
|
|
55
|
+
const out = [];
|
|
56
|
+
// Words (letters+digits+combining marks) OR single punctuation/symbol chars.
|
|
57
|
+
// Underscores and hyphens act as word-separators AND are emitted as candidate
|
|
58
|
+
// punctuation tokens (matched when in vocab, OOV-dropped otherwise).
|
|
59
|
+
// Underscores are silently dropped (not emitted); hyphens are emitted as
|
|
60
|
+
// candidates so a "-" vocab entry is reachable.
|
|
61
|
+
const re = /[\p{L}\p{M}\p{N}]+|[\p{P}\p{S}]/gu;
|
|
62
|
+
for (const m of withBoundaries.toLowerCase().matchAll(re)) {
|
|
63
|
+
const tok = m[0];
|
|
64
|
+
if (tok !== "_")
|
|
65
|
+
out.push(tok);
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
// Greedy longest-match (max-munch) subword split of one word against the vocab,
|
|
70
|
+
// honoring WordPiece "##" continuation for non-initial pieces. Unmatched
|
|
71
|
+
// positions skip one char (don't abandon the whole word). Fully-unmatched word
|
|
72
|
+
// contributes nothing. Returns matched ids (after the id<rows guard).
|
|
73
|
+
function munch(word, vocab, rows, window) {
|
|
74
|
+
const fast = vocab.get(word); // whole-word fast path wins over decomposition
|
|
75
|
+
if (fast !== undefined && fast < rows)
|
|
76
|
+
return [fast]; // OOB id → fall through to munch
|
|
77
|
+
const ids = [];
|
|
78
|
+
let pos = 0;
|
|
79
|
+
while (pos < word.length) {
|
|
80
|
+
let matched = -1;
|
|
81
|
+
let end = Math.min(word.length, pos + window);
|
|
82
|
+
for (; end > pos; end--) {
|
|
83
|
+
const sub = word.slice(pos, end);
|
|
84
|
+
const key = pos === 0 ? sub : "##" + sub;
|
|
85
|
+
const id = vocab.get(key);
|
|
86
|
+
if (id !== undefined && id < rows) {
|
|
87
|
+
ids.push(id);
|
|
88
|
+
matched = end;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
pos = matched === -1 ? pos + 1 : matched; // skip one char on no match
|
|
93
|
+
}
|
|
94
|
+
return ids;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Code-aware pre-split + greedy longest-match (max-munch) SUBWORD tokenization.
|
|
98
|
+
* Real Model2Vec/potion vocabs are subword vocabs, so naive whole-word lookup
|
|
99
|
+
* would catastrophically OOV. Whole words are tried first (fast path); otherwise
|
|
100
|
+
* each word is split into the longest vocab pieces, honoring the WordPiece "##"
|
|
101
|
+
* continuation convention. OOV pieces (and ids outside the matrix) are skipped,
|
|
102
|
+
* not errored. Returns the matched row indices in order.
|
|
103
|
+
*/
|
|
104
|
+
export function tokenize(text, vocab, rows) {
|
|
105
|
+
text = text.normalize("NFC"); // ensure combining marks are composed before split
|
|
106
|
+
const window = maxKeyLen(vocab);
|
|
107
|
+
const ids = [];
|
|
108
|
+
for (const word of preSplit(text)) {
|
|
109
|
+
for (const id of munch(word, vocab, rows, window))
|
|
110
|
+
ids.push(id);
|
|
111
|
+
}
|
|
112
|
+
return ids;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Mean-pool the matched rows, then L2-normalize. With no matched rows (empty /
|
|
116
|
+
* OOV-only input) the mean is the zero vector; normalization leaves it zero
|
|
117
|
+
* (never divides by zero — guards against NaN).
|
|
118
|
+
*/
|
|
119
|
+
export function embedOne(rowIds, matrix, cols) {
|
|
120
|
+
const acc = new Array(cols).fill(0);
|
|
121
|
+
for (const rowId of rowIds) {
|
|
122
|
+
const base = rowId * cols;
|
|
123
|
+
for (let c = 0; c < cols; c++)
|
|
124
|
+
acc[c] += matrix[base + c];
|
|
125
|
+
}
|
|
126
|
+
if (rowIds.length > 0) {
|
|
127
|
+
for (let c = 0; c < cols; c++)
|
|
128
|
+
acc[c] /= rowIds.length;
|
|
129
|
+
}
|
|
130
|
+
let normSq = 0;
|
|
131
|
+
for (const v of acc)
|
|
132
|
+
normSq += v * v;
|
|
133
|
+
const norm = Math.sqrt(normSq);
|
|
134
|
+
if (norm > 0) {
|
|
135
|
+
for (let c = 0; c < cols; c++)
|
|
136
|
+
acc[c] /= norm;
|
|
137
|
+
}
|
|
138
|
+
return acc;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=model2vec-tokenize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model2vec-tokenize.js","sourceRoot":"","sources":["../../src/search/model2vec-tokenize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW5D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiB1D;AAMD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAiBzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,YAAY,EAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,IAAI,EAAE,MAAM,GACX,YAAY,EAAE,CAoBhB;AAsDD,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,KAAK,mBAAmB;IACjC,QAAQ,CAAC,UAAU,QAAQ;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAIpB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAQpF;AAMD,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,KAAK,4BAA4B;IAC1C,QAAQ,CAAC,UAAU,QAAQ;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAIpB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,aAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAQrF;AAMD,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,KAAK,sBAAsB;IACpC,QAAQ,CAAC,UAAU,OAAO;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAIrB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,aAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA+BrF;AAyBD,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAKpE;AAqED,qBAAa,aAAc,YAAW,iBAAiB;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,KAAK,GAAE,MAA4B,EAAE,UAAU,CAAC,EAAE,MAAM;IAK9D,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAsBpF;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAMD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,EAClD,MAAM,EAAE;IACN,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GACA,iBAAiB,CAsBnB"}
|
package/dist/search/semantic.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StaticEmbeddingProvider } from "./static-embedding-provider.js";
|
|
1
2
|
const MAX_SYMBOL_SOURCE_CHARS = 200;
|
|
2
3
|
const MAX_ERROR_DETAIL_CHARS = 200;
|
|
3
4
|
const EMBEDDING_TIMEOUT_MS = 30_000;
|
|
@@ -169,6 +170,8 @@ export class OllamaProvider {
|
|
|
169
170
|
// ---------------------------------------------------------------------------
|
|
170
171
|
const DEFAULT_LOCAL_MODEL = "nomic-ai/nomic-embed-text-v1.5";
|
|
171
172
|
const DEFAULT_LOCAL_DIMS = 768;
|
|
173
|
+
const STATIC_EMBEDDING_MODEL_PREFIX = "minishlab/potion";
|
|
174
|
+
const STATIC_EMBEDDING_MODEL_SUBSTRING = "model2vec";
|
|
172
175
|
/**
|
|
173
176
|
* Some open-weights instruction-tuned models require task-specific prefixes for
|
|
174
177
|
* the embeddings to be high quality (Nomic, intfloat/E5). Without these, MTEB
|
|
@@ -196,6 +199,7 @@ export function getPrefix(model, mode) {
|
|
|
196
199
|
* Falls back to {@link DEFAULT_LOCAL_DIMS} for unknown models.
|
|
197
200
|
*/
|
|
198
201
|
const KNOWN_LOCAL_DIMS = {
|
|
202
|
+
"minishlab/potion-code-16M": 256,
|
|
199
203
|
"nomic-ai/nomic-embed-text-v1.5": 768,
|
|
200
204
|
"nomic-ai/nomic-embed-text-v1": 768,
|
|
201
205
|
"Xenova/all-MiniLM-L6-v2": 384,
|
|
@@ -307,6 +311,9 @@ export function createEmbeddingProvider(provider, config) {
|
|
|
307
311
|
}
|
|
308
312
|
case "local": {
|
|
309
313
|
const model = config.localModel ?? DEFAULT_LOCAL_MODEL;
|
|
314
|
+
if (model.startsWith(STATIC_EMBEDDING_MODEL_PREFIX) || model.includes(STATIC_EMBEDDING_MODEL_SUBSTRING)) {
|
|
315
|
+
return new StaticEmbeddingProvider(model);
|
|
316
|
+
}
|
|
310
317
|
return new LocalProvider(model);
|
|
311
318
|
}
|
|
312
319
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EmbeddingProvider, EmbeddingMode } from "./semantic.js";
|
|
2
|
+
export declare const STATIC_FAILURE_COOLDOWN_MS = 60000;
|
|
3
|
+
export declare const _failedStaticModels: Map<string, number>;
|
|
4
|
+
export declare class StaticEmbeddingProvider implements EmbeddingProvider {
|
|
5
|
+
#private;
|
|
6
|
+
readonly model: string;
|
|
7
|
+
constructor(model: string, cacheDir?: string);
|
|
8
|
+
/**
|
|
9
|
+
* Before load: the known dimension from {@link KNOWN_STATIC_DIMS}. After the
|
|
10
|
+
* first successful embed: the real loaded matrix column count. They normally
|
|
11
|
+
* agree; the reconciliation keeps `dimensions` truthful when a model ships
|
|
12
|
+
* with a different width than the static table records.
|
|
13
|
+
*/
|
|
14
|
+
get dimensions(): number;
|
|
15
|
+
/**
|
|
16
|
+
* `mode` is accepted to satisfy the EmbeddingProvider contract but IGNORED:
|
|
17
|
+
* Model2Vec is a static lookup table, so query/document task prefixes (which
|
|
18
|
+
* Nomic/E5 need) do not apply.
|
|
19
|
+
*/
|
|
20
|
+
embed(texts: string[], _mode?: EmbeddingMode): Promise<number[][]>;
|
|
21
|
+
}
|
|
22
|
+
/** Reset static-provider module caches — for testing only. */
|
|
23
|
+
export declare function _resetStaticProviderForTesting(): void;
|
|
24
|
+
//# sourceMappingURL=static-embedding-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-embedding-provider.d.ts","sourceRoot":"","sources":["../../src/search/static-embedding-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAqCtE,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AA2E7D,qBAAa,uBAAwB,YAAW,iBAAiB;;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAIX,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAO5C;;;;;OAKG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,aAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAMrF;AAED,8DAA8D;AAC9D,wBAAgB,8BAA8B,IAAI,IAAI,CAKrD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Model2Vec / "static" embedding provider.
|
|
2
|
+
//
|
|
3
|
+
// Model2Vec models (e.g. minishlab/potion-code-16M) are NOT neural networks at
|
|
4
|
+
// inference time — they are a frozen token→vector lookup table. Embedding a text
|
|
5
|
+
// is: tokenize → gather the matched rows → mean-pool → L2-normalize. No ONNX
|
|
6
|
+
// runtime, no task prefixes (unlike Nomic/E5 — see comment on `embed`).
|
|
7
|
+
//
|
|
8
|
+
// Files come from the HF hub via Task 2's ensureModelFile and are parsed with
|
|
9
|
+
// Task 1's pure safetensors loader. Load is lazy (first embed) and process-cached,
|
|
10
|
+
// mirroring LocalProvider's module-cache + failedModels + warned pattern.
|
|
11
|
+
import { readFile } from "node:fs/promises";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { ensureModelFile } from "../utils/hf-hub-download.js";
|
|
14
|
+
import { parseSafetensors, getTensor } from "../utils/safetensors-loader.js";
|
|
15
|
+
import { loadConfig } from "../config.js";
|
|
16
|
+
import { parseVocab, tokenize, embedOne } from "./model2vec-tokenize.js";
|
|
17
|
+
const SAFETENSORS_FILE = "model.safetensors";
|
|
18
|
+
const TOKENIZER_FILE = "tokenizer.json";
|
|
19
|
+
/**
|
|
20
|
+
* Known output dimensions per static model id. Keeps `dimensions` honest BEFORE
|
|
21
|
+
* the matrix is loaded; after the first embed it is reconciled to the real
|
|
22
|
+
* loaded matrix column count (see {@link StaticEmbeddingProvider.dimensions}).
|
|
23
|
+
*/
|
|
24
|
+
const KNOWN_STATIC_DIMS = {
|
|
25
|
+
"minishlab/potion-code-16M": 256,
|
|
26
|
+
"minishlab/potion-base-8M": 256,
|
|
27
|
+
};
|
|
28
|
+
const DEFAULT_STATIC_DIMS = 256;
|
|
29
|
+
function lookupStaticDimensions(model) {
|
|
30
|
+
return KNOWN_STATIC_DIMS[model] ?? DEFAULT_STATIC_DIMS;
|
|
31
|
+
}
|
|
32
|
+
// Module-level cache: model weights are immutable, so one load per process per
|
|
33
|
+
// model is correct (no TTL needed — same lifecycle as LocalProvider's caches).
|
|
34
|
+
const staticModelCache = new Map();
|
|
35
|
+
// Promise cache: memoize in-flight load promises to prevent concurrent stampede.
|
|
36
|
+
const staticLoadPromises = new Map();
|
|
37
|
+
// Failure timestamps: model → timestamp of last failure (epoch ms).
|
|
38
|
+
// Fast-fail only within STATIC_FAILURE_COOLDOWN_MS to allow retry after transient errors.
|
|
39
|
+
export const STATIC_FAILURE_COOLDOWN_MS = 60_000;
|
|
40
|
+
export const _failedStaticModels = new Map();
|
|
41
|
+
let staticLoadWarned = false;
|
|
42
|
+
function defaultCacheDir() {
|
|
43
|
+
return join(loadConfig().dataDir, "models");
|
|
44
|
+
}
|
|
45
|
+
async function _doLoadStaticModel(model, cacheDir) {
|
|
46
|
+
try {
|
|
47
|
+
const [safetensorsPath, tokenizerPath] = await Promise.all([
|
|
48
|
+
ensureModelFile(model, SAFETENSORS_FILE, cacheDir),
|
|
49
|
+
ensureModelFile(model, TOKENIZER_FILE, cacheDir),
|
|
50
|
+
]);
|
|
51
|
+
const weightsBytes = await readFile(safetensorsPath);
|
|
52
|
+
const parsed = parseSafetensors(weightsBytes);
|
|
53
|
+
if (parsed.length === 0)
|
|
54
|
+
throw new Error("static-embedding: model.safetensors contains no tensors");
|
|
55
|
+
// Prefer a tensor named "embeddings"; fall back to the first entry.
|
|
56
|
+
let entry;
|
|
57
|
+
try {
|
|
58
|
+
entry = getTensor(parsed, "embeddings");
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
entry = parsed[0];
|
|
62
|
+
}
|
|
63
|
+
const [rows, cols] = entry.shape;
|
|
64
|
+
const tokenizerText = await readFile(tokenizerPath, "utf8");
|
|
65
|
+
let tokenizerRaw;
|
|
66
|
+
try {
|
|
67
|
+
tokenizerRaw = JSON.parse(tokenizerText);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
71
|
+
throw new Error(`static-embedding: malformed tokenizer.json — ${msg}`, { cause: err });
|
|
72
|
+
}
|
|
73
|
+
const vocab = parseVocab(tokenizerRaw);
|
|
74
|
+
const loaded = { matrix: entry.data, rows, cols, vocab };
|
|
75
|
+
staticModelCache.set(model, loaded);
|
|
76
|
+
return loaded;
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
// Record failure timestamp for cooldown-based retry.
|
|
80
|
+
_failedStaticModels.set(model, Date.now());
|
|
81
|
+
// Remove the in-flight promise so a later retry (after cooldown) can re-attempt.
|
|
82
|
+
staticLoadPromises.delete(model);
|
|
83
|
+
if (!staticLoadWarned) {
|
|
84
|
+
staticLoadWarned = true;
|
|
85
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
86
|
+
console.error(`[codesift] Static embedding model ${model} unavailable: ${msg}.`);
|
|
87
|
+
}
|
|
88
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
89
|
+
throw new Error(`static-embedding: failed to load model ${model}: ${msg}`, { cause: err });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function loadStaticModel(model, cacheDir) {
|
|
93
|
+
const cached = staticModelCache.get(model);
|
|
94
|
+
if (cached)
|
|
95
|
+
return cached;
|
|
96
|
+
// Fast-fail within cooldown window — prevents hammering a known-bad model.
|
|
97
|
+
const failedAt = _failedStaticModels.get(model);
|
|
98
|
+
if (failedAt !== undefined && Date.now() - failedAt < STATIC_FAILURE_COOLDOWN_MS) {
|
|
99
|
+
throw new Error(`static-embedding: model ${model} previously failed to load`);
|
|
100
|
+
}
|
|
101
|
+
// Memoize the in-flight promise to prevent concurrent stampede:
|
|
102
|
+
// register synchronously before awaiting so concurrent callers share one load.
|
|
103
|
+
const existing = staticLoadPromises.get(model);
|
|
104
|
+
if (existing)
|
|
105
|
+
return existing;
|
|
106
|
+
const promise = _doLoadStaticModel(model, cacheDir);
|
|
107
|
+
staticLoadPromises.set(model, promise);
|
|
108
|
+
return promise;
|
|
109
|
+
}
|
|
110
|
+
export class StaticEmbeddingProvider {
|
|
111
|
+
model;
|
|
112
|
+
#cacheDir;
|
|
113
|
+
#realDims = null;
|
|
114
|
+
constructor(model, cacheDir) {
|
|
115
|
+
if (!model || !model.trim())
|
|
116
|
+
throw new Error("static-embedding: model id must not be empty");
|
|
117
|
+
this.model = model;
|
|
118
|
+
this.#cacheDir = cacheDir ?? defaultCacheDir();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Before load: the known dimension from {@link KNOWN_STATIC_DIMS}. After the
|
|
122
|
+
* first successful embed: the real loaded matrix column count. They normally
|
|
123
|
+
* agree; the reconciliation keeps `dimensions` truthful when a model ships
|
|
124
|
+
* with a different width than the static table records.
|
|
125
|
+
*/
|
|
126
|
+
get dimensions() {
|
|
127
|
+
return this.#realDims ?? lookupStaticDimensions(this.model);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* `mode` is accepted to satisfy the EmbeddingProvider contract but IGNORED:
|
|
131
|
+
* Model2Vec is a static lookup table, so query/document task prefixes (which
|
|
132
|
+
* Nomic/E5 need) do not apply.
|
|
133
|
+
*/
|
|
134
|
+
async embed(texts, _mode = "document") {
|
|
135
|
+
if (texts.length === 0)
|
|
136
|
+
return [];
|
|
137
|
+
const loaded = await loadStaticModel(this.model, this.#cacheDir);
|
|
138
|
+
this.#realDims = loaded.cols;
|
|
139
|
+
return texts.map((text) => embedOne(tokenize(text, loaded.vocab, loaded.rows), loaded.matrix, loaded.cols));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Reset static-provider module caches — for testing only. */
|
|
143
|
+
export function _resetStaticProviderForTesting() {
|
|
144
|
+
staticModelCache.clear();
|
|
145
|
+
staticLoadPromises.clear();
|
|
146
|
+
_failedStaticModels.clear();
|
|
147
|
+
staticLoadWarned = false;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=static-embedding-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-embedding-provider.js","sourceRoot":"","sources":["../../src/search/static-embedding-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/storage/_shared.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/storage/_shared.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
package/dist/storage/_shared.js
CHANGED
|
@@ -10,7 +10,10 @@ import { dirname } from "node:path";
|
|
|
10
10
|
export async function atomicWriteFile(targetPath, content) {
|
|
11
11
|
const dir = dirname(targetPath);
|
|
12
12
|
await mkdir(dir, { recursive: true });
|
|
13
|
-
|
|
13
|
+
// pid + random: Date.now() alone collides when two writers (parallel test
|
|
14
|
+
// workers, concurrent MCP server instances) hit the same target in the same
|
|
15
|
+
// millisecond — the loser's rename then fails with ENOENT.
|
|
16
|
+
const tmpPath = `${targetPath}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}`;
|
|
14
17
|
try {
|
|
15
18
|
await writeFile(tmpPath, content, "utf-8");
|
|
16
19
|
await rename(tmpPath, targetPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/storage/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAAe;IAEf,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/storage/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAAe;IAEf,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,0EAA0E;IAC1E,4EAA4E;IAC5E,2DAA2D;IAC3D,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAE3G,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const HASH_SNAPSHOT_VERSION = 1;
|
|
2
|
+
export interface FileHashSnapshot {
|
|
3
|
+
version: 1;
|
|
4
|
+
repo: string;
|
|
5
|
+
created_at: number;
|
|
6
|
+
files: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Convert an index path to its companion snapshot path.
|
|
10
|
+
* e.g. "/x/abc123.index.json" → "/x/abc123.snapshot.json"
|
|
11
|
+
*
|
|
12
|
+
* Throws if indexPath does not end with ".index.json" (safety guard against
|
|
13
|
+
* accidentally overwriting the wrong file).
|
|
14
|
+
*/
|
|
15
|
+
export declare function getSnapshotPath(indexPath: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Write a FileHashSnapshot atomically.
|
|
18
|
+
*/
|
|
19
|
+
export declare function saveHashSnapshot(path: string, snap: FileHashSnapshot): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Load a FileHashSnapshot from disk.
|
|
22
|
+
* Returns null when:
|
|
23
|
+
* - the file does not exist
|
|
24
|
+
* - the file contains invalid JSON
|
|
25
|
+
* - the stored version !== 1
|
|
26
|
+
* - expectedRepo is provided and does not match snapshot.repo
|
|
27
|
+
*
|
|
28
|
+
* Non-ENOENT file read errors are logged as a warning before returning null.
|
|
29
|
+
* JSON parse errors are silent (expected corruption path).
|
|
30
|
+
*/
|
|
31
|
+
export declare function loadHashSnapshot(path: string, expectedRepo?: string): Promise<FileHashSnapshot | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Delete a snapshot file idempotently — never throws if the file is absent.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deleteHashSnapshot(path: string): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=hash-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-snapshot.d.ts","sourceRoot":"","sources":["../../src/storage/hash-snapshot.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkClC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { readFile, unlink } from "node:fs/promises";
|
|
2
|
+
import { atomicWriteFile } from "./_shared.js";
|
|
3
|
+
export const HASH_SNAPSHOT_VERSION = 1;
|
|
4
|
+
/**
|
|
5
|
+
* Convert an index path to its companion snapshot path.
|
|
6
|
+
* e.g. "/x/abc123.index.json" → "/x/abc123.snapshot.json"
|
|
7
|
+
*
|
|
8
|
+
* Throws if indexPath does not end with ".index.json" (safety guard against
|
|
9
|
+
* accidentally overwriting the wrong file).
|
|
10
|
+
*/
|
|
11
|
+
export function getSnapshotPath(indexPath) {
|
|
12
|
+
if (!indexPath.endsWith(".index.json")) {
|
|
13
|
+
throw new Error(`hash-snapshot: expected an .index.json path, got "${indexPath}"`);
|
|
14
|
+
}
|
|
15
|
+
return indexPath.replace(/\.index\.json$/, ".snapshot.json");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Write a FileHashSnapshot atomically.
|
|
19
|
+
*/
|
|
20
|
+
export async function saveHashSnapshot(path, snap) {
|
|
21
|
+
const data = JSON.stringify(snap);
|
|
22
|
+
await atomicWriteFile(path, data);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load a FileHashSnapshot from disk.
|
|
26
|
+
* Returns null when:
|
|
27
|
+
* - the file does not exist
|
|
28
|
+
* - the file contains invalid JSON
|
|
29
|
+
* - the stored version !== 1
|
|
30
|
+
* - expectedRepo is provided and does not match snapshot.repo
|
|
31
|
+
*
|
|
32
|
+
* Non-ENOENT file read errors are logged as a warning before returning null.
|
|
33
|
+
* JSON parse errors are silent (expected corruption path).
|
|
34
|
+
*/
|
|
35
|
+
export async function loadHashSnapshot(path, expectedRepo) {
|
|
36
|
+
let raw;
|
|
37
|
+
try {
|
|
38
|
+
raw = await readFile(path, "utf-8");
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
// ENOENT = expected case (file doesn't exist yet). Other errors = log & degrade.
|
|
42
|
+
const errno = err?.code;
|
|
43
|
+
if (errno !== "ENOENT") {
|
|
44
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
45
|
+
console.warn(`[codesift] hash-snapshot load failed (degrading to full re-parse): ${msg}`);
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(raw);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// JSON parse errors are silent (corruption is expected & recoverable)
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
if (!isValidSnapshot(parsed)) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (expectedRepo !== undefined && parsed.repo !== expectedRepo) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return parsed;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Delete a snapshot file idempotently — never throws if the file is absent.
|
|
67
|
+
*/
|
|
68
|
+
export async function deleteHashSnapshot(path) {
|
|
69
|
+
try {
|
|
70
|
+
await unlink(path);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// ENOENT = already gone, which is fine. Re-throw anything else.
|
|
74
|
+
if (err.code !== "ENOENT") {
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function isValidSnapshot(value) {
|
|
80
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const obj = value;
|
|
84
|
+
if (obj["version"] !== HASH_SNAPSHOT_VERSION)
|
|
85
|
+
return false;
|
|
86
|
+
if (typeof obj["repo"] !== "string")
|
|
87
|
+
return false;
|
|
88
|
+
if (typeof obj["created_at"] !== "number")
|
|
89
|
+
return false;
|
|
90
|
+
const files = obj["files"];
|
|
91
|
+
if (typeof files !== "object" || files === null || Array.isArray(files)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
// All values in files must be strings
|
|
95
|
+
for (const v of Object.values(files)) {
|
|
96
|
+
if (typeof v !== "string")
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=hash-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-snapshot.js","sourceRoot":"","sources":["../../src/storage/hash-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AASvC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,qDAAqD,SAAS,GAAG,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,IAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,YAAqB;IAErB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,iFAAiF;QACjF,MAAM,KAAK,GAAI,GAA6B,EAAE,IAAI,CAAC;QACnD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CACV,sEAAsE,GAAG,EAAE,CAC5E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,gEAAgE;QAChE,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAC;IAE7C,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,qBAAqB;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|