@agent-deck/cli 1.1.0 → 1.1.2
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-config.d.ts +13 -0
- package/dist/mcp-config.d.ts.map +1 -0
- package/dist/mcp-config.js +86 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/ports.d.ts +12 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +93 -0
- package/dist/ports.js.map +1 -0
- package/dist/runtime-state.d.ts +15 -0
- package/dist/runtime-state.d.ts.map +1 -0
- package/dist/runtime-state.js +53 -0
- package/dist/runtime-state.js.map +1 -0
- package/dist/setup.d.ts +12 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +160 -0
- package/dist/setup.js.map +1 -0
- package/dist/start.d.ts +1 -0
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +83 -4
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts +2 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +61 -0
- package/dist/status.js.map +1 -0
- package/dist/stop.d.ts +2 -0
- package/dist/stop.d.ts.map +1 -0
- package/dist/stop.js +83 -0
- package/dist/stop.js.map +1 -0
- package/dist/upgrade.d.ts +15 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +164 -0
- package/dist/upgrade.js.map +1 -0
- package/package.json +5 -6
- package/bin/agent-deck +0 -7
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDtE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBzD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBrE;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwE7D;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAc1E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2D5D"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,21 @@ exports.runCredentialCommand = runCredentialCommand;
|
|
|
8
8
|
exports.runCli = runCli;
|
|
9
9
|
const runtime_1 = require("./lib/runtime");
|
|
10
10
|
const start_1 = require("./start");
|
|
11
|
+
const setup_1 = require("./setup");
|
|
12
|
+
const status_1 = require("./status");
|
|
13
|
+
const stop_1 = require("./stop");
|
|
14
|
+
const upgrade_1 = require("./upgrade");
|
|
11
15
|
const version_1 = require("./version");
|
|
12
16
|
function getVaultManager() {
|
|
13
17
|
return (0, runtime_1.createCredentialManager)();
|
|
14
18
|
}
|
|
15
19
|
function printUsage() {
|
|
16
20
|
console.log(`Usage:
|
|
17
|
-
agent-deck start [--open] [--no-ui] [--port PORT] [--mcp-port PORT]
|
|
21
|
+
agent-deck start [--open] [--no-ui] [--force] [--port PORT] [--mcp-port PORT]
|
|
22
|
+
agent-deck stop
|
|
23
|
+
agent-deck status
|
|
24
|
+
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--start]
|
|
25
|
+
agent-deck upgrade [--check]
|
|
18
26
|
agent-deck doctor
|
|
19
27
|
agent-deck --version
|
|
20
28
|
agent-deck credential add <id> --env-name ENV_NAME --scheme bearer|header|http_basic_user [--label LABEL] [--header-name NAME] [--tags tag1,tag2]
|
|
@@ -194,6 +202,7 @@ async function runCli(argv) {
|
|
|
194
202
|
case 'start': {
|
|
195
203
|
let openBrowser = false;
|
|
196
204
|
let skipUi = false;
|
|
205
|
+
let force = false;
|
|
197
206
|
let backendPort;
|
|
198
207
|
let mcpPort;
|
|
199
208
|
for (let i = 0; i < rest.length; i += 1) {
|
|
@@ -204,6 +213,9 @@ async function runCli(argv) {
|
|
|
204
213
|
else if (arg === '--no-ui') {
|
|
205
214
|
skipUi = true;
|
|
206
215
|
}
|
|
216
|
+
else if (arg === '--force') {
|
|
217
|
+
force = true;
|
|
218
|
+
}
|
|
207
219
|
else if (arg === '--port') {
|
|
208
220
|
backendPort = Number.parseInt(rest[++i] ?? '', 10);
|
|
209
221
|
}
|
|
@@ -215,8 +227,21 @@ async function runCli(argv) {
|
|
|
215
227
|
return 0;
|
|
216
228
|
}
|
|
217
229
|
}
|
|
218
|
-
return (0, start_1.runStart)({ openBrowser, skipUi, backendPort, mcpPort });
|
|
230
|
+
return (0, start_1.runStart)({ openBrowser, skipUi, force, backendPort, mcpPort });
|
|
231
|
+
}
|
|
232
|
+
case 'stop':
|
|
233
|
+
return (0, stop_1.runStop)();
|
|
234
|
+
case 'status':
|
|
235
|
+
return (0, status_1.runStatus)();
|
|
236
|
+
case 'setup': {
|
|
237
|
+
const code = await (0, setup_1.runSetup)(rest);
|
|
238
|
+
if ((0, setup_1.shouldStartAfterSetup)(code)) {
|
|
239
|
+
return (0, start_1.runStart)({});
|
|
240
|
+
}
|
|
241
|
+
return code;
|
|
219
242
|
}
|
|
243
|
+
case 'upgrade':
|
|
244
|
+
return (0, upgrade_1.runUpgrade)(rest);
|
|
220
245
|
case 'doctor':
|
|
221
246
|
return (0, start_1.runDoctor)();
|
|
222
247
|
case 'credential':
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type McpClient = 'cursor' | 'claude' | 'claude-desktop';
|
|
2
|
+
export type SetupScope = 'global' | 'project';
|
|
3
|
+
export interface McpEndpoint {
|
|
4
|
+
host: string;
|
|
5
|
+
mcpPort: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildMcpUrl({ host, mcpPort }: McpEndpoint): string;
|
|
8
|
+
export declare function resolveConfigPath(client: McpClient, scope: SetupScope): string;
|
|
9
|
+
export declare function buildAgentDeckEntry(client: McpClient, endpoint: McpEndpoint): Record<string, unknown>;
|
|
10
|
+
export declare function readJsonFile(filePath: string): Record<string, unknown>;
|
|
11
|
+
export declare function mergeMcpServerConfig(existing: Record<string, unknown>, entry: Record<string, unknown>): Record<string, unknown>;
|
|
12
|
+
export declare function writeJsonFile(filePath: string, data: Record<string, unknown>): void;
|
|
13
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAC/D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAuB9E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBrG;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBtE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGnF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildMcpUrl = buildMcpUrl;
|
|
7
|
+
exports.resolveConfigPath = resolveConfigPath;
|
|
8
|
+
exports.buildAgentDeckEntry = buildAgentDeckEntry;
|
|
9
|
+
exports.readJsonFile = readJsonFile;
|
|
10
|
+
exports.mergeMcpServerConfig = mergeMcpServerConfig;
|
|
11
|
+
exports.writeJsonFile = writeJsonFile;
|
|
12
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
13
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
14
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
function buildMcpUrl({ host, mcpPort }) {
|
|
16
|
+
return `http://${host}:${mcpPort}/mcp`;
|
|
17
|
+
}
|
|
18
|
+
function resolveConfigPath(client, scope) {
|
|
19
|
+
const home = node_os_1.default.homedir();
|
|
20
|
+
switch (client) {
|
|
21
|
+
case 'cursor':
|
|
22
|
+
return scope === 'project'
|
|
23
|
+
? node_path_1.default.join(process.cwd(), '.cursor', 'mcp.json')
|
|
24
|
+
: node_path_1.default.join(home, '.cursor', 'mcp.json');
|
|
25
|
+
case 'claude':
|
|
26
|
+
return scope === 'project'
|
|
27
|
+
? node_path_1.default.join(process.cwd(), '.mcp.json')
|
|
28
|
+
: node_path_1.default.join(home, '.claude.json');
|
|
29
|
+
case 'claude-desktop':
|
|
30
|
+
if (process.platform === 'darwin') {
|
|
31
|
+
return node_path_1.default.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
32
|
+
}
|
|
33
|
+
if (process.platform === 'win32') {
|
|
34
|
+
return node_path_1.default.join(process.env.APPDATA ?? home, 'Claude', 'claude_desktop_config.json');
|
|
35
|
+
}
|
|
36
|
+
return node_path_1.default.join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`Unsupported client: ${client}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function buildAgentDeckEntry(client, endpoint) {
|
|
42
|
+
const url = buildMcpUrl(endpoint);
|
|
43
|
+
if (client === 'claude-desktop') {
|
|
44
|
+
return {
|
|
45
|
+
command: 'npx',
|
|
46
|
+
args: ['-y', 'supergateway', '--streamableHttp', url],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (client === 'claude') {
|
|
50
|
+
return {
|
|
51
|
+
type: 'http',
|
|
52
|
+
url,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return { url };
|
|
56
|
+
}
|
|
57
|
+
function readJsonFile(filePath) {
|
|
58
|
+
if (!node_fs_1.default.existsSync(filePath)) {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
const raw = node_fs_1.default.readFileSync(filePath, 'utf8').trim();
|
|
62
|
+
if (!raw) {
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
const parsed = JSON.parse(raw);
|
|
66
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
67
|
+
throw new Error(`Expected JSON object in ${filePath}`);
|
|
68
|
+
}
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
function mergeMcpServerConfig(existing, entry) {
|
|
72
|
+
const currentServers = existing.mcpServers;
|
|
73
|
+
const mcpServers = currentServers && typeof currentServers === 'object' && !Array.isArray(currentServers)
|
|
74
|
+
? { ...currentServers }
|
|
75
|
+
: {};
|
|
76
|
+
mcpServers['agent-deck'] = entry;
|
|
77
|
+
return {
|
|
78
|
+
...existing,
|
|
79
|
+
mcpServers,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function writeJsonFile(filePath, data) {
|
|
83
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(filePath), { recursive: true });
|
|
84
|
+
node_fs_1.default.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
|
package/dist/ports.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AgentDeckProbe {
|
|
2
|
+
backendUp: boolean;
|
|
3
|
+
mcpUp: boolean;
|
|
4
|
+
backendVersion?: string;
|
|
5
|
+
backendUrl: string;
|
|
6
|
+
mcpUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function isTcpPortOpen(host: string, port: number): Promise<boolean>;
|
|
9
|
+
export declare function probeAgentDeck(host: string, backendPort: number, mcpPort: number): Promise<AgentDeckProbe>;
|
|
10
|
+
export declare function listListeningPids(port: number): number[];
|
|
11
|
+
export declare function formatPortConflict(port: number, label: string, host: string, isAgentDeck: boolean): string;
|
|
12
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAahF;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBxD;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,GACnB,MAAM,CAkBR"}
|
package/dist/ports.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isTcpPortOpen = isTcpPortOpen;
|
|
7
|
+
exports.probeAgentDeck = probeAgentDeck;
|
|
8
|
+
exports.listListeningPids = listListeningPids;
|
|
9
|
+
exports.formatPortConflict = formatPortConflict;
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const node_net_1 = __importDefault(require("node:net"));
|
|
12
|
+
async function fetchJson(url, timeoutMs = 2000) {
|
|
13
|
+
const controller = new AbortController();
|
|
14
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return (await response.json());
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function isTcpPortOpen(host, port) {
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
const socket = node_net_1.default.connect({ host, port });
|
|
32
|
+
const done = (open) => {
|
|
33
|
+
socket.removeAllListeners();
|
|
34
|
+
socket.destroy();
|
|
35
|
+
resolve(open);
|
|
36
|
+
};
|
|
37
|
+
socket.setTimeout(1500);
|
|
38
|
+
socket.on('connect', () => done(true));
|
|
39
|
+
socket.on('timeout', () => done(false));
|
|
40
|
+
socket.on('error', () => done(false));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async function probeAgentDeck(host, backendPort, mcpPort) {
|
|
44
|
+
const backendUrl = `http://${host}:${backendPort}`;
|
|
45
|
+
const mcpUrl = `http://${host}:${mcpPort}`;
|
|
46
|
+
const [backendHealth, mcpHealth] = await Promise.all([
|
|
47
|
+
fetchJson(`${backendUrl}/health`),
|
|
48
|
+
fetchJson(`${mcpUrl}/health`),
|
|
49
|
+
]);
|
|
50
|
+
const backendUp = backendHealth?.status === 'ok' &&
|
|
51
|
+
(backendHealth.service === 'agent-deck-backend' || typeof backendHealth.version === 'string');
|
|
52
|
+
const mcpUp = mcpHealth?.service === 'agent-deck-mcp-server';
|
|
53
|
+
return {
|
|
54
|
+
backendUp,
|
|
55
|
+
mcpUp,
|
|
56
|
+
backendVersion: typeof backendHealth?.version === 'string' ? backendHealth.version : undefined,
|
|
57
|
+
backendUrl,
|
|
58
|
+
mcpUrl,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function listListeningPids(port) {
|
|
62
|
+
if (process.platform === 'win32') {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const output = (0, node_child_process_1.execSync)(`lsof -ti :${port} -sTCP:LISTEN`, { encoding: 'utf8' }).trim();
|
|
67
|
+
if (!output) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
return output
|
|
71
|
+
.split('\n')
|
|
72
|
+
.map((value) => Number.parseInt(value, 10))
|
|
73
|
+
.filter((pid) => Number.isFinite(pid) && pid > 0);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function formatPortConflict(port, label, host, isAgentDeck) {
|
|
80
|
+
const pids = listListeningPids(port);
|
|
81
|
+
const pidHint = pids.length > 0
|
|
82
|
+
? ` Listening PID(s): ${pids.join(', ')}.`
|
|
83
|
+
: process.platform === 'win32'
|
|
84
|
+
? ''
|
|
85
|
+
: ` Check: lsof -i :${port}`;
|
|
86
|
+
if (isAgentDeck) {
|
|
87
|
+
return `Port ${port} (${label}) is already used by a running Agent Deck instance on ${host}.${pidHint}`;
|
|
88
|
+
}
|
|
89
|
+
return (`Port ${port} (${label}) is in use by another program on ${host}.${pidHint}\n` +
|
|
90
|
+
` • Free the port, or start on different ports: agent-deck start --port <api> --mcp-port <mcp>\n` +
|
|
91
|
+
` • If you change ports, re-run: agent-deck setup --client <cursor|claude>`);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface RunState {
|
|
2
|
+
host: string;
|
|
3
|
+
backendPort: number;
|
|
4
|
+
mcpPort: number;
|
|
5
|
+
backendPid: number;
|
|
6
|
+
mcpPid: number;
|
|
7
|
+
cliPid: number;
|
|
8
|
+
startedAt: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function runStatePath(): string;
|
|
11
|
+
export declare function readRunState(): RunState | null;
|
|
12
|
+
export declare function writeRunState(state: RunState): void;
|
|
13
|
+
export declare function clearRunState(): void;
|
|
14
|
+
export declare function isProcessAlive(pid: number): boolean;
|
|
15
|
+
//# sourceMappingURL=runtime-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY,IAAI,QAAQ,GAAG,IAAI,CAO9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAGnD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUnD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runStatePath = runStatePath;
|
|
7
|
+
exports.readRunState = readRunState;
|
|
8
|
+
exports.writeRunState = writeRunState;
|
|
9
|
+
exports.clearRunState = clearRunState;
|
|
10
|
+
exports.isProcessAlive = isProcessAlive;
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
|
+
function agentDeckHome() {
|
|
15
|
+
return process.env.AGENT_DECK_HOME ?? node_path_1.default.join(node_os_1.default.homedir(), '.agent-deck');
|
|
16
|
+
}
|
|
17
|
+
function runStatePath() {
|
|
18
|
+
return node_path_1.default.join(agentDeckHome(), 'run.json');
|
|
19
|
+
}
|
|
20
|
+
function readRunState() {
|
|
21
|
+
try {
|
|
22
|
+
const raw = node_fs_1.default.readFileSync(runStatePath(), 'utf8');
|
|
23
|
+
return JSON.parse(raw);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function writeRunState(state) {
|
|
30
|
+
node_fs_1.default.mkdirSync(agentDeckHome(), { recursive: true });
|
|
31
|
+
node_fs_1.default.writeFileSync(runStatePath(), `${JSON.stringify(state, null, 2)}\n`, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
function clearRunState() {
|
|
34
|
+
try {
|
|
35
|
+
node_fs_1.default.unlinkSync(runStatePath());
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// ignore
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isProcessAlive(pid) {
|
|
42
|
+
if (!Number.isFinite(pid) || pid <= 0) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
process.kill(pid, 0);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=runtime-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":";;;;;AAkBA,oCAEC;AAED,oCAOC;AAED,sCAGC;AAED,sCAMC;AAED,wCAUC;AAtDD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAY7B,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,KAAe;IAC3C,iBAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,iBAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,iBAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type McpClient, type SetupScope } from './mcp-config';
|
|
2
|
+
export interface SetupOptions {
|
|
3
|
+
client: McpClient;
|
|
4
|
+
scope?: SetupScope;
|
|
5
|
+
host?: string;
|
|
6
|
+
mcpPort?: number;
|
|
7
|
+
start?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function printSetupUsage(): void;
|
|
10
|
+
export declare function runSetup(args: string[]): Promise<number>;
|
|
11
|
+
export declare function shouldStartAfterSetup(exitCode: number): boolean;
|
|
12
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAkGD,wBAAgB,eAAe,IAAI,IAAI,CAUtC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC9D;AAiBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printSetupUsage = printSetupUsage;
|
|
4
|
+
exports.runSetup = runSetup;
|
|
5
|
+
exports.shouldStartAfterSetup = shouldStartAfterSetup;
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const mcp_config_1 = require("./mcp-config");
|
|
8
|
+
function parseClient(value) {
|
|
9
|
+
if (!value) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const normalized = value.toLowerCase();
|
|
13
|
+
if (normalized === 'claude-code' || normalized === 'claude_code') {
|
|
14
|
+
return 'claude';
|
|
15
|
+
}
|
|
16
|
+
if (normalized === 'cursor' || normalized === 'claude' || normalized === 'claude-desktop') {
|
|
17
|
+
return normalized;
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
function parseSetupArgs(args) {
|
|
22
|
+
let client = null;
|
|
23
|
+
let scope = 'global';
|
|
24
|
+
let host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
25
|
+
let mcpPort = Number.parseInt(process.env.AGENT_DECK_MCP_PORT ?? '3001', 10);
|
|
26
|
+
let start = false;
|
|
27
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
28
|
+
const arg = args[i];
|
|
29
|
+
if (arg === '--client') {
|
|
30
|
+
client = parseClient(args[++i]);
|
|
31
|
+
}
|
|
32
|
+
else if (arg === '--scope') {
|
|
33
|
+
const value = args[++i];
|
|
34
|
+
if (value === 'global' || value === 'project') {
|
|
35
|
+
scope = value;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return { error: '--scope must be global or project' };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (arg === '--host') {
|
|
42
|
+
host = args[++i] ?? host;
|
|
43
|
+
}
|
|
44
|
+
else if (arg === '--mcp-port') {
|
|
45
|
+
mcpPort = Number.parseInt(args[++i] ?? '', 10);
|
|
46
|
+
}
|
|
47
|
+
else if (arg === '--start') {
|
|
48
|
+
start = true;
|
|
49
|
+
}
|
|
50
|
+
else if (arg === '--help' || arg === '-h') {
|
|
51
|
+
return { error: 'help' };
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return { error: `Unknown setup option: ${arg}` };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!client) {
|
|
58
|
+
return { error: '--client is required (cursor, claude, or claude-desktop)' };
|
|
59
|
+
}
|
|
60
|
+
if (client !== 'cursor' && client !== 'claude' && scope === 'project') {
|
|
61
|
+
return { error: '--scope project is only supported for cursor and claude' };
|
|
62
|
+
}
|
|
63
|
+
if (!Number.isFinite(mcpPort)) {
|
|
64
|
+
return { error: '--mcp-port must be a number' };
|
|
65
|
+
}
|
|
66
|
+
return { client, scope, host, mcpPort, start };
|
|
67
|
+
}
|
|
68
|
+
async function tryClaudeCliAdd(endpoint) {
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
const child = (0, node_child_process_1.spawn)('claude', [
|
|
71
|
+
'mcp',
|
|
72
|
+
'add',
|
|
73
|
+
'--scope',
|
|
74
|
+
'user',
|
|
75
|
+
'--transport',
|
|
76
|
+
'http',
|
|
77
|
+
'agent-deck',
|
|
78
|
+
(0, mcp_config_1.buildMcpUrl)(endpoint),
|
|
79
|
+
], { stdio: ['ignore', 'pipe', 'pipe'], env: process.env });
|
|
80
|
+
let stderr = '';
|
|
81
|
+
child.stderr?.on('data', (chunk) => {
|
|
82
|
+
stderr += chunk.toString();
|
|
83
|
+
});
|
|
84
|
+
child.on('error', (error) => resolve({ ok: false, error: error.message }));
|
|
85
|
+
child.on('exit', (code) => {
|
|
86
|
+
if (code === 0) {
|
|
87
|
+
resolve({ ok: true });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
resolve({ ok: false, error: stderr.trim() || `claude mcp add exited with code ${code}` });
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function printSetupUsage() {
|
|
95
|
+
console.log(`Usage:
|
|
96
|
+
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--mcp-port PORT] [--start]
|
|
97
|
+
|
|
98
|
+
Options:
|
|
99
|
+
--client MCP client to configure (required)
|
|
100
|
+
--scope global (default) or project — project only for cursor (.cursor/mcp.json)
|
|
101
|
+
--host MCP host (default 127.0.0.1 or AGENT_DECK_HOST)
|
|
102
|
+
--mcp-port MCP port (default 3001 or AGENT_DECK_MCP_PORT)
|
|
103
|
+
--start Start Agent Deck after writing config`);
|
|
104
|
+
}
|
|
105
|
+
async function runSetup(args) {
|
|
106
|
+
const parsed = parseSetupArgs(args);
|
|
107
|
+
if ('error' in parsed) {
|
|
108
|
+
if (parsed.error === 'help') {
|
|
109
|
+
printSetupUsage();
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
console.error(parsed.error);
|
|
113
|
+
printSetupUsage();
|
|
114
|
+
return 1;
|
|
115
|
+
}
|
|
116
|
+
const endpoint = {
|
|
117
|
+
host: parsed.host ?? '127.0.0.1',
|
|
118
|
+
mcpPort: parsed.mcpPort ?? 3001,
|
|
119
|
+
};
|
|
120
|
+
if (parsed.client === 'claude') {
|
|
121
|
+
const added = await tryClaudeCliAdd(endpoint);
|
|
122
|
+
if (added.ok) {
|
|
123
|
+
console.log('Configured Claude Code via `claude mcp add` → ~/.claude.json');
|
|
124
|
+
printNextSteps(endpoint, parsed.start === true);
|
|
125
|
+
console.log('Verify: claude mcp list');
|
|
126
|
+
return parsed.start ? 2 : 0;
|
|
127
|
+
}
|
|
128
|
+
console.warn(`Claude CLI failed (${added.error ?? 'unknown error'}) — writing ~/.claude.json instead`);
|
|
129
|
+
}
|
|
130
|
+
const configPath = (0, mcp_config_1.resolveConfigPath)(parsed.client, parsed.scope ?? 'global');
|
|
131
|
+
const entry = (0, mcp_config_1.buildAgentDeckEntry)(parsed.client, endpoint);
|
|
132
|
+
const merged = (0, mcp_config_1.mergeMcpServerConfig)((0, mcp_config_1.readJsonFile)(configPath), entry);
|
|
133
|
+
(0, mcp_config_1.writeJsonFile)(configPath, merged);
|
|
134
|
+
console.log(`Wrote agent-deck MCP config → ${configPath}`);
|
|
135
|
+
if (parsed.client === 'claude-desktop') {
|
|
136
|
+
console.log('Claude Desktop uses a stdio bridge (supergateway) because JSON config is stdio-only.');
|
|
137
|
+
console.log('Start Agent Deck before opening Claude Desktop.');
|
|
138
|
+
}
|
|
139
|
+
printNextSteps(endpoint, parsed.start === true);
|
|
140
|
+
return parsed.start ? 2 : 0;
|
|
141
|
+
}
|
|
142
|
+
function printNextSteps(endpoint, shouldStart) {
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log('Next steps:');
|
|
145
|
+
if (shouldStart) {
|
|
146
|
+
console.log(' 1. Agent Deck will start now (same as `agent-deck start`)');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log(' 1. npx @agent-deck/cli@latest start (or `agent-deck stop` first if ports are busy)');
|
|
150
|
+
}
|
|
151
|
+
console.log(` 2. MCP endpoint → ${(0, mcp_config_1.buildMcpUrl)(endpoint)} (Claude shows server name "agent-deck", not the URL)`);
|
|
152
|
+
console.log(' 3. Restart Claude Code / Cursor if it was already open');
|
|
153
|
+
console.log(' 4. Claude Code: run `claude mcp list` — should show agent-deck ✓ Connected when step 1 is running');
|
|
154
|
+
console.log('');
|
|
155
|
+
console.log('Optional: AGENT_DECK_AUTO_UPGRADE=1 agent-deck start (check npm for updates on start)');
|
|
156
|
+
}
|
|
157
|
+
function shouldStartAfterSetup(exitCode) {
|
|
158
|
+
return exitCode === 2;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/start.d.ts
CHANGED
package/dist/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAwGD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuG1E;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAwCjD"}
|
package/dist/start.js
CHANGED
|
@@ -4,6 +4,10 @@ exports.runStart = runStart;
|
|
|
4
4
|
exports.runDoctor = runDoctor;
|
|
5
5
|
const node_child_process_1 = require("node:child_process");
|
|
6
6
|
const paths_1 = require("./paths");
|
|
7
|
+
const ports_1 = require("./ports");
|
|
8
|
+
const runtime_state_1 = require("./runtime-state");
|
|
9
|
+
const stop_1 = require("./stop");
|
|
10
|
+
const upgrade_1 = require("./upgrade");
|
|
7
11
|
const version_1 = require("./version");
|
|
8
12
|
const children = [];
|
|
9
13
|
let shuttingDown = false;
|
|
@@ -50,6 +54,7 @@ async function shutdown(exitCode = 0) {
|
|
|
50
54
|
return;
|
|
51
55
|
}
|
|
52
56
|
shuttingDown = true;
|
|
57
|
+
(0, runtime_state_1.clearRunState)();
|
|
53
58
|
for (const child of children) {
|
|
54
59
|
if (!child.killed) {
|
|
55
60
|
child.kill('SIGTERM');
|
|
@@ -58,12 +63,58 @@ async function shutdown(exitCode = 0) {
|
|
|
58
63
|
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
59
64
|
process.exit(exitCode);
|
|
60
65
|
}
|
|
66
|
+
function printRunningEndpoints(host, backendPort, mcpPort, backendUrl) {
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log('Agent Deck is running');
|
|
69
|
+
console.log(` Dashboard ${backendUrl} (not :3000 — that port is dev-only)`);
|
|
70
|
+
console.log(` MCP http://${host}:${mcpPort}/mcp`);
|
|
71
|
+
console.log(` API health ${backendUrl}/health`);
|
|
72
|
+
console.log('');
|
|
73
|
+
console.log('Claude Code:');
|
|
74
|
+
console.log(` claude mcp add --scope user --transport http agent-deck http://${host}:${mcpPort}/mcp`);
|
|
75
|
+
console.log('');
|
|
76
|
+
}
|
|
77
|
+
async function ensurePortsAvailable(host, backendPort, mcpPort, probe) {
|
|
78
|
+
const [backendBusy, mcpBusy] = await Promise.all([
|
|
79
|
+
(0, ports_1.isTcpPortOpen)(host, backendPort),
|
|
80
|
+
(0, ports_1.isTcpPortOpen)(host, mcpPort),
|
|
81
|
+
]);
|
|
82
|
+
if (backendBusy && !probe.backendUp) {
|
|
83
|
+
console.error(`[agent-deck] ${(0, ports_1.formatPortConflict)(backendPort, 'API/dashboard', host, false)}`);
|
|
84
|
+
return 1;
|
|
85
|
+
}
|
|
86
|
+
if (mcpBusy && !probe.mcpUp) {
|
|
87
|
+
console.error(`[agent-deck] ${(0, ports_1.formatPortConflict)(mcpPort, 'MCP', host, false)}`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
61
92
|
async function runStart(options = {}) {
|
|
93
|
+
await (0, upgrade_1.maybeAutoUpgradeOnStart)();
|
|
94
|
+
await (0, upgrade_1.notifyIfUpdateAvailable)();
|
|
62
95
|
const backendPort = options.backendPort ?? parsePort(process.env.AGENT_DECK_PORT, 8000);
|
|
63
96
|
const mcpPort = options.mcpPort ?? parsePort(process.env.AGENT_DECK_MCP_PORT, 3001);
|
|
64
97
|
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
65
98
|
const backendUrl = `http://${host}:${backendPort}`;
|
|
66
99
|
const uiDist = options.skipUi ? undefined : (0, paths_1.resolveUiDist)();
|
|
100
|
+
const probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
101
|
+
if (probe.backendUp && probe.mcpUp) {
|
|
102
|
+
if (options.force) {
|
|
103
|
+
console.log('[agent-deck] Restarting existing instance (--force) ...');
|
|
104
|
+
await (0, stop_1.runStop)();
|
|
105
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
printRunningEndpoints(host, backendPort, mcpPort, backendUrl);
|
|
109
|
+
console.log('Already running. Use `agent-deck stop` or `agent-deck start --force` to restart.');
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const refreshedProbe = options.force ? await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort) : probe;
|
|
114
|
+
const portError = await ensurePortsAvailable(host, backendPort, mcpPort, refreshedProbe);
|
|
115
|
+
if (portError !== null) {
|
|
116
|
+
return portError;
|
|
117
|
+
}
|
|
67
118
|
if (!options.skipUi && !uiDist) {
|
|
68
119
|
console.warn('[agent-deck] Dashboard UI bundle not found (static-ui). API and MCP will still start.');
|
|
69
120
|
console.warn('[agent-deck] Set AGENT_DECK_UI_DIST or run from a published npm package build.');
|
|
@@ -71,26 +122,44 @@ async function runStart(options = {}) {
|
|
|
71
122
|
const backendEntry = (0, paths_1.resolveBackendEntry)('index');
|
|
72
123
|
const mcpEntry = (0, paths_1.resolveBackendEntry)('mcp-index');
|
|
73
124
|
console.log('[agent-deck] Starting backend ...');
|
|
74
|
-
spawnNodeService('backend', backendEntry, {
|
|
125
|
+
const backendChild = spawnNodeService('backend', backendEntry, {
|
|
75
126
|
PORT: String(backendPort),
|
|
76
127
|
HOST: host,
|
|
77
128
|
...(uiDist ? { AGENT_DECK_UI_DIST: uiDist } : {}),
|
|
78
129
|
});
|
|
79
130
|
const healthy = await waitForHealth(`${backendUrl}/health`);
|
|
80
131
|
if (!healthy) {
|
|
81
|
-
console.error('[agent-deck] Backend failed health check');
|
|
132
|
+
console.error('[agent-deck] Backend failed health check (port conflict or crash).');
|
|
133
|
+
console.error(`[agent-deck] Run: agent-deck status`);
|
|
82
134
|
await shutdown(1);
|
|
83
135
|
return 1;
|
|
84
136
|
}
|
|
85
137
|
console.log('[agent-deck] Starting MCP server ...');
|
|
86
|
-
spawnNodeService('mcp', mcpEntry, {
|
|
138
|
+
const mcpChild = spawnNodeService('mcp', mcpEntry, {
|
|
87
139
|
AGENT_DECK_MCP_PORT: String(mcpPort),
|
|
88
140
|
AGENT_DECK_BACKEND_URL: backendUrl,
|
|
89
141
|
});
|
|
142
|
+
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
143
|
+
const mcpProbe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
144
|
+
if (!mcpProbe.mcpUp) {
|
|
145
|
+
console.error('[agent-deck] MCP server failed to start (port conflict or crash).');
|
|
146
|
+
console.error(`[agent-deck] Run: agent-deck status`);
|
|
147
|
+
await shutdown(1);
|
|
148
|
+
return 1;
|
|
149
|
+
}
|
|
150
|
+
(0, runtime_state_1.writeRunState)({
|
|
151
|
+
host,
|
|
152
|
+
backendPort,
|
|
153
|
+
mcpPort,
|
|
154
|
+
backendPid: backendChild.pid ?? 0,
|
|
155
|
+
mcpPid: mcpChild.pid ?? 0,
|
|
156
|
+
cliPid: process.pid,
|
|
157
|
+
startedAt: new Date().toISOString(),
|
|
158
|
+
});
|
|
90
159
|
const dashboardLine = uiDist ? backendUrl : '(UI bundle missing — use npm run dev:all for dev UI)';
|
|
91
160
|
console.log('');
|
|
92
161
|
console.log('Agent Deck is running');
|
|
93
|
-
console.log(` Dashboard ${dashboardLine}`);
|
|
162
|
+
console.log(` Dashboard ${dashboardLine} (not :3000 — that port is dev-only)`);
|
|
94
163
|
console.log(` MCP http://${host}:${mcpPort}/mcp`);
|
|
95
164
|
console.log(` API health ${backendUrl}/health`);
|
|
96
165
|
console.log('');
|
|
@@ -135,6 +204,16 @@ async function runDoctor() {
|
|
|
135
204
|
console.warn('WARN: dashboard UI bundle missing (optional for API/MCP)');
|
|
136
205
|
}
|
|
137
206
|
console.log(`Package version ${(0, version_1.getAgentDeckVersion)()}`);
|
|
207
|
+
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
208
|
+
const backendPort = parsePort(process.env.AGENT_DECK_PORT, 8000);
|
|
209
|
+
const mcpPort = parsePort(process.env.AGENT_DECK_MCP_PORT, 3001);
|
|
210
|
+
const probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
211
|
+
if (probe.backendUp && probe.mcpUp) {
|
|
212
|
+
console.log(`OK: Agent Deck reachable on :${backendPort} / :${mcpPort}`);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.warn('WARN: Agent Deck is not running (agent-deck start)');
|
|
216
|
+
}
|
|
138
217
|
return ok ? 0 : 1;
|
|
139
218
|
}
|
|
140
219
|
//# sourceMappingURL=start.js.map
|
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
|
package/dist/status.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAYA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAqDjD"}
|
package/dist/status.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runStatus = runStatus;
|
|
4
|
+
const ports_1 = require("./ports");
|
|
5
|
+
const runtime_state_1 = require("./runtime-state");
|
|
6
|
+
const version_1 = require("./version");
|
|
7
|
+
function parsePort(value, fallback) {
|
|
8
|
+
if (!value) {
|
|
9
|
+
return fallback;
|
|
10
|
+
}
|
|
11
|
+
const parsed = Number.parseInt(value, 10);
|
|
12
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
13
|
+
}
|
|
14
|
+
async function runStatus() {
|
|
15
|
+
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
16
|
+
const backendPort = parsePort(process.env.AGENT_DECK_PORT, 8000);
|
|
17
|
+
const mcpPort = parsePort(process.env.AGENT_DECK_MCP_PORT, 3001);
|
|
18
|
+
const probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
19
|
+
const state = (0, runtime_state_1.readRunState)();
|
|
20
|
+
console.log(`CLI package ${(0, version_1.getAgentDeckVersion)()}`);
|
|
21
|
+
console.log(`Configured host ${host} API :${backendPort} MCP :${mcpPort}`);
|
|
22
|
+
console.log('');
|
|
23
|
+
if (probe.backendUp && probe.mcpUp) {
|
|
24
|
+
console.log('Status: running');
|
|
25
|
+
console.log(` Dashboard ${probe.backendUrl}`);
|
|
26
|
+
console.log(` MCP ${probe.mcpUrl}/mcp`);
|
|
27
|
+
if (probe.backendVersion) {
|
|
28
|
+
console.log(` Backend v${probe.backendVersion}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (probe.backendUp || probe.mcpUp) {
|
|
32
|
+
console.log('Status: partial (one service up, one down — try agent-deck stop && agent-deck start)');
|
|
33
|
+
console.log(` Backend ${probe.backendUp ? 'up' : 'down'} ${probe.backendUrl}`);
|
|
34
|
+
console.log(` MCP ${probe.mcpUp ? 'up' : 'down'} ${probe.mcpUrl}`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log('Status: not running');
|
|
38
|
+
}
|
|
39
|
+
if (state) {
|
|
40
|
+
console.log('');
|
|
41
|
+
console.log('Last run.json:');
|
|
42
|
+
console.log(` started ${state.startedAt}`);
|
|
43
|
+
console.log(` pids backend=${state.backendPid}${(0, runtime_state_1.isProcessAlive)(state.backendPid) ? '' : ' (dead)'} ` +
|
|
44
|
+
`mcp=${state.mcpPid}${(0, runtime_state_1.isProcessAlive)(state.mcpPid) ? '' : ' (dead)'} ` +
|
|
45
|
+
`cli=${state.cliPid}${(0, runtime_state_1.isProcessAlive)(state.cliPid) ? '' : ' (dead)'}`);
|
|
46
|
+
}
|
|
47
|
+
const [backendBusy, mcpBusy] = await Promise.all([
|
|
48
|
+
(0, ports_1.isTcpPortOpen)(host, backendPort),
|
|
49
|
+
(0, ports_1.isTcpPortOpen)(host, mcpPort),
|
|
50
|
+
]);
|
|
51
|
+
if (backendBusy && !probe.backendUp) {
|
|
52
|
+
console.log('');
|
|
53
|
+
console.warn((0, ports_1.formatPortConflict)(backendPort, 'API/dashboard', host, false));
|
|
54
|
+
}
|
|
55
|
+
if (mcpBusy && !probe.mcpUp) {
|
|
56
|
+
console.log('');
|
|
57
|
+
console.warn((0, ports_1.formatPortConflict)(mcpPort, 'MCP', host, false));
|
|
58
|
+
}
|
|
59
|
+
return probe.backendUp && probe.mcpUp ? 0 : 1;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
package/dist/stop.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../src/stop.ts"],"names":[],"mappings":"AAqCA,wBAAsB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAqD/C"}
|
package/dist/stop.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runStop = runStop;
|
|
4
|
+
const ports_1 = require("./ports");
|
|
5
|
+
const runtime_state_1 = require("./runtime-state");
|
|
6
|
+
function parsePort(value, fallback) {
|
|
7
|
+
if (!value) {
|
|
8
|
+
return fallback;
|
|
9
|
+
}
|
|
10
|
+
const parsed = Number.parseInt(value, 10);
|
|
11
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
12
|
+
}
|
|
13
|
+
function terminatePid(pid, label) {
|
|
14
|
+
if (!(0, runtime_state_1.isProcessAlive)(pid)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
process.kill(pid, 'SIGTERM');
|
|
19
|
+
console.log(`[agent-deck] Stopped ${label} (pid ${pid})`);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.warn(`[agent-deck] Could not stop ${label} (pid ${pid}): ${error instanceof Error ? error.message : error}`);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function waitForShutdown(host, backendPort, mcpPort) {
|
|
28
|
+
for (let i = 0; i < 20; i += 1) {
|
|
29
|
+
const probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
30
|
+
if (!probe.backendUp && !probe.mcpUp) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function runStop() {
|
|
37
|
+
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
38
|
+
const backendPort = parsePort(process.env.AGENT_DECK_PORT, 8000);
|
|
39
|
+
const mcpPort = parsePort(process.env.AGENT_DECK_MCP_PORT, 3001);
|
|
40
|
+
const state = (0, runtime_state_1.readRunState)();
|
|
41
|
+
let stopped = 0;
|
|
42
|
+
if (state) {
|
|
43
|
+
if (terminatePid(state.mcpPid, 'MCP server')) {
|
|
44
|
+
stopped += 1;
|
|
45
|
+
}
|
|
46
|
+
if (terminatePid(state.backendPid, 'backend')) {
|
|
47
|
+
stopped += 1;
|
|
48
|
+
}
|
|
49
|
+
if (terminatePid(state.cliPid, 'CLI supervisor')) {
|
|
50
|
+
stopped += 1;
|
|
51
|
+
}
|
|
52
|
+
(0, runtime_state_1.clearRunState)();
|
|
53
|
+
}
|
|
54
|
+
let probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
55
|
+
if (probe.backendUp || probe.mcpUp) {
|
|
56
|
+
for (const pid of (0, ports_1.listListeningPids)(mcpPort)) {
|
|
57
|
+
if (terminatePid(pid, `listener on :${mcpPort}`)) {
|
|
58
|
+
stopped += 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const pid of (0, ports_1.listListeningPids)(backendPort)) {
|
|
62
|
+
if (terminatePid(pid, `listener on :${backendPort}`)) {
|
|
63
|
+
stopped += 1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
await waitForShutdown(host, backendPort, mcpPort);
|
|
67
|
+
probe = await (0, ports_1.probeAgentDeck)(host, backendPort, mcpPort);
|
|
68
|
+
}
|
|
69
|
+
if (probe.backendUp || probe.mcpUp) {
|
|
70
|
+
console.warn('[agent-deck] Agent Deck still responds on configured ports. Kill remaining processes manually:');
|
|
71
|
+
console.warn(` lsof -ti :${backendPort} -sTCP:LISTEN | xargs kill`);
|
|
72
|
+
console.warn(` lsof -ti :${mcpPort} -sTCP:LISTEN | xargs kill`);
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
if (stopped === 0) {
|
|
76
|
+
console.log('[agent-deck] No running Agent Deck instance found.');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log('[agent-deck] Agent Deck stopped.');
|
|
80
|
+
}
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=stop.js.map
|
package/dist/stop.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../src/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface UpgradeCheckResult {
|
|
2
|
+
current: string;
|
|
3
|
+
latest: string | null;
|
|
4
|
+
updateAvailable: boolean;
|
|
5
|
+
fromCache: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
8
|
+
export declare function fetchLatestVersion(): Promise<string | null>;
|
|
9
|
+
export declare function checkForUpgrade(options?: {
|
|
10
|
+
force?: boolean;
|
|
11
|
+
}): Promise<UpgradeCheckResult>;
|
|
12
|
+
export declare function runUpgrade(args: string[]): Promise<number>;
|
|
13
|
+
export declare function maybeAutoUpgradeOnStart(): Promise<void>;
|
|
14
|
+
export declare function notifyIfUpdateAvailable(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AA4BD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajE;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2BpG;AAaD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkChE;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB7D;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB7D"}
|
package/dist/upgrade.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.compareSemver = compareSemver;
|
|
7
|
+
exports.fetchLatestVersion = fetchLatestVersion;
|
|
8
|
+
exports.checkForUpgrade = checkForUpgrade;
|
|
9
|
+
exports.runUpgrade = runUpgrade;
|
|
10
|
+
exports.maybeAutoUpgradeOnStart = maybeAutoUpgradeOnStart;
|
|
11
|
+
exports.notifyIfUpdateAvailable = notifyIfUpdateAvailable;
|
|
12
|
+
const node_child_process_1 = require("node:child_process");
|
|
13
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
14
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const version_1 = require("./version");
|
|
17
|
+
const PACKAGE_NAME = '@agent-deck/cli';
|
|
18
|
+
const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
|
|
19
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
20
|
+
function agentDeckHome() {
|
|
21
|
+
return process.env.AGENT_DECK_HOME ?? node_path_1.default.join(node_os_1.default.homedir(), '.agent-deck');
|
|
22
|
+
}
|
|
23
|
+
function cachePath() {
|
|
24
|
+
return node_path_1.default.join(agentDeckHome(), 'version-check.json');
|
|
25
|
+
}
|
|
26
|
+
function readCache() {
|
|
27
|
+
try {
|
|
28
|
+
const raw = node_fs_1.default.readFileSync(cachePath(), 'utf8');
|
|
29
|
+
return JSON.parse(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function writeCache(latest) {
|
|
36
|
+
node_fs_1.default.mkdirSync(agentDeckHome(), { recursive: true });
|
|
37
|
+
const payload = {
|
|
38
|
+
checkedAt: new Date().toISOString(),
|
|
39
|
+
latest,
|
|
40
|
+
};
|
|
41
|
+
node_fs_1.default.writeFileSync(cachePath(), `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
|
|
42
|
+
}
|
|
43
|
+
function compareSemver(a, b) {
|
|
44
|
+
const parse = (value) => value.replace(/^v/, '').split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
45
|
+
const left = parse(a);
|
|
46
|
+
const right = parse(b);
|
|
47
|
+
for (let i = 0; i < Math.max(left.length, right.length); i += 1) {
|
|
48
|
+
const diff = (left[i] ?? 0) - (right[i] ?? 0);
|
|
49
|
+
if (diff !== 0) {
|
|
50
|
+
return diff > 0 ? 1 : -1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
async function fetchLatestVersion() {
|
|
56
|
+
try {
|
|
57
|
+
const response = await fetch(REGISTRY_URL, {
|
|
58
|
+
headers: { accept: 'application/json' },
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const data = (await response.json());
|
|
64
|
+
return data.version ?? null;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function checkForUpgrade(options = {}) {
|
|
71
|
+
const current = (0, version_1.getAgentDeckVersion)();
|
|
72
|
+
const cache = readCache();
|
|
73
|
+
if (!options.force && cache?.latest) {
|
|
74
|
+
const age = Date.now() - Date.parse(cache.checkedAt);
|
|
75
|
+
if (Number.isFinite(age) && age >= 0 && age < CACHE_TTL_MS) {
|
|
76
|
+
return {
|
|
77
|
+
current,
|
|
78
|
+
latest: cache.latest,
|
|
79
|
+
updateAvailable: compareSemver(cache.latest, current) > 0,
|
|
80
|
+
fromCache: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const latest = await fetchLatestVersion();
|
|
85
|
+
if (latest) {
|
|
86
|
+
writeCache(latest);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
current,
|
|
90
|
+
latest,
|
|
91
|
+
updateAvailable: latest ? compareSemver(latest, current) > 0 : false,
|
|
92
|
+
fromCache: false,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function runNpmInstallGlobal(version) {
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
const child = (0, node_child_process_1.spawn)('npm', ['install', '-g', `${PACKAGE_NAME}@${version}`], {
|
|
98
|
+
stdio: 'inherit',
|
|
99
|
+
shell: process.platform === 'win32',
|
|
100
|
+
});
|
|
101
|
+
child.on('error', () => resolve(1));
|
|
102
|
+
child.on('exit', (code) => resolve(code ?? 1));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
async function runUpgrade(args) {
|
|
106
|
+
const checkOnly = args.includes('--check');
|
|
107
|
+
const result = await checkForUpgrade({ force: true });
|
|
108
|
+
if (!result.latest) {
|
|
109
|
+
console.error('Could not reach npm registry to check for updates.');
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
console.log(`Current: ${result.current}`);
|
|
113
|
+
console.log(`Latest: ${result.latest}`);
|
|
114
|
+
if (!result.updateAvailable) {
|
|
115
|
+
console.log('Already on the latest version.');
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
if (checkOnly) {
|
|
119
|
+
console.log('Update available. Run: agent-deck upgrade');
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
console.log(`Upgrading ${PACKAGE_NAME} → ${result.latest} ...`);
|
|
123
|
+
const code = await runNpmInstallGlobal(result.latest);
|
|
124
|
+
if (code === 0) {
|
|
125
|
+
console.log('Upgrade complete. Restart any running Agent Deck process.');
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.error('Upgrade failed. Try manually:');
|
|
129
|
+
console.error(` npm install -g ${PACKAGE_NAME}@${result.latest}`);
|
|
130
|
+
console.error('Or use without global install:');
|
|
131
|
+
console.error(` npx ${PACKAGE_NAME}@${result.latest} start`);
|
|
132
|
+
}
|
|
133
|
+
return code;
|
|
134
|
+
}
|
|
135
|
+
async function maybeAutoUpgradeOnStart() {
|
|
136
|
+
const enabled = process.env.AGENT_DECK_AUTO_UPGRADE === '1' ||
|
|
137
|
+
process.env.AGENT_DECK_AUTO_UPGRADE === 'true';
|
|
138
|
+
if (!enabled) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const result = await checkForUpgrade();
|
|
142
|
+
if (!result.updateAvailable || !result.latest) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
console.log(`[agent-deck] Update available: ${result.current} → ${result.latest}`);
|
|
146
|
+
const code = await runNpmInstallGlobal(result.latest);
|
|
147
|
+
if (code !== 0) {
|
|
148
|
+
console.warn('[agent-deck] Auto-upgrade failed; continuing with current version.');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function notifyIfUpdateAvailable() {
|
|
152
|
+
if (process.env.AGENT_DECK_AUTO_UPGRADE === '1' ||
|
|
153
|
+
process.env.AGENT_DECK_AUTO_UPGRADE === 'true' ||
|
|
154
|
+
process.env.AGENT_DECK_NO_UPDATE_CHECK === '1' ||
|
|
155
|
+
process.env.AGENT_DECK_NO_UPDATE_CHECK === 'true') {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const result = await checkForUpgrade();
|
|
159
|
+
if (!result.updateAvailable || !result.latest) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
console.log(`[agent-deck] Update available: ${result.current} → ${result.latest} (agent-deck upgrade, or npx ${PACKAGE_NAME}@latest start)`);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-deck/cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Local MCP proxy with decks — one endpoint for Claude Code, Cursor, and other MCP clients",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"bin": {
|
|
7
|
-
"agent-deck": "bin
|
|
7
|
+
"agent-deck": "./dist/bin.js"
|
|
8
8
|
},
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
"bin"
|
|
11
|
+
"dist"
|
|
13
12
|
],
|
|
14
13
|
"engines": {
|
|
15
14
|
"node": ">=20"
|
|
@@ -40,8 +39,8 @@
|
|
|
40
39
|
"prepublishOnly": "npm run build"
|
|
41
40
|
},
|
|
42
41
|
"dependencies": {
|
|
43
|
-
"@agent-deck/backend": "^1.1.
|
|
44
|
-
"@agent-deck/shared": "^1.1.
|
|
42
|
+
"@agent-deck/backend": "^1.1.2",
|
|
43
|
+
"@agent-deck/shared": "^1.1.2"
|
|
45
44
|
},
|
|
46
45
|
"devDependencies": {
|
|
47
46
|
"@types/node": "^20.11.5",
|