claudelink 1.3.2 → 1.4.0
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 +326 -0
- package/dist/recovery-watcher.js.map +1 -0
- package/dist/scheduler.d.ts +9 -0
- package/dist/scheduler.js +1 -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,326 @@
|
|
|
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
|
+
const ERROR_PATTERNS = [
|
|
52
|
+
// Claude Code's full rate-limit error line — distinctive enough to be
|
|
53
|
+
// its own pattern. Still subject to position filter below.
|
|
54
|
+
/API\s*Error:\s*Server is temporarily limiting requests/i,
|
|
55
|
+
// Claude Code other API errors — require "API Error:" prefix in the
|
|
56
|
+
// same line as the keyword.
|
|
57
|
+
/API\s*Error:[^\n]*\brate[ _-]?limit/i,
|
|
58
|
+
/API\s*Error:[^\n]*\boverload/i,
|
|
59
|
+
/API\s*Error:[^\n]*\b(529|503|429)\b/i,
|
|
60
|
+
/API\s*Error:[^\n]*\b(rate_limit_error|overloaded_error)\b/i,
|
|
61
|
+
// OpenAI/Codex CLI shapes — require an "error" prefix in the same line.
|
|
62
|
+
/\bOpenAI\s*API\s*(error|exception):[^\n]*\b(rate_limit|overload)/i,
|
|
63
|
+
/\berror\b[^\n]{0,60}\brate_limit_exceeded\b/i,
|
|
64
|
+
// Bare HTTP status lines (still distinctive because they include the
|
|
65
|
+
// canonical status text, which prose-mentions rarely include verbatim).
|
|
66
|
+
/\b(429|529)\s+Too Many Requests\b/i,
|
|
67
|
+
/\b503\s+Service Unavailable\b/i,
|
|
68
|
+
// Generic CLI-error safety net — "Error" or "Error:" prefix on the
|
|
69
|
+
// same line as the rate-limit token, with a tight intra-line cap.
|
|
70
|
+
/\bError:?\b[^\n]{0,80}\b(rate[ _-]?limited|rate_limit_error|overloaded_error|request was throttled)\b/i,
|
|
71
|
+
];
|
|
72
|
+
// Capture only the last N characters of scrollback. Errors that paused
|
|
73
|
+
// execution sit at the bottom of the visible buffer. Reading more wastes
|
|
74
|
+
// CPU and increases the false-positive surface.
|
|
75
|
+
const SCROLLBACK_TAIL_CHARS = 1500;
|
|
76
|
+
// Matched error text must be within this many characters of the END of
|
|
77
|
+
// the captured scrollback. When a CLI is genuinely stuck, the error is
|
|
78
|
+
// the LAST thing on screen above the prompt. When an agent is merely
|
|
79
|
+
// discussing an error in conversation, more text follows the mention,
|
|
80
|
+
// pushing it away from the end. This is the key false-positive guard.
|
|
81
|
+
const MAX_DISTANCE_FROM_END = 400;
|
|
82
|
+
function logLine(line) {
|
|
83
|
+
try {
|
|
84
|
+
fs_1.default.appendFileSync(LOG_PATH, `${new Date().toISOString()} ${line}\n`);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// logging never breaks the watcher
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function escapeForAppleScript(s) {
|
|
91
|
+
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
92
|
+
}
|
|
93
|
+
function isProcessAlive(pid) {
|
|
94
|
+
try {
|
|
95
|
+
process.kill(pid, 0);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Capture the terminal's visible scrollback for the given agent. Returns
|
|
103
|
+
// the last SCROLLBACK_TAIL_CHARS of the buffer, or null on failure.
|
|
104
|
+
function captureScrollback(c) {
|
|
105
|
+
const app = (c.terminal_app || "").toLowerCase();
|
|
106
|
+
try {
|
|
107
|
+
if (app === "iterm2") {
|
|
108
|
+
const script = `tell application "iTerm2"
|
|
109
|
+
repeat with w in windows
|
|
110
|
+
repeat with t in tabs of w
|
|
111
|
+
repeat with s in sessions of t
|
|
112
|
+
if (tty of s) is "${escapeForAppleScript(c.tty)}" then return contents of s
|
|
113
|
+
end repeat
|
|
114
|
+
end repeat
|
|
115
|
+
end repeat
|
|
116
|
+
end tell
|
|
117
|
+
return ""`;
|
|
118
|
+
const out = (0, child_process_1.execFileSync)("osascript", ["-e", script], {
|
|
119
|
+
timeout: 3000,
|
|
120
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
121
|
+
encoding: "utf-8",
|
|
122
|
+
});
|
|
123
|
+
return out.length > SCROLLBACK_TAIL_CHARS
|
|
124
|
+
? out.slice(-SCROLLBACK_TAIL_CHARS)
|
|
125
|
+
: out;
|
|
126
|
+
}
|
|
127
|
+
if (app === "tmux") {
|
|
128
|
+
if (!c.pane_id)
|
|
129
|
+
return null;
|
|
130
|
+
const out = (0, child_process_1.execFileSync)("tmux", ["capture-pane", "-t", c.pane_id, "-p", "-S", "-50"], {
|
|
131
|
+
timeout: 2000,
|
|
132
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
133
|
+
encoding: "utf-8",
|
|
134
|
+
});
|
|
135
|
+
return out.length > SCROLLBACK_TAIL_CHARS
|
|
136
|
+
? out.slice(-SCROLLBACK_TAIL_CHARS)
|
|
137
|
+
: out;
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Hash the matched error context to a short signature. We hash the matched
|
|
146
|
+
// substring plus a small surrounding window so de-dup compares semantic
|
|
147
|
+
// "same error" rather than identical byte-for-byte scrollback (which would
|
|
148
|
+
// always differ as the terminal repaints).
|
|
149
|
+
function computeSignature(scrollback, match) {
|
|
150
|
+
const start = Math.max(0, (match.index ?? 0) - 32);
|
|
151
|
+
const end = Math.min(scrollback.length, (match.index ?? 0) + match[0].length + 32);
|
|
152
|
+
const window = scrollback.slice(start, end);
|
|
153
|
+
return crypto_1.default.createHash("sha1").update(window).digest("hex").slice(0, 16);
|
|
154
|
+
}
|
|
155
|
+
// Match scrollback against the known patterns. Returns the first match's
|
|
156
|
+
// signature, or null if no pattern matched OR the match is too far from
|
|
157
|
+
// the end of the buffer (likely scrolled-up or mid-conversation prose).
|
|
158
|
+
function detectError(scrollback) {
|
|
159
|
+
for (const re of ERROR_PATTERNS) {
|
|
160
|
+
const m = scrollback.match(re);
|
|
161
|
+
if (!m)
|
|
162
|
+
continue;
|
|
163
|
+
const matchEnd = (m.index ?? 0) + m[0].length;
|
|
164
|
+
const distanceFromEnd = scrollback.length - matchEnd;
|
|
165
|
+
if (distanceFromEnd > MAX_DISTANCE_FROM_END) {
|
|
166
|
+
// Match exists but is too far from the bottom — almost certainly
|
|
167
|
+
// historical scrollback or mid-conversation prose, not the current
|
|
168
|
+
// stuck state. Skip and try the next pattern.
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
return { pattern: re, signature: computeSignature(scrollback, m) };
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
function fireDesktopNotification(role, message) {
|
|
176
|
+
try {
|
|
177
|
+
const title = "ClaudeLink Recovery Watcher";
|
|
178
|
+
const subtitle = role;
|
|
179
|
+
const script = `display notification "${escapeForAppleScript(message)}" with title "${escapeForAppleScript(title)}" subtitle "${escapeForAppleScript(subtitle)}"`;
|
|
180
|
+
(0, child_process_1.execFileSync)("osascript", ["-e", script], {
|
|
181
|
+
timeout: 2000,
|
|
182
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// notification is best-effort
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function selectCandidates(db) {
|
|
190
|
+
// Watch live agents with a known TTY and terminal_app. Unlike the
|
|
191
|
+
// auto-nudge scheduler, we don't filter on autonomous_reply (a stuck
|
|
192
|
+
// advisor still benefits from a recovery nudge) and we don't require
|
|
193
|
+
// unread mail (the recovery message itself is the trigger, not an inbox).
|
|
194
|
+
const rows = db
|
|
195
|
+
.prepare(`SELECT id, role, tty, terminal_app, pane_id, pid
|
|
196
|
+
FROM agents
|
|
197
|
+
WHERE tty IS NOT NULL
|
|
198
|
+
AND terminal_app IS NOT NULL`)
|
|
199
|
+
.all();
|
|
200
|
+
return rows.filter((c) => isProcessAlive(c.pid));
|
|
201
|
+
}
|
|
202
|
+
function startRecoveryWatcher() {
|
|
203
|
+
let db = null;
|
|
204
|
+
let timer = null;
|
|
205
|
+
const state = new Map();
|
|
206
|
+
const openDb = () => {
|
|
207
|
+
if (!db)
|
|
208
|
+
db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
209
|
+
return db;
|
|
210
|
+
};
|
|
211
|
+
const getState = (id) => {
|
|
212
|
+
let s = state.get(id);
|
|
213
|
+
if (!s) {
|
|
214
|
+
s = { lastSignature: null, lastFiredAt: 0, consecutiveFires: 0, escalated: false };
|
|
215
|
+
state.set(id, s);
|
|
216
|
+
}
|
|
217
|
+
return s;
|
|
218
|
+
};
|
|
219
|
+
const tick = () => {
|
|
220
|
+
const summary = { checked: 0, fired: 0, suppressed: 0, escalated: 0 };
|
|
221
|
+
const settings = (0, recovery_watcher_settings_js_1.readRecoveryWatcherSettings)();
|
|
222
|
+
if (!settings.enabled)
|
|
223
|
+
return summary;
|
|
224
|
+
let candidates;
|
|
225
|
+
try {
|
|
226
|
+
candidates = selectCandidates(openDb());
|
|
227
|
+
}
|
|
228
|
+
catch (e) {
|
|
229
|
+
logLine(`tick-error: ${e?.message ?? String(e)}`);
|
|
230
|
+
return summary;
|
|
231
|
+
}
|
|
232
|
+
const now = Date.now();
|
|
233
|
+
const cooldownMs = settings.cooldownMin * 60 * 1000;
|
|
234
|
+
for (const c of candidates) {
|
|
235
|
+
summary.checked++;
|
|
236
|
+
const scrollback = captureScrollback(c);
|
|
237
|
+
if (scrollback === null)
|
|
238
|
+
continue;
|
|
239
|
+
const detected = detectError(scrollback);
|
|
240
|
+
if (!detected) {
|
|
241
|
+
// No error visible: reset the consecutive-fire counter so the agent
|
|
242
|
+
// can be nudged again the next time something goes wrong.
|
|
243
|
+
const s = getState(c.id);
|
|
244
|
+
if (s.consecutiveFires > 0 || s.escalated) {
|
|
245
|
+
logLine(`reset role=${c.role} (no error visible)`);
|
|
246
|
+
}
|
|
247
|
+
s.consecutiveFires = 0;
|
|
248
|
+
s.escalated = false;
|
|
249
|
+
s.lastSignature = null;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
const s = getState(c.id);
|
|
253
|
+
// De-dup: same signature within cooldown → suppress silently.
|
|
254
|
+
if (s.lastSignature === detected.signature && now - s.lastFiredAt < cooldownMs) {
|
|
255
|
+
summary.suppressed++;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
// Escalation: too many consecutive fires without resolution → stop
|
|
259
|
+
// nudging and notify the user instead.
|
|
260
|
+
if (s.consecutiveFires >= settings.escalateAfter) {
|
|
261
|
+
if (!s.escalated) {
|
|
262
|
+
fireDesktopNotification(c.role, `Agent ${c.role} appears API-blocked after ${s.consecutiveFires} recovery attempts. Manual intervention may be needed.`);
|
|
263
|
+
logLine(`escalated role=${c.role} consecutive_fires=${s.consecutiveFires} signature=${detected.signature}`);
|
|
264
|
+
s.escalated = true;
|
|
265
|
+
summary.escalated++;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
summary.suppressed++;
|
|
269
|
+
}
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
// Fire the recovery nudge.
|
|
273
|
+
const result = (0, scheduler_js_1.injectKeystroke)(c, settings.recoveryMessage);
|
|
274
|
+
if (result === "ok") {
|
|
275
|
+
summary.fired++;
|
|
276
|
+
s.lastSignature = detected.signature;
|
|
277
|
+
s.lastFiredAt = now;
|
|
278
|
+
s.consecutiveFires++;
|
|
279
|
+
logLine(`fired role=${c.role} tty=${c.tty} terminal_app=${c.terminal_app} signature=${detected.signature} consecutive=${s.consecutiveFires} pattern=${detected.pattern.source}`);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
logLine(`fire-failed role=${c.role} result=${result} pattern=${detected.pattern.source}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return summary;
|
|
286
|
+
};
|
|
287
|
+
const reschedule = () => {
|
|
288
|
+
const settings = (0, recovery_watcher_settings_js_1.readRecoveryWatcherSettings)();
|
|
289
|
+
if (timer) {
|
|
290
|
+
clearInterval(timer);
|
|
291
|
+
timer = null;
|
|
292
|
+
}
|
|
293
|
+
if (!settings.enabled) {
|
|
294
|
+
logLine(`reschedule: disabled`);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const ms = settings.intervalSec * 1000;
|
|
298
|
+
timer = setInterval(() => {
|
|
299
|
+
try {
|
|
300
|
+
tick();
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
logLine(`tick-uncaught: ${e?.message ?? String(e)}`);
|
|
304
|
+
}
|
|
305
|
+
}, ms);
|
|
306
|
+
logLine(`reschedule: enabled, intervalSec=${settings.intervalSec}, cooldownMin=${settings.cooldownMin}, escalateAfter=${settings.escalateAfter}`);
|
|
307
|
+
};
|
|
308
|
+
const stop = () => {
|
|
309
|
+
if (timer) {
|
|
310
|
+
clearInterval(timer);
|
|
311
|
+
timer = null;
|
|
312
|
+
}
|
|
313
|
+
if (db) {
|
|
314
|
+
try {
|
|
315
|
+
db.close();
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// ignore
|
|
319
|
+
}
|
|
320
|
+
db = null;
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
reschedule();
|
|
324
|
+
return { reschedule, stop, tickNow: tick };
|
|
325
|
+
}
|
|
326
|
+
//# 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"));
|
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
|
+
"version": "1.4.0",
|
|
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"
|