@askexenow/exe-os 0.9.220 → 0.9.221

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 (133) hide show
  1. package/dist/{backfill-metadata-WFASPP6Y.js → backfill-metadata-AGHTEOOS.js} +1 -1
  2. package/dist/bin/agentic-ontology-backfill.js +1 -1
  3. package/dist/bin/agentic-reflection-backfill.js +1 -1
  4. package/dist/bin/agentic-semantic-label.js +1 -1
  5. package/dist/bin/backfill-conversations.js +1 -1
  6. package/dist/bin/backfill-responses.js +1 -1
  7. package/dist/bin/backfill-vectors.js +2 -2
  8. package/dist/bin/bulk-sync-postgres.js +1 -1
  9. package/dist/bin/cleanup-stale-review-tasks.js +2 -2
  10. package/dist/bin/cli.js +5 -5
  11. package/dist/bin/exe-assign.js +1 -1
  12. package/dist/bin/exe-boot.js +3 -3
  13. package/dist/bin/exe-dispatch.js +2 -2
  14. package/dist/bin/exe-doctor.js +1 -1
  15. package/dist/bin/exe-export-behaviors.js +2 -2
  16. package/dist/bin/exe-forget.js +3 -3
  17. package/dist/bin/exe-gateway.js +4 -4
  18. package/dist/bin/exe-heartbeat.js +2 -2
  19. package/dist/bin/exe-kill.js +3 -3
  20. package/dist/bin/exe-launch-agent.js +3 -3
  21. package/dist/bin/exe-pending-messages.js +3 -3
  22. package/dist/bin/exe-pending-notifications.js +2 -2
  23. package/dist/bin/exe-pending-reviews.js +2 -2
  24. package/dist/bin/exe-review.js +3 -3
  25. package/dist/bin/exe-search.js +2 -2
  26. package/dist/bin/exe-session-cleanup.js +5 -5
  27. package/dist/bin/exe-start-codex.js +1 -1
  28. package/dist/bin/exe-start-opencode.js +1 -1
  29. package/dist/bin/exe-status.js +3 -3
  30. package/dist/bin/exe-team.js +1 -1
  31. package/dist/bin/git-sweep.js +2 -2
  32. package/dist/bin/graph-backfill.js +1 -1
  33. package/dist/bin/graph-export.js +2 -2
  34. package/dist/bin/import-history.js +1 -1
  35. package/dist/bin/intercom-check.js +3 -3
  36. package/dist/bin/mcp-sessions.js +2 -2
  37. package/dist/bin/orchestration-metrics.js +1 -1
  38. package/dist/bin/scan-tasks.js +2 -2
  39. package/dist/bin/shard-migrate.js +1 -1
  40. package/dist/{capacity-monitor-HBSR35IL.js → capacity-monitor-BOAVNFBX.js} +2 -2
  41. package/dist/{catchup-brief-JSUYYPQ3.js → catchup-brief-H6GBODF6.js} +3 -3
  42. package/dist/{chunk-4SKD6TQ7.js → chunk-2H2XQJ62.js} +1 -1
  43. package/dist/{chunk-NO6PSA2A.js → chunk-3GUGE4K2.js} +1 -1
  44. package/dist/{chunk-NWNWETME.js → chunk-3YVPPYKT.js} +29 -29
  45. package/dist/{chunk-47AYA4NC.js → chunk-BRGUJ76G.js} +1 -1
  46. package/dist/{chunk-NU3NSUDL.js → chunk-DANQ4YE4.js} +1 -1
  47. package/dist/{chunk-LNRYYEGG.js → chunk-DBZI5HYX.js} +1 -1
  48. package/dist/{chunk-3IBL2IIP.js → chunk-EM7QXDC2.js} +4 -4
  49. package/dist/{chunk-TEF5NCBV.js → chunk-F65CKSBB.js} +1 -1
  50. package/dist/{chunk-Y7HLJSYI.js → chunk-FSIPRNGL.js} +1 -1
  51. package/dist/{chunk-GLSU6RYP.js → chunk-G3RJSRAS.js} +1 -1
  52. package/dist/{chunk-AVJGBAJR.js → chunk-GM2SXBIN.js} +3 -3
  53. package/dist/{chunk-ANNJ4GH5.js → chunk-GUY5C7LF.js} +1 -1
  54. package/dist/{chunk-BMWBBDHF.js → chunk-ILAG5VBR.js} +3 -3
  55. package/dist/{chunk-U3AATEDZ.js → chunk-LVAFZMP3.js} +2 -2
  56. package/dist/{chunk-R3HP5EZQ.js → chunk-NIXZDSJF.js} +1 -1
  57. package/dist/{chunk-ORYGKBVB.js → chunk-P5IPATUA.js} +89 -24
  58. package/dist/{chunk-6LDJZ6YC.js → chunk-QIWMGZOK.js} +2 -2
  59. package/dist/{chunk-LIOPFUTM.js → chunk-QJ2MGXFX.js} +2 -2
  60. package/dist/{chunk-LMLSZFPH.js → chunk-RA3NCLXH.js} +2 -2
  61. package/dist/{chunk-O4JHGHLZ.js → chunk-SQBRX5GZ.js} +3 -3
  62. package/dist/{chunk-OC2JSGTJ.js → chunk-SVBCHRGC.js} +1 -1
  63. package/dist/{chunk-FYK4QDZ6.js → chunk-X4L6SQU5.js} +1 -1
  64. package/dist/{chunk-6XWI25AO.js → chunk-X6UJ4CLH.js} +2 -2
  65. package/dist/{chunk-BXJCPGN3.js → chunk-XISG35R2.js} +1 -1
  66. package/dist/{chunk-SEV5S5AQ.js → chunk-YUHKC2X2.js} +17 -9
  67. package/dist/{crm-webhook-GD2UTF2H.js → crm-webhook-YQULRX7T.js} +2 -2
  68. package/dist/{cto-delegation-gate-5DEH7LAZ.js → cto-delegation-gate-YQ443YVD.js} +1 -1
  69. package/dist/{daemon-orchestration-FPHCMQX5.js → daemon-orchestration-KCIQTAGO.js} +3 -3
  70. package/dist/{exe-export-MFVCOY5E.js → exe-export-Q357HALA.js} +1 -1
  71. package/dist/{exe-import-XXOTZX6Y.js → exe-import-2BPJMJ6Z.js} +1 -1
  72. package/dist/{fast-db-init-MS7MJ2B2.js → fast-db-init-WF6BDZ46.js} +1 -1
  73. package/dist/gateway/index.js +5 -5
  74. package/dist/{git-task-sweep-QU4Y5RHC.js → git-task-sweep-FUOVATSV.js} +2 -2
  75. package/dist/hooks/bug-report-worker.js +3 -3
  76. package/dist/hooks/codex-stop-task-finalizer.js +3 -3
  77. package/dist/hooks/commit-complete.js +4 -4
  78. package/dist/hooks/error-recall.js +2 -2
  79. package/dist/hooks/ingest.js +2 -2
  80. package/dist/hooks/instructions-loaded.js +1 -1
  81. package/dist/hooks/manifest.json +18 -18
  82. package/dist/hooks/notification.js +1 -1
  83. package/dist/hooks/post-compact.js +2 -2
  84. package/dist/hooks/post-tool-combined.js +2 -2
  85. package/dist/hooks/pre-compact.js +3 -3
  86. package/dist/hooks/pre-tool-use.js +28 -21
  87. package/dist/hooks/prompt-submit.js +8 -8
  88. package/dist/hooks/session-end.js +4 -4
  89. package/dist/hooks/session-start.js +5 -5
  90. package/dist/hooks/stop.js +5 -5
  91. package/dist/hooks/subagent-stop.js +2 -2
  92. package/dist/hooks/summary-worker.js +5 -5
  93. package/dist/{import-conversations-K7HNDJN7.js → import-conversations-O3BGXQQH.js} +2 -2
  94. package/dist/index.js +8 -8
  95. package/dist/lib/consolidation.js +2 -2
  96. package/dist/lib/exe-daemon.js +14 -14
  97. package/dist/lib/hybrid-search.js +2 -2
  98. package/dist/lib/messaging.js +2 -2
  99. package/dist/lib/schedules.js +2 -2
  100. package/dist/lib/store.js +1 -1
  101. package/dist/lib/tasks.js +2 -2
  102. package/dist/lib/tmux-routing.js +1 -1
  103. package/dist/mcp/register-tools.js +22 -22
  104. package/dist/mcp/server.js +23 -23
  105. package/dist/mcp/tools/create-task.js +3 -3
  106. package/dist/mcp/tools/list-tasks.js +3 -3
  107. package/dist/mcp/tools/send-message.js +3 -3
  108. package/dist/mcp/tools/update-task.js +3 -3
  109. package/dist/{notifications-2RAIJMID.js → notifications-WDAAZ6FP.js} +1 -1
  110. package/dist/{orchestrator-BOSGXSGR.js → orchestrator-CZYRJJDL.js} +2 -2
  111. package/dist/{reranker-HN6E3YET.js → reranker-EZRCPPL4.js} +1 -1
  112. package/dist/{review-polling-6ALBGRQM.js → review-polling-W32O7SNH.js} +2 -2
  113. package/dist/runtime/index.js +3 -3
  114. package/dist/{session-events-7RWZYWPX.js → session-events-AKRECMTQ.js} +2 -2
  115. package/dist/{session-scope-2TPIWVAK.js → session-scope-QCZEPEZ7.js} +1 -1
  116. package/dist/{task-enforcement-2QFS3YYE.js → task-enforcement-PYP4NBI2.js} +1 -1
  117. package/dist/{task-scope-HHNLGA7M.js → task-scope-IAIAQNYB.js} +1 -1
  118. package/dist/{tasks-crud-T4HZTUEJ.js → tasks-crud-M7YVS5F3.js} +1 -1
  119. package/dist/{tasks-review-YHRQHOI3.js → tasks-review-HNNUT3QB.js} +1 -1
  120. package/dist/tui/App.js +7 -7
  121. package/dist/{tui-data-NEJQFARB.js → tui-data-UCFTP4HZ.js} +1 -1
  122. package/dist/{worker-gate-FWMGWC6D.js → worker-gate-WES7AMDA.js} +1 -1
  123. package/dist/{workflow-engine-YI2GCCWL.js → workflow-engine-ZHWSK4BG.js} +2 -2
  124. package/package.json +1 -1
  125. package/release-notes.json +64 -64
  126. /package/dist/{chunk-TEFFJZGT.js → chunk-6MMKWEGK.js} +0 -0
  127. /package/dist/{chunk-YDE4RYQF.js → chunk-HR4WG32E.js} +0 -0
  128. /package/dist/{chunk-S6OEMZ76.js → chunk-NJR54FIF.js} +0 -0
  129. /package/dist/{chunk-MOM2Z2QO.js → chunk-QBPEJKJ2.js} +0 -0
  130. /package/dist/{chunk-3L2RG3ZB.js → chunk-UHMLXFZC.js} +0 -0
  131. /package/dist/{core-memory-ZML3QGOE.js → core-memory-XQKOWOID.js} +0 -0
  132. /package/dist/{exe-key-MGIZ2LCZ.js → exe-key-DVU3FQ3N.js} +0 -0
  133. /package/dist/{skill-refinement-JH3EF5GK.js → skill-refinement-OIPE7QNX.js} +0 -0
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-3IBL2IIP.js";
4
- import "./chunk-S6OEMZ76.js";
3
+ } from "./chunk-EM7QXDC2.js";
4
+ import "./chunk-NJR54FIF.js";
5
5
  import "./chunk-CHCA3ZM2.js";
6
6
  import "./chunk-MLCYKSTC.js";
7
7
  import "./chunk-F7LU65PQ.js";
8
8
  import {
9
9
  sessionScopeFilter,
10
10
  strictSessionScopeFilter
11
- } from "./chunk-SEV5S5AQ.js";
11
+ } from "./chunk-YUHKC2X2.js";
12
12
  import "./chunk-X3ZMMUTS.js";
13
13
  import "./chunk-QI4IXJN7.js";
14
14
  import "./chunk-GKEEC3P7.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-TEF5NCBV.js";
3
+ } from "./chunk-F65CKSBB.js";
4
4
  import {
5
5
  getActiveAgent
6
6
  } from "./chunk-EFDIUJWC.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  vectorToBlob
3
- } from "./chunk-S6OEMZ76.js";
3
+ } from "./chunk-NJR54FIF.js";
4
4
  import {
5
5
  extractKeywords,
6
6
  keywordsToString
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  listRecentSessionEvents
3
- } from "./chunk-ANNJ4GH5.js";
3
+ } from "./chunk-GUY5C7LF.js";
4
4
  import {
5
5
  AUTO_WAKE_MAX_RETRIES
6
- } from "./chunk-AVJGBAJR.js";
6
+ } from "./chunk-GM2SXBIN.js";
7
7
  import {
8
8
  isRerankerAvailable,
9
9
  rerankWithScores
10
- } from "./chunk-3L2RG3ZB.js";
10
+ } from "./chunk-UHMLXFZC.js";
11
11
  import {
12
12
  getEntityByName,
13
13
  getEntityNeighbors,
@@ -45,7 +45,7 @@ import {
45
45
  } from "./chunk-OFPDYF24.js";
46
46
  import {
47
47
  registerImportConversations
48
- } from "./chunk-OC2JSGTJ.js";
48
+ } from "./chunk-SVBCHRGC.js";
49
49
  import {
50
50
  runDriftProbes
51
51
  } from "./chunk-J3GQXXQR.js";
@@ -55,10 +55,10 @@ import {
55
55
  } from "./chunk-XHTOAJYD.js";
56
56
  import {
57
57
  createOrRefreshResumeTask
58
- } from "./chunk-FYK4QDZ6.js";
58
+ } from "./chunk-X4L6SQU5.js";
59
59
  import {
60
60
  registerUpdateTask
61
- } from "./chunk-LIOPFUTM.js";
61
+ } from "./chunk-QJ2MGXFX.js";
62
62
  import {
63
63
  registerCreateReminder
64
64
  } from "./chunk-BXQCL72Y.js";
@@ -78,13 +78,13 @@ import {
78
78
  } from "./chunk-A74RTD5M.js";
79
79
  import {
80
80
  registerSendMessage
81
- } from "./chunk-4SKD6TQ7.js";
81
+ } from "./chunk-2H2XQJ62.js";
82
82
  import {
83
83
  registerCreateTask
84
- } from "./chunk-ORYGKBVB.js";
84
+ } from "./chunk-P5IPATUA.js";
85
85
  import {
86
86
  registerListTasks
87
- } from "./chunk-NU3NSUDL.js";
87
+ } from "./chunk-DANQ4YE4.js";
88
88
  import {
89
89
  TOKENS_PER_IDLE_MINUTE,
90
90
  countKillsSince,
@@ -93,10 +93,10 @@ import {
93
93
  import {
94
94
  createSchedule,
95
95
  parseHumanCron
96
- } from "./chunk-BXJCPGN3.js";
96
+ } from "./chunk-XISG35R2.js";
97
97
  import {
98
98
  status
99
- } from "./chunk-6XWI25AO.js";
99
+ } from "./chunk-X6UJ4CLH.js";
100
100
  import {
101
101
  getAgentSpend
102
102
  } from "./chunk-MPWYUOB7.js";
@@ -115,7 +115,7 @@ import {
115
115
  fixShards,
116
116
  formatReport,
117
117
  runAudit
118
- } from "./chunk-U3AATEDZ.js";
118
+ } from "./chunk-LVAFZMP3.js";
119
119
  import {
120
120
  runHealthCheck
121
121
  } from "./chunk-RAV23DU2.js";
@@ -160,7 +160,7 @@ import {
160
160
  groupMemories,
161
161
  runConsolidation,
162
162
  selectUnconsolidated
163
- } from "./chunk-NO6PSA2A.js";
163
+ } from "./chunk-3GUGE4K2.js";
164
164
  import {
165
165
  embed
166
166
  } from "./chunk-OUHHUKPC.js";
@@ -171,17 +171,17 @@ import {
171
171
  } from "./chunk-GD4VXNXO.js";
172
172
  import {
173
173
  updateTask
174
- } from "./chunk-BMWBBDHF.js";
174
+ } from "./chunk-ILAG5VBR.js";
175
175
  import {
176
176
  fastDbInit
177
- } from "./chunk-YDE4RYQF.js";
177
+ } from "./chunk-HR4WG32E.js";
178
178
  import {
179
179
  MAX_CONCURRENT_WORKERS
180
- } from "./chunk-47AYA4NC.js";
180
+ } from "./chunk-BRGUJ76G.js";
181
181
  import {
182
182
  hybridSearch,
183
183
  recentRecords
184
- } from "./chunk-3IBL2IIP.js";
184
+ } from "./chunk-EM7QXDC2.js";
185
185
  import {
186
186
  attachDocumentMetadata,
187
187
  flushBatch,
@@ -189,7 +189,7 @@ import {
189
189
  reserveVersions,
190
190
  vectorToBlob,
191
191
  writeMemory
192
- } from "./chunk-S6OEMZ76.js";
192
+ } from "./chunk-NJR54FIF.js";
193
193
  import {
194
194
  getActiveAgent
195
195
  } from "./chunk-EFDIUJWC.js";
@@ -200,7 +200,7 @@ import {
200
200
  sessionScopeFilter,
201
201
  updateTaskStatus,
202
202
  writeCheckpoint
203
- } from "./chunk-SEV5S5AQ.js";
203
+ } from "./chunk-YUHKC2X2.js";
204
204
  import {
205
205
  listSessions
206
206
  } from "./chunk-GKEEC3P7.js";
@@ -236,7 +236,7 @@ import {
236
236
  isScheduledTrigger,
237
237
  loadTriggers,
238
238
  sanitizeParam
239
- } from "./chunk-TEFFJZGT.js";
239
+ } from "./chunk-6MMKWEGK.js";
240
240
  import {
241
241
  pushConversationToCRM
242
242
  } from "./chunk-ONKIWA3R.js";
@@ -1571,7 +1571,7 @@ function registerMemory(server) {
1571
1571
  if (action === "core_get" || action === "core_set" || action === "core_delete") {
1572
1572
  const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-YNZ7YA74.js");
1573
1573
  const { agentId } = getActiveAgent2();
1574
- const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-ZML3QGOE.js");
1574
+ const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-XQKOWOID.js");
1575
1575
  if (action === "core_get") {
1576
1576
  const entries = await getCoreMemory(agentId);
1577
1577
  const block = formatCoreMemoryBlock(entries);
@@ -2296,7 +2296,7 @@ function registerResumeEmployee(server) {
2296
2296
  };
2297
2297
  }
2298
2298
  try {
2299
- const { isTmuxSessionAlive } = await import("./tasks-crud-T4HZTUEJ.js");
2299
+ const { isTmuxSessionAlive } = await import("./tasks-crud-M7YVS5F3.js");
2300
2300
  const now = (/* @__PURE__ */ new Date()).toISOString();
2301
2301
  for (const row of openTasks.rows) {
2302
2302
  const status2 = String(row.status);
@@ -2324,7 +2324,7 @@ function registerResumeEmployee(server) {
2324
2324
  }
2325
2325
  let checkpointInfo = "";
2326
2326
  try {
2327
- const { readLatestCheckpoint } = await import("./tasks-crud-T4HZTUEJ.js");
2327
+ const { readLatestCheckpoint } = await import("./tasks-crud-M7YVS5F3.js");
2328
2328
  const checkpoint = await readLatestCheckpoint(agent_id);
2329
2329
  if (checkpoint) {
2330
2330
  const filesTouched = checkpoint.files_touched?.length > 0 ? checkpoint.files_touched.join(", ") : "none";
@@ -2684,7 +2684,7 @@ function registerTask(server) {
2684
2684
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.create_group);
2685
2685
  if (missing2.length > 0) return errorResult2(`task action "create_group" missing required field(s): ${missing2.join(", ")}`);
2686
2686
  try {
2687
- const { createTaskGroup } = await import("./tasks-crud-T4HZTUEJ.js");
2687
+ const { createTaskGroup } = await import("./tasks-crud-M7YVS5F3.js");
2688
2688
  const group = await createTaskGroup({
2689
2689
  title: args.title,
2690
2690
  coordinator: args.coordinator,
@@ -2703,7 +2703,7 @@ function registerTask(server) {
2703
2703
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_status);
2704
2704
  if (missing2.length > 0) return errorResult2(`task action "group_status" missing required field(s): ${missing2.join(", ")}`);
2705
2705
  try {
2706
- const { getGroupStatus } = await import("./tasks-crud-T4HZTUEJ.js");
2706
+ const { getGroupStatus } = await import("./tasks-crud-M7YVS5F3.js");
2707
2707
  const status2 = await getGroupStatus(args.group_id);
2708
2708
  return { content: [{ type: "text", text: JSON.stringify(status2, null, 2) }] };
2709
2709
  } catch (err) {
@@ -2715,7 +2715,7 @@ function registerTask(server) {
2715
2715
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_results);
2716
2716
  if (missing2.length > 0) return errorResult2(`task action "group_results" missing required field(s): ${missing2.join(", ")}`);
2717
2717
  try {
2718
- const { getGroupResults } = await import("./tasks-crud-T4HZTUEJ.js");
2718
+ const { getGroupResults } = await import("./tasks-crud-M7YVS5F3.js");
2719
2719
  const results = await getGroupResults(args.group_id);
2720
2720
  return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] };
2721
2721
  } catch (err) {
@@ -5640,7 +5640,7 @@ async function getAgentSessionLoad() {
5640
5640
  return { sessions: [], totalLive: 0, busySessions: 0, idleSessions: 0 };
5641
5641
  }
5642
5642
  const { getClient: getClient2 } = await import("./lib/database.js");
5643
- const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-HHNLGA7M.js");
5643
+ const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-IAIAQNYB.js");
5644
5644
  const client = getClient2();
5645
5645
  const scope = sessionScopeFilter2();
5646
5646
  for (const s of liveAgentSessions) {
@@ -9835,7 +9835,7 @@ function registerWorkflowTool(server) {
9835
9835
  getWorkflowInstance,
9836
9836
  listWorkflowInstances,
9837
9837
  approveWorkflowStep
9838
- } = await import("./workflow-engine-YI2GCCWL.js");
9838
+ } = await import("./workflow-engine-ZHWSK4BG.js");
9839
9839
  try {
9840
9840
  switch (input.action) {
9841
9841
  case "create_workflow": {
@@ -12130,7 +12130,7 @@ function registerAllTools(server, license, hasKey) {
12130
12130
  if (license && !isToolAllowedForPlan(name, license.plan)) return;
12131
12131
  fn(server);
12132
12132
  };
12133
- const mcpToolSurface = process.env.EXE_MCP_TOOL_SURFACE ?? "legacy";
12133
+ const mcpToolSurface = process.env.EXE_MCP_TOOL_SURFACE ?? "consolidated";
12134
12134
  const exposeConsolidatedTasks = mcpToolSurface === "both" || mcpToolSurface === "consolidated";
12135
12135
  const exposeLegacyTasks = mcpToolSurface !== "consolidated";
12136
12136
  const exposeConsolidatedMemory = mcpToolSurface === "both" || mcpToolSurface === "consolidated";
@@ -111,7 +111,7 @@ function releaseBackfillLock() {
111
111
  }
112
112
  async function getTaskAwareCapacity() {
113
113
  const { getClient } = await import("./lib/database.js");
114
- const { sessionScopeFilter } = await import("./task-scope-HHNLGA7M.js");
114
+ const { sessionScopeFilter } = await import("./task-scope-IAIAQNYB.js");
115
115
  const client = getClient();
116
116
  const scope = sessionScopeFilter();
117
117
  const result = await client.execute({
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-EFDIUJWC.js";
4
4
  import {
5
5
  listTasks
6
- } from "./chunk-SEV5S5AQ.js";
6
+ } from "./chunk-YUHKC2X2.js";
7
7
 
8
8
  // src/mcp/tools/list-tasks.ts
9
9
  import { z } from "zod";
@@ -9,7 +9,7 @@ import {
9
9
  isEmployeeAlive,
10
10
  sessionScopeFilter,
11
11
  updateTaskStatus
12
- } from "./chunk-SEV5S5AQ.js";
12
+ } from "./chunk-YUHKC2X2.js";
13
13
  import {
14
14
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
15
15
  getCoordinatorName
@@ -3,7 +3,7 @@ import {
3
3
  buildRawVisibilityFilter,
4
4
  buildWikiScopeFilter,
5
5
  searchMemories
6
- } from "./chunk-S6OEMZ76.js";
6
+ } from "./chunk-NJR54FIF.js";
7
7
  import {
8
8
  getClient
9
9
  } from "./chunk-A77WVNU2.js";
@@ -237,7 +237,7 @@ async function hybridSearch(queryText, agentId, options) {
237
237
  let rerankerAvailable = false;
238
238
  if (process.env.EXE_IS_DAEMON === "1") {
239
239
  try {
240
- const { isRerankerAvailable } = await import("./reranker-HN6E3YET.js");
240
+ const { isRerankerAvailable } = await import("./reranker-EZRCPPL4.js");
241
241
  rerankerAvailable = isRerankerAvailable();
242
242
  } catch {
243
243
  }
@@ -401,7 +401,7 @@ async function hybridSearch(queryText, agentId, options) {
401
401
  try {
402
402
  let rerankedRecords;
403
403
  if (graphContextMap.size > 0) {
404
- const { rerankWithContext } = await import("./reranker-HN6E3YET.js");
404
+ const { rerankWithContext } = await import("./reranker-EZRCPPL4.js");
405
405
  const candidates = merged.map((m) => ({
406
406
  text: m.raw_text,
407
407
  context: graphContextMap.get(m.id)
@@ -409,7 +409,7 @@ async function hybridSearch(queryText, agentId, options) {
409
409
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
410
410
  rerankedRecords = scored.map((s) => merged[s.index]);
411
411
  } else {
412
- const { rerank } = await import("./reranker-HN6E3YET.js");
412
+ const { rerank } = await import("./reranker-EZRCPPL4.js");
413
413
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
414
414
  }
415
415
  if (rerankedRecords.length > 0) {
@@ -4,7 +4,7 @@ import {
4
4
  resolveExeSession,
5
5
  sendIntercom,
6
6
  strictSessionScopeFilter
7
- } from "./chunk-SEV5S5AQ.js";
7
+ } from "./chunk-YUHKC2X2.js";
8
8
  import {
9
9
  recordOrchestrationEventBestEffort
10
10
  } from "./chunk-OV2DYWB6.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeAction,
3
3
  substituteTemplate
4
- } from "./chunk-TEFFJZGT.js";
4
+ } from "./chunk-6MMKWEGK.js";
5
5
 
6
6
  // src/automation/workflow-engine.ts
7
7
  import { randomUUID } from "crypto";
@@ -2,7 +2,7 @@ import {
2
2
  listWorkflowDefinitions,
3
3
  runWorkflow,
4
4
  startWorkflow
5
- } from "./chunk-Y7HLJSYI.js";
5
+ } from "./chunk-FSIPRNGL.js";
6
6
  import {
7
7
  initCRMBridge
8
8
  } from "./chunk-ONKIWA3R.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-IC6NXF2N.js";
4
4
  import {
5
5
  updateTask
6
- } from "./chunk-BMWBBDHF.js";
6
+ } from "./chunk-ILAG5VBR.js";
7
7
  import {
8
8
  ensureEmployee,
9
9
  extractRootExe,
@@ -14,7 +14,7 @@ import {
14
14
  sessionScopeFilter,
15
15
  strictSessionScopeFilter,
16
16
  writeNotification
17
- } from "./chunk-SEV5S5AQ.js";
17
+ } from "./chunk-YUHKC2X2.js";
18
18
  import {
19
19
  queueIntercom
20
20
  } from "./chunk-QI4IXJN7.js";
@@ -1796,7 +1796,7 @@ async function gcStaleCheckpoints() {
1796
1796
  }
1797
1797
  async function pollTaskGroupBarriers() {
1798
1798
  try {
1799
- const { checkAndFireBarriers } = await import("./tasks-crud-T4HZTUEJ.js");
1799
+ const { checkAndFireBarriers } = await import("./tasks-crud-M7YVS5F3.js");
1800
1800
  const firedGroupIds = await checkAndFireBarriers();
1801
1801
  if (firedGroupIds.length === 0) return 0;
1802
1802
  const { getClient } = await import("./lib/database.js");
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getCurrentSessionScope,
3
3
  strictSessionScopeFilter
4
- } from "./chunk-SEV5S5AQ.js";
4
+ } from "./chunk-YUHKC2X2.js";
5
5
  import {
6
6
  getProjectName
7
7
  } from "./chunk-OPU3NYOO.js";
@@ -11,7 +11,7 @@ import {
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus,
13
13
  writeNotification
14
- } from "./chunk-SEV5S5AQ.js";
14
+ } from "./chunk-YUHKC2X2.js";
15
15
  import {
16
16
  getTransport
17
17
  } from "./chunk-MVW62NIZ.js";
@@ -159,7 +159,7 @@ async function dispatchTaskToEmployee(input) {
159
159
  let crossProject = false;
160
160
  if (input.projectName) {
161
161
  try {
162
- const { assertSessionScope } = await import("./session-scope-2TPIWVAK.js");
162
+ const { assertSessionScope } = await import("./session-scope-QCZEPEZ7.js");
163
163
  const check = assertSessionScope("dispatch_task", input.projectName);
164
164
  if (check.reason === "cross_session_denied") {
165
165
  crossProject = true;
@@ -500,7 +500,7 @@ async function updateTask(input) {
500
500
  await markTaskNotificationsRead(taskFile);
501
501
  if (input.status === "needs_review" && !isCoordinator) {
502
502
  try {
503
- const { writeNotification: writeNotification2 } = await import("./notifications-2RAIJMID.js");
503
+ const { writeNotification: writeNotification2 } = await import("./notifications-WDAAZ6FP.js");
504
504
  await writeNotification2({
505
505
  agentId: String(row.assigned_to),
506
506
  agentRole: String(row.assigned_to),
@@ -859,7 +859,7 @@ function formatReport(report, flags) {
859
859
  return lines.join("\n");
860
860
  }
861
861
  async function fixNullVectors() {
862
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-FWMGWC6D.js");
862
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-WES7AMDA.js");
863
863
  if (!tryAcquireWorkerSlot()) {
864
864
  process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
865
865
  await new Promise((r) => setTimeout(r, 5e3));
@@ -982,7 +982,7 @@ function splitAtSentences(text, maxChunkSize) {
982
982
  }
983
983
  async function main(argv = process.argv.slice(2)) {
984
984
  const flags = parseFlags(argv);
985
- const { fastDbInit } = await import("./fast-db-init-MS7MJ2B2.js");
985
+ const { fastDbInit } = await import("./fast-db-init-WF6BDZ46.js");
986
986
  const client = await fastDbInit();
987
987
  const report = await runAudit(client, flags);
988
988
  console.log(formatReport(report, flags));
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-TEFFJZGT.js";
3
+ } from "./chunk-6MMKWEGK.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-MLXJ5EZG.js";
4
4
  import {
5
5
  createTask
6
- } from "./chunk-BMWBBDHF.js";
6
+ } from "./chunk-ILAG5VBR.js";
7
7
  import {
8
8
  getActiveAgent
9
9
  } from "./chunk-EFDIUJWC.js";
@@ -11,7 +11,7 @@ import {
11
11
  ensureEmployee,
12
12
  logTaskDispatch,
13
13
  resolveExeSession
14
- } from "./chunk-SEV5S5AQ.js";
14
+ } from "./chunk-YUHKC2X2.js";
15
15
  import {
16
16
  recordOrchestrationEventBestEffort
17
17
  } from "./chunk-OV2DYWB6.js";
@@ -31,8 +31,50 @@ import {
31
31
  // src/mcp/tools/create-task.ts
32
32
  import { z } from "zod";
33
33
  import { existsSync, writeFileSync, mkdirSync } from "fs";
34
- import { join } from "path";
34
+ import { basename, join } from "path";
35
35
  import { homedir } from "os";
36
+ function rootFromSessionName(sessionName) {
37
+ const raw = (sessionName ?? "").trim();
38
+ if (!raw) return "";
39
+ const lastDash = raw.lastIndexOf("-");
40
+ return lastDash >= 0 ? raw.slice(lastDash + 1) : raw;
41
+ }
42
+ function isRootSessionName(sessionName) {
43
+ return sessionName.length > 0 && !sessionName.includes("-");
44
+ }
45
+ function projectDirMatches(projectDir, projectName) {
46
+ const dirBasename = basename(projectDir).toLowerCase();
47
+ const normalizedProject = projectName.toLowerCase();
48
+ return dirBasename === normalizedProject || dirBasename === normalizedProject.replace(/^exe-/, "") || `exe-${dirBasename}` === normalizedProject || projectDir.toLowerCase().includes(normalizedProject);
49
+ }
50
+ async function listCoordinatorRoots() {
51
+ const roots = /* @__PURE__ */ new Set();
52
+ try {
53
+ const { listSessions } = await import("./lib/session-registry.js");
54
+ for (const session of listSessions()) {
55
+ if (isRootSessionName(session.windowName)) roots.add(session.windowName);
56
+ }
57
+ } catch {
58
+ }
59
+ try {
60
+ const { listTmuxSessions } = await import("./lib/tmux-status.js");
61
+ for (const sessionName of listTmuxSessions()) {
62
+ if (isRootSessionName(sessionName) && /^exe\d*$/i.test(sessionName)) roots.add(sessionName);
63
+ }
64
+ } catch {
65
+ }
66
+ return [...roots].sort();
67
+ }
68
+ async function inferCoordinatorRootForProject(projectName) {
69
+ try {
70
+ const liveRoots = new Set(await listCoordinatorRoots());
71
+ const { listSessions } = await import("./lib/session-registry.js");
72
+ const matches = listSessions().filter((session) => isRootSessionName(session.windowName)).filter((session) => !liveRoots.size || liveRoots.has(session.windowName)).filter((session) => session.projectDir && existsSync(session.projectDir)).filter((session) => projectDirMatches(session.projectDir, projectName)).map((session) => session.windowName);
73
+ return [...new Set(matches)].length === 1 ? matches[0] : "";
74
+ } catch {
75
+ return "";
76
+ }
77
+ }
36
78
  function resolveDispatchRuntime(agentId, override) {
37
79
  if (override) return override;
38
80
  try {
@@ -50,14 +92,11 @@ async function resolveProjectDir(projectName, callerSession) {
50
92
  const coordName = callerSession.includes("-") ? callerSession.slice(callerSession.indexOf("-") + 1) : callerSession;
51
93
  const coordSession = sessions.find((s) => s.windowName === coordName) ?? sessions.find((s) => s.windowName === callerSession);
52
94
  if (coordSession?.projectDir && existsSync(coordSession.projectDir)) {
53
- const dirBasename = (await import("path")).basename(coordSession.projectDir).toLowerCase();
54
- const normalizedProject = projectName.toLowerCase();
55
- const projectMatches = dirBasename === normalizedProject || dirBasename === normalizedProject.replace(/^exe-/, "") || `exe-${dirBasename}` === normalizedProject || coordSession.projectDir.toLowerCase().includes(normalizedProject);
56
- if (projectMatches) {
95
+ if (projectDirMatches(coordSession.projectDir, projectName)) {
57
96
  return coordSession.projectDir;
58
97
  }
59
98
  process.stderr.write(
60
- `[create-task] project mismatch: coordinator dir="${coordSession.projectDir}" (${dirBasename}) vs task project="${projectName}". Falling through.
99
+ `[create-task] project mismatch: coordinator dir="${coordSession.projectDir}" (${basename(coordSession.projectDir).toLowerCase()}) vs task project="${projectName}". Falling through.
61
100
  `
62
101
  );
63
102
  }
@@ -122,30 +161,55 @@ function registerCreateTask(server) {
122
161
  }
123
162
  const { agentId: assignedBy } = getActiveAgent();
124
163
  let callerTmux = "";
164
+ let callerSource = "";
125
165
  try {
126
166
  callerTmux = getAgentContext()?.sessionHint ?? "";
167
+ if (callerTmux) callerSource = "als";
127
168
  } catch {
128
169
  }
129
170
  if (!callerTmux) {
130
171
  callerTmux = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
172
+ if (callerTmux) callerSource = "env";
131
173
  }
132
- let callerRoot = callerTmux.includes("-") ? callerTmux.split("-").pop() ?? "" : callerTmux;
174
+ let callerRoot = rootFromSessionName(callerTmux);
133
175
  if (!callerRoot) {
176
+ const projectRoot = await inferCoordinatorRootForProject(project_name);
177
+ if (projectRoot) {
178
+ callerRoot = projectRoot;
179
+ callerTmux = projectRoot;
180
+ callerSource = "project_registry";
181
+ process.stderr.write(
182
+ `[create_task] INFO: inferred session "${projectRoot}" from project "${project_name}" because X-Exe-Session was missing.
183
+ `
184
+ );
185
+ }
186
+ }
187
+ if (!callerRoot) {
188
+ const coordinatorSessions = await listCoordinatorRoots();
189
+ if (coordinatorSessions.length > 1 && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
190
+ const message = `BLOCKED: create_task cannot determine the caller session. ${coordinatorSessions.length} coordinator sessions are active (${coordinatorSessions.join(", ")}), X-Exe-Session is missing, and project "${project_name}" did not map to exactly one registered coordinator. Refusing to guess because guessing causes cross-session dispatch (for example exe2 tasks spawning yoshi2-exe1). Restart this coordinator or ensure the MCP client sends X-Exe-Session.`;
191
+ process.stderr.write(`[create_task] ${message}
192
+ `);
193
+ recordOrchestrationEventBestEffort({
194
+ eventType: "dispatch.failed",
195
+ source: "create-task.mcp",
196
+ severity: "error",
197
+ agentId: assigned_to,
198
+ projectName: project_name,
199
+ errorCode: "missing_session_hint_ambiguous",
200
+ payload: { coordinatorSessions, priority }
201
+ });
202
+ return {
203
+ content: [{ type: "text", text: message }],
204
+ isError: true
205
+ };
206
+ }
134
207
  try {
135
208
  const resolved = resolveExeSession();
136
209
  if (resolved) {
137
- const { listSessions } = await import("./lib/session-registry.js");
138
- const sessions = listSessions();
139
- const coordinatorSessions = sessions.filter(
140
- (s) => !s.windowName.includes("-") && s.windowName.startsWith("exe")
141
- );
142
- if (coordinatorSessions.length > 1) {
143
- process.stderr.write(
144
- `[create_task] WARN: ${coordinatorSessions.length} coordinators active, no X-Exe-Session header. Using resolved="${resolved}" (may be wrong). Fix: set EXE_SESSION_NAME env var or restart session.
145
- `
146
- );
147
- }
148
210
  callerRoot = resolved;
211
+ callerTmux = resolved;
212
+ callerSource = "resolve_fallback";
149
213
  }
150
214
  } catch {
151
215
  }
@@ -169,7 +233,7 @@ function registerCreateTask(server) {
169
233
  spawnModel: spawn_model,
170
234
  // Pass the pre-resolved caller session to tasks-crud so it doesn't
171
235
  // re-resolve independently (eliminates cross-session scope divergence).
172
- callerSession: callerTmux || void 0,
236
+ callerSession: callerTmux || callerRoot || void 0,
173
237
  // Skip internal dispatch — we handle it below with autoInstance
174
238
  // support. Without this, createTask fires dispatchTaskToEmployee
175
239
  // (no autoInstance) in parallel, racing with our ensureEmployee
@@ -225,7 +289,7 @@ function registerCreateTask(server) {
225
289
  let dispatchStatus = "";
226
290
  if (task.status !== "blocked" && !process.env.VITEST) {
227
291
  try {
228
- const exeSession = callerRoot || resolveExeSession();
292
+ const exeSession = task.sessionScope || callerRoot;
229
293
  const dispatchRuntime = resolveDispatchRuntime(assigned_to, spawn_runtime ?? null);
230
294
  recordOrchestrationEventBestEffort({
231
295
  eventType: "dispatch.attempted",
@@ -243,9 +307,9 @@ function registerCreateTask(server) {
243
307
  let projectConflictOpts = {};
244
308
  try {
245
309
  const { getClient } = await import("./lib/database.js");
246
- const { sessionScopeFilter } = await import("./task-scope-HHNLGA7M.js");
310
+ const { sessionScopeFilter } = await import("./task-scope-IAIAQNYB.js");
247
311
  const client = getClient();
248
- const scope = sessionScopeFilter();
312
+ const scope = sessionScopeFilter(task.sessionScope || callerRoot || exeSession || null);
249
313
  const existing = await client.execute({
250
314
  sql: `SELECT project_name FROM tasks WHERE assigned_to = ? AND status = 'in_progress'${scope.sql} LIMIT 1`,
251
315
  args: [assigned_to, ...scope.args]
@@ -335,6 +399,7 @@ Dispatch failed: ${result.error ?? "unknown"}`;
335
399
  assignedTo: assigned_to,
336
400
  callerRoot,
337
401
  exeSession,
402
+ callerSource,
338
403
  dispatchResult: result.status,
339
404
  sessionName: result.sessionName,
340
405
  error: result.error
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-SEV5S5AQ.js";
3
+ } from "./chunk-YUHKC2X2.js";
4
4
 
5
5
  // src/lib/git-task-sweep.ts
6
6
  import { execSync } from "child_process";
@@ -178,7 +178,7 @@ async function sweepTasks(projectName, options = {}) {
178
178
  }
179
179
  if (!dryRun) {
180
180
  try {
181
- const { updateTaskStatus } = await import("./tasks-crud-T4HZTUEJ.js");
181
+ const { updateTaskStatus } = await import("./tasks-crud-M7YVS5F3.js");
182
182
  await updateTaskStatus({
183
183
  taskId: task.id,
184
184
  status: "needs_review",
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  updateTask
3
- } from "./chunk-BMWBBDHF.js";
3
+ } from "./chunk-ILAG5VBR.js";
4
4
  import {
5
5
  TASK_ALREADY_CLAIMED_PREFIX
6
- } from "./chunk-SEV5S5AQ.js";
6
+ } from "./chunk-YUHKC2X2.js";
7
7
 
8
8
  // src/mcp/tools/update-task.ts
9
9
  import { z } from "zod";