@askexenow/exe-os 0.9.194 → 0.9.195

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.194",
3
+ "version": "0.9.195",
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",
@@ -1,4 +1,5 @@
1
1
  ---
2
+ name: exe-intercom
2
3
  description: Receive dispatched task via tmux send-keys and begin working
3
4
  allowed-tools: Bash
4
5
  ---
@@ -33,11 +34,46 @@ if [ "$AGENT" = "UNKNOWN" ] || [ "$AGENT" = "default" ]; then
33
34
  exit 0
34
35
  fi
35
36
 
36
- # FAST PATH: Check task signal file first (no Node.js, no DB, <10ms).
37
- # If a .pending signal exists, output it immediately no need for the
38
- # slow intercom-check.js which hits the daemon socket (can hang 75s).
39
- SIGNAL_FILE="$HOME/.exe-os/task-signals/${AGENT}.pending"
40
- if [ -f "$SIGNAL_FILE" ]; then
37
+ # FAST PATH: Check task signal files (no Node.js, no DB, <10ms).
38
+ # Signal files are written by create_task in two possible locations:
39
+ # 1. Session-scoped: task-signals/{session}/{agent}.{task-id}.pending
40
+ # 2. Legacy flat: task-signals/{agent}.pending
41
+ # Check BOTH paths. Session-scoped first (authoritative), then legacy.
42
+
43
+ # Derive session scope from tmux session name
44
+ if [[ "$SESSION_NAME" == *-* ]]; then
45
+ SESSION_SCOPE="${SESSION_NAME##*-}"
46
+ else
47
+ SESSION_SCOPE="$SESSION_NAME"
48
+ fi
49
+
50
+ # Check session-scoped signals: task-signals/{scope}/{agent}.*.pending
51
+ # Prioritize TASK signals over REVIEW signals. Pick newest file.
52
+ SCOPED_DIR="$HOME/.exe-os/task-signals/${SESSION_SCOPE}"
53
+ SIGNAL_FILE=""
54
+ if [ -d "$SCOPED_DIR" ]; then
55
+ # Task signals first (not review-*), newest first
56
+ SIGNAL_FILE=$(find "$SCOPED_DIR" -name "${AGENT}.*.pending" ! -name "${AGENT}.review-*" -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1)
57
+ # Fall back to review signals if no task signals
58
+ if [ -z "$SIGNAL_FILE" ]; then
59
+ SIGNAL_FILE=$(find "$SCOPED_DIR" -name "${AGENT}.*.pending" -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1)
60
+ fi
61
+ fi
62
+
63
+ # Fallback: check root task-signals/{agent}.*.pending (cross-session or old format)
64
+ if [ -z "$SIGNAL_FILE" ]; then
65
+ SIGNAL_FILE=$(find "$HOME/.exe-os/task-signals" -maxdepth 1 -name "${AGENT}.*.pending" ! -name "${AGENT}.review-*" -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1)
66
+ fi
67
+
68
+ # Legacy fallback: {agent}.pending (no task ID suffix)
69
+ if [ -z "$SIGNAL_FILE" ]; then
70
+ LEGACY_FILE="$HOME/.exe-os/task-signals/${AGENT}.pending"
71
+ if [ -f "$LEGACY_FILE" ]; then
72
+ SIGNAL_FILE="$LEGACY_FILE"
73
+ fi
74
+ fi
75
+
76
+ if [ -n "$SIGNAL_FILE" ] && [ -f "$SIGNAL_FILE" ]; then
41
77
  SIGNAL=$(cat "$SIGNAL_FILE" 2>/dev/null)
42
78
  TITLE=$(echo "$SIGNAL" | node -e "try{const d=JSON.parse(require('fs').readFileSync(0,'utf8'));console.log(d.title)}catch{}" 2>/dev/null)
43
79
  PRIORITY=$(echo "$SIGNAL" | node -e "try{const d=JSON.parse(require('fs').readFileSync(0,'utf8'));console.log(d.priority)}catch{}" 2>/dev/null)