@askexenow/exe-os 0.8.0 → 0.8.2
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/README.md +178 -79
- package/package.json +1 -1
- package/dist/bin/backfill-responses.js +0 -1912
- package/dist/bin/backfill-vectors.js +0 -1642
- package/dist/bin/cleanup-stale-review-tasks.js +0 -1339
- package/dist/bin/cli.js +0 -18800
- package/dist/bin/exe-agent.js +0 -1858
- package/dist/bin/exe-assign.js +0 -1957
- package/dist/bin/exe-boot.js +0 -6460
- package/dist/bin/exe-call.js +0 -197
- package/dist/bin/exe-cloud.js +0 -850
- package/dist/bin/exe-dispatch.js +0 -1146
- package/dist/bin/exe-doctor.js +0 -1657
- package/dist/bin/exe-export-behaviors.js +0 -1494
- package/dist/bin/exe-forget.js +0 -1627
- package/dist/bin/exe-gateway.js +0 -7732
- package/dist/bin/exe-healthcheck.js +0 -207
- package/dist/bin/exe-heartbeat.js +0 -1647
- package/dist/bin/exe-kill.js +0 -1479
- package/dist/bin/exe-launch-agent.js +0 -1704
- package/dist/bin/exe-link.js +0 -192
- package/dist/bin/exe-new-employee.js +0 -852
- package/dist/bin/exe-pending-messages.js +0 -1446
- package/dist/bin/exe-pending-notifications.js +0 -1321
- package/dist/bin/exe-pending-reviews.js +0 -1468
- package/dist/bin/exe-repo-drift.js +0 -95
- package/dist/bin/exe-review.js +0 -1590
- package/dist/bin/exe-search.js +0 -2651
- package/dist/bin/exe-session-cleanup.js +0 -3173
- package/dist/bin/exe-settings.js +0 -354
- package/dist/bin/exe-status.js +0 -1532
- package/dist/bin/exe-team.js +0 -1324
- package/dist/bin/git-sweep.js +0 -2185
- package/dist/bin/graph-backfill.js +0 -1968
- package/dist/bin/graph-export.js +0 -1604
- package/dist/bin/install.js +0 -656
- package/dist/bin/list-providers.js +0 -140
- package/dist/bin/scan-tasks.js +0 -1820
- package/dist/bin/setup.js +0 -951
- package/dist/bin/shard-migrate.js +0 -1494
- package/dist/bin/update.js +0 -95
- package/dist/bin/wiki-sync.js +0 -1514
- package/dist/gateway/index.js +0 -8848
- package/dist/hooks/bug-report-worker.js +0 -2743
- package/dist/hooks/commit-complete.js +0 -2108
- package/dist/hooks/error-recall.js +0 -2861
- package/dist/hooks/exe-heartbeat-hook.js +0 -232
- package/dist/hooks/ingest-worker.js +0 -4793
- package/dist/hooks/ingest.js +0 -684
- package/dist/hooks/instructions-loaded.js +0 -1880
- package/dist/hooks/notification.js +0 -1726
- package/dist/hooks/post-compact.js +0 -1751
- package/dist/hooks/pre-compact.js +0 -1746
- package/dist/hooks/pre-tool-use.js +0 -2191
- package/dist/hooks/prompt-ingest-worker.js +0 -2126
- package/dist/hooks/prompt-submit.js +0 -4693
- package/dist/hooks/response-ingest-worker.js +0 -1936
- package/dist/hooks/session-end.js +0 -1752
- package/dist/hooks/session-start.js +0 -2795
- package/dist/hooks/stop.js +0 -1835
- package/dist/hooks/subagent-stop.js +0 -1726
- package/dist/hooks/summary-worker.js +0 -2661
- package/dist/index.js +0 -11834
- package/dist/lib/cloud-sync.js +0 -495
- package/dist/lib/config.js +0 -222
- package/dist/lib/consolidation.js +0 -476
- package/dist/lib/crypto.js +0 -51
- package/dist/lib/database.js +0 -730
- package/dist/lib/device-registry.js +0 -900
- package/dist/lib/embedder.js +0 -632
- package/dist/lib/employee-templates.js +0 -543
- package/dist/lib/employees.js +0 -177
- package/dist/lib/error-detector.js +0 -156
- package/dist/lib/exe-daemon-client.js +0 -451
- package/dist/lib/exe-daemon.js +0 -8285
- package/dist/lib/file-grep.js +0 -199
- package/dist/lib/hybrid-search.js +0 -1819
- package/dist/lib/identity-templates.js +0 -320
- package/dist/lib/identity.js +0 -223
- package/dist/lib/keychain.js +0 -145
- package/dist/lib/license.js +0 -377
- package/dist/lib/messaging.js +0 -1376
- package/dist/lib/reminders.js +0 -63
- package/dist/lib/schedules.js +0 -1396
- package/dist/lib/session-registry.js +0 -52
- package/dist/lib/skill-learning.js +0 -477
- package/dist/lib/status-brief.js +0 -235
- package/dist/lib/store.js +0 -1551
- package/dist/lib/task-router.js +0 -62
- package/dist/lib/tasks.js +0 -2456
- package/dist/lib/tmux-routing.js +0 -2836
- package/dist/lib/tmux-status.js +0 -261
- package/dist/lib/tmux-transport.js +0 -83
- package/dist/lib/transport.js +0 -128
- package/dist/lib/ws-auth.js +0 -19
- package/dist/lib/ws-client.js +0 -160
- package/dist/mcp/server.js +0 -10538
- package/dist/mcp/tools/complete-reminder.js +0 -67
- package/dist/mcp/tools/create-reminder.js +0 -52
- package/dist/mcp/tools/create-task.js +0 -1853
- package/dist/mcp/tools/deactivate-behavior.js +0 -263
- package/dist/mcp/tools/list-reminders.js +0 -62
- package/dist/mcp/tools/list-tasks.js +0 -463
- package/dist/mcp/tools/send-message.js +0 -1382
- package/dist/mcp/tools/update-task.js +0 -1692
- package/dist/runtime/index.js +0 -6809
- package/dist/tui/App.js +0 -17479
package/dist/bin/exe-link.js
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
-
}) : x)(function(x) {
|
|
5
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
// src/bin/exe-link.ts
|
|
10
|
-
import { createInterface } from "readline";
|
|
11
|
-
|
|
12
|
-
// src/lib/keychain.ts
|
|
13
|
-
import { readFile, writeFile, unlink, mkdir, chmod } from "fs/promises";
|
|
14
|
-
import { existsSync } from "fs";
|
|
15
|
-
import path from "path";
|
|
16
|
-
import crypto from "crypto";
|
|
17
|
-
var SERVICE = "exe-mem";
|
|
18
|
-
var ACCOUNT = "master-key";
|
|
19
|
-
function getKeyDir() {
|
|
20
|
-
return process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path.join(process.env.HOME ?? "/tmp", ".exe-os");
|
|
21
|
-
}
|
|
22
|
-
function getKeyPath() {
|
|
23
|
-
return path.join(getKeyDir(), "master.key");
|
|
24
|
-
}
|
|
25
|
-
async function tryKeytar() {
|
|
26
|
-
try {
|
|
27
|
-
return await import("keytar");
|
|
28
|
-
} catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async function getMasterKey() {
|
|
33
|
-
const keytar = await tryKeytar();
|
|
34
|
-
if (keytar) {
|
|
35
|
-
try {
|
|
36
|
-
const stored = await keytar.getPassword(SERVICE, ACCOUNT);
|
|
37
|
-
if (stored) {
|
|
38
|
-
return Buffer.from(stored, "base64");
|
|
39
|
-
}
|
|
40
|
-
} catch {
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const keyPath = getKeyPath();
|
|
44
|
-
if (!existsSync(keyPath)) {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
const content = await readFile(keyPath, "utf-8");
|
|
49
|
-
return Buffer.from(content.trim(), "base64");
|
|
50
|
-
} catch {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async function setMasterKey(key) {
|
|
55
|
-
const b64 = key.toString("base64");
|
|
56
|
-
const keytar = await tryKeytar();
|
|
57
|
-
if (keytar) {
|
|
58
|
-
try {
|
|
59
|
-
await keytar.setPassword(SERVICE, ACCOUNT, b64);
|
|
60
|
-
return;
|
|
61
|
-
} catch {
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const dir = getKeyDir();
|
|
65
|
-
await mkdir(dir, { recursive: true });
|
|
66
|
-
const keyPath = getKeyPath();
|
|
67
|
-
await writeFile(keyPath, b64 + "\n", "utf-8");
|
|
68
|
-
await chmod(keyPath, 384);
|
|
69
|
-
}
|
|
70
|
-
function exportMnemonic(key) {
|
|
71
|
-
if (key.length !== 32) {
|
|
72
|
-
throw new Error(`Key must be 32 bytes, got ${key.length}`);
|
|
73
|
-
}
|
|
74
|
-
const hash = crypto.createHash("sha256").update(key).digest();
|
|
75
|
-
const checksumByte = hash[0];
|
|
76
|
-
let bits = "";
|
|
77
|
-
for (const byte of key) {
|
|
78
|
-
bits += byte.toString(2).padStart(8, "0");
|
|
79
|
-
}
|
|
80
|
-
bits += checksumByte.toString(2).padStart(8, "0");
|
|
81
|
-
const words = [];
|
|
82
|
-
let wordlist;
|
|
83
|
-
try {
|
|
84
|
-
const bip39 = __require("bip39");
|
|
85
|
-
wordlist = bip39.wordlists?.english ?? bip39.default?.wordlists?.english;
|
|
86
|
-
if (!wordlist) throw new Error("no wordlist");
|
|
87
|
-
} catch {
|
|
88
|
-
throw new Error("bip39 package required. Install with: npm install bip39");
|
|
89
|
-
}
|
|
90
|
-
for (let i = 0; i < 264; i += 11) {
|
|
91
|
-
const index = parseInt(bits.slice(i, i + 11), 2);
|
|
92
|
-
words.push(wordlist[index]);
|
|
93
|
-
}
|
|
94
|
-
return words.join(" ");
|
|
95
|
-
}
|
|
96
|
-
function importMnemonic(mnemonic) {
|
|
97
|
-
const words = mnemonic.trim().split(/\s+/);
|
|
98
|
-
if (words.length !== 24) {
|
|
99
|
-
throw new Error(`Expected 24 words, got ${words.length}`);
|
|
100
|
-
}
|
|
101
|
-
let wordlist;
|
|
102
|
-
try {
|
|
103
|
-
const bip39 = __require("bip39");
|
|
104
|
-
wordlist = bip39.wordlists?.english ?? bip39.default?.wordlists?.english;
|
|
105
|
-
if (!wordlist) throw new Error("no wordlist");
|
|
106
|
-
} catch {
|
|
107
|
-
throw new Error("bip39 package required. Install with: npm install bip39");
|
|
108
|
-
}
|
|
109
|
-
let bits = "";
|
|
110
|
-
for (const word of words) {
|
|
111
|
-
const index = wordlist.indexOf(word.toLowerCase());
|
|
112
|
-
if (index === -1) {
|
|
113
|
-
throw new Error(`Invalid BIP39 word: "${word}"`);
|
|
114
|
-
}
|
|
115
|
-
bits += index.toString(2).padStart(11, "0");
|
|
116
|
-
}
|
|
117
|
-
const entropyBits = bits.slice(0, 256);
|
|
118
|
-
const checksumBits = bits.slice(256, 264);
|
|
119
|
-
const key = Buffer.alloc(32);
|
|
120
|
-
for (let i = 0; i < 32; i++) {
|
|
121
|
-
key[i] = parseInt(entropyBits.slice(i * 8, (i + 1) * 8), 2);
|
|
122
|
-
}
|
|
123
|
-
const hash = crypto.createHash("sha256").update(key).digest();
|
|
124
|
-
const expectedChecksum = hash[0].toString(2).padStart(8, "0");
|
|
125
|
-
if (checksumBits !== expectedChecksum) {
|
|
126
|
-
throw new Error("Invalid mnemonic checksum");
|
|
127
|
-
}
|
|
128
|
-
return key;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// src/lib/is-main.ts
|
|
132
|
-
import { realpathSync } from "fs";
|
|
133
|
-
import { fileURLToPath } from "url";
|
|
134
|
-
function isMainModule(importMetaUrl) {
|
|
135
|
-
if (process.argv[1] == null) return false;
|
|
136
|
-
try {
|
|
137
|
-
const scriptPath = realpathSync(process.argv[1]);
|
|
138
|
-
const modulePath = realpathSync(fileURLToPath(importMetaUrl));
|
|
139
|
-
return scriptPath === modulePath;
|
|
140
|
-
} catch {
|
|
141
|
-
return importMetaUrl === `file://${process.argv[1]}` || importMetaUrl === new URL(process.argv[1], "file://").href;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// src/bin/exe-link.ts
|
|
146
|
-
async function main() {
|
|
147
|
-
const mode = process.argv[2];
|
|
148
|
-
if (mode === "export") {
|
|
149
|
-
const key = await getMasterKey();
|
|
150
|
-
if (!key) {
|
|
151
|
-
console.error("No master key found. Run /exe-setup first.");
|
|
152
|
-
process.exit(1);
|
|
153
|
-
}
|
|
154
|
-
const mnemonic = exportMnemonic(key);
|
|
155
|
-
console.log("Your 24-word recovery phrase:\n");
|
|
156
|
-
console.log(` ${mnemonic}
|
|
157
|
-
`);
|
|
158
|
-
console.log("Write this down and enter it on your new device with /exe-link import.");
|
|
159
|
-
console.log("Anyone with this phrase can decrypt your memories.");
|
|
160
|
-
} else if (mode === "import") {
|
|
161
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
162
|
-
const mnemonic = await new Promise((resolve) => {
|
|
163
|
-
rl.question("Paste your 24-word recovery phrase: ", (answer) => {
|
|
164
|
-
rl.close();
|
|
165
|
-
resolve(answer.trim());
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
try {
|
|
169
|
-
const key = importMnemonic(mnemonic);
|
|
170
|
-
await setMasterKey(key);
|
|
171
|
-
console.log("Master key imported and stored securely.");
|
|
172
|
-
console.log("Run /exe-setup to configure sync and download the embedding model.");
|
|
173
|
-
} catch (err) {
|
|
174
|
-
console.error(err instanceof Error ? err.message : String(err));
|
|
175
|
-
process.exit(1);
|
|
176
|
-
}
|
|
177
|
-
} else {
|
|
178
|
-
console.error("Usage:");
|
|
179
|
-
console.error(" exe-link export \u2014 show 24-word mnemonic for current key");
|
|
180
|
-
console.error(" exe-link import \u2014 paste mnemonic to import key on new device");
|
|
181
|
-
process.exit(1);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (isMainModule(import.meta.url)) {
|
|
185
|
-
main().catch((err) => {
|
|
186
|
-
console.error(err instanceof Error ? err.message : String(err));
|
|
187
|
-
process.exit(1);
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
export {
|
|
191
|
-
main
|
|
192
|
-
};
|