@hope666/melu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +57 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +630 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +45 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +135 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/embedder-client.d.ts +24 -0
  12. package/dist/embedder-client.d.ts.map +1 -0
  13. package/dist/embedder-client.js +164 -0
  14. package/dist/embedder-client.js.map +1 -0
  15. package/dist/embedder-daemon-client.d.ts +10 -0
  16. package/dist/embedder-daemon-client.d.ts.map +1 -0
  17. package/dist/embedder-daemon-client.js +185 -0
  18. package/dist/embedder-daemon-client.js.map +1 -0
  19. package/dist/embedder-daemon.d.ts +11 -0
  20. package/dist/embedder-daemon.d.ts.map +1 -0
  21. package/dist/embedder-daemon.js +284 -0
  22. package/dist/embedder-daemon.js.map +1 -0
  23. package/dist/embedder-ipc.d.ts +27 -0
  24. package/dist/embedder-ipc.d.ts.map +1 -0
  25. package/dist/embedder-ipc.js +60 -0
  26. package/dist/embedder-ipc.js.map +1 -0
  27. package/dist/embedder-main.d.ts +2 -0
  28. package/dist/embedder-main.d.ts.map +1 -0
  29. package/dist/embedder-main.js +6 -0
  30. package/dist/embedder-main.js.map +1 -0
  31. package/dist/embedder.d.ts +41 -0
  32. package/dist/embedder.d.ts.map +1 -0
  33. package/dist/embedder.js +231 -0
  34. package/dist/embedder.js.map +1 -0
  35. package/dist/extraction-queue.d.ts +53 -0
  36. package/dist/extraction-queue.d.ts.map +1 -0
  37. package/dist/extraction-queue.js +418 -0
  38. package/dist/extraction-queue.js.map +1 -0
  39. package/dist/extraction-stats.d.ts +15 -0
  40. package/dist/extraction-stats.d.ts.map +1 -0
  41. package/dist/extraction-stats.js +89 -0
  42. package/dist/extraction-stats.js.map +1 -0
  43. package/dist/extractor-worker-main.d.ts +2 -0
  44. package/dist/extractor-worker-main.d.ts.map +1 -0
  45. package/dist/extractor-worker-main.js +70 -0
  46. package/dist/extractor-worker-main.js.map +1 -0
  47. package/dist/extractor-worker.d.ts +17 -0
  48. package/dist/extractor-worker.d.ts.map +1 -0
  49. package/dist/extractor-worker.js +164 -0
  50. package/dist/extractor-worker.js.map +1 -0
  51. package/dist/extractor.d.ts +36 -0
  52. package/dist/extractor.d.ts.map +1 -0
  53. package/dist/extractor.js +244 -0
  54. package/dist/extractor.js.map +1 -0
  55. package/dist/i18n.d.ts +995 -0
  56. package/dist/i18n.d.ts.map +1 -0
  57. package/dist/i18n.js +1024 -0
  58. package/dist/i18n.js.map +1 -0
  59. package/dist/memory.d.ts +62 -0
  60. package/dist/memory.d.ts.map +1 -0
  61. package/dist/memory.js +293 -0
  62. package/dist/memory.js.map +1 -0
  63. package/dist/model-bootstrap.d.ts +29 -0
  64. package/dist/model-bootstrap.d.ts.map +1 -0
  65. package/dist/model-bootstrap.js +235 -0
  66. package/dist/model-bootstrap.js.map +1 -0
  67. package/dist/proxy-main.d.ts +5 -0
  68. package/dist/proxy-main.d.ts.map +1 -0
  69. package/dist/proxy-main.js +10 -0
  70. package/dist/proxy-main.js.map +1 -0
  71. package/dist/proxy.d.ts +9 -0
  72. package/dist/proxy.d.ts.map +1 -0
  73. package/dist/proxy.js +309 -0
  74. package/dist/proxy.js.map +1 -0
  75. package/dist/run-runtime.d.ts +34 -0
  76. package/dist/run-runtime.d.ts.map +1 -0
  77. package/dist/run-runtime.js +170 -0
  78. package/dist/run-runtime.js.map +1 -0
  79. package/dist/runtime-context.d.ts +12 -0
  80. package/dist/runtime-context.d.ts.map +1 -0
  81. package/dist/runtime-context.js +39 -0
  82. package/dist/runtime-context.js.map +1 -0
  83. package/dist/text-chunking.d.ts +7 -0
  84. package/dist/text-chunking.d.ts.map +1 -0
  85. package/dist/text-chunking.js +50 -0
  86. package/dist/text-chunking.js.map +1 -0
  87. package/package.json +46 -0
@@ -0,0 +1,418 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { basename, dirname, join } from "node:path";
4
+ import { PENDING_EXTRACTIONS_DIR } from "./config.js";
5
+ const DEFAULT_RUN_ID = "legacy";
6
+ const LEGACY_PENDING_EXTRACTION_FILE = join(PENDING_EXTRACTIONS_DIR, "pending-extractions.jsonl");
7
+ const LEGACY_JOB_SUFFIXES = [".pending.json", ".working.json", ".failed.json"];
8
+ const JOB_SUFFIX = ".json";
9
+ const DEFAULT_MAX_ATTEMPTS = 3;
10
+ const DEFAULT_RETRY_BASE_DELAY_MS = 30_000;
11
+ const DEFAULT_RETRY_MAX_DELAY_MS = 10 * 60_000;
12
+ function sanitizeRunId(value) {
13
+ const trimmed = value.trim();
14
+ if (!trimmed)
15
+ return DEFAULT_RUN_ID;
16
+ const sanitized = trimmed.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^[-.]+|[-.]+$/g, "");
17
+ return sanitized.length > 0 ? sanitized.slice(0, 120) : DEFAULT_RUN_ID;
18
+ }
19
+ export function resolveExtractionRunId(value) {
20
+ const explicit = value?.trim();
21
+ if (explicit)
22
+ return sanitizeRunId(explicit);
23
+ const fromEnv = process.env.MELU_RUN_ID?.trim() || process.env.MELU_EXTRACTION_RUN_ID?.trim();
24
+ return sanitizeRunId(fromEnv || DEFAULT_RUN_ID);
25
+ }
26
+ export function getExtractionQueuePaths(runId) {
27
+ const normalizedRunId = resolveExtractionRunId(runId);
28
+ const runDir = join(PENDING_EXTRACTIONS_DIR, normalizedRunId);
29
+ return {
30
+ runId: normalizedRunId,
31
+ runDir,
32
+ pendingDir: join(runDir, "pending"),
33
+ workingDir: join(runDir, "working"),
34
+ failedDir: join(runDir, "failed"),
35
+ };
36
+ }
37
+ function ensureDirectory(dir) {
38
+ if (!existsSync(dir)) {
39
+ mkdirSync(dir, { recursive: true });
40
+ }
41
+ }
42
+ function ensureQueueDirs(paths) {
43
+ ensureDirectory(PENDING_EXTRACTIONS_DIR);
44
+ ensureDirectory(paths.runDir);
45
+ ensureDirectory(paths.pendingDir);
46
+ ensureDirectory(paths.workingDir);
47
+ ensureDirectory(paths.failedDir);
48
+ }
49
+ function queueFilePath(dir, jobId) {
50
+ return join(dir, `${jobId}${JOB_SUFFIX}`);
51
+ }
52
+ function writeJsonAtomically(filePath, value) {
53
+ ensureDirectory(dirname(filePath));
54
+ const tmpPath = join(dirname(filePath), `.${basename(filePath)}.${process.pid}.${Date.now()}.${randomUUID()}.tmp`);
55
+ writeFileSync(tmpPath, JSON.stringify(value, null, 2), "utf-8");
56
+ try {
57
+ renameSync(tmpPath, filePath);
58
+ }
59
+ catch {
60
+ try {
61
+ unlinkSync(filePath);
62
+ }
63
+ catch {
64
+ // Ignore missing destination or cleanup failures.
65
+ }
66
+ renameSync(tmpPath, filePath);
67
+ }
68
+ }
69
+ function normalizeJob(value, runId) {
70
+ if (!value || typeof value !== "object")
71
+ return null;
72
+ const obj = value;
73
+ const text = typeof obj.text === "string" ? obj.text.trim() : "";
74
+ if (!text)
75
+ return null;
76
+ const id = typeof obj.id === "string" && obj.id.trim() ? obj.id.trim() : randomUUID();
77
+ const ts = typeof obj.ts === "number" && Number.isFinite(obj.ts) ? obj.ts : Date.now();
78
+ const rawAttempts = Number(obj.attempts);
79
+ const attempts = Number.isInteger(rawAttempts) && rawAttempts >= 0 ? rawAttempts : 0;
80
+ const memoryPath = typeof obj.memoryPath === "string" && obj.memoryPath.trim() ? obj.memoryPath.trim() : null;
81
+ const lastError = typeof obj.lastError === "string" && obj.lastError.trim() ? obj.lastError.trim() : null;
82
+ const rawNextAttemptAt = Number(obj.nextAttemptAt);
83
+ const nextAttemptAt = Number.isFinite(rawNextAttemptAt) && rawNextAttemptAt >= 0 ? rawNextAttemptAt : null;
84
+ const rawUpdatedAt = Number(obj.updatedAt);
85
+ const updatedAt = Number.isFinite(rawUpdatedAt) && rawUpdatedAt >= 0 ? rawUpdatedAt : ts;
86
+ return {
87
+ id,
88
+ runId,
89
+ text,
90
+ ts,
91
+ attempts,
92
+ memoryPath,
93
+ lastError,
94
+ nextAttemptAt,
95
+ updatedAt,
96
+ };
97
+ }
98
+ function readJobFile(filePath, runId) {
99
+ try {
100
+ const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
101
+ const job = normalizeJob(parsed, runId);
102
+ if (!job) {
103
+ try {
104
+ unlinkSync(filePath);
105
+ }
106
+ catch {
107
+ // Ignore cleanup failures for malformed files.
108
+ }
109
+ return null;
110
+ }
111
+ return job;
112
+ }
113
+ catch {
114
+ try {
115
+ unlinkSync(filePath);
116
+ }
117
+ catch {
118
+ // Ignore cleanup failures for malformed files.
119
+ }
120
+ return null;
121
+ }
122
+ }
123
+ function moveFileReplacingExisting(sourcePath, targetPath) {
124
+ ensureDirectory(dirname(targetPath));
125
+ try {
126
+ unlinkSync(targetPath);
127
+ }
128
+ catch {
129
+ // Ignore if the destination does not exist.
130
+ }
131
+ renameSync(sourcePath, targetPath);
132
+ }
133
+ function listFiles(dir) {
134
+ try {
135
+ return readdirSync(dir);
136
+ }
137
+ catch {
138
+ return [];
139
+ }
140
+ }
141
+ function collectJobs(dir, runId) {
142
+ const jobs = [];
143
+ for (const fileName of listFiles(dir)) {
144
+ if (!fileName.endsWith(JOB_SUFFIX))
145
+ continue;
146
+ const path = join(dir, fileName);
147
+ const job = readJobFile(path, runId);
148
+ if (!job)
149
+ continue;
150
+ jobs.push({ path, job });
151
+ }
152
+ jobs.sort((a, b) => {
153
+ if (a.job.ts !== b.job.ts)
154
+ return a.job.ts - b.job.ts;
155
+ if (a.job.attempts !== b.job.attempts)
156
+ return a.job.attempts - b.job.attempts;
157
+ return a.job.id.localeCompare(b.job.id);
158
+ });
159
+ return jobs;
160
+ }
161
+ function createQueuedJob(runId, text, memoryPath) {
162
+ const now = Date.now();
163
+ return {
164
+ id: randomUUID(),
165
+ runId,
166
+ text: text.trim(),
167
+ ts: now,
168
+ attempts: 0,
169
+ memoryPath: memoryPath?.trim() || null,
170
+ lastError: null,
171
+ nextAttemptAt: null,
172
+ updatedAt: now,
173
+ };
174
+ }
175
+ function writeJobToPending(paths, job) {
176
+ const jobPath = queueFilePath(paths.pendingDir, job.id);
177
+ writeJsonAtomically(jobPath, job);
178
+ return jobPath;
179
+ }
180
+ function writeJobToFailed(paths, job) {
181
+ const jobPath = queueFilePath(paths.failedDir, job.id);
182
+ writeJsonAtomically(jobPath, job);
183
+ return jobPath;
184
+ }
185
+ function promoteRetryableFailedJobs(paths, now) {
186
+ for (const { path, job } of collectJobs(paths.failedDir, paths.runId)) {
187
+ if (job.nextAttemptAt === null || job.nextAttemptAt > now)
188
+ continue;
189
+ const pendingPath = queueFilePath(paths.pendingDir, job.id);
190
+ try {
191
+ moveFileReplacingExisting(path, pendingPath);
192
+ }
193
+ catch {
194
+ // Leave the job in failed if the move could not be completed.
195
+ }
196
+ }
197
+ }
198
+ function recoverWorkingJobs(paths) {
199
+ for (const { path, job } of collectJobs(paths.workingDir, paths.runId)) {
200
+ const pendingPath = queueFilePath(paths.pendingDir, job.id);
201
+ try {
202
+ moveFileReplacingExisting(path, pendingPath);
203
+ }
204
+ catch {
205
+ // Leave the job in working for a future run to recover.
206
+ }
207
+ }
208
+ }
209
+ function migrateLegacyPendingExtractionJobs(paths) {
210
+ if (existsSync(LEGACY_PENDING_EXTRACTION_FILE)) {
211
+ try {
212
+ const raw = readFileSync(LEGACY_PENDING_EXTRACTION_FILE, "utf-8").trim();
213
+ if (raw) {
214
+ for (const line of raw.split("\n").filter(Boolean)) {
215
+ try {
216
+ const normalized = normalizeJob(JSON.parse(line), paths.runId);
217
+ if (normalized) {
218
+ writeJobToPending(paths, normalized);
219
+ }
220
+ }
221
+ catch {
222
+ // Skip malformed legacy rows and keep migrating.
223
+ }
224
+ }
225
+ }
226
+ }
227
+ finally {
228
+ try {
229
+ unlinkSync(LEGACY_PENDING_EXTRACTION_FILE);
230
+ }
231
+ catch {
232
+ // Ignore cleanup failures.
233
+ }
234
+ }
235
+ }
236
+ for (const fileName of listFiles(PENDING_EXTRACTIONS_DIR)) {
237
+ if (fileName === basename(paths.runDir))
238
+ continue;
239
+ const legacySuffix = LEGACY_JOB_SUFFIXES.find((suffix) => fileName.endsWith(suffix));
240
+ if (!legacySuffix)
241
+ continue;
242
+ const legacyPath = join(PENDING_EXTRACTIONS_DIR, fileName);
243
+ const parsedJob = readJobFile(legacyPath, paths.runId);
244
+ if (!parsedJob)
245
+ continue;
246
+ const targetDir = legacySuffix === ".failed.json" ? paths.failedDir : paths.pendingDir;
247
+ const targetPath = queueFilePath(targetDir, parsedJob.id);
248
+ try {
249
+ writeJsonAtomically(targetPath, {
250
+ ...parsedJob,
251
+ nextAttemptAt: legacySuffix === ".failed.json" ? parsedJob.nextAttemptAt : null,
252
+ });
253
+ }
254
+ catch {
255
+ // Skip if the migrated file could not be written.
256
+ continue;
257
+ }
258
+ try {
259
+ unlinkSync(legacyPath);
260
+ }
261
+ catch {
262
+ // Ignore cleanup failures.
263
+ }
264
+ }
265
+ }
266
+ export function preparePendingExtractionQueue(runId) {
267
+ preparePendingExtractionQueueForRun(resolveExtractionRunId(runId));
268
+ }
269
+ export function preparePendingExtractionQueueForRun(runId) {
270
+ const paths = getExtractionQueuePaths(runId);
271
+ ensureQueueDirs(paths);
272
+ migrateLegacyPendingExtractionJobs(paths);
273
+ recoverWorkingJobs(paths);
274
+ promoteRetryableFailedJobs(paths, Date.now());
275
+ }
276
+ export function enqueuePendingExtractionJob(text, memoryPath, runId) {
277
+ return enqueuePendingExtractionJobForRun(resolveExtractionRunId(runId), text, memoryPath);
278
+ }
279
+ export function enqueuePendingExtractionJobForRun(runId, text, memoryPath) {
280
+ const trimmed = text.trim();
281
+ if (!trimmed)
282
+ return null;
283
+ const paths = getExtractionQueuePaths(runId);
284
+ ensureQueueDirs(paths);
285
+ const job = createQueuedJob(paths.runId, trimmed, memoryPath ?? null);
286
+ writeJobToPending(paths, job);
287
+ return job.id;
288
+ }
289
+ export function claimNextPendingExtractionJob(runId) {
290
+ return claimNextPendingExtractionJobForRun(resolveExtractionRunId(runId));
291
+ }
292
+ export function claimNextPendingExtractionJobForRun(runId) {
293
+ const paths = getExtractionQueuePaths(runId);
294
+ ensureQueueDirs(paths);
295
+ promoteRetryableFailedJobs(paths, Date.now());
296
+ const jobs = collectJobs(paths.pendingDir, paths.runId);
297
+ for (const { path, job } of jobs) {
298
+ const claimedPath = queueFilePath(paths.workingDir, job.id);
299
+ try {
300
+ moveFileReplacingExisting(path, claimedPath);
301
+ }
302
+ catch {
303
+ continue;
304
+ }
305
+ const claimedJob = readJobFile(claimedPath, paths.runId);
306
+ if (!claimedJob) {
307
+ try {
308
+ unlinkSync(claimedPath);
309
+ }
310
+ catch {
311
+ // Ignore cleanup failures.
312
+ }
313
+ continue;
314
+ }
315
+ return {
316
+ ...claimedJob,
317
+ claimedPath,
318
+ };
319
+ }
320
+ return null;
321
+ }
322
+ export function completeClaimedPendingExtractionJob(job) {
323
+ try {
324
+ unlinkSync(job.claimedPath);
325
+ }
326
+ catch {
327
+ // Ignore cleanup failures.
328
+ }
329
+ }
330
+ function computeRetryDelayMs(attempt, policy) {
331
+ const baseDelayMs = policy?.baseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;
332
+ const maxDelayMs = policy?.maxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS;
333
+ const scale = Math.max(0, attempt - 1);
334
+ const delayMs = baseDelayMs * (2 ** scale);
335
+ return Math.min(delayMs, maxDelayMs);
336
+ }
337
+ export function requeueClaimedPendingExtractionJob(job, updates, policy) {
338
+ const paths = getExtractionQueuePaths(job.runId);
339
+ ensureQueueDirs(paths);
340
+ const nextAttempts = Number.isInteger(updates?.attempts) && (updates?.attempts ?? 0) >= 0
341
+ ? Number(updates?.attempts)
342
+ : job.attempts + 1;
343
+ const nextJob = {
344
+ id: job.id,
345
+ runId: paths.runId,
346
+ text: updates?.text?.trim() || job.text,
347
+ ts: typeof updates?.ts === "number" && Number.isFinite(updates.ts) ? updates.ts : job.ts,
348
+ attempts: nextAttempts,
349
+ memoryPath: updates?.memoryPath ?? job.memoryPath,
350
+ lastError: updates?.lastError ?? job.lastError,
351
+ nextAttemptAt: null,
352
+ updatedAt: Date.now(),
353
+ };
354
+ if (policy) {
355
+ const maxAttempts = policy.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
356
+ const shouldRetry = nextAttempts < maxAttempts;
357
+ nextJob.nextAttemptAt = shouldRetry
358
+ ? Date.now() + computeRetryDelayMs(nextAttempts, policy)
359
+ : null;
360
+ }
361
+ const targetPath = policy ? queueFilePath(paths.failedDir, nextJob.id) : queueFilePath(paths.pendingDir, nextJob.id);
362
+ writeJsonAtomically(targetPath, nextJob);
363
+ try {
364
+ unlinkSync(job.claimedPath);
365
+ }
366
+ catch {
367
+ // Ignore cleanup failures.
368
+ }
369
+ return {
370
+ job: nextJob,
371
+ terminal: Boolean(policy) && nextJob.nextAttemptAt === null,
372
+ path: targetPath,
373
+ };
374
+ }
375
+ export function getExtractionQueueSnapshot(runId) {
376
+ return getExtractionQueueSnapshotForRun(resolveExtractionRunId(runId));
377
+ }
378
+ export function getExtractionQueueSnapshotForRun(runId) {
379
+ const paths = getExtractionQueuePaths(runId);
380
+ ensureQueueDirs(paths);
381
+ let pending = 0;
382
+ let working = 0;
383
+ let retryableFailed = 0;
384
+ let terminalFailed = 0;
385
+ let nextRetryAt = null;
386
+ for (const { job } of collectJobs(paths.pendingDir, paths.runId)) {
387
+ pending += 1;
388
+ if (job.nextAttemptAt !== null && (nextRetryAt === null || job.nextAttemptAt < nextRetryAt)) {
389
+ nextRetryAt = job.nextAttemptAt;
390
+ }
391
+ }
392
+ for (const { job } of collectJobs(paths.workingDir, paths.runId)) {
393
+ working += 1;
394
+ if (job.nextAttemptAt !== null && (nextRetryAt === null || job.nextAttemptAt < nextRetryAt)) {
395
+ nextRetryAt = job.nextAttemptAt;
396
+ }
397
+ }
398
+ for (const { job } of collectJobs(paths.failedDir, paths.runId)) {
399
+ if (job.nextAttemptAt === null) {
400
+ terminalFailed += 1;
401
+ continue;
402
+ }
403
+ retryableFailed += 1;
404
+ if (nextRetryAt === null || job.nextAttemptAt < nextRetryAt) {
405
+ nextRetryAt = job.nextAttemptAt;
406
+ }
407
+ }
408
+ return {
409
+ runId: paths.runId,
410
+ pending,
411
+ working,
412
+ retryableFailed,
413
+ terminalFailed,
414
+ remaining: pending + working + retryableFailed,
415
+ nextRetryAt,
416
+ };
417
+ }
418
+ //# sourceMappingURL=extraction-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-queue.js","sourceRoot":"","sources":["../src/extraction-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ExtractionRunStats {
2
+ runId: string;
3
+ processed: number;
4
+ effectiveNewMemories: number;
5
+ failed: number;
6
+ remainingQueue: number;
7
+ updatedAt: string;
8
+ }
9
+ export declare function getExtractionStatsPath(runId: string): string;
10
+ export declare function createInitialExtractionRunStats(runId: string, remainingQueue?: number): ExtractionRunStats;
11
+ export declare function readExtractionRunStats(runId: string): ExtractionRunStats | null;
12
+ export declare function writeExtractionRunStats(stats: ExtractionRunStats): void;
13
+ export declare function updateExtractionRunStats(runId: string, updater: (current: ExtractionRunStats) => ExtractionRunStats): ExtractionRunStats;
14
+ export declare function setExtractionRunStatsRemainingQueue(runId: string, remainingQueue: number): ExtractionRunStats;
15
+ //# sourceMappingURL=extraction-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-stats.d.ts","sourceRoot":"","sources":["../src/extraction-stats.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG5D;AAuBD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,EACb,cAAc,SAAI,GACjB,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA2B/E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAEvE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,GAC3D,kBAAkB,CAUpB;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,kBAAkB,CAMpB"}
@@ -0,0 +1,89 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { basename, dirname, join } from "node:path";
3
+ import { STATS_DIR } from "./config.js";
4
+ import { resolveExtractionRunId } from "./extraction-queue.js";
5
+ const STATS_FILE_NAME = "extraction-worker.json";
6
+ function ensureDirectory(dir) {
7
+ if (!existsSync(dir)) {
8
+ mkdirSync(dir, { recursive: true });
9
+ }
10
+ }
11
+ export function getExtractionStatsPath(runId) {
12
+ const normalizedRunId = resolveExtractionRunId(runId);
13
+ return join(STATS_DIR, normalizedRunId, STATS_FILE_NAME);
14
+ }
15
+ function writeJsonAtomically(filePath, value) {
16
+ ensureDirectory(dirname(filePath));
17
+ const tmpPath = join(dirname(filePath), `.${basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
18
+ writeFileSync(tmpPath, JSON.stringify(value, null, 2), "utf-8");
19
+ try {
20
+ renameSync(tmpPath, filePath);
21
+ }
22
+ catch {
23
+ try {
24
+ unlinkSync(filePath);
25
+ }
26
+ catch {
27
+ // Ignore missing destination or cleanup failures.
28
+ }
29
+ renameSync(tmpPath, filePath);
30
+ }
31
+ }
32
+ export function createInitialExtractionRunStats(runId, remainingQueue = 0) {
33
+ return {
34
+ runId: resolveExtractionRunId(runId),
35
+ processed: 0,
36
+ effectiveNewMemories: 0,
37
+ failed: 0,
38
+ remainingQueue,
39
+ updatedAt: new Date().toISOString(),
40
+ };
41
+ }
42
+ export function readExtractionRunStats(runId) {
43
+ const statsPath = getExtractionStatsPath(runId);
44
+ if (!existsSync(statsPath))
45
+ return null;
46
+ try {
47
+ const parsed = JSON.parse(readFileSync(statsPath, "utf-8"));
48
+ if (typeof parsed.runId !== "string" ||
49
+ typeof parsed.processed !== "number" ||
50
+ typeof parsed.effectiveNewMemories !== "number" ||
51
+ typeof parsed.failed !== "number" ||
52
+ typeof parsed.remainingQueue !== "number") {
53
+ return null;
54
+ }
55
+ return {
56
+ runId: parsed.runId,
57
+ processed: parsed.processed,
58
+ effectiveNewMemories: parsed.effectiveNewMemories,
59
+ failed: parsed.failed,
60
+ remainingQueue: parsed.remainingQueue,
61
+ updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : new Date().toISOString(),
62
+ };
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ export function writeExtractionRunStats(stats) {
69
+ writeJsonAtomically(getExtractionStatsPath(stats.runId), stats);
70
+ }
71
+ export function updateExtractionRunStats(runId, updater) {
72
+ const current = readExtractionRunStats(runId) ?? createInitialExtractionRunStats(runId);
73
+ const next = updater(current);
74
+ const normalized = {
75
+ ...next,
76
+ runId: resolveExtractionRunId(next.runId),
77
+ updatedAt: next.updatedAt || new Date().toISOString(),
78
+ };
79
+ writeExtractionRunStats(normalized);
80
+ return normalized;
81
+ }
82
+ export function setExtractionRunStatsRemainingQueue(runId, remainingQueue) {
83
+ return updateExtractionRunStats(runId, (current) => ({
84
+ ...current,
85
+ remainingQueue,
86
+ updatedAt: new Date().toISOString(),
87
+ }));
88
+ }
89
+ //# sourceMappingURL=extraction-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-stats.js","sourceRoot":"","sources":["../src/extraction-stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extractor-worker-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-worker-main.d.ts","sourceRoot":"","sources":["../src/extractor-worker-main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import { ensureDirs, loadConfig } from "./config.js";
2
+ import { getExtractionQueueSnapshotForRun, resolveExtractionRunId } from "./extraction-queue.js";
3
+ import { createInitialExtractionRunStats, readExtractionRunStats, writeExtractionRunStats, } from "./extraction-stats.js";
4
+ import { runExtractorWorker } from "./extractor-worker.js";
5
+ function requireEnv(name) {
6
+ const value = process.env[name]?.trim();
7
+ if (!value) {
8
+ throw new Error(`${name} is required`);
9
+ }
10
+ return value;
11
+ }
12
+ function parseOptionalPid(name) {
13
+ const raw = process.env[name]?.trim();
14
+ if (!raw)
15
+ return null;
16
+ const pid = Number.parseInt(raw, 10);
17
+ return Number.isInteger(pid) && pid > 0 ? pid : null;
18
+ }
19
+ function terminateProcess(pid) {
20
+ if (!pid)
21
+ return;
22
+ try {
23
+ process.kill(pid, "SIGTERM");
24
+ }
25
+ catch {
26
+ // Best-effort cleanup.
27
+ }
28
+ }
29
+ async function main() {
30
+ ensureDirs();
31
+ const runId = resolveExtractionRunId(requireEnv("MELU_RUN_ID"));
32
+ const defaultMemoryPath = requireEnv("MELU_MEMORY_PATH");
33
+ const embedderSocketPath = requireEnv("MELU_EMBEDDER_SOCKET");
34
+ const ownerPid = parseOptionalPid("MELU_OWNER_PID");
35
+ const embedderPid = parseOptionalPid("MELU_EMBEDDER_PID");
36
+ const config = loadConfig();
37
+ const initialSnapshot = getExtractionQueueSnapshotForRun(runId);
38
+ writeExtractionRunStats(readExtractionRunStats(runId) ?? createInitialExtractionRunStats(runId, initialSnapshot.remaining));
39
+ const abortController = new AbortController();
40
+ process.once("SIGINT", () => abortController.abort());
41
+ process.once("SIGTERM", () => abortController.abort());
42
+ try {
43
+ await runExtractorWorker({
44
+ runId,
45
+ ownerPid,
46
+ defaultMemoryPath,
47
+ embeddingModel: config.embeddingModel,
48
+ embedderSocketPath,
49
+ quiet: true,
50
+ abortSignal: abortController.signal,
51
+ });
52
+ }
53
+ finally {
54
+ const finalSnapshot = getExtractionQueueSnapshotForRun(runId);
55
+ const currentStats = readExtractionRunStats(runId) ?? createInitialExtractionRunStats(runId, finalSnapshot.remaining);
56
+ writeExtractionRunStats({
57
+ ...currentStats,
58
+ remainingQueue: finalSnapshot.remaining,
59
+ updatedAt: new Date().toISOString(),
60
+ });
61
+ if (finalSnapshot.remaining === 0) {
62
+ terminateProcess(embedderPid);
63
+ }
64
+ }
65
+ }
66
+ void main().catch((error) => {
67
+ console.error("[Melu] extractor worker failed:", error);
68
+ process.exitCode = 1;
69
+ });
70
+ //# sourceMappingURL=extractor-worker-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-worker-main.js","sourceRoot":"","sources":["../src/extractor-worker-main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ExtractionRunStats } from "./extraction-stats.js";
2
+ export interface ExtractorWorkerOptions {
3
+ runId: string;
4
+ defaultMemoryPath: string;
5
+ embeddingModel: string;
6
+ embedderSocketPath?: string;
7
+ ownerPid?: number | null;
8
+ maxAttempts?: number;
9
+ retryBaseDelayMs?: number;
10
+ retryMaxDelayMs?: number;
11
+ pollIntervalMs?: number;
12
+ quiet?: boolean;
13
+ abortSignal?: AbortSignal | null;
14
+ }
15
+ export declare function runExtractorWorker(options: ExtractorWorkerOptions): Promise<ExtractionRunStats>;
16
+ export declare function createExtractorWorkerAbortController(): AbortController;
17
+ //# sourceMappingURL=extractor-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-worker.d.ts","sourceRoot":"","sources":["../src/extractor-worker.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAQ/B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AA6HD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAoE7B;AAED,wBAAgB,oCAAoC,IAAI,eAAe,CAEtE"}