@askexenow/exe-os 0.9.184 → 0.9.186
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/deploy/stack-manifests/v0.9.json +1 -1
- package/dist/{backfill-metadata-HPMDXCZX.js → backfill-metadata-GQVQJVQR.js} +1 -1
- package/dist/bin/agentic-ontology-backfill.js +1 -1
- package/dist/bin/agentic-reflection-backfill.js +1 -1
- package/dist/bin/agentic-semantic-label.js +1 -1
- package/dist/bin/backfill-conversations.js +1 -1
- package/dist/bin/backfill-responses.js +1 -1
- package/dist/bin/backfill-vectors.js +2 -2
- package/dist/bin/bulk-sync-postgres.js +1 -1
- package/dist/bin/cleanup-stale-review-tasks.js +2 -2
- package/dist/bin/cli.js +10 -10
- package/dist/bin/exe-agent.js +3 -3
- package/dist/bin/exe-assign.js +1 -1
- package/dist/bin/exe-boot.js +6 -6
- package/dist/bin/exe-call.js +3 -3
- package/dist/bin/exe-dispatch.js +2 -2
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +2 -2
- package/dist/bin/exe-forget.js +3 -3
- package/dist/bin/exe-gateway.js +4 -4
- package/dist/bin/exe-heartbeat.js +2 -2
- package/dist/bin/exe-kill.js +3 -3
- package/dist/bin/exe-launch-agent.js +5 -5
- package/dist/bin/exe-new-employee.js +4 -4
- package/dist/bin/exe-pending-messages.js +3 -3
- package/dist/bin/exe-pending-notifications.js +2 -2
- package/dist/bin/exe-pending-reviews.js +2 -2
- package/dist/bin/exe-rename.js +3 -3
- package/dist/bin/exe-review.js +3 -3
- package/dist/bin/exe-search.js +2 -2
- package/dist/bin/exe-session-cleanup.js +5 -5
- package/dist/bin/exe-start-codex.js +5 -5
- package/dist/bin/exe-start-opencode.js +2 -2
- package/dist/bin/exe-status.js +3 -3
- package/dist/bin/exe-team.js +1 -1
- package/dist/bin/git-sweep.js +2 -2
- package/dist/bin/graph-backfill.js +1 -1
- package/dist/bin/graph-export.js +2 -2
- package/dist/bin/import-history.js +1 -1
- package/dist/bin/install.js +3 -3
- package/dist/bin/intercom-check.js +3 -3
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/scan-tasks.js +2 -2
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +1 -1
- package/dist/{capacity-monitor-OQUDVUQC.js → capacity-monitor-ZYKOBFT3.js} +2 -2
- package/dist/{catchup-brief-RYXZY7KB.js → catchup-brief-RQNN2VKM.js} +3 -3
- package/dist/{chunk-OZOKIJUD.js → chunk-2DFZRIQG.js} +2 -2
- package/dist/{chunk-BHWEKC56.js → chunk-2F4MS3CU.js} +1 -1
- package/dist/{chunk-EB6OU665.js → chunk-2ZYEO7U7.js} +1 -1
- package/dist/{chunk-HSIIGUNO.js → chunk-4SXOTQVH.js} +1 -1
- package/dist/{chunk-3VLOR4S5.js → chunk-5PDABKBC.js} +1 -1
- package/dist/{chunk-H5XWQ4WA.js → chunk-5QVIO3WZ.js} +1 -1
- package/dist/{chunk-ZFMOZRTQ.js → chunk-BQQGYW67.js} +37 -20
- package/dist/{chunk-7E3E43AS.js → chunk-C46O6JRH.js} +1 -1
- package/dist/{chunk-IATLKAGH.js → chunk-DJRUTSYM.js} +1 -1
- package/dist/{chunk-T3VJ6SD7.js → chunk-DYIZHFWB.js} +2 -2
- package/dist/{chunk-64GZ6HDC.js → chunk-GPTHEXVB.js} +1 -1
- package/dist/{chunk-NJL7VJ5O.js → chunk-IU44KCEH.js} +14 -12
- package/dist/{chunk-25CVYGFX.js → chunk-JI5JWVCM.js} +1 -1
- package/dist/{chunk-2IV3YWK5.js → chunk-K2EHMV22.js} +1 -1
- package/dist/{chunk-HYBT5PXK.js → chunk-KEDP4X4H.js} +2 -2
- package/dist/{chunk-6Z53VOF7.js → chunk-KFMJXUGZ.js} +2 -2
- package/dist/{chunk-HKSEZXKE.js → chunk-OVEBX2GL.js} +1 -1
- package/dist/{chunk-HBUTUNH2.js → chunk-PN22OPA3.js} +2 -2
- package/dist/{chunk-CPPE7RAI.js → chunk-QGN4KAUH.js} +1 -1
- package/dist/{chunk-UAP3COVL.js → chunk-QUKOZ7GM.js} +3 -3
- package/dist/{chunk-6WIKWLPV.js → chunk-R44NTLEH.js} +2 -2
- package/dist/{chunk-HW3QT5BC.js → chunk-T4B3GND4.js} +1 -1
- package/dist/{chunk-L4YMK3VA.js → chunk-TBBNEMUH.js} +1 -1
- package/dist/{chunk-I7RMP3RW.js → chunk-UD5CVXSS.js} +3 -3
- package/dist/{chunk-ZMLQVBJ6.js → chunk-UFRKO6UT.js} +18 -1
- package/dist/{chunk-EWINUEVJ.js → chunk-UVGJYMSN.js} +27 -27
- package/dist/{chunk-U2UQMLJ3.js → chunk-VG5WJD4U.js} +1 -1
- package/dist/{chunk-EN5KST22.js → chunk-VLTXCQQJ.js} +4 -2
- package/dist/{chunk-VMZJWKOI.js → chunk-W4ZHHFE6.js} +1 -1
- package/dist/{chunk-FFJ7E5UY.js → chunk-WLKBQQOS.js} +1 -1
- package/dist/{chunk-CD76FDBD.js → chunk-XZJJBQCE.js} +1 -1
- package/dist/{crm-webhook-PBW7CPZW.js → crm-webhook-NK55NILZ.js} +2 -2
- package/dist/{cto-delegation-gate-WT4KGVMH.js → cto-delegation-gate-ZMKTEUL5.js} +1 -1
- package/dist/{daemon-orchestration-CF5CT3DV.js → daemon-orchestration-LQYZVXD6.js} +3 -3
- package/dist/{exe-export-KCM5YOYE.js → exe-export-AQCZ4QTA.js} +3 -3
- package/dist/{exe-import-JCF2TJJO.js → exe-import-SQANLQ3W.js} +3 -3
- package/dist/{fast-db-init-3TIBU435.js → fast-db-init-7FJDXEH7.js} +1 -1
- package/dist/gateway/index.js +5 -5
- package/dist/{git-task-sweep-CJDQXX5K.js → git-task-sweep-KY2ZCHF2.js} +2 -2
- package/dist/{global-procedures-Q6JIKQZT.js → global-procedures-366HG4SN.js} +2 -2
- package/dist/hooks/bug-report-worker.js +3 -3
- package/dist/hooks/codex-stop-task-finalizer.js +3 -3
- package/dist/hooks/commit-complete.js +4 -4
- package/dist/hooks/error-recall.js +2 -2
- package/dist/hooks/ingest.js +2 -2
- package/dist/hooks/instructions-loaded.js +1 -1
- package/dist/hooks/notification.js +1 -1
- package/dist/hooks/post-compact.js +2 -2
- package/dist/hooks/post-tool-combined.js +2 -2
- package/dist/hooks/pre-compact.js +3 -3
- package/dist/hooks/pre-tool-use.js +6 -6
- package/dist/hooks/prompt-submit.js +8 -8
- package/dist/hooks/session-end.js +6 -6
- package/dist/hooks/session-start.js +4 -4
- package/dist/hooks/stop.js +5 -5
- package/dist/hooks/subagent-stop.js +2 -2
- package/dist/hooks/summary-worker.js +5 -5
- package/dist/index.js +8 -8
- package/dist/{installer-I4N2LID5.js → installer-R6PHFVT2.js} +2 -2
- package/dist/{installer-X2SNB4W3.js → installer-U62CTG45.js} +2 -2
- package/dist/{installer-INBTZNL2.js → installer-WBKPBT7M.js} +2 -2
- package/dist/lib/consolidation.js +2 -2
- package/dist/lib/employee-templates.js +3 -3
- package/dist/lib/exe-daemon.js +11 -11
- package/dist/lib/hybrid-search.js +2 -2
- package/dist/lib/messaging.js +2 -2
- package/dist/lib/schedules.js +2 -2
- package/dist/lib/store.js +1 -1
- package/dist/lib/tasks.js +2 -2
- package/dist/lib/tmux-routing.js +1 -1
- package/dist/mcp/register-tools.js +24 -24
- package/dist/mcp/server.js +25 -25
- package/dist/mcp/tools/create-task.js +3 -3
- package/dist/mcp/tools/list-tasks.js +3 -3
- package/dist/mcp/tools/send-message.js +3 -3
- package/dist/mcp/tools/update-task.js +3 -3
- package/dist/{mcp-http-config-UR2B2CCZ.js → mcp-http-config-DWVEWBVR.js} +1 -1
- package/dist/{notifications-2J7EAPDU.js → notifications-ZTPE67JI.js} +1 -1
- package/dist/{orchestrator-OO5WF4JS.js → orchestrator-VTTEX3O3.js} +2 -2
- package/dist/{review-polling-KIJVM4Y5.js → review-polling-QL4XPFDY.js} +2 -2
- package/dist/runtime/index.js +3 -3
- package/dist/{session-events-DRTJ4D2L.js → session-events-FQCVWJSJ.js} +2 -2
- package/dist/{session-scope-UMJVV7SW.js → session-scope-NCMWUGJH.js} +1 -1
- package/dist/{setup-wizard-BS5DUIVT.js → setup-wizard-6ULB35E7.js} +1 -1
- package/dist/{task-enforcement-OJAURWWJ.js → task-enforcement-MRNL57QC.js} +1 -1
- package/dist/{task-scope-ZINRRB5G.js → task-scope-4LI4CLNR.js} +1 -1
- package/dist/{tasks-crud-PH24HPHF.js → tasks-crud-MOGOCASW.js} +1 -1
- package/dist/{tasks-review-A2UWRTGM.js → tasks-review-ICBEO3RD.js} +1 -1
- package/dist/tui/App.js +10 -10
- package/dist/{tui-data-FTXRDBRP.js → tui-data-HHGC7VHX.js} +1 -1
- package/dist/{worker-gate-IVJSJBPD.js → worker-gate-UWCUTYF4.js} +1 -1
- package/dist/{workflow-engine-WWVNS2YO.js → workflow-engine-4NSAOXNE.js} +2 -2
- package/package.json +1 -1
- /package/dist/{chunk-6RL7NSY7.js → chunk-E2D6BPP3.js} +0 -0
- /package/dist/{chunk-WCJKG4WW.js → chunk-EWJC7CMP.js} +0 -0
- /package/dist/{chunk-7EQXVRA3.js → chunk-LW5VCKJP.js} +0 -0
- /package/dist/{chunk-XUBWK2W7.js → chunk-VO5LOTQE.js} +0 -0
- /package/dist/{core-memory-6IN5YJZ7.js → core-memory-YXSNINDK.js} +0 -0
- /package/dist/{exe-key-QJFDXAPI.js → exe-key-KPGVJ3RG.js} +0 -0
- /package/dist/{skill-refinement-LC7WAD62.js → skill-refinement-7YBYX7XD.js} +0 -0
package/dist/bin/exe-team.js
CHANGED
package/dist/bin/git-sweep.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
sweepTasks
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-2DFZRIQG.js";
|
|
5
|
+
import "../chunk-IU44KCEH.js";
|
|
6
6
|
import "../chunk-LOQCOHEW.js";
|
|
7
7
|
import "../chunk-QI4IXJN7.js";
|
|
8
8
|
import "../chunk-64WZEXXA.js";
|
package/dist/bin/graph-export.js
CHANGED
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "../chunk-46SQTBQW.js";
|
|
6
6
|
import {
|
|
7
7
|
fastDbInit
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-LW5VCKJP.js";
|
|
9
9
|
import {
|
|
10
10
|
disposeStore
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-VG5WJD4U.js";
|
|
12
12
|
import "../chunk-CHCA3ZM2.js";
|
|
13
13
|
import "../chunk-DOWW3EIO.js";
|
|
14
14
|
import "../chunk-MP2AFCGL.js";
|
package/dist/bin/install.js
CHANGED
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
setupGhostty,
|
|
7
7
|
setupTmux,
|
|
8
8
|
setupWezterm
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-UFRKO6UT.js";
|
|
10
|
+
import "../chunk-VLTXCQQJ.js";
|
|
11
11
|
import "../chunk-GNHN5HRQ.js";
|
|
12
12
|
import {
|
|
13
13
|
generateSessionWrappers
|
|
@@ -329,7 +329,7 @@ if (args.includes("--commands-only")) {
|
|
|
329
329
|
}
|
|
330
330
|
try {
|
|
331
331
|
execSync("which codex", { encoding: "utf8", timeout: 5e3 });
|
|
332
|
-
const { runCodexInstaller } = await import("../installer-
|
|
332
|
+
const { runCodexInstaller } = await import("../installer-R6PHFVT2.js");
|
|
333
333
|
await runCodexInstaller();
|
|
334
334
|
} catch {
|
|
335
335
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
fastDbInit
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-LW5VCKJP.js";
|
|
5
5
|
import "../chunk-MLKGABMK.js";
|
|
6
6
|
|
|
7
7
|
// src/bin/intercom-check.ts
|
|
@@ -17,7 +17,7 @@ async function main() {
|
|
|
17
17
|
}
|
|
18
18
|
if (isCoordinator) {
|
|
19
19
|
try {
|
|
20
|
-
const { listPendingReviews, cleanupOrphanedReviews, formatAge, isStale } = await import("../tasks-review-
|
|
20
|
+
const { listPendingReviews, cleanupOrphanedReviews, formatAge, isStale } = await import("../tasks-review-ICBEO3RD.js");
|
|
21
21
|
const { extractRootExe } = await import("../lib/tmux-routing.js");
|
|
22
22
|
let sessionScope = process.env.EXE_SESSION ? extractRootExe(process.env.EXE_SESSION) ?? void 0 : void 0;
|
|
23
23
|
if (!sessionScope) {
|
|
@@ -115,7 +115,7 @@ async function main() {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
try {
|
|
118
|
-
const { readUnreadNotifications, markAsRead } = await import("../notifications-
|
|
118
|
+
const { readUnreadNotifications, markAsRead } = await import("../notifications-ZTPE67JI.js");
|
|
119
119
|
const { resolveExeSession } = await import("../lib/tmux-routing.js");
|
|
120
120
|
const sessionScope = resolveExeSession();
|
|
121
121
|
const notifications = await readUnreadNotifications(agent, sessionScope);
|
package/dist/bin/pre-publish.js
CHANGED
package/dist/bin/scan-tasks.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
queryTaskRows
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-IU44KCEH.js";
|
|
5
5
|
import "../chunk-LOQCOHEW.js";
|
|
6
6
|
import "../chunk-QI4IXJN7.js";
|
|
7
7
|
import "../chunk-64WZEXXA.js";
|
|
@@ -72,7 +72,7 @@ function checkMcpHealth() {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
async function scanFromDb(agentId, tmuxSession, projectName) {
|
|
75
|
-
const { fastDbInit } = await import("../fast-db-init-
|
|
75
|
+
const { fastDbInit } = await import("../fast-db-init-7FJDXEH7.js");
|
|
76
76
|
try {
|
|
77
77
|
await fastDbInit();
|
|
78
78
|
} catch (err) {
|
package/dist/bin/setup.js
CHANGED
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
isAtCapacity,
|
|
9
9
|
isWithinRelaunchCooldown,
|
|
10
10
|
pollCapacityDead
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DJRUTSYM.js";
|
|
12
12
|
import "./chunk-L4VM6PZ7.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-IU44KCEH.js";
|
|
14
14
|
import "./chunk-LOQCOHEW.js";
|
|
15
15
|
import "./chunk-QI4IXJN7.js";
|
|
16
16
|
import "./chunk-64WZEXXA.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
lightweightSearch
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-XZJJBQCE.js";
|
|
4
|
+
import "./chunk-VG5WJD4U.js";
|
|
5
5
|
import "./chunk-CHCA3ZM2.js";
|
|
6
6
|
import "./chunk-DOWW3EIO.js";
|
|
7
7
|
import {
|
|
8
8
|
sessionScopeFilter,
|
|
9
9
|
strictSessionScopeFilter
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IU44KCEH.js";
|
|
11
11
|
import "./chunk-LOQCOHEW.js";
|
|
12
12
|
import "./chunk-QI4IXJN7.js";
|
|
13
13
|
import "./chunk-64WZEXXA.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionScopeFilter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IU44KCEH.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-
|
|
181
|
+
const { updateTaskStatus } = await import("./tasks-crud-MOGOCASW.js");
|
|
182
182
|
await updateTaskStatus({
|
|
183
183
|
taskId: task.id,
|
|
184
184
|
status: "needs_review",
|
|
@@ -242,7 +242,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
242
242
|
title: "Retrieval architecture \u2014 three pillars, embeddings optional",
|
|
243
243
|
domain: "tool-use",
|
|
244
244
|
priority: "p1",
|
|
245
|
-
content: "Exe OS retrieval has THREE equal pillars: (1) Keyword search (FTS5 full-text), (2) Graph search (entity relationships), (3) Vector search (embedding similarity). All three run in parallel on every recall \u2014 results merge via Reciprocal Rank Fusion. CRITICAL: Keyword + Graph are FIRST-CLASS, not fallbacks. On 8-16 GB machines where the embedding model cannot load, retrieval is STILL excellent using FTS5 + Graph alone. The embed daemon is optional \u2014 when unavailable, the system automatically runs in FTS-only mode with graph boost. You lose semantic similarity (finding conceptually related but differently-worded memories) but keyword matching, entity traversal, bi-temporal filtering, and retrieval_mode all work perfectly. Do NOT tell users they need to download or run the embedding model to use memory effectively. Do NOT treat 'Embed daemon unavailable' warnings as errors \u2014 the system is working as designed. For 8 GB RAM: FTS + Graph only (no model). For 16 GB: FTS + Graph + optional 0.6B model if user opts in via /exe-setup. For 32+ GB: full hybrid with 4B model. The experience degrades gracefully \u2014 never breaks."
|
|
245
|
+
content: "Exe OS retrieval has THREE equal pillars: (1) Keyword search (FTS5 full-text), (2) Graph search (entity relationships), (3) Vector search (embedding similarity). All three run in parallel on every recall \u2014 results merge via Reciprocal Rank Fusion. CRITICAL: Keyword + Graph are FIRST-CLASS, not fallbacks. On 8-16 GB machines where the embedding model cannot load, retrieval is STILL excellent using FTS5 + Graph alone. The embed daemon is optional \u2014 when unavailable, the system automatically runs in FTS-only mode with graph boost. You lose semantic similarity (finding conceptually related but differently-worded memories) but keyword matching, entity traversal, bi-temporal filtering, and retrieval_mode all work perfectly. Do NOT tell users they need to download or run the embedding model to use memory effectively. Do NOT treat 'Embed daemon unavailable' warnings as errors \u2014 the system is working as designed. For 8 GB RAM: FTS + Graph only (no model). For 16 GB: FTS + Graph + optional 0.6B model if user opts in via /exe-setup. For 32+ GB: full hybrid with 4B model. The experience degrades gracefully \u2014 never breaks. QUERY EXPANSION (automatic): Every recall_my_memory call runs LLM-powered query expansion before searching. The system infers related terms not in your query \u2014 e.g., searching 'Hong Kong entity' also searches for 'corporate structure', 'LLC', 'tax'. This closes the gap between keyword search and semantic search WITHOUT needing embeddings. It runs automatically on every recall \u2014 no config needed, no extra cost. BENCHMARK: FTS+Graph retrieval (42.25%) BEATS full hybrid with embeddings (41.75%) on BEAM 100K. The 8GB experience is equal or better than the 32GB experience."
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
title: "Commit discipline \u2014 commit after every completed track, never batch",
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-MLXJ5EZG.js";
|
|
4
4
|
import {
|
|
5
5
|
createTask
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UD5CVXSS.js";
|
|
7
7
|
import {
|
|
8
8
|
getActiveAgent
|
|
9
9
|
} from "./chunk-7WPIM2L6.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
ensureEmployee,
|
|
12
12
|
logTaskDispatch,
|
|
13
13
|
resolveExeSession
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IU44KCEH.js";
|
|
15
15
|
import {
|
|
16
16
|
getLicenseSync
|
|
17
17
|
} from "./chunk-34T3TC5E.js";
|
|
@@ -97,14 +97,38 @@ function registerCreateTask(server) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
const { agentId: assignedBy } = getActiveAgent();
|
|
100
|
-
let
|
|
100
|
+
let callerTmux = "";
|
|
101
101
|
try {
|
|
102
|
-
|
|
103
|
-
if (!callerTmux) callerTmux = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
|
|
104
|
-
callerRoot = callerTmux.includes("-") ? callerTmux.split("-").pop() ?? "" : callerTmux;
|
|
105
|
-
if (!callerRoot) callerRoot = resolveExeSession() ?? "";
|
|
102
|
+
callerTmux = getAgentContext()?.sessionHint ?? "";
|
|
106
103
|
} catch {
|
|
107
104
|
}
|
|
105
|
+
if (!callerTmux) {
|
|
106
|
+
callerTmux = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
|
|
107
|
+
}
|
|
108
|
+
let callerRoot = callerTmux.includes("-") ? callerTmux.split("-").pop() ?? "" : callerTmux;
|
|
109
|
+
if (!callerRoot) {
|
|
110
|
+
try {
|
|
111
|
+
const resolved = resolveExeSession();
|
|
112
|
+
if (resolved) {
|
|
113
|
+
const { listSessions } = await import("./lib/session-registry.js");
|
|
114
|
+
const sessions = listSessions();
|
|
115
|
+
const coordinatorSessions = sessions.filter(
|
|
116
|
+
(s) => !s.windowName.includes("-") && s.windowName.startsWith("exe")
|
|
117
|
+
);
|
|
118
|
+
if (coordinatorSessions.length > 1) {
|
|
119
|
+
return {
|
|
120
|
+
content: [{
|
|
121
|
+
type: "text",
|
|
122
|
+
text: `ERROR: Cannot determine caller's coordinator session. ${coordinatorSessions.length} coordinators active (${coordinatorSessions.map((s) => s.windowName).join(", ")}). The X-Exe-Session header is missing \u2014 this causes cross-session dispatch bugs. Fix: restart your session so exe-start.sh sets the session env vars, or pass the session hint via MCP headers.`
|
|
123
|
+
}],
|
|
124
|
+
isError: true
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
callerRoot = resolved;
|
|
128
|
+
}
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
131
|
+
}
|
|
108
132
|
const projectDir = await resolveProjectDir(project_name, callerRoot);
|
|
109
133
|
const task = await createTask({
|
|
110
134
|
title,
|
|
@@ -122,6 +146,9 @@ function registerCreateTask(server) {
|
|
|
122
146
|
budgetFallbackModel: budget_fallback_model,
|
|
123
147
|
spawnRuntime: spawn_runtime,
|
|
124
148
|
spawnModel: spawn_model,
|
|
149
|
+
// Pass the pre-resolved caller session to tasks-crud so it doesn't
|
|
150
|
+
// re-resolve independently (eliminates cross-session scope divergence).
|
|
151
|
+
callerSession: callerTmux || void 0,
|
|
125
152
|
// Skip internal dispatch — we handle it below with autoInstance
|
|
126
153
|
// support. Without this, createTask fires dispatchTaskToEmployee
|
|
127
154
|
// (no autoInstance) in parallel, racing with our ensureEmployee
|
|
@@ -168,24 +195,14 @@ function registerCreateTask(server) {
|
|
|
168
195
|
let dispatchStatus = "";
|
|
169
196
|
if (task.status !== "blocked" && !process.env.VITEST) {
|
|
170
197
|
try {
|
|
171
|
-
|
|
172
|
-
try {
|
|
173
|
-
const { getAgentContext: getAgentContext2 } = await import("./agent-context-AZTTMUHP.js");
|
|
174
|
-
callerTmux = getAgentContext2()?.sessionHint ?? "";
|
|
175
|
-
} catch {
|
|
176
|
-
}
|
|
177
|
-
if (!callerTmux) {
|
|
178
|
-
callerTmux = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
|
|
179
|
-
}
|
|
180
|
-
const callerRoot2 = callerTmux.includes("-") ? callerTmux.split("-").pop() ?? "" : callerTmux;
|
|
181
|
-
const exeSession = callerRoot2 || resolveExeSession();
|
|
198
|
+
const exeSession = callerRoot || resolveExeSession();
|
|
182
199
|
if (exeSession) {
|
|
183
200
|
const { shouldAutoInstance } = await import("./lib/employees.js");
|
|
184
201
|
const autoOpts = shouldAutoInstance(assigned_to);
|
|
185
202
|
let projectConflictOpts = {};
|
|
186
203
|
try {
|
|
187
204
|
const { getClient } = await import("./lib/database.js");
|
|
188
|
-
const { sessionScopeFilter } = await import("./task-scope-
|
|
205
|
+
const { sessionScopeFilter } = await import("./task-scope-4LI4CLNR.js");
|
|
189
206
|
const client = getClient();
|
|
190
207
|
const scope = sessionScopeFilter();
|
|
191
208
|
const existing = await client.execute({
|
|
@@ -257,7 +274,7 @@ Dispatch failed: ${result.error ?? "unknown"}`;
|
|
|
257
274
|
logTaskDispatch({
|
|
258
275
|
taskId: task.id,
|
|
259
276
|
assignedTo: assigned_to,
|
|
260
|
-
callerRoot
|
|
277
|
+
callerRoot,
|
|
261
278
|
exeSession,
|
|
262
279
|
dispatchResult: result.status,
|
|
263
280
|
sessionName: result.sessionName,
|
|
@@ -327,18 +327,20 @@ async function createTaskCore(input) {
|
|
|
327
327
|
const slug = slugify(input.title);
|
|
328
328
|
let earlySessionScope = null;
|
|
329
329
|
let scopeMismatchWarning;
|
|
330
|
-
let callerSession = "";
|
|
330
|
+
let callerSession = input.callerSession ?? "";
|
|
331
331
|
try {
|
|
332
332
|
const { resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
|
|
333
|
-
const resolved = resolveExeSession2();
|
|
334
|
-
try {
|
|
335
|
-
const { getAgentContext: getAgentContext2 } = await import("./agent-context-AZTTMUHP.js");
|
|
336
|
-
callerSession = getAgentContext2()?.sessionHint ?? "";
|
|
337
|
-
} catch {
|
|
338
|
-
}
|
|
339
333
|
if (!callerSession) {
|
|
340
|
-
|
|
334
|
+
try {
|
|
335
|
+
const { getAgentContext: getAgentContext2 } = await import("./agent-context-AZTTMUHP.js");
|
|
336
|
+
callerSession = getAgentContext2()?.sessionHint ?? "";
|
|
337
|
+
} catch {
|
|
338
|
+
}
|
|
339
|
+
if (!callerSession) {
|
|
340
|
+
callerSession = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
|
|
341
|
+
}
|
|
341
342
|
}
|
|
343
|
+
const resolved = resolveExeSession2();
|
|
342
344
|
if (!callerSession && resolved) {
|
|
343
345
|
process.stderr.write(
|
|
344
346
|
`[create_task] WARN: caller session unknown (no X-Exe-Session header). Task will use resolved scope "${resolved}" which may be wrong. Fix: restart coordinator session so exe-start.sh sets session env vars.
|
|
@@ -358,7 +360,7 @@ async function createTaskCore(input) {
|
|
|
358
360
|
if (isCoordinatorSession) {
|
|
359
361
|
earlySessionScope = resolved;
|
|
360
362
|
} else {
|
|
361
|
-
const { getSessionProject } = await import("./session-scope-
|
|
363
|
+
const { getSessionProject } = await import("./session-scope-NCMWUGJH.js");
|
|
362
364
|
const sessionProject = getSessionProject(resolved);
|
|
363
365
|
if (sessionProject && sessionProject !== input.projectName) {
|
|
364
366
|
scopeMismatchWarning = `session/project mismatch: session "${resolved}" owns "${sessionProject}" but task targets "${input.projectName}". Routed to default scope.`;
|
|
@@ -786,7 +788,7 @@ async function updateTaskStatus(input) {
|
|
|
786
788
|
} catch {
|
|
787
789
|
}
|
|
788
790
|
try {
|
|
789
|
-
const { writeNotification: writeNotification2 } = await import("./notifications-
|
|
791
|
+
const { writeNotification: writeNotification2 } = await import("./notifications-ZTPE67JI.js");
|
|
790
792
|
await writeNotification2({
|
|
791
793
|
agentId: reviewer,
|
|
792
794
|
agentRole: isCoordinatorName(reviewer) ? "COO" : "manager",
|
|
@@ -961,7 +963,7 @@ ${input.result}` : `\u26A0\uFE0F ${warning}`;
|
|
|
961
963
|
}
|
|
962
964
|
if (input.status === "done" || input.status === "needs_review") {
|
|
963
965
|
try {
|
|
964
|
-
const { incrementSkillSuccess } = await import("./skill-refinement-
|
|
966
|
+
const { incrementSkillSuccess } = await import("./skill-refinement-7YBYX7XD.js");
|
|
965
967
|
await incrementSkillSuccess(
|
|
966
968
|
String(row.assigned_to),
|
|
967
969
|
row.project_name ? String(row.project_name) : null
|
|
@@ -2039,7 +2041,7 @@ async function verifyPaneAtCapacity(sessionName) {
|
|
|
2039
2041
|
reason: `capture-pane failed: ${err instanceof Error ? err.message : String(err)}`
|
|
2040
2042
|
};
|
|
2041
2043
|
}
|
|
2042
|
-
const { isAtCapacity } = await import("./capacity-monitor-
|
|
2044
|
+
const { isAtCapacity } = await import("./capacity-monitor-ZYKOBFT3.js");
|
|
2043
2045
|
if (!isAtCapacity(pane)) {
|
|
2044
2046
|
return {
|
|
2045
2047
|
atCapacity: false,
|
|
@@ -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-
|
|
114
|
+
const { sessionScopeFilter } = await import("./task-scope-4LI4CLNR.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-L4VM6PZ7.js";
|
|
4
4
|
import {
|
|
5
5
|
updateTask
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UD5CVXSS.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-
|
|
17
|
+
} from "./chunk-IU44KCEH.js";
|
|
18
18
|
import {
|
|
19
19
|
queueIntercom
|
|
20
20
|
} from "./chunk-QI4IXJN7.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
createCRMWebhookHandler,
|
|
21
21
|
parseTwentyWebhook
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-QGN4KAUH.js";
|
|
23
23
|
import {
|
|
24
24
|
BotRegistry,
|
|
25
25
|
BotRuntime,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
retryWithBackoff,
|
|
43
43
|
routeMessage,
|
|
44
44
|
validateGatewayConfig
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-C46O6JRH.js";
|
|
46
46
|
import {
|
|
47
47
|
OllamaProvider
|
|
48
48
|
} from "./chunk-FWFFZGSC.js";
|
|
@@ -849,7 +849,7 @@ function formatReport(report, flags) {
|
|
|
849
849
|
return lines.join("\n");
|
|
850
850
|
}
|
|
851
851
|
async function fixNullVectors() {
|
|
852
|
-
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-
|
|
852
|
+
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-UWCUTYF4.js");
|
|
853
853
|
if (!tryAcquireWorkerSlot()) {
|
|
854
854
|
process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
|
|
855
855
|
await new Promise((r) => setTimeout(r, 5e3));
|
|
@@ -970,7 +970,7 @@ function splitAtSentences(text, maxChunkSize) {
|
|
|
970
970
|
}
|
|
971
971
|
async function main(argv = process.argv.slice(2)) {
|
|
972
972
|
const flags = parseFlags(argv);
|
|
973
|
-
const { fastDbInit } = await import("./fast-db-init-
|
|
973
|
+
const { fastDbInit } = await import("./fast-db-init-7FJDXEH7.js");
|
|
974
974
|
const client = await fastDbInit();
|
|
975
975
|
const report = await runAudit(client, flags);
|
|
976
976
|
console.log(formatReport(report, flags));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MultiAgentOrchestrator
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2F4MS3CU.js";
|
|
4
4
|
import {
|
|
5
5
|
createQuietRenderer,
|
|
6
6
|
createTerminalRenderer,
|
|
@@ -327,7 +327,7 @@ function createExeOSHooks(config) {
|
|
|
327
327
|
async onSubagentStop(_reason) {
|
|
328
328
|
try {
|
|
329
329
|
const { getClient } = await import("./lib/database.js");
|
|
330
|
-
const { sessionScopeFilter } = await import("./task-scope-
|
|
330
|
+
const { sessionScopeFilter } = await import("./task-scope-4LI4CLNR.js");
|
|
331
331
|
const client = getClient();
|
|
332
332
|
const ehScope = sessionScopeFilter();
|
|
333
333
|
const tasks = await client.execute({
|
|
@@ -419,7 +419,7 @@ function createExeOSHooks(config) {
|
|
|
419
419
|
try {
|
|
420
420
|
const { writeMemory, flushBatch } = await import("./lib/store.js");
|
|
421
421
|
const { getClient } = await import("./lib/database.js");
|
|
422
|
-
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-
|
|
422
|
+
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-4LI4CLNR.js");
|
|
423
423
|
const client = getClient();
|
|
424
424
|
const cpScope = cpScopeFilter();
|
|
425
425
|
const tasks = await client.execute({
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
sessionScopeFilter,
|
|
12
12
|
updateTaskStatus,
|
|
13
13
|
writeNotification
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IU44KCEH.js";
|
|
15
15
|
import {
|
|
16
16
|
getTransport
|
|
17
17
|
} from "./chunk-TXWQPL2U.js";
|
|
@@ -136,7 +136,7 @@ async function dispatchTaskToEmployee(input) {
|
|
|
136
136
|
let crossProject = false;
|
|
137
137
|
if (input.projectName) {
|
|
138
138
|
try {
|
|
139
|
-
const { assertSessionScope } = await import("./session-scope-
|
|
139
|
+
const { assertSessionScope } = await import("./session-scope-NCMWUGJH.js");
|
|
140
140
|
const check = assertSessionScope("dispatch_task", input.projectName);
|
|
141
141
|
if (check.reason === "cross_session_denied") {
|
|
142
142
|
crossProject = true;
|
|
@@ -396,7 +396,7 @@ async function updateTask(input) {
|
|
|
396
396
|
await markTaskNotificationsRead(taskFile);
|
|
397
397
|
if (input.status === "needs_review" && !isCoordinator) {
|
|
398
398
|
try {
|
|
399
|
-
const { writeNotification: writeNotification2 } = await import("./notifications-
|
|
399
|
+
const { writeNotification: writeNotification2 } = await import("./notifications-ZTPE67JI.js");
|
|
400
400
|
await writeNotification2({
|
|
401
401
|
agentId: String(row.assigned_to),
|
|
402
402
|
agentRole: String(row.assigned_to),
|