@remnic/cli 9.69.100 → 9.69.102
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 +116 -102
- package/package.json +32 -32
package/dist/index.js
CHANGED
|
@@ -16392,6 +16392,17 @@ function advanceOfflineBaseFilesForSuccessfulPush(options) {
|
|
|
16392
16392
|
return [...next.values()].sort((left, right) => left.path.localeCompare(right.path));
|
|
16393
16393
|
}
|
|
16394
16394
|
async function runOfflineSyncOnce(options) {
|
|
16395
|
+
const offlineStorage = await createConfiguredOfflineStorage(
|
|
16396
|
+
options.memoryDir,
|
|
16397
|
+
options.secureStoreEncryptOnWrite
|
|
16398
|
+
);
|
|
16399
|
+
try {
|
|
16400
|
+
return await runOfflineSyncOnceWithStorage(options, offlineStorage);
|
|
16401
|
+
} finally {
|
|
16402
|
+
await offlineStorage.storage.flushOfflineSyncDigestCache();
|
|
16403
|
+
}
|
|
16404
|
+
}
|
|
16405
|
+
async function runOfflineSyncOnceWithStorage(options, offlineStorage) {
|
|
16395
16406
|
fs32.mkdirSync(options.memoryDir, { recursive: true });
|
|
16396
16407
|
let activeStatePath = options.statePath;
|
|
16397
16408
|
let priorState = await readOfflineSyncState(activeStatePath);
|
|
@@ -16430,10 +16441,6 @@ async function runOfflineSyncOnce(options) {
|
|
|
16430
16441
|
}
|
|
16431
16442
|
const baseFiles = priorState?.baseFiles ?? [];
|
|
16432
16443
|
const baseCapturedAt = priorState ? new Date(priorState.lastSyncedAt) : void 0;
|
|
16433
|
-
const offlineStorage = await createConfiguredOfflineStorage(
|
|
16434
|
-
options.memoryDir,
|
|
16435
|
-
options.secureStoreEncryptOnWrite
|
|
16436
|
-
);
|
|
16437
16444
|
const storageIo = await createOfflineStorageIo(options.memoryDir, offlineStorage);
|
|
16438
16445
|
const syncBaseFiles = await filterOfflineSyncBaseFiles(options.memoryDir, baseFiles, storageIo.excludeFile);
|
|
16439
16446
|
const localSourceId = localOfflineSourceId(options.memoryDir);
|
|
@@ -17111,84 +17118,87 @@ Environment fallbacks:
|
|
|
17111
17118
|
statePath: existingState.statePath
|
|
17112
17119
|
});
|
|
17113
17120
|
}
|
|
17114
|
-
const
|
|
17115
|
-
|
|
17116
|
-
|
|
17117
|
-
);
|
|
17118
|
-
const currentSnapshot = await buildOfflineSyncSnapshotFromBase2({
|
|
17119
|
-
root: memoryDir,
|
|
17120
|
-
sourceId: "local",
|
|
17121
|
-
includeContent: false,
|
|
17122
|
-
includeTranscripts,
|
|
17123
|
-
readFile: storageIo.readFile,
|
|
17124
|
-
readFileDigest: storageIo.readFileDigest,
|
|
17125
|
-
excludeNodeLocalState: false
|
|
17126
|
-
});
|
|
17127
|
-
const stagedTransport = await stageGenerationMembersForApply({
|
|
17128
|
-
memoryDir,
|
|
17129
|
-
remoteUrl,
|
|
17130
|
-
token,
|
|
17131
|
-
namespace: resolvedNamespace,
|
|
17132
|
-
includeTranscripts,
|
|
17133
|
-
incomingFiles: remoteSnapshotMetadata.files,
|
|
17134
|
-
currentFiles: currentSnapshot.files,
|
|
17135
|
-
minBytes: OFFLINE_SYNC_DIRECT_HYDRATE_MIN_BYTES,
|
|
17136
|
-
secureStoreEncryptOnWrite: config.secureStoreEncryptOnWrite,
|
|
17137
|
-
hydrateFileContent: hydrateOfflineFileContent
|
|
17138
|
-
});
|
|
17139
|
-
let remoteSnapshot;
|
|
17140
|
-
let pull;
|
|
17121
|
+
const configuredStorage = await createConfiguredOfflineStorage(memoryDir, config.secureStoreEncryptOnWrite);
|
|
17122
|
+
const storageIo = await createOfflineStorageIo(memoryDir, configuredStorage);
|
|
17123
|
+
let stagedTransport;
|
|
17141
17124
|
try {
|
|
17142
|
-
|
|
17125
|
+
const currentSnapshot = await buildOfflineSyncSnapshotFromBase2({
|
|
17126
|
+
root: memoryDir,
|
|
17127
|
+
sourceId: "local",
|
|
17128
|
+
includeContent: false,
|
|
17129
|
+
includeTranscripts,
|
|
17130
|
+
readFile: storageIo.readFile,
|
|
17131
|
+
readFileDigest: storageIo.readFileDigest,
|
|
17132
|
+
excludeNodeLocalState: false
|
|
17133
|
+
});
|
|
17134
|
+
stagedTransport = await stageGenerationMembersForApply({
|
|
17135
|
+
memoryDir,
|
|
17143
17136
|
remoteUrl,
|
|
17144
17137
|
token,
|
|
17145
17138
|
namespace: resolvedNamespace,
|
|
17146
17139
|
includeTranscripts,
|
|
17147
|
-
|
|
17148
|
-
baseFiles: existingState?.state.baseFiles ?? [],
|
|
17140
|
+
incomingFiles: remoteSnapshotMetadata.files,
|
|
17149
17141
|
currentFiles: currentSnapshot.files,
|
|
17150
|
-
|
|
17142
|
+
minBytes: OFFLINE_SYNC_DIRECT_HYDRATE_MIN_BYTES,
|
|
17143
|
+
secureStoreEncryptOnWrite: config.secureStoreEncryptOnWrite,
|
|
17144
|
+
hydrateFileContent: hydrateOfflineFileContent
|
|
17151
17145
|
});
|
|
17152
|
-
|
|
17153
|
-
|
|
17146
|
+
let remoteSnapshot;
|
|
17147
|
+
let pull;
|
|
17148
|
+
try {
|
|
17149
|
+
remoteSnapshot = await hydrateOfflineSnapshotContent({
|
|
17150
|
+
remoteUrl,
|
|
17151
|
+
token,
|
|
17152
|
+
namespace: resolvedNamespace,
|
|
17153
|
+
includeTranscripts,
|
|
17154
|
+
snapshot: remoteSnapshotMetadata,
|
|
17155
|
+
baseFiles: existingState?.state.baseFiles ?? [],
|
|
17156
|
+
currentFiles: currentSnapshot.files,
|
|
17157
|
+
skipContentPaths: stagedTransport.stagedPaths
|
|
17158
|
+
});
|
|
17159
|
+
pull = await applyOfflineSyncSnapshot({
|
|
17160
|
+
root: memoryDir,
|
|
17161
|
+
snapshot: remoteSnapshot,
|
|
17162
|
+
baseFiles: existingState?.state.baseFiles ?? [],
|
|
17163
|
+
readFile: storageIo.readFile,
|
|
17164
|
+
readFileDigest: storageIo.readFileDigest,
|
|
17165
|
+
writeFile: storageIo.writeFile,
|
|
17166
|
+
writeStagingFile: storageIo.writeStagingFile,
|
|
17167
|
+
readStagingFile: storageIo.readStagingFile,
|
|
17168
|
+
deleteFile: storageIo.deleteFile,
|
|
17169
|
+
recordDeletionRevision: storageIo.recordDeletionRevision,
|
|
17170
|
+
readIncomingFile: stagedTransport.readIncomingFile
|
|
17171
|
+
});
|
|
17172
|
+
} finally {
|
|
17173
|
+
await stagedTransport.cleanup();
|
|
17174
|
+
}
|
|
17175
|
+
const state = offlineSyncStateFromSnapshot({
|
|
17176
|
+
remoteId: remoteUrl,
|
|
17177
|
+
namespace: resolvedNamespace,
|
|
17154
17178
|
snapshot: remoteSnapshot,
|
|
17155
|
-
baseFiles:
|
|
17156
|
-
readFile: storageIo.readFile,
|
|
17157
|
-
readFileDigest: storageIo.readFileDigest,
|
|
17158
|
-
writeFile: storageIo.writeFile,
|
|
17159
|
-
writeStagingFile: storageIo.writeStagingFile,
|
|
17160
|
-
readStagingFile: storageIo.readStagingFile,
|
|
17161
|
-
deleteFile: storageIo.deleteFile,
|
|
17162
|
-
recordDeletionRevision: storageIo.recordDeletionRevision,
|
|
17163
|
-
readIncomingFile: stagedTransport.readIncomingFile
|
|
17179
|
+
baseFiles: pull.nextBaseFiles
|
|
17164
17180
|
});
|
|
17181
|
+
for (const pathToWrite of stateWritePaths) {
|
|
17182
|
+
await writeOfflineSyncState(pathToWrite, state);
|
|
17183
|
+
}
|
|
17184
|
+
if (json) {
|
|
17185
|
+
console.log(JSON.stringify({
|
|
17186
|
+
statePath: activeStatePath,
|
|
17187
|
+
namespace: resolvedNamespace,
|
|
17188
|
+
remoteFiles: remoteSnapshot.files.length,
|
|
17189
|
+
pull: offlinePullJsonSummary(pull)
|
|
17190
|
+
}, null, 2));
|
|
17191
|
+
} else {
|
|
17192
|
+
console.log(`Offline cache prepared: ${memoryDir}`);
|
|
17193
|
+
console.log(`Namespace: ${resolvedNamespace ?? "(default)"}`);
|
|
17194
|
+
console.log(`Remote files: ${remoteSnapshot.files.length}`);
|
|
17195
|
+
console.log(`Pulled: ${pull.upserted} upserted, ${pull.deleted} deleted, ${pull.conflicts.length} conflicts`);
|
|
17196
|
+
console.log(`State: ${activeStatePath}`);
|
|
17197
|
+
}
|
|
17198
|
+
return;
|
|
17165
17199
|
} finally {
|
|
17166
|
-
await
|
|
17200
|
+
await configuredStorage.storage.flushOfflineSyncDigestCache();
|
|
17167
17201
|
}
|
|
17168
|
-
const state = offlineSyncStateFromSnapshot({
|
|
17169
|
-
remoteId: remoteUrl,
|
|
17170
|
-
namespace: resolvedNamespace,
|
|
17171
|
-
snapshot: remoteSnapshot,
|
|
17172
|
-
baseFiles: pull.nextBaseFiles
|
|
17173
|
-
});
|
|
17174
|
-
for (const pathToWrite of stateWritePaths) {
|
|
17175
|
-
await writeOfflineSyncState(pathToWrite, state);
|
|
17176
|
-
}
|
|
17177
|
-
if (json) {
|
|
17178
|
-
console.log(JSON.stringify({
|
|
17179
|
-
statePath: activeStatePath,
|
|
17180
|
-
namespace: resolvedNamespace,
|
|
17181
|
-
remoteFiles: remoteSnapshot.files.length,
|
|
17182
|
-
pull: offlinePullJsonSummary(pull)
|
|
17183
|
-
}, null, 2));
|
|
17184
|
-
} else {
|
|
17185
|
-
console.log(`Offline cache prepared: ${memoryDir}`);
|
|
17186
|
-
console.log(`Namespace: ${resolvedNamespace ?? "(default)"}`);
|
|
17187
|
-
console.log(`Remote files: ${remoteSnapshot.files.length}`);
|
|
17188
|
-
console.log(`Pulled: ${pull.upserted} upserted, ${pull.deleted} deleted, ${pull.conflicts.length} conflicts`);
|
|
17189
|
-
console.log(`State: ${activeStatePath}`);
|
|
17190
|
-
}
|
|
17191
|
-
return;
|
|
17192
17202
|
}
|
|
17193
17203
|
if (action === "sync") {
|
|
17194
17204
|
if (!remoteUrl || !token || !statePath) throw new Error("offline sync requires remote URL and token");
|
|
@@ -17237,39 +17247,43 @@ Environment fallbacks:
|
|
|
17237
17247
|
}
|
|
17238
17248
|
const configuredStorage = await createConfiguredOfflineStorage(memoryDir, config.secureStoreEncryptOnWrite);
|
|
17239
17249
|
const storageIo = await createOfflineStorageIo(memoryDir, configuredStorage);
|
|
17240
|
-
|
|
17241
|
-
|
|
17242
|
-
|
|
17243
|
-
async (ledgerPath) => (await createOfflineStorageForPath(
|
|
17250
|
+
try {
|
|
17251
|
+
await drainOfflineSyncImpressions(memoryDir, impressionRotation);
|
|
17252
|
+
await drainPendingLifecycleForOfflineSync(
|
|
17244
17253
|
memoryDir,
|
|
17245
|
-
ledgerPath
|
|
17246
|
-
|
|
17247
|
-
|
|
17248
|
-
|
|
17249
|
-
|
|
17250
|
-
|
|
17251
|
-
|
|
17252
|
-
|
|
17253
|
-
|
|
17254
|
-
|
|
17255
|
-
|
|
17256
|
-
|
|
17257
|
-
|
|
17258
|
-
|
|
17259
|
-
|
|
17260
|
-
|
|
17261
|
-
|
|
17262
|
-
|
|
17263
|
-
|
|
17264
|
-
|
|
17265
|
-
|
|
17266
|
-
|
|
17267
|
-
|
|
17268
|
-
|
|
17269
|
-
|
|
17270
|
-
|
|
17254
|
+
async (ledgerPath) => (await createOfflineStorageForPath(
|
|
17255
|
+
memoryDir,
|
|
17256
|
+
ledgerPath,
|
|
17257
|
+
configuredStorage,
|
|
17258
|
+
config.secureStoreEncryptOnWrite ?? true
|
|
17259
|
+
)).drainPendingMemoryLifecycleEventsForSyncAt(ledgerPath)
|
|
17260
|
+
);
|
|
17261
|
+
const summary = await summarizeOfflineSyncPendingChanges({
|
|
17262
|
+
root: memoryDir,
|
|
17263
|
+
sourceId: localOfflineSourceId(memoryDir),
|
|
17264
|
+
baseFiles: state?.baseFiles ?? [],
|
|
17265
|
+
baseCapturedAt: state ? new Date(state.lastSyncedAt) : void 0,
|
|
17266
|
+
includeTranscripts,
|
|
17267
|
+
readFile: storageIo.readFile,
|
|
17268
|
+
readFileDigest: storageIo.readFileDigest,
|
|
17269
|
+
userExcludeRegexps
|
|
17270
|
+
});
|
|
17271
|
+
if (json) {
|
|
17272
|
+
console.log(JSON.stringify({
|
|
17273
|
+
statePath: statePath ?? null,
|
|
17274
|
+
state: offlineStateJsonSummary(state),
|
|
17275
|
+
pending: summary
|
|
17276
|
+
}, null, 2));
|
|
17277
|
+
} else {
|
|
17278
|
+
console.log(`Offline state: ${state ? "ready" : "not prepared"}`);
|
|
17279
|
+
console.log(`State: ${statePath ?? "(not selected; pass --state or --remote-url to inspect a prepared remote state)"}`);
|
|
17280
|
+
if (state) console.log(`Last synced: ${state.lastSyncedAt}`);
|
|
17281
|
+
console.log(`Pending local changes: ${summary.total} (${summary.upserts} upserts, ${summary.deletes} deletes)`);
|
|
17282
|
+
}
|
|
17283
|
+
return;
|
|
17284
|
+
} finally {
|
|
17285
|
+
await configuredStorage.storage.flushOfflineSyncDigestCache();
|
|
17271
17286
|
}
|
|
17272
|
-
return;
|
|
17273
17287
|
}
|
|
17274
17288
|
if (action === "watch") {
|
|
17275
17289
|
if (!remoteUrl || !token || !statePath) throw new Error("offline watch requires remote URL and token");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/cli",
|
|
3
|
-
"version": "9.69.
|
|
3
|
+
"version": "9.69.102",
|
|
4
4
|
"description": "CLI for Remnic memory — init, query, doctor, daemon management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,26 +26,26 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"yaml": "^2.4.2",
|
|
29
|
-
"@remnic/plugin-pi": "^9.69.
|
|
30
|
-
"@remnic/server": "^9.69.
|
|
31
|
-
"@remnic/core": "^9.69.
|
|
29
|
+
"@remnic/plugin-pi": "^9.69.102",
|
|
30
|
+
"@remnic/server": "^9.69.102",
|
|
31
|
+
"@remnic/core": "^9.69.102"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@remnic/bench": "^9.69.
|
|
35
|
-
"@remnic/plugin-openclaw": "^9.69.
|
|
36
|
-
"@remnic/export-weclone": "^9.69.
|
|
37
|
-
"@remnic/import-weclone": "^9.69.
|
|
38
|
-
"@remnic/import-chatgpt": "^9.69.
|
|
39
|
-
"@remnic/import-claude": "^9.69.
|
|
40
|
-
"@remnic/import-gemini": "^9.69.
|
|
41
|
-
"@remnic/import-lossless-claw": "^9.69.
|
|
42
|
-
"@remnic/import-mem0": "^9.69.
|
|
43
|
-
"@remnic/import-supermemory": "^9.69.
|
|
44
|
-
"@remnic/import-okf": "^9.69.
|
|
45
|
-
"@remnic/connector-limitless": "^9.69.
|
|
46
|
-
"@remnic/connector-bee": "^9.69.
|
|
47
|
-
"@remnic/connector-omi": "^9.69.
|
|
48
|
-
"@remnic/capture-audio": "^9.69.
|
|
34
|
+
"@remnic/bench": "^9.69.102",
|
|
35
|
+
"@remnic/plugin-openclaw": "^9.69.102",
|
|
36
|
+
"@remnic/export-weclone": "^9.69.102",
|
|
37
|
+
"@remnic/import-weclone": "^9.69.102",
|
|
38
|
+
"@remnic/import-chatgpt": "^9.69.102",
|
|
39
|
+
"@remnic/import-claude": "^9.69.102",
|
|
40
|
+
"@remnic/import-gemini": "^9.69.102",
|
|
41
|
+
"@remnic/import-lossless-claw": "^9.69.102",
|
|
42
|
+
"@remnic/import-mem0": "^9.69.102",
|
|
43
|
+
"@remnic/import-supermemory": "^9.69.102",
|
|
44
|
+
"@remnic/import-okf": "^9.69.102",
|
|
45
|
+
"@remnic/connector-limitless": "^9.69.102",
|
|
46
|
+
"@remnic/connector-bee": "^9.69.102",
|
|
47
|
+
"@remnic/connector-omi": "^9.69.102",
|
|
48
|
+
"@remnic/capture-audio": "^9.69.102"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
51
51
|
"@remnic/bench": {
|
|
@@ -97,19 +97,19 @@
|
|
|
97
97
|
"devDependencies": {
|
|
98
98
|
"tsup": "^8.5.1",
|
|
99
99
|
"typescript": "^5.9.3",
|
|
100
|
-
"@remnic/bench": "9.69.
|
|
101
|
-
"@remnic/plugin-openclaw": "9.69.
|
|
102
|
-
"@remnic/
|
|
103
|
-
"@remnic/
|
|
104
|
-
"@remnic/import-
|
|
105
|
-
"@remnic/import-
|
|
106
|
-
"@remnic/import-
|
|
107
|
-
"@remnic/import-gemini": "9.69.
|
|
108
|
-
"@remnic/
|
|
109
|
-
"@remnic/
|
|
110
|
-
"@remnic/
|
|
111
|
-
"@remnic/
|
|
112
|
-
"@remnic/connector-
|
|
100
|
+
"@remnic/bench": "9.69.102",
|
|
101
|
+
"@remnic/plugin-openclaw": "9.69.102",
|
|
102
|
+
"@remnic/export-weclone": "9.69.102",
|
|
103
|
+
"@remnic/import-weclone": "9.69.102",
|
|
104
|
+
"@remnic/import-lossless-claw": "9.69.102",
|
|
105
|
+
"@remnic/import-chatgpt": "9.69.102",
|
|
106
|
+
"@remnic/import-mem0": "9.69.102",
|
|
107
|
+
"@remnic/import-gemini": "9.69.102",
|
|
108
|
+
"@remnic/import-supermemory": "9.69.102",
|
|
109
|
+
"@remnic/connector-limitless": "9.69.102",
|
|
110
|
+
"@remnic/import-claude": "9.69.102",
|
|
111
|
+
"@remnic/connector-omi": "9.69.102",
|
|
112
|
+
"@remnic/connector-bee": "9.69.102"
|
|
113
113
|
},
|
|
114
114
|
"license": "MIT",
|
|
115
115
|
"repository": {
|