whazaa 0.6.0 → 0.6.1
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/README.md +28 -19
- package/dist/index.js +35 -1
- package/dist/index.js.map +1 -1
- package/dist/watch.d.ts +7 -3
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +173 -29
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -63,7 +63,9 @@ Just say something like:
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
-
## Terminal Watcher (iTerm2)
|
|
66
|
+
## Terminal Watcher (macOS + iTerm2)
|
|
67
|
+
|
|
68
|
+
> **Platform:** The watcher currently requires **macOS** with **iTerm2**. It uses AppleScript (`osascript`) to type into a specific iTerm2 session. Terminal.app and non-macOS platforms are not yet supported — contributions welcome.
|
|
67
69
|
|
|
68
70
|
The `watch` command bridges WhatsApp messages directly into a Claude Code terminal session. Incoming messages are typed into the terminal via AppleScript automation — Claude sees them as regular user input.
|
|
69
71
|
|
|
@@ -71,38 +73,39 @@ The `watch` command bridges WhatsApp messages directly into a Claude Code termin
|
|
|
71
73
|
|
|
72
74
|
1. Whazaa MCP server writes incoming messages to a log file
|
|
73
75
|
2. The watcher polls the log for new lines (every 2 seconds)
|
|
74
|
-
3.
|
|
75
|
-
4.
|
|
76
|
+
3. The watcher resolves the target iTerm2 session (see below)
|
|
77
|
+
4. New messages are typed into that session via `osascript`
|
|
78
|
+
5. Claude Code processes them as regular user input
|
|
76
79
|
|
|
77
|
-
###
|
|
80
|
+
### Session resolution
|
|
78
81
|
|
|
79
|
-
|
|
82
|
+
The watcher uses a fallback chain to find a usable iTerm2 session:
|
|
80
83
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
1. **Try the specified session ID** — uses the session ID passed on the command line
|
|
85
|
+
2. **Search by tab name** — if that session is gone, scans all iTerm2 sessions for one whose tab name contains "claude"
|
|
86
|
+
3. **Retry after 2 seconds** — if still not found, waits and tries again (AppleScript may need a moment to connect when the watcher starts fresh from launchd)
|
|
87
|
+
4. **Create a new tab** — if no session is found after the retry, opens a new iTerm2 tab, runs `claude`, waits for it to boot, then uses that session
|
|
84
88
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npx whazaa watch <session-id>
|
|
89
|
-
```
|
|
89
|
+
This means the watcher can recover automatically if you close and reopen your Claude Code tab, or if it was started before iTerm2 was fully ready.
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
### Managing the watcher
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Claude Code manages the watcher automatically — when you say "listen on WhatsApp" or use `/whatsapp on`, it starts the watcher as a macOS launchd agent targeting the current iTerm2 session. The control script is at `scripts/watcher-ctl.sh`:
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
|
-
|
|
96
|
+
scripts/watcher-ctl.sh start # Install and start as launchd agent
|
|
97
|
+
scripts/watcher-ctl.sh stop # Stop and unload the agent
|
|
98
|
+
scripts/watcher-ctl.sh status # Show whether the agent is running
|
|
97
99
|
```
|
|
98
100
|
|
|
101
|
+
The launchd agent is configured with `KeepAlive: true`, so macOS automatically restarts the watcher if it crashes. It also uses `ProcessType: Interactive` and `LimitLoadToSessionType: Aqua`, which gives the agent access to the macOS GUI session. This is required because AppleScript needs a GUI context to control iTerm2 — without it, `osascript` calls from a launchd background agent would fail silently or be refused by the system.
|
|
102
|
+
|
|
99
103
|
### Configuration
|
|
100
104
|
|
|
101
105
|
| Variable | Default | Description |
|
|
102
106
|
|----------|---------|-------------|
|
|
103
107
|
| `WHAZAA_LOG` | `/tmp/whazaa-incoming.log` | Path to the incoming message log file |
|
|
104
108
|
| `WHAZAA_POLL_INTERVAL` | `2` | Seconds between file checks |
|
|
105
|
-
| `WHAZAA_PREFIX` | `[WhatsApp]` | Prefix added to messages typed into the terminal |
|
|
106
109
|
|
|
107
110
|
---
|
|
108
111
|
|
|
@@ -187,6 +190,9 @@ After updating the MCP config, restart Claude Code. On first run, Whazaa prints
|
|
|
187
190
|
|
|
188
191
|
Whazaa uses the [Baileys](https://github.com/WhiskeySockets/Baileys) library to maintain a persistent WebSocket connection to WhatsApp's servers using the same multi-device protocol as WhatsApp Web. It exposes MCP tools over stdin/stdout and routes all Baileys output to stderr to keep the JSON-RPC stream clean.
|
|
189
192
|
|
|
193
|
+
**Stale instance cleanup:**
|
|
194
|
+
When a new MCP server starts, it automatically finds and kills any existing Whazaa MCP processes (excluding watch processes and itself). This prevents multiple instances from competing for the same WhatsApp auth credentials, which would otherwise cause frequent disconnects as each instance races to own the session.
|
|
195
|
+
|
|
190
196
|
**Message flow (incoming):**
|
|
191
197
|
1. You type a message on your phone in the self-chat
|
|
192
198
|
2. Baileys receives it via WebSocket
|
|
@@ -209,7 +215,6 @@ Whazaa uses the [Baileys](https://github.com/WhiskeySockets/Baileys) library to
|
|
|
209
215
|
| `WHAZAA_AUTH_DIR` | `~/.whazaa/auth/` | Directory for WhatsApp session credentials |
|
|
210
216
|
| `WHAZAA_LOG` | `/tmp/whazaa-incoming.log` | Incoming message log file (used by `watch`) |
|
|
211
217
|
| `WHAZAA_POLL_INTERVAL` | `2` | Watcher poll interval in seconds |
|
|
212
|
-
| `WHAZAA_PREFIX` | `[WhatsApp]` | Prefix for messages typed into terminal |
|
|
213
218
|
|
|
214
219
|
---
|
|
215
220
|
|
|
@@ -223,6 +228,10 @@ Your session was invalidated (e.g. you unlinked the device in WhatsApp). Run `np
|
|
|
223
228
|
|
|
224
229
|
Call `whatsapp_receive` to drain the queue. Only messages sent to your own number (the self-chat / "Saved Messages" chat) are captured. If using the watcher, check that it's running: `ps aux | grep "whazaa.*watch"`.
|
|
225
230
|
|
|
231
|
+
**"iTerm2 wants to control..." security prompt**
|
|
232
|
+
|
|
233
|
+
On first use, macOS will show a security dialog asking whether to allow the watcher (or `osascript`) to control iTerm2. Click "OK" to allow it. If you accidentally clicked "Don't Allow", go to System Settings → Privacy & Security → Automation and enable iTerm2 for the relevant app. Without this permission, the watcher cannot type messages into your terminal.
|
|
234
|
+
|
|
226
235
|
**Watcher not typing into terminal**
|
|
227
236
|
|
|
228
237
|
Verify the session ID matches your Claude Code tab: `echo $ITERM_SESSION_ID`. The watcher requires iTerm2 on macOS.
|
|
@@ -240,8 +249,8 @@ Set `WHAZAA_AUTH_DIR` to a different directory for each account and run separate
|
|
|
240
249
|
## Requirements
|
|
241
250
|
|
|
242
251
|
- Node.js >= 18
|
|
243
|
-
- macOS with iTerm2 (for the `watch` command)
|
|
244
252
|
- WhatsApp account with multi-device support
|
|
253
|
+
- **For the `watch` command:** macOS with [iTerm2](https://iterm2.com/) (uses AppleScript to type into terminal sessions)
|
|
245
254
|
|
|
246
255
|
---
|
|
247
256
|
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* the script runs an interactive setup wizard instead of starting the MCP server.
|
|
18
18
|
* In setup mode stdout is the terminal — console.log is safe to use.
|
|
19
19
|
*/
|
|
20
|
+
import { execSync } from "node:child_process";
|
|
20
21
|
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
21
22
|
import { homedir } from "node:os";
|
|
22
23
|
import { dirname, join } from "node:path";
|
|
@@ -295,6 +296,36 @@ server.tool("whatsapp_login", [
|
|
|
295
296
|
}
|
|
296
297
|
});
|
|
297
298
|
// ---------------------------------------------------------------------------
|
|
299
|
+
// Stale instance cleanup
|
|
300
|
+
// ---------------------------------------------------------------------------
|
|
301
|
+
/**
|
|
302
|
+
* Kill any other Whazaa MCP server processes (not watch mode, not ourselves).
|
|
303
|
+
* Multiple instances compete for the same WhatsApp auth credentials and cause
|
|
304
|
+
* connection failures. This ensures only one MCP server is active at a time.
|
|
305
|
+
*/
|
|
306
|
+
function killStaleInstances() {
|
|
307
|
+
const myPid = process.pid;
|
|
308
|
+
try {
|
|
309
|
+
// Find all node processes running Whazaa's index.js (excluding watch mode)
|
|
310
|
+
const output = execSync(`ps ax -o pid,args | grep '[d]ist/index.js' | grep -v ' watch '`, { encoding: "utf-8", timeout: 5_000 });
|
|
311
|
+
for (const line of output.trim().split("\n")) {
|
|
312
|
+
const pid = parseInt(line.trim(), 10);
|
|
313
|
+
if (!pid || pid === myPid)
|
|
314
|
+
continue;
|
|
315
|
+
try {
|
|
316
|
+
process.kill(pid, "SIGTERM");
|
|
317
|
+
process.stderr.write(`[whazaa] Killed stale instance (PID ${pid})\n`);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
// Process already exited — ignore
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// No matches or command failed — nothing to clean up
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
298
329
|
// Main
|
|
299
330
|
// ---------------------------------------------------------------------------
|
|
300
331
|
async function main() {
|
|
@@ -321,7 +352,10 @@ async function main() {
|
|
|
321
352
|
await watch(sessionId);
|
|
322
353
|
return;
|
|
323
354
|
}
|
|
324
|
-
//
|
|
355
|
+
// Kill stale Whazaa MCP server instances before starting.
|
|
356
|
+
// Multiple instances compete for the same WhatsApp auth and cause disconnects.
|
|
357
|
+
killStaleInstances();
|
|
358
|
+
// Start WhatsApp connection in the background.
|
|
325
359
|
// initialize() resolves once connected OR once a QR code has been emitted,
|
|
326
360
|
// so the MCP server is immediately available for tool calls in both cases.
|
|
327
361
|
initialize().catch((err) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* watch.ts —
|
|
2
|
+
* watch.ts — Smart terminal watcher for Claude Code integration
|
|
3
3
|
*
|
|
4
4
|
* Monitors the Whazaa incoming message log and types new messages
|
|
5
|
-
* into
|
|
5
|
+
* into an iTerm2 session running Claude Code.
|
|
6
|
+
*
|
|
7
|
+
* Smart session resolution (in order):
|
|
8
|
+
* 1. Try the specified session ID (from /whatsapp on)
|
|
9
|
+
* 2. If gone, find any iTerm2 session running claude
|
|
10
|
+
* 3. If none, open a new iTerm2 tab, start claude, use that
|
|
6
11
|
*
|
|
7
12
|
* Usage: npx whazaa watch <session-id>
|
|
8
13
|
*
|
|
9
14
|
* Environment variables:
|
|
10
15
|
* WHAZAA_LOG Path to incoming message log (default: /tmp/whazaa-incoming.log)
|
|
11
16
|
* WHAZAA_POLL_INTERVAL Seconds between checks (default: 2)
|
|
12
|
-
* WHAZAA_PREFIX Message prefix (default: [WhatsApp])
|
|
13
17
|
*/
|
|
14
18
|
export declare function watch(rawSessionId: string): Promise<void>;
|
|
15
19
|
//# sourceMappingURL=watch.d.ts.map
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgLH,wBAAsB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8H/D"}
|
package/dist/watch.js
CHANGED
|
@@ -1,33 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* watch.ts —
|
|
2
|
+
* watch.ts — Smart terminal watcher for Claude Code integration
|
|
3
3
|
*
|
|
4
4
|
* Monitors the Whazaa incoming message log and types new messages
|
|
5
|
-
* into
|
|
5
|
+
* into an iTerm2 session running Claude Code.
|
|
6
|
+
*
|
|
7
|
+
* Smart session resolution (in order):
|
|
8
|
+
* 1. Try the specified session ID (from /whatsapp on)
|
|
9
|
+
* 2. If gone, find any iTerm2 session running claude
|
|
10
|
+
* 3. If none, open a new iTerm2 tab, start claude, use that
|
|
6
11
|
*
|
|
7
12
|
* Usage: npx whazaa watch <session-id>
|
|
8
13
|
*
|
|
9
14
|
* Environment variables:
|
|
10
15
|
* WHAZAA_LOG Path to incoming message log (default: /tmp/whazaa-incoming.log)
|
|
11
16
|
* WHAZAA_POLL_INTERVAL Seconds between checks (default: 2)
|
|
12
|
-
* WHAZAA_PREFIX Message prefix (default: [WhatsApp])
|
|
13
17
|
*/
|
|
14
18
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
19
|
import { spawnSync } from "node:child_process";
|
|
20
|
+
import { homedir } from "node:os";
|
|
16
21
|
function resolveConfig(sessionId) {
|
|
17
22
|
return {
|
|
18
23
|
sessionId,
|
|
19
24
|
logFile: process.env.WHAZAA_LOG || "/tmp/whazaa-incoming.log",
|
|
20
25
|
pollInterval: (parseInt(process.env.WHAZAA_POLL_INTERVAL || "2", 10) || 2) * 1_000,
|
|
21
|
-
prefix: process.env.WHAZAA_PREFIX || "[WhatsApp]",
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
// --- Terminal adapters -------------------------------------------------------
|
|
25
29
|
/**
|
|
26
|
-
*
|
|
27
|
-
|
|
30
|
+
* Run an AppleScript and return its stdout, or null on failure.
|
|
31
|
+
*/
|
|
32
|
+
function runAppleScript(script) {
|
|
33
|
+
const result = spawnSync("osascript", [], {
|
|
34
|
+
input: script,
|
|
35
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
36
|
+
timeout: 10_000,
|
|
37
|
+
});
|
|
38
|
+
if (result.status !== 0)
|
|
39
|
+
return null;
|
|
40
|
+
return result.stdout?.toString().trim() ?? null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Type text into a specific iTerm2 session and press Enter.
|
|
44
|
+
* Returns true if the session was found and text was typed.
|
|
28
45
|
*/
|
|
29
|
-
function
|
|
30
|
-
// Escape for AppleScript string literal (backslash then double-quote)
|
|
46
|
+
function typeIntoSession(sessionId, text) {
|
|
31
47
|
const escaped = text.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
32
48
|
const script = `
|
|
33
49
|
tell application "iTerm2"
|
|
@@ -42,41 +58,122 @@ tell application "iTerm2"
|
|
|
42
58
|
end repeat
|
|
43
59
|
end repeat
|
|
44
60
|
end repeat
|
|
45
|
-
return "
|
|
61
|
+
return "not_found"
|
|
46
62
|
end tell`;
|
|
47
|
-
const result =
|
|
48
|
-
|
|
63
|
+
const result = runAppleScript(script);
|
|
64
|
+
return result === "ok";
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Search all iTerm2 sessions for one whose name contains "claude" (case-insensitive).
|
|
68
|
+
* The session name typically reflects the running process or tab title.
|
|
69
|
+
* Returns the session ID if found, null otherwise.
|
|
70
|
+
*/
|
|
71
|
+
function findClaudeSession() {
|
|
72
|
+
// Get all sessions as "id\tname" lines
|
|
73
|
+
const script = `
|
|
74
|
+
tell application "iTerm2"
|
|
75
|
+
set output to ""
|
|
76
|
+
repeat with aWindow in windows
|
|
77
|
+
repeat with aTab in tabs of aWindow
|
|
78
|
+
repeat with aSession in sessions of aTab
|
|
79
|
+
set sessionId to id of aSession
|
|
80
|
+
set sessionName to name of aSession
|
|
81
|
+
set output to output & sessionId & tab & sessionName & linefeed
|
|
82
|
+
end repeat
|
|
83
|
+
end repeat
|
|
84
|
+
end repeat
|
|
85
|
+
return output
|
|
86
|
+
end tell`;
|
|
87
|
+
const result = runAppleScript(script);
|
|
88
|
+
if (!result)
|
|
89
|
+
return null;
|
|
90
|
+
const lines = result.split("\n").filter(Boolean);
|
|
91
|
+
for (const line of lines) {
|
|
92
|
+
const tabIdx = line.indexOf("\t");
|
|
93
|
+
if (tabIdx < 0)
|
|
94
|
+
continue;
|
|
95
|
+
const id = line.substring(0, tabIdx);
|
|
96
|
+
const name = line.substring(tabIdx + 1).toLowerCase();
|
|
97
|
+
// Match Claude Code in the tab title (covers "claude", "(claude)", "Claude Code")
|
|
98
|
+
if (name.includes("claude")) {
|
|
99
|
+
process.stderr.write(`[whazaa-watch] Found claude session: ${id} ("${line.substring(tabIdx + 1)}")\n`);
|
|
100
|
+
return id;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if iTerm2 is running.
|
|
107
|
+
*/
|
|
108
|
+
function isItermRunning() {
|
|
109
|
+
const result = spawnSync("pgrep", ["-x", "iTerm2"], {
|
|
49
110
|
stdio: ["pipe", "pipe", "pipe"],
|
|
50
|
-
timeout:
|
|
111
|
+
timeout: 3_000,
|
|
51
112
|
});
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
113
|
+
return result.status === 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a new iTerm2 tab, cd to home, run `claude`, and return the new session ID.
|
|
117
|
+
*
|
|
118
|
+
* The `claude` command is executed via the shell, so it resolves whatever the user
|
|
119
|
+
* has configured — alias, function, or PATH binary. No hardcoded paths.
|
|
120
|
+
*
|
|
121
|
+
* Returns the session ID of the new tab, or null on failure.
|
|
122
|
+
*/
|
|
123
|
+
function createClaudeSession() {
|
|
124
|
+
const home = homedir();
|
|
125
|
+
// If iTerm2 isn't running, launch it first
|
|
126
|
+
if (!isItermRunning()) {
|
|
127
|
+
process.stderr.write("[whazaa-watch] iTerm2 not running, launching...\n");
|
|
128
|
+
spawnSync("open", ["-a", "iTerm"], { timeout: 10_000 });
|
|
129
|
+
// Wait for iTerm2 to be ready
|
|
130
|
+
for (let i = 0; i < 10; i++) {
|
|
131
|
+
spawnSync("sleep", ["1"]);
|
|
132
|
+
if (isItermRunning())
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
56
135
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
136
|
+
// Create new tab and get its session ID
|
|
137
|
+
const createScript = `
|
|
138
|
+
tell application "iTerm2"
|
|
139
|
+
tell current window
|
|
140
|
+
set newTab to (create tab with default profile)
|
|
141
|
+
tell current session of newTab
|
|
142
|
+
write text "cd ${home}"
|
|
143
|
+
delay 0.5
|
|
144
|
+
write text "claude"
|
|
145
|
+
return id
|
|
146
|
+
end tell
|
|
147
|
+
end tell
|
|
148
|
+
end tell`;
|
|
149
|
+
const sessionId = runAppleScript(createScript);
|
|
150
|
+
if (!sessionId) {
|
|
151
|
+
process.stderr.write("[whazaa-watch] Failed to create new iTerm2 tab\n");
|
|
152
|
+
return null;
|
|
61
153
|
}
|
|
62
|
-
|
|
154
|
+
process.stderr.write(`[whazaa-watch] Created new claude session: ${sessionId}\n`);
|
|
155
|
+
// Wait for Claude Code to start up (it takes a few seconds)
|
|
156
|
+
process.stderr.write("[whazaa-watch] Waiting for Claude Code to start...\n");
|
|
157
|
+
spawnSync("sleep", ["8"]);
|
|
158
|
+
return sessionId;
|
|
63
159
|
}
|
|
64
160
|
// --- Main loop ---------------------------------------------------------------
|
|
65
161
|
export async function watch(rawSessionId) {
|
|
66
162
|
// Strip the iTerm2 prefix (e.g. "w1t1p0:GUID" → "GUID")
|
|
67
|
-
|
|
163
|
+
let activeSessionId = rawSessionId.includes(":")
|
|
68
164
|
? rawSessionId.split(":").pop()
|
|
69
165
|
: rawSessionId;
|
|
70
|
-
const config = resolveConfig(
|
|
166
|
+
const config = resolveConfig(activeSessionId);
|
|
71
167
|
// Ensure log file exists and is empty
|
|
72
168
|
writeFileSync(config.logFile, "");
|
|
73
169
|
console.log(`Whazaa Watch`);
|
|
74
|
-
console.log(` Session: ${
|
|
170
|
+
console.log(` Session: ${activeSessionId}`);
|
|
75
171
|
console.log(` Log file: ${config.logFile}`);
|
|
76
172
|
console.log(` Interval: ${config.pollInterval / 1_000}s`);
|
|
77
|
-
console.log(`
|
|
173
|
+
console.log(` Mode: Smart (auto-find/create claude sessions)`);
|
|
78
174
|
console.log(`\nWaiting for messages...\n`);
|
|
79
175
|
let seen = 0;
|
|
176
|
+
let consecutiveFailures = 0;
|
|
80
177
|
// Graceful shutdown
|
|
81
178
|
const cleanup = (signal) => {
|
|
82
179
|
console.log(`\n[whazaa-watch] ${signal} received. Stopping.`);
|
|
@@ -84,6 +181,56 @@ export async function watch(rawSessionId) {
|
|
|
84
181
|
};
|
|
85
182
|
process.on("SIGINT", () => cleanup("SIGINT"));
|
|
86
183
|
process.on("SIGTERM", () => cleanup("SIGTERM"));
|
|
184
|
+
/**
|
|
185
|
+
* Smart delivery: try to type into a session, with fallback chain.
|
|
186
|
+
* 1. Try active session
|
|
187
|
+
* 2. Find any claude session
|
|
188
|
+
* 3. Create new claude session
|
|
189
|
+
*/
|
|
190
|
+
function deliverMessage(text) {
|
|
191
|
+
// Attempt 1: try current active session
|
|
192
|
+
if (typeIntoSession(activeSessionId, text)) {
|
|
193
|
+
consecutiveFailures = 0;
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
process.stderr.write(`[whazaa-watch] Session ${activeSessionId} not found. Searching for claude...\n`);
|
|
197
|
+
// Attempt 2: find any existing claude session
|
|
198
|
+
const found = findClaudeSession();
|
|
199
|
+
if (found) {
|
|
200
|
+
activeSessionId = found;
|
|
201
|
+
process.stderr.write(`[whazaa-watch] Retargeted to session: ${activeSessionId}\n`);
|
|
202
|
+
if (typeIntoSession(activeSessionId, text)) {
|
|
203
|
+
consecutiveFailures = 0;
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Attempt 2b: retry after a short delay (AppleScript may need time after launchd start)
|
|
208
|
+
process.stderr.write("[whazaa-watch] Retrying session search after delay...\n");
|
|
209
|
+
spawnSync("sleep", ["2"]);
|
|
210
|
+
const retryFound = findClaudeSession();
|
|
211
|
+
if (retryFound) {
|
|
212
|
+
activeSessionId = retryFound;
|
|
213
|
+
process.stderr.write(`[whazaa-watch] Retargeted to session: ${activeSessionId}\n`);
|
|
214
|
+
if (typeIntoSession(activeSessionId, text)) {
|
|
215
|
+
consecutiveFailures = 0;
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Attempt 3: create a new claude session
|
|
220
|
+
process.stderr.write("[whazaa-watch] No claude session found. Starting new one...\n");
|
|
221
|
+
const created = createClaudeSession();
|
|
222
|
+
if (created) {
|
|
223
|
+
activeSessionId = created;
|
|
224
|
+
if (typeIntoSession(activeSessionId, text)) {
|
|
225
|
+
consecutiveFailures = 0;
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// All attempts failed
|
|
230
|
+
consecutiveFailures++;
|
|
231
|
+
process.stderr.write(`[whazaa-watch] Failed to deliver message (attempt ${consecutiveFailures})\n`);
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
87
234
|
// Poll loop
|
|
88
235
|
setInterval(() => {
|
|
89
236
|
if (!existsSync(config.logFile))
|
|
@@ -105,10 +252,7 @@ export async function watch(rawSessionId) {
|
|
|
105
252
|
if (!msg)
|
|
106
253
|
continue;
|
|
107
254
|
console.log(`[whazaa-watch] → ${msg}`);
|
|
108
|
-
|
|
109
|
-
if (!sent) {
|
|
110
|
-
console.log("[whazaa-watch] Failed to type into session");
|
|
111
|
-
}
|
|
255
|
+
deliverMessage(msg);
|
|
112
256
|
}
|
|
113
257
|
seen = lines.length;
|
|
114
258
|
}, config.pollInterval);
|
package/dist/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|