@agent-link/server 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/dist/cli.js +21 -0
- package/dist/cli.js.map +1 -1
- package/dist/service.d.ts +2 -0
- package/dist/service.js +217 -0
- package/dist/service.js.map +1 -0
- package/package.json +5 -2
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# AgentLink Server
|
|
2
|
+
|
|
3
|
+
Relay server for [AgentLink](https://github.com/anthropics/agentlink) — use Claude Code from any browser.
|
|
4
|
+
|
|
5
|
+
AgentLink lets you run Claude Code on your local machine and access it through a web interface. The server acts as a WebSocket relay between your browser and the local agent.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @agent-link/server
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Start server (foreground)
|
|
17
|
+
agentlink-server start --port 3456
|
|
18
|
+
|
|
19
|
+
# Start server (background)
|
|
20
|
+
agentlink-server start --daemon --port 3456
|
|
21
|
+
|
|
22
|
+
# Stop server
|
|
23
|
+
agentlink-server stop
|
|
24
|
+
|
|
25
|
+
# Check status
|
|
26
|
+
agentlink-server status
|
|
27
|
+
|
|
28
|
+
# Auto-start on boot
|
|
29
|
+
agentlink-server service install --port 3456
|
|
30
|
+
agentlink-server service uninstall
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## How it works
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Browser ↔ AgentLink Server ↔ AgentLink Client ↔ Claude Code
|
|
37
|
+
(web) (relay) (your machine) (CLI)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The server is a lightweight Express + WebSocket relay. It serves the web UI and forwards messages between the browser and the agent. No data is stored on the server.
|
|
41
|
+
|
|
42
|
+
## Related
|
|
43
|
+
|
|
44
|
+
- **[@agent-link/agent](https://www.npmjs.com/package/@agent-link/agent)** — Local agent CLI (install this on your dev machine)
|
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,7 @@ import { openSync } from 'fs';
|
|
|
5
5
|
import { join, dirname, resolve } from 'path';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { loadServerRuntimeState, clearServerRuntimeState, getLogDir, killProcess, isProcessAlive, } from './config.js';
|
|
8
|
+
import { serverServiceInstall, serverServiceUninstall } from './service.js';
|
|
8
9
|
const program = new Command();
|
|
9
10
|
program
|
|
10
11
|
.name('agentlink-server')
|
|
@@ -121,5 +122,25 @@ program
|
|
|
121
122
|
console.log(` Started: ${state.startedAt}`);
|
|
122
123
|
}
|
|
123
124
|
});
|
|
125
|
+
// ── Service management ──
|
|
126
|
+
const serviceCmd = program
|
|
127
|
+
.command('service')
|
|
128
|
+
.description('Manage auto-start service');
|
|
129
|
+
serviceCmd
|
|
130
|
+
.command('install')
|
|
131
|
+
.description('Register server as an auto-start service and start it now')
|
|
132
|
+
.option('-p, --port <port>', 'Server port', '3456')
|
|
133
|
+
.action((options) => {
|
|
134
|
+
serverServiceInstall(parseInt(options.port, 10));
|
|
135
|
+
});
|
|
136
|
+
serviceCmd
|
|
137
|
+
.command('uninstall')
|
|
138
|
+
.description('Remove auto-start service and stop the server')
|
|
139
|
+
.action(() => {
|
|
140
|
+
serverServiceUninstall();
|
|
141
|
+
});
|
|
142
|
+
serviceCmd.action(() => {
|
|
143
|
+
serviceCmd.help();
|
|
144
|
+
});
|
|
124
145
|
program.parse();
|
|
125
146
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,sBAAsB,EAAE,uBAAuB,EAAE,SAAS,EAC1D,WAAW,EAAE,cAAc,GAC5B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync } from 'fs';
|
|
3
|
+
import { join, dirname, resolve } from 'path';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { getLogDir, loadServerRuntimeState, clearServerRuntimeState, killProcess, isProcessAlive, } from './config.js';
|
|
7
|
+
const SERVICE_NAME = 'agentlink-server';
|
|
8
|
+
const LAUNCHD_LABEL = 'com.agentlink.server';
|
|
9
|
+
function getCliPath() {
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
return resolve(dirname(__filename), 'cli.js');
|
|
12
|
+
}
|
|
13
|
+
function getNodePath() {
|
|
14
|
+
return process.execPath;
|
|
15
|
+
}
|
|
16
|
+
// ── Linux (systemd user unit) ──
|
|
17
|
+
function getSystemdUnitPath() {
|
|
18
|
+
return join(homedir(), '.config', 'systemd', 'user', `${SERVICE_NAME}.service`);
|
|
19
|
+
}
|
|
20
|
+
function generateSystemdUnit(port) {
|
|
21
|
+
const nodePath = getNodePath();
|
|
22
|
+
const cliPath = getCliPath();
|
|
23
|
+
const logDir = getLogDir();
|
|
24
|
+
const nodeBinDir = dirname(nodePath);
|
|
25
|
+
return `[Unit]
|
|
26
|
+
Description=AgentLink Relay Server
|
|
27
|
+
After=network-online.target
|
|
28
|
+
Wants=network-online.target
|
|
29
|
+
|
|
30
|
+
[Service]
|
|
31
|
+
Type=simple
|
|
32
|
+
ExecStart=${nodePath} ${cliPath} start --port ${port}
|
|
33
|
+
Restart=on-failure
|
|
34
|
+
RestartSec=10
|
|
35
|
+
Environment=PATH=${nodeBinDir}:${homedir()}/.local/bin:${homedir()}/.npm-global/bin:/usr/local/bin:/usr/bin:/bin
|
|
36
|
+
StandardOutput=append:${logDir}/server.log
|
|
37
|
+
StandardError=append:${logDir}/server.err
|
|
38
|
+
|
|
39
|
+
[Install]
|
|
40
|
+
WantedBy=default.target
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
function linuxInstall(port) {
|
|
44
|
+
const unitPath = getSystemdUnitPath();
|
|
45
|
+
mkdirSync(dirname(unitPath), { recursive: true });
|
|
46
|
+
mkdirSync(getLogDir(), { recursive: true });
|
|
47
|
+
writeFileSync(unitPath, generateSystemdUnit(port));
|
|
48
|
+
execSync('systemctl --user daemon-reload');
|
|
49
|
+
execSync(`systemctl --user enable ${SERVICE_NAME}`);
|
|
50
|
+
execSync(`systemctl --user start ${SERVICE_NAME}`);
|
|
51
|
+
console.log('Service installed and started.');
|
|
52
|
+
console.log(`\nUnit file: ${unitPath}`);
|
|
53
|
+
console.log('\nUseful commands:');
|
|
54
|
+
console.log(` systemctl --user status ${SERVICE_NAME}`);
|
|
55
|
+
console.log(` journalctl --user -u ${SERVICE_NAME} -f`);
|
|
56
|
+
console.log('\nTo run when not logged in:');
|
|
57
|
+
console.log(' sudo loginctl enable-linger $(whoami)');
|
|
58
|
+
}
|
|
59
|
+
function linuxUninstall() {
|
|
60
|
+
try {
|
|
61
|
+
execSync(`systemctl --user stop ${SERVICE_NAME} 2>/dev/null`);
|
|
62
|
+
}
|
|
63
|
+
catch { }
|
|
64
|
+
try {
|
|
65
|
+
execSync(`systemctl --user disable ${SERVICE_NAME} 2>/dev/null`);
|
|
66
|
+
}
|
|
67
|
+
catch { }
|
|
68
|
+
const unitPath = getSystemdUnitPath();
|
|
69
|
+
if (existsSync(unitPath)) {
|
|
70
|
+
unlinkSync(unitPath);
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
execSync('systemctl --user daemon-reload');
|
|
74
|
+
}
|
|
75
|
+
catch { }
|
|
76
|
+
console.log('Service uninstalled.');
|
|
77
|
+
}
|
|
78
|
+
// ── macOS (launchd plist) ──
|
|
79
|
+
function getLaunchdPlistPath() {
|
|
80
|
+
return join(homedir(), 'Library', 'LaunchAgents', `${LAUNCHD_LABEL}.plist`);
|
|
81
|
+
}
|
|
82
|
+
function generateLaunchdPlist(port) {
|
|
83
|
+
const nodePath = getNodePath();
|
|
84
|
+
const cliPath = getCliPath();
|
|
85
|
+
const logDir = getLogDir();
|
|
86
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
87
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
88
|
+
<plist version="1.0">
|
|
89
|
+
<dict>
|
|
90
|
+
<key>Label</key>
|
|
91
|
+
<string>${LAUNCHD_LABEL}</string>
|
|
92
|
+
<key>ProgramArguments</key>
|
|
93
|
+
<array>
|
|
94
|
+
<string>${nodePath}</string>
|
|
95
|
+
<string>${cliPath}</string>
|
|
96
|
+
<string>start</string>
|
|
97
|
+
<string>--port</string>
|
|
98
|
+
<string>${port}</string>
|
|
99
|
+
</array>
|
|
100
|
+
<key>RunAtLoad</key>
|
|
101
|
+
<true/>
|
|
102
|
+
<key>KeepAlive</key>
|
|
103
|
+
<dict>
|
|
104
|
+
<key>SuccessfulExit</key>
|
|
105
|
+
<false/>
|
|
106
|
+
</dict>
|
|
107
|
+
<key>ThrottleInterval</key>
|
|
108
|
+
<integer>10</integer>
|
|
109
|
+
<key>StandardOutPath</key>
|
|
110
|
+
<string>${logDir}/server.log</string>
|
|
111
|
+
<key>StandardErrorPath</key>
|
|
112
|
+
<string>${logDir}/server.err</string>
|
|
113
|
+
</dict>
|
|
114
|
+
</plist>
|
|
115
|
+
`;
|
|
116
|
+
}
|
|
117
|
+
function macInstall(port) {
|
|
118
|
+
const plistPath = getLaunchdPlistPath();
|
|
119
|
+
mkdirSync(dirname(plistPath), { recursive: true });
|
|
120
|
+
mkdirSync(getLogDir(), { recursive: true });
|
|
121
|
+
if (existsSync(plistPath)) {
|
|
122
|
+
try {
|
|
123
|
+
execSync(`launchctl unload "${plistPath}" 2>/dev/null`);
|
|
124
|
+
}
|
|
125
|
+
catch { }
|
|
126
|
+
}
|
|
127
|
+
writeFileSync(plistPath, generateLaunchdPlist(port));
|
|
128
|
+
execSync(`launchctl load "${plistPath}"`);
|
|
129
|
+
console.log('Service installed and started.');
|
|
130
|
+
console.log(`\nPlist file: ${plistPath}`);
|
|
131
|
+
console.log('\nUseful commands:');
|
|
132
|
+
console.log(` launchctl list | grep ${LAUNCHD_LABEL}`);
|
|
133
|
+
}
|
|
134
|
+
function macUninstall() {
|
|
135
|
+
const plistPath = getLaunchdPlistPath();
|
|
136
|
+
if (existsSync(plistPath)) {
|
|
137
|
+
try {
|
|
138
|
+
execSync(`launchctl unload "${plistPath}"`);
|
|
139
|
+
}
|
|
140
|
+
catch { }
|
|
141
|
+
unlinkSync(plistPath);
|
|
142
|
+
}
|
|
143
|
+
console.log('Service uninstalled.');
|
|
144
|
+
}
|
|
145
|
+
// ── Windows (Startup folder .bat) ──
|
|
146
|
+
function getStartupBatPath() {
|
|
147
|
+
const startupDir = join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup');
|
|
148
|
+
return join(startupDir, `${SERVICE_NAME}.bat`);
|
|
149
|
+
}
|
|
150
|
+
function generateStartupBat(port) {
|
|
151
|
+
const nodePath = getNodePath();
|
|
152
|
+
const cliPath = getCliPath();
|
|
153
|
+
return `@echo off\r\n"${nodePath}" "${cliPath}" start --daemon --port ${port}\r\n`;
|
|
154
|
+
}
|
|
155
|
+
function winInstall(port) {
|
|
156
|
+
mkdirSync(getLogDir(), { recursive: true });
|
|
157
|
+
const batPath = getStartupBatPath();
|
|
158
|
+
writeFileSync(batPath, generateStartupBat(port));
|
|
159
|
+
console.log('Startup script installed.');
|
|
160
|
+
console.log(`\nStartup file: ${batPath}`);
|
|
161
|
+
// Start the server now
|
|
162
|
+
console.log('\nStarting server now...');
|
|
163
|
+
try {
|
|
164
|
+
execSync(`"${getNodePath()}" "${getCliPath()}" start --daemon --port ${port}`, { stdio: 'inherit' });
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
console.error('Failed to start server. Check logs in ~/.agentlink/logs/');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function winUninstall() {
|
|
171
|
+
const batPath = getStartupBatPath();
|
|
172
|
+
if (existsSync(batPath)) {
|
|
173
|
+
unlinkSync(batPath);
|
|
174
|
+
console.log(`Removed startup file: ${batPath}`);
|
|
175
|
+
}
|
|
176
|
+
// Stop running server if any
|
|
177
|
+
const state = loadServerRuntimeState();
|
|
178
|
+
if (state && isProcessAlive(state.pid)) {
|
|
179
|
+
console.log(`Stopping server (PID ${state.pid})...`);
|
|
180
|
+
killProcess(state.pid);
|
|
181
|
+
clearServerRuntimeState();
|
|
182
|
+
}
|
|
183
|
+
console.log('Service uninstalled.');
|
|
184
|
+
}
|
|
185
|
+
// ── Platform dispatch ──
|
|
186
|
+
export function serverServiceInstall(port) {
|
|
187
|
+
const p = process.platform;
|
|
188
|
+
console.log('Installing AgentLink server service...');
|
|
189
|
+
console.log(` Port: ${port}`);
|
|
190
|
+
console.log('');
|
|
191
|
+
if (p === 'linux')
|
|
192
|
+
linuxInstall(port);
|
|
193
|
+
else if (p === 'darwin')
|
|
194
|
+
macInstall(port);
|
|
195
|
+
else if (p === 'win32')
|
|
196
|
+
winInstall(port);
|
|
197
|
+
else {
|
|
198
|
+
console.error(`Unsupported platform: ${p}`);
|
|
199
|
+
console.error('Run the server directly: agentlink-server start --daemon');
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export function serverServiceUninstall() {
|
|
204
|
+
const p = process.platform;
|
|
205
|
+
console.log('Uninstalling AgentLink server service...');
|
|
206
|
+
if (p === 'linux')
|
|
207
|
+
linuxUninstall();
|
|
208
|
+
else if (p === 'darwin')
|
|
209
|
+
macUninstall();
|
|
210
|
+
else if (p === 'win32')
|
|
211
|
+
winUninstall();
|
|
212
|
+
else {
|
|
213
|
+
console.error(`Unsupported platform: ${p}`);
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-link/server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "AgentLink relay server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
-
"files": [
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"web"
|
|
11
|
+
],
|
|
9
12
|
"bin": {
|
|
10
13
|
"agentlink-server": "dist/cli.js"
|
|
11
14
|
},
|