@askexenow/exe-os 0.9.351 → 0.9.352
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/hooks/manifest.json +2 -2
- package/dist/hooks/prompt-submit.js +11 -0
- package/package.json +1 -1
- package/release-notes.json +19 -26
- package/src/commands/exe/intercom.md +11 -3
package/dist/hooks/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-25T04:38:45.093Z",
|
|
4
4
|
"hashes": {
|
|
5
5
|
"bug-report-worker.js": "b9bcde949c60c3d57ba3f6a66f0fd7c0c24dcbd6314422a0544e38e0687067a9",
|
|
6
6
|
"codex-stop-task-finalizer.js": "6f80ca6d60a73244bbe2d0e347cf1c7eb59f8296388f932d2fe34ca69dc5c0a5",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"post-tool-combined.js": "ef91564fcfb1560e39a612eb91dcda1b2e4ab3cc9338c27ab7f92b390b03b7fa",
|
|
16
16
|
"pre-compact.js": "933f9817f66f4e7d28d903ab40b86478ecfc6f9972e9e447838772d5176ccabf",
|
|
17
17
|
"pre-tool-use.js": "1da521b7fa580ea0a8b3f7722d48ead1fde758e24fd628019f24ee56842dfe46",
|
|
18
|
-
"prompt-submit.js": "
|
|
18
|
+
"prompt-submit.js": "ce4c63dcebe9bde6f9034576da54f1917882a920f74f539907641b2c0f2f7f23",
|
|
19
19
|
"session-end.js": "0eb2bdedb37806e8fa352aad5cb006aa2af12c213169f1cad4157ee6e1737cf5",
|
|
20
20
|
"session-start.js": "6931cfa741ad0932c75b15752a7aa941aac58c6d8153dd254becee7cd48a4a70",
|
|
21
21
|
"stop.js": "901df128a49816c84208badd1f6a564bb2094d39180212e304b8610fbd3fd85f",
|
|
@@ -35,6 +35,7 @@ import "../chunk-4QCFFW2H.js";
|
|
|
35
35
|
import "../chunk-76CJBM36.js";
|
|
36
36
|
import {
|
|
37
37
|
decideQueuedNudgeDrain,
|
|
38
|
+
getMySession,
|
|
38
39
|
getSessionState,
|
|
39
40
|
isExeSession
|
|
40
41
|
} from "../chunk-LOYK2BRY.js";
|
|
@@ -344,6 +345,16 @@ process.stdin.on("end", async () => {
|
|
|
344
345
|
let _cachedSessionName = null;
|
|
345
346
|
const getCurrentSessionName = () => {
|
|
346
347
|
if (_cachedSessionName !== null) return _cachedSessionName;
|
|
348
|
+
if (inTmux) {
|
|
349
|
+
try {
|
|
350
|
+
const live = getMySession();
|
|
351
|
+
if (live) {
|
|
352
|
+
_cachedSessionName = live;
|
|
353
|
+
return live;
|
|
354
|
+
}
|
|
355
|
+
} catch {
|
|
356
|
+
}
|
|
357
|
+
}
|
|
347
358
|
const ownSession = process.env.EXE_SESSION_NAME?.trim();
|
|
348
359
|
if (ownSession) {
|
|
349
360
|
_cachedSessionName = ownSession;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.352",
|
|
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",
|
package/release-notes.json
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
{
|
|
2
|
-
"current": "0.9.
|
|
2
|
+
"current": "0.9.352",
|
|
3
3
|
"notes": {
|
|
4
|
-
"0.9.
|
|
5
|
-
"version": "0.9.
|
|
4
|
+
"0.9.352": {
|
|
5
|
+
"version": "0.9.352",
|
|
6
6
|
"date": "2026-07-25",
|
|
7
7
|
"features": [],
|
|
8
8
|
"fixes": [],
|
|
9
9
|
"security": [],
|
|
10
10
|
"other": [
|
|
11
|
-
"v0.9.
|
|
11
|
+
"v0.9.352 — multi-coordinator session-scope fix (7eec74b7/45a9f87e) (#477)"
|
|
12
|
+
],
|
|
13
|
+
"migration_notes": []
|
|
14
|
+
},
|
|
15
|
+
"0.9.351": {
|
|
16
|
+
"version": "0.9.351",
|
|
17
|
+
"date": "2026-07-25",
|
|
18
|
+
"features": [
|
|
19
|
+
"daemon offloads heavy timer reads (review polling, agent-data refresh, trace-TTL sweep) to the db-read-worker so long scans no longer block the MCP-serving event loop (d73b5014) (#454)"
|
|
20
|
+
],
|
|
21
|
+
"fixes": [
|
|
22
|
+
"task(resume)/resume_employee no longer throws \"Database client not initialized\" — the resume handler uses the client fastDbInit() returns instead of re-grabbing a global the degraded init paths never register, so reviving a dead cross-project employee works (ff3ef612) (#474)",
|
|
23
|
+
"daemon lag-aware timer watchdog stops false-flagging a timer that is merely awaiting slow I/O as a blocked event loop, killing bogus self-heal restarts (c5fdb821) (#455)",
|
|
24
|
+
"daemon auto-releases a stale task-claim whose holder tmux session is gone (dead-holder-session half of the claim-integrity cluster), so an owner locked out by a dead subagent claim can re-claim (784ebe98, 31a59ab2) (#473)"
|
|
12
25
|
],
|
|
26
|
+
"security": [],
|
|
27
|
+
"other": [],
|
|
13
28
|
"migration_notes": []
|
|
14
29
|
},
|
|
15
30
|
"0.9.350": {
|
|
@@ -61,28 +76,6 @@
|
|
|
61
76
|
"security": [],
|
|
62
77
|
"other": [],
|
|
63
78
|
"migration_notes": []
|
|
64
|
-
},
|
|
65
|
-
"0.9.347": {
|
|
66
|
-
"version": "0.9.347",
|
|
67
|
-
"date": "2026-07-22",
|
|
68
|
-
"features": [],
|
|
69
|
-
"fixes": [
|
|
70
|
-
"daemon: cloud_sync timer no longer blocks the event loop for minutes–hours — the root cause of recurring \"MCP connected but tools fail\" instability; drains in bounded per-tick slices with a durable resumable cursor (c5fdb821 p0) (#422)",
|
|
71
|
-
"stack-update: fail-loud + fail-safe on image auth/pull failure — never leave prod silently partial; pre-deploy pullability check aborts before any mutation (f1c36209 p0) (#432)",
|
|
72
|
-
"api-router: runtime self-heal ALTER for support_feature_requests.product — list_my_features no longer 500s on drifted D1 instances (5604f580) (#421)",
|
|
73
|
-
"orchestration: re-validate the dispatch claim before a stale auto-blocked task resumes — kills duplicate-fleet / wrong-work on pane un-wedge (e1d26a94) (#431)",
|
|
74
|
-
"codex: configurable working default model (EXE_CODEX_DEFAULT_MODEL, fallback gpt-5.5) instead of the ChatGPT-account-rejected gpt-5.3-codex (d691ab3a) (#430)",
|
|
75
|
-
"mcp: reconcile consolidated tool schemas with handlers — config.import_orchestration no longer throws; graph.merge_entities merges or errors loudly instead of silently no-opping (9f6216fe, b8773ad7) (#428)",
|
|
76
|
-
"task: assigned reviewer can now close_task (was mis-gated on caller identity) (b6543735) (#427)",
|
|
77
|
-
"task: completion \"What Changed\" derives from git diff, not scraped prose — no more fabricated changelogs (ae43d0b9) (#429)"
|
|
78
|
-
],
|
|
79
|
-
"security": [],
|
|
80
|
-
"other": [
|
|
81
|
-
"test: deflake ReDoS redaction timing bound (1000ms→5000ms) — was blocking releases; still catches real ReDoS (#426)",
|
|
82
|
-
"test: deflake mcp-proxy retry-budget (20ms→2000ms test config) — recurring release-blocker, no production change (#433)",
|
|
83
|
-
"ci: classified auto-retry on infra failures (e381fcb0) (#425)"
|
|
84
|
-
],
|
|
85
|
-
"migration_notes": []
|
|
86
79
|
}
|
|
87
80
|
}
|
|
88
81
|
}
|
|
@@ -12,13 +12,21 @@ Triggered by the coordinator via `tmux send-keys -t {window} '/exe-intercom' Ent
|
|
|
12
12
|
# Resolve the configured coordinator and current tmux session.
|
|
13
13
|
COORDINATOR=$(node -e "const fs=require('fs'), os=require('os'), path=require('path'); try { const r=JSON.parse(fs.readFileSync(path.join(os.homedir(),'.exe-os','exe-employees.json'),'utf8')); const c=r.find(e => String(e.role||'').toLowerCase()==='coo'); console.log(c?.name || 'exe'); } catch { console.log('exe'); }" 2>/dev/null)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
# Bugs 7eec74b7 + 45a9f87e (multi-coordinator scope mis-resolution): an employee
|
|
16
|
+
# session MUST derive its identity from its OWN live tmux session name
|
|
17
|
+
# (davinci-yoda1), never from the EXE_SESSION_NAME env baked at spawn. With two
|
|
18
|
+
# coordinators live (yoda1 + yoda2) that env can carry the WRONG coordinator,
|
|
19
|
+
# making the worker refuse its own yoda1-scoped task as a "cross-session leak".
|
|
20
|
+
# Live tmux is authoritative; fall back to env only when not inside tmux.
|
|
21
|
+
if [ -n "$TMUX" ]; then
|
|
18
22
|
SESSION_NAME=$(tmux display-message -p '#{session_name}' 2>/dev/null)
|
|
23
|
+
[ -z "$SESSION_NAME" ] && SESSION_NAME="$EXE_SESSION_NAME"
|
|
24
|
+
elif [ -n "$EXE_SESSION_NAME" ]; then
|
|
25
|
+
SESSION_NAME="$EXE_SESSION_NAME"
|
|
19
26
|
else
|
|
20
27
|
SESSION_NAME="UNKNOWN"
|
|
21
28
|
fi
|
|
29
|
+
[ -z "$SESSION_NAME" ] && SESSION_NAME="UNKNOWN"
|
|
22
30
|
|
|
23
31
|
# Employee sessions are {employee}-{coordinatorSession}; coordinator sessions have no dash.
|
|
24
32
|
if [ "$SESSION_NAME" = "UNKNOWN" ]; then
|