@askexenow/exe-os 0.8.83 → 0.8.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.
Files changed (103) hide show
  1. package/dist/bin/backfill-conversations.js +746 -595
  2. package/dist/bin/backfill-responses.js +745 -594
  3. package/dist/bin/backfill-vectors.js +312 -226
  4. package/dist/bin/cleanup-stale-review-tasks.js +154 -21
  5. package/dist/bin/cli.js +14678 -12676
  6. package/dist/bin/exe-agent-config.js +242 -0
  7. package/dist/bin/exe-agent.js +100 -91
  8. package/dist/bin/exe-assign.js +1003 -854
  9. package/dist/bin/exe-boot.js +1420 -485
  10. package/dist/bin/exe-call.js +10 -0
  11. package/dist/bin/exe-cloud.js +29 -6
  12. package/dist/bin/exe-dispatch.js +572 -271
  13. package/dist/bin/exe-doctor.js +403 -6
  14. package/dist/bin/exe-export-behaviors.js +175 -72
  15. package/dist/bin/exe-forget.js +102 -3
  16. package/dist/bin/exe-gateway.js +796 -292
  17. package/dist/bin/exe-healthcheck.js +134 -1
  18. package/dist/bin/exe-heartbeat.js +172 -36
  19. package/dist/bin/exe-kill.js +175 -72
  20. package/dist/bin/exe-launch-agent.js +189 -76
  21. package/dist/bin/exe-link.js +927 -82
  22. package/dist/bin/exe-new-employee.js +60 -8
  23. package/dist/bin/exe-pending-messages.js +151 -19
  24. package/dist/bin/exe-pending-notifications.js +97 -2
  25. package/dist/bin/exe-pending-reviews.js +155 -22
  26. package/dist/bin/exe-rename.js +564 -23
  27. package/dist/bin/exe-review.js +231 -73
  28. package/dist/bin/exe-search.js +995 -228
  29. package/dist/bin/exe-session-cleanup.js +4930 -1664
  30. package/dist/bin/exe-settings.js +20 -5
  31. package/dist/bin/exe-start-codex.js +2598 -0
  32. package/dist/bin/exe-start.sh +15 -3
  33. package/dist/bin/exe-status.js +154 -21
  34. package/dist/bin/exe-team.js +97 -2
  35. package/dist/bin/git-sweep.js +1180 -363
  36. package/dist/bin/graph-backfill.js +175 -72
  37. package/dist/bin/graph-export.js +175 -72
  38. package/dist/bin/install.js +60 -7
  39. package/dist/bin/list-providers.js +1 -0
  40. package/dist/bin/scan-tasks.js +1185 -367
  41. package/dist/bin/setup.js +914 -270
  42. package/dist/bin/shard-migrate.js +175 -72
  43. package/dist/bin/update.js +1 -0
  44. package/dist/bin/wiki-sync.js +175 -72
  45. package/dist/gateway/index.js +792 -285
  46. package/dist/hooks/bug-report-worker.js +445 -135
  47. package/dist/hooks/commit-complete.js +1178 -361
  48. package/dist/hooks/error-recall.js +994 -228
  49. package/dist/hooks/ingest-worker.js +1799 -1234
  50. package/dist/hooks/ingest.js +3 -0
  51. package/dist/hooks/instructions-loaded.js +707 -97
  52. package/dist/hooks/notification.js +699 -89
  53. package/dist/hooks/post-compact.js +757 -109
  54. package/dist/hooks/pre-compact.js +1061 -244
  55. package/dist/hooks/pre-tool-use.js +787 -130
  56. package/dist/hooks/prompt-ingest-worker.js +242 -101
  57. package/dist/hooks/prompt-submit.js +1121 -299
  58. package/dist/hooks/response-ingest-worker.js +242 -101
  59. package/dist/hooks/session-end.js +4063 -397
  60. package/dist/hooks/session-start.js +1071 -254
  61. package/dist/hooks/stop.js +768 -120
  62. package/dist/hooks/subagent-stop.js +757 -109
  63. package/dist/hooks/summary-worker.js +1706 -1011
  64. package/dist/index.js +1821 -1098
  65. package/dist/lib/agent-config.js +167 -0
  66. package/dist/lib/cloud-sync.js +932 -88
  67. package/dist/lib/consolidation.js +2 -1
  68. package/dist/lib/database.js +642 -87
  69. package/dist/lib/db-daemon-client.js +503 -0
  70. package/dist/lib/device-registry.js +547 -7
  71. package/dist/lib/embedder.js +14 -28
  72. package/dist/lib/employee-templates.js +84 -74
  73. package/dist/lib/employees.js +9 -0
  74. package/dist/lib/exe-daemon-client.js +16 -29
  75. package/dist/lib/exe-daemon.js +2733 -1575
  76. package/dist/lib/hybrid-search.js +995 -228
  77. package/dist/lib/identity.js +87 -67
  78. package/dist/lib/keychain.js +9 -1
  79. package/dist/lib/messaging.js +103 -40
  80. package/dist/lib/reminders.js +91 -74
  81. package/dist/lib/runtime-table.js +16 -0
  82. package/dist/lib/schedules.js +96 -2
  83. package/dist/lib/session-wrappers.js +22 -0
  84. package/dist/lib/skill-learning.js +103 -85
  85. package/dist/lib/store.js +234 -73
  86. package/dist/lib/tasks.js +348 -134
  87. package/dist/lib/tmux-routing.js +422 -208
  88. package/dist/lib/token-spend.js +273 -0
  89. package/dist/lib/ws-client.js +11 -0
  90. package/dist/mcp/server.js +5742 -696
  91. package/dist/mcp/tools/complete-reminder.js +94 -77
  92. package/dist/mcp/tools/create-reminder.js +94 -77
  93. package/dist/mcp/tools/create-task.js +375 -152
  94. package/dist/mcp/tools/deactivate-behavior.js +95 -77
  95. package/dist/mcp/tools/list-reminders.js +94 -77
  96. package/dist/mcp/tools/list-tasks.js +99 -31
  97. package/dist/mcp/tools/send-message.js +108 -45
  98. package/dist/mcp/tools/update-task.js +162 -77
  99. package/dist/runtime/index.js +1075 -258
  100. package/dist/tui/App.js +1333 -506
  101. package/package.json +6 -1
  102. package/src/commands/exe/agent-config.md +27 -0
  103. package/src/commands/exe/cc-doctor.md +10 -0
@@ -107,6 +107,7 @@ __export(employees_exports, {
107
107
  DEFAULT_COORDINATOR_TEMPLATE_NAME: () => DEFAULT_COORDINATOR_TEMPLATE_NAME,
108
108
  EMPLOYEES_PATH: () => EMPLOYEES_PATH,
109
109
  addEmployee: () => addEmployee,
110
+ baseAgentName: () => baseAgentName,
110
111
  canCoordinate: () => canCoordinate,
111
112
  getCoordinatorEmployee: () => getCoordinatorEmployee,
112
113
  getCoordinatorName: () => getCoordinatorName,
@@ -203,6 +204,14 @@ function hasRole(agentName, role) {
203
204
  const emp = getEmployee(employees, agentName);
204
205
  return emp ? emp.role.toLowerCase() === role.toLowerCase() : false;
205
206
  }
207
+ function baseAgentName(name, employees) {
208
+ const match = name.match(/^([a-zA-Z]+)\d+$/);
209
+ if (!match) return name;
210
+ const base = match[1];
211
+ const roster = employees ?? loadEmployeesSync();
212
+ if (getEmployee(roster, base)) return base;
213
+ return name;
214
+ }
206
215
  function isMultiInstance(agentName, employees) {
207
216
  const roster = employees ?? loadEmployeesSync();
208
217
  const emp = getEmployee(roster, agentName);
@@ -476,19 +485,41 @@ async function registerMcpServer(packageRoot, homeDir = os4.homedir()) {
476
485
  args: [path4.join(packageRoot, "dist", "mcp", "server.js")],
477
486
  env: {}
478
487
  };
479
- const legacy = claudeJson.mcpServers[MCP_LEGACY_KEY];
480
- const current = claudeJson.mcpServers[MCP_PRIMARY_KEY];
481
- const currentMatches = current && JSON.stringify(current) === JSON.stringify(newEntry);
482
- if (currentMatches && !legacy) {
488
+ const currentMem = claudeJson.mcpServers[MCP_LEGACY_KEY];
489
+ const currentOs = claudeJson.mcpServers[MCP_PRIMARY_KEY];
490
+ const memMatches = currentMem && JSON.stringify(currentMem) === JSON.stringify(newEntry);
491
+ const osMatches = currentOs && JSON.stringify(currentOs) === JSON.stringify(newEntry);
492
+ if (memMatches && osMatches) {
493
+ await cleanSettingsJsonMcp(path4.join(homeDir, ".claude", "settings.json"));
483
494
  return false;
484
495
  }
496
+ claudeJson.mcpServers[MCP_LEGACY_KEY] = newEntry;
485
497
  claudeJson.mcpServers[MCP_PRIMARY_KEY] = newEntry;
486
- if (legacy) {
487
- delete claudeJson.mcpServers[MCP_LEGACY_KEY];
488
- }
489
498
  await writeFile3(claudeJsonPath, JSON.stringify(claudeJson, null, 2) + "\n");
499
+ await cleanSettingsJsonMcp(path4.join(homeDir, ".claude", "settings.json"));
490
500
  return true;
491
501
  }
502
+ async function cleanSettingsJsonMcp(settingsPath) {
503
+ if (!existsSync4(settingsPath)) return;
504
+ try {
505
+ const settings = JSON.parse(await readFile3(settingsPath, "utf-8"));
506
+ const servers = settings.mcpServers;
507
+ if (!servers) return;
508
+ let changed = false;
509
+ if (servers[MCP_PRIMARY_KEY]) {
510
+ delete servers[MCP_PRIMARY_KEY];
511
+ changed = true;
512
+ }
513
+ if (servers[MCP_LEGACY_KEY]) {
514
+ delete servers[MCP_LEGACY_KEY];
515
+ changed = true;
516
+ }
517
+ if (changed) {
518
+ await writeFile3(settingsPath, JSON.stringify(settings, null, 2) + "\n");
519
+ }
520
+ } catch {
521
+ }
522
+ }
492
523
  async function mergeHooks(packageRoot, homeDir = os4.homedir()) {
493
524
  const settingsPath = path4.join(homeDir, ".claude", "settings.json");
494
525
  let settings = {};
@@ -967,6 +998,28 @@ exec "${exeStartDst}" "$0" "$@"
967
998
  created++;
968
999
  }
969
1000
  }
1001
+ const codexLauncherCandidates = [
1002
+ path5.join(packageRoot, "dist", "bin", "exe-start-codex.js"),
1003
+ path5.join(packageRoot, "src", "bin", "exe-start-codex.ts")
1004
+ ];
1005
+ let codexLauncher = null;
1006
+ for (const c of codexLauncherCandidates) {
1007
+ if (existsSync5(c)) {
1008
+ codexLauncher = c;
1009
+ break;
1010
+ }
1011
+ }
1012
+ if (codexLauncher) {
1013
+ for (const emp of employees) {
1014
+ const wrapperPath = path5.join(binDir, `${emp.name}-codex`);
1015
+ const content = `#!/bin/bash
1016
+ exec node "${codexLauncher}" --agent ${emp.name} "$@"
1017
+ `;
1018
+ writeFileSync3(wrapperPath, content);
1019
+ chmodSync(wrapperPath, 493);
1020
+ created++;
1021
+ }
1022
+ }
970
1023
  const pathConfigured = ensurePath(home, binDir);
971
1024
  return { created, pathConfigured };
972
1025
  }
@@ -10,6 +10,7 @@ import { realpathSync } from "fs";
10
10
  import { fileURLToPath } from "url";
11
11
  function isMainModule(importMetaUrl) {
12
12
  if (process.argv[1] == null) return false;
13
+ if (process.argv[1].includes("mcp/server")) return false;
13
14
  try {
14
15
  const scriptPath = realpathSync(process.argv[1]);
15
16
  const modulePath = realpathSync(fileURLToPath(importMetaUrl));