@getrift/rift 0.1.0-beta.10 → 0.1.0-beta.12
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/src/cli/commands/reconcile.d.ts.map +1 -1
- package/dist/src/cli/commands/reconcile.js +12 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -1
- package/dist/src/cli/commands/search.d.ts.map +1 -1
- package/dist/src/cli/commands/search.js +28 -4
- package/dist/src/cli/commands/search.js.map +1 -1
- package/dist/src/cli/http-client.d.ts.map +1 -1
- package/dist/src/cli/http-client.js +21 -2
- package/dist/src/cli/http-client.js.map +1 -1
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
- package/dist/src/ingestion/inbox-core/index.d.ts +1 -0
- package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -1
- package/dist/src/ingestion/inbox-core/index.js +1 -0
- package/dist/src/ingestion/inbox-core/index.js.map +1 -1
- package/dist/src/jobs/handlers/compact.js +1 -0
- package/dist/src/jobs/handlers/compact.js.map +1 -1
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts +111 -0
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js +332 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
- package/dist/src/jobs/handlers/ingest.js +204 -31
- package/dist/src/jobs/handlers/ingest.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts +11 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +25 -0
- package/dist/src/jobs/handlers/reconcile.js.map +1 -1
- package/dist/src/jobs/handlers/save.d.ts.map +1 -1
- package/dist/src/jobs/handlers/save.js +6 -1
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/mcp/errors.d.ts.map +1 -1
- package/dist/src/mcp/errors.js +20 -1
- package/dist/src/mcp/errors.js.map +1 -1
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
- package/dist/src/mcp/tools/context-pack.js +5 -2
- package/dist/src/mcp/tools/context-pack.js.map +1 -1
- package/dist/src/mcp/tools/search.d.ts +6 -2
- package/dist/src/mcp/tools/search.d.ts.map +1 -1
- package/dist/src/mcp/tools/search.js +34 -4
- package/dist/src/mcp/tools/search.js.map +1 -1
- package/dist/src/observability/tool-usage-stats.d.ts +70 -4
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
- package/dist/src/observability/tool-usage-stats.js +58 -27
- package/dist/src/observability/tool-usage-stats.js.map +1 -1
- package/dist/src/observability/tool-usage.d.ts +93 -0
- package/dist/src/observability/tool-usage.d.ts.map +1 -1
- package/dist/src/observability/tool-usage.js +124 -0
- package/dist/src/observability/tool-usage.js.map +1 -1
- package/dist/src/retrieval/compact.d.ts +115 -2
- package/dist/src/retrieval/compact.d.ts.map +1 -1
- package/dist/src/retrieval/compact.js +154 -5
- package/dist/src/retrieval/compact.js.map +1 -1
- package/dist/src/retrieval/context-pack.d.ts +71 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -1
- package/dist/src/retrieval/context-pack.js +126 -7
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/server/routes/mcp-usage.d.ts +5 -4
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
- package/dist/src/server/routes/mcp-usage.js.map +1 -1
- package/dist/src/server/routes/reconcile.d.ts.map +1 -1
- package/dist/src/server/routes/reconcile.js +16 -0
- package/dist/src/server/routes/reconcile.js.map +1 -1
- package/dist/src/server/routes/search.d.ts.map +1 -1
- package/dist/src/server/routes/search.js +144 -24
- package/dist/src/server/routes/search.js.map +1 -1
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +24 -2
- package/dist/src/storage/rebuild.js.map +1 -1
- package/dist/src/storage/tables.d.ts +9 -0
- package/dist/src/storage/tables.d.ts.map +1 -1
- package/dist/src/storage/tables.js +22 -1
- package/dist/src/storage/tables.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dedupe-conversations repair pass — opt-in tool.
|
|
3
|
+
*
|
|
4
|
+
* Closes the residual gap from the 2026-05-13 stable-row-id upgrade:
|
|
5
|
+
* rows written before that slice carry a legacy row id derived from
|
|
6
|
+
* `(conversationId, jobRootId)` instead of the new
|
|
7
|
+
* `stableConversationRowId(source, conversationId)`. A re-import after
|
|
8
|
+
* the upgrade lands the new stable-id row alongside the surviving legacy
|
|
9
|
+
* row instead of collapsing onto it, leaving two rows for the same
|
|
10
|
+
* `(source, conversation_id)`.
|
|
11
|
+
*
|
|
12
|
+
* Strategy: scan `conversations_hot` + `conversations_cold`, match each
|
|
13
|
+
* row to its raw artifact (by row id embedded in the filename), read
|
|
14
|
+
* `(source, conversation_id)` from the raw, and group rows by that
|
|
15
|
+
* canonical key. For groups with more than one member, pick a keeper
|
|
16
|
+
* and delete the rest (plus the matching raw files).
|
|
17
|
+
*
|
|
18
|
+
* Decision rule:
|
|
19
|
+
* 1. If any group member's row id matches
|
|
20
|
+
* `stableConversationRowId(source, conversation_id)`, that member
|
|
21
|
+
* wins ("stable-id is canonical post-upgrade"). Ties between
|
|
22
|
+
* multiple stable members (degenerate — same row id would be one
|
|
23
|
+
* row) fall through to the same secondary tie-breakers.
|
|
24
|
+
* 2. Otherwise (all members are legacy), prefer the newest
|
|
25
|
+
* `indexed_at`, then prefer the `conversations_cold` member
|
|
26
|
+
* (compaction promotes cold to canonical), then prefer larger
|
|
27
|
+
* `content_length` (avoid silently shrinking the indexed snapshot),
|
|
28
|
+
* then the lexicographically smaller row id (deterministic).
|
|
29
|
+
*
|
|
30
|
+
* Safety guard on the stable rule: a stable-id row may have been
|
|
31
|
+
* imported from an older export, so it can legitimately be older or
|
|
32
|
+
* shorter than a surviving legacy row from a more recent import. If
|
|
33
|
+
* any legacy member of the group is newer OR has more content than
|
|
34
|
+
* the chosen stable winner, the group is classified `suspicious` and
|
|
35
|
+
* `--apply` never mutates it. The operator triages by hand.
|
|
36
|
+
*
|
|
37
|
+
* Dry-run by default. Only `--apply` mutates rows or deletes raw files.
|
|
38
|
+
* Rows whose raw file is missing are skipped — the normal reconcile pass
|
|
39
|
+
* already classifies them as orphans, which is a different repair lane.
|
|
40
|
+
*/
|
|
41
|
+
import { stableConversationRowId } from "../../ingestion/inbox-core/conversation-key.js";
|
|
42
|
+
/**
|
|
43
|
+
* Pure planner. Given a snapshot of rows + raw files, produces the
|
|
44
|
+
* dedupe plan with no I/O. Caller decides whether to apply.
|
|
45
|
+
*/
|
|
46
|
+
export function planDedupe(input) {
|
|
47
|
+
// Group raw files by the row id in the filename. A row id can have
|
|
48
|
+
// multiple raws (refresh-on-grow before the prune-prior-raw slice).
|
|
49
|
+
const rawsByRowId = new Map();
|
|
50
|
+
for (const raw of input.raw_files) {
|
|
51
|
+
const arr = rawsByRowId.get(raw.row_id_from_filename) ?? [];
|
|
52
|
+
arr.push(raw);
|
|
53
|
+
rawsByRowId.set(raw.row_id_from_filename, arr);
|
|
54
|
+
}
|
|
55
|
+
// Derive (source, conversation_id) per row id from its latest raw
|
|
56
|
+
// (lexicographically greatest filename). All raws for the same row
|
|
57
|
+
// id share the same provider conversation id, so this is just
|
|
58
|
+
// picking the most recent metadata snapshot.
|
|
59
|
+
const sourceAndConvByRowId = new Map();
|
|
60
|
+
for (const [rowId, raws] of rawsByRowId) {
|
|
61
|
+
const latest = raws.reduce((a, b) => (a.filename > b.filename ? a : b));
|
|
62
|
+
sourceAndConvByRowId.set(rowId, {
|
|
63
|
+
source: latest.source,
|
|
64
|
+
conversation_id: latest.conversation_id,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Group rows by (source, conversation_id). Nested map (source ->
|
|
68
|
+
// conversation_id -> members) avoids string-key delimiter ambiguity
|
|
69
|
+
// since provider conversation ids can in principle contain any
|
|
70
|
+
// character.
|
|
71
|
+
const groups = new Map();
|
|
72
|
+
const rowsWithoutRaw = [];
|
|
73
|
+
for (const row of input.rows) {
|
|
74
|
+
const lookup = sourceAndConvByRowId.get(row.row_id);
|
|
75
|
+
if (!lookup) {
|
|
76
|
+
rowsWithoutRaw.push({ row_id: row.row_id, table: row.table });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const stableId = stableConversationRowId(lookup.source, lookup.conversation_id);
|
|
80
|
+
const member = {
|
|
81
|
+
row_id: row.row_id,
|
|
82
|
+
table: row.table,
|
|
83
|
+
indexed_at: row.indexed_at,
|
|
84
|
+
content_length: row.content_length,
|
|
85
|
+
is_stable_id: row.row_id === stableId,
|
|
86
|
+
raw_files: (rawsByRowId.get(row.row_id) ?? []).map((r) => r.path),
|
|
87
|
+
};
|
|
88
|
+
let bySource = groups.get(lookup.source);
|
|
89
|
+
if (!bySource) {
|
|
90
|
+
bySource = new Map();
|
|
91
|
+
groups.set(lookup.source, bySource);
|
|
92
|
+
}
|
|
93
|
+
const arr = bySource.get(lookup.conversation_id) ?? [];
|
|
94
|
+
arr.push(member);
|
|
95
|
+
bySource.set(lookup.conversation_id, arr);
|
|
96
|
+
}
|
|
97
|
+
// Build group plans for actual duplicates (size > 1).
|
|
98
|
+
const actionable = [];
|
|
99
|
+
const suspicious = [];
|
|
100
|
+
for (const [source, bySource] of groups) {
|
|
101
|
+
for (const [conversationId, members] of bySource) {
|
|
102
|
+
if (members.length < 2)
|
|
103
|
+
continue;
|
|
104
|
+
const stableId = stableConversationRowId(source, conversationId);
|
|
105
|
+
const decision = pickKeeper(members);
|
|
106
|
+
const deleted = members.filter((m) => m !== decision.kept);
|
|
107
|
+
const reasons = detectSuspicion(decision.kept, deleted);
|
|
108
|
+
const plan = {
|
|
109
|
+
source,
|
|
110
|
+
conversation_id: conversationId,
|
|
111
|
+
stable_id: stableId,
|
|
112
|
+
members,
|
|
113
|
+
kept_member: decision.kept,
|
|
114
|
+
deleted_members: deleted,
|
|
115
|
+
raw_files_to_delete: deleted.flatMap((m) => m.raw_files),
|
|
116
|
+
decision_reason: decision.reason,
|
|
117
|
+
classification: reasons.length > 0 ? "suspicious" : "actionable",
|
|
118
|
+
suspicious_reasons: reasons,
|
|
119
|
+
};
|
|
120
|
+
if (reasons.length > 0)
|
|
121
|
+
suspicious.push(plan);
|
|
122
|
+
else
|
|
123
|
+
actionable.push(plan);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Deterministic ordering within each bucket: by source, then conversation_id.
|
|
127
|
+
const orderGroups = (a, b) => {
|
|
128
|
+
if (a.source !== b.source)
|
|
129
|
+
return a.source < b.source ? -1 : 1;
|
|
130
|
+
return a.conversation_id < b.conversation_id ? -1 : 1;
|
|
131
|
+
};
|
|
132
|
+
actionable.sort(orderGroups);
|
|
133
|
+
suspicious.sort(orderGroups);
|
|
134
|
+
return {
|
|
135
|
+
actionable_groups: actionable,
|
|
136
|
+
suspicious_groups: suspicious,
|
|
137
|
+
rows_without_raw: rowsWithoutRaw,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* A stable winner is only safe to delete legacy members when it is
|
|
142
|
+
* at least as new AND at least as long as every loser. Returns the
|
|
143
|
+
* list of suspicion reasons; empty list means the group is actionable.
|
|
144
|
+
* Legacy-only groups (where the keeper is itself legacy) are always
|
|
145
|
+
* actionable — the keeper rule already picked the safest legacy
|
|
146
|
+
* member (newest, then cold-preferred, then longer content).
|
|
147
|
+
*/
|
|
148
|
+
function detectSuspicion(kept, deleted) {
|
|
149
|
+
if (!kept.is_stable_id)
|
|
150
|
+
return [];
|
|
151
|
+
const reasons = new Set();
|
|
152
|
+
for (const loser of deleted) {
|
|
153
|
+
if (loser.indexed_at > kept.indexed_at)
|
|
154
|
+
reasons.add("legacy_member_is_newer");
|
|
155
|
+
if (loser.content_length > kept.content_length)
|
|
156
|
+
reasons.add("legacy_member_has_more_content");
|
|
157
|
+
}
|
|
158
|
+
return [...reasons];
|
|
159
|
+
}
|
|
160
|
+
function pickKeeper(members) {
|
|
161
|
+
const stable = members.filter((m) => m.is_stable_id);
|
|
162
|
+
if (stable.length > 0) {
|
|
163
|
+
const kept = stable.reduce(secondaryTieBreak);
|
|
164
|
+
return { kept, reason: "stable-id row is canonical post-upgrade" };
|
|
165
|
+
}
|
|
166
|
+
const kept = members.reduce(legacyPick);
|
|
167
|
+
return {
|
|
168
|
+
kept,
|
|
169
|
+
reason: "no stable-id row in group; kept newest legacy (cold-preferred, then longer content)",
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/** Newest indexed_at wins; then prefer cold; then longer content; then lex-smaller id. */
|
|
173
|
+
function legacyPick(a, b) {
|
|
174
|
+
if (a.indexed_at !== b.indexed_at)
|
|
175
|
+
return a.indexed_at > b.indexed_at ? a : b;
|
|
176
|
+
return secondaryTieBreak(a, b);
|
|
177
|
+
}
|
|
178
|
+
/** Prefer cold; then longer content; then lex-smaller row id. */
|
|
179
|
+
function secondaryTieBreak(a, b) {
|
|
180
|
+
if (a.table !== b.table) {
|
|
181
|
+
return a.table === "conversations_cold" ? a : b;
|
|
182
|
+
}
|
|
183
|
+
if (a.content_length !== b.content_length) {
|
|
184
|
+
return a.content_length > b.content_length ? a : b;
|
|
185
|
+
}
|
|
186
|
+
return a.row_id < b.row_id ? a : b;
|
|
187
|
+
}
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
// Side-effecting wrapper: reads tables + raw dirs, plans, optionally applies.
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
import fs from "node:fs";
|
|
192
|
+
import path from "node:path";
|
|
193
|
+
import { getTable } from "../../storage/tables.js";
|
|
194
|
+
import { CONVERSATION_SOURCES } from "../../providers/types.js";
|
|
195
|
+
const ALL_CONV_SOURCES = [...CONVERSATION_SOURCES, "inbox"];
|
|
196
|
+
/**
|
|
197
|
+
* Scan `conversations_hot` + `conversations_cold`, plan the dedupe,
|
|
198
|
+
* optionally apply. Caller (the reconcile handler) wraps this in the
|
|
199
|
+
* watcher pause/resume protocol so live writes can't race.
|
|
200
|
+
*/
|
|
201
|
+
export async function dedupeConversations(opts) {
|
|
202
|
+
const hotTable = getTable("conversations_hot");
|
|
203
|
+
const coldTable = getTable("conversations_cold");
|
|
204
|
+
const hotRows = (await hotTable.query().toArray());
|
|
205
|
+
const coldRows = (await coldTable.query().toArray());
|
|
206
|
+
const rows = [
|
|
207
|
+
...hotRows.map((r) => rowView(r, "conversations_hot")),
|
|
208
|
+
...coldRows.map((r) => rowView(r, "conversations_cold")),
|
|
209
|
+
];
|
|
210
|
+
const errors = [];
|
|
211
|
+
const rawFiles = [];
|
|
212
|
+
for (const source of ALL_CONV_SOURCES) {
|
|
213
|
+
const rawDir = path.join(opts.dataDir, "raw", "conversations", source);
|
|
214
|
+
if (!fs.existsSync(rawDir))
|
|
215
|
+
continue;
|
|
216
|
+
for (const filename of fs.readdirSync(rawDir)) {
|
|
217
|
+
if (!filename.endsWith(".json"))
|
|
218
|
+
continue;
|
|
219
|
+
const rowIdFromFilename = extractIdFromFilename(filename);
|
|
220
|
+
if (!rowIdFromFilename)
|
|
221
|
+
continue;
|
|
222
|
+
const fullPath = path.join(rawDir, filename);
|
|
223
|
+
try {
|
|
224
|
+
const raw = JSON.parse(fs.readFileSync(fullPath, "utf-8"));
|
|
225
|
+
const rawSource = typeof raw.source === "string" ? raw.source : source;
|
|
226
|
+
const conversationId = typeof raw.conversation_id === "string" ? raw.conversation_id : "";
|
|
227
|
+
if (!conversationId) {
|
|
228
|
+
// Pre-stable-id raws may not carry conversation_id at all.
|
|
229
|
+
// Without it we can't group, so skip silently.
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
rawFiles.push({
|
|
233
|
+
path: fullPath,
|
|
234
|
+
filename,
|
|
235
|
+
row_id_from_filename: rowIdFromFilename,
|
|
236
|
+
source: rawSource,
|
|
237
|
+
conversation_id: conversationId,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
errors.push(`read raw failed: ${fullPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const plan = planDedupe({ rows, raw_files: rawFiles });
|
|
246
|
+
const rowsToDelete = plan.actionable_groups.reduce((n, g) => n + g.deleted_members.length, 0);
|
|
247
|
+
const rawFilesToDelete = plan.actionable_groups.reduce((n, g) => n + g.raw_files_to_delete.length, 0);
|
|
248
|
+
let rowsDeleted = 0;
|
|
249
|
+
let rawFilesDeleted = 0;
|
|
250
|
+
if (opts.apply) {
|
|
251
|
+
// Suspicious groups are deliberately NOT touched, even with --apply.
|
|
252
|
+
for (const group of plan.actionable_groups) {
|
|
253
|
+
for (const member of group.deleted_members) {
|
|
254
|
+
const table = member.table === "conversations_cold"
|
|
255
|
+
? coldTable
|
|
256
|
+
: hotTable;
|
|
257
|
+
try {
|
|
258
|
+
await table.delete(`id = '${member.row_id}'`);
|
|
259
|
+
rowsDeleted++;
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
errors.push(`delete row failed: ${member.table}/${member.row_id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
for (const rawPath of group.raw_files_to_delete) {
|
|
266
|
+
try {
|
|
267
|
+
fs.unlinkSync(rawPath);
|
|
268
|
+
rawFilesDeleted++;
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
if (err && typeof err === "object" && "code" in err
|
|
272
|
+
&& err.code === "ENOENT") {
|
|
273
|
+
// Already gone — count as deleted, not an error.
|
|
274
|
+
rawFilesDeleted++;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
errors.push(`delete raw failed: ${rawPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const report = {
|
|
284
|
+
apply: opts.apply,
|
|
285
|
+
rows_scanned: rows.length,
|
|
286
|
+
raw_files_scanned: rawFiles.length,
|
|
287
|
+
duplicate_groups_found: plan.actionable_groups.length + plan.suspicious_groups.length,
|
|
288
|
+
rows_to_delete: rowsToDelete,
|
|
289
|
+
raw_files_to_delete: rawFilesToDelete,
|
|
290
|
+
rows_deleted: rowsDeleted,
|
|
291
|
+
raw_files_deleted: rawFilesDeleted,
|
|
292
|
+
rows_without_raw: plan.rows_without_raw.length,
|
|
293
|
+
suspicious_groups_skipped: plan.suspicious_groups.length,
|
|
294
|
+
actionable_groups: plan.actionable_groups,
|
|
295
|
+
suspicious_groups: plan.suspicious_groups,
|
|
296
|
+
errors,
|
|
297
|
+
};
|
|
298
|
+
if (opts.reportsDir) {
|
|
299
|
+
try {
|
|
300
|
+
fs.mkdirSync(opts.reportsDir, { recursive: true });
|
|
301
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
302
|
+
const suffix = opts.apply ? "apply" : "dry-run";
|
|
303
|
+
const reportPath = path.join(opts.reportsDir, `dedupe-conversations-${stamp}-${suffix}.json`);
|
|
304
|
+
// Set report_path BEFORE serializing so the persisted file is
|
|
305
|
+
// self-identifying — `report_path` on disk equals its own location.
|
|
306
|
+
report.report_path = reportPath;
|
|
307
|
+
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
report.errors.push(`write report failed: ${opts.reportsDir}: ${err instanceof Error ? err.message : String(err)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return report;
|
|
314
|
+
}
|
|
315
|
+
function rowView(row, table) {
|
|
316
|
+
return {
|
|
317
|
+
row_id: row.id,
|
|
318
|
+
table,
|
|
319
|
+
indexed_at: row.indexed_at,
|
|
320
|
+
content_length: (row.content ?? "").length,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Filename format: `{ISO-timestamp}_{rowId}.json`. ISO timestamps in
|
|
325
|
+
* the writer use `:` and `.` replaced by `-`, so the first `_`
|
|
326
|
+
* is the unambiguous separator.
|
|
327
|
+
*/
|
|
328
|
+
function extractIdFromFilename(filename) {
|
|
329
|
+
const match = filename.match(/^[^_]+_(.+)\.json$/);
|
|
330
|
+
return match?.[1];
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=dedupe-conversations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedupe-conversations.js","sourceRoot":"","sources":["../../../../src/jobs/handlers/dedupe-conversations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../../src/jobs/handlers/ingest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../../src/jobs/handlers/ingest.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAElB,MAAM,0BAA0B,CAAC;AAalC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,wBAAwB,CAAC,EAAE,CACzB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,iBAAiB,KACpB,iBAAiB,CAAC;CACxB;AA4HD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CA6PvE"}
|