@remnic/cli 10.0.47 → 10.0.49

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 (2) hide show
  1. package/dist/index.js +22 -16
  2. package/package.json +32 -32
package/dist/index.js CHANGED
@@ -597,7 +597,7 @@ import {
597
597
  offlineSyncStateFromSnapshot,
598
598
  readOfflineSyncFileContentChunk,
599
599
  readOfflineSyncState,
600
- embeddingGenerationMembership as embeddingGenerationMembership2,
600
+ embeddingGenerationMembership as embeddingGenerationMembership3,
601
601
  divergedEmbeddingGenerationDeferrals,
602
602
  shouldPreferIncomingOfflineRuntimeFile,
603
603
  summarizeOfflineSyncPendingChanges,
@@ -4537,12 +4537,24 @@ function resolveCredentialChannel(input, env, hooks) {
4537
4537
  }
4538
4538
 
4539
4539
  // src/converge-capture-lock.ts
4540
- import { resolveConvergeCaptureWriteLockBackoff } from "@remnic/core";
4540
+ import { advanceEmbeddingGenerationMarker, embeddingGenerationMembership, resolveConvergeCaptureWriteLockBackoff } from "@remnic/core";
4541
4541
  import { isTombstoneBlockedCaptureWriteLockBusy } from "@remnic/core/capture-write-lock-backoff.js";
4542
4542
  function createConvergeStorageIoOpener(convergeConfig, signal) {
4543
4543
  const backoff = resolveConvergeCaptureWriteLockBackoff(convergeConfig);
4544
4544
  return (rootDir) => createOfflineStorageIo(rootDir, void 0, void 0, backoff, signal);
4545
4545
  }
4546
+ async function deleteConvergeFile(io, target, expectedSha256) {
4547
+ await advanceEmbeddingGenerationMarker(
4548
+ target.root,
4549
+ embeddingGenerationMembership(target.path),
4550
+ () => io.deleteFile(target),
4551
+ async () => {
4552
+ if ((await io.readFileDigest(target)).sha256 !== expectedSha256) {
4553
+ throw new Error(`converge file changed before deletion: ${target.path}`);
4554
+ }
4555
+ }
4556
+ );
4557
+ }
4546
4558
  function handleConvergeTransferResults(results, batch, onFailed) {
4547
4559
  for (let index = 0; index < results.length; index += 1) {
4548
4560
  const result = results[index];
@@ -5155,11 +5167,8 @@ async function executeConvergeApply(options = {}) {
5155
5167
  try {
5156
5168
  const io = await openStorageIo(rootDir);
5157
5169
  const filePath = path7.join(rootDir, localPath);
5158
- const current = await io.readFileDigest({ root: rootDir, path: localPath, filePath });
5159
- if (current.sha256 === entry.localSha256) {
5160
- await io.deleteFile({ root: rootDir, path: localPath, filePath });
5161
- deleted = true;
5162
- }
5170
+ await deleteConvergeFile(io, { root: rootDir, path: localPath, filePath }, entry.localSha256);
5171
+ deleted = true;
5163
5172
  } catch {
5164
5173
  deleted = false;
5165
5174
  }
@@ -5210,11 +5219,8 @@ async function executeConvergeApply(options = {}) {
5210
5219
  try {
5211
5220
  const io = await openStorageIo(rootDir);
5212
5221
  const filePath = path7.join(rootDir, localPath);
5213
- const current = await io.readFileDigest({ root: rootDir, path: localPath, filePath });
5214
- if (current.sha256 === entry.localSha256) {
5215
- await io.deleteFile({ root: rootDir, path: localPath, filePath });
5216
- deletedLocal = true;
5217
- }
5222
+ await deleteConvergeFile(io, { root: rootDir, path: localPath, filePath }, entry.localSha256);
5223
+ deletedLocal = true;
5218
5224
  } catch {
5219
5225
  deletedLocal = false;
5220
5226
  }
@@ -5805,13 +5811,13 @@ async function drainOfflineSyncImpressions(memoryDir, rotation) {
5805
5811
  import { lstat as lstat3, mkdir as mkdir2, mkdtemp as mkdtemp2, readFile as readFile2, readdir as readdir3, rm as rm3, writeFile as writeFile2 } from "fs/promises";
5806
5812
  import path8 from "path";
5807
5813
  import { hostname } from "os";
5808
- import { StorageManager as StorageManager4, embeddingGenerationMembership } from "@remnic/core";
5814
+ import { StorageManager as StorageManager4, embeddingGenerationMembership as embeddingGenerationMembership2 } from "@remnic/core";
5809
5815
  var GENERATION_STAGING_PREFIX = "generation-incoming-";
5810
5816
  function generationMembersForStagedTransport(options) {
5811
5817
  const currentByPath = new Map((options.currentFiles ?? []).map((file) => [file.path, file]));
5812
5818
  const deferred = new Set(options.deferredPaths ?? []);
5813
5819
  return options.incomingFiles.filter(
5814
- (file) => file.bytes >= options.minBytes && !deferred.has(file.path) && currentByPath.get(file.path)?.sha256 !== file.sha256 && embeddingGenerationMembership(file.path) !== null
5820
+ (file) => file.bytes >= options.minBytes && !deferred.has(file.path) && currentByPath.get(file.path)?.sha256 !== file.sha256 && embeddingGenerationMembership2(file.path) !== null
5815
5821
  ).sort((left, right) => right.bytes - left.bytes || left.path.localeCompare(right.path));
5816
5822
  }
5817
5823
  async function assertPrivateOfflineDir(offlineDir) {
@@ -16188,7 +16194,7 @@ function offlineSnapshotContentFilesForApply(options) {
16188
16194
  function shouldDirectHydrateOfflineFile(options) {
16189
16195
  if (options.incoming.bytes < OFFLINE_SYNC_DIRECT_HYDRATE_MIN_BYTES) return false;
16190
16196
  if (options.current?.sha256 === options.incoming.sha256) return false;
16191
- if (embeddingGenerationMembership2(options.incoming.path)) return false;
16197
+ if (embeddingGenerationMembership3(options.incoming.path)) return false;
16192
16198
  if (shouldPreferIncomingOfflineRuntimeFile(options.incoming.path)) return true;
16193
16199
  if (options.current && options.base && options.current.sha256 === options.base.sha256) {
16194
16200
  return true;
@@ -16633,7 +16639,7 @@ function chunkOfflineChangesetApplyBatches(changeset, namespace, maxRequestBytes
16633
16639
  const items = [];
16634
16640
  const itemIndexByDir = /* @__PURE__ */ new Map();
16635
16641
  for (const change of changeset.changes) {
16636
- const membership = embeddingGenerationMembership2(change.path);
16642
+ const membership = embeddingGenerationMembership3(change.path);
16637
16643
  if (!membership) {
16638
16644
  items.push({ changes: [change], shardDir: null });
16639
16645
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/cli",
3
- "version": "10.0.47",
3
+ "version": "10.0.49",
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": "^10.0.47",
30
- "@remnic/core": "^10.0.47",
31
- "@remnic/server": "^10.0.47"
29
+ "@remnic/server": "^10.0.49",
30
+ "@remnic/plugin-pi": "^10.0.49",
31
+ "@remnic/core": "^10.0.49"
32
32
  },
33
33
  "peerDependencies": {
34
- "@remnic/bench": "^10.0.47",
35
- "@remnic/plugin-openclaw": "^10.0.47",
36
- "@remnic/export-weclone": "^10.0.47",
37
- "@remnic/import-weclone": "^10.0.47",
38
- "@remnic/import-chatgpt": "^10.0.47",
39
- "@remnic/import-claude": "^10.0.47",
40
- "@remnic/import-gemini": "^10.0.47",
41
- "@remnic/import-lossless-claw": "^10.0.47",
42
- "@remnic/import-mem0": "^10.0.47",
43
- "@remnic/import-supermemory": "^10.0.47",
44
- "@remnic/import-okf": "^10.0.47",
45
- "@remnic/connector-limitless": "^10.0.47",
46
- "@remnic/connector-bee": "^10.0.47",
47
- "@remnic/connector-omi": "^10.0.47",
48
- "@remnic/capture-audio": "^10.0.47"
34
+ "@remnic/bench": "^10.0.49",
35
+ "@remnic/plugin-openclaw": "^10.0.49",
36
+ "@remnic/export-weclone": "^10.0.49",
37
+ "@remnic/import-weclone": "^10.0.49",
38
+ "@remnic/import-chatgpt": "^10.0.49",
39
+ "@remnic/import-claude": "^10.0.49",
40
+ "@remnic/import-gemini": "^10.0.49",
41
+ "@remnic/import-lossless-claw": "^10.0.49",
42
+ "@remnic/import-mem0": "^10.0.49",
43
+ "@remnic/import-supermemory": "^10.0.49",
44
+ "@remnic/import-okf": "^10.0.49",
45
+ "@remnic/connector-limitless": "^10.0.49",
46
+ "@remnic/connector-bee": "^10.0.49",
47
+ "@remnic/connector-omi": "^10.0.49",
48
+ "@remnic/capture-audio": "^10.0.49"
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/plugin-openclaw": "10.0.47",
101
- "@remnic/bench": "10.0.47",
102
- "@remnic/export-weclone": "10.0.47",
103
- "@remnic/import-weclone": "10.0.47",
104
- "@remnic/import-claude": "10.0.47",
105
- "@remnic/import-gemini": "10.0.47",
106
- "@remnic/import-lossless-claw": "10.0.47",
107
- "@remnic/import-supermemory": "10.0.47",
108
- "@remnic/import-chatgpt": "10.0.47",
109
- "@remnic/import-mem0": "10.0.47",
110
- "@remnic/connector-limitless": "10.0.47",
111
- "@remnic/connector-bee": "10.0.47",
112
- "@remnic/connector-omi": "10.0.47"
100
+ "@remnic/plugin-openclaw": "10.0.49",
101
+ "@remnic/bench": "10.0.49",
102
+ "@remnic/export-weclone": "10.0.49",
103
+ "@remnic/import-weclone": "10.0.49",
104
+ "@remnic/import-claude": "10.0.49",
105
+ "@remnic/import-gemini": "10.0.49",
106
+ "@remnic/import-chatgpt": "10.0.49",
107
+ "@remnic/import-lossless-claw": "10.0.49",
108
+ "@remnic/import-mem0": "10.0.49",
109
+ "@remnic/import-supermemory": "10.0.49",
110
+ "@remnic/connector-limitless": "10.0.49",
111
+ "@remnic/connector-omi": "10.0.49",
112
+ "@remnic/connector-bee": "10.0.49"
113
113
  },
114
114
  "license": "MIT",
115
115
  "repository": {