codemem 0.22.0-alpha.0 → 0.22.0-alpha.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEN,KAAK,uBAAuB,EAG5B,MAAM,uBAAuB,CAAC;AAQ/B,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASjD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ9D;AAED,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,GAAG,IAAI,CAGf;AAqLD,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,uBAAuB,EACnC,QAAQ,GAAE,MAAM,EAAqB,GACnC,MAAM,EAAE,CAgBV;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAS9D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpF;AA6RD,eAAO,MAAM,YAAY,SAuBtB,CAAC"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEN,KAAK,uBAAuB,EAG5B,MAAM,uBAAuB,CAAC;AAQ/B,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASjD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ9D;AAED,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,GAAG,IAAI,CAGf;AAqLD,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,uBAAuB,EACnC,QAAQ,GAAE,MAAM,EAAqB,GACnC,MAAM,EAAE,CAgBV;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAS9D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpF;AA2SD,eAAO,MAAM,YAAY,SAuBtB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_COORDINATOR_DB_PATH, MemoryStore, ObserverClient, RawEventSweeper, SyncRetentionRunner, VERSION, backfillTagsText, backfillVectors, buildRawEventEnvelopeFromHook, connect, coordinatorCreateGroupAction, coordinatorCreateInviteAction, coordinatorDisableDeviceAction, coordinatorEnrollDeviceAction, coordinatorImportInviteAction, coordinatorListDevicesAction, coordinatorListGroupsAction, coordinatorListJoinRequestsAction, coordinatorRemoveDeviceAction, coordinatorRenameDeviceAction, coordinatorReviewJoinRequestAction, createCoordinatorApp, deactivateLowSignalMemories, deactivateLowSignalObservations, ensureDeviceIdentity, exportMemories, fingerprintPublicKey, getRawEventStatus, importMemories, initDatabase, isEmbeddingDisabled, loadPublicKey, loadSqliteVec, planReplicationOpsAgePrune, pruneReplicationOpsUntilCaughtUp, rawEventsGate, readCodememConfigFile, readCoordinatorSyncConfig, readImportPayload, resolveDbPath, resolveProject, retryRawEventFailures, runSyncDaemon, runSyncPass, schema, setPeerProjectFilter, stripJsonComments, stripPrivateObj, stripTrailingCommas, syncPassPreflight, updatePeerAddresses, vacuumDatabase, writeCodememConfigFile } from "@codemem/core";
2
+ import { DEFAULT_COORDINATOR_DB_PATH, MemoryStore, ObserverClient, RawEventSweeper, SyncRetentionRunner, VERSION, backfillTagsText, backfillVectors, buildRawEventEnvelopeFromHook, connect, coordinatorCreateGroupAction, coordinatorCreateInviteAction, coordinatorDisableDeviceAction, coordinatorEnrollDeviceAction, coordinatorImportInviteAction, coordinatorListDevicesAction, coordinatorListGroupsAction, coordinatorListJoinRequestsAction, coordinatorRemoveDeviceAction, coordinatorRenameDeviceAction, coordinatorReviewJoinRequestAction, createBetterSqliteCoordinatorApp, deactivateLowSignalMemories, deactivateLowSignalObservations, ensureDeviceIdentity, exportMemories, fingerprintPublicKey, getRawEventStatus, importMemories, initDatabase, isEmbeddingDisabled, loadPublicKey, loadSqliteVec, planReplicationOpsAgePrune, pruneReplicationOpsUntilCaughtUp, rawEventsGate, readCodememConfigFile, readCoordinatorSyncConfig, readImportPayload, resolveDbPath, resolveProject, retryRawEventFailures, runSyncDaemon, runSyncPass, schema, setPeerProjectFilter, stripJsonComments, stripPrivateObj, stripTrailingCommas, syncPassPreflight, updatePeerAddresses, vacuumDatabase, writeCodememConfigFile } from "@codemem/core";
3
3
  import { Command } from "commander";
4
4
  import omelette from "omelette";
5
5
  import { existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1308,8 +1308,17 @@ async function startForegroundViewer(invocation) {
1308
1308
  else p.log.error(err.message);
1309
1309
  process.exit(1);
1310
1310
  });
1311
+ const walCheckpointTimer = setInterval(() => {
1312
+ try {
1313
+ store.db.pragma("wal_checkpoint(TRUNCATE)");
1314
+ } catch (err) {
1315
+ p.log.warn(`WAL checkpoint failed: ${err instanceof Error ? err.message : String(err)}`);
1316
+ }
1317
+ }, 300 * 1e3);
1318
+ walCheckpointTimer.unref();
1311
1319
  const shutdown = async () => {
1312
1320
  p.outro("shutting down");
1321
+ clearInterval(walCheckpointTimer);
1313
1322
  syncAbort.abort();
1314
1323
  retentionAbort.abort();
1315
1324
  await sweeper.stop();
@@ -2235,7 +2244,7 @@ syncCommand.addCommand(new Command("connect").configureHelp(helpStyle).descripti
2235
2244
  }));
2236
2245
  var coordinatorCommand = new Command("coordinator").configureHelp(helpStyle).description("Manage coordinator invites, join requests, and relay server");
2237
2246
  coordinatorCommand.addCommand(new Command("group-create").configureHelp(helpStyle).description("Create a coordinator group in the local store").argument("<group>", "group id").option("--name <name>", "display name override").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (groupId, opts) => {
2238
- const group = coordinatorCreateGroupAction({
2247
+ const group = await coordinatorCreateGroupAction({
2239
2248
  groupId,
2240
2249
  displayName: opts.name?.trim() || null,
2241
2250
  dbPath: opts.db ?? opts.dbPath ?? null
@@ -2248,8 +2257,8 @@ coordinatorCommand.addCommand(new Command("group-create").configureHelp(helpStyl
2248
2257
  p.log.success(`Group ready: ${groupId.trim()}`);
2249
2258
  p.outro(String(group.display_name ?? group.group_id ?? groupId.trim()));
2250
2259
  }));
2251
- coordinatorCommand.addCommand(new Command("list-groups").configureHelp(helpStyle).description("List coordinator groups from the local store").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action((opts) => {
2252
- const groups = coordinatorListGroupsAction({ dbPath: opts.db ?? opts.dbPath ?? null });
2260
+ coordinatorCommand.addCommand(new Command("list-groups").configureHelp(helpStyle).description("List coordinator groups from the local store").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (opts) => {
2261
+ const groups = await coordinatorListGroupsAction({ dbPath: opts.db ?? opts.dbPath ?? null });
2253
2262
  if (opts.json) {
2254
2263
  console.log(JSON.stringify(groups, null, 2));
2255
2264
  return;
@@ -2275,7 +2284,7 @@ coordinatorCommand.addCommand(new Command("enroll-device").configureHelp(helpSty
2275
2284
  process.exitCode = 1;
2276
2285
  return;
2277
2286
  }
2278
- const enrollment = coordinatorEnrollDeviceAction({
2287
+ const enrollment = await coordinatorEnrollDeviceAction({
2279
2288
  groupId,
2280
2289
  deviceId,
2281
2290
  fingerprint,
@@ -2291,8 +2300,8 @@ coordinatorCommand.addCommand(new Command("enroll-device").configureHelp(helpSty
2291
2300
  p.log.success(`Enrolled ${deviceId.trim()} in ${groupId.trim()}`);
2292
2301
  p.outro(String(enrollment.display_name ?? enrollment.device_id ?? deviceId.trim()));
2293
2302
  }));
2294
- coordinatorCommand.addCommand(new Command("list-devices").configureHelp(helpStyle).description("List enrolled devices in a local coordinator group").argument("<group>", "group id").option("--include-disabled", "include disabled devices").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action((groupId, opts) => {
2295
- const rows = coordinatorListDevicesAction({
2303
+ coordinatorCommand.addCommand(new Command("list-devices").configureHelp(helpStyle).description("List enrolled devices in a local coordinator group").argument("<group>", "group id").option("--include-disabled", "include disabled devices").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (groupId, opts) => {
2304
+ const rows = await coordinatorListDevicesAction({
2296
2305
  groupId,
2297
2306
  includeDisabled: opts.includeDisabled === true,
2298
2307
  dbPath: opts.db ?? opts.dbPath ?? null
@@ -2313,8 +2322,8 @@ coordinatorCommand.addCommand(new Command("list-devices").configureHelp(helpStyl
2313
2322
  }
2314
2323
  p.outro(`${rows.length} device(s)`);
2315
2324
  }));
2316
- coordinatorCommand.addCommand(new Command("rename-device").configureHelp(helpStyle).description("Rename an enrolled device in the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").requiredOption("--name <name>", "display name").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action((groupId, deviceId, opts) => {
2317
- const result = coordinatorRenameDeviceAction({
2325
+ coordinatorCommand.addCommand(new Command("rename-device").configureHelp(helpStyle).description("Rename an enrolled device in the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").requiredOption("--name <name>", "display name").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (groupId, deviceId, opts) => {
2326
+ const result = await coordinatorRenameDeviceAction({
2318
2327
  groupId,
2319
2328
  deviceId,
2320
2329
  displayName: opts.name.trim(),
@@ -2333,8 +2342,8 @@ coordinatorCommand.addCommand(new Command("rename-device").configureHelp(helpSty
2333
2342
  p.log.success(`Renamed ${deviceId.trim()} in ${groupId.trim()}`);
2334
2343
  p.outro(String(result.display_name ?? result.device_id ?? deviceId.trim()));
2335
2344
  }));
2336
- coordinatorCommand.addCommand(new Command("disable-device").configureHelp(helpStyle).description("Disable an enrolled device in the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action((groupId, deviceId, opts) => {
2337
- if (!coordinatorDisableDeviceAction({
2345
+ coordinatorCommand.addCommand(new Command("disable-device").configureHelp(helpStyle).description("Disable an enrolled device in the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (groupId, deviceId, opts) => {
2346
+ if (!await coordinatorDisableDeviceAction({
2338
2347
  groupId,
2339
2348
  deviceId,
2340
2349
  dbPath: opts.db ?? opts.dbPath ?? null
@@ -2355,8 +2364,8 @@ coordinatorCommand.addCommand(new Command("disable-device").configureHelp(helpSt
2355
2364
  p.log.success(`Disabled ${deviceId.trim()} in ${groupId.trim()}`);
2356
2365
  p.outro("disabled");
2357
2366
  }));
2358
- coordinatorCommand.addCommand(new Command("remove-device").configureHelp(helpStyle).description("Remove an enrolled device from the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action((groupId, deviceId, opts) => {
2359
- if (!coordinatorRemoveDeviceAction({
2367
+ coordinatorCommand.addCommand(new Command("remove-device").configureHelp(helpStyle).description("Remove an enrolled device from the local coordinator store").argument("<group>", "group id").argument("<device-id>", "device id").option("--db <path>", "coordinator database path").option("--db-path <path>", "coordinator database path").option("--json", "output as JSON").action(async (groupId, deviceId, opts) => {
2368
+ if (!await coordinatorRemoveDeviceAction({
2360
2369
  groupId,
2361
2370
  deviceId,
2362
2371
  dbPath: opts.db ?? opts.dbPath ?? null
@@ -2381,7 +2390,7 @@ coordinatorCommand.addCommand(new Command("serve").configureHelp(helpStyle).desc
2381
2390
  const host = String(opts.host ?? "127.0.0.1").trim() || "127.0.0.1";
2382
2391
  const port = Number.parseInt(String(opts.port ?? "7347"), 10);
2383
2392
  const dbPath = opts.db ?? opts.dbPath ?? DEFAULT_COORDINATOR_DB_PATH;
2384
- const app = createCoordinatorApp({ dbPath });
2393
+ const app = createBetterSqliteCoordinatorApp({ dbPath });
2385
2394
  p.intro("codemem sync coordinator serve");
2386
2395
  p.log.success(`Coordinator listening at http://${host}:${port}`);
2387
2396
  p.log.info(`DB: ${dbPath}`);