@askexenow/exe-os 0.9.55 → 0.9.57

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 (46) hide show
  1. package/dist/bin/cleanup-stale-review-tasks.js +26 -8
  2. package/dist/bin/cli.js +15 -2
  3. package/dist/bin/exe-boot.js +267 -190
  4. package/dist/bin/exe-dispatch.js +182 -105
  5. package/dist/bin/exe-export-behaviors.js +7 -0
  6. package/dist/bin/exe-gateway.js +177 -100
  7. package/dist/bin/exe-heartbeat.js +38 -20
  8. package/dist/bin/exe-launch-agent.js +7 -0
  9. package/dist/bin/exe-new-employee.js +1 -1
  10. package/dist/bin/exe-pending-messages.js +50 -32
  11. package/dist/bin/exe-pending-notifications.js +53 -35
  12. package/dist/bin/exe-pending-reviews.js +55 -37
  13. package/dist/bin/exe-session-cleanup.js +168 -91
  14. package/dist/bin/exe-start-codex.js +8 -1
  15. package/dist/bin/exe-start-opencode.js +8 -1
  16. package/dist/bin/exe-status.js +26 -8
  17. package/dist/bin/git-sweep.js +184 -107
  18. package/dist/bin/install.js +1 -1
  19. package/dist/bin/intercom-check.js +170 -93
  20. package/dist/bin/scan-tasks.js +190 -113
  21. package/dist/gateway/index.js +166 -89
  22. package/dist/hooks/bug-report-worker.js +158 -81
  23. package/dist/hooks/codex-stop-task-finalizer.js +57 -39
  24. package/dist/hooks/commit-complete.js +182 -105
  25. package/dist/hooks/post-compact.js +50 -32
  26. package/dist/hooks/pre-compact.js +185 -108
  27. package/dist/hooks/pre-tool-use.js +71 -53
  28. package/dist/hooks/prompt-submit.js +176 -92
  29. package/dist/hooks/session-end.js +193 -116
  30. package/dist/hooks/session-start.js +53 -35
  31. package/dist/hooks/stop.js +62 -44
  32. package/dist/hooks/subagent-stop.js +50 -32
  33. package/dist/hooks/summary-worker.js +109 -91
  34. package/dist/index.js +205 -121
  35. package/dist/lib/exe-daemon.js +381 -304
  36. package/dist/lib/messaging.js +32 -14
  37. package/dist/lib/tasks.js +180 -103
  38. package/dist/lib/tmux-routing.js +180 -103
  39. package/dist/mcp/server.js +356 -279
  40. package/dist/mcp/tools/create-task.js +194 -117
  41. package/dist/mcp/tools/list-tasks.js +45 -27
  42. package/dist/mcp/tools/send-message.js +36 -18
  43. package/dist/mcp/tools/update-task.js +189 -112
  44. package/dist/runtime/index.js +191 -107
  45. package/dist/tui/App.js +228 -151
  46. package/package.json +1 -1
@@ -4885,10 +4885,27 @@ var init_plan_limits = __esm({
4885
4885
  }
4886
4886
  });
4887
4887
 
4888
- // src/lib/tmux-routing.ts
4889
- import { readFileSync as readFileSync9, writeFileSync as writeFileSync6, mkdirSync as mkdirSync5, existsSync as existsSync12, appendFileSync, readdirSync as readdirSync2 } from "fs";
4890
- import path13 from "path";
4888
+ // src/lib/agent-symlinks.ts
4891
4889
  import os9 from "os";
4890
+ import path13 from "path";
4891
+ import {
4892
+ existsSync as existsSync12,
4893
+ lstatSync,
4894
+ mkdirSync as mkdirSync5,
4895
+ readlinkSync as readlinkSync2,
4896
+ symlinkSync as symlinkSync2
4897
+ } from "fs";
4898
+ var init_agent_symlinks = __esm({
4899
+ "src/lib/agent-symlinks.ts"() {
4900
+ "use strict";
4901
+ init_employees();
4902
+ }
4903
+ });
4904
+
4905
+ // src/lib/tmux-routing.ts
4906
+ import { readFileSync as readFileSync9, writeFileSync as writeFileSync6, mkdirSync as mkdirSync6, existsSync as existsSync13, appendFileSync, readdirSync as readdirSync2 } from "fs";
4907
+ import path14 from "path";
4908
+ import os10 from "os";
4892
4909
  import { fileURLToPath as fileURLToPath2 } from "url";
4893
4910
  function getMySession() {
4894
4911
  return getTransport().getMySession();
@@ -4901,7 +4918,7 @@ function extractRootExe(name) {
4901
4918
  }
4902
4919
  function getParentExe(sessionKey) {
4903
4920
  try {
4904
- const data = JSON.parse(readFileSync9(path13.join(SESSION_CACHE, `parent-exe-${sessionKey}.json`), "utf8"));
4921
+ const data = JSON.parse(readFileSync9(path14.join(SESSION_CACHE, `parent-exe-${sessionKey}.json`), "utf8"));
4905
4922
  return data.parentExe || null;
4906
4923
  } catch {
4907
4924
  return null;
@@ -4944,10 +4961,11 @@ var init_tmux_routing = __esm({
4944
4961
  init_intercom_queue();
4945
4962
  init_plan_limits();
4946
4963
  init_employees();
4947
- SPAWN_LOCK_DIR = path13.join(os9.homedir(), ".exe-os", "spawn-locks");
4948
- SESSION_CACHE = path13.join(os9.homedir(), ".exe-os", "session-cache");
4949
- INTERCOM_LOG2 = path13.join(os9.homedir(), ".exe-os", "intercom.log");
4950
- DEBOUNCE_FILE = path13.join(SESSION_CACHE, "intercom-debounce.json");
4964
+ init_agent_symlinks();
4965
+ SPAWN_LOCK_DIR = path14.join(os10.homedir(), ".exe-os", "spawn-locks");
4966
+ SESSION_CACHE = path14.join(os10.homedir(), ".exe-os", "session-cache");
4967
+ INTERCOM_LOG2 = path14.join(os10.homedir(), ".exe-os", "intercom.log");
4968
+ DEBOUNCE_FILE = path14.join(SESSION_CACHE, "intercom-debounce.json");
4951
4969
  DEBOUNCE_CLEANUP_AGE_MS = 5 * 60 * 1e3;
4952
4970
  }
4953
4971
  });
package/dist/bin/cli.js CHANGED
@@ -1758,7 +1758,7 @@ These rules are injected by exe-os and override default behavior for multi-agent
1758
1758
  - **Session routing is deterministic.** When working in a coordinator session, ALL employee sessions use that same coordinator-session suffix. NEVER reference, consider, or dispatch to employee sessions from other project sessions. This is not a choice \u2014 it is a hard constraint.
1759
1759
  - **Always use create_task to assign work.** Never use messages, tmux send-keys, or ad-hoc instructions as a substitute for tasks.
1760
1760
  - **Never modify another agent's in-progress task.** Create a new task instead. Modifying active tasks causes race conditions.
1761
- - **Chain of command:** founder -> COO -> managers -> specialists. The COO does not bypass managers for specialist work.
1761
+ - **Chain of command:** founder -> coordinator/executive agent (internal routing slot may be "COO") -> managers -> specialists. The coordinator does not bypass managers for specialist work. Internal role labels are plumbing, not user-facing titles.
1762
1762
  - **Verify dispatch.** After every create_task, confirm the employee received and started the task via tmux capture-pane.
1763
1763
  ${EXE_SECTION_END}`;
1764
1764
  }
@@ -13361,7 +13361,19 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
13361
13361
  _resetCcAgentSupportCache();
13362
13362
  const hasAgentFlag = claudeSupportsAgentFlag();
13363
13363
  if (hasAgentFlag) {
13364
- identityFlag = ` --agent ${employeeName}`;
13364
+ const symlink = ensureAgentSymlink(employeeName);
13365
+ if (symlink.action === "created" || symlink.action === "already_correct") {
13366
+ identityFlag = ` --agent ${employeeName}`;
13367
+ } else if (existsSync24(identityPath2)) {
13368
+ identityFlag = ` --append-system-prompt-file ${identityPath2}`;
13369
+ legacyFallbackWarned = true;
13370
+ process.stderr.write(
13371
+ `[tmux-routing] WARN: ~/.claude/agents/${employeeName}.md is not the exe-os identity symlink (${symlink.conflict}). Using authoritative ${identityPath2} via --append-system-prompt-file.
13372
+ `
13373
+ );
13374
+ } else {
13375
+ identityFlag = ` --agent ${employeeName}`;
13376
+ }
13365
13377
  } else if (existsSync24(identityPath2)) {
13366
13378
  identityFlag = ` --append-system-prompt-file ${identityPath2}`;
13367
13379
  legacyFallbackWarned = true;
@@ -13550,6 +13562,7 @@ var init_tmux_routing = __esm({
13550
13562
  init_intercom_queue();
13551
13563
  init_plan_limits();
13552
13564
  init_employees();
13565
+ init_agent_symlinks();
13553
13566
  SPAWN_LOCK_DIR = path29.join(os15.homedir(), ".exe-os", "spawn-locks");
13554
13567
  SESSION_CACHE = path29.join(os15.homedir(), ".exe-os", "session-cache");
13555
13568
  BEHAVIORS_EXPORT_TIMEOUT_MS = 1e4;