@askexenow/exe-os 0.9.113 → 0.9.115
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/agentic-ontology-backfill.js +36 -12
- package/dist/bin/agentic-reflection-backfill.js +36 -12
- package/dist/bin/agentic-semantic-label.js +36 -12
- package/dist/bin/backfill-conversations.js +36 -12
- package/dist/bin/backfill-responses.js +36 -12
- package/dist/bin/backfill-vectors.js +36 -12
- package/dist/bin/bulk-sync-postgres.js +36 -12
- package/dist/bin/cleanup-stale-review-tasks.js +470 -113
- package/dist/bin/cli.js +413 -62
- package/dist/bin/exe-agent.js +27 -0
- package/dist/bin/exe-assign.js +36 -12
- package/dist/bin/exe-boot.js +246 -54
- package/dist/bin/exe-call.js +8 -0
- package/dist/bin/exe-cloud.js +47 -12
- package/dist/bin/exe-dispatch.js +348 -53
- package/dist/bin/exe-doctor.js +51 -13
- package/dist/bin/exe-export-behaviors.js +37 -12
- package/dist/bin/exe-forget.js +36 -12
- package/dist/bin/exe-gateway.js +348 -53
- package/dist/bin/exe-heartbeat.js +471 -113
- package/dist/bin/exe-kill.js +36 -12
- package/dist/bin/exe-launch-agent.js +117 -18
- package/dist/bin/exe-new-employee.js +9 -1
- package/dist/bin/exe-pending-messages.js +452 -95
- package/dist/bin/exe-pending-notifications.js +452 -95
- package/dist/bin/exe-pending-reviews.js +452 -95
- package/dist/bin/exe-rename.js +36 -12
- package/dist/bin/exe-review.js +36 -12
- package/dist/bin/exe-search.js +37 -12
- package/dist/bin/exe-session-cleanup.js +348 -53
- package/dist/bin/exe-settings.js +12 -0
- package/dist/bin/exe-start-codex.js +46 -13
- package/dist/bin/exe-start-opencode.js +46 -13
- package/dist/bin/exe-status.js +460 -114
- package/dist/bin/exe-support.js +12 -0
- package/dist/bin/exe-team.js +36 -12
- package/dist/bin/git-sweep.js +348 -53
- package/dist/bin/graph-backfill.js +36 -12
- package/dist/bin/graph-export.js +36 -12
- package/dist/bin/install.js +9 -1
- package/dist/bin/intercom-check.js +255 -53
- package/dist/bin/scan-tasks.js +348 -53
- package/dist/bin/setup.js +74 -12
- package/dist/bin/shard-migrate.js +36 -12
- package/dist/gateway/index.js +348 -53
- package/dist/hooks/bug-report-worker.js +348 -53
- package/dist/hooks/codex-stop-task-finalizer.js +308 -37
- package/dist/hooks/commit-complete.js +348 -53
- package/dist/hooks/error-recall.js +37 -12
- package/dist/hooks/ingest.js +363 -54
- package/dist/hooks/instructions-loaded.js +36 -12
- package/dist/hooks/notification.js +36 -12
- package/dist/hooks/post-compact.js +426 -72
- package/dist/hooks/post-tool-combined.js +501 -146
- package/dist/hooks/pre-compact.js +348 -53
- package/dist/hooks/pre-tool-use.js +92 -13
- package/dist/hooks/prompt-submit.js +348 -53
- package/dist/hooks/session-end.js +158 -53
- package/dist/hooks/session-start.js +66 -13
- package/dist/hooks/stop.js +420 -72
- package/dist/hooks/subagent-stop.js +419 -72
- package/dist/hooks/summary-worker.js +442 -121
- package/dist/index.js +375 -53
- package/dist/lib/agent-config.js +8 -0
- package/dist/lib/cloud-sync.js +35 -12
- package/dist/lib/config.js +13 -0
- package/dist/lib/consolidation.js +9 -1
- package/dist/lib/embedder.js +13 -0
- package/dist/lib/employees.js +8 -0
- package/dist/lib/exe-daemon.js +524 -60
- package/dist/lib/hybrid-search.js +37 -12
- package/dist/lib/keychain.js +25 -13
- package/dist/lib/messaging.js +395 -74
- package/dist/lib/schedules.js +36 -12
- package/dist/lib/skill-learning.js +21 -0
- package/dist/lib/store.js +36 -12
- package/dist/lib/tasks.js +324 -41
- package/dist/lib/tmux-routing.js +324 -41
- package/dist/mcp/server.js +374 -54
- package/dist/mcp/tools/create-task.js +324 -41
- package/dist/mcp/tools/list-tasks.js +406 -57
- package/dist/mcp/tools/send-message.js +395 -74
- package/dist/mcp/tools/update-task.js +324 -41
- package/dist/runtime/index.js +375 -53
- package/dist/tui/App.js +377 -55
- package/package.json +1 -1
|
@@ -143,6 +143,17 @@ function normalizeOrchestration(raw) {
|
|
|
143
143
|
const userOrg = raw.orchestration ?? {};
|
|
144
144
|
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
145
145
|
}
|
|
146
|
+
function normalizeCloudEndpoint(raw) {
|
|
147
|
+
const cloud = raw.cloud;
|
|
148
|
+
if (!cloud?.endpoint) return;
|
|
149
|
+
const ep = String(cloud.endpoint);
|
|
150
|
+
if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
|
|
151
|
+
cloud.endpoint = "https://cloud.askexe.com";
|
|
152
|
+
process.stderr.write(
|
|
153
|
+
"[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
146
157
|
async function loadConfig() {
|
|
147
158
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
148
159
|
await ensurePrivateDir(dir);
|
|
@@ -168,6 +179,7 @@ async function loadConfig() {
|
|
|
168
179
|
normalizeSessionLifecycle(migratedCfg);
|
|
169
180
|
normalizeAutoUpdate(migratedCfg);
|
|
170
181
|
normalizeOrchestration(migratedCfg);
|
|
182
|
+
normalizeCloudEndpoint(migratedCfg);
|
|
171
183
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
172
184
|
if (config.dbPath.startsWith("~")) {
|
|
173
185
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -196,6 +208,7 @@ function loadConfigSync() {
|
|
|
196
208
|
normalizeSessionLifecycle(migratedCfg);
|
|
197
209
|
normalizeAutoUpdate(migratedCfg);
|
|
198
210
|
normalizeOrchestration(migratedCfg);
|
|
211
|
+
normalizeCloudEndpoint(migratedCfg);
|
|
199
212
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
200
213
|
if (config.dbPath.startsWith("~")) {
|
|
201
214
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -3317,7 +3330,7 @@ var init_database = __esm({
|
|
|
3317
3330
|
});
|
|
3318
3331
|
|
|
3319
3332
|
// src/lib/keychain.ts
|
|
3320
|
-
import { readFile as readFile3, writeFile as writeFile3, unlink, mkdir as mkdir3, chmod as chmod2 } from "fs/promises";
|
|
3333
|
+
import { readFile as readFile3, writeFile as writeFile3, unlink, mkdir as mkdir3, chmod as chmod2, rename, copyFile } from "fs/promises";
|
|
3321
3334
|
import { existsSync as existsSync7, statSync as statSync3 } from "fs";
|
|
3322
3335
|
import { execSync as execSync3 } from "child_process";
|
|
3323
3336
|
import path6 from "path";
|
|
@@ -3352,12 +3365,14 @@ function linuxSecretAvailable() {
|
|
|
3352
3365
|
function isRootOnlyTrustedServerKeyFile(keyPath) {
|
|
3353
3366
|
if (process.platform !== "linux") return false;
|
|
3354
3367
|
try {
|
|
3355
|
-
const uid = typeof os5.userInfo().uid === "number" ? os5.userInfo().uid : -1;
|
|
3356
3368
|
const st = statSync3(keyPath);
|
|
3357
3369
|
if (!st.isFile() || (st.mode & 63) !== 0) return false;
|
|
3370
|
+
const uid = typeof os5.userInfo().uid === "number" ? os5.userInfo().uid : -1;
|
|
3358
3371
|
if (uid === 0) return true;
|
|
3359
3372
|
const exeOsDir = process.env.EXE_OS_DIR;
|
|
3360
|
-
|
|
3373
|
+
if (exeOsDir && path6.resolve(keyPath).startsWith(path6.resolve(exeOsDir) + path6.sep)) return true;
|
|
3374
|
+
if (!linuxSecretAvailable()) return true;
|
|
3375
|
+
return false;
|
|
3361
3376
|
} catch {
|
|
3362
3377
|
return false;
|
|
3363
3378
|
}
|
|
@@ -3507,15 +3522,25 @@ async function writeMachineBoundFileFallback(b64) {
|
|
|
3507
3522
|
await mkdir3(dir, { recursive: true });
|
|
3508
3523
|
const keyPath = getKeyPath();
|
|
3509
3524
|
const machineKey = deriveMachineKey();
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3525
|
+
const content = machineKey ? encryptWithMachineKey(b64, machineKey) + "\n" : b64 + "\n";
|
|
3526
|
+
const result = machineKey ? "encrypted" : "plaintext";
|
|
3527
|
+
const tmpPath = keyPath + ".tmp";
|
|
3528
|
+
try {
|
|
3529
|
+
if (existsSync7(keyPath)) {
|
|
3530
|
+
await copyFile(keyPath, keyPath + ".bak").catch(() => {
|
|
3531
|
+
});
|
|
3532
|
+
}
|
|
3533
|
+
await writeFile3(tmpPath, content, "utf-8");
|
|
3534
|
+
await chmod2(tmpPath, 384);
|
|
3535
|
+
await rename(tmpPath, keyPath);
|
|
3536
|
+
} catch (err) {
|
|
3537
|
+
try {
|
|
3538
|
+
await unlink(tmpPath);
|
|
3539
|
+
} catch {
|
|
3540
|
+
}
|
|
3541
|
+
throw err;
|
|
3515
3542
|
}
|
|
3516
|
-
|
|
3517
|
-
await chmod2(keyPath, 384);
|
|
3518
|
-
return "plaintext";
|
|
3543
|
+
return result;
|
|
3519
3544
|
}
|
|
3520
3545
|
async function getMasterKey() {
|
|
3521
3546
|
let nativeValue = macKeychainGet() ?? linuxSecretGet();
|
|
@@ -3582,7 +3607,7 @@ async function getMasterKey() {
|
|
|
3582
3607
|
b64Value = content;
|
|
3583
3608
|
}
|
|
3584
3609
|
const key = Buffer.from(b64Value, "base64");
|
|
3585
|
-
if (
|
|
3610
|
+
if (isRootOnlyTrustedServerKeyFile(keyPath)) {
|
|
3586
3611
|
return key;
|
|
3587
3612
|
}
|
|
3588
3613
|
const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
|