@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.
- package/dist/bin/backfill-conversations.js +2 -3
- package/dist/bin/backfill-responses.js +3 -4
- package/dist/bin/backfill-vectors.js +0 -1
- package/dist/bin/cleanup-stale-review-tasks.js +0 -1
- package/dist/bin/cli.js +47 -79
- package/dist/bin/exe-assign.js +0 -1
- package/dist/bin/exe-boot.js +40 -72
- package/dist/bin/exe-cloud.js +28 -60
- package/dist/bin/exe-dispatch.js +0 -1
- package/dist/bin/exe-doctor.js +0 -1
- package/dist/bin/exe-export-behaviors.js +1 -2
- package/dist/bin/exe-forget.js +0 -1
- package/dist/bin/exe-gateway.js +16 -17
- package/dist/bin/exe-heartbeat.js +1 -2
- package/dist/bin/exe-kill.js +2 -3
- package/dist/bin/exe-launch-agent.js +1 -2
- package/dist/bin/exe-link.js +28 -66
- package/dist/bin/exe-pending-messages.js +1 -2
- package/dist/bin/exe-pending-notifications.js +0 -1
- package/dist/bin/exe-pending-reviews.js +1 -2
- package/dist/bin/exe-review.js +0 -1
- package/dist/bin/exe-search.js +2 -3
- package/dist/bin/exe-session-cleanup.js +4 -5
- package/dist/bin/exe-status.js +0 -1
- package/dist/bin/exe-team.js +0 -1
- package/dist/bin/git-sweep.js +0 -1
- package/dist/bin/graph-backfill.js +5 -6
- package/dist/bin/graph-export.js +0 -1
- package/dist/bin/scan-tasks.js +0 -1
- package/dist/bin/setup.js +29 -61
- package/dist/bin/shard-migrate.js +0 -1
- package/dist/bin/wiki-sync.js +0 -1
- package/dist/gateway/index.js +16 -17
- package/dist/hooks/bug-report-worker.js +11 -12
- package/dist/hooks/commit-complete.js +0 -1
- package/dist/hooks/error-recall.js +2 -3
- package/dist/hooks/ingest-worker.js +14 -15
- package/dist/hooks/instructions-loaded.js +0 -1
- package/dist/hooks/notification.js +0 -1
- package/dist/hooks/post-compact.js +0 -1
- package/dist/hooks/pre-compact.js +2 -3
- package/dist/hooks/pre-tool-use.js +0 -1
- package/dist/hooks/prompt-ingest-worker.js +2 -3
- package/dist/hooks/prompt-submit.js +6 -7
- package/dist/hooks/response-ingest-worker.js +2 -3
- package/dist/hooks/session-end.js +3 -4
- package/dist/hooks/session-start.js +2 -3
- package/dist/hooks/stop.js +2 -3
- package/dist/hooks/subagent-stop.js +0 -1
- package/dist/hooks/summary-worker.js +30 -62
- package/dist/index.js +7 -8
- package/dist/lib/consolidation.js +0 -1
- package/dist/lib/exe-daemon.js +33 -65
- package/dist/lib/hybrid-search.js +2 -3
- package/dist/lib/keychain.js +19 -58
- package/dist/lib/schedules.js +2 -3
- package/dist/lib/store.js +0 -1
- package/dist/mcp/server.js +29 -30
- package/dist/runtime/index.js +2 -3
- package/dist/tui/App.js +24 -56
- 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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
7683
|
-
|
|
7684
|
-
|
|
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
|
-
|
|
7674
|
+
const { entropyToMnemonic } = await loadBip39();
|
|
7675
|
+
return entropyToMnemonic(key.toString("hex"));
|
|
7687
7676
|
}
|
|
7688
|
-
function importMnemonic(mnemonic) {
|
|
7689
|
-
const
|
|
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
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
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
|
|
7710
|
-
|
|
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
|
|
7706
|
+
import crypto6 from "crypto";
|
|
7739
7707
|
function deriveWsAuthToken(masterKey) {
|
|
7740
|
-
return Buffer.from(
|
|
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(
|
|
7744
|
-
return
|
|
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
|
|
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