@remnic/cli 9.69.39 → 9.69.41
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 +27 -25
- package/package.json +32 -32
package/dist/index.js
CHANGED
|
@@ -581,7 +581,7 @@ import {
|
|
|
581
581
|
runPromotionCandidatesCommand,
|
|
582
582
|
buildOfflineSyncChangesetFromSnapshot,
|
|
583
583
|
drainPendingLifecycleForOfflineSync,
|
|
584
|
-
compileOfflineSyncExcludeGlobs,
|
|
584
|
+
compileOfflineSyncExcludeGlobs as compileOfflineSyncExcludeGlobs2,
|
|
585
585
|
buildOfflineSyncSnapshotFromBase as buildOfflineSyncSnapshotFromBase2,
|
|
586
586
|
defaultOfflineSyncStatePath,
|
|
587
587
|
normalizeOfflineSyncSnapshot,
|
|
@@ -2053,6 +2053,7 @@ import {
|
|
|
2053
2053
|
DEFAULT_CONVERGE_CONFLICT_POLICY,
|
|
2054
2054
|
OFFLINE_SYNC_FILE_CONTENT_TRANSFER_CHUNK_BYTES as OFFLINE_SYNC_FILE_CONTENT_TRANSFER_CHUNK_BYTES3,
|
|
2055
2055
|
applyOfflineSyncFileContentChunk,
|
|
2056
|
+
compileOfflineSyncExcludeGlobs,
|
|
2056
2057
|
envConvergePeerRequestTimeoutMs as envConvergePeerRequestTimeoutMs2,
|
|
2057
2058
|
isInternalRemnicStatePath as isInternalRemnicStatePath4,
|
|
2058
2059
|
normalizeConvergePeerRequestTimeoutMs,
|
|
@@ -2068,7 +2069,9 @@ import {
|
|
|
2068
2069
|
readConvergeCursor,
|
|
2069
2070
|
writeConvergeCursor
|
|
2070
2071
|
} from "@remnic/core/reconcile/cursor.js";
|
|
2071
|
-
import {
|
|
2072
|
+
import {
|
|
2073
|
+
collapseActiveFactDuplicates
|
|
2074
|
+
} from "@remnic/core/reconcile/manifest.js";
|
|
2072
2075
|
import {
|
|
2073
2076
|
planReconciliation
|
|
2074
2077
|
} from "@remnic/core/reconcile/plan.js";
|
|
@@ -2495,12 +2498,11 @@ async function readLocalTombstoneEvidence(rootDir) {
|
|
|
2495
2498
|
}
|
|
2496
2499
|
|
|
2497
2500
|
// src/offline-storage-io.ts
|
|
2498
|
-
import { createDecipheriv
|
|
2501
|
+
import { createDecipheriv } from "crypto";
|
|
2499
2502
|
import fs18 from "fs";
|
|
2500
2503
|
import { lstat as lstat2, mkdtemp, readdir as readdir2, rm as rm2 } from "fs/promises";
|
|
2501
2504
|
import path4 from "path";
|
|
2502
2505
|
import {
|
|
2503
|
-
OFFLINE_SYNC_FILE_CONTENT_TRANSFER_CHUNK_BYTES,
|
|
2504
2506
|
StorageManager as StorageManager3,
|
|
2505
2507
|
createPersistedSupportPassportPrivateFileExclusion,
|
|
2506
2508
|
createSupportPassportPrivateFileExclusion
|
|
@@ -2594,24 +2596,7 @@ async function createOfflineStorageIo(memoryDir, configuredStorage, persistedExc
|
|
|
2594
2596
|
) : createSupportPassportPrivateFileExclusion(storage),
|
|
2595
2597
|
readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
|
|
2596
2598
|
readDeletionRevisions: () => storage.readDeletionRevisions(),
|
|
2597
|
-
readFileDigest: async ({ filePath }) =>
|
|
2598
|
-
const hash = createHash2("sha256");
|
|
2599
|
-
let bytes = 0;
|
|
2600
|
-
for await (const rawChunk of readOfflineSyncFileChunks({
|
|
2601
|
-
filePath,
|
|
2602
|
-
memoryDir,
|
|
2603
|
-
secureStoreKey,
|
|
2604
|
-
chunkSize: OFFLINE_SYNC_FILE_CONTENT_TRANSFER_CHUNK_BYTES
|
|
2605
|
-
})) {
|
|
2606
|
-
const chunk = Buffer.isBuffer(rawChunk) ? rawChunk : Buffer.from(rawChunk);
|
|
2607
|
-
hash.update(chunk);
|
|
2608
|
-
bytes += chunk.length;
|
|
2609
|
-
}
|
|
2610
|
-
return {
|
|
2611
|
-
sha256: hash.digest("hex"),
|
|
2612
|
-
bytes
|
|
2613
|
-
};
|
|
2614
|
-
},
|
|
2599
|
+
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
2615
2600
|
readFileChunks: ({ filePath, chunkSize }) => readOfflineSyncFileChunks({
|
|
2616
2601
|
filePath,
|
|
2617
2602
|
memoryDir,
|
|
@@ -2837,12 +2822,21 @@ async function saveConvergeIdentityCache(cachePath, manifest, citationTemplate,
|
|
|
2837
2822
|
identityResolutionVersion: file.identityResolutionVersion
|
|
2838
2823
|
} : {}
|
|
2839
2824
|
}));
|
|
2825
|
+
const inManifest = new Set(files.map((entry) => entry.path));
|
|
2840
2826
|
for (const entry of files) {
|
|
2841
2827
|
const classification = classifications?.get(entry.path);
|
|
2842
2828
|
if (classification === void 0) continue;
|
|
2843
2829
|
entry.statIdentity = classification.statIdentity;
|
|
2844
2830
|
entry.excluded = classification.excluded;
|
|
2845
2831
|
}
|
|
2832
|
+
for (const [pathName, classification] of classifications ?? []) {
|
|
2833
|
+
if (inManifest.has(pathName)) continue;
|
|
2834
|
+
files.push({
|
|
2835
|
+
...loaded?.get(pathName) ?? { path: pathName, sha256: "" },
|
|
2836
|
+
statIdentity: classification.statIdentity,
|
|
2837
|
+
excluded: classification.excluded
|
|
2838
|
+
});
|
|
2839
|
+
}
|
|
2846
2840
|
if (loaded !== void 0 && loaded.size === files.length && files.every((entry) => {
|
|
2847
2841
|
const previous = loaded.get(entry.path);
|
|
2848
2842
|
if (previous === void 0) return false;
|
|
@@ -2878,7 +2872,8 @@ async function saveConvergeIdentityCache(cachePath, manifest, citationTemplate,
|
|
|
2878
2872
|
...entry.memory ? {} : {
|
|
2879
2873
|
...typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {},
|
|
2880
2874
|
...typeof entry.identityResolutionVersion === "number" ? { identityResolutionVersion: entry.identityResolutionVersion } : {}
|
|
2881
|
-
}
|
|
2875
|
+
},
|
|
2876
|
+
...entry.statIdentity !== void 0 && entry.excluded !== void 0 ? { statIdentity: entry.statIdentity, excluded: entry.excluded } : {}
|
|
2882
2877
|
});
|
|
2883
2878
|
}
|
|
2884
2879
|
}
|
|
@@ -2931,6 +2926,7 @@ async function planLocalNamespaceCensus(args) {
|
|
|
2931
2926
|
readFile: io.readFile,
|
|
2932
2927
|
readFileDigest: io.readFileDigest,
|
|
2933
2928
|
excludeFile: io.excludeFile,
|
|
2929
|
+
userExcludeRegexps: args.userExcludeRegexps,
|
|
2934
2930
|
signal: args.signal
|
|
2935
2931
|
});
|
|
2936
2932
|
const files = snapshot.files.filter((record2) => !isInternalRemnicStatePath(record2.path)).map((record2) => ({
|
|
@@ -3971,6 +3967,7 @@ async function computeConvergePlan(options = {}) {
|
|
|
3971
3967
|
}
|
|
3972
3968
|
}
|
|
3973
3969
|
const memoryDir = options.cursorDir ?? config?.memoryDir;
|
|
3970
|
+
const userExcludeRegexps = compileOfflineSyncExcludeGlobs(config?.offlineSyncExcludes ?? []);
|
|
3974
3971
|
const peerUrl = options.peerUrl;
|
|
3975
3972
|
const cacheActive = memoryDir !== void 0 && (!options.localFilesByNamespace && config || !options.peerFilesByNamespace && peerUrl);
|
|
3976
3973
|
const cache = cacheActive && memoryDir !== void 0 ? await openPlanCache(
|
|
@@ -3996,7 +3993,8 @@ async function computeConvergePlan(options = {}) {
|
|
|
3996
3993
|
signal: options.signal,
|
|
3997
3994
|
onProgress: options.onProgress,
|
|
3998
3995
|
memoryDir,
|
|
3999
|
-
peerUrl: options.peerUrl
|
|
3996
|
+
peerUrl: options.peerUrl,
|
|
3997
|
+
userExcludeRegexps
|
|
4000
3998
|
});
|
|
4001
3999
|
localMap.set(rootInfo.namespace, census.files);
|
|
4002
4000
|
localManifests.set(rootInfo.namespace, census.manifest);
|
|
@@ -9447,6 +9445,10 @@ Options:
|
|
|
9447
9445
|
local = deterministic screen/fence (default)
|
|
9448
9446
|
ollama = native /api/chat
|
|
9449
9447
|
openai-compat = /v1/chat/completions
|
|
9448
|
+
(api.openai.com / integrate.api.nvidia.com require
|
|
9449
|
+
https + provider key; other hosts require
|
|
9450
|
+
REMNIC_OPENAI_COMPAT_API_KEY and https, except
|
|
9451
|
+
loopback HTTP on 127.0.0.1 or localhost)
|
|
9450
9452
|
--base-url URL Endpoint (default: http://127.0.0.1:11434)
|
|
9451
9453
|
--model NAME Model id (default: qwen3.8-27b-64k:latest)
|
|
9452
9454
|
--request-timeout-ms N Per-call timeout (default: 300000)
|
|
@@ -15571,7 +15573,7 @@ function resolveOfflineSyncUserExcludes(rest, config) {
|
|
|
15571
15573
|
globs.push(entry.trim());
|
|
15572
15574
|
}
|
|
15573
15575
|
}
|
|
15574
|
-
return
|
|
15576
|
+
return compileOfflineSyncExcludeGlobs2(globs);
|
|
15575
15577
|
}
|
|
15576
15578
|
async function cmdOffline(action, rest, json) {
|
|
15577
15579
|
if (action === "help" || action === "--help" || action === "-h" || rest.includes("--help") || rest.includes("-h")) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/cli",
|
|
3
|
-
"version": "9.69.
|
|
3
|
+
"version": "9.69.41",
|
|
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/
|
|
30
|
-
"@remnic/
|
|
31
|
-
"@remnic/
|
|
29
|
+
"@remnic/plugin-pi": "^9.69.41",
|
|
30
|
+
"@remnic/server": "^9.69.41",
|
|
31
|
+
"@remnic/core": "^9.69.41"
|
|
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.41",
|
|
35
|
+
"@remnic/plugin-openclaw": "^9.69.41",
|
|
36
|
+
"@remnic/export-weclone": "^9.69.41",
|
|
37
|
+
"@remnic/import-weclone": "^9.69.41",
|
|
38
|
+
"@remnic/import-chatgpt": "^9.69.41",
|
|
39
|
+
"@remnic/import-claude": "^9.69.41",
|
|
40
|
+
"@remnic/import-gemini": "^9.69.41",
|
|
41
|
+
"@remnic/import-lossless-claw": "^9.69.41",
|
|
42
|
+
"@remnic/import-mem0": "^9.69.41",
|
|
43
|
+
"@remnic/import-supermemory": "^9.69.41",
|
|
44
|
+
"@remnic/import-okf": "^9.69.41",
|
|
45
|
+
"@remnic/connector-limitless": "^9.69.41",
|
|
46
|
+
"@remnic/connector-bee": "^9.69.41",
|
|
47
|
+
"@remnic/connector-omi": "^9.69.41",
|
|
48
|
+
"@remnic/capture-audio": "^9.69.41"
|
|
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/
|
|
101
|
-
"@remnic/
|
|
102
|
-
"@remnic/export-weclone": "9.69.
|
|
103
|
-
"@remnic/import-
|
|
104
|
-
"@remnic/import-
|
|
105
|
-
"@remnic/import-
|
|
106
|
-
"@remnic/import-
|
|
107
|
-
"@remnic/import-
|
|
108
|
-
"@remnic/import-
|
|
109
|
-
"@remnic/
|
|
110
|
-
"@remnic/
|
|
111
|
-
"@remnic/connector-
|
|
112
|
-
"@remnic/connector-
|
|
100
|
+
"@remnic/plugin-openclaw": "9.69.41",
|
|
101
|
+
"@remnic/bench": "9.69.41",
|
|
102
|
+
"@remnic/export-weclone": "9.69.41",
|
|
103
|
+
"@remnic/import-gemini": "9.69.41",
|
|
104
|
+
"@remnic/import-weclone": "9.69.41",
|
|
105
|
+
"@remnic/import-claude": "9.69.41",
|
|
106
|
+
"@remnic/import-supermemory": "9.69.41",
|
|
107
|
+
"@remnic/import-lossless-claw": "9.69.41",
|
|
108
|
+
"@remnic/import-mem0": "9.69.41",
|
|
109
|
+
"@remnic/connector-limitless": "9.69.41",
|
|
110
|
+
"@remnic/import-chatgpt": "9.69.41",
|
|
111
|
+
"@remnic/connector-bee": "9.69.41",
|
|
112
|
+
"@remnic/connector-omi": "9.69.41"
|
|
113
113
|
},
|
|
114
114
|
"license": "MIT",
|
|
115
115
|
"repository": {
|