@askexenow/exe-os 0.8.85 → 0.8.87
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/cleanup-stale-review-tasks.js +57 -19
- package/dist/bin/cli.js +510 -340
- package/dist/bin/exe-agent-config.js +242 -0
- package/dist/bin/exe-agent.js +3 -3
- package/dist/bin/exe-boot.js +344 -346
- package/dist/bin/exe-dispatch.js +375 -250
- package/dist/bin/exe-forget.js +5 -1
- package/dist/bin/exe-gateway.js +260 -135
- package/dist/bin/exe-healthcheck.js +133 -1
- package/dist/bin/exe-heartbeat.js +72 -31
- package/dist/bin/exe-link.js +25 -2
- package/dist/bin/exe-new-employee.js +22 -0
- package/dist/bin/exe-pending-messages.js +55 -17
- package/dist/bin/exe-pending-reviews.js +57 -19
- package/dist/bin/exe-search.js +6 -2
- package/dist/bin/exe-session-cleanup.js +260 -135
- package/dist/bin/exe-start-codex.js +2598 -0
- package/dist/bin/exe-start.sh +15 -3
- package/dist/bin/exe-status.js +57 -19
- package/dist/bin/git-sweep.js +391 -266
- package/dist/bin/install.js +22 -0
- package/dist/bin/scan-tasks.js +394 -269
- package/dist/bin/setup.js +50 -5
- package/dist/gateway/index.js +257 -132
- package/dist/hooks/bug-report-worker.js +242 -117
- package/dist/hooks/commit-complete.js +389 -264
- package/dist/hooks/error-recall.js +6 -2
- package/dist/hooks/ingest-worker.js +314 -193
- package/dist/hooks/post-compact.js +84 -46
- package/dist/hooks/pre-compact.js +272 -147
- package/dist/hooks/pre-tool-use.js +104 -66
- package/dist/hooks/prompt-submit.js +126 -66
- package/dist/hooks/session-end.js +277 -152
- package/dist/hooks/session-start.js +70 -28
- package/dist/hooks/stop.js +90 -52
- package/dist/hooks/subagent-stop.js +84 -46
- package/dist/hooks/summary-worker.js +175 -114
- package/dist/index.js +296 -171
- package/dist/lib/agent-config.js +167 -0
- package/dist/lib/cloud-sync.js +25 -2
- package/dist/lib/exe-daemon.js +338 -213
- package/dist/lib/hybrid-search.js +7 -2
- package/dist/lib/messaging.js +95 -39
- package/dist/lib/runtime-table.js +16 -0
- package/dist/lib/session-wrappers.js +22 -0
- package/dist/lib/tasks.js +242 -117
- package/dist/lib/tmux-routing.js +314 -189
- package/dist/mcp/server.js +573 -274
- package/dist/mcp/tools/create-task.js +260 -135
- package/dist/mcp/tools/list-tasks.js +68 -30
- package/dist/mcp/tools/send-message.js +100 -44
- package/dist/mcp/tools/update-task.js +123 -67
- package/dist/runtime/index.js +276 -151
- package/dist/tui/App.js +479 -354
- package/package.json +1 -1
- package/src/commands/exe/agent-config.md +27 -0
- package/src/commands/exe/cc-doctor.md +10 -0
package/dist/bin/setup.js
CHANGED
|
@@ -3454,10 +3454,18 @@ function buildRosterBlob(paths) {
|
|
|
3454
3454
|
} catch {
|
|
3455
3455
|
}
|
|
3456
3456
|
}
|
|
3457
|
+
let agentConfig;
|
|
3458
|
+
const agentConfigPath = path8.join(EXE_AI_DIR, "agent-config.json");
|
|
3459
|
+
if (existsSync8(agentConfigPath)) {
|
|
3460
|
+
try {
|
|
3461
|
+
agentConfig = JSON.parse(readFileSync6(agentConfigPath, "utf-8"));
|
|
3462
|
+
} catch {
|
|
3463
|
+
}
|
|
3464
|
+
}
|
|
3457
3465
|
const deletedNames = consumeRosterDeletions();
|
|
3458
|
-
const content = JSON.stringify({ roster, identities, config, deletedNames });
|
|
3466
|
+
const content = JSON.stringify({ roster, identities, config, agentConfig, deletedNames });
|
|
3459
3467
|
const hash = crypto2.createHash("sha256").update(content).digest("hex").slice(0, 16);
|
|
3460
|
-
return { roster, identities, config, deletedNames, version: hash };
|
|
3468
|
+
return { roster, identities, config, agentConfig, deletedNames, version: hash };
|
|
3461
3469
|
}
|
|
3462
3470
|
async function cloudPushRoster(config) {
|
|
3463
3471
|
assertSecureEndpoint(config.endpoint);
|
|
@@ -3595,6 +3603,21 @@ async function mergeRosterFromRemote(remote, paths) {
|
|
|
3595
3603
|
} catch {
|
|
3596
3604
|
}
|
|
3597
3605
|
}
|
|
3606
|
+
if (remote.agentConfig && Object.keys(remote.agentConfig).length > 0) {
|
|
3607
|
+
try {
|
|
3608
|
+
const agentConfigPath = path8.join(EXE_AI_DIR, "agent-config.json");
|
|
3609
|
+
let local = {};
|
|
3610
|
+
if (existsSync8(agentConfigPath)) {
|
|
3611
|
+
try {
|
|
3612
|
+
local = JSON.parse(readFileSync6(agentConfigPath, "utf-8"));
|
|
3613
|
+
} catch {
|
|
3614
|
+
}
|
|
3615
|
+
}
|
|
3616
|
+
const merged = { ...remote.agentConfig, ...local };
|
|
3617
|
+
writeFileSync4(agentConfigPath, JSON.stringify(merged, null, 2) + "\n", "utf-8");
|
|
3618
|
+
} catch {
|
|
3619
|
+
}
|
|
3620
|
+
}
|
|
3598
3621
|
return { added, identitiesUpdated };
|
|
3599
3622
|
});
|
|
3600
3623
|
}
|
|
@@ -5520,6 +5543,28 @@ exec "${exeStartDst}" "$0" "$@"
|
|
|
5520
5543
|
created++;
|
|
5521
5544
|
}
|
|
5522
5545
|
}
|
|
5546
|
+
const codexLauncherCandidates = [
|
|
5547
|
+
path10.join(packageRoot, "dist", "bin", "exe-start-codex.js"),
|
|
5548
|
+
path10.join(packageRoot, "src", "bin", "exe-start-codex.ts")
|
|
5549
|
+
];
|
|
5550
|
+
let codexLauncher = null;
|
|
5551
|
+
for (const c of codexLauncherCandidates) {
|
|
5552
|
+
if (existsSync10(c)) {
|
|
5553
|
+
codexLauncher = c;
|
|
5554
|
+
break;
|
|
5555
|
+
}
|
|
5556
|
+
}
|
|
5557
|
+
if (codexLauncher) {
|
|
5558
|
+
for (const emp of employees) {
|
|
5559
|
+
const wrapperPath = path10.join(binDir, `${emp.name}-codex`);
|
|
5560
|
+
const content = `#!/bin/bash
|
|
5561
|
+
exec node "${codexLauncher}" --agent ${emp.name} "$@"
|
|
5562
|
+
`;
|
|
5563
|
+
writeFileSync6(wrapperPath, content);
|
|
5564
|
+
chmodSync(wrapperPath, 493);
|
|
5565
|
+
created++;
|
|
5566
|
+
}
|
|
5567
|
+
}
|
|
5523
5568
|
const pathConfigured = ensurePath(home, binDir);
|
|
5524
5569
|
return { created, pathConfigured };
|
|
5525
5570
|
}
|
|
@@ -5824,7 +5869,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
5824
5869
|
log("backed up on Exe Cloud. Free for all plans. We can't read your data \u2014");
|
|
5825
5870
|
log("only your encryption key can decrypt it.");
|
|
5826
5871
|
log("");
|
|
5827
|
-
const existingKey = await ask(rl, "
|
|
5872
|
+
const existingKey = await ask(rl, "Paste your Exe OS license key, or press Enter to start as a free user: ");
|
|
5828
5873
|
if (existingKey && existingKey.startsWith("exe_sk_")) {
|
|
5829
5874
|
const cloudEndpoint = "https://askexe.com/cloud";
|
|
5830
5875
|
try {
|
|
@@ -6100,7 +6145,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
6100
6145
|
}
|
|
6101
6146
|
let isLicensed = license.valid && license.plan !== "free";
|
|
6102
6147
|
if (!isLicensed) {
|
|
6103
|
-
let licenseInput = await ask(rl, "
|
|
6148
|
+
let licenseInput = await ask(rl, "Hire other employees with your Exe OS license key, or press Enter to continue as a free user (COO only): ");
|
|
6104
6149
|
if (licenseInput && !licenseInput.startsWith("exe_sk_")) {
|
|
6105
6150
|
log("That doesn't look like a license key (should start with exe_sk_).");
|
|
6106
6151
|
licenseInput = await ask(rl, "Try again (or press Enter to skip): ");
|
|
@@ -6270,7 +6315,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
6270
6315
|
};
|
|
6271
6316
|
log("");
|
|
6272
6317
|
log(` ${"\u2554" + "\u2550".repeat(W) + "\u2557"}`);
|
|
6273
|
-
log(` ${"\u2551" + center("
|
|
6318
|
+
log(` ${"\u2551" + center("E X E O S") + "\u2551"}`);
|
|
6274
6319
|
if (version) log(` ${"\u2551" + center(`v${version}`) + "\u2551"}`);
|
|
6275
6320
|
log(` ${"\u255A" + "\u2550".repeat(W) + "\u255D"}`);
|
|
6276
6321
|
log("");
|