@askexenow/exe-os 0.9.85 → 0.9.86
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 +32 -14
- package/dist/bin/agentic-reflection-backfill.js +32 -14
- package/dist/bin/agentic-semantic-label.js +32 -14
- package/dist/bin/backfill-conversations.js +32 -14
- package/dist/bin/backfill-responses.js +32 -14
- package/dist/bin/backfill-vectors.js +32 -14
- package/dist/bin/bulk-sync-postgres.js +32 -14
- package/dist/bin/cleanup-stale-review-tasks.js +35 -17
- package/dist/bin/cli.js +152 -77
- package/dist/bin/exe-assign.js +32 -14
- package/dist/bin/exe-boot.js +57 -39
- package/dist/bin/exe-cloud.js +22 -4
- package/dist/bin/exe-dispatch.js +43 -25
- package/dist/bin/exe-doctor.js +22 -4
- package/dist/bin/exe-export-behaviors.js +32 -14
- package/dist/bin/exe-forget.js +32 -14
- package/dist/bin/exe-gateway.js +47 -29
- package/dist/bin/exe-heartbeat.js +37 -19
- package/dist/bin/exe-kill.js +36 -18
- package/dist/bin/exe-launch-agent.js +40 -22
- package/dist/bin/exe-pending-messages.js +35 -17
- package/dist/bin/exe-pending-notifications.js +35 -17
- package/dist/bin/exe-pending-reviews.js +37 -19
- package/dist/bin/exe-rename.js +34 -16
- package/dist/bin/exe-review.js +32 -14
- package/dist/bin/exe-search.js +40 -22
- package/dist/bin/exe-session-cleanup.js +67 -44
- package/dist/bin/exe-start-codex.js +39 -21
- package/dist/bin/exe-start-opencode.js +37 -19
- package/dist/bin/exe-status.js +44 -26
- package/dist/bin/exe-team.js +32 -14
- package/dist/bin/git-sweep.js +45 -27
- package/dist/bin/graph-backfill.js +32 -14
- package/dist/bin/graph-export.js +32 -14
- package/dist/bin/intercom-check.js +49 -31
- package/dist/bin/scan-tasks.js +45 -27
- package/dist/bin/setup.js +29 -11
- package/dist/bin/shard-migrate.js +32 -14
- package/dist/bin/stack-update.js +59 -2
- package/dist/bin/update.js +1 -1
- package/dist/gateway/index.js +47 -29
- package/dist/hooks/bug-report-worker.js +47 -29
- package/dist/hooks/codex-stop-task-finalizer.js +41 -23
- package/dist/hooks/commit-complete.js +46 -28
- package/dist/hooks/error-recall.js +44 -26
- package/dist/hooks/ingest-worker.js +4 -4
- package/dist/hooks/ingest.js +38 -20
- package/dist/hooks/instructions-loaded.js +32 -14
- package/dist/hooks/notification.js +32 -14
- package/dist/hooks/post-compact.js +32 -14
- package/dist/hooks/post-tool-combined.js +45 -27
- package/dist/hooks/pre-compact.js +43 -25
- package/dist/hooks/pre-tool-use.js +40 -22
- package/dist/hooks/prompt-submit.js +60 -42
- package/dist/hooks/session-end.js +48 -30
- package/dist/hooks/session-start.js +50 -32
- package/dist/hooks/stop.js +35 -17
- package/dist/hooks/subagent-stop.js +32 -14
- package/dist/hooks/summary-worker.js +37 -19
- package/dist/index.js +43 -25
- package/dist/lib/cloud-sync.js +32 -14
- package/dist/lib/database.js +22 -4
- package/dist/lib/db-daemon-client.js +16 -4
- package/dist/lib/db.js +22 -4
- package/dist/lib/device-registry.js +22 -4
- package/dist/lib/embedder.js +16 -4
- package/dist/lib/exe-daemon-client.js +16 -4
- package/dist/lib/exe-daemon.js +165 -66
- package/dist/lib/hybrid-search.js +40 -22
- package/dist/lib/schedules.js +35 -17
- package/dist/lib/skill-learning.js +16 -4
- package/dist/lib/store.js +32 -14
- package/dist/lib/tasks.js +16 -4
- package/dist/lib/tmux-routing.js +18 -6
- package/dist/mcp/server.js +142 -60
- package/dist/mcp/tools/create-task.js +18 -6
- package/dist/mcp/tools/update-task.js +18 -6
- package/dist/runtime/index.js +43 -25
- package/dist/tui/App.js +73 -55
- package/package.json +1 -1
package/dist/tui/App.js
CHANGED
|
@@ -1868,7 +1868,7 @@ var init_daemon_auth = __esm({
|
|
|
1868
1868
|
// src/lib/exe-daemon-client.ts
|
|
1869
1869
|
import net from "net";
|
|
1870
1870
|
import os6 from "os";
|
|
1871
|
-
import { spawn } from "child_process";
|
|
1871
|
+
import { spawn, execSync as execSync5 } from "child_process";
|
|
1872
1872
|
import { randomUUID } from "crypto";
|
|
1873
1873
|
import { existsSync as existsSync9, unlinkSync as unlinkSync2, readFileSync as readFileSync8, openSync, closeSync, statSync } from "fs";
|
|
1874
1874
|
import path8 from "path";
|
|
@@ -1898,6 +1898,14 @@ function handleData(chunk) {
|
|
|
1898
1898
|
}
|
|
1899
1899
|
}
|
|
1900
1900
|
}
|
|
1901
|
+
function isZombie(pid) {
|
|
1902
|
+
try {
|
|
1903
|
+
const state = execSync5(`ps -p ${pid} -o state=`, { encoding: "utf8", timeout: 2e3 }).trim();
|
|
1904
|
+
return state.startsWith("Z");
|
|
1905
|
+
} catch {
|
|
1906
|
+
return false;
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1901
1909
|
function cleanupStaleFiles() {
|
|
1902
1910
|
if (existsSync9(PID_PATH)) {
|
|
1903
1911
|
try {
|
|
@@ -1905,7 +1913,11 @@ function cleanupStaleFiles() {
|
|
|
1905
1913
|
if (pid > 0) {
|
|
1906
1914
|
try {
|
|
1907
1915
|
process.kill(pid, 0);
|
|
1908
|
-
|
|
1916
|
+
if (!isZombie(pid)) {
|
|
1917
|
+
return;
|
|
1918
|
+
}
|
|
1919
|
+
process.stderr.write(`[exed-client] PID ${pid} is a zombie \u2014 cleaning up stale files
|
|
1920
|
+
`);
|
|
1909
1921
|
} catch {
|
|
1910
1922
|
}
|
|
1911
1923
|
}
|
|
@@ -1933,8 +1945,8 @@ function findPackageRoot() {
|
|
|
1933
1945
|
function getAvailableMemoryGB() {
|
|
1934
1946
|
if (process.platform === "darwin") {
|
|
1935
1947
|
try {
|
|
1936
|
-
const { execSync:
|
|
1937
|
-
const vmstat =
|
|
1948
|
+
const { execSync: execSync12 } = __require("child_process");
|
|
1949
|
+
const vmstat = execSync12("vm_stat", { encoding: "utf8" });
|
|
1938
1950
|
const pageSize = 16384;
|
|
1939
1951
|
const pageSizeMatch = vmstat.match(/page size of (\d+) bytes/);
|
|
1940
1952
|
const actualPageSize = pageSizeMatch ? parseInt(pageSizeMatch[1], 10) : pageSize;
|
|
@@ -3869,6 +3881,12 @@ async function disposeDatabase() {
|
|
|
3869
3881
|
clearInterval(_walCheckpointTimer);
|
|
3870
3882
|
_walCheckpointTimer = null;
|
|
3871
3883
|
}
|
|
3884
|
+
if (_client) {
|
|
3885
|
+
try {
|
|
3886
|
+
await _client.execute("PRAGMA wal_checkpoint(PASSIVE)");
|
|
3887
|
+
} catch {
|
|
3888
|
+
}
|
|
3889
|
+
}
|
|
3872
3890
|
if (_daemonClient) {
|
|
3873
3891
|
_daemonClient.close();
|
|
3874
3892
|
_daemonClient = null;
|
|
@@ -4658,7 +4676,7 @@ var init_state_bus = __esm({
|
|
|
4658
4676
|
});
|
|
4659
4677
|
|
|
4660
4678
|
// src/lib/project-name.ts
|
|
4661
|
-
import { execSync as
|
|
4679
|
+
import { execSync as execSync6 } from "child_process";
|
|
4662
4680
|
import path13 from "path";
|
|
4663
4681
|
function getProjectName(cwd2) {
|
|
4664
4682
|
const dir = cwd2 ?? process.cwd();
|
|
@@ -4666,7 +4684,7 @@ function getProjectName(cwd2) {
|
|
|
4666
4684
|
try {
|
|
4667
4685
|
let repoRoot;
|
|
4668
4686
|
try {
|
|
4669
|
-
const gitCommonDir =
|
|
4687
|
+
const gitCommonDir = execSync6("git rev-parse --path-format=absolute --git-common-dir", {
|
|
4670
4688
|
cwd: dir,
|
|
4671
4689
|
encoding: "utf8",
|
|
4672
4690
|
timeout: 2e3,
|
|
@@ -4674,7 +4692,7 @@ function getProjectName(cwd2) {
|
|
|
4674
4692
|
}).trim();
|
|
4675
4693
|
repoRoot = path13.dirname(gitCommonDir);
|
|
4676
4694
|
} catch {
|
|
4677
|
-
repoRoot =
|
|
4695
|
+
repoRoot = execSync6("git rev-parse --show-toplevel", {
|
|
4678
4696
|
cwd: dir,
|
|
4679
4697
|
encoding: "utf8",
|
|
4680
4698
|
timeout: 2e3,
|
|
@@ -4781,7 +4799,7 @@ __export(tasks_crud_exports, {
|
|
|
4781
4799
|
import crypto4 from "crypto";
|
|
4782
4800
|
import path14 from "path";
|
|
4783
4801
|
import os10 from "os";
|
|
4784
|
-
import { execSync as
|
|
4802
|
+
import { execSync as execSync7 } from "child_process";
|
|
4785
4803
|
import { mkdir as mkdir3, writeFile as writeFile3, appendFile } from "fs/promises";
|
|
4786
4804
|
import { existsSync as existsSync14, readFileSync as readFileSync12 } from "fs";
|
|
4787
4805
|
async function writeCheckpoint(input) {
|
|
@@ -5126,14 +5144,14 @@ function isTmuxSessionAlive(identifier) {
|
|
|
5126
5144
|
if (!identifier || identifier === "unknown") return true;
|
|
5127
5145
|
try {
|
|
5128
5146
|
if (identifier.startsWith("%")) {
|
|
5129
|
-
const output =
|
|
5147
|
+
const output = execSync7("tmux list-panes -a -F '#{pane_id}'", {
|
|
5130
5148
|
timeout: 2e3,
|
|
5131
5149
|
encoding: "utf8",
|
|
5132
5150
|
stdio: ["pipe", "pipe", "pipe"]
|
|
5133
5151
|
});
|
|
5134
5152
|
return output.split("\n").some((l) => l.trim() === identifier);
|
|
5135
5153
|
} else {
|
|
5136
|
-
|
|
5154
|
+
execSync7(`tmux has-session -t ${JSON.stringify(identifier)}`, {
|
|
5137
5155
|
timeout: 2e3,
|
|
5138
5156
|
stdio: ["pipe", "pipe", "pipe"]
|
|
5139
5157
|
});
|
|
@@ -5142,7 +5160,7 @@ function isTmuxSessionAlive(identifier) {
|
|
|
5142
5160
|
} catch {
|
|
5143
5161
|
if (identifier.startsWith("%")) return true;
|
|
5144
5162
|
try {
|
|
5145
|
-
|
|
5163
|
+
execSync7("tmux list-sessions", {
|
|
5146
5164
|
timeout: 2e3,
|
|
5147
5165
|
stdio: ["pipe", "pipe", "pipe"]
|
|
5148
5166
|
});
|
|
@@ -5157,12 +5175,12 @@ function checkStaleCompletion(taskContext, taskCreatedAt) {
|
|
|
5157
5175
|
if (!DELEGATION_KEYWORDS.test(taskContext)) return null;
|
|
5158
5176
|
try {
|
|
5159
5177
|
const since = new Date(taskCreatedAt).toISOString();
|
|
5160
|
-
const branch =
|
|
5178
|
+
const branch = execSync7(
|
|
5161
5179
|
"git rev-parse --abbrev-ref HEAD 2>/dev/null",
|
|
5162
5180
|
{ encoding: "utf8", timeout: 3e3 }
|
|
5163
5181
|
).trim();
|
|
5164
5182
|
const branchArg = branch && branch !== "HEAD" ? branch : "";
|
|
5165
|
-
const commitCount =
|
|
5183
|
+
const commitCount = execSync7(
|
|
5166
5184
|
`git log --oneline --since="${since}" ${branchArg} 2>/dev/null | wc -l`,
|
|
5167
5185
|
{ encoding: "utf8", timeout: 5e3 }
|
|
5168
5186
|
).trim();
|
|
@@ -6761,7 +6779,7 @@ __export(tmux_routing_exports, {
|
|
|
6761
6779
|
spawnEmployee: () => spawnEmployee,
|
|
6762
6780
|
verifyPaneAtCapacity: () => verifyPaneAtCapacity
|
|
6763
6781
|
});
|
|
6764
|
-
import { execFileSync as execFileSync3, execSync as
|
|
6782
|
+
import { execFileSync as execFileSync3, execSync as execSync8 } from "child_process";
|
|
6765
6783
|
import { readFileSync as readFileSync13, writeFileSync as writeFileSync8, mkdirSync as mkdirSync7, existsSync as existsSync16, appendFileSync, readdirSync as readdirSync3 } from "fs";
|
|
6766
6784
|
import path18 from "path";
|
|
6767
6785
|
import os11 from "os";
|
|
@@ -7482,7 +7500,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
7482
7500
|
let booted = false;
|
|
7483
7501
|
for (let i = 0; i < 30; i++) {
|
|
7484
7502
|
try {
|
|
7485
|
-
|
|
7503
|
+
execSync8("sleep 0.5");
|
|
7486
7504
|
} catch {
|
|
7487
7505
|
}
|
|
7488
7506
|
try {
|
|
@@ -7679,13 +7697,13 @@ __export(tmux_status_exports, {
|
|
|
7679
7697
|
parseActivity: () => parseActivity,
|
|
7680
7698
|
parseContextPercentage: () => parseContextPercentage
|
|
7681
7699
|
});
|
|
7682
|
-
import { execSync as
|
|
7700
|
+
import { execSync as execSync9 } from "child_process";
|
|
7683
7701
|
function inTmux() {
|
|
7684
7702
|
if (process.env.TMUX || process.env.TMUX_PANE) return true;
|
|
7685
7703
|
const term = process.env.TERM ?? "";
|
|
7686
7704
|
if (term.startsWith("tmux") || term.startsWith("screen")) return true;
|
|
7687
7705
|
try {
|
|
7688
|
-
|
|
7706
|
+
execSync9("tmux display-message -p '#{session_name}' 2>/dev/null", {
|
|
7689
7707
|
encoding: "utf8",
|
|
7690
7708
|
timeout: 2e3
|
|
7691
7709
|
});
|
|
@@ -7695,12 +7713,12 @@ function inTmux() {
|
|
|
7695
7713
|
try {
|
|
7696
7714
|
let pid = process.ppid;
|
|
7697
7715
|
for (let depth = 0; depth < 8 && pid > 1; depth++) {
|
|
7698
|
-
const comm =
|
|
7716
|
+
const comm = execSync9(`ps -p ${pid} -o comm= 2>/dev/null`, {
|
|
7699
7717
|
encoding: "utf8",
|
|
7700
7718
|
timeout: 1e3
|
|
7701
7719
|
}).trim();
|
|
7702
7720
|
if (/tmux/.test(comm)) return true;
|
|
7703
|
-
const ppid =
|
|
7721
|
+
const ppid = execSync9(`ps -p ${pid} -o ppid= 2>/dev/null`, {
|
|
7704
7722
|
encoding: "utf8",
|
|
7705
7723
|
timeout: 1e3
|
|
7706
7724
|
}).trim();
|
|
@@ -7713,7 +7731,7 @@ function inTmux() {
|
|
|
7713
7731
|
}
|
|
7714
7732
|
function listTmuxSessions() {
|
|
7715
7733
|
try {
|
|
7716
|
-
const out =
|
|
7734
|
+
const out = execSync9("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
|
|
7717
7735
|
encoding: "utf8",
|
|
7718
7736
|
timeout: 3e3
|
|
7719
7737
|
});
|
|
@@ -7724,7 +7742,7 @@ function listTmuxSessions() {
|
|
|
7724
7742
|
}
|
|
7725
7743
|
function capturePaneLines(windowName, lines = 10) {
|
|
7726
7744
|
try {
|
|
7727
|
-
const out =
|
|
7745
|
+
const out = execSync9(
|
|
7728
7746
|
`tmux capture-pane -t ${JSON.stringify(windowName)} -p 2>/dev/null | tail -${lines}`,
|
|
7729
7747
|
{ encoding: "utf8", timeout: 3e3 }
|
|
7730
7748
|
);
|
|
@@ -7735,7 +7753,7 @@ function capturePaneLines(windowName, lines = 10) {
|
|
|
7735
7753
|
}
|
|
7736
7754
|
function getPaneCwd(windowName) {
|
|
7737
7755
|
try {
|
|
7738
|
-
const out =
|
|
7756
|
+
const out = execSync9(
|
|
7739
7757
|
`tmux display-message -t ${JSON.stringify(windowName)} -p '#{pane_current_path}' 2>/dev/null`,
|
|
7740
7758
|
{ encoding: "utf8", timeout: 3e3 }
|
|
7741
7759
|
);
|
|
@@ -7746,7 +7764,7 @@ function getPaneCwd(windowName) {
|
|
|
7746
7764
|
}
|
|
7747
7765
|
function projectFromPath(dir) {
|
|
7748
7766
|
try {
|
|
7749
|
-
const root =
|
|
7767
|
+
const root = execSync9("git -C " + JSON.stringify(dir) + " rev-parse --show-toplevel 2>/dev/null", {
|
|
7750
7768
|
encoding: "utf8",
|
|
7751
7769
|
timeout: 3e3
|
|
7752
7770
|
}).trim();
|
|
@@ -7815,7 +7833,7 @@ function getEmployeeStatuses(employeeNames) {
|
|
|
7815
7833
|
}
|
|
7816
7834
|
let paneAlive = true;
|
|
7817
7835
|
try {
|
|
7818
|
-
const paneStatus =
|
|
7836
|
+
const paneStatus = execSync9(
|
|
7819
7837
|
`tmux list-panes -t ${JSON.stringify(sessionName)} -F '#{pane_dead}' 2>/dev/null`,
|
|
7820
7838
|
{ encoding: "utf8", timeout: 3e3 }
|
|
7821
7839
|
).trim();
|
|
@@ -10793,7 +10811,7 @@ __export(keychain_exports, {
|
|
|
10793
10811
|
});
|
|
10794
10812
|
import { readFile as readFile4, writeFile as writeFile5, unlink, mkdir as mkdir4, chmod as chmod2 } from "fs/promises";
|
|
10795
10813
|
import { existsSync as existsSync17, statSync as statSync2 } from "fs";
|
|
10796
|
-
import { execSync as
|
|
10814
|
+
import { execSync as execSync10 } from "child_process";
|
|
10797
10815
|
import path27 from "path";
|
|
10798
10816
|
import os13 from "os";
|
|
10799
10817
|
function getKeyDir() {
|
|
@@ -10810,13 +10828,13 @@ function linuxSecretAvailable() {
|
|
|
10810
10828
|
if (process.platform !== "linux") return false;
|
|
10811
10829
|
if (linuxSecretAvailability !== null) return linuxSecretAvailability;
|
|
10812
10830
|
try {
|
|
10813
|
-
|
|
10831
|
+
execSync10("command -v secret-tool >/dev/null 2>&1", { timeout: 1e3 });
|
|
10814
10832
|
} catch {
|
|
10815
10833
|
linuxSecretAvailability = false;
|
|
10816
10834
|
return false;
|
|
10817
10835
|
}
|
|
10818
10836
|
try {
|
|
10819
|
-
|
|
10837
|
+
execSync10("secret-tool search --all exe-os probe >/dev/null 2>&1", { timeout: 1e3 });
|
|
10820
10838
|
linuxSecretAvailability = true;
|
|
10821
10839
|
} catch {
|
|
10822
10840
|
linuxSecretAvailability = false;
|
|
@@ -10840,7 +10858,7 @@ function macKeychainGet(service = SERVICE) {
|
|
|
10840
10858
|
if (!nativeKeychainAllowed()) return null;
|
|
10841
10859
|
if (process.platform !== "darwin") return null;
|
|
10842
10860
|
try {
|
|
10843
|
-
return
|
|
10861
|
+
return execSync10(
|
|
10844
10862
|
`security find-generic-password -s "${service}" -a "${ACCOUNT}" -w 2>/dev/null`,
|
|
10845
10863
|
{ encoding: "utf-8", timeout: 5e3 }
|
|
10846
10864
|
).trim();
|
|
@@ -10853,13 +10871,13 @@ function macKeychainSet(value, service = SERVICE) {
|
|
|
10853
10871
|
if (process.platform !== "darwin") return false;
|
|
10854
10872
|
try {
|
|
10855
10873
|
try {
|
|
10856
|
-
|
|
10874
|
+
execSync10(
|
|
10857
10875
|
`security delete-generic-password -s "${service}" -a "${ACCOUNT}" 2>/dev/null`,
|
|
10858
10876
|
{ timeout: 5e3 }
|
|
10859
10877
|
);
|
|
10860
10878
|
} catch {
|
|
10861
10879
|
}
|
|
10862
|
-
|
|
10880
|
+
execSync10(
|
|
10863
10881
|
`security add-generic-password -s "${service}" -a "${ACCOUNT}" -w "${value}"`,
|
|
10864
10882
|
{ timeout: 5e3 }
|
|
10865
10883
|
);
|
|
@@ -10872,7 +10890,7 @@ function macKeychainDelete(service = SERVICE) {
|
|
|
10872
10890
|
if (!nativeKeychainAllowed()) return false;
|
|
10873
10891
|
if (process.platform !== "darwin") return false;
|
|
10874
10892
|
try {
|
|
10875
|
-
|
|
10893
|
+
execSync10(
|
|
10876
10894
|
`security delete-generic-password -s "${service}" -a "${ACCOUNT}" 2>/dev/null`,
|
|
10877
10895
|
{ timeout: 5e3 }
|
|
10878
10896
|
);
|
|
@@ -10884,7 +10902,7 @@ function macKeychainDelete(service = SERVICE) {
|
|
|
10884
10902
|
function linuxSecretGet(service = SERVICE) {
|
|
10885
10903
|
if (!linuxSecretAvailable()) return null;
|
|
10886
10904
|
try {
|
|
10887
|
-
return
|
|
10905
|
+
return execSync10(
|
|
10888
10906
|
`secret-tool lookup service "${service}" account "${ACCOUNT}" 2>/dev/null`,
|
|
10889
10907
|
{ encoding: "utf-8", timeout: 5e3 }
|
|
10890
10908
|
).trim();
|
|
@@ -10895,7 +10913,7 @@ function linuxSecretGet(service = SERVICE) {
|
|
|
10895
10913
|
function linuxSecretSet(value, service = SERVICE) {
|
|
10896
10914
|
if (!linuxSecretAvailable()) return false;
|
|
10897
10915
|
try {
|
|
10898
|
-
|
|
10916
|
+
execSync10(
|
|
10899
10917
|
`echo -n "${value}" | secret-tool store --label="exe-os master key" service "${service}" account "${ACCOUNT}" 2>/dev/null`,
|
|
10900
10918
|
{ timeout: 5e3 }
|
|
10901
10919
|
);
|
|
@@ -10908,7 +10926,7 @@ function linuxSecretDelete(service = SERVICE) {
|
|
|
10908
10926
|
if (!nativeKeychainAllowed()) return false;
|
|
10909
10927
|
if (process.platform !== "linux") return false;
|
|
10910
10928
|
try {
|
|
10911
|
-
|
|
10929
|
+
execSync10(
|
|
10912
10930
|
`secret-tool clear service "${service}" account "${ACCOUNT}" 2>/dev/null`,
|
|
10913
10931
|
{ timeout: 5e3 }
|
|
10914
10932
|
);
|
|
@@ -19257,8 +19275,8 @@ function Footer() {
|
|
|
19257
19275
|
setSessions(allSessions.length);
|
|
19258
19276
|
if (!currentSession) {
|
|
19259
19277
|
try {
|
|
19260
|
-
const { execSync:
|
|
19261
|
-
const name =
|
|
19278
|
+
const { execSync: execSync12 } = await import("child_process");
|
|
19279
|
+
const name = execSync12("tmux display-message -p '#{session_name}' 2>/dev/null", {
|
|
19262
19280
|
encoding: "utf8",
|
|
19263
19281
|
timeout: 2e3
|
|
19264
19282
|
}).trim();
|
|
@@ -20693,8 +20711,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
|
|
|
20693
20711
|
}
|
|
20694
20712
|
const capture = () => {
|
|
20695
20713
|
try {
|
|
20696
|
-
const { execSync:
|
|
20697
|
-
const output =
|
|
20714
|
+
const { execSync: execSync12 } = __require("child_process");
|
|
20715
|
+
const output = execSync12(
|
|
20698
20716
|
`tmux capture-pane -t ${JSON.stringify(sessionName)} -p -e 2>/dev/null | tail -${CAPTURE_LINES}`,
|
|
20699
20717
|
{ encoding: "utf8", timeout: 3e3 }
|
|
20700
20718
|
);
|
|
@@ -20718,8 +20736,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
|
|
|
20718
20736
|
if (key.return) {
|
|
20719
20737
|
if (!demo && inputBuffer.trim()) {
|
|
20720
20738
|
try {
|
|
20721
|
-
const { execSync:
|
|
20722
|
-
|
|
20739
|
+
const { execSync: execSync12 } = __require("child_process");
|
|
20740
|
+
execSync12(
|
|
20723
20741
|
`tmux send-keys -t ${JSON.stringify(sessionName)} ${JSON.stringify(inputBuffer)} Enter`,
|
|
20724
20742
|
{ timeout: 2e3 }
|
|
20725
20743
|
);
|
|
@@ -20727,8 +20745,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
|
|
|
20727
20745
|
}
|
|
20728
20746
|
} else if (!demo) {
|
|
20729
20747
|
try {
|
|
20730
|
-
const { execSync:
|
|
20731
|
-
|
|
20748
|
+
const { execSync: execSync12 } = __require("child_process");
|
|
20749
|
+
execSync12(`tmux send-keys -t ${JSON.stringify(sessionName)} Enter`, { timeout: 2e3 });
|
|
20732
20750
|
} catch {
|
|
20733
20751
|
}
|
|
20734
20752
|
}
|
|
@@ -21031,12 +21049,12 @@ function SessionsView({
|
|
|
21031
21049
|
return;
|
|
21032
21050
|
}
|
|
21033
21051
|
} else {
|
|
21034
|
-
const { execSync:
|
|
21052
|
+
const { execSync: execSync12 } = await import("child_process");
|
|
21035
21053
|
const dir = projectDir || process.cwd();
|
|
21036
|
-
|
|
21037
|
-
|
|
21054
|
+
execSync12(`tmux new-session -d -s ${JSON.stringify(entry.sessionName)} -c ${JSON.stringify(dir)}`, { timeout: 5e3 });
|
|
21055
|
+
execSync12(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "claude --dangerously-skip-permissions" Enter`, { timeout: 3e3 });
|
|
21038
21056
|
await new Promise((r) => setTimeout(r, 3e3));
|
|
21039
|
-
|
|
21057
|
+
execSync12(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "/exe" Enter`, { timeout: 3e3 });
|
|
21040
21058
|
}
|
|
21041
21059
|
const updated = { ...entry, status: "active", activity: "Starting...", attached: false };
|
|
21042
21060
|
setViewingEmployee(updated);
|
|
@@ -21139,7 +21157,7 @@ function SessionsView({
|
|
|
21139
21157
|
const { listTmuxSessions: listTmuxSessions2, inTmux: inTmux2, capturePaneLines: capturePaneLines2, parseActivity: parseActivity2 } = await Promise.resolve().then(() => (init_tmux_status(), tmux_status_exports));
|
|
21140
21158
|
const { getCoordinatorName: getCoordinatorName2, isCoordinatorRole: isCoordinatorRole2, loadEmployees: loadEmployees2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
|
|
21141
21159
|
const { isExeSession: isExeSession2 } = await Promise.resolve().then(() => (init_tmux_routing(), tmux_routing_exports));
|
|
21142
|
-
const { execSync:
|
|
21160
|
+
const { execSync: execSync12 } = await import("child_process");
|
|
21143
21161
|
if (!inTmux2()) {
|
|
21144
21162
|
setTmuxAvailable(false);
|
|
21145
21163
|
setProjects([]);
|
|
@@ -21148,7 +21166,7 @@ function SessionsView({
|
|
|
21148
21166
|
setTmuxAvailable(true);
|
|
21149
21167
|
const attachedMap = /* @__PURE__ */ new Map();
|
|
21150
21168
|
try {
|
|
21151
|
-
const out =
|
|
21169
|
+
const out = execSync12("tmux list-sessions -F '#{session_name}:#{session_attached}' 2>/dev/null", {
|
|
21152
21170
|
encoding: "utf8",
|
|
21153
21171
|
timeout: 3e3
|
|
21154
21172
|
});
|
|
@@ -21850,8 +21868,8 @@ function upsertConversation(conversations, platform, senderId, message) {
|
|
|
21850
21868
|
async function loadGatewayConfig() {
|
|
21851
21869
|
const state = { running: false, port: 3100, adapters: [], agents: [], gatewayUrl: "" };
|
|
21852
21870
|
try {
|
|
21853
|
-
const { execSync:
|
|
21854
|
-
const ps =
|
|
21871
|
+
const { execSync: execSync12 } = await import("child_process");
|
|
21872
|
+
const ps = execSync12("pgrep -f exe-gateway 2>/dev/null", { encoding: "utf8", timeout: 3e3 });
|
|
21855
21873
|
state.running = ps.trim().length > 0;
|
|
21856
21874
|
} catch {
|
|
21857
21875
|
state.running = false;
|
|
@@ -22235,10 +22253,10 @@ function GatewayView({ onBack }) {
|
|
|
22235
22253
|
import React22, { useState as useState12, useEffect as useEffect14 } from "react";
|
|
22236
22254
|
|
|
22237
22255
|
// src/tui/utils/agent-status.ts
|
|
22238
|
-
import { execSync as
|
|
22256
|
+
import { execSync as execSync11 } from "child_process";
|
|
22239
22257
|
function getAgentStatus(agentId) {
|
|
22240
22258
|
try {
|
|
22241
|
-
const sessions =
|
|
22259
|
+
const sessions = execSync11("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
|
|
22242
22260
|
encoding: "utf8",
|
|
22243
22261
|
timeout: 2e3
|
|
22244
22262
|
}).trim().split("\n");
|
|
@@ -22249,7 +22267,7 @@ function getAgentStatus(agentId) {
|
|
|
22249
22267
|
return /^\d?-/.test(suffix) || /^\d+$/.test(suffix);
|
|
22250
22268
|
});
|
|
22251
22269
|
if (!agentSession) return { label: "offline", color: "gray" };
|
|
22252
|
-
const pane =
|
|
22270
|
+
const pane = execSync11(`tmux capture-pane -t "${agentSession}" -p 2>/dev/null | tail -3`, {
|
|
22253
22271
|
encoding: "utf8",
|
|
22254
22272
|
timeout: 2e3
|
|
22255
22273
|
});
|
|
@@ -23007,8 +23025,8 @@ function SettingsView({ onBack }) {
|
|
|
23007
23025
|
};
|
|
23008
23026
|
});
|
|
23009
23027
|
try {
|
|
23010
|
-
const { execSync:
|
|
23011
|
-
|
|
23028
|
+
const { execSync: execSync12 } = await import("child_process");
|
|
23029
|
+
execSync12("curl -s --max-time 1 http://localhost:11434/api/tags", { timeout: 2e3 });
|
|
23012
23030
|
providerList.push({ name: "Ollama", configured: true, detail: "localhost:11434" });
|
|
23013
23031
|
} catch {
|
|
23014
23032
|
providerList.push({ name: "Ollama", configured: false, detail: "not running" });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.86",
|
|
4
4
|
"description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|