claudelink 1.3.2 → 1.4.3
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 +69 -0
- package/dist/recovery-watcher-settings.d.ts +9 -0
- package/dist/recovery-watcher-settings.js +89 -0
- package/dist/recovery-watcher-settings.js.map +1 -0
- package/dist/recovery-watcher.d.ts +11 -0
- package/dist/recovery-watcher.js +399 -0
- package/dist/recovery-watcher.js.map +1 -0
- package/dist/scheduler.d.ts +9 -0
- package/dist/scheduler.js +48 -0
- package/dist/scheduler.js.map +1 -1
- package/dist/ui-server.js +102 -0
- package/dist/ui-server.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -328,6 +328,7 @@ The Command Center is a local web UI at `http://127.0.0.1:7878` — a live conso
|
|
|
328
328
|
| **Registered agents** | Role, status, **per-agent Auto-reply toggle**, sent/received counts, last-seen. |
|
|
329
329
|
| **Health** | Total agents, unread/total messages, bulletin entries, orphan blockers, FK violations. **Heal orphans** cleans dead-agent tail rows in one transaction. |
|
|
330
330
|
| **Auto-nudge** | Global on/off + tick interval (1–120 min). Scheduler only fires for terminals that *actually have* unread mail — no wasted Claude turns. |
|
|
331
|
+
| **Recovery Watcher** *(v1.4.0+)* | Detects Anthropic API rate-limit / overload errors in agent terminals and types a recovery prompt automatically. Configurable poll interval, cooldown, and escalate-to-desktop-notification threshold. See [Recovery Watcher](#3-recovery-watcher-api-error-auto-recovery) below. |
|
|
331
332
|
| **Recent messages** | Live feed of the last several messages across all agents, with priority and unread badges. |
|
|
332
333
|
|
|
333
334
|
The page auto-refreshes every 2 seconds. **Kill all servers** in the header drops the entire mesh in one click.
|
|
@@ -425,6 +426,74 @@ Set any to `0` to disable. Decisions log to `~/.claudelink/auto-fire.log`.
|
|
|
425
426
|
|
|
426
427
|
> **Honest note on Claude's safety boundary:** Claude Code's prompt-injection defense correctly flags external content steering outbound tool calls. The Stop hook reliably triggers an autonomous inbox read; Claude may decline to send the outbound reply autonomously when the reply would be unrelated to the user's most recent prompt. This is responsible safety behavior, not a bug. **The auto-nudge scheduler avoids this entirely** because the keystroke path is indistinguishable from the user typing by hand.
|
|
427
428
|
|
|
429
|
+
### 3. Recovery Watcher (API-error auto-recovery)
|
|
430
|
+
|
|
431
|
+
*New in v1.4.0.* Detects when an agent's terminal has been halted by an Anthropic (or other LLM provider) API error and types a recovery prompt automatically, so you don't come back from being away to find a fleet of agents that have been stopped for hours.
|
|
432
|
+
|
|
433
|
+
#### The problem this solves
|
|
434
|
+
|
|
435
|
+
When the Anthropic API rate-limits or overloads, Claude Code surfaces an error like this and halts the agent's turn mid-flight:
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
API Error: Server is temporarily limiting requests (not your usage limit) · Rate limited
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
Other shapes you'll see from the same family:
|
|
442
|
+
|
|
443
|
+
| Surface | Meaning |
|
|
444
|
+
|---|---|
|
|
445
|
+
| `API Error: Server is temporarily limiting requests · Rate limited` | Anthropic short-window rate limit (most common at night) |
|
|
446
|
+
| `API Error: 429 Too Many Requests` | Per-token-bucket rate limit hit |
|
|
447
|
+
| `API Error: 529 Too Many Requests` | Anthropic-side overload (capacity, not your account) |
|
|
448
|
+
| `API Error: 503 Service Unavailable` | Upstream unavailable |
|
|
449
|
+
| `API Error: rate_limit_error` | Programmatic rate-limit error class |
|
|
450
|
+
| `API Error: overloaded_error` | Programmatic overload error class |
|
|
451
|
+
|
|
452
|
+
When this happens, the agent **cannot recover on its own** — the turn died with an error, and the CLI sits at a prompt waiting for human input. Without ClaudeLink, you have to walk to each affected terminal, sometimes ask another agent what the stuck one was doing, and manually type a continuation. If you're asleep or away for the weekend, the agents are stopped until you come back.
|
|
453
|
+
|
|
454
|
+
#### What Recovery Watcher does
|
|
455
|
+
|
|
456
|
+
```mermaid
|
|
457
|
+
flowchart LR
|
|
458
|
+
TICK{{"⏱️ Poll every N sec<br/>(default 60s)"}} --> CAP["Capture last 1500 chars<br/>of each agent's terminal<br/>(iTerm2 osascript /<br/>tmux capture-pane)"]
|
|
459
|
+
CAP --> MATCH{"Match against<br/>error patterns?"}
|
|
460
|
+
MATCH -->|No| WAIT["Skip — agent is fine"]
|
|
461
|
+
MATCH -->|Yes| POS{"Match within<br/>last 400 chars?"}
|
|
462
|
+
POS -->|No| DISC["Skip — likely prose<br/>discussion, not<br/>actual error"]
|
|
463
|
+
POS -->|Yes| DEDUP{"New error<br/>signature?"}
|
|
464
|
+
DEDUP -->|No, within cooldown| QUIET["Skip — already nudged<br/>this error"]
|
|
465
|
+
DEDUP -->|Yes| ESC{"Consecutive fires<br/>≥ escalateAfter?"}
|
|
466
|
+
ESC -->|Yes| NOTIFY["Desktop notification<br/>(API is genuinely down,<br/>nudging won't help)"]
|
|
467
|
+
ESC -->|No| FIRE["✅ Type recovery message<br/>into terminal<br/>(default: 'check messages<br/>and continue with your<br/>current assignment')"]
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
When a recovery prompt fires, the receiving CLI treats it as a normal user prompt, the agent calls `read_inbox` and resumes — the same path that already works for routine auto-nudge.
|
|
471
|
+
|
|
472
|
+

|
|
473
|
+
|
|
474
|
+
#### Configuration
|
|
475
|
+
|
|
476
|
+
Configurable directly from the Command Center (Recovery Watcher panel) or via `~/.claudelink/recovery-watcher.json`:
|
|
477
|
+
|
|
478
|
+
| Setting | Default | What it controls |
|
|
479
|
+
|---|---|---|
|
|
480
|
+
| `enabled` | `false` | Opt-in. Defaults off so existing installs see zero behavior change. |
|
|
481
|
+
| `intervalSec` | `60` | How often to poll each terminal. Clamped to [15, 600]. |
|
|
482
|
+
| `cooldownMin` | `5` | Minimum gap between recovery fires for the same agent + same error. Clamped to [1, 60]. |
|
|
483
|
+
| `escalateAfter` | `3` | After N consecutive fires without the error clearing, stop nudging and send a macOS desktop notification instead. Clamped to [1, 20]. |
|
|
484
|
+
| `recoveryMessage` | `"check messages and continue with your current assignment"` | Exact text typed into the stuck terminal. |
|
|
485
|
+
|
|
486
|
+
Audit log at `~/.claudelink/recovery-watcher.log` — every detection, fire, suppression, and escalation is recorded with the matched pattern and signature.
|
|
487
|
+
|
|
488
|
+
#### How false positives are avoided
|
|
489
|
+
|
|
490
|
+
Two-part guard built into the pattern matcher:
|
|
491
|
+
|
|
492
|
+
1. **Context-aware patterns.** Patterns require an `API Error:`, `Error:`, or `OpenAI API error:` prefix on the same line as the rate-limit/overload keyword. Bare words alone don't match — so agents merely *discussing* rate-limiting in conversation don't trigger false fires.
|
|
493
|
+
2. **Position filter.** The matched text must occur within the last 400 characters of the captured scrollback. Real CLI errors that paused execution sit at the bottom of the visible buffer, just above the prompt cursor. If the error string is buried mid-conversation with prose continuing after it, the match is rejected as "talked about, not actually happening."
|
|
494
|
+
|
|
495
|
+
The two guards together kill the noise: the watcher fires on real stuck agents, stays silent on agents that simply *mention* the topic.
|
|
496
|
+
|
|
428
497
|
### Per-agent opt-out
|
|
429
498
|
|
|
430
499
|
Two ways to silence an agent:
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RecoveryWatcherSettings {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
intervalSec: number;
|
|
4
|
+
cooldownMin: number;
|
|
5
|
+
escalateAfter: number;
|
|
6
|
+
recoveryMessage: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readRecoveryWatcherSettings(): RecoveryWatcherSettings;
|
|
9
|
+
export declare function writeRecoveryWatcherSettings(partial: Partial<RecoveryWatcherSettings>): RecoveryWatcherSettings;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Persistent settings for the recovery watcher. Stored as JSON at
|
|
3
|
+
// ~/.claudelink/recovery-watcher.json. Parallel to scheduler-settings.ts.
|
|
4
|
+
//
|
|
5
|
+
// Defaults: enabled=false (opt-in via Command Center), intervalSec=60,
|
|
6
|
+
// cooldownMin=5, escalateAfter=3 (consecutive fires before suppressing
|
|
7
|
+
// further fires and notifying via desktop instead).
|
|
8
|
+
//
|
|
9
|
+
// recoveryMessage is the exact text typed into the agent's terminal when
|
|
10
|
+
// an error pattern is detected and cooldown has passed. Default matches
|
|
11
|
+
// what Jay types by hand today.
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.readRecoveryWatcherSettings = readRecoveryWatcherSettings;
|
|
17
|
+
exports.writeRecoveryWatcherSettings = writeRecoveryWatcherSettings;
|
|
18
|
+
const fs_1 = __importDefault(require("fs"));
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
20
|
+
const os_1 = __importDefault(require("os"));
|
|
21
|
+
const SETTINGS_PATH = path_1.default.join(os_1.default.homedir(), ".claudelink", "recovery-watcher.json");
|
|
22
|
+
const DEFAULTS = {
|
|
23
|
+
enabled: false,
|
|
24
|
+
intervalSec: 60,
|
|
25
|
+
cooldownMin: 5,
|
|
26
|
+
escalateAfter: 3,
|
|
27
|
+
recoveryMessage: "check messages and continue with your current assignment",
|
|
28
|
+
};
|
|
29
|
+
function clampInterval(n) {
|
|
30
|
+
if (Number.isNaN(n))
|
|
31
|
+
return DEFAULTS.intervalSec;
|
|
32
|
+
return Math.max(15, Math.min(600, Math.floor(n)));
|
|
33
|
+
}
|
|
34
|
+
function clampCooldown(n) {
|
|
35
|
+
if (Number.isNaN(n))
|
|
36
|
+
return DEFAULTS.cooldownMin;
|
|
37
|
+
return Math.max(1, Math.min(60, Math.floor(n)));
|
|
38
|
+
}
|
|
39
|
+
function clampEscalate(n) {
|
|
40
|
+
if (Number.isNaN(n))
|
|
41
|
+
return DEFAULTS.escalateAfter;
|
|
42
|
+
return Math.max(1, Math.min(20, Math.floor(n)));
|
|
43
|
+
}
|
|
44
|
+
function readRecoveryWatcherSettings() {
|
|
45
|
+
try {
|
|
46
|
+
const raw = fs_1.default.readFileSync(SETTINGS_PATH, "utf8");
|
|
47
|
+
const parsed = JSON.parse(raw);
|
|
48
|
+
return {
|
|
49
|
+
enabled: Boolean(parsed.enabled),
|
|
50
|
+
intervalSec: clampInterval(Number(parsed.intervalSec)),
|
|
51
|
+
cooldownMin: clampCooldown(Number(parsed.cooldownMin)),
|
|
52
|
+
escalateAfter: clampEscalate(Number(parsed.escalateAfter)),
|
|
53
|
+
recoveryMessage: typeof parsed.recoveryMessage === "string" && parsed.recoveryMessage.length > 0
|
|
54
|
+
? parsed.recoveryMessage
|
|
55
|
+
: DEFAULTS.recoveryMessage,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return { ...DEFAULTS };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function writeRecoveryWatcherSettings(partial) {
|
|
63
|
+
const current = readRecoveryWatcherSettings();
|
|
64
|
+
const merged = {
|
|
65
|
+
enabled: partial.enabled !== undefined ? Boolean(partial.enabled) : current.enabled,
|
|
66
|
+
intervalSec: partial.intervalSec !== undefined
|
|
67
|
+
? clampInterval(Number(partial.intervalSec))
|
|
68
|
+
: current.intervalSec,
|
|
69
|
+
cooldownMin: partial.cooldownMin !== undefined
|
|
70
|
+
? clampCooldown(Number(partial.cooldownMin))
|
|
71
|
+
: current.cooldownMin,
|
|
72
|
+
escalateAfter: partial.escalateAfter !== undefined
|
|
73
|
+
? clampEscalate(Number(partial.escalateAfter))
|
|
74
|
+
: current.escalateAfter,
|
|
75
|
+
recoveryMessage: partial.recoveryMessage !== undefined &&
|
|
76
|
+
typeof partial.recoveryMessage === "string" &&
|
|
77
|
+
partial.recoveryMessage.length > 0
|
|
78
|
+
? partial.recoveryMessage
|
|
79
|
+
: current.recoveryMessage,
|
|
80
|
+
};
|
|
81
|
+
const dir = path_1.default.dirname(SETTINGS_PATH);
|
|
82
|
+
if (!fs_1.default.existsSync(dir))
|
|
83
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
84
|
+
const tmp = SETTINGS_PATH + ".tmp";
|
|
85
|
+
fs_1.default.writeFileSync(tmp, JSON.stringify(merged, null, 2));
|
|
86
|
+
fs_1.default.renameSync(tmp, SETTINGS_PATH);
|
|
87
|
+
return merged;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=recovery-watcher-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-watcher-settings.js","sourceRoot":"","sources":["../src/recovery-watcher-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RecoveryWatcherHandle {
|
|
2
|
+
reschedule: () => void;
|
|
3
|
+
stop: () => void;
|
|
4
|
+
tickNow: () => {
|
|
5
|
+
checked: number;
|
|
6
|
+
fired: number;
|
|
7
|
+
suppressed: number;
|
|
8
|
+
escalated: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare function startRecoveryWatcher(): RecoveryWatcherHandle;
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Recovery Watcher — polls each registered agent's terminal scrollback for
|
|
3
|
+
// known API-error signatures (Anthropic rate-limit / overload / 5xx and the
|
|
4
|
+
// Codex/Gemini equivalents). When a NEW occurrence is detected, types a
|
|
5
|
+
// recovery nudge into the terminal via the same two-write keystroke dispatch
|
|
6
|
+
// the auto-nudge scheduler uses.
|
|
7
|
+
//
|
|
8
|
+
// Why this exists: at night, Jay's long-running agents hit Anthropic API
|
|
9
|
+
// rate-limiting and the agent's turn halts mid-flight. The agent can't
|
|
10
|
+
// recover on its own — Claude Code surfaces the error and waits. Jay had
|
|
11
|
+
// been typing "check messages and continue with your current assignment"
|
|
12
|
+
// by hand for each stuck agent. This watcher automates that nudge.
|
|
13
|
+
//
|
|
14
|
+
// State tracking is in-memory: lastErrorSignature + lastFiredAt + consecutiveFires
|
|
15
|
+
// per agent. If the process restarts, we lose history and may re-fire once
|
|
16
|
+
// per known error — acceptable for MVP.
|
|
17
|
+
//
|
|
18
|
+
// Three guards prevent runaway loops:
|
|
19
|
+
// 1. Cooldown (default 5 min): same agent, same error → don't re-fire.
|
|
20
|
+
// 2. Signature de-dup: only fire on a NEW signature (different bytes
|
|
21
|
+
// OR sufficient time has passed). Sitting-in-scrollback errors don't
|
|
22
|
+
// keep re-triggering.
|
|
23
|
+
// 3. Escalate-after (default 3 consecutive fires): if we've nudged 3 times
|
|
24
|
+
// and the error keeps coming back, stop nudging and emit a desktop
|
|
25
|
+
// notification instead. The API is genuinely down; nudging won't help.
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.startRecoveryWatcher = startRecoveryWatcher;
|
|
31
|
+
const path_1 = __importDefault(require("path"));
|
|
32
|
+
const os_1 = __importDefault(require("os"));
|
|
33
|
+
const fs_1 = __importDefault(require("fs"));
|
|
34
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
35
|
+
const child_process_1 = require("child_process");
|
|
36
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
37
|
+
const scheduler_js_1 = require("./scheduler.js");
|
|
38
|
+
const recovery_watcher_settings_js_1 = require("./recovery-watcher-settings.js");
|
|
39
|
+
const NEXUS_DIR = path_1.default.join(os_1.default.homedir(), ".claudelink");
|
|
40
|
+
const DB_PATH = path_1.default.join(NEXUS_DIR, "nexus.db");
|
|
41
|
+
const LOG_PATH = path_1.default.join(NEXUS_DIR, "recovery-watcher.log");
|
|
42
|
+
// Patterns drawn from observed errors across Claude Code, Codex, Gemini.
|
|
43
|
+
// MVP is hardcoded; later releases can make this configurable per-agent.
|
|
44
|
+
//
|
|
45
|
+
// Design rule: every pattern requires CLI-error context (an "API Error:",
|
|
46
|
+
// "Error:", or distinctive status-line prefix) on the same visible line as
|
|
47
|
+
// the rate-limit/overload keyword. This is what separates real CLI error
|
|
48
|
+
// output from prose that merely DISCUSSES rate-limiting (agent conversations,
|
|
49
|
+
// docs, log inspection). Without this, the watcher false-fires whenever any
|
|
50
|
+
// agent talks about rate-limiting.
|
|
51
|
+
// Note: gap classes use [\s\S]{0,N}? (lazy any-char including newline)
|
|
52
|
+
// rather than [^\n]*, because iTerm2's `contents of session` returns
|
|
53
|
+
// soft-wrapped errors with real \n at the wrap. A long error like
|
|
54
|
+
// `API Error: 529 {"type":"error","error":{"type":"overloaded_error",...}}`
|
|
55
|
+
// arrives in scrollback as multiple lines; [^\n]* would never bridge the
|
|
56
|
+
// gap and the pattern wouldn't fire. The tight upper bound (60-200 chars)
|
|
57
|
+
// keeps the false-positive surface narrow — we still need an error
|
|
58
|
+
// prefix on the same VISUAL block as the keyword, just not the same
|
|
59
|
+
// pre-wrap line.
|
|
60
|
+
const ERROR_PATTERNS = [
|
|
61
|
+
// Claude Code's full rate-limit error line — distinctive enough to be
|
|
62
|
+
// its own pattern. Still subject to position filter below.
|
|
63
|
+
/API\s*Error:\s*Server is temporarily limiting requests/i,
|
|
64
|
+
// Claude Code other API errors — require "API Error:" prefix near the
|
|
65
|
+
// keyword (with bounded any-char gap to allow soft-wrap).
|
|
66
|
+
/API\s*Error:[\s\S]{0,200}?\brate[ _-]?limit/i,
|
|
67
|
+
/API\s*Error:[\s\S]{0,200}?\boverload/i,
|
|
68
|
+
/API\s*Error:[\s\S]{0,200}?\b(529|503|429)\b/i,
|
|
69
|
+
/API\s*Error:[\s\S]{0,200}?\b(rate_limit_error|overloaded_error)\b/i,
|
|
70
|
+
// OpenAI/Codex CLI shapes — require an "error" prefix near the keyword.
|
|
71
|
+
/\bOpenAI\s*API\s*(error|exception):[\s\S]{0,200}?\b(rate_limit|overload)/i,
|
|
72
|
+
/\berror\b[\s\S]{0,60}?\brate_limit_exceeded\b/i,
|
|
73
|
+
// Bare HTTP status lines (distinctive because they include the
|
|
74
|
+
// canonical status text, which prose-mentions rarely include verbatim).
|
|
75
|
+
/\b(429|529)\s+Too Many Requests\b/i,
|
|
76
|
+
/\b503\s+Service Unavailable\b/i,
|
|
77
|
+
// Generic CLI-error safety net — "Error" / "Error:" near the rate-limit
|
|
78
|
+
// token. Requires the Error token to be at the START OF A VISIBLE LINE
|
|
79
|
+
// (optionally with the Claude Code `⎿` tool-output glyph prefix), so
|
|
80
|
+
// prose mentions of the same phrase in mid-conversation don't trigger.
|
|
81
|
+
// Without the line-start anchor, agents writing about ClaudeLink in
|
|
82
|
+
// their own work (e.g. the build-log writer) hit this as a false positive.
|
|
83
|
+
/(?:^|\n)[\s│⎿]*Error:?\b[\s\S]{0,80}?\b(rate[ _-]?limited|rate_limit_error|overloaded_error|request was throttled)\b/i,
|
|
84
|
+
];
|
|
85
|
+
// Capture only the last N characters of scrollback. Errors that paused
|
|
86
|
+
// execution sit at the bottom of the visible buffer. Reading more wastes
|
|
87
|
+
// CPU and increases the false-positive surface.
|
|
88
|
+
const SCROLLBACK_TAIL_CHARS = 1500;
|
|
89
|
+
// Matched error text must be within this many characters of the END of
|
|
90
|
+
// the captured scrollback. When a CLI is genuinely stuck, the error is
|
|
91
|
+
// near the LAST thing on screen above the prompt. When an agent is
|
|
92
|
+
// merely discussing an error in conversation, more text follows the
|
|
93
|
+
// mention, pushing it well away from the end. This is the key
|
|
94
|
+
// false-positive guard.
|
|
95
|
+
//
|
|
96
|
+
// The threshold sits at 1000 chars because Claude Code renders ~500 chars
|
|
97
|
+
// of UI chrome BELOW a real error (empty prompt line, horizontal
|
|
98
|
+
// separators, the "⏵⏵ auto mode on" footer, blank lines). v1.4.0 was
|
|
99
|
+
// tuned at 400 based on a synthetic test that omitted that chrome and
|
|
100
|
+
// false-negative'd real stuck terminals in production. Discussion cases
|
|
101
|
+
// observed at ≥1250 chars from end, so 1000 keeps a clean margin without
|
|
102
|
+
// re-introducing the false-positive surface.
|
|
103
|
+
const MAX_DISTANCE_FROM_END = 1000;
|
|
104
|
+
function logLine(line) {
|
|
105
|
+
try {
|
|
106
|
+
fs_1.default.appendFileSync(LOG_PATH, `${new Date().toISOString()} ${line}\n`);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// logging never breaks the watcher
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function escapeForAppleScript(s) {
|
|
113
|
+
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
114
|
+
}
|
|
115
|
+
function isProcessAlive(pid) {
|
|
116
|
+
try {
|
|
117
|
+
process.kill(pid, 0);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Capture the terminal's visible scrollback for the given agent. Returns
|
|
125
|
+
// the last SCROLLBACK_TAIL_CHARS of the buffer, or null on failure.
|
|
126
|
+
function captureScrollback(c) {
|
|
127
|
+
const app = (c.terminal_app || "").toLowerCase();
|
|
128
|
+
try {
|
|
129
|
+
if (app === "iterm2") {
|
|
130
|
+
const script = `tell application "iTerm2"
|
|
131
|
+
repeat with w in windows
|
|
132
|
+
repeat with t in tabs of w
|
|
133
|
+
repeat with s in sessions of t
|
|
134
|
+
if (tty of s) is "${escapeForAppleScript(c.tty)}" then return contents of s
|
|
135
|
+
end repeat
|
|
136
|
+
end repeat
|
|
137
|
+
end repeat
|
|
138
|
+
end tell
|
|
139
|
+
return ""`;
|
|
140
|
+
const out = (0, child_process_1.execFileSync)("osascript", ["-e", script], {
|
|
141
|
+
timeout: 3000,
|
|
142
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
143
|
+
encoding: "utf-8",
|
|
144
|
+
});
|
|
145
|
+
return out.length > SCROLLBACK_TAIL_CHARS
|
|
146
|
+
? out.slice(-SCROLLBACK_TAIL_CHARS)
|
|
147
|
+
: out;
|
|
148
|
+
}
|
|
149
|
+
if (app === "tmux") {
|
|
150
|
+
if (!c.pane_id)
|
|
151
|
+
return null;
|
|
152
|
+
const out = (0, child_process_1.execFileSync)("tmux", ["capture-pane", "-t", c.pane_id, "-p", "-S", "-50"], {
|
|
153
|
+
timeout: 2000,
|
|
154
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
155
|
+
encoding: "utf-8",
|
|
156
|
+
});
|
|
157
|
+
return out.length > SCROLLBACK_TAIL_CHARS
|
|
158
|
+
? out.slice(-SCROLLBACK_TAIL_CHARS)
|
|
159
|
+
: out;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Hash the matched error context to a short signature. We hash the
|
|
168
|
+
// matched substring plus a small surrounding window, BUT first
|
|
169
|
+
// canonicalize per-request volatile bytes — request IDs, retry counters,
|
|
170
|
+
// timestamps — so de-dup compares semantic "same error" rather than
|
|
171
|
+
// byte-identical scrollback. Without canonicalization, every tick on a
|
|
172
|
+
// genuinely-still-stuck agent produced a fresh signature because Claude
|
|
173
|
+
// Code's retry text included a fresh request ID each time; the cooldown
|
|
174
|
+
// was masking the de-dup failure by accident.
|
|
175
|
+
function computeSignature(scrollback, match) {
|
|
176
|
+
const start = Math.max(0, (match.index ?? 0) - 32);
|
|
177
|
+
const end = Math.min(scrollback.length, (match.index ?? 0) + match[0].length + 32);
|
|
178
|
+
const window = scrollback.slice(start, end);
|
|
179
|
+
const canon = window
|
|
180
|
+
.toLowerCase()
|
|
181
|
+
.replace(/\b[0-9a-f]{8,}\b/gi, "#") // request IDs, hex tokens (≥8 chars)
|
|
182
|
+
.replace(/\d+/g, "#") // numbers (retry counters, status codes, timestamps)
|
|
183
|
+
.replace(/\s+/g, " ") // collapse whitespace so re-wrap doesn't shift sig
|
|
184
|
+
.trim();
|
|
185
|
+
return crypto_1.default.createHash("sha1").update(canon).digest("hex").slice(0, 16);
|
|
186
|
+
}
|
|
187
|
+
// Match scrollback against the known patterns. Returns the match CLOSEST
|
|
188
|
+
// to the end of the buffer (across all patterns and all occurrences), or
|
|
189
|
+
// null if nothing matched within MAX_DISTANCE_FROM_END.
|
|
190
|
+
//
|
|
191
|
+
// IMPORTANT: this iterates ALL matches across ALL patterns, not just the
|
|
192
|
+
// first match per pattern. v1.4.0/v1.4.1 used `scrollback.match(re)`
|
|
193
|
+
// which returns only the first occurrence — when Claude Code rendered
|
|
194
|
+
// the same error twice (initial failure + retry), the matcher locked
|
|
195
|
+
// onto the first (out-of-range) copy and silently skipped, leaving real
|
|
196
|
+
// stuck terminals un-nudged. Iterating all matches and picking the
|
|
197
|
+
// nearest-to-end is what guarantees a stuck error gets caught.
|
|
198
|
+
function detectError(scrollback) {
|
|
199
|
+
let best = null;
|
|
200
|
+
for (const re of ERROR_PATTERNS) {
|
|
201
|
+
// Force a global flag so exec() iterates rather than locking to first.
|
|
202
|
+
const globalRe = new RegExp(re.source, re.flags.includes("g") ? re.flags : re.flags + "g");
|
|
203
|
+
let m;
|
|
204
|
+
while ((m = globalRe.exec(scrollback)) !== null) {
|
|
205
|
+
const matchEnd = m.index + m[0].length;
|
|
206
|
+
const distance = scrollback.length - matchEnd;
|
|
207
|
+
if (distance > MAX_DISTANCE_FROM_END)
|
|
208
|
+
continue;
|
|
209
|
+
if (best === null || distance < best.distanceFromEnd) {
|
|
210
|
+
best = { match: m, pattern: re, distanceFromEnd: distance };
|
|
211
|
+
}
|
|
212
|
+
// Guard against pathological zero-width matches advancing the
|
|
213
|
+
// regex engine's lastIndex.
|
|
214
|
+
if (m.index === globalRe.lastIndex)
|
|
215
|
+
globalRe.lastIndex++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (!best)
|
|
219
|
+
return null;
|
|
220
|
+
return {
|
|
221
|
+
pattern: best.pattern,
|
|
222
|
+
signature: computeSignature(scrollback, best.match),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function fireDesktopNotification(role, message) {
|
|
226
|
+
try {
|
|
227
|
+
const title = "ClaudeLink Recovery Watcher";
|
|
228
|
+
const subtitle = role;
|
|
229
|
+
const script = `display notification "${escapeForAppleScript(message)}" with title "${escapeForAppleScript(title)}" subtitle "${escapeForAppleScript(subtitle)}"`;
|
|
230
|
+
(0, child_process_1.execFileSync)("osascript", ["-e", script], {
|
|
231
|
+
timeout: 2000,
|
|
232
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// notification is best-effort
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function selectCandidates(db) {
|
|
240
|
+
// Watch live agents with a known TTY and terminal_app. Unlike the
|
|
241
|
+
// auto-nudge scheduler, we don't filter on autonomous_reply (a stuck
|
|
242
|
+
// advisor still benefits from a recovery nudge) and we don't require
|
|
243
|
+
// unread mail (the recovery message itself is the trigger, not an inbox).
|
|
244
|
+
const rows = db
|
|
245
|
+
.prepare(`SELECT id, role, tty, terminal_app, pane_id, pid
|
|
246
|
+
FROM agents
|
|
247
|
+
WHERE tty IS NOT NULL
|
|
248
|
+
AND terminal_app IS NOT NULL`)
|
|
249
|
+
.all();
|
|
250
|
+
return rows.filter((c) => isProcessAlive(c.pid));
|
|
251
|
+
}
|
|
252
|
+
function startRecoveryWatcher() {
|
|
253
|
+
let db = null;
|
|
254
|
+
let timer = null;
|
|
255
|
+
// Re-entrancy guard. captureScrollback() uses execFileSync with a 3s
|
|
256
|
+
// timeout; on a 14-agent fleet under iTerm2-unresponsive conditions
|
|
257
|
+
// (osascript ETIMEDOUT) a single tick can take 40+ seconds. The
|
|
258
|
+
// setInterval doesn't know or care, and would happily fire the next
|
|
259
|
+
// tick on top, blocking the event loop further. The flag is checked at
|
|
260
|
+
// the head of every tick — if a previous tick is still in flight, the
|
|
261
|
+
// new one logs and returns immediately.
|
|
262
|
+
let tickInProgress = false;
|
|
263
|
+
const state = new Map();
|
|
264
|
+
const openDb = () => {
|
|
265
|
+
if (!db)
|
|
266
|
+
db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
267
|
+
return db;
|
|
268
|
+
};
|
|
269
|
+
const getState = (id) => {
|
|
270
|
+
let s = state.get(id);
|
|
271
|
+
if (!s) {
|
|
272
|
+
s = { lastSignature: null, lastFiredAt: 0, consecutiveFires: 0, escalated: false };
|
|
273
|
+
state.set(id, s);
|
|
274
|
+
}
|
|
275
|
+
return s;
|
|
276
|
+
};
|
|
277
|
+
const tick = () => {
|
|
278
|
+
const summary = { checked: 0, fired: 0, suppressed: 0, escalated: 0 };
|
|
279
|
+
if (tickInProgress) {
|
|
280
|
+
logLine(`skip-tick: previous tick still in flight`);
|
|
281
|
+
return summary;
|
|
282
|
+
}
|
|
283
|
+
tickInProgress = true;
|
|
284
|
+
try {
|
|
285
|
+
return runTickBody(summary);
|
|
286
|
+
}
|
|
287
|
+
finally {
|
|
288
|
+
tickInProgress = false;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
const runTickBody = (summary) => {
|
|
292
|
+
const settings = (0, recovery_watcher_settings_js_1.readRecoveryWatcherSettings)();
|
|
293
|
+
if (!settings.enabled) {
|
|
294
|
+
return summary;
|
|
295
|
+
}
|
|
296
|
+
let candidates;
|
|
297
|
+
try {
|
|
298
|
+
candidates = selectCandidates(openDb());
|
|
299
|
+
}
|
|
300
|
+
catch (e) {
|
|
301
|
+
logLine(`tick-error: ${e?.message ?? String(e)}`);
|
|
302
|
+
return summary;
|
|
303
|
+
}
|
|
304
|
+
const now = Date.now();
|
|
305
|
+
const cooldownMs = settings.cooldownMin * 60 * 1000;
|
|
306
|
+
for (const c of candidates) {
|
|
307
|
+
summary.checked++;
|
|
308
|
+
const scrollback = captureScrollback(c);
|
|
309
|
+
if (scrollback === null)
|
|
310
|
+
continue;
|
|
311
|
+
const detected = detectError(scrollback);
|
|
312
|
+
if (!detected) {
|
|
313
|
+
// No error visible: reset the consecutive-fire counter so the agent
|
|
314
|
+
// can be nudged again the next time something goes wrong.
|
|
315
|
+
const s = getState(c.id);
|
|
316
|
+
if (s.consecutiveFires > 0 || s.escalated) {
|
|
317
|
+
logLine(`reset role=${c.role} (no error visible)`);
|
|
318
|
+
}
|
|
319
|
+
s.consecutiveFires = 0;
|
|
320
|
+
s.escalated = false;
|
|
321
|
+
s.lastSignature = null;
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
const s = getState(c.id);
|
|
325
|
+
// De-dup: same signature within cooldown → suppress silently.
|
|
326
|
+
if (s.lastSignature === detected.signature && now - s.lastFiredAt < cooldownMs) {
|
|
327
|
+
summary.suppressed++;
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
// Escalation: too many consecutive fires without resolution → stop
|
|
331
|
+
// nudging and notify the user instead.
|
|
332
|
+
if (s.consecutiveFires >= settings.escalateAfter) {
|
|
333
|
+
if (!s.escalated) {
|
|
334
|
+
fireDesktopNotification(c.role, `Agent ${c.role} appears API-blocked after ${s.consecutiveFires} recovery attempts. Manual intervention may be needed.`);
|
|
335
|
+
logLine(`escalated role=${c.role} consecutive_fires=${s.consecutiveFires} signature=${detected.signature}`);
|
|
336
|
+
s.escalated = true;
|
|
337
|
+
summary.escalated++;
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
summary.suppressed++;
|
|
341
|
+
}
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
// Fire the recovery nudge.
|
|
345
|
+
const result = (0, scheduler_js_1.injectKeystroke)(c, settings.recoveryMessage);
|
|
346
|
+
if (result === "ok") {
|
|
347
|
+
summary.fired++;
|
|
348
|
+
s.lastSignature = detected.signature;
|
|
349
|
+
s.lastFiredAt = now;
|
|
350
|
+
s.consecutiveFires++;
|
|
351
|
+
logLine(`fired role=${c.role} tty=${c.tty} terminal_app=${c.terminal_app} signature=${detected.signature} consecutive=${s.consecutiveFires} pattern=${detected.pattern.source}`);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
logLine(`fire-failed role=${c.role} result=${result} pattern=${detected.pattern.source}`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
tickInProgress = false;
|
|
358
|
+
return summary;
|
|
359
|
+
};
|
|
360
|
+
const reschedule = () => {
|
|
361
|
+
const settings = (0, recovery_watcher_settings_js_1.readRecoveryWatcherSettings)();
|
|
362
|
+
if (timer) {
|
|
363
|
+
clearInterval(timer);
|
|
364
|
+
timer = null;
|
|
365
|
+
}
|
|
366
|
+
if (!settings.enabled) {
|
|
367
|
+
logLine(`reschedule: disabled`);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const ms = settings.intervalSec * 1000;
|
|
371
|
+
timer = setInterval(() => {
|
|
372
|
+
try {
|
|
373
|
+
tick();
|
|
374
|
+
}
|
|
375
|
+
catch (e) {
|
|
376
|
+
logLine(`tick-uncaught: ${e?.message ?? String(e)}`);
|
|
377
|
+
}
|
|
378
|
+
}, ms);
|
|
379
|
+
logLine(`reschedule: enabled, intervalSec=${settings.intervalSec}, cooldownMin=${settings.cooldownMin}, escalateAfter=${settings.escalateAfter}`);
|
|
380
|
+
};
|
|
381
|
+
const stop = () => {
|
|
382
|
+
if (timer) {
|
|
383
|
+
clearInterval(timer);
|
|
384
|
+
timer = null;
|
|
385
|
+
}
|
|
386
|
+
if (db) {
|
|
387
|
+
try {
|
|
388
|
+
db.close();
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// ignore
|
|
392
|
+
}
|
|
393
|
+
db = null;
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
reschedule();
|
|
397
|
+
return { reschedule, stop, tickNow: tick };
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=recovery-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-watcher.js","sourceRoot":"","sources":["../src/recovery-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/scheduler.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
export interface NudgeCandidate {
|
|
2
|
+
id: string;
|
|
3
|
+
role: string;
|
|
4
|
+
tty: string;
|
|
5
|
+
terminal_app: string | null;
|
|
6
|
+
pane_id: string | null;
|
|
7
|
+
pid: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function injectKeystroke(c: NudgeCandidate, text: string): "ok" | "skip" | "fail";
|
|
1
10
|
export interface SchedulerHandle {
|
|
2
11
|
reschedule: () => void;
|
|
3
12
|
stop: () => void;
|
package/dist/scheduler.js
CHANGED
|
@@ -18,6 +18,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
18
18
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.injectKeystroke = injectKeystroke;
|
|
21
22
|
exports.startScheduler = startScheduler;
|
|
22
23
|
const path_1 = __importDefault(require("path"));
|
|
23
24
|
const os_1 = __importDefault(require("os"));
|
|
@@ -128,6 +129,22 @@ function selectCandidates(db) {
|
|
|
128
129
|
.all();
|
|
129
130
|
return rows.filter((c) => isProcessAlive(c.pid));
|
|
130
131
|
}
|
|
132
|
+
// Per-agent recheck — guards against shared-broadcast races where an
|
|
133
|
+
// earlier candidate in this tick (or a separate readInbox path like a
|
|
134
|
+
// Stop hook firing concurrently) already consumed the only unread row.
|
|
135
|
+
// SQL mirrors the EXISTS clause in selectCandidates exactly so the
|
|
136
|
+
// "is this agent still eligible?" semantics match the original filter.
|
|
137
|
+
// Returns true if the agent has unread mail right NOW.
|
|
138
|
+
function hasUnreadMail(db, agentId) {
|
|
139
|
+
const row = db
|
|
140
|
+
.prepare(`SELECT 1 FROM messages m
|
|
141
|
+
WHERE m.read = 0
|
|
142
|
+
AND m.from_agent != ?
|
|
143
|
+
AND (m.to_agent = ? OR m.to_agent IS NULL)
|
|
144
|
+
LIMIT 1`)
|
|
145
|
+
.get(agentId, agentId);
|
|
146
|
+
return row !== undefined;
|
|
147
|
+
}
|
|
131
148
|
function startScheduler() {
|
|
132
149
|
let db = null;
|
|
133
150
|
let timer = null;
|
|
@@ -150,6 +167,30 @@ function startScheduler() {
|
|
|
150
167
|
if (candidates.length === 0)
|
|
151
168
|
return summary;
|
|
152
169
|
for (const c of candidates) {
|
|
170
|
+
// Just-in-time recheck. selectCandidates snapshots the candidate set
|
|
171
|
+
// once, but the dispatch loop runs serially with ~600ms-3s per
|
|
172
|
+
// osascript call. With a shared broadcast row (single `read` flag for
|
|
173
|
+
// all recipients), the first agent to consume it via readInbox or a
|
|
174
|
+
// Stop hook flips read=1 globally — leaving subsequent candidates in
|
|
175
|
+
// this tick's snapshot pointing at no actual unread mail. Without the
|
|
176
|
+
// recheck, we'd type "check for updates" into terminals whose inbox
|
|
177
|
+
// is now empty (spurious-check-for-updates symptom).
|
|
178
|
+
let stillEligible;
|
|
179
|
+
try {
|
|
180
|
+
stillEligible = hasUnreadMail(openDb(), c.id);
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
// Fail-open: treat DB errors as eligible, mirroring the project's
|
|
184
|
+
// stated hook posture. If the DB is truly broken, injectKeystroke
|
|
185
|
+
// will fail too and be logged there.
|
|
186
|
+
logLine(`recheck-error role=${c.role} tty=${c.tty} error="${e?.message ?? String(e)}"`);
|
|
187
|
+
stillEligible = true;
|
|
188
|
+
}
|
|
189
|
+
if (!stillEligible) {
|
|
190
|
+
summary.skipped++;
|
|
191
|
+
logLine(`skip-recheck role=${c.role} tty=${c.tty} reason="inbox drained mid-tick"`);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
153
194
|
const result = injectKeystroke(c, NUDGE_TEXT);
|
|
154
195
|
if (result === "ok") {
|
|
155
196
|
summary.fired++;
|
|
@@ -162,6 +203,13 @@ function startScheduler() {
|
|
|
162
203
|
summary.failed++;
|
|
163
204
|
}
|
|
164
205
|
}
|
|
206
|
+
// Tick summary makes the broadcast race observable. A healthy directed-
|
|
207
|
+
// mail tick looks like `candidates=3 fired=3 skipped=0`. A broadcast
|
|
208
|
+
// cascade with race losses looks like `candidates=14 fired=1 skipped=13`
|
|
209
|
+
// — that pattern is the smoking-gun fingerprint.
|
|
210
|
+
if (candidates.length > 0) {
|
|
211
|
+
logLine(`tick-summary candidates=${candidates.length} fired=${summary.fired} skipped=${summary.skipped} failed=${summary.failed}`);
|
|
212
|
+
}
|
|
165
213
|
return summary;
|
|
166
214
|
};
|
|
167
215
|
const reschedule = () => {
|
package/dist/scheduler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,8DAA8D;AAC9D,2EAA2E;AAC3E,6BAA6B;AAC7B,EAAE;AACF,6BAA6B;AAC7B,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,qCAAqC;AACrC,+DAA+D;;;;;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/ui-server.js
CHANGED
|
@@ -11,6 +11,8 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
11
11
|
const child_process_1 = require("child_process");
|
|
12
12
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
13
13
|
const scheduler_js_1 = require("./scheduler.js");
|
|
14
|
+
const recovery_watcher_js_1 = require("./recovery-watcher.js");
|
|
15
|
+
const recovery_watcher_settings_js_1 = require("./recovery-watcher-settings.js");
|
|
14
16
|
const scheduler_settings_js_1 = require("./scheduler-settings.js");
|
|
15
17
|
const NEXUS_DIR = path_1.default.join(os_1.default.homedir(), ".claudelink");
|
|
16
18
|
const DB_PATH = path_1.default.join(NEXUS_DIR, "nexus.db");
|
|
@@ -358,6 +360,40 @@ const HTML = String.raw `<!doctype html>
|
|
|
358
360
|
</div>
|
|
359
361
|
</section>
|
|
360
362
|
|
|
363
|
+
<section class="panel full">
|
|
364
|
+
<h2>Recovery Watcher</h2>
|
|
365
|
+
<div class="body">
|
|
366
|
+
<div class="nudge-controls">
|
|
367
|
+
<label class="nudge-toggle">
|
|
368
|
+
<input type="checkbox" id="rw-enabled" />
|
|
369
|
+
<span id="rw-enabled-label">Off</span>
|
|
370
|
+
</label>
|
|
371
|
+
<label class="nudge-interval">
|
|
372
|
+
Poll every:
|
|
373
|
+
<input type="number" id="rw-interval" min="15" max="600" step="15" />
|
|
374
|
+
<span>sec</span>
|
|
375
|
+
</label>
|
|
376
|
+
<label class="nudge-interval">
|
|
377
|
+
Cooldown:
|
|
378
|
+
<input type="number" id="rw-cooldown" min="1" max="60" step="1" />
|
|
379
|
+
<span>min</span>
|
|
380
|
+
</label>
|
|
381
|
+
<label class="nudge-interval">
|
|
382
|
+
Escalate after:
|
|
383
|
+
<input type="number" id="rw-escalate" min="1" max="20" step="1" />
|
|
384
|
+
<span>fires</span>
|
|
385
|
+
</label>
|
|
386
|
+
<span id="rw-status" class="nudge-status"></span>
|
|
387
|
+
</div>
|
|
388
|
+
<p class="nudge-hint">
|
|
389
|
+
Watches each agent's terminal scrollback for API rate-limit and overload errors. On a NEW detection, types your recovery message into that terminal so the agent can resume. After N consecutive fires the watcher escalates to a desktop notification instead — if the API is genuinely down, nudging won't help.
|
|
390
|
+
</p>
|
|
391
|
+
<p class="nudge-hint">
|
|
392
|
+
Recovery message: <span class="mono" id="rw-message">—</span>
|
|
393
|
+
</p>
|
|
394
|
+
</div>
|
|
395
|
+
</section>
|
|
396
|
+
|
|
361
397
|
<section class="panel full">
|
|
362
398
|
<h2>Recent messages <span class="count" id="msg-count">0</span></h2>
|
|
363
399
|
<div class="body" id="msg-body"></div>
|
|
@@ -638,11 +674,53 @@ async function saveNudge() {
|
|
|
638
674
|
$("nudge-enabled").addEventListener("change", saveNudge);
|
|
639
675
|
$("nudge-interval").addEventListener("change", saveNudge);
|
|
640
676
|
loadNudge();
|
|
677
|
+
|
|
678
|
+
// --- Recovery Watcher controls ---
|
|
679
|
+
async function loadRecoveryWatcher() {
|
|
680
|
+
try {
|
|
681
|
+
const s = await api("/api/recovery-watcher", "GET");
|
|
682
|
+
$("rw-enabled").checked = !!s.enabled;
|
|
683
|
+
$("rw-enabled-label").textContent = s.enabled ? "On" : "Off";
|
|
684
|
+
$("rw-interval").value = s.intervalSec;
|
|
685
|
+
$("rw-cooldown").value = s.cooldownMin;
|
|
686
|
+
$("rw-escalate").value = s.escalateAfter;
|
|
687
|
+
$("rw-message").textContent = s.recoveryMessage;
|
|
688
|
+
} catch (e) {
|
|
689
|
+
if (!e.disconnected) toast("Failed to load recovery-watcher settings: " + e.message, "error");
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
async function saveRecoveryWatcher() {
|
|
693
|
+
const enabled = $("rw-enabled").checked;
|
|
694
|
+
const intervalSec = Math.max(15, Math.min(600, parseInt($("rw-interval").value, 10) || 60));
|
|
695
|
+
const cooldownMin = Math.max(1, Math.min(60, parseInt($("rw-cooldown").value, 10) || 5));
|
|
696
|
+
const escalateAfter = Math.max(1, Math.min(20, parseInt($("rw-escalate").value, 10) || 3));
|
|
697
|
+
$("rw-interval").value = intervalSec;
|
|
698
|
+
$("rw-cooldown").value = cooldownMin;
|
|
699
|
+
$("rw-escalate").value = escalateAfter;
|
|
700
|
+
try {
|
|
701
|
+
const s = await api("/api/recovery-watcher", "POST", {
|
|
702
|
+
enabled, intervalSec, cooldownMin, escalateAfter,
|
|
703
|
+
});
|
|
704
|
+
$("rw-enabled-label").textContent = s.enabled ? "On" : "Off";
|
|
705
|
+
const status = $("rw-status");
|
|
706
|
+
status.textContent = "saved";
|
|
707
|
+
status.classList.add("show");
|
|
708
|
+
setTimeout(() => status.classList.remove("show"), 1500);
|
|
709
|
+
} catch (e) {
|
|
710
|
+
toast("Failed to save: " + e.message, "error");
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
$("rw-enabled").addEventListener("change", saveRecoveryWatcher);
|
|
714
|
+
$("rw-interval").addEventListener("change", saveRecoveryWatcher);
|
|
715
|
+
$("rw-cooldown").addEventListener("change", saveRecoveryWatcher);
|
|
716
|
+
$("rw-escalate").addEventListener("change", saveRecoveryWatcher);
|
|
717
|
+
loadRecoveryWatcher();
|
|
641
718
|
</script>
|
|
642
719
|
</body>
|
|
643
720
|
</html>`;
|
|
644
721
|
function startUIServer(port = 7878) {
|
|
645
722
|
let schedulerHandle = null;
|
|
723
|
+
let recoveryWatcherHandle = null;
|
|
646
724
|
const server = http_1.default.createServer((req, res) => {
|
|
647
725
|
const send = (status, body, contentType = "application/json") => {
|
|
648
726
|
res.statusCode = status;
|
|
@@ -734,6 +812,27 @@ function startUIServer(port = 7878) {
|
|
|
734
812
|
req.on("error", (e) => send(400, { error: e.message }));
|
|
735
813
|
return;
|
|
736
814
|
}
|
|
815
|
+
if (req.method === "GET" && p === "/api/recovery-watcher") {
|
|
816
|
+
return send(200, (0, recovery_watcher_settings_js_1.readRecoveryWatcherSettings)());
|
|
817
|
+
}
|
|
818
|
+
if (req.method === "POST" && p === "/api/recovery-watcher") {
|
|
819
|
+
let body = "";
|
|
820
|
+
req.on("data", (chunk) => { body += chunk; });
|
|
821
|
+
req.on("end", () => {
|
|
822
|
+
try {
|
|
823
|
+
const parsed = body ? JSON.parse(body) : {};
|
|
824
|
+
const next = (0, recovery_watcher_settings_js_1.writeRecoveryWatcherSettings)(parsed);
|
|
825
|
+
if (recoveryWatcherHandle)
|
|
826
|
+
recoveryWatcherHandle.reschedule();
|
|
827
|
+
send(200, next);
|
|
828
|
+
}
|
|
829
|
+
catch (e) {
|
|
830
|
+
send(400, { error: e.message });
|
|
831
|
+
}
|
|
832
|
+
});
|
|
833
|
+
req.on("error", (e) => send(400, { error: e.message }));
|
|
834
|
+
return;
|
|
835
|
+
}
|
|
737
836
|
send(404, { error: "not found" });
|
|
738
837
|
}
|
|
739
838
|
catch (e) {
|
|
@@ -743,6 +842,7 @@ function startUIServer(port = 7878) {
|
|
|
743
842
|
server.listen(port, "127.0.0.1");
|
|
744
843
|
const stopNotifier = startMessageNotifier();
|
|
745
844
|
schedulerHandle = (0, scheduler_js_1.startScheduler)();
|
|
845
|
+
recoveryWatcherHandle = (0, recovery_watcher_js_1.startRecoveryWatcher)();
|
|
746
846
|
const writeLock = () => {
|
|
747
847
|
try {
|
|
748
848
|
fs_1.default.writeFileSync(LOCK_PATH, JSON.stringify({ pid: process.pid, port, startedAt: new Date().toISOString() }), { mode: 0o600 });
|
|
@@ -762,6 +862,8 @@ function startUIServer(port = 7878) {
|
|
|
762
862
|
stopNotifier();
|
|
763
863
|
if (schedulerHandle)
|
|
764
864
|
schedulerHandle.stop();
|
|
865
|
+
if (recoveryWatcherHandle)
|
|
866
|
+
recoveryWatcherHandle.stop();
|
|
765
867
|
cleanup();
|
|
766
868
|
};
|
|
767
869
|
process.on("SIGTERM", () => { stopAll(); process.exit(0); });
|
package/dist/ui-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-server.js","sourceRoot":"","sources":["../src/ui-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui-server.js","sourceRoot":"","sources":["../src/ui-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudelink",
|
|
3
|
-
"version": "1.3
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "The hub where your AI agents connect. Multi-terminal Claude Code agent communication via MCP.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"repository": {
|
|
38
38
|
"type": "git",
|
|
39
|
-
"url": "git+https://github.com/
|
|
39
|
+
"url": "git+https://github.com/RBJGlobal/claudelink.git"
|
|
40
40
|
},
|
|
41
|
-
"homepage": "https://github.com/
|
|
41
|
+
"homepage": "https://github.com/RBJGlobal/claudelink",
|
|
42
42
|
"bugs": {
|
|
43
|
-
"url": "https://github.com/
|
|
43
|
+
"url": "https://github.com/RBJGlobal/claudelink/issues"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=18.0.0"
|