claudelink 1.0.0 → 1.1.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 +68 -1
- package/bin/claudelink-ui.js +2 -0
- package/bin/prompt-hook.js +2 -0
- package/bin/stop-hook.js +2 -0
- package/dist/cap-state.d.ts +26 -0
- package/dist/cap-state.js +133 -0
- package/dist/cap-state.js.map +1 -0
- package/dist/cli.js +227 -5
- package/dist/cli.js.map +1 -1
- package/dist/db.d.ts +24 -3
- package/dist/db.js +175 -36
- package/dist/db.js.map +1 -1
- package/dist/hooks/stop-hook.d.ts +1 -0
- package/dist/hooks/stop-hook.js +211 -0
- package/dist/hooks/stop-hook.js.map +1 -0
- package/dist/hooks/user-prompt-submit-hook.d.ts +1 -0
- package/dist/hooks/user-prompt-submit-hook.js +54 -0
- package/dist/hooks/user-prompt-submit-hook.js.map +1 -0
- package/dist/index.js +86 -5
- package/dist/index.js.map +1 -1
- package/dist/scheduler-settings.d.ts +6 -0
- package/dist/scheduler-settings.js +58 -0
- package/dist/scheduler-settings.js.map +1 -0
- package/dist/scheduler.d.ts +10 -0
- package/dist/scheduler.js +189 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/ui-bin.d.ts +2 -0
- package/dist/ui-bin.js +10 -0
- package/dist/ui-bin.js.map +1 -0
- package/dist/ui-launcher.d.ts +16 -0
- package/dist/ui-launcher.js +145 -0
- package/dist/ui-launcher.js.map +1 -0
- package/dist/ui-server.d.ts +2 -0
- package/dist/ui-server.js +813 -0
- package/dist/ui-server.js.map +1 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -11,6 +11,10 @@ Terminal 3 (tester) ──┤
|
|
|
11
11
|
Terminal 4 (ops) ──┘
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
+
A local **Command Center** at `http://127.0.0.1:7878` opens automatically with the first agent — see who's online, watch messages flow, and kill stuck servers without touching the terminal.
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+
|
|
14
18
|
## Quick Start
|
|
15
19
|
|
|
16
20
|
```bash
|
|
@@ -70,6 +74,30 @@ ClaudeLink is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io/
|
|
|
70
74
|
|
|
71
75
|
There is no daemon or background service. Each Claude Code session spawns its own MCP server process, and they coordinate through the shared database.
|
|
72
76
|
|
|
77
|
+
## Command Center
|
|
78
|
+
|
|
79
|
+
The Command Center is a local web UI at `http://127.0.0.1:7878` that gives you a live view of every agent in the mesh. The first `claudelink-server` to boot in any terminal launches it automatically — subsequent agents share the same window. It survives MCP restarts and only exits when you click **Quit UI** (or run `claudelink ui --stop`).
|
|
80
|
+
|
|
81
|
+
### What it shows
|
|
82
|
+
|
|
83
|
+
- **Running servers** — every `claudelink-server` process, with PID, TTY, uptime, and the role it registered as. Per-row **Kill** button sends SIGTERM.
|
|
84
|
+
- **Registered agents** — role, description, online status, message counts (sent / received), and last-seen timestamp. Per-row **Kill agent** SIGTERMs the matching server.
|
|
85
|
+
- **Health** — total agents, unread/total messages, bulletin entries, orphan blockers, FK violations, and servers running. The **Heal orphans** button cascade-cleans every dead agent's messages and bulletin rows in one transaction.
|
|
86
|
+
- **Recent messages** — the last several messages across all agents, with unread and priority badges.
|
|
87
|
+
|
|
88
|
+
The page auto-refreshes every 2 seconds. **Kill all servers** in the header drops the whole mesh in one click.
|
|
89
|
+
|
|
90
|
+
### Lifecycle
|
|
91
|
+
|
|
92
|
+
A lock file at `~/.claudelink/ui.lock` prevents duplicate windows. The launcher detached-spawns the UI process with `unref()` so it outlives the MCP parent. If a stale lock is detected (PID dead and no heartbeat at `/api/heartbeat`), a fresh UI takes over.
|
|
93
|
+
|
|
94
|
+
To opt out, set `CLAUDELINK_UI=off` in the environment before starting Claude Code.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
claudelink ui # start it manually (or just spawn any agent)
|
|
98
|
+
claudelink ui --stop # graceful shutdown
|
|
99
|
+
```
|
|
100
|
+
|
|
73
101
|
## Available Tools
|
|
74
102
|
|
|
75
103
|
Once connected, Claude Code gains these tools:
|
|
@@ -122,10 +150,50 @@ Read the bulletin board.
|
|
|
122
150
|
claudelink init # Configure for current project
|
|
123
151
|
claudelink init --global # Configure globally
|
|
124
152
|
claudelink status # Show registered agents and message stats
|
|
153
|
+
claudelink ui # Open the Command Center in your browser
|
|
154
|
+
claudelink ui --stop # Stop the Command Center
|
|
125
155
|
claudelink reset # Clear all data (fresh start)
|
|
126
156
|
claudelink help # Show help
|
|
127
157
|
```
|
|
128
158
|
|
|
159
|
+
## Autonomous Replies
|
|
160
|
+
|
|
161
|
+
ClaudeLink ships a Claude Code Stop hook that auto-processes inbound messages without you typing "check inbox" in each terminal. When an agent finishes a turn, the hook peeks at its inbox; if any messages expect a reply, it injects a continuation telling the agent to call `read_inbox` and respond.
|
|
162
|
+
|
|
163
|
+
### Why the hook directs to `read_inbox` instead of embedding contents
|
|
164
|
+
|
|
165
|
+
The Stop hook deliberately does **not** embed message contents in the continuation it injects. Doing so trips Claude Code's prompt-injection defense — to the safety layer, "an external message saying do X" is indistinguishable from a malicious file or web page steering Claude's actions, and Claude will (correctly) refuse to act on it. Instead, the hook directs Claude to call its own `read_inbox` tool. The tool result is content Claude has agency over, so the safety layer accepts it and the autonomous reply happens cleanly.
|
|
166
|
+
|
|
167
|
+
The advisor branch (`autonomousReply: false`) does still consume messages via the hook (marks them read + emits to stderr) so they don't pile up indefinitely; only the autonomous branch leaves messages unread for `read_inbox` to consume.
|
|
168
|
+
|
|
169
|
+
### Caps and opt-outs
|
|
170
|
+
|
|
171
|
+
Three guards prevent runaway loops:
|
|
172
|
+
|
|
173
|
+
- **Hard cap** — max consecutive auto-fires per terminal without a human prompt (`CLAUDELINK_HARD_CAP`, default 5).
|
|
174
|
+
- **Cooldown** — minimum seconds between auto-fires per terminal (`CLAUDELINK_COOLDOWN_S`, default 30).
|
|
175
|
+
- **Chain cap** — max `parent_id` chain depth before a message stops triggering auto-fires (`CLAUDELINK_CHAIN_CAP`, default 8).
|
|
176
|
+
|
|
177
|
+
Set any to `0` to disable that specific guard. Per-agent opt-out: register with `autonomousReply: false` and the hook reads the inbox but never blocks-and-continues — useful for advisor-style terminals where you want visibility but no automatic action.
|
|
178
|
+
|
|
179
|
+
Per-message opt-out: send with `expectsReply: false` for FYI/informational pings. The recipient still reads them but the hook treats them as ineligible for auto-fire.
|
|
180
|
+
|
|
181
|
+
Every Stop hook decision logs to `~/.claudelink/auto-fire.log` for auditing without reading any conversation.
|
|
182
|
+
|
|
183
|
+
### Desktop notifications
|
|
184
|
+
|
|
185
|
+
The Command Center fires a macOS desktop notification (via `osascript display notification`, no Accessibility permission required) for every new message that lands in any agent's inbox — including agents registered with `autonomousReply: false`. Notifications give you situational awareness across the swarm without switching terminals.
|
|
186
|
+
|
|
187
|
+
Multiple messages arriving in the same 2-second poll window collapse into one summary notification ("3 new ClaudeLink messages: reviewer → developer: ... (+2 more)"). The historical backlog is suppressed at startup so a freshly opened Command Center doesn't spam you with old messages.
|
|
188
|
+
|
|
189
|
+
Off-switch: `CLAUDELINK_NOTIFY=off`.
|
|
190
|
+
|
|
191
|
+
### Debug knobs
|
|
192
|
+
|
|
193
|
+
- `CLAUDELINK_HOOK_TTY=/dev/ttysNNN` — override TTY auto-detection (testing, CI).
|
|
194
|
+
- `CLAUDELINK_HOOK_STRICT=1` — surface hook errors to stderr instead of swallowing them. Default is fail-open (production safety).
|
|
195
|
+
- `CLAUDELINK_NOTIFY=off` — disable desktop notifications.
|
|
196
|
+
|
|
129
197
|
## Autonomous Mode (Recommended)
|
|
130
198
|
|
|
131
199
|
By default, you'd have to tell Claude "check my inbox" manually every time. That defeats the purpose. With autonomous mode, agents communicate **on their own** — checking for messages and sending updates without you asking.
|
|
@@ -451,7 +519,6 @@ node dist/cli.js status
|
|
|
451
519
|
- **Message history**: Tool to view past messages (not just unread)
|
|
452
520
|
- **File sharing**: Agents can share file paths or code snippets with structured formatting
|
|
453
521
|
- **Priority notifications**: Interrupt the current agent when a high-priority message arrives
|
|
454
|
-
- **Web dashboard**: A local web UI to visualize agent activity
|
|
455
522
|
- **Agent templates**: Pre-built role configurations for common workflows
|
|
456
523
|
- **Webhooks**: Notify external services when agents communicate
|
|
457
524
|
- **Encryption**: Encrypt messages at rest in the database
|
package/bin/stop-hook.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface FireState {
|
|
2
|
+
count: number;
|
|
3
|
+
lastFireTs: number;
|
|
4
|
+
}
|
|
5
|
+
export interface Caps {
|
|
6
|
+
hardCap: number;
|
|
7
|
+
cooldownS: number;
|
|
8
|
+
chainCap: number;
|
|
9
|
+
}
|
|
10
|
+
export interface CapDecision {
|
|
11
|
+
allowed: boolean;
|
|
12
|
+
reason: string;
|
|
13
|
+
newCount: number;
|
|
14
|
+
caps: Caps;
|
|
15
|
+
}
|
|
16
|
+
export declare function getCaps(): Caps;
|
|
17
|
+
export declare function readState(tty: string): FireState;
|
|
18
|
+
export declare function checkAndIncrement(tty: string): CapDecision;
|
|
19
|
+
export declare function resetCounter(tty: string): void;
|
|
20
|
+
export declare function appendAutoFireLog(entry: {
|
|
21
|
+
tty: string;
|
|
22
|
+
agentRole: string | null;
|
|
23
|
+
decision: "fired" | "blocked-by-cap" | "no-eligible-msgs" | "opt-out" | "no-agent" | "counter-reset";
|
|
24
|
+
reason: string;
|
|
25
|
+
inboundCount?: number;
|
|
26
|
+
}): void;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Per-TTY auto-fire state for the Stop hook.
|
|
3
|
+
//
|
|
4
|
+
// Each terminal that has registered an agent gets a tiny JSON file at
|
|
5
|
+
// ~/.claudelink/state/<tty>.json holding the consecutive auto-fire count
|
|
6
|
+
// and the last-fire timestamp. checkAndIncrement applies the hard cap
|
|
7
|
+
// (consecutive fires) and the soft cooldown (seconds since last fire);
|
|
8
|
+
// resetCounter is called by the UserPromptSubmit hook when the human types
|
|
9
|
+
// something. Everything is per-TTY, so different terminals never contend.
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.getCaps = getCaps;
|
|
15
|
+
exports.readState = readState;
|
|
16
|
+
exports.checkAndIncrement = checkAndIncrement;
|
|
17
|
+
exports.resetCounter = resetCounter;
|
|
18
|
+
exports.appendAutoFireLog = appendAutoFireLog;
|
|
19
|
+
const fs_1 = __importDefault(require("fs"));
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
const os_1 = __importDefault(require("os"));
|
|
22
|
+
const HARD_CAP_DEFAULT = 5;
|
|
23
|
+
const COOLDOWN_S_DEFAULT = 30;
|
|
24
|
+
const CHAIN_CAP_DEFAULT = 8;
|
|
25
|
+
const STATE_DIR = path_1.default.join(os_1.default.homedir(), ".claudelink", "state");
|
|
26
|
+
const LOG_PATH = path_1.default.join(os_1.default.homedir(), ".claudelink", "auto-fire.log");
|
|
27
|
+
function envInt(key, dflt) {
|
|
28
|
+
const raw = process.env[key];
|
|
29
|
+
if (raw === undefined || raw === "")
|
|
30
|
+
return dflt;
|
|
31
|
+
const n = parseInt(raw, 10);
|
|
32
|
+
if (Number.isNaN(n))
|
|
33
|
+
return dflt;
|
|
34
|
+
return Math.max(0, n);
|
|
35
|
+
}
|
|
36
|
+
function getCaps() {
|
|
37
|
+
return {
|
|
38
|
+
hardCap: envInt("CLAUDELINK_HARD_CAP", HARD_CAP_DEFAULT),
|
|
39
|
+
cooldownS: envInt("CLAUDELINK_COOLDOWN_S", COOLDOWN_S_DEFAULT),
|
|
40
|
+
chainCap: envInt("CLAUDELINK_CHAIN_CAP", CHAIN_CAP_DEFAULT),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function ensureStateDir() {
|
|
44
|
+
if (!fs_1.default.existsSync(STATE_DIR)) {
|
|
45
|
+
fs_1.default.mkdirSync(STATE_DIR, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function ttyToFilename(tty) {
|
|
49
|
+
return tty.replace(/^\/dev\//, "").replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
50
|
+
}
|
|
51
|
+
function statePath(tty) {
|
|
52
|
+
return path_1.default.join(STATE_DIR, ttyToFilename(tty) + ".json");
|
|
53
|
+
}
|
|
54
|
+
function readState(tty) {
|
|
55
|
+
try {
|
|
56
|
+
const raw = fs_1.default.readFileSync(statePath(tty), "utf8");
|
|
57
|
+
const parsed = JSON.parse(raw);
|
|
58
|
+
return {
|
|
59
|
+
count: Number(parsed.count) || 0,
|
|
60
|
+
lastFireTs: Number(parsed.lastFireTs) || 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return { count: 0, lastFireTs: 0 };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function writeState(tty, state) {
|
|
68
|
+
ensureStateDir();
|
|
69
|
+
// Atomic-on-POSIX write: write to a sibling temp file then rename. Avoids
|
|
70
|
+
// partial writes if the process is killed mid-write.
|
|
71
|
+
const tmp = statePath(tty) + ".tmp";
|
|
72
|
+
fs_1.default.writeFileSync(tmp, JSON.stringify(state));
|
|
73
|
+
fs_1.default.renameSync(tmp, statePath(tty));
|
|
74
|
+
}
|
|
75
|
+
// Apply hard-cap and cooldown policy. If allowed, increment and persist.
|
|
76
|
+
// Caller decides what "allowed=false" means (typically: read inbox but do
|
|
77
|
+
// not block-and-continue).
|
|
78
|
+
function checkAndIncrement(tty) {
|
|
79
|
+
const caps = getCaps();
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
const state = readState(tty);
|
|
82
|
+
if (state.lastFireTs > 0) {
|
|
83
|
+
const sinceLastS = (now - state.lastFireTs) / 1000;
|
|
84
|
+
if (sinceLastS < caps.cooldownS) {
|
|
85
|
+
return {
|
|
86
|
+
allowed: false,
|
|
87
|
+
reason: `cooldown (${sinceLastS.toFixed(1)}s of ${caps.cooldownS}s)`,
|
|
88
|
+
newCount: state.count,
|
|
89
|
+
caps,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (state.count >= caps.hardCap) {
|
|
94
|
+
return {
|
|
95
|
+
allowed: false,
|
|
96
|
+
reason: `hard cap reached (${state.count}/${caps.hardCap}); awaiting user prompt`,
|
|
97
|
+
newCount: state.count,
|
|
98
|
+
caps,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const newState = { count: state.count + 1, lastFireTs: now };
|
|
102
|
+
writeState(tty, newState);
|
|
103
|
+
return {
|
|
104
|
+
allowed: true,
|
|
105
|
+
reason: `fire ${newState.count}/${caps.hardCap}`,
|
|
106
|
+
newCount: newState.count,
|
|
107
|
+
caps,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function resetCounter(tty) {
|
|
111
|
+
try {
|
|
112
|
+
fs_1.default.unlinkSync(statePath(tty));
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// No file = already reset.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Append to ~/.claudelink/auto-fire.log so a human can audit the swarm
|
|
119
|
+
// without reading any conversation. One line per Stop-hook fire,
|
|
120
|
+
// regardless of whether the cap allowed it.
|
|
121
|
+
function appendAutoFireLog(entry) {
|
|
122
|
+
try {
|
|
123
|
+
const ts = new Date().toISOString();
|
|
124
|
+
const role = entry.agentRole ?? "?";
|
|
125
|
+
const inbound = entry.inboundCount === undefined ? "" : ` inbound=${entry.inboundCount}`;
|
|
126
|
+
const line = `${ts} tty=${entry.tty} role=${role} decision=${entry.decision} reason="${entry.reason}"${inbound}\n`;
|
|
127
|
+
fs_1.default.appendFileSync(LOG_PATH, line);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Logging must never break the hook. Drop the entry on failure.
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=cap-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cap-state.js","sourceRoot":"","sources":["../src/cap-state.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
38
|
};
|
|
@@ -182,13 +215,196 @@ function showHelp() {
|
|
|
182
215
|
Usage: claudelink <command>
|
|
183
216
|
|
|
184
217
|
Commands:
|
|
185
|
-
init
|
|
186
|
-
init --global
|
|
187
|
-
status
|
|
188
|
-
|
|
189
|
-
|
|
218
|
+
init Add ClaudeLink to .mcp.json in current project + CLAUDE.md
|
|
219
|
+
init --global Add ClaudeLink globally + ~/.claude/CLAUDE.md
|
|
220
|
+
status Show registered agents and their status
|
|
221
|
+
ui Launch the Command Center UI in your browser
|
|
222
|
+
ui --stop Stop the Command Center UI
|
|
223
|
+
install-hooks Install Stop + UserPromptSubmit hooks for autonomous replies (project)
|
|
224
|
+
install-hooks --global Install hooks in ~/.claude/settings.json (all projects)
|
|
225
|
+
install-hooks --uninstall Remove ClaudeLink hooks from the chosen scope
|
|
226
|
+
reset Clear all messages and agent registrations
|
|
227
|
+
help Show this help message
|
|
228
|
+
`);
|
|
229
|
+
}
|
|
230
|
+
// --- Hook installation (Path A) ---------------------------------------------
|
|
231
|
+
// Idempotently installs the Stop + UserPromptSubmit hooks into the appropriate
|
|
232
|
+
// settings.json. Never clobbers existing hook entries: we look for our
|
|
233
|
+
// command name and skip if already present. The two hook scripts are
|
|
234
|
+
// installed by npm into the same bin directory as `claudelink` itself, so
|
|
235
|
+
// resolving an absolute path lets the install survive even if the user's
|
|
236
|
+
// shell PATH is different from Claude Code's spawned-process PATH.
|
|
237
|
+
const STOP_HOOK_BIN = "claudelink-stop-hook";
|
|
238
|
+
const PROMPT_HOOK_BIN = "claudelink-prompt-hook";
|
|
239
|
+
function resolveHookCommand(name) {
|
|
240
|
+
// Prefer absolute path next to this CLI binary (works regardless of PATH).
|
|
241
|
+
// Falls back to bare name if we can't locate ourselves.
|
|
242
|
+
const candidates = [
|
|
243
|
+
path_1.default.join(path_1.default.dirname(process.argv[1] || ""), name),
|
|
244
|
+
path_1.default.join(__dirname, "..", "bin", name + ".js"),
|
|
245
|
+
];
|
|
246
|
+
for (const c of candidates) {
|
|
247
|
+
if (c && fs_1.default.existsSync(c))
|
|
248
|
+
return c;
|
|
249
|
+
}
|
|
250
|
+
return name;
|
|
251
|
+
}
|
|
252
|
+
function settingsPath(scope) {
|
|
253
|
+
return scope === "global"
|
|
254
|
+
? path_1.default.join(os_1.default.homedir(), ".claude", "settings.json")
|
|
255
|
+
: path_1.default.join(process.cwd(), ".claude", "settings.json");
|
|
256
|
+
}
|
|
257
|
+
function readSettings(p) {
|
|
258
|
+
if (!fs_1.default.existsSync(p))
|
|
259
|
+
return {};
|
|
260
|
+
try {
|
|
261
|
+
return JSON.parse(fs_1.default.readFileSync(p, "utf-8"));
|
|
262
|
+
}
|
|
263
|
+
catch (e) {
|
|
264
|
+
throw new Error(`Could not parse ${p}: ${e.message}. Refusing to overwrite — fix the JSON manually and rerun.`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function writeSettingsAtomic(p, settings) {
|
|
268
|
+
const dir = path_1.default.dirname(p);
|
|
269
|
+
if (!fs_1.default.existsSync(dir))
|
|
270
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
271
|
+
const tmp = p + ".tmp";
|
|
272
|
+
fs_1.default.writeFileSync(tmp, JSON.stringify(settings, null, 2) + "\n");
|
|
273
|
+
fs_1.default.renameSync(tmp, p);
|
|
274
|
+
}
|
|
275
|
+
function hookEntryExists(settings, event, binName) {
|
|
276
|
+
const events = settings?.hooks?.[event];
|
|
277
|
+
if (!Array.isArray(events))
|
|
278
|
+
return false;
|
|
279
|
+
for (const group of events) {
|
|
280
|
+
const groupHooks = group?.hooks;
|
|
281
|
+
if (!Array.isArray(groupHooks))
|
|
282
|
+
continue;
|
|
283
|
+
for (const h of groupHooks) {
|
|
284
|
+
if (typeof h?.command === "string" && h.command.endsWith(binName)) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
function appendHookEntry(settings, event, command, timeout) {
|
|
292
|
+
if (!settings.hooks)
|
|
293
|
+
settings.hooks = {};
|
|
294
|
+
if (!Array.isArray(settings.hooks[event]))
|
|
295
|
+
settings.hooks[event] = [];
|
|
296
|
+
settings.hooks[event].push({
|
|
297
|
+
matcher: "",
|
|
298
|
+
hooks: [{ type: "command", command, timeout }],
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
function removeHookEntries(settings, event, binName) {
|
|
302
|
+
if (!Array.isArray(settings?.hooks?.[event]))
|
|
303
|
+
return 0;
|
|
304
|
+
let removed = 0;
|
|
305
|
+
const filtered = [];
|
|
306
|
+
for (const group of settings.hooks[event]) {
|
|
307
|
+
const remaining = (group?.hooks || []).filter((h) => !(typeof h?.command === "string" && h.command.endsWith(binName)));
|
|
308
|
+
if (remaining.length !== (group?.hooks || []).length) {
|
|
309
|
+
removed += (group?.hooks?.length || 0) - remaining.length;
|
|
310
|
+
}
|
|
311
|
+
if (remaining.length > 0) {
|
|
312
|
+
filtered.push({ ...group, hooks: remaining });
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
settings.hooks[event] = filtered;
|
|
316
|
+
if (settings.hooks[event].length === 0)
|
|
317
|
+
delete settings.hooks[event];
|
|
318
|
+
return removed;
|
|
319
|
+
}
|
|
320
|
+
function installHooks(scope, uninstall) {
|
|
321
|
+
const p = settingsPath(scope);
|
|
322
|
+
let settings;
|
|
323
|
+
try {
|
|
324
|
+
settings = readSettings(p);
|
|
325
|
+
}
|
|
326
|
+
catch (e) {
|
|
327
|
+
console.log(` ${e.message}`);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const stopCmd = resolveHookCommand(STOP_HOOK_BIN);
|
|
331
|
+
const promptCmd = resolveHookCommand(PROMPT_HOOK_BIN);
|
|
332
|
+
if (uninstall) {
|
|
333
|
+
const stopRemoved = removeHookEntries(settings, "Stop", STOP_HOOK_BIN);
|
|
334
|
+
const promptRemoved = removeHookEntries(settings, "UserPromptSubmit", PROMPT_HOOK_BIN);
|
|
335
|
+
if (stopRemoved + promptRemoved === 0) {
|
|
336
|
+
console.log(` No ClaudeLink hooks found in ${p}. Nothing to remove.`);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
if (settings.hooks && Object.keys(settings.hooks).length === 0)
|
|
340
|
+
delete settings.hooks;
|
|
341
|
+
writeSettingsAtomic(p, settings);
|
|
342
|
+
console.log(` Removed ${stopRemoved} Stop hook(s) and ${promptRemoved} UserPromptSubmit hook(s) from ${p}.`);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
let stopAction;
|
|
346
|
+
let promptAction;
|
|
347
|
+
if (hookEntryExists(settings, "Stop", STOP_HOOK_BIN)) {
|
|
348
|
+
stopAction = "skipped";
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
appendHookEntry(settings, "Stop", stopCmd, 10);
|
|
352
|
+
stopAction = "added";
|
|
353
|
+
}
|
|
354
|
+
if (hookEntryExists(settings, "UserPromptSubmit", PROMPT_HOOK_BIN)) {
|
|
355
|
+
promptAction = "skipped";
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
appendHookEntry(settings, "UserPromptSubmit", promptCmd, 5);
|
|
359
|
+
promptAction = "added";
|
|
360
|
+
}
|
|
361
|
+
if (stopAction === "skipped" && promptAction === "skipped") {
|
|
362
|
+
console.log(` ClaudeLink hooks already installed in ${p}. Nothing to do.`);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
writeSettingsAtomic(p, settings);
|
|
366
|
+
console.log(` Updated ${p}:`);
|
|
367
|
+
console.log(` Stop hook: ${stopAction} (${stopCmd})`);
|
|
368
|
+
console.log(` UserPromptSubmit hook: ${promptAction} (${promptCmd})`);
|
|
369
|
+
console.log(`
|
|
370
|
+
Restart Claude Code in any terminal where you want autonomous replies
|
|
371
|
+
active. The hooks fire on Stop (when an agent finishes a turn) and
|
|
372
|
+
UserPromptSubmit (resets the per-terminal auto-fire counter).
|
|
373
|
+
|
|
374
|
+
Tunable env vars:
|
|
375
|
+
CLAUDELINK_HARD_CAP=5 consecutive auto-fires per terminal
|
|
376
|
+
CLAUDELINK_COOLDOWN_S=30 seconds between fires
|
|
377
|
+
CLAUDELINK_CHAIN_CAP=8 parent_id chain depth before excluding msg
|
|
378
|
+
CLAUDELINK_HOOK_STRICT=1 surface hook errors to stderr (dev mode)
|
|
379
|
+
|
|
380
|
+
Audit log: ~/.claudelink/auto-fire.log
|
|
190
381
|
`);
|
|
191
382
|
}
|
|
383
|
+
async function uiCommand(stop) {
|
|
384
|
+
const { launchUIIfNeeded, stopUI, getUIStatus } = await Promise.resolve().then(() => __importStar(require("./ui-launcher.js")));
|
|
385
|
+
if (stop) {
|
|
386
|
+
const ok = stopUI();
|
|
387
|
+
console.log(ok ? " Command Center UI stopped." : " Command Center UI is not running.");
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
const status = getUIStatus();
|
|
391
|
+
if (status.running) {
|
|
392
|
+
console.log(` Command Center UI is already running.`);
|
|
393
|
+
console.log(` Open: ${status.url}`);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
const url = await launchUIIfNeeded({ openBrowser: true });
|
|
397
|
+
if (url) {
|
|
398
|
+
console.log(` Command Center UI launched.`);
|
|
399
|
+
console.log(` Open: ${url}`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
console.log(` Could not launch the Command Center UI.`);
|
|
403
|
+
if (process.env.CLAUDELINK_UI === "off") {
|
|
404
|
+
console.log(` CLAUDELINK_UI=off is set. Unset it to enable.`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
192
408
|
function showStatus() {
|
|
193
409
|
const dbPath = path_1.default.join(NEXUS_DIR, "nexus.db");
|
|
194
410
|
if (!fs_1.default.existsSync(dbPath)) {
|
|
@@ -259,6 +475,12 @@ switch (command) {
|
|
|
259
475
|
case "status":
|
|
260
476
|
showStatus();
|
|
261
477
|
break;
|
|
478
|
+
case "ui":
|
|
479
|
+
uiCommand(args.includes("--stop") || args.includes("stop"));
|
|
480
|
+
break;
|
|
481
|
+
case "install-hooks":
|
|
482
|
+
installHooks(args.includes("--global") ? "global" : "project", args.includes("--uninstall"));
|
|
483
|
+
break;
|
|
262
484
|
case "reset":
|
|
263
485
|
resetDB();
|
|
264
486
|
break;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
CHANGED
|
@@ -6,6 +6,21 @@ export interface Agent {
|
|
|
6
6
|
last_seen: string;
|
|
7
7
|
pid: number;
|
|
8
8
|
alive: boolean;
|
|
9
|
+
tty: string | null;
|
|
10
|
+
terminal_app: string | null;
|
|
11
|
+
pane_id: string | null;
|
|
12
|
+
last_seen_active_ts: number | null;
|
|
13
|
+
autonomous_reply: number;
|
|
14
|
+
}
|
|
15
|
+
export interface RegisterOptions {
|
|
16
|
+
tty: string | null;
|
|
17
|
+
terminalApp: string | null;
|
|
18
|
+
paneId: string | null;
|
|
19
|
+
autonomousReply: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface SendOptions {
|
|
22
|
+
expectsReply?: boolean;
|
|
23
|
+
parentMessageId?: number | null;
|
|
9
24
|
}
|
|
10
25
|
export interface Message {
|
|
11
26
|
id: number;
|
|
@@ -15,6 +30,8 @@ export interface Message {
|
|
|
15
30
|
content: string;
|
|
16
31
|
priority: string;
|
|
17
32
|
created_at: string;
|
|
33
|
+
parent_id: number | null;
|
|
34
|
+
expects_reply: number;
|
|
18
35
|
}
|
|
19
36
|
export interface BulletinEntry {
|
|
20
37
|
id: number;
|
|
@@ -27,11 +44,15 @@ export declare class NexusDB {
|
|
|
27
44
|
private db;
|
|
28
45
|
constructor();
|
|
29
46
|
private migrate;
|
|
30
|
-
registerAgent(role: string, description: string | null, pid: number): string;
|
|
47
|
+
registerAgent(role: string, description: string | null, pid: number, opts: RegisterOptions): string;
|
|
48
|
+
getAgentByTty(tty: string): Agent | null;
|
|
31
49
|
heartbeat(agentId: string): void;
|
|
50
|
+
updateLastSeenActive(agentId: string): void;
|
|
51
|
+
getChainLength(messageId: number): number;
|
|
32
52
|
getAgents(): Agent[];
|
|
33
|
-
sendMessage(fromId: string, toRole: string, content: string, priority?: string): number;
|
|
34
|
-
broadcastMessage(fromId: string, content: string): void;
|
|
53
|
+
sendMessage(fromId: string, toRole: string, content: string, priority?: string, opts?: SendOptions): number;
|
|
54
|
+
broadcastMessage(fromId: string, content: string, opts?: SendOptions): void;
|
|
55
|
+
peekInbox(agentId: string): Message[];
|
|
35
56
|
readInbox(agentId: string): Message[];
|
|
36
57
|
postBulletin(fromId: string, content: string): void;
|
|
37
58
|
getBulletin(limit?: number): BulletinEntry[];
|