@askexenow/exe-os 0.9.28 → 0.9.30

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
@@ -30264,8 +30264,7 @@ async function mergeCodexHooks(packageRoot, homeDir = os20.homedir()) {
30264
30264
  {
30265
30265
  type: "command",
30266
30266
  command: `node "${path45.join(packageRoot, "dist", "hooks", "session-start.js")}"${logSuffix}`,
30267
- timeout: 30,
30268
- statusMessage: "exe-os: loading memory brief"
30267
+ timeout: 30
30269
30268
  }
30270
30269
  ]
30271
30270
  },
@@ -30396,6 +30395,46 @@ status_line = [${DEFAULT_CODEX_STATUS_LINE.map((s) => `"${s}"`).join(", ")}]`;
30396
30395
  await writeFile9(configPath, content);
30397
30396
  return "installed";
30398
30397
  }
30398
+ function desiredCodexMcpSection(serverJsPath) {
30399
+ return [
30400
+ "[mcp_servers.exe-os]",
30401
+ `command = "node"`,
30402
+ `args = ["${serverJsPath}"]`,
30403
+ `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
30404
+ `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`,
30405
+ ""
30406
+ ].join("\n");
30407
+ }
30408
+ function reconcileCodexMcpSection(sectionContent, serverJsPath) {
30409
+ const desiredLines = {
30410
+ command: `command = "node"`,
30411
+ args: `args = ["${serverJsPath}"]`,
30412
+ startup: `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
30413
+ tool: `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`
30414
+ };
30415
+ let next = sectionContent;
30416
+ let changed = false;
30417
+ const replaceOrAppend = (regex, desired) => {
30418
+ if (regex.test(next)) {
30419
+ const updated = next.replace(regex, desired);
30420
+ if (updated !== next) {
30421
+ next = updated;
30422
+ changed = true;
30423
+ }
30424
+ return;
30425
+ }
30426
+ next = next.endsWith("\n") ? `${next}${desired}
30427
+ ` : `${next}
30428
+ ${desired}
30429
+ `;
30430
+ changed = true;
30431
+ };
30432
+ replaceOrAppend(/^command\s*=.*$/m, desiredLines.command);
30433
+ replaceOrAppend(/^args\s*=.*$/m, desiredLines.args);
30434
+ replaceOrAppend(/^startup_timeout_sec\s*=.*$/m, desiredLines.startup);
30435
+ replaceOrAppend(/^tool_timeout_sec\s*=.*$/m, desiredLines.tool);
30436
+ return { content: next, changed };
30437
+ }
30399
30438
  async function registerCodexMcpServer(packageRoot, homeDir = os20.homedir()) {
30400
30439
  const codexDir = path45.join(homeDir, ".codex");
30401
30440
  const configPath = path45.join(codexDir, "config.toml");
@@ -30412,21 +30451,15 @@ async function registerCodexMcpServer(packageRoot, homeDir = os20.homedir()) {
30412
30451
  const nextSectionMatch = afterHeader.match(/\n\[(?!mcp_servers\.exe-os)/);
30413
30452
  const sectionEnd = nextSectionMatch ? headerIndex + sectionHeader.length + nextSectionMatch.index : content.length;
30414
30453
  const sectionContent = content.slice(headerIndex, sectionEnd);
30415
- if (sectionContent.includes(serverJsPath)) {
30454
+ const reconciled = reconcileCodexMcpSection(sectionContent, serverJsPath);
30455
+ if (!reconciled.changed) {
30416
30456
  return "already-registered";
30417
30457
  }
30418
- const newSection2 = `${sectionHeader}
30419
- command = "node"
30420
- args = ["${serverJsPath}"]
30421
- `;
30422
- content = content.slice(0, headerIndex) + newSection2 + content.slice(sectionEnd);
30458
+ content = content.slice(0, headerIndex) + reconciled.content + content.slice(sectionEnd);
30423
30459
  await writeFile9(configPath, content);
30424
30460
  return "updated";
30425
30461
  }
30426
- const newSection = `[mcp_servers.exe-os]
30427
- command = "node"
30428
- args = ["${serverJsPath}"]
30429
- `;
30462
+ const newSection = desiredCodexMcpSection(serverJsPath);
30430
30463
  const separator = content.length > 0 && !content.endsWith("\n") ? "\n\n" : content.length > 0 ? "\n" : "";
30431
30464
  content = content + separator + newSection;
30432
30465
  await writeFile9(configPath, content);
@@ -30484,7 +30517,7 @@ async function runCodexInstaller(homeDir) {
30484
30517
  `
30485
30518
  );
30486
30519
  }
30487
- var DEFAULT_CODEX_STATUS_LINE;
30520
+ var DEFAULT_CODEX_STATUS_LINE, CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC, CODEX_EXE_MCP_TOOL_TIMEOUT_SEC;
30488
30521
  var init_installer3 = __esm({
30489
30522
  "src/adapters/codex/installer.ts"() {
30490
30523
  "use strict";
@@ -30498,6 +30531,8 @@ var init_installer3 = __esm({
30498
30531
  "run-state",
30499
30532
  "context-used"
30500
30533
  ];
30534
+ CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC = 30;
30535
+ CODEX_EXE_MCP_TOOL_TIMEOUT_SEC = 120;
30501
30536
  }
30502
30537
  });
30503
30538
 
@@ -3565,8 +3565,7 @@ async function mergeCodexHooks(packageRoot, homeDir = os10.homedir()) {
3565
3565
  {
3566
3566
  type: "command",
3567
3567
  command: `node "${path13.join(packageRoot, "dist", "hooks", "session-start.js")}"${logSuffix}`,
3568
- timeout: 30,
3569
- statusMessage: "exe-os: loading memory brief"
3568
+ timeout: 30
3570
3569
  }
3571
3570
  ]
3572
3571
  },
@@ -3697,6 +3696,46 @@ status_line = [${DEFAULT_CODEX_STATUS_LINE.map((s) => `"${s}"`).join(", ")}]`;
3697
3696
  await writeFile5(configPath, content);
3698
3697
  return "installed";
3699
3698
  }
3699
+ function desiredCodexMcpSection(serverJsPath) {
3700
+ return [
3701
+ "[mcp_servers.exe-os]",
3702
+ `command = "node"`,
3703
+ `args = ["${serverJsPath}"]`,
3704
+ `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
3705
+ `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`,
3706
+ ""
3707
+ ].join("\n");
3708
+ }
3709
+ function reconcileCodexMcpSection(sectionContent, serverJsPath) {
3710
+ const desiredLines = {
3711
+ command: `command = "node"`,
3712
+ args: `args = ["${serverJsPath}"]`,
3713
+ startup: `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
3714
+ tool: `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`
3715
+ };
3716
+ let next = sectionContent;
3717
+ let changed = false;
3718
+ const replaceOrAppend = (regex, desired) => {
3719
+ if (regex.test(next)) {
3720
+ const updated = next.replace(regex, desired);
3721
+ if (updated !== next) {
3722
+ next = updated;
3723
+ changed = true;
3724
+ }
3725
+ return;
3726
+ }
3727
+ next = next.endsWith("\n") ? `${next}${desired}
3728
+ ` : `${next}
3729
+ ${desired}
3730
+ `;
3731
+ changed = true;
3732
+ };
3733
+ replaceOrAppend(/^command\s*=.*$/m, desiredLines.command);
3734
+ replaceOrAppend(/^args\s*=.*$/m, desiredLines.args);
3735
+ replaceOrAppend(/^startup_timeout_sec\s*=.*$/m, desiredLines.startup);
3736
+ replaceOrAppend(/^tool_timeout_sec\s*=.*$/m, desiredLines.tool);
3737
+ return { content: next, changed };
3738
+ }
3700
3739
  async function registerCodexMcpServer(packageRoot, homeDir = os10.homedir()) {
3701
3740
  const codexDir = path13.join(homeDir, ".codex");
3702
3741
  const configPath = path13.join(codexDir, "config.toml");
@@ -3713,21 +3752,15 @@ async function registerCodexMcpServer(packageRoot, homeDir = os10.homedir()) {
3713
3752
  const nextSectionMatch = afterHeader.match(/\n\[(?!mcp_servers\.exe-os)/);
3714
3753
  const sectionEnd = nextSectionMatch ? headerIndex + sectionHeader.length + nextSectionMatch.index : content.length;
3715
3754
  const sectionContent = content.slice(headerIndex, sectionEnd);
3716
- if (sectionContent.includes(serverJsPath)) {
3755
+ const reconciled = reconcileCodexMcpSection(sectionContent, serverJsPath);
3756
+ if (!reconciled.changed) {
3717
3757
  return "already-registered";
3718
3758
  }
3719
- const newSection2 = `${sectionHeader}
3720
- command = "node"
3721
- args = ["${serverJsPath}"]
3722
- `;
3723
- content = content.slice(0, headerIndex) + newSection2 + content.slice(sectionEnd);
3759
+ content = content.slice(0, headerIndex) + reconciled.content + content.slice(sectionEnd);
3724
3760
  await writeFile5(configPath, content);
3725
3761
  return "updated";
3726
3762
  }
3727
- const newSection = `[mcp_servers.exe-os]
3728
- command = "node"
3729
- args = ["${serverJsPath}"]
3730
- `;
3763
+ const newSection = desiredCodexMcpSection(serverJsPath);
3731
3764
  const separator = content.length > 0 && !content.endsWith("\n") ? "\n\n" : content.length > 0 ? "\n" : "";
3732
3765
  content = content + separator + newSection;
3733
3766
  await writeFile5(configPath, content);
@@ -3785,7 +3818,7 @@ async function runCodexInstaller(homeDir) {
3785
3818
  `
3786
3819
  );
3787
3820
  }
3788
- var DEFAULT_CODEX_STATUS_LINE;
3821
+ var DEFAULT_CODEX_STATUS_LINE, CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC, CODEX_EXE_MCP_TOOL_TIMEOUT_SEC;
3789
3822
  var init_installer2 = __esm({
3790
3823
  "src/adapters/codex/installer.ts"() {
3791
3824
  "use strict";
@@ -3799,6 +3832,8 @@ var init_installer2 = __esm({
3799
3832
  "run-state",
3800
3833
  "context-used"
3801
3834
  ];
3835
+ CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC = 30;
3836
+ CODEX_EXE_MCP_TOOL_TIMEOUT_SEC = 120;
3802
3837
  }
3803
3838
  });
3804
3839
 
@@ -1454,8 +1454,7 @@ async function mergeCodexHooks(packageRoot, homeDir = os6.homedir()) {
1454
1454
  {
1455
1455
  type: "command",
1456
1456
  command: `node "${path8.join(packageRoot, "dist", "hooks", "session-start.js")}"${logSuffix}`,
1457
- timeout: 30,
1458
- statusMessage: "exe-os: loading memory brief"
1457
+ timeout: 30
1459
1458
  }
1460
1459
  ]
1461
1460
  },
@@ -1586,6 +1585,46 @@ status_line = [${DEFAULT_CODEX_STATUS_LINE.map((s) => `"${s}"`).join(", ")}]`;
1586
1585
  await writeFile4(configPath, content);
1587
1586
  return "installed";
1588
1587
  }
1588
+ function desiredCodexMcpSection(serverJsPath) {
1589
+ return [
1590
+ "[mcp_servers.exe-os]",
1591
+ `command = "node"`,
1592
+ `args = ["${serverJsPath}"]`,
1593
+ `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
1594
+ `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`,
1595
+ ""
1596
+ ].join("\n");
1597
+ }
1598
+ function reconcileCodexMcpSection(sectionContent, serverJsPath) {
1599
+ const desiredLines = {
1600
+ command: `command = "node"`,
1601
+ args: `args = ["${serverJsPath}"]`,
1602
+ startup: `startup_timeout_sec = ${CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC}`,
1603
+ tool: `tool_timeout_sec = ${CODEX_EXE_MCP_TOOL_TIMEOUT_SEC}`
1604
+ };
1605
+ let next = sectionContent;
1606
+ let changed = false;
1607
+ const replaceOrAppend = (regex, desired) => {
1608
+ if (regex.test(next)) {
1609
+ const updated = next.replace(regex, desired);
1610
+ if (updated !== next) {
1611
+ next = updated;
1612
+ changed = true;
1613
+ }
1614
+ return;
1615
+ }
1616
+ next = next.endsWith("\n") ? `${next}${desired}
1617
+ ` : `${next}
1618
+ ${desired}
1619
+ `;
1620
+ changed = true;
1621
+ };
1622
+ replaceOrAppend(/^command\s*=.*$/m, desiredLines.command);
1623
+ replaceOrAppend(/^args\s*=.*$/m, desiredLines.args);
1624
+ replaceOrAppend(/^startup_timeout_sec\s*=.*$/m, desiredLines.startup);
1625
+ replaceOrAppend(/^tool_timeout_sec\s*=.*$/m, desiredLines.tool);
1626
+ return { content: next, changed };
1627
+ }
1589
1628
  async function registerCodexMcpServer(packageRoot, homeDir = os6.homedir()) {
1590
1629
  const codexDir = path8.join(homeDir, ".codex");
1591
1630
  const configPath = path8.join(codexDir, "config.toml");
@@ -1602,21 +1641,15 @@ async function registerCodexMcpServer(packageRoot, homeDir = os6.homedir()) {
1602
1641
  const nextSectionMatch = afterHeader.match(/\n\[(?!mcp_servers\.exe-os)/);
1603
1642
  const sectionEnd = nextSectionMatch ? headerIndex + sectionHeader.length + nextSectionMatch.index : content.length;
1604
1643
  const sectionContent = content.slice(headerIndex, sectionEnd);
1605
- if (sectionContent.includes(serverJsPath)) {
1644
+ const reconciled = reconcileCodexMcpSection(sectionContent, serverJsPath);
1645
+ if (!reconciled.changed) {
1606
1646
  return "already-registered";
1607
1647
  }
1608
- const newSection2 = `${sectionHeader}
1609
- command = "node"
1610
- args = ["${serverJsPath}"]
1611
- `;
1612
- content = content.slice(0, headerIndex) + newSection2 + content.slice(sectionEnd);
1648
+ content = content.slice(0, headerIndex) + reconciled.content + content.slice(sectionEnd);
1613
1649
  await writeFile4(configPath, content);
1614
1650
  return "updated";
1615
1651
  }
1616
- const newSection = `[mcp_servers.exe-os]
1617
- command = "node"
1618
- args = ["${serverJsPath}"]
1619
- `;
1652
+ const newSection = desiredCodexMcpSection(serverJsPath);
1620
1653
  const separator = content.length > 0 && !content.endsWith("\n") ? "\n\n" : content.length > 0 ? "\n" : "";
1621
1654
  content = content + separator + newSection;
1622
1655
  await writeFile4(configPath, content);
@@ -1674,7 +1707,7 @@ async function runCodexInstaller(homeDir) {
1674
1707
  `
1675
1708
  );
1676
1709
  }
1677
- var DEFAULT_CODEX_STATUS_LINE;
1710
+ var DEFAULT_CODEX_STATUS_LINE, CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC, CODEX_EXE_MCP_TOOL_TIMEOUT_SEC;
1678
1711
  var init_installer2 = __esm({
1679
1712
  "src/adapters/codex/installer.ts"() {
1680
1713
  "use strict";
@@ -1688,6 +1721,8 @@ var init_installer2 = __esm({
1688
1721
  "run-state",
1689
1722
  "context-used"
1690
1723
  ];
1724
+ CODEX_EXE_MCP_STARTUP_TIMEOUT_SEC = 30;
1725
+ CODEX_EXE_MCP_TOOL_TIMEOUT_SEC = 120;
1691
1726
  }
1692
1727
  });
1693
1728
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.28",
3
+ "version": "0.9.30",
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",