@askexenow/exe-os 0.8.60 → 0.8.61

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/cli.js CHANGED
@@ -509,12 +509,14 @@ __export(installer_exports, {
509
509
  mergeHooks: () => mergeHooks,
510
510
  registerMcpServer: () => registerMcpServer,
511
511
  resolvePackageRoot: () => resolvePackageRoot,
512
- runInstaller: () => runInstaller
512
+ runInstaller: () => runInstaller,
513
+ setupTmux: () => setupTmux
513
514
  });
514
515
  import { readFile as readFile3, writeFile as writeFile3, mkdir as mkdir3, readdir } from "fs/promises";
515
- import { existsSync as existsSync4, readFileSync as readFileSync3 } from "fs";
516
+ import { existsSync as existsSync4, readFileSync as readFileSync3, writeFileSync, copyFileSync, mkdirSync as mkdirSync2 } from "fs";
516
517
  import path4 from "path";
517
518
  import os3 from "os";
519
+ import { execSync as execSync2 } from "child_process";
518
520
  import { fileURLToPath } from "url";
519
521
  function resolvePackageRoot() {
520
522
  const thisFile = fileURLToPath(import.meta.url);
@@ -961,6 +963,44 @@ async function runInstaller(homeDir) {
961
963
  exe-os installed successfully.
962
964
  `);
963
965
  }
966
+ function setupTmux(home) {
967
+ const homeDir = home ?? os3.homedir();
968
+ const exeDir = path4.join(homeDir, ".exe-os");
969
+ const exeTmuxConf = path4.join(exeDir, "tmux.conf");
970
+ const userTmuxConf = path4.join(homeDir, ".tmux.conf");
971
+ const backupPath = path4.join(homeDir, ".tmux.conf.backup");
972
+ const sourceLine = "source-file ~/.exe-os/tmux.conf";
973
+ const pkgRoot = resolvePackageRoot();
974
+ const assetPath = path4.join(pkgRoot, "dist", "assets", "tmux.conf");
975
+ if (!existsSync4(assetPath)) {
976
+ process.stderr.write(`exe-os: tmux.conf asset not found at ${assetPath} \u2014 skipping tmux setup
977
+ `);
978
+ return;
979
+ }
980
+ mkdirSync2(exeDir, { recursive: true });
981
+ copyFileSync(assetPath, exeTmuxConf);
982
+ if (existsSync4(userTmuxConf)) {
983
+ const existing = readFileSync3(userTmuxConf, "utf8");
984
+ if (!existing.includes(sourceLine)) {
985
+ if (!existsSync4(backupPath)) {
986
+ copyFileSync(userTmuxConf, backupPath);
987
+ process.stderr.write(`exe-os: backed up existing tmux config to ${backupPath}
988
+ `);
989
+ }
990
+ writeFileSync(userTmuxConf, `${sourceLine}
991
+ ${existing}`);
992
+ }
993
+ } else {
994
+ writeFileSync(userTmuxConf, `# Exe OS tmux defaults \u2014 remove this line to use your own config
995
+ ${sourceLine}
996
+ `);
997
+ }
998
+ try {
999
+ execSync2(`tmux source-file ${exeTmuxConf} 2>/dev/null`);
1000
+ } catch {
1001
+ }
1002
+ process.stderr.write("exe-os: tmux config installed\n");
1003
+ }
964
1004
  function summarizeSymlinkResults(results) {
965
1005
  if (results.length === 0) return "no employees in roster";
966
1006
  const created = results.filter((r) => r.action === "created").length;
@@ -2149,12 +2189,12 @@ __export(shard_manager_exports, {
2149
2189
  shardExists: () => shardExists
2150
2190
  });
2151
2191
  import path6 from "path";
2152
- import { existsSync as existsSync6, mkdirSync as mkdirSync2, readdirSync } from "fs";
2192
+ import { existsSync as existsSync6, mkdirSync as mkdirSync3, readdirSync } from "fs";
2153
2193
  import { createClient as createClient2 } from "@libsql/client";
2154
2194
  function initShardManager(encryptionKey) {
2155
2195
  _encryptionKey = encryptionKey;
2156
2196
  if (!existsSync6(SHARDS_DIR)) {
2157
- mkdirSync2(SHARDS_DIR, { recursive: true });
2197
+ mkdirSync3(SHARDS_DIR, { recursive: true });
2158
2198
  }
2159
2199
  _shardingEnabled = true;
2160
2200
  }
@@ -4409,8 +4449,8 @@ __export(exe_rename_exports, {
4409
4449
  main: () => main,
4410
4450
  renameEmployee: () => renameEmployee
4411
4451
  });
4412
- import { readFileSync as readFileSync5, writeFileSync, renameSync as renameSync2, unlinkSync as unlinkSync2, existsSync as existsSync8 } from "fs";
4413
- import { execSync as execSync2 } from "child_process";
4452
+ import { readFileSync as readFileSync5, writeFileSync as writeFileSync2, renameSync as renameSync2, unlinkSync as unlinkSync2, existsSync as existsSync8 } from "fs";
4453
+ import { execSync as execSync3 } from "child_process";
4414
4454
  import path9 from "path";
4415
4455
  import { homedir as homedir2 } from "os";
4416
4456
  async function renameEmployee(oldName, newName, opts = {}) {
@@ -4442,7 +4482,7 @@ async function renameEmployee(oldName, newName, opts = {}) {
4442
4482
  undo: () => {
4443
4483
  employee.name = originalName;
4444
4484
  employee.systemPrompt = originalPrompt;
4445
- writeFileSync(rosterPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
4485
+ writeFileSync2(rosterPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
4446
4486
  }
4447
4487
  });
4448
4488
  const oldIdentityPath = path9.join(identityDir, `${oldName}.md`);
@@ -4454,12 +4494,12 @@ async function renameEmployee(oldName, newName, opts = {}) {
4454
4494
  `$1${newName}`
4455
4495
  );
4456
4496
  renameSync2(oldIdentityPath, newIdentityPath);
4457
- writeFileSync(newIdentityPath, updatedContent, "utf-8");
4497
+ writeFileSync2(newIdentityPath, updatedContent, "utf-8");
4458
4498
  rollbackStack.push({
4459
4499
  description: "restore identity file",
4460
4500
  undo: () => {
4461
4501
  if (existsSync8(newIdentityPath)) {
4462
- writeFileSync(newIdentityPath, content, "utf-8");
4502
+ writeFileSync2(newIdentityPath, content, "utf-8");
4463
4503
  renameSync2(newIdentityPath, oldIdentityPath);
4464
4504
  }
4465
4505
  }
@@ -4475,7 +4515,7 @@ async function renameEmployee(oldName, newName, opts = {}) {
4475
4515
  undo: () => {
4476
4516
  if (existsSync8(newAgentPath)) {
4477
4517
  renameSync2(newAgentPath, oldAgentPath);
4478
- writeFileSync(oldAgentPath, agentContent, "utf-8");
4518
+ writeFileSync2(oldAgentPath, agentContent, "utf-8");
4479
4519
  }
4480
4520
  }
4481
4521
  });
@@ -4544,7 +4584,7 @@ async function renameEmployee(oldName, newName, opts = {}) {
4544
4584
  }
4545
4585
  function findExeBin2() {
4546
4586
  try {
4547
- return execSync2(process.platform === "win32" ? "where exe-os" : "which exe-os", { encoding: "utf8" }).trim();
4587
+ return execSync3(process.platform === "win32" ? "where exe-os" : "which exe-os", { encoding: "utf8" }).trim();
4548
4588
  } catch {
4549
4589
  return null;
4550
4590
  }
@@ -4778,7 +4818,7 @@ __export(license_exports, {
4778
4818
  stopLicenseRevalidation: () => stopLicenseRevalidation,
4779
4819
  validateLicense: () => validateLicense
4780
4820
  });
4781
- import { readFileSync as readFileSync6, writeFileSync as writeFileSync2, existsSync as existsSync10, mkdirSync as mkdirSync3 } from "fs";
4821
+ import { readFileSync as readFileSync6, writeFileSync as writeFileSync3, existsSync as existsSync10, mkdirSync as mkdirSync4 } from "fs";
4782
4822
  import { randomUUID as randomUUID3 } from "crypto";
4783
4823
  import path11 from "path";
4784
4824
  import { jwtVerify, importSPKI } from "jose";
@@ -4807,8 +4847,8 @@ function loadDeviceId() {
4807
4847
  } catch {
4808
4848
  }
4809
4849
  const id = randomUUID3();
4810
- mkdirSync3(EXE_AI_DIR, { recursive: true });
4811
- writeFileSync2(DEVICE_ID_PATH, id, "utf8");
4850
+ mkdirSync4(EXE_AI_DIR, { recursive: true });
4851
+ writeFileSync3(DEVICE_ID_PATH, id, "utf8");
4812
4852
  return id;
4813
4853
  }
4814
4854
  function loadLicense() {
@@ -4820,8 +4860,8 @@ function loadLicense() {
4820
4860
  }
4821
4861
  }
4822
4862
  function saveLicense(apiKey) {
4823
- mkdirSync3(EXE_AI_DIR, { recursive: true });
4824
- writeFileSync2(LICENSE_PATH, apiKey.trim(), { encoding: "utf8", mode: 384 });
4863
+ mkdirSync4(EXE_AI_DIR, { recursive: true });
4864
+ writeFileSync3(LICENSE_PATH, apiKey.trim(), { encoding: "utf8", mode: 384 });
4825
4865
  }
4826
4866
  async function verifyLicenseJwt(token) {
4827
4867
  try {
@@ -4892,7 +4932,7 @@ function getRawCachedPlan() {
4892
4932
  }
4893
4933
  function cacheResponse(token) {
4894
4934
  try {
4895
- writeFileSync2(CACHE_PATH, JSON.stringify({ token }), "utf8");
4935
+ writeFileSync3(CACHE_PATH, JSON.stringify({ token }), "utf8");
4896
4936
  } catch {
4897
4937
  }
4898
4938
  }
@@ -5157,13 +5197,13 @@ __export(identity_exports, {
5157
5197
  listIdentities: () => listIdentities,
5158
5198
  updateIdentity: () => updateIdentity
5159
5199
  });
5160
- import { existsSync as existsSync11, mkdirSync as mkdirSync4, readFileSync as readFileSync7, writeFileSync as writeFileSync3 } from "fs";
5200
+ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as readFileSync7, writeFileSync as writeFileSync4 } from "fs";
5161
5201
  import { readdirSync as readdirSync2 } from "fs";
5162
5202
  import path12 from "path";
5163
5203
  import { createHash as createHash2 } from "crypto";
5164
5204
  function ensureDir() {
5165
5205
  if (!existsSync11(IDENTITY_DIR)) {
5166
- mkdirSync4(IDENTITY_DIR, { recursive: true });
5206
+ mkdirSync5(IDENTITY_DIR, { recursive: true });
5167
5207
  }
5168
5208
  }
5169
5209
  function identityPath(agentId) {
@@ -5223,7 +5263,7 @@ async function updateIdentity(agentId, content, updatedBy) {
5223
5263
  ensureDir();
5224
5264
  const filePath = identityPath(agentId);
5225
5265
  const hash = contentHash(content);
5226
- writeFileSync3(filePath, content, "utf-8");
5266
+ writeFileSync4(filePath, content, "utf-8");
5227
5267
  try {
5228
5268
  const client = getClient();
5229
5269
  await client.execute({
@@ -5820,7 +5860,7 @@ __export(setup_wizard_exports, {
5820
5860
  validateModel: () => validateModel
5821
5861
  });
5822
5862
  import crypto3 from "crypto";
5823
- import { existsSync as existsSync12, mkdirSync as mkdirSync5, readFileSync as readFileSync8, writeFileSync as writeFileSync4, unlinkSync as unlinkSync4 } from "fs";
5863
+ import { existsSync as existsSync12, mkdirSync as mkdirSync6, readFileSync as readFileSync8, writeFileSync as writeFileSync5, unlinkSync as unlinkSync4 } from "fs";
5824
5864
  import os5 from "os";
5825
5865
  import path13 from "path";
5826
5866
  import { createInterface as createInterface2 } from "readline";
@@ -5832,8 +5872,8 @@ function loadSetupState() {
5832
5872
  }
5833
5873
  }
5834
5874
  function saveSetupState(state) {
5835
- mkdirSync5(path13.dirname(SETUP_STATE_PATH), { recursive: true });
5836
- writeFileSync4(SETUP_STATE_PATH, JSON.stringify(state, null, 2));
5875
+ mkdirSync6(path13.dirname(SETUP_STATE_PATH), { recursive: true });
5876
+ writeFileSync5(SETUP_STATE_PATH, JSON.stringify(state, null, 2));
5837
5877
  }
5838
5878
  function clearSetupState() {
5839
5879
  try {
@@ -6000,7 +6040,7 @@ async function runSetupWizard(opts = {}) {
6000
6040
  if (!projects[dir]) projects[dir] = {};
6001
6041
  projects[dir].hasTrustDialogAccepted = true;
6002
6042
  }
6003
- writeFileSync4(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
6043
+ writeFileSync5(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
6004
6044
  } catch {
6005
6045
  }
6006
6046
  state.completedSteps.push(5);
@@ -6052,9 +6092,9 @@ async function runSetupWizard(opts = {}) {
6052
6092
  const cooIdentityContent = getIdentityTemplate("coo");
6053
6093
  if (cooIdentityContent) {
6054
6094
  const cooIdPath = identityPath2(cooName);
6055
- mkdirSync5(path13.dirname(cooIdPath), { recursive: true });
6095
+ mkdirSync6(path13.dirname(cooIdPath), { recursive: true });
6056
6096
  const replaced = cooIdentityContent.replace(/agent_id:\s*exe/g, `agent_id: ${cooName}`).replace(/\$\{agent_id\}/g, cooName);
6057
- writeFileSync4(cooIdPath, replaced, "utf-8");
6097
+ writeFileSync5(cooIdPath, replaced, "utf-8");
6058
6098
  }
6059
6099
  registerBinSymlinks2(cooName);
6060
6100
  createdEmployees.push({ name: cooName, role: "COO" });
@@ -6153,9 +6193,9 @@ async function runSetupWizard(opts = {}) {
6153
6193
  const ctoIdentityContent = getIdentityTemplate("cto");
6154
6194
  if (ctoIdentityContent) {
6155
6195
  const ctoIdPath = identityPath2(ctoName);
6156
- mkdirSync5(path13.dirname(ctoIdPath), { recursive: true });
6196
+ mkdirSync6(path13.dirname(ctoIdPath), { recursive: true });
6157
6197
  const replaced = ctoIdentityContent.replace(/agent_id:\s*\w+/g, `agent_id: ${ctoName}`).replace(/\$\{agent_id\}/g, ctoName);
6158
- writeFileSync4(ctoIdPath, replaced, "utf-8");
6198
+ writeFileSync5(ctoIdPath, replaced, "utf-8");
6159
6199
  }
6160
6200
  registerBinSymlinks2(ctoName);
6161
6201
  createdEmployees.push({ name: ctoName, role: "CTO" });
@@ -6181,9 +6221,9 @@ async function runSetupWizard(opts = {}) {
6181
6221
  const cmoIdentityContent = getIdentityTemplate("cmo");
6182
6222
  if (cmoIdentityContent) {
6183
6223
  const cmoIdPath = identityPath2(cmoName);
6184
- mkdirSync5(path13.dirname(cmoIdPath), { recursive: true });
6224
+ mkdirSync6(path13.dirname(cmoIdPath), { recursive: true });
6185
6225
  const replaced = cmoIdentityContent.replace(/agent_id:\s*\w+/g, `agent_id: ${cmoName}`).replace(/\$\{agent_id\}/g, cmoName);
6186
- writeFileSync4(cmoIdPath, replaced, "utf-8");
6226
+ writeFileSync5(cmoIdPath, replaced, "utf-8");
6187
6227
  }
6188
6228
  registerBinSymlinks2(cmoName);
6189
6229
  createdEmployees.push({ name: cmoName, role: "CMO" });
@@ -6245,7 +6285,7 @@ var init_setup_wizard = __esm({
6245
6285
  });
6246
6286
 
6247
6287
  // src/lib/update-check.ts
6248
- import { execSync as execSync3 } from "child_process";
6288
+ import { execSync as execSync4 } from "child_process";
6249
6289
  import { readFileSync as readFileSync9 } from "fs";
6250
6290
  import path14 from "path";
6251
6291
  function getLocalVersion(packageRoot) {
@@ -6255,7 +6295,7 @@ function getLocalVersion(packageRoot) {
6255
6295
  }
6256
6296
  function getRemoteVersion() {
6257
6297
  try {
6258
- const output = execSync3("npm view @askexenow/exe-os version", {
6298
+ const output = execSync4("npm view @askexenow/exe-os version", {
6259
6299
  encoding: "utf-8",
6260
6300
  timeout: 15e3,
6261
6301
  stdio: ["pipe", "pipe", "pipe"]
@@ -6294,7 +6334,7 @@ __export(update_exports, {
6294
6334
  getRemoteVersion: () => getRemoteVersion,
6295
6335
  runUpdate: () => runUpdate
6296
6336
  });
6297
- import { execSync as execSync4 } from "child_process";
6337
+ import { execSync as execSync5 } from "child_process";
6298
6338
  import { createInterface as createInterface3 } from "readline";
6299
6339
  async function runUpdate(cliArgs) {
6300
6340
  const args2 = cliArgs ?? process.argv.slice(2);
@@ -6336,14 +6376,14 @@ async function runUpdate(cliArgs) {
6336
6376
  }
6337
6377
  console.log("\n\u{1F9F9} Clearing npm cache...");
6338
6378
  try {
6339
- execSync4("npm cache clean --force", { stdio: "pipe" });
6379
+ execSync5("npm cache clean --force", { stdio: "pipe" });
6340
6380
  console.log(" Done");
6341
6381
  } catch {
6342
6382
  console.log(" Skipped (non-critical)");
6343
6383
  }
6344
6384
  console.log("\u{1F4E5} Installing @askexenow/exe-os@latest...");
6345
6385
  try {
6346
- execSync4("npm install -g @askexenow/exe-os@latest", {
6386
+ execSync5("npm install -g @askexenow/exe-os@latest", {
6347
6387
  stdio: ["pipe", "pipe", "pipe"],
6348
6388
  timeout: 12e4
6349
6389
  });
@@ -6360,7 +6400,7 @@ async function runUpdate(cliArgs) {
6360
6400
  newVersion = getLocalVersion(packageRoot);
6361
6401
  } catch {
6362
6402
  try {
6363
- const out = execSync4("npm list -g @askexenow/exe-os --depth=0 2>/dev/null", { encoding: "utf8" });
6403
+ const out = execSync5("npm list -g @askexenow/exe-os --depth=0 2>/dev/null", { encoding: "utf8" });
6364
6404
  const match = out.match(/@askexenow\/exe-os@(\S+)/);
6365
6405
  newVersion = match?.[1] ?? "unknown";
6366
6406
  } catch {
@@ -12803,14 +12843,14 @@ __export(session_registry_exports, {
12803
12843
  pruneStaleSessions: () => pruneStaleSessions,
12804
12844
  registerSession: () => registerSession
12805
12845
  });
12806
- import { readFileSync as readFileSync11, writeFileSync as writeFileSync5, mkdirSync as mkdirSync6, existsSync as existsSync14 } from "fs";
12807
- import { execSync as execSync5 } from "child_process";
12846
+ import { readFileSync as readFileSync11, writeFileSync as writeFileSync6, mkdirSync as mkdirSync7, existsSync as existsSync14 } from "fs";
12847
+ import { execSync as execSync6 } from "child_process";
12808
12848
  import path15 from "path";
12809
12849
  import os6 from "os";
12810
12850
  function registerSession(entry) {
12811
12851
  const dir = path15.dirname(REGISTRY_PATH);
12812
12852
  if (!existsSync14(dir)) {
12813
- mkdirSync6(dir, { recursive: true });
12853
+ mkdirSync7(dir, { recursive: true });
12814
12854
  }
12815
12855
  const sessions = listSessions();
12816
12856
  const idx = sessions.findIndex((s) => s.windowName === entry.windowName);
@@ -12819,7 +12859,7 @@ function registerSession(entry) {
12819
12859
  } else {
12820
12860
  sessions.push(entry);
12821
12861
  }
12822
- writeFileSync5(REGISTRY_PATH, JSON.stringify(sessions, null, 2));
12862
+ writeFileSync6(REGISTRY_PATH, JSON.stringify(sessions, null, 2));
12823
12863
  }
12824
12864
  function listSessions() {
12825
12865
  try {
@@ -12834,7 +12874,7 @@ function pruneStaleSessions() {
12834
12874
  if (sessions.length === 0) return 0;
12835
12875
  let liveSessions = [];
12836
12876
  try {
12837
- liveSessions = execSync5("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
12877
+ liveSessions = execSync6("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
12838
12878
  encoding: "utf8"
12839
12879
  }).trim().split("\n").filter(Boolean);
12840
12880
  } catch {
@@ -12844,7 +12884,7 @@ function pruneStaleSessions() {
12844
12884
  const alive = sessions.filter((s) => liveSet.has(s.windowName));
12845
12885
  const pruned = sessions.length - alive.length;
12846
12886
  if (pruned > 0) {
12847
- writeFileSync5(REGISTRY_PATH, JSON.stringify(alive, null, 2));
12887
+ writeFileSync6(REGISTRY_PATH, JSON.stringify(alive, null, 2));
12848
12888
  }
12849
12889
  return pruned;
12850
12890
  }
@@ -12857,13 +12897,13 @@ var init_session_registry = __esm({
12857
12897
  });
12858
12898
 
12859
12899
  // src/lib/session-key.ts
12860
- import { execSync as execSync6 } from "child_process";
12900
+ import { execSync as execSync7 } from "child_process";
12861
12901
  function getSessionKey() {
12862
12902
  if (_cached) return _cached;
12863
12903
  let pid = process.ppid;
12864
12904
  for (let i = 0; i < 10; i++) {
12865
12905
  try {
12866
- const info = execSync6(`ps -p ${pid} -o ppid=,comm=`, {
12906
+ const info = execSync7(`ps -p ${pid} -o ppid=,comm=`, {
12867
12907
  encoding: "utf8",
12868
12908
  timeout: 2e3
12869
12909
  }).trim();
@@ -13007,14 +13047,14 @@ var init_transport = __esm({
13007
13047
  });
13008
13048
 
13009
13049
  // src/lib/cc-agent-support.ts
13010
- import { execSync as execSync7 } from "child_process";
13050
+ import { execSync as execSync8 } from "child_process";
13011
13051
  function _resetCcAgentSupportCache() {
13012
13052
  _cachedSupport = null;
13013
13053
  }
13014
13054
  function claudeSupportsAgentFlag() {
13015
13055
  if (_cachedSupport !== null) return _cachedSupport;
13016
13056
  try {
13017
- const helpOutput = execSync7("claude --help 2>&1", {
13057
+ const helpOutput = execSync8("claude --help 2>&1", {
13018
13058
  encoding: "utf-8",
13019
13059
  timeout: 5e3
13020
13060
  });
@@ -13057,12 +13097,12 @@ var init_provider_table = __esm({
13057
13097
  });
13058
13098
 
13059
13099
  // src/lib/intercom-queue.ts
13060
- import { readFileSync as readFileSync12, writeFileSync as writeFileSync6, renameSync as renameSync4, existsSync as existsSync15, mkdirSync as mkdirSync7 } from "fs";
13100
+ import { readFileSync as readFileSync12, writeFileSync as writeFileSync7, renameSync as renameSync4, existsSync as existsSync15, mkdirSync as mkdirSync8 } from "fs";
13061
13101
  import path16 from "path";
13062
13102
  import os7 from "os";
13063
13103
  function ensureDir2() {
13064
13104
  const dir = path16.dirname(QUEUE_PATH);
13065
- if (!existsSync15(dir)) mkdirSync7(dir, { recursive: true });
13105
+ if (!existsSync15(dir)) mkdirSync8(dir, { recursive: true });
13066
13106
  }
13067
13107
  function readQueue() {
13068
13108
  try {
@@ -13075,7 +13115,7 @@ function readQueue() {
13075
13115
  function writeQueue(queue) {
13076
13116
  ensureDir2();
13077
13117
  const tmp = `${QUEUE_PATH}.tmp`;
13078
- writeFileSync6(tmp, JSON.stringify(queue, null, 2));
13118
+ writeFileSync7(tmp, JSON.stringify(queue, null, 2));
13079
13119
  renameSync4(tmp, QUEUE_PATH);
13080
13120
  }
13081
13121
  function queueIntercom(targetSession, reason) {
@@ -13287,7 +13327,7 @@ __export(tasks_crud_exports, {
13287
13327
  });
13288
13328
  import crypto6 from "crypto";
13289
13329
  import path19 from "path";
13290
- import { execSync as execSync8 } from "child_process";
13330
+ import { execSync as execSync9 } from "child_process";
13291
13331
  import { mkdir as mkdir6, writeFile as writeFile5, appendFile } from "fs/promises";
13292
13332
  import { existsSync as existsSync18, readFileSync as readFileSync15 } from "fs";
13293
13333
  async function writeCheckpoint(input) {
@@ -13534,12 +13574,12 @@ function checkStaleCompletion(taskContext, taskCreatedAt) {
13534
13574
  if (!DELEGATION_KEYWORDS.test(taskContext)) return null;
13535
13575
  try {
13536
13576
  const since = new Date(taskCreatedAt).toISOString();
13537
- const branch = execSync8(
13577
+ const branch = execSync9(
13538
13578
  "git rev-parse --abbrev-ref HEAD 2>/dev/null",
13539
13579
  { encoding: "utf8", timeout: 3e3 }
13540
13580
  ).trim();
13541
13581
  const branchArg = branch && branch !== "HEAD" ? branch : "";
13542
- const commitCount = execSync8(
13582
+ const commitCount = execSync9(
13543
13583
  `git log --oneline --since="${since}" ${branchArg} 2>/dev/null | wc -l`,
13544
13584
  { encoding: "utf8", timeout: 5e3 }
13545
13585
  ).trim();
@@ -13993,7 +14033,7 @@ var init_tasks_chain = __esm({
13993
14033
  });
13994
14034
 
13995
14035
  // src/lib/project-name.ts
13996
- import { execSync as execSync9 } from "child_process";
14036
+ import { execSync as execSync10 } from "child_process";
13997
14037
  import path22 from "path";
13998
14038
  function getProjectName(cwd2) {
13999
14039
  const dir = cwd2 ?? process.cwd();
@@ -14001,7 +14041,7 @@ function getProjectName(cwd2) {
14001
14041
  try {
14002
14042
  let repoRoot;
14003
14043
  try {
14004
- const gitCommonDir = execSync9("git rev-parse --path-format=absolute --git-common-dir", {
14044
+ const gitCommonDir = execSync10("git rev-parse --path-format=absolute --git-common-dir", {
14005
14045
  cwd: dir,
14006
14046
  encoding: "utf8",
14007
14047
  timeout: 2e3,
@@ -14009,7 +14049,7 @@ function getProjectName(cwd2) {
14009
14049
  }).trim();
14010
14050
  repoRoot = path22.dirname(gitCommonDir);
14011
14051
  } catch {
14012
- repoRoot = execSync9("git rev-parse --show-toplevel", {
14052
+ repoRoot = execSync10("git rev-parse --show-toplevel", {
14013
14053
  cwd: dir,
14014
14054
  encoding: "utf8",
14015
14055
  timeout: 2e3,
@@ -14493,7 +14533,7 @@ __export(tasks_exports, {
14493
14533
  writeCheckpoint: () => writeCheckpoint
14494
14534
  });
14495
14535
  import path23 from "path";
14496
- import { writeFileSync as writeFileSync7, mkdirSync as mkdirSync8, unlinkSync as unlinkSync7 } from "fs";
14536
+ import { writeFileSync as writeFileSync8, mkdirSync as mkdirSync9, unlinkSync as unlinkSync7 } from "fs";
14497
14537
  async function createTask(input) {
14498
14538
  const result = await createTaskCore(input);
14499
14539
  if (!input.skipDispatch && result.status !== "blocked" && !process.env.VITEST) {
@@ -14515,8 +14555,8 @@ async function updateTask(input) {
14515
14555
  const cacheDir = path23.join(EXE_AI_DIR, "session-cache");
14516
14556
  const cachePath = path23.join(cacheDir, `current-task-${agent}.json`);
14517
14557
  if (input.status === "in_progress") {
14518
- mkdirSync8(cacheDir, { recursive: true });
14519
- writeFileSync7(cachePath, JSON.stringify({ taskId, title: String(row.title) }));
14558
+ mkdirSync9(cacheDir, { recursive: true });
14559
+ writeFileSync8(cachePath, JSON.stringify({ taskId, title: String(row.title) }));
14520
14560
  } else if (input.status === "done" || input.status === "blocked" || input.status === "cancelled") {
14521
14561
  try {
14522
14562
  unlinkSync7(cachePath);
@@ -14960,8 +15000,8 @@ __export(tmux_routing_exports, {
14960
15000
  spawnEmployee: () => spawnEmployee,
14961
15001
  verifyPaneAtCapacity: () => verifyPaneAtCapacity
14962
15002
  });
14963
- import { execFileSync as execFileSync3, execSync as execSync10 } from "child_process";
14964
- import { readFileSync as readFileSync16, writeFileSync as writeFileSync8, mkdirSync as mkdirSync9, existsSync as existsSync20, appendFileSync } from "fs";
15003
+ import { execFileSync as execFileSync3, execSync as execSync11 } from "child_process";
15004
+ import { readFileSync as readFileSync16, writeFileSync as writeFileSync9, mkdirSync as mkdirSync10, existsSync as existsSync20, appendFileSync } from "fs";
14965
15005
  import path24 from "path";
14966
15006
  import os9 from "os";
14967
15007
  import { fileURLToPath as fileURLToPath4 } from "url";
@@ -14979,7 +15019,7 @@ function isProcessAlive(pid) {
14979
15019
  }
14980
15020
  function acquireSpawnLock2(sessionName) {
14981
15021
  if (!existsSync20(SPAWN_LOCK_DIR)) {
14982
- mkdirSync9(SPAWN_LOCK_DIR, { recursive: true });
15022
+ mkdirSync10(SPAWN_LOCK_DIR, { recursive: true });
14983
15023
  }
14984
15024
  const lockFile = spawnLockPath(sessionName);
14985
15025
  if (existsSync20(lockFile)) {
@@ -14992,7 +15032,7 @@ function acquireSpawnLock2(sessionName) {
14992
15032
  } catch {
14993
15033
  }
14994
15034
  }
14995
- writeFileSync8(lockFile, JSON.stringify({ pid: process.pid, timestamp: Date.now() }));
15035
+ writeFileSync9(lockFile, JSON.stringify({ pid: process.pid, timestamp: Date.now() }));
14996
15036
  return true;
14997
15037
  }
14998
15038
  function releaseSpawnLock2(sessionName) {
@@ -15075,11 +15115,11 @@ function extractRootExe(name) {
15075
15115
  }
15076
15116
  function registerParentExe(sessionKey, parentExe, dispatchedBy) {
15077
15117
  if (!existsSync20(SESSION_CACHE)) {
15078
- mkdirSync9(SESSION_CACHE, { recursive: true });
15118
+ mkdirSync10(SESSION_CACHE, { recursive: true });
15079
15119
  }
15080
15120
  const rootExe = extractRootExe(parentExe) ?? parentExe;
15081
15121
  const filePath = path24.join(SESSION_CACHE, `parent-exe-${sessionKey}.json`);
15082
- writeFileSync8(filePath, JSON.stringify({
15122
+ writeFileSync9(filePath, JSON.stringify({
15083
15123
  parentExe: rootExe,
15084
15124
  dispatchedBy: dispatchedBy || rootExe,
15085
15125
  registeredAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -15165,8 +15205,8 @@ function readDebounceState() {
15165
15205
  }
15166
15206
  function writeDebounceState(state) {
15167
15207
  try {
15168
- if (!existsSync20(SESSION_CACHE)) mkdirSync9(SESSION_CACHE, { recursive: true });
15169
- writeFileSync8(DEBOUNCE_FILE, JSON.stringify(state));
15208
+ if (!existsSync20(SESSION_CACHE)) mkdirSync10(SESSION_CACHE, { recursive: true });
15209
+ writeFileSync9(DEBOUNCE_FILE, JSON.stringify(state));
15170
15210
  } catch {
15171
15211
  }
15172
15212
  }
@@ -15358,7 +15398,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15358
15398
  const logDir = path24.join(os9.homedir(), ".exe-os", "session-logs");
15359
15399
  const logFile = path24.join(logDir, `${instanceLabel}-${Date.now()}.log`);
15360
15400
  if (!existsSync20(logDir)) {
15361
- mkdirSync9(logDir, { recursive: true });
15401
+ mkdirSync10(logDir, { recursive: true });
15362
15402
  }
15363
15403
  transport.kill(sessionName);
15364
15404
  let cleanupSuffix = "";
@@ -15382,7 +15422,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15382
15422
  const trustDir = opts?.cwd ?? projectDir;
15383
15423
  if (!projects[trustDir]) projects[trustDir] = {};
15384
15424
  projects[trustDir].hasTrustDialogAccepted = true;
15385
- writeFileSync8(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
15425
+ writeFileSync9(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
15386
15426
  } catch {
15387
15427
  }
15388
15428
  try {
@@ -15420,8 +15460,8 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15420
15460
  if (changed) {
15421
15461
  perms.allow = allow;
15422
15462
  settings.permissions = perms;
15423
- mkdirSync9(projSettingsDir, { recursive: true });
15424
- writeFileSync8(settingsPath, JSON.stringify(settings, null, 2) + "\n");
15463
+ mkdirSync10(projSettingsDir, { recursive: true });
15464
+ writeFileSync9(settingsPath, JSON.stringify(settings, null, 2) + "\n");
15425
15465
  }
15426
15466
  } catch {
15427
15467
  }
@@ -15465,7 +15505,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15465
15505
  let sessionContextFlag = "";
15466
15506
  try {
15467
15507
  const ctxDir = path24.join(os9.homedir(), ".exe-os", "session-cache");
15468
- mkdirSync9(ctxDir, { recursive: true });
15508
+ mkdirSync10(ctxDir, { recursive: true });
15469
15509
  const ctxFile = path24.join(ctxDir, `session-context-${sessionName}.md`);
15470
15510
  const ctxContent = [
15471
15511
  `## Session Context`,
@@ -15473,7 +15513,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15473
15513
  `Your parent exe session is ${exeSession}.`,
15474
15514
  `Your employees (if any) use the -${exeSession} suffix (e.g., tom-${exeSession}).`
15475
15515
  ].join("\n");
15476
- writeFileSync8(ctxFile, ctxContent);
15516
+ writeFileSync9(ctxFile, ctxContent);
15477
15517
  sessionContextFlag = ` --append-system-prompt-file ${ctxFile}`;
15478
15518
  } catch {
15479
15519
  }
@@ -15512,7 +15552,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15512
15552
  try {
15513
15553
  const mySession = getMySession();
15514
15554
  const dispatchInfo = path24.join(SESSION_CACHE, `dispatch-info-${sessionName}.json`);
15515
- writeFileSync8(dispatchInfo, JSON.stringify({
15555
+ writeFileSync9(dispatchInfo, JSON.stringify({
15516
15556
  dispatchedBy: mySession,
15517
15557
  rootExe: exeSession,
15518
15558
  provider: useBinSymlink ? ccProvider : useExeAgent ? opts.provider : "anthropic",
@@ -15523,7 +15563,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
15523
15563
  let booted = false;
15524
15564
  for (let i = 0; i < 30; i++) {
15525
15565
  try {
15526
- execSync10("sleep 0.5");
15566
+ execSync11("sleep 0.5");
15527
15567
  } catch {
15528
15568
  }
15529
15569
  try {
@@ -15699,13 +15739,13 @@ __export(tmux_status_exports, {
15699
15739
  parseActivity: () => parseActivity,
15700
15740
  parseContextPercentage: () => parseContextPercentage
15701
15741
  });
15702
- import { execSync as execSync11 } from "child_process";
15742
+ import { execSync as execSync12 } from "child_process";
15703
15743
  function inTmux() {
15704
15744
  if (process.env.TMUX || process.env.TMUX_PANE) return true;
15705
15745
  const term = process.env.TERM ?? "";
15706
15746
  if (term.startsWith("tmux") || term.startsWith("screen")) return true;
15707
15747
  try {
15708
- execSync11("tmux display-message -p '#{session_name}' 2>/dev/null", {
15748
+ execSync12("tmux display-message -p '#{session_name}' 2>/dev/null", {
15709
15749
  encoding: "utf8",
15710
15750
  timeout: 2e3
15711
15751
  });
@@ -15715,12 +15755,12 @@ function inTmux() {
15715
15755
  try {
15716
15756
  let pid = process.ppid;
15717
15757
  for (let depth = 0; depth < 8 && pid > 1; depth++) {
15718
- const comm = execSync11(`ps -p ${pid} -o comm= 2>/dev/null`, {
15758
+ const comm = execSync12(`ps -p ${pid} -o comm= 2>/dev/null`, {
15719
15759
  encoding: "utf8",
15720
15760
  timeout: 1e3
15721
15761
  }).trim();
15722
15762
  if (/tmux/.test(comm)) return true;
15723
- const ppid = execSync11(`ps -p ${pid} -o ppid= 2>/dev/null`, {
15763
+ const ppid = execSync12(`ps -p ${pid} -o ppid= 2>/dev/null`, {
15724
15764
  encoding: "utf8",
15725
15765
  timeout: 1e3
15726
15766
  }).trim();
@@ -15733,7 +15773,7 @@ function inTmux() {
15733
15773
  }
15734
15774
  function listTmuxSessions() {
15735
15775
  try {
15736
- const out = execSync11("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
15776
+ const out = execSync12("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
15737
15777
  encoding: "utf8",
15738
15778
  timeout: 3e3
15739
15779
  });
@@ -15744,7 +15784,7 @@ function listTmuxSessions() {
15744
15784
  }
15745
15785
  function capturePaneLines(windowName, lines = 10) {
15746
15786
  try {
15747
- const out = execSync11(
15787
+ const out = execSync12(
15748
15788
  `tmux capture-pane -t ${JSON.stringify(windowName)} -p 2>/dev/null | tail -${lines}`,
15749
15789
  { encoding: "utf8", timeout: 3e3 }
15750
15790
  );
@@ -15755,7 +15795,7 @@ function capturePaneLines(windowName, lines = 10) {
15755
15795
  }
15756
15796
  function getPaneCwd(windowName) {
15757
15797
  try {
15758
- const out = execSync11(
15798
+ const out = execSync12(
15759
15799
  `tmux display-message -t ${JSON.stringify(windowName)} -p '#{pane_current_path}' 2>/dev/null`,
15760
15800
  { encoding: "utf8", timeout: 3e3 }
15761
15801
  );
@@ -15766,7 +15806,7 @@ function getPaneCwd(windowName) {
15766
15806
  }
15767
15807
  function projectFromPath(dir) {
15768
15808
  try {
15769
- const root = execSync11("git -C " + JSON.stringify(dir) + " rev-parse --show-toplevel 2>/dev/null", {
15809
+ const root = execSync12("git -C " + JSON.stringify(dir) + " rev-parse --show-toplevel 2>/dev/null", {
15770
15810
  encoding: "utf8",
15771
15811
  timeout: 3e3
15772
15812
  }).trim();
@@ -15835,7 +15875,7 @@ function getEmployeeStatuses(employeeNames) {
15835
15875
  }
15836
15876
  let paneAlive = true;
15837
15877
  try {
15838
- const paneStatus = execSync11(
15878
+ const paneStatus = execSync12(
15839
15879
  `tmux list-panes -t ${JSON.stringify(sessionName)} -F '#{pane_dead}' 2>/dev/null`,
15840
15880
  { encoding: "utf8", timeout: 3e3 }
15841
15881
  ).trim();
@@ -16025,8 +16065,8 @@ function Footer() {
16025
16065
  setSessions(allSessions.length);
16026
16066
  if (!currentSession) {
16027
16067
  try {
16028
- const { execSync: execSync13 } = await import("child_process");
16029
- const name = execSync13("tmux display-message -p '#{session_name}' 2>/dev/null", {
16068
+ const { execSync: execSync14 } = await import("child_process");
16069
+ const name = execSync14("tmux display-message -p '#{session_name}' 2>/dev/null", {
16030
16070
  encoding: "utf8",
16031
16071
  timeout: 2e3
16032
16072
  }).trim();
@@ -19350,8 +19390,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
19350
19390
  }
19351
19391
  const capture = () => {
19352
19392
  try {
19353
- const { execSync: execSync13 } = __require("child_process");
19354
- const output = execSync13(
19393
+ const { execSync: execSync14 } = __require("child_process");
19394
+ const output = execSync14(
19355
19395
  `tmux capture-pane -t ${JSON.stringify(sessionName)} -p -e 2>/dev/null | tail -${CAPTURE_LINES}`,
19356
19396
  { encoding: "utf8", timeout: 3e3 }
19357
19397
  );
@@ -19375,8 +19415,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
19375
19415
  if (key.return) {
19376
19416
  if (!demo && inputBuffer.trim()) {
19377
19417
  try {
19378
- const { execSync: execSync13 } = __require("child_process");
19379
- execSync13(
19418
+ const { execSync: execSync14 } = __require("child_process");
19419
+ execSync14(
19380
19420
  `tmux send-keys -t ${JSON.stringify(sessionName)} ${JSON.stringify(inputBuffer)} Enter`,
19381
19421
  { timeout: 2e3 }
19382
19422
  );
@@ -19384,8 +19424,8 @@ function TmuxPane({ sessionName, employeeName, employeeRole, projectName, onDeta
19384
19424
  }
19385
19425
  } else if (!demo) {
19386
19426
  try {
19387
- const { execSync: execSync13 } = __require("child_process");
19388
- execSync13(`tmux send-keys -t ${JSON.stringify(sessionName)} Enter`, { timeout: 2e3 });
19427
+ const { execSync: execSync14 } = __require("child_process");
19428
+ execSync14(`tmux send-keys -t ${JSON.stringify(sessionName)} Enter`, { timeout: 2e3 });
19389
19429
  } catch {
19390
19430
  }
19391
19431
  }
@@ -20060,12 +20100,12 @@ function SessionsView({
20060
20100
  return;
20061
20101
  }
20062
20102
  } else {
20063
- const { execSync: execSync13 } = await import("child_process");
20103
+ const { execSync: execSync14 } = await import("child_process");
20064
20104
  const dir = projectDir || process.cwd();
20065
- execSync13(`tmux new-session -d -s ${JSON.stringify(entry.sessionName)} -c ${JSON.stringify(dir)}`, { timeout: 5e3 });
20066
- execSync13(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "claude --dangerously-skip-permissions" Enter`, { timeout: 3e3 });
20105
+ execSync14(`tmux new-session -d -s ${JSON.stringify(entry.sessionName)} -c ${JSON.stringify(dir)}`, { timeout: 5e3 });
20106
+ execSync14(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "claude --dangerously-skip-permissions" Enter`, { timeout: 3e3 });
20067
20107
  await new Promise((r) => setTimeout(r, 3e3));
20068
- execSync13(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "/exe" Enter`, { timeout: 3e3 });
20108
+ execSync14(`tmux send-keys -t ${JSON.stringify(entry.sessionName)} "/exe" Enter`, { timeout: 3e3 });
20069
20109
  }
20070
20110
  const updated = { ...entry, status: "active", activity: "Starting...", attached: false };
20071
20111
  setViewingEmployee(updated);
@@ -20167,7 +20207,7 @@ function SessionsView({
20167
20207
  const { listSessions: listSessions2 } = await Promise.resolve().then(() => (init_session_registry(), session_registry_exports));
20168
20208
  const { listTmuxSessions: listTmuxSessions2, inTmux: inTmux2, capturePaneLines: capturePaneLines2, parseActivity: parseActivity2 } = await Promise.resolve().then(() => (init_tmux_status(), tmux_status_exports));
20169
20209
  const { loadEmployees: loadEmployees2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
20170
- const { execSync: execSync13 } = await import("child_process");
20210
+ const { execSync: execSync14 } = await import("child_process");
20171
20211
  if (!inTmux2()) {
20172
20212
  setTmuxAvailable(false);
20173
20213
  setProjects([]);
@@ -20176,7 +20216,7 @@ function SessionsView({
20176
20216
  setTmuxAvailable(true);
20177
20217
  const attachedMap = /* @__PURE__ */ new Map();
20178
20218
  try {
20179
- const out = execSync13("tmux list-sessions -F '#{session_name}:#{session_attached}' 2>/dev/null", {
20219
+ const out = execSync14("tmux list-sessions -F '#{session_name}:#{session_attached}' 2>/dev/null", {
20180
20220
  encoding: "utf8",
20181
20221
  timeout: 3e3
20182
20222
  });
@@ -21126,8 +21166,8 @@ function upsertConversation(conversations, platform, senderId, message) {
21126
21166
  async function loadGatewayConfig() {
21127
21167
  const state = { running: false, port: 3100, adapters: [], agents: [], gatewayUrl: "" };
21128
21168
  try {
21129
- const { execSync: execSync13 } = await import("child_process");
21130
- const ps = execSync13("pgrep -f exe-gateway 2>/dev/null", { encoding: "utf8", timeout: 3e3 });
21169
+ const { execSync: execSync14 } = await import("child_process");
21170
+ const ps = execSync14("pgrep -f exe-gateway 2>/dev/null", { encoding: "utf8", timeout: 3e3 });
21131
21171
  state.running = ps.trim().length > 0;
21132
21172
  } catch {
21133
21173
  state.running = false;
@@ -21604,10 +21644,10 @@ var init_Gateway = __esm({
21604
21644
  });
21605
21645
 
21606
21646
  // src/tui/utils/agent-status.ts
21607
- import { execSync as execSync12 } from "child_process";
21647
+ import { execSync as execSync13 } from "child_process";
21608
21648
  function getAgentStatus(agentId) {
21609
21649
  try {
21610
- const sessions = execSync12("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
21650
+ const sessions = execSync13("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
21611
21651
  encoding: "utf8",
21612
21652
  timeout: 2e3
21613
21653
  }).trim().split("\n");
@@ -21618,7 +21658,7 @@ function getAgentStatus(agentId) {
21618
21658
  return /^\d?-/.test(suffix) || /^\d+$/.test(suffix);
21619
21659
  });
21620
21660
  if (!agentSession) return { label: "offline", color: "gray" };
21621
- const pane = execSync12(`tmux capture-pane -t "${agentSession}" -p 2>/dev/null | tail -3`, {
21661
+ const pane = execSync13(`tmux capture-pane -t "${agentSession}" -p 2>/dev/null | tail -3`, {
21622
21662
  encoding: "utf8",
21623
21663
  timeout: 2e3
21624
21664
  });
@@ -22583,8 +22623,8 @@ function SettingsView({ onBack }) {
22583
22623
  };
22584
22624
  });
22585
22625
  try {
22586
- const { execSync: execSync13 } = await import("child_process");
22587
- execSync13("curl -s --max-time 1 http://localhost:11434/api/tags", { timeout: 2e3 });
22626
+ const { execSync: execSync14 } = await import("child_process");
22627
+ execSync14("curl -s --max-time 1 http://localhost:11434/api/tags", { timeout: 2e3 });
22588
22628
  providerList.push({ name: "Ollama", configured: true, detail: "localhost:11434" });
22589
22629
  } catch {
22590
22630
  providerList.push({ name: "Ollama", configured: false, detail: "not running" });
@@ -23231,7 +23271,7 @@ Unhandled rejection: ${reason}
23231
23271
  });
23232
23272
 
23233
23273
  // src/bin/cli.ts
23234
- import { existsSync as existsSync21, readFileSync as readFileSync17, writeFileSync as writeFileSync9, readdirSync as readdirSync5, rmSync } from "fs";
23274
+ import { existsSync as existsSync21, readFileSync as readFileSync17, writeFileSync as writeFileSync10, readdirSync as readdirSync5, rmSync } from "fs";
23235
23275
  import path33 from "path";
23236
23276
  import os11 from "os";
23237
23277
  var args = process.argv.slice(2);
@@ -23459,7 +23499,7 @@ async function runClaudeUninstall(flags = []) {
23459
23499
  permCount = before - settings.permissions.allow.length;
23460
23500
  }
23461
23501
  if (!dryRun) {
23462
- writeFileSync9(settingsPath, JSON.stringify(settings, null, 2) + "\n");
23502
+ writeFileSync10(settingsPath, JSON.stringify(settings, null, 2) + "\n");
23463
23503
  }
23464
23504
  log("\u2713 Removed exe-os hooks from settings.json");
23465
23505
  if (permCount > 0) log(`\u2713 Removed ${permCount} MCP permission entries`);
@@ -23488,7 +23528,7 @@ async function runClaudeUninstall(flags = []) {
23488
23528
  }
23489
23529
  if (removedMcp) {
23490
23530
  if (!dryRun) {
23491
- writeFileSync9(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
23531
+ writeFileSync10(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
23492
23532
  }
23493
23533
  log("\u2713 Removed exe-os MCP server from claude.json");
23494
23534
  removed++;
@@ -23524,7 +23564,7 @@ async function runClaudeUninstall(flags = []) {
23524
23564
  const endIdx = content.indexOf(endMarker);
23525
23565
  if (startIdx !== -1 && endIdx !== -1) {
23526
23566
  const cleaned = (content.slice(0, startIdx) + content.slice(endIdx + endMarker.length)).replace(/\n{3,}/g, "\n\n").trim() + "\n";
23527
- if (!dryRun) writeFileSync9(claudeMdPath, cleaned);
23567
+ if (!dryRun) writeFileSync10(claudeMdPath, cleaned);
23528
23568
  log("\u2713 Removed orchestration block from CLAUDE.md");
23529
23569
  removed++;
23530
23570
  }
@@ -23576,7 +23616,7 @@ async function runClaudeUninstall(flags = []) {
23576
23616
  if (pSettings.permissions.allow.length < before) changed = true;
23577
23617
  }
23578
23618
  if (changed && !dryRun) {
23579
- writeFileSync9(projSettings, JSON.stringify(pSettings, null, 2) + "\n");
23619
+ writeFileSync10(projSettings, JSON.stringify(pSettings, null, 2) + "\n");
23580
23620
  }
23581
23621
  if (changed) projectCount++;
23582
23622
  } catch {
@@ -23590,10 +23630,10 @@ async function runClaudeUninstall(flags = []) {
23590
23630
  }
23591
23631
  }
23592
23632
  try {
23593
- const { execSync: execSync13 } = await import("child_process");
23633
+ const { execSync: execSync14 } = await import("child_process");
23594
23634
  const findExeBin3 = () => {
23595
23635
  try {
23596
- return execSync13(process.platform === "win32" ? "where exe-os" : "which exe-os", { encoding: "utf8" }).trim();
23636
+ return execSync14(process.platform === "win32" ? "where exe-os" : "which exe-os", { encoding: "utf8" }).trim();
23597
23637
  } catch {
23598
23638
  return null;
23599
23639
  }