@askexenow/exe-os 0.8.62 → 0.8.63

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 (61) hide show
  1. package/dist/bin/backfill-conversations.js +2 -3
  2. package/dist/bin/backfill-responses.js +3 -4
  3. package/dist/bin/backfill-vectors.js +0 -1
  4. package/dist/bin/cleanup-stale-review-tasks.js +0 -1
  5. package/dist/bin/cli.js +47 -79
  6. package/dist/bin/exe-assign.js +0 -1
  7. package/dist/bin/exe-boot.js +40 -72
  8. package/dist/bin/exe-cloud.js +28 -60
  9. package/dist/bin/exe-dispatch.js +0 -1
  10. package/dist/bin/exe-doctor.js +0 -1
  11. package/dist/bin/exe-export-behaviors.js +1 -2
  12. package/dist/bin/exe-forget.js +0 -1
  13. package/dist/bin/exe-gateway.js +16 -17
  14. package/dist/bin/exe-heartbeat.js +1 -2
  15. package/dist/bin/exe-kill.js +2 -3
  16. package/dist/bin/exe-launch-agent.js +1 -2
  17. package/dist/bin/exe-link.js +28 -66
  18. package/dist/bin/exe-pending-messages.js +1 -2
  19. package/dist/bin/exe-pending-notifications.js +0 -1
  20. package/dist/bin/exe-pending-reviews.js +1 -2
  21. package/dist/bin/exe-review.js +0 -1
  22. package/dist/bin/exe-search.js +2 -3
  23. package/dist/bin/exe-session-cleanup.js +4 -5
  24. package/dist/bin/exe-status.js +0 -1
  25. package/dist/bin/exe-team.js +0 -1
  26. package/dist/bin/git-sweep.js +0 -1
  27. package/dist/bin/graph-backfill.js +5 -6
  28. package/dist/bin/graph-export.js +0 -1
  29. package/dist/bin/scan-tasks.js +0 -1
  30. package/dist/bin/setup.js +29 -61
  31. package/dist/bin/shard-migrate.js +0 -1
  32. package/dist/bin/wiki-sync.js +0 -1
  33. package/dist/gateway/index.js +16 -17
  34. package/dist/hooks/bug-report-worker.js +11 -12
  35. package/dist/hooks/commit-complete.js +0 -1
  36. package/dist/hooks/error-recall.js +2 -3
  37. package/dist/hooks/ingest-worker.js +14 -15
  38. package/dist/hooks/instructions-loaded.js +0 -1
  39. package/dist/hooks/notification.js +0 -1
  40. package/dist/hooks/post-compact.js +0 -1
  41. package/dist/hooks/pre-compact.js +2 -3
  42. package/dist/hooks/pre-tool-use.js +0 -1
  43. package/dist/hooks/prompt-ingest-worker.js +2 -3
  44. package/dist/hooks/prompt-submit.js +6 -7
  45. package/dist/hooks/response-ingest-worker.js +2 -3
  46. package/dist/hooks/session-end.js +3 -4
  47. package/dist/hooks/session-start.js +2 -3
  48. package/dist/hooks/stop.js +2 -3
  49. package/dist/hooks/subagent-stop.js +0 -1
  50. package/dist/hooks/summary-worker.js +30 -62
  51. package/dist/index.js +7 -8
  52. package/dist/lib/consolidation.js +0 -1
  53. package/dist/lib/exe-daemon.js +33 -65
  54. package/dist/lib/hybrid-search.js +2 -3
  55. package/dist/lib/keychain.js +19 -58
  56. package/dist/lib/schedules.js +2 -3
  57. package/dist/lib/store.js +0 -1
  58. package/dist/mcp/server.js +29 -30
  59. package/dist/runtime/index.js +2 -3
  60. package/dist/tui/App.js +24 -56
  61. package/package.json +1 -1
package/dist/tui/App.js CHANGED
@@ -7594,7 +7594,6 @@ import { readFile as readFile4, writeFile as writeFile5, unlink, mkdir as mkdir4
7594
7594
  import { existsSync as existsSync12 } from "fs";
7595
7595
  import path22 from "path";
7596
7596
  import os7 from "os";
7597
- import crypto6 from "crypto";
7598
7597
  function getKeyDir() {
7599
7598
  return process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path22.join(os7.homedir(), ".exe-os");
7600
7599
  }
@@ -7659,65 +7658,34 @@ async function deleteMasterKey() {
7659
7658
  await unlink(keyPath);
7660
7659
  }
7661
7660
  }
7662
- function exportMnemonic(key) {
7663
- if (key.length !== 32) {
7664
- throw new Error(`Key must be 32 bytes, got ${key.length}`);
7665
- }
7666
- const hash = crypto6.createHash("sha256").update(key).digest();
7667
- const checksumByte = hash[0];
7668
- let bits = "";
7669
- for (const byte of key) {
7670
- bits += byte.toString(2).padStart(8, "0");
7671
- }
7672
- bits += checksumByte.toString(2).padStart(8, "0");
7673
- const words = [];
7674
- let wordlist;
7661
+ async function loadBip39() {
7675
7662
  try {
7676
- const bip39 = __require("bip39");
7677
- wordlist = bip39.wordlists?.english ?? bip39.default?.wordlists?.english;
7678
- if (!wordlist) throw new Error("no wordlist");
7663
+ return await import("bip39");
7679
7664
  } catch {
7680
- throw new Error("bip39 package required. Install with: npm install bip39");
7665
+ throw new Error(
7666
+ "bip39 package not found. Run: npm install -g bip39\nOr reinstall exe-os: npm install -g @askexenow/exe-os"
7667
+ );
7681
7668
  }
7682
- for (let i = 0; i < 264; i += 11) {
7683
- const index = parseInt(bits.slice(i, i + 11), 2);
7684
- words.push(wordlist[index]);
7669
+ }
7670
+ async function exportMnemonic(key) {
7671
+ if (key.length !== 32) {
7672
+ throw new Error(`Key must be 32 bytes, got ${key.length}`);
7685
7673
  }
7686
- return words.join(" ");
7674
+ const { entropyToMnemonic } = await loadBip39();
7675
+ return entropyToMnemonic(key.toString("hex"));
7687
7676
  }
7688
- function importMnemonic(mnemonic) {
7689
- const words = mnemonic.trim().split(/\s+/);
7677
+ async function importMnemonic(mnemonic) {
7678
+ const trimmed = mnemonic.trim();
7679
+ const words = trimmed.split(/\s+/);
7690
7680
  if (words.length !== 24) {
7691
7681
  throw new Error(`Expected 24 words, got ${words.length}`);
7692
7682
  }
7693
- let wordlist;
7694
- try {
7695
- const bip39 = __require("bip39");
7696
- wordlist = bip39.wordlists?.english ?? bip39.default?.wordlists?.english;
7697
- if (!wordlist) throw new Error("no wordlist");
7698
- } catch {
7699
- throw new Error("bip39 package required. Install with: npm install bip39");
7700
- }
7701
- let bits = "";
7702
- for (const word of words) {
7703
- const index = wordlist.indexOf(word.toLowerCase());
7704
- if (index === -1) {
7705
- throw new Error(`Invalid BIP39 word: "${word}"`);
7706
- }
7707
- bits += index.toString(2).padStart(11, "0");
7683
+ const { validateMnemonic, mnemonicToEntropy } = await loadBip39();
7684
+ if (!validateMnemonic(trimmed)) {
7685
+ throw new Error("Invalid mnemonic \u2014 check for typos or missing words");
7708
7686
  }
7709
- const entropyBits = bits.slice(0, 256);
7710
- const checksumBits = bits.slice(256, 264);
7711
- const key = Buffer.alloc(32);
7712
- for (let i = 0; i < 32; i++) {
7713
- key[i] = parseInt(entropyBits.slice(i * 8, (i + 1) * 8), 2);
7714
- }
7715
- const hash = crypto6.createHash("sha256").update(key).digest();
7716
- const expectedChecksum = hash[0].toString(2).padStart(8, "0");
7717
- if (checksumBits !== expectedChecksum) {
7718
- throw new Error("Invalid mnemonic checksum");
7719
- }
7720
- return key;
7687
+ const entropy = mnemonicToEntropy(trimmed);
7688
+ return Buffer.from(entropy, "hex");
7721
7689
  }
7722
7690
  var SERVICE, ACCOUNT;
7723
7691
  var init_keychain = __esm({
@@ -7735,16 +7703,16 @@ __export(ws_auth_exports, {
7735
7703
  deriveWsAuthToken: () => deriveWsAuthToken,
7736
7704
  hashAuthToken: () => hashAuthToken
7737
7705
  });
7738
- import crypto7 from "crypto";
7706
+ import crypto6 from "crypto";
7739
7707
  function deriveWsAuthToken(masterKey) {
7740
- return Buffer.from(crypto7.hkdfSync("sha256", masterKey, "", WS_AUTH_HKDF_INFO, 32));
7708
+ return Buffer.from(crypto6.hkdfSync("sha256", masterKey, "", WS_AUTH_HKDF_INFO, 32));
7741
7709
  }
7742
7710
  function deriveOrgId(masterKey) {
7743
- const raw = Buffer.from(crypto7.hkdfSync("sha256", masterKey, "", ORG_ID_HKDF_INFO, 32));
7744
- return crypto7.createHash("sha256").update(raw).digest("hex").slice(0, 32);
7711
+ const raw = Buffer.from(crypto6.hkdfSync("sha256", masterKey, "", ORG_ID_HKDF_INFO, 32));
7712
+ return crypto6.createHash("sha256").update(raw).digest("hex").slice(0, 32);
7745
7713
  }
7746
7714
  function hashAuthToken(token) {
7747
- return crypto7.createHash("sha256").update(token).digest("hex");
7715
+ return crypto6.createHash("sha256").update(token).digest("hex");
7748
7716
  }
7749
7717
  var WS_AUTH_HKDF_INFO, ORG_ID_HKDF_INFO;
7750
7718
  var init_ws_auth = __esm({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.8.62",
3
+ "version": "0.8.63",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "type": "module",