@dawn-ai/memory-pgvector 0.8.9
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/LICENSE +21 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/pgvector-store.d.ts +29 -0
- package/dist/pgvector-store.d.ts.map +1 -0
- package/dist/pgvector-store.js +294 -0
- package/dist/queries.d.ts +10 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +76 -0
- package/dist/schema.d.ts +22 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +42 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +51 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Brian Love
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type MemoryStore, type RecallRankingOptions, type VectorRankingOptions } from "@dawn-ai/memory";
|
|
2
|
+
import { Pool } from "pg";
|
|
3
|
+
export interface PgvectorMemoryStore extends MemoryStore {
|
|
4
|
+
/** Close the underlying pool. No-op if an external pool was injected. */
|
|
5
|
+
close(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function pgvectorMemoryStore(opts: {
|
|
8
|
+
/** Postgres connection string; used to build an owned pool. */
|
|
9
|
+
connectionString?: string;
|
|
10
|
+
/** An existing pool to use instead of building one from `connectionString`. */
|
|
11
|
+
pool?: Pool;
|
|
12
|
+
/** Embedding dimensions (≤2000 → `vector`, ≤4000 → `halfvec`). */
|
|
13
|
+
dimensions: number;
|
|
14
|
+
/** HNSW index/search tuning; all fields defaulted. */
|
|
15
|
+
index?: {
|
|
16
|
+
m?: number;
|
|
17
|
+
efConstruction?: number;
|
|
18
|
+
efSearch?: number;
|
|
19
|
+
};
|
|
20
|
+
/** Postgres schema to place tables in. */
|
|
21
|
+
schema?: string;
|
|
22
|
+
/** Table name prefix (isolates multiple stores in one database). */
|
|
23
|
+
tablePrefix?: string;
|
|
24
|
+
/** Recall ranking tuning; all fields defaulted. See @dawn-ai/memory score.ts. */
|
|
25
|
+
recall?: RecallRankingOptions;
|
|
26
|
+
/** Store-level hybrid tuning; used when a query omits `vector`. All fields defaulted. */
|
|
27
|
+
vector?: VectorRankingOptions;
|
|
28
|
+
}): PgvectorMemoryStore;
|
|
29
|
+
//# sourceMappingURL=pgvector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgvector-store.d.ts","sourceRoot":"","sources":["../src/pgvector-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAGzB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAA;AAgB1C,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,yEAAyE;IACzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,KAAK,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClE,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,yFAAyF;IACzF,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B,GAAG,mBAAmB,CAgWtB"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { DEFAULT_CANDIDATE_POOL, DEFAULT_VECTOR_K, fuseHybrid, rankKeywordCandidates, tokenize, } from "@dawn-ai/memory";
|
|
2
|
+
import { Pool } from "pg";
|
|
3
|
+
import pgvector from "pgvector/pg";
|
|
4
|
+
import { pageAndTagFilter, RECORD_COLUMNS, recordColumns, rowToRecord, tokensFor, } from "./queries.js";
|
|
5
|
+
import { assertIdentifier, initSchema } from "./schema.js";
|
|
6
|
+
// Default HNSW build/search parameters (pgvector defaults; overridable per store).
|
|
7
|
+
const DEFAULT_M = 16;
|
|
8
|
+
const DEFAULT_EF_CONSTRUCTION = 64;
|
|
9
|
+
const DEFAULT_EF_SEARCH = 40;
|
|
10
|
+
export function pgvectorMemoryStore(opts) {
|
|
11
|
+
const schema = opts.schema ?? "public";
|
|
12
|
+
const prefix = opts.tablePrefix ?? "dawn_memory";
|
|
13
|
+
assertIdentifier("schema", schema);
|
|
14
|
+
assertIdentifier("tablePrefix", prefix);
|
|
15
|
+
const m = opts.index?.m ?? DEFAULT_M;
|
|
16
|
+
const efConstruction = opts.index?.efConstruction ?? DEFAULT_EF_CONSTRUCTION;
|
|
17
|
+
const efSearch = opts.index?.efSearch ?? DEFAULT_EF_SEARCH;
|
|
18
|
+
// Fully-qualified table identifiers (both parts validated above).
|
|
19
|
+
const T = `${schema}.${prefix}_memories`;
|
|
20
|
+
const TK = `${schema}.${prefix}_tokens`;
|
|
21
|
+
const ownsPool = !opts.pool;
|
|
22
|
+
const pool = opts.pool ?? new Pool(opts.connectionString ? { connectionString: opts.connectionString } : {});
|
|
23
|
+
// Memoized idempotent schema init. Every method awaits ready() first so the
|
|
24
|
+
// first call to touch the store creates the extension/tables/indexes exactly
|
|
25
|
+
// once; concurrent callers share the single in-flight promise.
|
|
26
|
+
let initP;
|
|
27
|
+
function ready() {
|
|
28
|
+
initP ??= (async () => {
|
|
29
|
+
const c = await pool.connect();
|
|
30
|
+
try {
|
|
31
|
+
await initSchema(c, { prefix, schema, dimensions: opts.dimensions, m, efConstruction });
|
|
32
|
+
// Register pgvector type parsers on this connection (needs the extension
|
|
33
|
+
// to exist, which initSchema just guaranteed). New pool connections get
|
|
34
|
+
// registration via the "connect" handler below.
|
|
35
|
+
await pgvector.registerTypes(c);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
c.release();
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
return initP;
|
|
42
|
+
}
|
|
43
|
+
// Register vector type parsers on every future pooled connection. Safe once the
|
|
44
|
+
// extension exists; the very first connection is registered inside ready().
|
|
45
|
+
// Only attach to a pool WE built — an injected pool is the caller's to manage;
|
|
46
|
+
// we must not mutate its listeners.
|
|
47
|
+
if (ownsPool) {
|
|
48
|
+
pool.on("connect", (c) => {
|
|
49
|
+
pgvector.registerTypes(c).catch(() => {
|
|
50
|
+
// Extension not yet present on a brand-new database — ready() registers the
|
|
51
|
+
// first connection explicitly, so ignore the race here.
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// -------------------------------------------------------------------------
|
|
56
|
+
// Row-level helpers
|
|
57
|
+
// -------------------------------------------------------------------------
|
|
58
|
+
async function getById(id) {
|
|
59
|
+
const res = await pool.query(`SELECT ${RECORD_COLUMNS} FROM ${T} WHERE id = $1`, [id]);
|
|
60
|
+
const row = res.rows[0];
|
|
61
|
+
return row ? rowToRecord(row) : null;
|
|
62
|
+
}
|
|
63
|
+
// Roll back best-effort — a failing ROLLBACK must not mask the original error.
|
|
64
|
+
async function rollbackQuietly(client) {
|
|
65
|
+
try {
|
|
66
|
+
await client.query("ROLLBACK");
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Swallow: propagate the root-cause error from the caller's catch instead.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function reindex(client, rec) {
|
|
73
|
+
await client.query(`DELETE FROM ${TK} WHERE memory_id = $1`, [rec.id]);
|
|
74
|
+
for (const t of tokensFor(rec)) {
|
|
75
|
+
await client.query(`INSERT INTO ${TK} (memory_id, token) VALUES ($1, $2)`, [rec.id, t]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function putRecord(rec, embed) {
|
|
79
|
+
const hasEmbedding = Boolean(embed?.embedding && embed.embeddingModel);
|
|
80
|
+
const vec = hasEmbedding ? pgvector.toSql(Array.from(embed?.embedding ?? [])) : null;
|
|
81
|
+
const model = hasEmbedding ? (embed?.embeddingModel ?? null) : null;
|
|
82
|
+
const client = await pool.connect();
|
|
83
|
+
try {
|
|
84
|
+
await client.query("BEGIN");
|
|
85
|
+
await client.query(`INSERT INTO ${T}
|
|
86
|
+
(id,kind,namespace,content,data,source,confidence,tags,status,supersedes,created_at,updated_at,effective_at,expires_at,embedding,embedding_model)
|
|
87
|
+
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16)
|
|
88
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
89
|
+
kind = EXCLUDED.kind, namespace = EXCLUDED.namespace, content = EXCLUDED.content,
|
|
90
|
+
data = EXCLUDED.data, source = EXCLUDED.source, confidence = EXCLUDED.confidence,
|
|
91
|
+
tags = EXCLUDED.tags, status = EXCLUDED.status, supersedes = EXCLUDED.supersedes,
|
|
92
|
+
created_at = EXCLUDED.created_at, updated_at = EXCLUDED.updated_at,
|
|
93
|
+
effective_at = EXCLUDED.effective_at, expires_at = EXCLUDED.expires_at,
|
|
94
|
+
embedding = EXCLUDED.embedding, embedding_model = EXCLUDED.embedding_model`, [
|
|
95
|
+
rec.id,
|
|
96
|
+
rec.kind,
|
|
97
|
+
rec.namespace,
|
|
98
|
+
rec.content,
|
|
99
|
+
JSON.stringify(rec.data),
|
|
100
|
+
JSON.stringify(rec.source),
|
|
101
|
+
rec.confidence,
|
|
102
|
+
JSON.stringify(rec.tags),
|
|
103
|
+
rec.status,
|
|
104
|
+
rec.supersedes ? JSON.stringify(rec.supersedes) : null,
|
|
105
|
+
rec.createdAt,
|
|
106
|
+
rec.updatedAt,
|
|
107
|
+
rec.effectiveAt ?? null,
|
|
108
|
+
rec.expiresAt ?? null,
|
|
109
|
+
vec,
|
|
110
|
+
model,
|
|
111
|
+
]);
|
|
112
|
+
await reindex(client, rec);
|
|
113
|
+
await client.query("COMMIT");
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
await rollbackQuietly(client);
|
|
117
|
+
throw err;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
client.release();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Re-read a row's persisted embedding so update() does not drop it (putRecord
|
|
124
|
+
// rewrites the full row; without this the embedding columns would go null).
|
|
125
|
+
// Returns the raw pgvector-serialized string for the embedding column so we can
|
|
126
|
+
// re-INSERT it verbatim without a Float32Array round-trip.
|
|
127
|
+
async function getEmbeddingRow(id) {
|
|
128
|
+
const res = await pool.query(`SELECT embedding::text AS embedding, embedding_model FROM ${T} WHERE id = $1`, [id]);
|
|
129
|
+
const row = res.rows[0];
|
|
130
|
+
if (row?.embedding && row.embedding_model) {
|
|
131
|
+
// `embedding::text` is a pgvector literal like "[1,0,0]"; parse to floats.
|
|
132
|
+
const floats = row.embedding
|
|
133
|
+
.slice(1, -1)
|
|
134
|
+
.split(",")
|
|
135
|
+
.filter((s) => s.length > 0)
|
|
136
|
+
.map(Number);
|
|
137
|
+
return { embedding: Float32Array.from(floats), embeddingModel: row.embedding_model };
|
|
138
|
+
}
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
// -------------------------------------------------------------------------
|
|
142
|
+
// Keyword ranking — candidate pool + live corpus stats → shared pure core.
|
|
143
|
+
// -------------------------------------------------------------------------
|
|
144
|
+
async function rankKeyword(q, baseSql, baseParams, terms, weightsOverride) {
|
|
145
|
+
const rawPool = opts.recall?.candidatePool;
|
|
146
|
+
const pool_ = typeof rawPool === "number" && Number.isFinite(rawPool) && rawPool > 0
|
|
147
|
+
? Math.floor(rawPool)
|
|
148
|
+
: DEFAULT_CANDIDATE_POOL;
|
|
149
|
+
const n = baseParams.length;
|
|
150
|
+
const termPlaceholders = terms.map((_, i) => `$${n + 1 + i}`).join(",");
|
|
151
|
+
// 1) Candidate pool: rows matching ≥1 query token, newest first.
|
|
152
|
+
const candidateRes = await pool.query(`SELECT ${recordColumns("m")} FROM ${T} m WHERE ${baseSql}
|
|
153
|
+
AND m.id IN (SELECT memory_id FROM ${TK} WHERE token IN (${termPlaceholders}))
|
|
154
|
+
ORDER BY m.updated_at DESC, m.id ASC LIMIT $${n + 1 + terms.length}`, [...baseParams, ...terms, pool_]);
|
|
155
|
+
const candidates = candidateRes.rows.map(rowToRecord);
|
|
156
|
+
if (candidates.length === 0)
|
|
157
|
+
return [];
|
|
158
|
+
// 2) Corpus stats, computed live (nothing cached → nothing to go stale).
|
|
159
|
+
const corpusRes = await pool.query(`SELECT COUNT(*)::int AS n FROM ${T} m WHERE ${baseSql}`, baseParams);
|
|
160
|
+
const corpusSize = corpusRes.rows[0].n;
|
|
161
|
+
const dfRes = await pool.query(`SELECT t.token AS token, COUNT(DISTINCT t.memory_id)::int AS df
|
|
162
|
+
FROM ${TK} t JOIN ${T} m ON m.id = t.memory_id
|
|
163
|
+
WHERE ${baseSql} AND t.token IN (${termPlaceholders}) GROUP BY t.token`, [...baseParams, ...terms]);
|
|
164
|
+
const dfByToken = new Map(dfRes.rows.map((r) => [r.token, r.df]));
|
|
165
|
+
// 3) Score + sort via the shared pure ranking core.
|
|
166
|
+
const options = weightsOverride || opts.recall
|
|
167
|
+
? { ...opts.recall, ...(weightsOverride ? { weights: weightsOverride } : {}) }
|
|
168
|
+
: undefined;
|
|
169
|
+
return rankKeywordCandidates(candidates, dfByToken, corpusSize, terms, q.now, options, tokenize);
|
|
170
|
+
}
|
|
171
|
+
// -------------------------------------------------------------------------
|
|
172
|
+
// Store interface
|
|
173
|
+
// -------------------------------------------------------------------------
|
|
174
|
+
return {
|
|
175
|
+
async put(rec, putOpts) {
|
|
176
|
+
await ready();
|
|
177
|
+
await putRecord(rec, putOpts);
|
|
178
|
+
},
|
|
179
|
+
async get(id) {
|
|
180
|
+
await ready();
|
|
181
|
+
return getById(id);
|
|
182
|
+
},
|
|
183
|
+
async search(q) {
|
|
184
|
+
await ready();
|
|
185
|
+
const status = q.status ?? "active";
|
|
186
|
+
const limit = q.limit ?? 8;
|
|
187
|
+
const terms = q.query ? tokenize(q.query) : [];
|
|
188
|
+
// Shared base filter (namespace + status [+ kind]) — the "corpus".
|
|
189
|
+
let baseSql = "m.namespace = $1 AND m.status = $2";
|
|
190
|
+
const baseParams = [q.namespace, status];
|
|
191
|
+
if (q.kind) {
|
|
192
|
+
baseParams.push(q.kind);
|
|
193
|
+
baseSql += ` AND m.kind = $${baseParams.length}`;
|
|
194
|
+
}
|
|
195
|
+
if (terms.length === 0) {
|
|
196
|
+
// Query-less path: pure recency order (index-fragment behavior).
|
|
197
|
+
const res = await pool.query(`SELECT ${recordColumns("m")} FROM ${T} m WHERE ${baseSql} ORDER BY m.updated_at DESC, m.id ASC LIMIT $${baseParams.length + 1}`, [...baseParams, limit]);
|
|
198
|
+
let records = res.rows.map(rowToRecord);
|
|
199
|
+
if (q.tags && q.tags.length > 0) {
|
|
200
|
+
const want = new Set(q.tags);
|
|
201
|
+
records = records.filter((r) => r.tags.some((t) => want.has(t)));
|
|
202
|
+
}
|
|
203
|
+
return records;
|
|
204
|
+
}
|
|
205
|
+
// Hybrid path — active only when the caller supplies a query embedding.
|
|
206
|
+
if (q.queryEmbedding && q.embedderId) {
|
|
207
|
+
const v = q.vector ?? opts.vector ?? {};
|
|
208
|
+
const vectorK = typeof v.vectorK === "number" && Number.isFinite(v.vectorK) && v.vectorK > 0
|
|
209
|
+
? Math.floor(v.vectorK)
|
|
210
|
+
: DEFAULT_VECTOR_K;
|
|
211
|
+
// Keyword-ranked records: reuse the ranked pool, ordered by relevance ONLY.
|
|
212
|
+
const kwRecords = await rankKeyword(q, baseSql, baseParams, terms, {
|
|
213
|
+
relevance: 1,
|
|
214
|
+
recency: 0,
|
|
215
|
+
confidence: 0,
|
|
216
|
+
});
|
|
217
|
+
// Vector-ranked records: pgvector HNSW top-K by cosine distance (<=>),
|
|
218
|
+
// filtered to the matching embedder tag with a non-null embedding. Run in
|
|
219
|
+
// a transaction so SET LOCAL hnsw.ef_search applies to just this query.
|
|
220
|
+
const queryVec = pgvector.toSql(Array.from(q.queryEmbedding));
|
|
221
|
+
const client = await pool.connect();
|
|
222
|
+
let vectorRanked;
|
|
223
|
+
try {
|
|
224
|
+
await client.query("BEGIN");
|
|
225
|
+
await client.query(`SET LOCAL hnsw.ef_search = ${efSearch}`);
|
|
226
|
+
const modelIdx = baseParams.length + 1;
|
|
227
|
+
const vecIdx = baseParams.length + 2;
|
|
228
|
+
const kIdx = baseParams.length + 3;
|
|
229
|
+
const vecRes = await client.query(`SELECT ${recordColumns("m")} FROM ${T} m
|
|
230
|
+
WHERE ${baseSql} AND m.embedding_model = $${modelIdx} AND m.embedding IS NOT NULL
|
|
231
|
+
ORDER BY m.embedding <=> $${vecIdx} LIMIT $${kIdx}`, [...baseParams, q.embedderId, queryVec, vectorK]);
|
|
232
|
+
await client.query("COMMIT");
|
|
233
|
+
vectorRanked = vecRes.rows.map(rowToRecord);
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
await rollbackQuietly(client);
|
|
237
|
+
throw err;
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
client.release();
|
|
241
|
+
}
|
|
242
|
+
// One half-life knob: fall back to the shared recall tuning so a
|
|
243
|
+
// configured recall.recencyHalfLifeMs governs hybrid recency too.
|
|
244
|
+
const recencyHalfLifeMs = v.recencyHalfLifeMs ?? opts.recall?.recencyHalfLifeMs;
|
|
245
|
+
return pageAndTagFilter(fuseHybrid({
|
|
246
|
+
keywordRanked: kwRecords,
|
|
247
|
+
vectorRanked,
|
|
248
|
+
now: q.now,
|
|
249
|
+
options: {
|
|
250
|
+
...v,
|
|
251
|
+
...(recencyHalfLifeMs !== undefined ? { recencyHalfLifeMs } : {}),
|
|
252
|
+
},
|
|
253
|
+
}), limit, q.tags);
|
|
254
|
+
}
|
|
255
|
+
// Ranked path — keyword-only recall.
|
|
256
|
+
return pageAndTagFilter(await rankKeyword(q, baseSql, baseParams, terms), limit, q.tags);
|
|
257
|
+
},
|
|
258
|
+
async update(id, patch) {
|
|
259
|
+
await ready();
|
|
260
|
+
const current = await getById(id);
|
|
261
|
+
if (!current)
|
|
262
|
+
throw new Error(`memory not found: ${id}`);
|
|
263
|
+
const embed = await getEmbeddingRow(id);
|
|
264
|
+
await putRecord({ ...current, ...patch, id }, embed);
|
|
265
|
+
},
|
|
266
|
+
async supersede(id, bySupersedingId) {
|
|
267
|
+
await ready();
|
|
268
|
+
if (!(await getById(id)))
|
|
269
|
+
throw new Error(`memory not found: ${id}`);
|
|
270
|
+
await pool.query(`UPDATE ${T} SET status = 'superseded' WHERE id = $1`, [id]);
|
|
271
|
+
const superseding = await getById(bySupersedingId);
|
|
272
|
+
if (superseding) {
|
|
273
|
+
const links = new Set([...(superseding.supersedes ?? []), id]);
|
|
274
|
+
await pool.query(`UPDATE ${T} SET supersedes = $1 WHERE id = $2`, [
|
|
275
|
+
JSON.stringify([...links]),
|
|
276
|
+
bySupersedingId,
|
|
277
|
+
]);
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
async delete(id) {
|
|
281
|
+
await ready();
|
|
282
|
+
await pool.query(`DELETE FROM ${T} WHERE id = $1`, [id]);
|
|
283
|
+
},
|
|
284
|
+
async listCandidates(namespacePrefix) {
|
|
285
|
+
await ready();
|
|
286
|
+
const res = await pool.query(`SELECT ${RECORD_COLUMNS} FROM ${T} WHERE status = 'candidate' AND namespace LIKE $1 ORDER BY created_at DESC`, [`${namespacePrefix}%`]);
|
|
287
|
+
return res.rows.map(rowToRecord);
|
|
288
|
+
},
|
|
289
|
+
async close() {
|
|
290
|
+
if (ownsPool)
|
|
291
|
+
await pool.end();
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MemoryRecord } from "@dawn-ai/memory";
|
|
2
|
+
/** Comma-separated record columns (unqualified), e.g. `SELECT ${RECORD_COLUMNS} FROM ...`. */
|
|
3
|
+
export declare const RECORD_COLUMNS: string;
|
|
4
|
+
/** Record columns qualified with a table alias, e.g. `SELECT ${recordColumns("m")} FROM ... m`. */
|
|
5
|
+
export declare function recordColumns(alias: string): string;
|
|
6
|
+
export declare function rowToRecord(row: Record<string, unknown>): MemoryRecord;
|
|
7
|
+
export declare function cmp(a: string, b: string): number;
|
|
8
|
+
export declare function tokensFor(rec: MemoryRecord): string[];
|
|
9
|
+
export declare function pageAndTagFilter(records: readonly MemoryRecord[], limit: number, tags: readonly string[] | undefined): MemoryRecord[];
|
|
10
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AA8BnD,8FAA8F;AAC9F,eAAO,MAAM,cAAc,QAAiC,CAAA;AAE5D,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AASD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAiBtE;AAKD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,EAAE,CAGrD;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAClC,YAAY,EAAE,CAOhB"}
|
package/dist/queries.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { tokenize } from "@dawn-ai/memory";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Column selection
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// The exact 14 columns rowToRecord reads — deliberately EXCLUDES `embedding`
|
|
6
|
+
// (1536/3072-dim) and `embedding_model`. rowToRecord never touches those, so a
|
|
7
|
+
// bare `SELECT *`/`SELECT m.*` would transfer + deserialize the full vector on
|
|
8
|
+
// every record read (candidate pools of 256, query-less lists, hybrid lookups)
|
|
9
|
+
// for nothing. Callers that need the embedding read it separately via
|
|
10
|
+
// getEmbeddingRow's `SELECT embedding::text`.
|
|
11
|
+
const RECORD_COLUMN_NAMES = [
|
|
12
|
+
"id",
|
|
13
|
+
"kind",
|
|
14
|
+
"namespace",
|
|
15
|
+
"content",
|
|
16
|
+
"data",
|
|
17
|
+
"source",
|
|
18
|
+
"confidence",
|
|
19
|
+
"tags",
|
|
20
|
+
"status",
|
|
21
|
+
"supersedes",
|
|
22
|
+
"created_at",
|
|
23
|
+
"updated_at",
|
|
24
|
+
"effective_at",
|
|
25
|
+
"expires_at",
|
|
26
|
+
];
|
|
27
|
+
/** Comma-separated record columns (unqualified), e.g. `SELECT ${RECORD_COLUMNS} FROM ...`. */
|
|
28
|
+
export const RECORD_COLUMNS = RECORD_COLUMN_NAMES.join(", ");
|
|
29
|
+
/** Record columns qualified with a table alias, e.g. `SELECT ${recordColumns("m")} FROM ... m`. */
|
|
30
|
+
export function recordColumns(alias) {
|
|
31
|
+
return RECORD_COLUMN_NAMES.map((c) => `${alias}.${c}`).join(", ");
|
|
32
|
+
}
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Row ↔ record conversion
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// pg auto-parses `jsonb` columns to JS values, so `data`/`source`/`tags`/
|
|
37
|
+
// `supersedes` arrive already-deserialized — do NOT JSON.parse them again (the
|
|
38
|
+
// sqlite backend stores them as TEXT and must parse; here that would throw).
|
|
39
|
+
export function rowToRecord(row) {
|
|
40
|
+
return {
|
|
41
|
+
id: row.id,
|
|
42
|
+
kind: row.kind,
|
|
43
|
+
namespace: row.namespace,
|
|
44
|
+
content: row.content,
|
|
45
|
+
data: row.data,
|
|
46
|
+
source: row.source,
|
|
47
|
+
confidence: row.confidence,
|
|
48
|
+
tags: row.tags,
|
|
49
|
+
status: row.status,
|
|
50
|
+
...(row.supersedes ? { supersedes: row.supersedes } : {}),
|
|
51
|
+
createdAt: row.created_at,
|
|
52
|
+
updatedAt: row.updated_at,
|
|
53
|
+
...(row.effective_at ? { effectiveAt: row.effective_at } : {}),
|
|
54
|
+
...(row.expires_at ? { expiresAt: row.expires_at } : {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Codepoint compare — matches the sqlite backend's BINARY-collation ordering,
|
|
58
|
+
// independent of Postgres's locale-sensitive collation (id ASC tiebreaks are
|
|
59
|
+
// applied in JS, so ordering is the same across backends).
|
|
60
|
+
export function cmp(a, b) {
|
|
61
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
62
|
+
}
|
|
63
|
+
export function tokensFor(rec) {
|
|
64
|
+
const values = Object.values(rec.data).filter((v) => typeof v === "string");
|
|
65
|
+
return tokenize([rec.content, rec.tags.join(" "), values.join(" ")].join(" "));
|
|
66
|
+
}
|
|
67
|
+
// Page (limit) then tag post-filter — mirrors the sqlite backend's ranked-path
|
|
68
|
+
// semantics exactly.
|
|
69
|
+
export function pageAndTagFilter(records, limit, tags) {
|
|
70
|
+
let out = records.slice(0, limit);
|
|
71
|
+
if (tags && tags.length > 0) {
|
|
72
|
+
const want = new Set(tags);
|
|
73
|
+
out = out.filter((r) => r.tags.some((t) => want.has(t)));
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PoolClient } from "pg";
|
|
2
|
+
/** pgvector index dimension ceilings: plain vector ≤2000, halfvec ≤4000. */
|
|
3
|
+
export declare function vectorColumnDef(dimensions: number): {
|
|
4
|
+
type: string;
|
|
5
|
+
ops: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Guard SQL identifiers that are interpolated into DDL (they can't be bound as
|
|
9
|
+
* $1 placeholders in Postgres). `prefix`/`schema` come from the store's own
|
|
10
|
+
* config, not untrusted query input, but a malformed config must not produce
|
|
11
|
+
* broken/injected DDL — so reject anything that isn't a plain identifier.
|
|
12
|
+
*/
|
|
13
|
+
export declare function assertIdentifier(name: string, value: string): void;
|
|
14
|
+
/** Idempotent schema init. Safe to call repeatedly (IF NOT EXISTS everywhere). */
|
|
15
|
+
export declare function initSchema(client: PoolClient, opts: {
|
|
16
|
+
prefix: string;
|
|
17
|
+
schema: string;
|
|
18
|
+
dimensions: number;
|
|
19
|
+
m: number;
|
|
20
|
+
efConstruction: number;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAEpC,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQjF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED,kFAAkF;AAClF,wBAAsB,UAAU,CAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC9F,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** pgvector index dimension ceilings: plain vector ≤2000, halfvec ≤4000. */
|
|
2
|
+
export function vectorColumnDef(dimensions) {
|
|
3
|
+
if (!Number.isInteger(dimensions) || dimensions <= 0)
|
|
4
|
+
throw new Error(`pgvector: dimensions must be a positive integer, got ${dimensions}`);
|
|
5
|
+
if (dimensions <= 2000)
|
|
6
|
+
return { type: `vector(${dimensions})`, ops: "vector_cosine_ops" };
|
|
7
|
+
if (dimensions <= 4000)
|
|
8
|
+
return { type: `halfvec(${dimensions})`, ops: "halfvec_cosine_ops" };
|
|
9
|
+
throw new Error(`pgvector: ${dimensions} dims exceeds the 4000 halfvec index ceiling; reduce embedding dimensions or use a smaller model`);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Guard SQL identifiers that are interpolated into DDL (they can't be bound as
|
|
13
|
+
* $1 placeholders in Postgres). `prefix`/`schema` come from the store's own
|
|
14
|
+
* config, not untrusted query input, but a malformed config must not produce
|
|
15
|
+
* broken/injected DDL — so reject anything that isn't a plain identifier.
|
|
16
|
+
*/
|
|
17
|
+
export function assertIdentifier(name, value) {
|
|
18
|
+
if (!/^[a-z_][a-z0-9_]*$/i.test(value))
|
|
19
|
+
throw new Error(`pgvector: ${name} must be a valid SQL identifier (/^[a-z_][a-z0-9_]*$/i), got ${JSON.stringify(value)}`);
|
|
20
|
+
}
|
|
21
|
+
/** Idempotent schema init. Safe to call repeatedly (IF NOT EXISTS everywhere). */
|
|
22
|
+
export async function initSchema(client, opts) {
|
|
23
|
+
const { prefix, schema, dimensions, m, efConstruction } = opts;
|
|
24
|
+
assertIdentifier("prefix", prefix);
|
|
25
|
+
assertIdentifier("schema", schema);
|
|
26
|
+
const t = `${schema}.${prefix}_memories`;
|
|
27
|
+
const tk = `${schema}.${prefix}_tokens`;
|
|
28
|
+
const { type, ops } = vectorColumnDef(dimensions);
|
|
29
|
+
await client.query("CREATE EXTENSION IF NOT EXISTS vector");
|
|
30
|
+
await client.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);
|
|
31
|
+
await client.query(`CREATE TABLE IF NOT EXISTS ${t} (
|
|
32
|
+
id text PRIMARY KEY, kind text NOT NULL, namespace text NOT NULL, content text NOT NULL,
|
|
33
|
+
data jsonb NOT NULL, source jsonb NOT NULL, confidence real NOT NULL, tags jsonb NOT NULL,
|
|
34
|
+
status text NOT NULL, supersedes jsonb, created_at text NOT NULL, updated_at text NOT NULL,
|
|
35
|
+
effective_at text, expires_at text, embedding ${type}, embedding_model text)`);
|
|
36
|
+
await client.query(`CREATE TABLE IF NOT EXISTS ${tk} (
|
|
37
|
+
memory_id text NOT NULL REFERENCES ${t}(id) ON DELETE CASCADE, token text NOT NULL)`);
|
|
38
|
+
await client.query(`CREATE INDEX IF NOT EXISTS ${prefix}_ns_status_updated ON ${t} (namespace, status, updated_at DESC)`);
|
|
39
|
+
await client.query(`CREATE INDEX IF NOT EXISTS ${prefix}_tok ON ${tk} (token)`);
|
|
40
|
+
await client.query(`CREATE INDEX IF NOT EXISTS ${prefix}_tok_mem ON ${tk} (memory_id)`);
|
|
41
|
+
await client.query(`CREATE INDEX IF NOT EXISTS ${prefix}_hnsw ON ${t} USING hnsw (embedding ${ops}) WITH (m = ${m}, ef_construction = ${efConstruction})`);
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../memory/dist/score.d.ts","../../memory/dist/types.d.ts","../../memory/dist/hybrid.d.ts","../../memory/dist/namespace.d.ts","../../memory/dist/reconcile.d.ts","../../memory/dist/sqlite-store.d.ts","../../memory/dist/tokenize.d.ts","../../memory/dist/vector.d.ts","../../memory/dist/index.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/dispatcher1-wrapper.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/ffi.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/stream/iter.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/.pnpm/@types+node@26.1.0/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/messages.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/serializer.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/parser.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/index.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/lib/type-overrides.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/index.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/index.d.mts","../../../node_modules/.pnpm/pgvector@0.3.0/node_modules/pgvector/types/sparse-vector.d.ts","../../../node_modules/.pnpm/pgvector@0.3.0/node_modules/pgvector/types/index.d.ts","../../../node_modules/.pnpm/pgvector@0.3.0/node_modules/pgvector/types/pg/index.d.ts","../src/queries.ts","../src/schema.ts","../src/pgvector-store.ts","../src/index.ts"],"fileIdsList":[[70,132,133,135,143,148,151,153,154,155,168],[70,134,135,143,148,151,153,154,155,168],[135,143,148,151,153,154,155,168],[70,135,143,148,151,153,154,155,168,177],[70,135,136,141,143,146,148,151,153,154,155,157,168,173,186],[70,135,136,137,143,146,148,151,153,154,155,168],[70,135,138,143,148,151,153,154,155,168,187],[70,135,139,140,143,148,151,153,154,155,159,168],[70,135,140,143,148,151,153,154,155,168,173,183],[70,135,141,143,146,148,151,153,154,155,157,168],[70,134,135,142,143,148,151,153,154,155,168],[70,135,143,144,148,151,153,154,155,168],[70,135,143,145,146,148,151,153,154,155,168],[70,134,135,143,146,148,151,153,154,155,168],[70,135,143,148,151,153,154,155,168],[70,135,143,146,148,149,151,153,154,155,168,173,186],[70,135,143,146,148,149,151,153,154,155,168,173,175,177],[70,122,135,143,146,148,150,151,153,154,155,157,168,173,186],[70,135,143,146,148,150,151,153,154,155,157,168,173,183,186],[70,135,143,148,150,151,152,153,154,155,168,173,183,186],[69,70,71,72,73,74,75,76,77,78,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],[70,135,143,146,148,151,153,154,155,168],[70,135,143,148,151,153,155,168],[70,135,143,148,151,153,154,155,156,168,186],[70,135,143,146,148,151,153,154,155,157,168,173],[70,135,143,148,151,153,154,155,159,168],[70,135,143,148,151,153,154,155,160,168],[70,135,143,146,148,151,153,154,155,163,168],[70,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],[70,135,143,148,151,153,154,155,165,168],[70,135,143,148,151,153,154,155,166,168],[70,135,140,143,148,151,153,154,155,157,168,177],[70,135,143,146,148,151,153,154,155,168,169],[70,135,143,148,151,153,154,155,168,170,187,190],[70,135,143,146,148,151,153,154,155,168,173,175,176,177],[70,135,143,148,151,153,154,155,168,174,177],[70,135,143,146,148,151,153,154,155,168,173,175],[70,135,143,146,148,151,153,154,155,168,173,176,177],[70,135,143,148,151,153,154,155,168,177,187],[70,135,143,148,151,153,154,155,168,178],[70,132,135,143,148,151,153,154,155,168,173,180,186],[70,135,143,148,151,153,154,155,168,173,179],[70,135,143,146,148,151,153,154,155,168,181,182],[70,135,143,148,151,153,154,155,168,181,182],[70,135,140,143,148,151,153,154,155,157,168,173,183],[70,135,143,148,151,153,154,155,168,184],[70,135,143,148,151,153,154,155,157,168,185],[70,135,143,148,150,151,153,154,155,166,168,186],[70,135,143,148,151,153,154,155,168,187,188],[70,135,140,143,148,151,153,154,155,168,188],[70,135,143,148,151,153,154,155,168,173,189],[70,135,143,148,151,153,154,155,156,168,190],[70,135,143,148,151,153,154,155,168,191],[70,135,138,143,148,151,153,154,155,168],[70,135,140,143,148,151,153,154,155,168],[70,135,143,148,151,153,154,155,168,187],[70,122,135,143,148,151,153,154,155,168],[70,135,143,148,151,153,154,155,168,186],[70,135,143,148,151,153,154,155,168,192],[70,135,143,148,151,153,154,155,163,168],[70,135,143,148,151,153,154,155,168,182],[70,122,135,143,146,148,149,151,153,154,155,163,168,173,177,186,189,190,192],[70,135,143,148,151,153,154,155,168,173,193],[70,135,143,148,151,153,154,155,168,175,194],[70,135,143,148,151,153,154,155,168,202],[70,135,143,146,148,151,153,154,155,168,173,183,195,196,197,200,201,202],[70,135,143,148,151,153,154,155,168,197,198,199],[70,135,143,148,151,153,154,155,168,173,197],[70,135,143,148,151,153,154,155,168,204],[70,135,143,148,151,153,154,155,168,203,205],[70,85,88,91,92,135,143,148,151,153,154,155,168,186],[70,88,135,143,148,151,153,154,155,168,173,186],[70,88,92,135,143,148,151,153,154,155,168,186],[70,135,143,148,151,153,154,155,168,173],[70,82,135,143,148,151,153,154,155,168],[70,86,135,143,148,151,153,154,155,168],[70,84,85,88,135,143,148,151,153,154,155,168,186],[70,135,143,148,151,153,154,155,157,168,183],[70,135,143,148,151,153,154,155,168,195],[70,82,135,143,148,151,153,154,155,168,195],[70,84,88,135,143,148,151,153,154,155,157,168,186],[70,79,80,81,83,87,135,143,146,148,151,153,154,155,168,173,186],[70,88,135,143,148,151,153,154,155,168],[70,88,97,106,135,143,148,151,153,154,155,168],[70,80,86,135,143,148,151,153,154,155,168],[70,88,116,117,135,143,148,151,153,154,155,168],[70,80,83,88,135,143,148,151,153,154,155,168,177,186,195],[70,84,88,135,143,148,151,153,154,155,168,186],[70,79,135,143,148,151,153,154,155,168],[70,82,83,84,86,87,88,89,90,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,135,143,148,151,153,154,155,168],[70,88,109,112,135,143,148,151,153,154,155,168],[70,88,97,99,100,135,143,148,151,153,154,155,168],[70,86,88,99,101,135,143,148,151,153,154,155,168],[70,87,135,143,148,151,153,154,155,168],[70,80,82,88,135,143,148,151,153,154,155,168],[70,88,92,99,101,135,143,148,151,153,154,155,168],[70,92,135,143,148,151,153,154,155,168],[70,86,88,91,135,143,148,151,153,154,155,168,186],[70,80,84,88,97,135,143,148,151,153,154,155,168],[70,88,109,135,143,148,151,153,154,155,168],[70,101,135,143,148,151,153,154,155,168],[70,80,84,88,92,135,143,148,151,153,154,155,168],[70,82,88,116,135,143,148,151,153,154,155,168,177,192,195],[70,135,143,148,151,153,154,155,168,208,209],[68,70,135,143,148,151,153,154,155,168,203,206,207,208],[68,70,135,143,148,151,153,154,155,168],[70,135,143,148,151,153,154,155,168,203],[60,61,70,135,143,148,151,153,154,155,168],[60,61,62,63,64,65,66,67,70,135,143,148,151,153,154,155,168],[61,70,135,143,148,151,153,154,155,168]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"74c30adfb0f3a909182820aca209beafd6332c6b93c9640b65b31dea2cbc32ba","impliedFormat":99},{"version":"0194ecdea02609044a70fa6f08462ce5f721a2e8494bcaca4040803d47be25cf","impliedFormat":99},{"version":"31ab76815f275005f10804e9a6b0facb6dcb079d9d8f756e97a9ceb5db90ae66","impliedFormat":99},{"version":"f4f9a84e76cfb956db79492de761e713ba1c1f835861a8caa676779b8b46cc2d","impliedFormat":99},{"version":"6c41244b65bffde345227d8f6951040558c9e2a7a4bda6a5a18317456455eb17","impliedFormat":99},{"version":"3c818a8cf8338e187bd0d2348d03f84e19489b12b26c51929d0b6276df4aec14","impliedFormat":99},{"version":"44470dc7afb8deb244e5081b7bde2bbb1ff05897814092ffe4220147d43b729f","impliedFormat":99},{"version":"1d6b03d4d78df1f0cd72b90d21d478ac054cb0ab4b8ac18d9592a0db74737d91","impliedFormat":99},{"version":"642626eabf3dcec3ae2b1ddab277551fff56351b520ba1c06c6686e69ff4564b","impliedFormat":99},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"f53a7652392cf26ebbe4e29fd0672aa87c93bd6d0241289c13fab87b9ac35c8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00a630557d1622ad312633bdbfbdb9c6b7220d948dca9f899db30679f160074","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"88809d6c1b9c78d04a133646a6feb926def05a8774c308c7c93bc32ee163d271","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"3ac40516c33b87f751f7507346933081a26cdb8a3e11a6b3aa07d23f803c85db","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"829bc57ee8f287b490ab5bbc5a962fca57e432c1e38ec680ecd3ecaf12800613","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"3a3ff14da53d5013f3e6d8c4ad55225e3649c08786c4421ce639c00d8d589b7d","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"38004e6801340cb890afb8cb5a9fc8972297e7f88ab94026e4b0b3c61fb32f8a","impliedFormat":1},{"version":"d243db6b25788f439e7e2f03c05688e92f46764351673bb0e7b2f3631232e186","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"149f9a9e7f04e67afa0e2a49fc0ff421035c01d6b793cfcae7d2e9f6819431e2","impliedFormat":1},{"version":"e8a9dfa4c75ef6d25df8b40eaa9c31e0a69452aaf2ced4a3f4215dbdbaa876f4","impliedFormat":1},{"version":"a70af845a2eb9dd6e2723e319e14ea7fb28b129ec1361c21509b49305448c323","impliedFormat":1},{"version":"b53dc572d4f187904207ae1166652de47aab8eeb00c254d009cb226863076b56","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"f501234c5aeeeb5d7659412335227466aaacf30b952372d60afeb21c02c96348","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"9ac977503f15bf13ca7c82ad9a32a782f42d43e474824e8b3bffe228fd5f2639","impliedFormat":1},{"version":"8b91ff5bb912be3ea213cbcf0075aace1f5d4ff249a0d227ed673868cb7bfabc","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"7cb4f431a4591b0e23002bed805dc871a874dfed6b9a3994dce68a6df73e6739","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"e99963ae1e3a48ca7a7958c02f3e88bb963eb7978c28b68ae6b8c9f03309d83c","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"594ae90cacd813fa392ff80d2e0a8eff4e41f4a136329a940e321399dd8895b4","impliedFormat":1},{"version":"d1f333ade8ff35a409b4984e1f11956fe11c61855b0c7e9b59f0313e48b40c4a","impliedFormat":1},{"version":"0224aa4b3464895d69c413a640a19ac2166778a74eb5eb3b36b021c72d42b274","impliedFormat":1},{"version":"2e6fca0024dd8a076a886d9ec031a936ea59ad878a25b944820495d92f8381dd","affectsGlobalScope":true,"impliedFormat":1},{"version":"177459cba484e2f1e08872a3d2fdbca3162d9d43ca5ec9dc0c946835b55f74be","impliedFormat":1},{"version":"2fbf504c4791f9d32cd766cfe6b605bcda63289b925401953a7900db9af85348","impliedFormat":1},{"version":"ed0fb633cae35948d9e144004299a4bdf1ab912667c787b7fbffcd6d8c7b92a2","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"0e312260895afc9de021ce9de3c8a857392f0ccc7f19d3a030e4d6136a4ac91e","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"98fc7231d6c846a8ed19bdef026ddffe5e2182cc818be74899287421ad370a87","impliedFormat":1},{"version":"3a40b5d34e014017539acb92f04cf2bc0aa71e49efb33c66039df93be97842a1","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"8c7e618c2a91ea7f6b5cca272a295864e92c16413be8fc56a943e8c7d5320011","affectsGlobalScope":true,"impliedFormat":1},{"version":"79a85c64bf083c5f4dd7074e804d1000c0c47301b84d48417a224decd681be30","impliedFormat":1},{"version":"9f1e3a76d5f509b5579e567de522b402cb79e201c4f47dcd014451c0580b290d","impliedFormat":1},{"version":"2ddab5b6932f9a6327f71baeb82a1d6b0824e0d23a4c7a5de5d355857113c22f","impliedFormat":1},{"version":"70f3f8b2dcaf7388f26731a59c79437813e3620b594903525a303cb2a7901016","impliedFormat":1},{"version":"62e8f884c3bc6dff6189b6e662ebe8b238a645938f2df7a97b8a82fca56773a4","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"57a0d1b3d59063d4af2d3f8aac27cfe3c20a0f5d1faf0f8598ccf0b779637939","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"97234c5303866576f913d0ccae7d58d6322d9e803c7bf1228a3fda46ab8087b2","affectsGlobalScope":true,"impliedFormat":1},{"version":"93ecf87143cac7b9d05cffc1d6bdc075b7e4fdd48ff05f1fad85043f6ae678d3","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"6f200afcb82b3e9a54bed6db23f2edf2508cd266801257312c0f124b47f2bdb9","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"39338f84e8c4d0e3de7b3c4a7024fb3925f42100eed5cbe73be58902799dff4d","impliedFormat":1},{"version":"fbf83eb33bf5e329527add92acc65da59323876c702ddccf5f4bf1e848c92369","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"515318bc6e656f75e9e34db625316bfafbafd800dfb1642574af93735a24ad38","impliedFormat":1},{"version":"441b9bb09013654aa3d050e68b06464d8959b473e85868249d9d18f692acd35b","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"55246f15e33ff1e2e9e679b25fa9790a48db55dc63d567fe25fac8b6a0efe911","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"03b7804d69cecd66850abada858ed6d4a59001f8c228a9fe212306ee860a4ff6","impliedFormat":1},{"version":"5b26c4dd672d88336bb929787c9bfb55119e80ba89ec6dc923da1c063892843e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"987fd1f85dc36f4b2c927aa3db814ac6b452e970f4f55d24ed4ecbb7df09be00","impliedFormat":1},{"version":"f12624a4a8d042b68914eac1b0a16571fc1c523173fcdf2517c65d191bd5a86c","impliedFormat":1},{"version":"b4769767f13a1692a66186e01c3aa186ff808d5ff72ed36eda8c37738fb2ac92","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"683edfc4f2b411ebe04729cb6dc09ddd26fbac2c57771a6d7c55964af776e176","impliedFormat":1},{"version":"1ec3f3a5f04cc42df33274fbe5c0937d9a9e06f249a7a26288d7d54f0763ffd4","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"e47f532d6e1617833f13a5b0710c0089d402c89c2f2b54f324e5a20e418d287a","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"8e2577e7262051fd3c5bd6ca2b2056d358ff8853565720f92455860824c25188","impliedFormat":1},{"version":"7ec8d7d483f7394f9da611b10d3a0e402f76ff5c991261e6ce43a15f81ca4258","impliedFormat":1},{"version":"bb9dbb4b2ad81e3e71ec5ba4314973718555b9d04ba2a17dfbf875efecb8e2c0","impliedFormat":1},{"version":"82c3cc48c692438e41b94d936b8acd75ca97b18c50fa1af8a0715eb9d07d18cd","impliedFormat":1},{"version":"045a210189ec63c5488410b33f9fca53d77d051599d0d6506d8048551399c5f3","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"632c45ccb4cdc2c3a80c7a36a63dd7763016e59cac5e07bfb3e37e3548957028","impliedFormat":1},{"version":"c9a2daf6cd1eb854cd5b9e424247c5e306692055738c2effd35f7871d942b76e","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"e50a7130339a951e6da9e968ed5521b0997a5b0479e148914087213839b5474c","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"4a20a0a39aca8738cc5088f9dea2969bf2af3ca1341c56071f513059b122d150","impliedFormat":1},{"version":"a33c98f95c099c2a9a383b156c8f2a16605843d29455a954c1431bcbbc1ce35a","impliedFormat":1},{"version":"effa1fd4980f6dff4e81ed67009b847d34449087504319f9a0dd081e8cf23a31","impliedFormat":1},{"version":"c2c9f431f788b434e6ae327844ef6712bb6a6a88ad08acf20bf6cfeb41d154ba","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"2636a309ed87d6876728d9aca846a76b372cf2a21a4fdf9940a82a2dd86687d0","impliedFormat":1},{"version":"5aea76ab98173f2c230b1f78dc010da403da622c105c468ace9fe24e3b77883c","impliedFormat":99},{"version":"fd0250b04cafcf967573513adb9fe24365a4f3de6e4c83dc9f47cef314e415f8","impliedFormat":99},{"version":"c84d2355c27c56c676ad96feba2ce4be44594f05ee96d126954ffe336655fba1","impliedFormat":99},{"version":"1655f84bdac5cc27ec93b51198573cc0acb8943d4d8be2b464fe5fd4226bba41","impliedFormat":99},{"version":"2087f118999261c403017a0d0375c4556f26a2618fb865700d5275dd5bc6a6ea","signature":"0984d5160390421b6a55325c76be8aaa4dfef828fc3cc2ff0f855762f8e1783e","impliedFormat":99},{"version":"c21513ad10f171d1dcfcc5f529c65e8083f4889c98071ca326151db0f5bef293","signature":"6dc740a7c0c6f6585e68cfd0554006ad9d87ddd89558e8cb01393456ddf20d2a","impliedFormat":99},{"version":"666aed1f40b3065640d38587750c13334e408be087fc7ecb02d2b629253d3734","signature":"84b1ea71927bd5d8cd7d476b9bfd723f151a2560d9163431b17b03f9e62f2182","impliedFormat":99},{"version":"bb63dbca918fb4f0c994f0396b59254156a1c9f228df9807ab267f9be385fcba","signature":"9398e53cb774254224d17fecfdf49fe11b7f02ef3940269ebe8225c5c0ba6b6c","impliedFormat":99}],"root":[[207,210]],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":199,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"stripInternal":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[132,1],[133,1],[134,2],[70,3],[135,4],[136,5],[137,6],[138,7],[139,8],[140,9],[141,10],[142,11],[143,12],[144,12],[145,13],[146,14],[147,15],[148,16],[149,17],[71,15],[69,15],[150,18],[151,19],[152,20],[195,21],[153,22],[154,23],[155,22],[156,24],[157,25],[159,26],[160,27],[161,27],[162,27],[163,28],[164,29],[165,30],[166,31],[167,32],[168,33],[169,33],[170,34],[171,15],[172,15],[173,35],[174,36],[175,37],[176,38],[177,39],[178,40],[179,41],[180,42],[181,43],[182,44],[183,45],[184,46],[185,47],[186,48],[187,49],[188,50],[189,51],[190,52],[191,53],[72,22],[73,15],[74,54],[75,55],[76,15],[77,56],[78,15],[123,57],[124,58],[125,59],[126,59],[127,60],[128,15],[129,4],[130,61],[131,58],[192,62],[193,63],[194,64],[203,65],[202,66],[201,65],[158,15],[200,67],[197,15],[199,68],[198,15],[196,15],[205,69],[206,70],[204,15],[58,15],[59,15],[11,15],[10,15],[2,15],[12,15],[13,15],[14,15],[15,15],[16,15],[17,15],[18,15],[19,15],[3,15],[20,15],[21,15],[4,15],[22,15],[26,15],[23,15],[24,15],[25,15],[27,15],[28,15],[29,15],[5,15],[30,15],[31,15],[32,15],[33,15],[6,15],[37,15],[34,15],[35,15],[36,15],[38,15],[7,15],[39,15],[44,15],[45,15],[40,15],[41,15],[42,15],[43,15],[8,15],[49,15],[46,15],[47,15],[48,15],[50,15],[9,15],[51,15],[52,15],[53,15],[55,15],[54,15],[56,15],[1,15],[57,15],[97,71],[111,72],[94,73],[112,74],[121,75],[85,76],[86,77],[84,78],[120,79],[115,80],[119,81],[88,82],[98,83],[108,84],[87,85],[118,86],[82,87],[83,80],[89,83],[90,15],[96,88],[93,83],[80,89],[122,90],[113,91],[101,92],[100,83],[102,93],[105,94],[99,95],[103,96],[116,79],[91,97],[92,98],[106,99],[81,74],[110,100],[109,83],[95,98],[104,101],[107,102],[114,15],[79,15],[117,103],[210,104],[209,105],[207,106],[208,107],[62,108],[68,109],[63,15],[64,110],[60,15],[65,108],[66,15],[61,15],[67,15]],"latestChangedDtsFile":"./index.d.ts","version":"6.0.2"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dawn-ai/memory-pgvector",
|
|
3
|
+
"version": "0.8.9",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/cacheplane/dawnai/tree/main/packages/memory-pgvector#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/cacheplane/dawnai.git",
|
|
11
|
+
"directory": "packages/memory-pgvector"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/cacheplane/dawnai/issues"
|
|
15
|
+
},
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=22.13.0"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"pg": "^8.22.0",
|
|
34
|
+
"pgvector": "^0.3.0",
|
|
35
|
+
"@dawn-ai/memory": "0.8.9"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@testcontainers/postgresql": "^12.0.4",
|
|
39
|
+
"@types/node": "26.1.0",
|
|
40
|
+
"@types/pg": "^8.20.0",
|
|
41
|
+
"@dawn-ai/langchain": "0.8.9",
|
|
42
|
+
"@dawn-ai/testing": "0.8.9",
|
|
43
|
+
"@dawn-ai/config-typescript": "0.8.9"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc -b tsconfig.json",
|
|
47
|
+
"lint": "biome check --config-path ../config-biome/biome.json package.json src tsconfig.json vitest.config.ts",
|
|
48
|
+
"test": "vitest --run --config vitest.config.ts --passWithNoTests",
|
|
49
|
+
"typecheck": "tsc --noEmit"
|
|
50
|
+
}
|
|
51
|
+
}
|