claude-memory-layer 1.0.50 → 1.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +73 -9
- package/dist/cli/index.js.map +2 -2
- package/dist/core/index.js +55 -4
- package/dist/core/index.js.map +2 -2
- package/dist/hooks/post-tool-use.js +55 -4
- package/dist/hooks/post-tool-use.js.map +2 -2
- package/dist/hooks/semantic-daemon.js +55 -4
- package/dist/hooks/semantic-daemon.js.map +2 -2
- package/dist/hooks/session-end.js +55 -4
- package/dist/hooks/session-end.js.map +2 -2
- package/dist/hooks/session-start.js +55 -4
- package/dist/hooks/session-start.js.map +2 -2
- package/dist/hooks/stop.js +55 -4
- package/dist/hooks/stop.js.map +2 -2
- package/dist/hooks/user-prompt-submit.js +55 -4
- package/dist/hooks/user-prompt-submit.js.map +2 -2
- package/dist/index.js +55 -4
- package/dist/index.js.map +2 -2
- package/dist/mcp/index.js +60 -5
- package/dist/mcp/index.js.map +2 -2
- package/dist/server/api/index.js +62 -5
- package/dist/server/api/index.js.map +2 -2
- package/dist/server/index.js +62 -5
- package/dist/server/index.js.map +2 -2
- package/dist/services/memory-service.js +55 -4
- package/dist/services/memory-service.js.map +2 -2
- package/dist/ui/assets/js/overview.js +9 -3
- package/dist/ui/assets/js/views.js +1 -1
- package/package.json +3 -1
package/dist/server/index.js
CHANGED
|
@@ -2337,6 +2337,10 @@ var DEFAULT_CONFIG2 = {
|
|
|
2337
2337
|
// 5 minutes
|
|
2338
2338
|
cleanupDays: 7
|
|
2339
2339
|
};
|
|
2340
|
+
function isRetryableLanceCommitConflict(error) {
|
|
2341
|
+
const normalized = error.toLowerCase();
|
|
2342
|
+
return normalized.includes("lance") && normalized.includes("commit") && normalized.includes("conflict");
|
|
2343
|
+
}
|
|
2340
2344
|
var VectorOutbox = class {
|
|
2341
2345
|
constructor(db, config) {
|
|
2342
2346
|
this.db = db;
|
|
@@ -2441,6 +2445,16 @@ var VectorOutbox = class {
|
|
|
2441
2445
|
);
|
|
2442
2446
|
if (rows.length === 0) return;
|
|
2443
2447
|
const retryCount = rows[0].retry_count;
|
|
2448
|
+
if (isRetryableLanceCommitConflict(error)) {
|
|
2449
|
+
await dbRun(
|
|
2450
|
+
this.db,
|
|
2451
|
+
`UPDATE vector_outbox
|
|
2452
|
+
SET status = 'pending', error = ?, updated_at = ?
|
|
2453
|
+
WHERE job_id = ?`,
|
|
2454
|
+
[error, now, jobId]
|
|
2455
|
+
);
|
|
2456
|
+
return;
|
|
2457
|
+
}
|
|
2444
2458
|
const newStatus = retryCount >= this.config.maxRetries - 1 ? "failed" : "pending";
|
|
2445
2459
|
await dbRun(
|
|
2446
2460
|
this.db,
|
|
@@ -4124,6 +4138,7 @@ var SQLiteEventStore = class {
|
|
|
4124
4138
|
async getOutboxStats(options = {}) {
|
|
4125
4139
|
await this.initialize();
|
|
4126
4140
|
const thresholdMs = Number.isFinite(options.stuckThresholdMs) && (options.stuckThresholdMs ?? 0) >= 0 ? options.stuckThresholdMs : DEFAULT_OUTBOX_STUCK_THRESHOLD_MS;
|
|
4141
|
+
const maxRetries = Number.isFinite(options.maxRetries) && (options.maxRetries ?? 0) > 0 ? options.maxRetries : DEFAULT_OUTBOX_MAX_RETRIES;
|
|
4127
4142
|
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
4128
4143
|
const threshold = new Date(now.getTime() - thresholdMs).toISOString();
|
|
4129
4144
|
const embeddingRows = sqliteAll(
|
|
@@ -4141,8 +4156,8 @@ var SQLiteEventStore = class {
|
|
|
4141
4156
|
if (!Number.isFinite(time)) return null;
|
|
4142
4157
|
return Math.max(0, now.getTime() - time);
|
|
4143
4158
|
};
|
|
4144
|
-
const fromRows = (rows, stuckProcessing, oldestProcessingAgeMs) => {
|
|
4145
|
-
const out = { pending: 0, processing: 0, failed: 0, total: 0, stuckProcessing, oldestProcessingAgeMs };
|
|
4159
|
+
const fromRows = (rows, stuckProcessing, oldestProcessingAgeMs, retryableFailed, quarantinedFailed) => {
|
|
4160
|
+
const out = { pending: 0, processing: 0, failed: 0, retryableFailed, quarantinedFailed, total: 0, stuckProcessing, oldestProcessingAgeMs };
|
|
4146
4161
|
for (const row of rows) {
|
|
4147
4162
|
const key = row.status;
|
|
4148
4163
|
if (key === "pending" || key === "processing" || key === "failed") {
|
|
@@ -4166,6 +4181,22 @@ var SQLiteEventStore = class {
|
|
|
4166
4181
|
FROM embedding_outbox
|
|
4167
4182
|
WHERE status = 'processing'`
|
|
4168
4183
|
);
|
|
4184
|
+
const embeddingRetryableFailed = sqliteGet(
|
|
4185
|
+
this.db,
|
|
4186
|
+
`SELECT COUNT(*) as count
|
|
4187
|
+
FROM embedding_outbox
|
|
4188
|
+
WHERE status = 'failed'
|
|
4189
|
+
AND retry_count < ?`,
|
|
4190
|
+
[maxRetries]
|
|
4191
|
+
);
|
|
4192
|
+
const embeddingQuarantinedFailed = sqliteGet(
|
|
4193
|
+
this.db,
|
|
4194
|
+
`SELECT COUNT(*) as count
|
|
4195
|
+
FROM embedding_outbox
|
|
4196
|
+
WHERE status = 'failed'
|
|
4197
|
+
AND retry_count >= ?`,
|
|
4198
|
+
[maxRetries]
|
|
4199
|
+
);
|
|
4169
4200
|
const vectorStuck = sqliteGet(
|
|
4170
4201
|
this.db,
|
|
4171
4202
|
`SELECT COUNT(*) as count
|
|
@@ -4180,16 +4211,36 @@ var SQLiteEventStore = class {
|
|
|
4180
4211
|
FROM vector_outbox
|
|
4181
4212
|
WHERE status = 'processing'`
|
|
4182
4213
|
);
|
|
4214
|
+
const vectorRetryableFailed = sqliteGet(
|
|
4215
|
+
this.db,
|
|
4216
|
+
`SELECT COUNT(*) as count
|
|
4217
|
+
FROM vector_outbox
|
|
4218
|
+
WHERE status = 'failed'
|
|
4219
|
+
AND retry_count < ?`,
|
|
4220
|
+
[maxRetries]
|
|
4221
|
+
);
|
|
4222
|
+
const vectorQuarantinedFailed = sqliteGet(
|
|
4223
|
+
this.db,
|
|
4224
|
+
`SELECT COUNT(*) as count
|
|
4225
|
+
FROM vector_outbox
|
|
4226
|
+
WHERE status = 'failed'
|
|
4227
|
+
AND retry_count >= ?`,
|
|
4228
|
+
[maxRetries]
|
|
4229
|
+
);
|
|
4183
4230
|
return {
|
|
4184
4231
|
embedding: fromRows(
|
|
4185
4232
|
embeddingRows,
|
|
4186
4233
|
Number(embeddingStuck?.count ?? 0),
|
|
4187
|
-
processingAgeMs(embeddingOldest?.oldest)
|
|
4234
|
+
processingAgeMs(embeddingOldest?.oldest),
|
|
4235
|
+
Number(embeddingRetryableFailed?.count ?? 0),
|
|
4236
|
+
Number(embeddingQuarantinedFailed?.count ?? 0)
|
|
4188
4237
|
),
|
|
4189
4238
|
vector: fromRows(
|
|
4190
4239
|
vectorRows,
|
|
4191
4240
|
Number(vectorStuck?.count ?? 0),
|
|
4192
|
-
processingAgeMs(vectorOldest?.oldest)
|
|
4241
|
+
processingAgeMs(vectorOldest?.oldest),
|
|
4242
|
+
Number(vectorRetryableFailed?.count ?? 0),
|
|
4243
|
+
Number(vectorQuarantinedFailed?.count ?? 0)
|
|
4193
4244
|
)
|
|
4194
4245
|
};
|
|
4195
4246
|
}
|
|
@@ -15218,8 +15269,10 @@ function aggregateOutbox(outbox) {
|
|
|
15218
15269
|
const pending = (outbox.embedding?.pending || 0) + (outbox.vector?.pending || 0);
|
|
15219
15270
|
const processing = (outbox.embedding?.processing || 0) + (outbox.vector?.processing || 0);
|
|
15220
15271
|
const failed = (outbox.embedding?.failed || 0) + (outbox.vector?.failed || 0);
|
|
15272
|
+
const retryableFailed = (outbox.embedding?.retryableFailed || 0) + (outbox.vector?.retryableFailed || 0);
|
|
15273
|
+
const quarantinedFailed = (outbox.embedding?.quarantinedFailed || 0) + (outbox.vector?.quarantinedFailed || 0);
|
|
15221
15274
|
const stuckProcessing = (outbox.embedding?.stuckProcessing || 0) + (outbox.vector?.stuckProcessing || 0);
|
|
15222
|
-
return { pending, processing, failed, stuckProcessing };
|
|
15275
|
+
return { pending, processing, failed, retryableFailed, quarantinedFailed, stuckProcessing };
|
|
15223
15276
|
}
|
|
15224
15277
|
healthRouter.get("/setup", async (c) => {
|
|
15225
15278
|
const memoryService = getLightweightServiceFromQuery(c);
|
|
@@ -15288,6 +15341,8 @@ healthRouter.get("/", async (c) => {
|
|
|
15288
15341
|
const outboxPending = outbox.embedding.pending + outbox.vector.pending;
|
|
15289
15342
|
const outboxProcessing = outbox.embedding.processing + outbox.vector.processing;
|
|
15290
15343
|
const outboxFailed = outbox.embedding.failed + outbox.vector.failed;
|
|
15344
|
+
const outboxRetryableFailed = (outbox.embedding.retryableFailed ?? 0) + (outbox.vector.retryableFailed ?? 0);
|
|
15345
|
+
const outboxQuarantinedFailed = (outbox.embedding.quarantinedFailed ?? 0) + (outbox.vector.quarantinedFailed ?? 0);
|
|
15291
15346
|
const outboxStuckProcessing = outbox.embedding.stuckProcessing + outbox.vector.stuckProcessing;
|
|
15292
15347
|
const oldestProcessingAgeMs = Math.max(
|
|
15293
15348
|
outbox.embedding.oldestProcessingAgeMs ?? 0,
|
|
@@ -15308,6 +15363,8 @@ healthRouter.get("/", async (c) => {
|
|
|
15308
15363
|
pending: outboxPending,
|
|
15309
15364
|
processing: outboxProcessing,
|
|
15310
15365
|
failed: outboxFailed,
|
|
15366
|
+
retryableFailed: outboxRetryableFailed,
|
|
15367
|
+
quarantinedFailed: outboxQuarantinedFailed,
|
|
15311
15368
|
stuckProcessing: outboxStuckProcessing,
|
|
15312
15369
|
oldestProcessingAgeMs
|
|
15313
15370
|
}
|