unforgit 0.11.9 → 0.11.10
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/index.js
CHANGED
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
saveConfig,
|
|
36
36
|
shouldImportMarkdownMemory,
|
|
37
37
|
validateMemoryType
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-J74YKGDT.js";
|
|
39
39
|
|
|
40
40
|
// src/index.ts
|
|
41
41
|
import { Command as Command32 } from "commander";
|
|
@@ -2254,21 +2254,18 @@ var pullCommand = new Command17("pull").description("Pull remote memories to loc
|
|
|
2254
2254
|
}
|
|
2255
2255
|
const client = new RemoteClient(config.remote.url);
|
|
2256
2256
|
logger.info(`Fetching from ${remote} (${config.remote.url})...`);
|
|
2257
|
-
const
|
|
2258
|
-
orgId,
|
|
2259
|
-
repoId
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
});
|
|
2264
|
-
const remoteMemories = response.results;
|
|
2265
|
-
if (remoteMemories.length === 0) {
|
|
2266
|
-
logger.info("Already up to date (no memories on remote)");
|
|
2257
|
+
const [remoteMemories, remoteTombstones] = await Promise.all([
|
|
2258
|
+
client.syncPull(orgId, repoId),
|
|
2259
|
+
client.syncTombstones(orgId, repoId)
|
|
2260
|
+
]);
|
|
2261
|
+
if (remoteMemories.length === 0 && remoteTombstones.length === 0) {
|
|
2262
|
+
logger.info("Already up to date (no remote changes)");
|
|
2267
2263
|
return;
|
|
2268
2264
|
}
|
|
2269
2265
|
if (opts.dryRun) {
|
|
2270
2266
|
let newCount = 0;
|
|
2271
2267
|
let updateCount = 0;
|
|
2268
|
+
let deletionCount = 0;
|
|
2272
2269
|
for (const remoteMem of remoteMemories) {
|
|
2273
2270
|
const localMem = store.getById(remoteMem.id);
|
|
2274
2271
|
if (!localMem) {
|
|
@@ -2277,41 +2274,33 @@ var pullCommand = new Command17("pull").description("Pull remote memories to loc
|
|
|
2277
2274
|
updateCount++;
|
|
2278
2275
|
}
|
|
2279
2276
|
}
|
|
2277
|
+
for (const tombstone of remoteTombstones) {
|
|
2278
|
+
if (store.getById(tombstone.memoryId)) deletionCount++;
|
|
2279
|
+
}
|
|
2280
2280
|
logger.info(`
|
|
2281
2281
|
Would pull:`);
|
|
2282
2282
|
logger.info(` ${newCount} new memories`);
|
|
2283
2283
|
logger.info(` ${updateCount} updates`);
|
|
2284
|
+
logger.info(` ${deletionCount} deletions`);
|
|
2284
2285
|
return;
|
|
2285
2286
|
}
|
|
2286
2287
|
let created = 0;
|
|
2287
2288
|
let updated = 0;
|
|
2288
2289
|
let skipped = 0;
|
|
2289
2290
|
let conflicts = 0;
|
|
2291
|
+
let deleted = 0;
|
|
2292
|
+
for (const tombstone of remoteTombstones) {
|
|
2293
|
+
if (store.applyTombstone(tombstone)) deleted++;
|
|
2294
|
+
}
|
|
2290
2295
|
for (const remoteMem of remoteMemories) {
|
|
2291
2296
|
const localMem = store.getById(remoteMem.id);
|
|
2292
2297
|
const remoteStatus = remoteMem.status ?? "active";
|
|
2293
2298
|
if (!localMem) {
|
|
2294
|
-
store.upsertFromRemote({
|
|
2295
|
-
id: remoteMem.id,
|
|
2296
|
-
orgId,
|
|
2297
|
-
repoId,
|
|
2298
|
-
scopeType: "repo",
|
|
2299
|
-
memoryType: remoteMem.memoryType,
|
|
2300
|
-
visibility: "repo",
|
|
2301
|
-
status: remoteStatus,
|
|
2302
|
-
text: remoteMem.text,
|
|
2303
|
-
summary: remoteMem.summary,
|
|
2304
|
-
tags: remoteMem.tags,
|
|
2305
|
-
sourceRefs: remoteMem.sourceRefs,
|
|
2306
|
-
supersedesId: remoteMem.supersedesId,
|
|
2307
|
-
version: 1,
|
|
2308
|
-
createdAt: /* @__PURE__ */ new Date(),
|
|
2309
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
2310
|
-
});
|
|
2299
|
+
store.upsertFromRemote({ ...remoteMem, status: remoteStatus });
|
|
2311
2300
|
store.setSyncState({
|
|
2312
2301
|
memoryId: remoteMem.id,
|
|
2313
|
-
localVersion:
|
|
2314
|
-
remoteVersion:
|
|
2302
|
+
localVersion: remoteMem.version,
|
|
2303
|
+
remoteVersion: remoteMem.version,
|
|
2315
2304
|
lastPulledAt: /* @__PURE__ */ new Date(),
|
|
2316
2305
|
syncStatus: "synced"
|
|
2317
2306
|
});
|
|
@@ -2321,53 +2310,43 @@ Would pull:`);
|
|
|
2321
2310
|
logger.progress(created + updated + skipped + conflicts, remoteMemories.length, "memories");
|
|
2322
2311
|
} else {
|
|
2323
2312
|
const syncState = store.getSyncState(remoteMem.id);
|
|
2324
|
-
const localVersion = syncState?.localVersion ?? localMem.version;
|
|
2325
|
-
const remoteVersion = syncState?.remoteVersion ?? 0;
|
|
2326
2313
|
if (syncState?.syncStatus === "pending_push" && !opts.force) {
|
|
2327
2314
|
conflicts++;
|
|
2328
|
-
store.markAsConflict(remoteMem.id,
|
|
2315
|
+
store.markAsConflict(remoteMem.id, remoteMem.version);
|
|
2329
2316
|
logger.info(` ${remoteMem.id.slice(0, 8)}... conflict (local has unpushed changes)`);
|
|
2330
2317
|
logger.progress(created + updated + skipped + conflicts, remoteMemories.length, "memories");
|
|
2331
2318
|
continue;
|
|
2332
2319
|
}
|
|
2333
2320
|
const statusChanged = localMem.status !== remoteStatus;
|
|
2334
|
-
const
|
|
2335
|
-
|
|
2336
|
-
|
|
2321
|
+
const result = store.upsertFromRemote(
|
|
2322
|
+
{ ...remoteMem, status: remoteStatus },
|
|
2323
|
+
opts.force ? "remote_wins" : "last_write_wins"
|
|
2324
|
+
);
|
|
2325
|
+
if (result.conflict && result.action === "skipped") {
|
|
2326
|
+
conflicts++;
|
|
2327
|
+
store.markAsConflict(remoteMem.id, remoteMem.version);
|
|
2328
|
+
logger.info(` ${remoteMem.id.slice(0, 8)}... conflict (local is newer)`);
|
|
2337
2329
|
logger.progress(created + updated + skipped + conflicts, remoteMemories.length, "memories");
|
|
2338
2330
|
continue;
|
|
2339
2331
|
}
|
|
2340
|
-
if (
|
|
2341
|
-
|
|
2342
|
-
id: remoteMem.id,
|
|
2343
|
-
orgId,
|
|
2344
|
-
repoId,
|
|
2345
|
-
scopeType: "repo",
|
|
2346
|
-
memoryType: remoteMem.memoryType,
|
|
2347
|
-
visibility: "repo",
|
|
2348
|
-
status: remoteStatus,
|
|
2349
|
-
text: remoteMem.text,
|
|
2350
|
-
summary: remoteMem.summary,
|
|
2351
|
-
tags: remoteMem.tags,
|
|
2352
|
-
sourceRefs: remoteMem.sourceRefs,
|
|
2353
|
-
supersedesId: remoteMem.supersedesId,
|
|
2354
|
-
version: localVersion + 1,
|
|
2355
|
-
createdAt: localMem.createdAt,
|
|
2356
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
2357
|
-
});
|
|
2358
|
-
store.markAsPulled(remoteMem.id, localVersion + 1);
|
|
2359
|
-
updated++;
|
|
2360
|
-
const changeType = statusChanged && !textChanged ? "status updated" : "updated";
|
|
2361
|
-
const statusNote = remoteStatus !== "active" ? ` [${remoteStatus}]` : "";
|
|
2362
|
-
logger.info(` ${remoteMem.id.slice(0, 8)}... ${changeType}${statusNote}`);
|
|
2332
|
+
if (result.action === "skipped") {
|
|
2333
|
+
skipped++;
|
|
2363
2334
|
logger.progress(created + updated + skipped + conflicts, remoteMemories.length, "memories");
|
|
2335
|
+
continue;
|
|
2364
2336
|
}
|
|
2337
|
+
store.markAsPulled(remoteMem.id, remoteMem.version);
|
|
2338
|
+
updated++;
|
|
2339
|
+
const changeType = statusChanged ? "status updated" : "updated";
|
|
2340
|
+
const statusNote = remoteStatus !== "active" ? ` [${remoteStatus}]` : "";
|
|
2341
|
+
logger.info(` ${remoteMem.id.slice(0, 8)}... ${changeType}${statusNote}`);
|
|
2342
|
+
logger.progress(created + updated + skipped + conflicts, remoteMemories.length, "memories");
|
|
2365
2343
|
}
|
|
2366
2344
|
}
|
|
2367
2345
|
logger.info("");
|
|
2368
2346
|
logger.info(`Pull complete:`);
|
|
2369
2347
|
if (created > 0) logger.info(` ${created} new memories`);
|
|
2370
2348
|
if (updated > 0) logger.info(` ${updated} updates`);
|
|
2349
|
+
if (deleted > 0) logger.info(` ${deleted} deletions`);
|
|
2371
2350
|
if (skipped > 0) logger.info(` ${skipped} already up to date`);
|
|
2372
2351
|
if (conflicts > 0) {
|
|
2373
2352
|
logger.info(` ${conflicts} conflicts (use --force to overwrite local)`);
|