@askexenow/exe-os 0.9.39 → 0.9.40

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/bin/cli.js CHANGED
@@ -16246,7 +16246,21 @@ function resolveDataDir2() {
16246
16246
  if (process.env.EXE_MEM_DIR) return process.env.EXE_MEM_DIR;
16247
16247
  return path35.join(os17.homedir(), ".exe-os");
16248
16248
  }
16249
- async function createUpdateBackup(currentVersion, dataDir) {
16249
+ function externalBackupTargets(homeDir) {
16250
+ return [
16251
+ { name: "claude.json", path: path35.join(homeDir, ".claude.json") },
16252
+ { name: "claude-settings.json", path: path35.join(homeDir, ".claude", "settings.json") },
16253
+ { name: "claude-CLAUDE.md", path: path35.join(homeDir, ".claude", "CLAUDE.md") },
16254
+ { name: "tmux.conf", path: path35.join(homeDir, ".tmux.conf") },
16255
+ { name: "zshrc", path: path35.join(homeDir, ".zshrc") },
16256
+ { name: "bashrc", path: path35.join(homeDir, ".bashrc") },
16257
+ { name: "ghostty-config", path: path35.join(homeDir, ".config", "ghostty", "config") },
16258
+ { name: "codex-config.toml", path: path35.join(homeDir, ".codex", "config.toml") },
16259
+ { name: "codex-hooks.json", path: path35.join(homeDir, ".codex", "hooks.json") },
16260
+ { name: "opencode-config.json", path: path35.join(homeDir, ".config", "opencode", "opencode.json") }
16261
+ ];
16262
+ }
16263
+ async function createUpdateBackup(currentVersion, dataDir, homeDir = os17.homedir()) {
16250
16264
  const dir = dataDir ?? resolveDataDir2();
16251
16265
  const backupDir = path35.join(dir, BACKUP_DIR_NAME);
16252
16266
  if (existsSync29(backupDir)) {
@@ -16274,10 +16288,19 @@ async function createUpdateBackup(currentVersion, dataDir) {
16274
16288
  backedUpFiles.push(entry.name);
16275
16289
  }
16276
16290
  }
16291
+ const externalFiles = [];
16292
+ const externalDir = path35.join(backupDir, "external");
16293
+ for (const target of externalBackupTargets(homeDir)) {
16294
+ if (!existsSync29(target.path)) continue;
16295
+ await mkdir7(externalDir, { recursive: true });
16296
+ await copyFile(target.path, path35.join(externalDir, target.name));
16297
+ externalFiles.push(target);
16298
+ }
16277
16299
  const manifest = {
16278
16300
  version: currentVersion,
16279
16301
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
16280
- files: backedUpFiles
16302
+ files: backedUpFiles,
16303
+ ...externalFiles.length > 0 ? { externalFiles } : {}
16281
16304
  };
16282
16305
  await writeFile7(
16283
16306
  path35.join(backupDir, "manifest.json"),
@@ -16308,6 +16331,12 @@ async function restoreFromBackup(dataDir) {
16308
16331
  await copyFile(src, dest);
16309
16332
  }
16310
16333
  }
16334
+ for (const external of manifest.externalFiles ?? []) {
16335
+ const src = path35.join(backupDir, "external", external.name);
16336
+ if (!existsSync29(src)) continue;
16337
+ await mkdir7(path35.dirname(external.path), { recursive: true });
16338
+ await copyFile(src, external.path);
16339
+ }
16311
16340
  return manifest;
16312
16341
  }
16313
16342
  async function deleteBackup(dataDir) {
@@ -16325,8 +16354,12 @@ var init_update_backup = __esm({
16325
16354
  BACKUP_TARGETS = [
16326
16355
  { name: "config.json", type: "file" },
16327
16356
  { name: "exe-employees.json", type: "file" },
16357
+ { name: "agent-config.json", type: "file" },
16328
16358
  { name: "master.key", type: "file" },
16329
- { name: "identity", type: "dir" }
16359
+ { name: "tmux.conf", type: "file" },
16360
+ { name: "identity", type: "dir" },
16361
+ { name: "shards", type: "dir" },
16362
+ { name: "mcp-configs", type: "dir" }
16330
16363
  // All .db files (SQLCipher databases) — matched dynamically
16331
16364
  ];
16332
16365
  }
@@ -615,11 +615,29 @@ function resolveDataDir() {
615
615
  var BACKUP_TARGETS = [
616
616
  { name: "config.json", type: "file" },
617
617
  { name: "exe-employees.json", type: "file" },
618
+ { name: "agent-config.json", type: "file" },
618
619
  { name: "master.key", type: "file" },
619
- { name: "identity", type: "dir" }
620
+ { name: "tmux.conf", type: "file" },
621
+ { name: "identity", type: "dir" },
622
+ { name: "shards", type: "dir" },
623
+ { name: "mcp-configs", type: "dir" }
620
624
  // All .db files (SQLCipher databases) — matched dynamically
621
625
  ];
622
- async function createUpdateBackup(currentVersion, dataDir) {
626
+ function externalBackupTargets(homeDir) {
627
+ return [
628
+ { name: "claude.json", path: path.join(homeDir, ".claude.json") },
629
+ { name: "claude-settings.json", path: path.join(homeDir, ".claude", "settings.json") },
630
+ { name: "claude-CLAUDE.md", path: path.join(homeDir, ".claude", "CLAUDE.md") },
631
+ { name: "tmux.conf", path: path.join(homeDir, ".tmux.conf") },
632
+ { name: "zshrc", path: path.join(homeDir, ".zshrc") },
633
+ { name: "bashrc", path: path.join(homeDir, ".bashrc") },
634
+ { name: "ghostty-config", path: path.join(homeDir, ".config", "ghostty", "config") },
635
+ { name: "codex-config.toml", path: path.join(homeDir, ".codex", "config.toml") },
636
+ { name: "codex-hooks.json", path: path.join(homeDir, ".codex", "hooks.json") },
637
+ { name: "opencode-config.json", path: path.join(homeDir, ".config", "opencode", "opencode.json") }
638
+ ];
639
+ }
640
+ async function createUpdateBackup(currentVersion, dataDir, homeDir = os.homedir()) {
623
641
  const dir = dataDir ?? resolveDataDir();
624
642
  const backupDir = path.join(dir, BACKUP_DIR_NAME);
625
643
  if (existsSync(backupDir)) {
@@ -647,10 +665,19 @@ async function createUpdateBackup(currentVersion, dataDir) {
647
665
  backedUpFiles.push(entry.name);
648
666
  }
649
667
  }
668
+ const externalFiles = [];
669
+ const externalDir = path.join(backupDir, "external");
670
+ for (const target of externalBackupTargets(homeDir)) {
671
+ if (!existsSync(target.path)) continue;
672
+ await mkdir(externalDir, { recursive: true });
673
+ await copyFile(target.path, path.join(externalDir, target.name));
674
+ externalFiles.push(target);
675
+ }
650
676
  const manifest = {
651
677
  version: currentVersion,
652
678
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
653
- files: backedUpFiles
679
+ files: backedUpFiles,
680
+ ...externalFiles.length > 0 ? { externalFiles } : {}
654
681
  };
655
682
  await writeFile(
656
683
  path.join(backupDir, "manifest.json"),
@@ -681,6 +708,12 @@ async function restoreFromBackup(dataDir) {
681
708
  await copyFile(src, dest);
682
709
  }
683
710
  }
711
+ for (const external of manifest.externalFiles ?? []) {
712
+ const src = path.join(backupDir, "external", external.name);
713
+ if (!existsSync(src)) continue;
714
+ await mkdir(path.dirname(external.path), { recursive: true });
715
+ await copyFile(src, external.path);
716
+ }
684
717
  return manifest;
685
718
  }
686
719
  async function deleteBackup(dataDir) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.39",
3
+ "version": "0.9.40",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -71,7 +71,7 @@
71
71
  "typecheck": "tsc --noEmit",
72
72
  "build": "tsup && mkdir -p dist/assets && cp src/assets/tmux.conf dist/assets/ && cp src/assets/ghostty.conf dist/assets/ && cp src/assets/statusline-command.sh dist/assets/ && cp src/bin/exe-start.sh dist/bin/exe-start.sh",
73
73
  "deploy": "node dist/bin/pre-build-guard.js 2>/dev/null; (kill $(cat ~/.exe-os/exed.pid 2>/dev/null) 2>/dev/null; pgrep -f exe-daemon.js | xargs kill 2>/dev/null; true) && tsup && mkdir -p dist/assets && cp src/assets/tmux.conf dist/assets/ && cp src/assets/ghostty.conf dist/assets/ && cp src/assets/statusline-command.sh dist/assets/ && cp src/bin/exe-start.sh dist/bin/exe-start.sh && npm install -g . && node dist/bin/install.js --global && echo '[exe-os] Deploy complete. Run /mcp in active sessions to reconnect.'",
74
- "postinstall": "node dist/bin/install.js --global 2>/dev/null || true",
74
+ "postinstall": "node dist/bin/install.js --commands-only 2>/dev/null || true",
75
75
  "prepublishOnly": "npm run typecheck && npm run build && node dist/bin/customer-readiness.js",
76
76
  "test:publish": "npx vitest run --maxWorkers=4 --exclude 'tests/tui/**' --exclude 'tests/lib/tmux-routing.test.ts' --exclude 'tests/lib/intercom-routing.test.ts' --exclude 'tests/gateway/**' --exclude 'tests/installer/setup-wizard.test.ts' --exclude 'tests/mcp/ingest-document.test.ts' --exclude 'tests/lib/hybrid-search.test.ts' --exclude 'tests/lib/worker-gate.test.ts'",
77
77
  "benchmark:longmemeval": "npx tsx tests/benchmarks/longmemeval.ts"