@sudosandwich/limps 3.0.0 → 3.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 +135 -127
- package/dist/cli/config-cmd.d.ts +4 -17
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +20 -156
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/init-project.d.ts.map +1 -1
- package/dist/cli/init-project.js +15 -33
- package/dist/cli/init-project.js.map +1 -1
- package/dist/cli/mcp-client-adapter.d.ts +17 -48
- package/dist/cli/mcp-client-adapter.d.ts.map +1 -1
- package/dist/cli/mcp-client-adapter.js +29 -194
- package/dist/cli/mcp-client-adapter.js.map +1 -1
- package/dist/cli/mcp-clients.d.ts +2 -40
- package/dist/cli/mcp-clients.d.ts.map +1 -1
- package/dist/cli/mcp-clients.js +31 -91
- package/dist/cli/mcp-clients.js.map +1 -1
- package/dist/commands/config/index.js +1 -1
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/{sync-mcp.d.ts → print.d.ts} +2 -6
- package/dist/commands/config/print.d.ts.map +1 -0
- package/dist/commands/config/print.js +51 -0
- package/dist/commands/config/print.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +25 -22
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status-server.d.ts.map +1 -1
- package/dist/commands/status-server.js +36 -40
- package/dist/commands/status-server.js.map +1 -1
- package/dist/utils/http-client.d.ts +72 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +160 -0
- package/dist/utils/http-client.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/config/sync-mcp.d.ts.map +0 -1
- package/dist/commands/config/sync-mcp.js +0 -232
- package/dist/commands/config/sync-mcp.js.map +0 -1
package/dist/commands/index.js
CHANGED
|
@@ -14,7 +14,7 @@ export default function DefaultCommand() {
|
|
|
14
14
|
setShowWhatsNew(true);
|
|
15
15
|
}
|
|
16
16
|
}, [version]);
|
|
17
|
-
const defaultContent = (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", bold: true, children: "limps" }), ' ', _jsxs(Text, { color: "yellow", children: ["v", version] }), " - Local Intelligent MCP Planning Server", '\n', '\n', _jsx(Text, { color: "yellow", children: "Usage:" }), " limps ", '<command>', " [options]", '\n', '\n', _jsx(Text, { color: "cyan", children: "
|
|
17
|
+
const defaultContent = (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", bold: true, children: "limps" }), ' ', _jsxs(Text, { color: "yellow", children: ["v", version] }), " - Local Intelligent MCP Planning Server", '\n', '\n', _jsx(Text, { color: "yellow", children: "Usage:" }), " limps ", '<command>', " [options]", '\n', '\n', _jsx(Text, { color: "cyan", children: "HTTP Server:" }), '\n', ' ', "start", ' ', "Start the HTTP MCP server", '\n', ' ', "stop", ' ', "Stop the HTTP server", '\n', ' ', "status-server", ' ', "Show server status", '\n', '\n', _jsx(Text, { color: "cyan", children: "Plan Management:" }), '\n', ' ', "init ", '<name> ', "Initialize a new project", '\n', ' ', "list-plans", ' ', "List all plans with status", '\n', ' ', "list-agents", ' ', "List agents in a plan", '\n', ' ', "next-task", ' ', "Get the next best task", '\n', ' ', "score-task", ' ', "Show scoring for a task", '\n', ' ', "score-all", ' ', "Compare scores across tasks", '\n', ' ', "status", ' ', "Show plan progress", '\n', ' ', "repair-plans", ' ', "Repair plan frontmatter", '\n', ' ', "health", ' ', "Run plan health checks", '\n', ' ', "proposals", ' ', "List and apply update proposals", '\n', '\n', _jsx(Text, { color: "cyan", children: "System:" }), '\n', ' ', "reindex", ' ', "Rebuild the document index", '\n', ' ', "config", ' ', "Manage project configuration", '\n', ' ', "graph", ' ', "Knowledge graph commands", '\n', ' ', "version", ' ', "Show version information", '\n', '\n', "Run ", _jsxs(Text, { color: "green", children: ["limps ", '<command>'] }), " without args for usage help.", '\n', "Run ", _jsxs(Text, { color: "green", children: ["limps ", '<command>', " --help"] }), " for full documentation."] }));
|
|
18
18
|
if (showWhatsNew) {
|
|
19
19
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(WhatsNew, { version: version, onDismiss: () => setShowWhatsNew(false) }), defaultContent] }));
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,cAAc;IACpC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,8CAA8C;QAC9C,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,cAAc,GAAG,CACrB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,4BAEhB,EAAC,GAAG,EACX,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAG,OAAO,IAAQ,8CAAyC,IAAI,EAClF,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,uBAAc,aAAQ,WAAW,gBAAY,IAAI,EACpE,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,cAAc;IACpC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,8CAA8C;QAC9C,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,cAAc,GAAG,CACrB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,4BAEhB,EAAC,GAAG,EACX,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAG,OAAO,IAAQ,8CAAyC,IAAI,EAClF,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,uBAAc,aAAQ,WAAW,gBAAY,IAAI,EACpE,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,6BAAoB,EACrC,IAAI,EACJ,IAAI,WAAO,YAAY,+BAA2B,IAAI,EACtD,IAAI,UAAM,aAAa,0BAAsB,IAAI,EACjD,IAAI,mBAAe,IAAI,wBAAoB,IAAI,EAC/C,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iCAAwB,EACzC,IAAI,EACJ,IAAI,WAAO,WAAW,8BAA0B,IAAI,EACpD,IAAI,gBAAY,MAAM,gCAA4B,IAAI,EACtD,IAAI,iBAAa,KAAK,2BAAuB,IAAI,EACjD,IAAI,eAAW,OAAO,4BAAwB,IAAI,EAClD,IAAI,gBAAY,MAAM,6BAAyB,IAAI,EACnD,IAAI,eAAW,OAAO,iCAA6B,IAAI,EACvD,IAAI,YAAQ,UAAU,wBAAoB,IAAI,EAC9C,IAAI,kBAAc,IAAI,6BAAyB,IAAI,EACnD,IAAI,YAAQ,UAAU,4BAAwB,IAAI,EAClD,IAAI,eAAW,OAAO,qCAAiC,IAAI,EAC3D,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAe,EAChC,IAAI,EACJ,IAAI,aAAS,SAAS,gCAA4B,IAAI,EACtD,IAAI,YAAQ,UAAU,kCAA8B,IAAI,EACxD,IAAI,WAAO,WAAW,8BAA0B,IAAI,EACpD,IAAI,aAAS,SAAS,8BAA0B,IAAI,EACpD,IAAI,UACD,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAQ,WAAW,IAAQ,mCAA8B,IAAI,UAChF,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAQ,WAAW,eAAe,gCACpD,CACR,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,GAAI,EACtE,cAAc,IACX,CACP,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,WAAW,gCAAgC,CAAC;AAEzD,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAgI9E"}
|
package/dist/commands/start.js
CHANGED
|
@@ -5,27 +5,11 @@ import { z } from 'zod';
|
|
|
5
5
|
import { spawn } from 'child_process';
|
|
6
6
|
import { resolve, dirname } from 'path';
|
|
7
7
|
import { fileURLToPath } from 'url';
|
|
8
|
-
import { get } from 'http';
|
|
9
8
|
import { loadConfig, getHttpServerConfig } from '../config.js';
|
|
10
9
|
import { resolveConfigPath } from '../utils/config-resolver.js';
|
|
11
10
|
import { getPidFilePath, getRunningDaemon } from '../pidfile.js';
|
|
12
11
|
import { startHttpServer, stopHttpServer } from '../server-http.js';
|
|
13
|
-
|
|
14
|
-
* Check if the daemon is responding to health requests.
|
|
15
|
-
*/
|
|
16
|
-
async function checkDaemonHealth(host, port, timeoutMs = 1000) {
|
|
17
|
-
return new Promise((resolve) => {
|
|
18
|
-
const req = get(`http://${host}:${port}/health`, { timeout: timeoutMs }, (res) => {
|
|
19
|
-
resolve(res.statusCode === 200);
|
|
20
|
-
});
|
|
21
|
-
req.on('error', () => resolve(false));
|
|
22
|
-
req.on('timeout', () => {
|
|
23
|
-
req.destroy();
|
|
24
|
-
resolve(false);
|
|
25
|
-
});
|
|
26
|
-
req.setTimeout(timeoutMs);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
12
|
+
import { checkDaemonHealth, isDaemonHealthy, } from '../utils/http-client.js';
|
|
29
13
|
export const description = 'Start the limps HTTP server';
|
|
30
14
|
export const options = z.object({
|
|
31
15
|
config: z.string().optional().describe('Path to config file'),
|
|
@@ -79,6 +63,14 @@ export default function StartCommand({ options: opts }) {
|
|
|
79
63
|
stdio: 'ignore',
|
|
80
64
|
});
|
|
81
65
|
child.unref();
|
|
66
|
+
// HTTP options for health checks
|
|
67
|
+
const httpOptions = {
|
|
68
|
+
timeout: 500,
|
|
69
|
+
retries: 0,
|
|
70
|
+
logger: process.env.DEBUG
|
|
71
|
+
? (msg) => console.error(`[limps:http] ${msg}`)
|
|
72
|
+
: undefined,
|
|
73
|
+
};
|
|
82
74
|
// Poll for daemon startup with timeout (max 5s)
|
|
83
75
|
const startTime = Date.now();
|
|
84
76
|
const timeout = 5000;
|
|
@@ -88,20 +80,31 @@ export default function StartCommand({ options: opts }) {
|
|
|
88
80
|
daemon = getRunningDaemon(pidFilePath);
|
|
89
81
|
if (daemon) {
|
|
90
82
|
// Verify the daemon is actually responding to requests
|
|
91
|
-
const isHealthy = await
|
|
83
|
+
const isHealthy = await isDaemonHealthy(daemon.host, daemon.port, httpOptions);
|
|
92
84
|
if (isHealthy)
|
|
93
85
|
break;
|
|
94
86
|
}
|
|
95
87
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
96
88
|
}
|
|
97
89
|
if (daemon) {
|
|
98
|
-
// Final verification
|
|
99
|
-
const
|
|
100
|
-
|
|
90
|
+
// Final verification with detailed error handling
|
|
91
|
+
const healthResult = await checkDaemonHealth(daemon.host, daemon.port, {
|
|
92
|
+
...httpOptions,
|
|
93
|
+
timeout: 1000,
|
|
94
|
+
});
|
|
95
|
+
if (healthResult.ok && healthResult.data.status === 'ok') {
|
|
101
96
|
setStatus(`limps daemon started (PID ${daemon.pid}) on http://${daemon.host}:${daemon.port}/mcp`);
|
|
102
97
|
}
|
|
103
98
|
else {
|
|
104
|
-
|
|
99
|
+
const errorMsg = healthResult.ok
|
|
100
|
+
? `Health check returned status: ${healthResult.data.status}`
|
|
101
|
+
: `${healthResult.error.message} (${healthResult.error.code})`;
|
|
102
|
+
const suggestion = !healthResult.ok && healthResult.error.code === 'TIMEOUT'
|
|
103
|
+
? 'Daemon may be slow to start. Try increasing timeout or check system resources.'
|
|
104
|
+
: !healthResult.ok && healthResult.error.code === 'NETWORK_ERROR'
|
|
105
|
+
? 'Cannot connect to daemon. Check if port is blocked or already in use.'
|
|
106
|
+
: 'Try running: limps start --foreground';
|
|
107
|
+
setError(`${errorMsg}\n${suggestion}\n\nRun with DEBUG=1 for more details.`);
|
|
105
108
|
}
|
|
106
109
|
}
|
|
107
110
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-server.d.ts","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,WAAW,kCAAkC,CAAC;AAE3D,eAAO,MAAM,OAAO;;;iBAGlB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"status-server.d.ts","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,WAAW,kCAAkC,CAAC;AAE3D,eAAO,MAAM,OAAO;;;iBAGlB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AAgED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CA6BrF"}
|
|
@@ -2,43 +2,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { Box, Text } from 'ink';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { request as httpRequest } from 'http';
|
|
6
5
|
import { loadConfig } from '../config.js';
|
|
7
6
|
import { resolveConfigPath } from '../utils/config-resolver.js';
|
|
8
7
|
import { getPidFilePath, getRunningDaemon } from '../pidfile.js';
|
|
9
8
|
import { handleJsonOutput, isJsonMode, outputJson, wrapError } from '../cli/json-output.js';
|
|
9
|
+
import { checkDaemonHealth } from '../utils/http-client.js';
|
|
10
10
|
export const description = 'Show limps HTTP server status';
|
|
11
11
|
export const options = z.object({
|
|
12
12
|
config: z.string().optional().describe('Path to config file'),
|
|
13
13
|
json: z.boolean().optional().describe('Output as JSON'),
|
|
14
14
|
});
|
|
15
|
-
/**
|
|
16
|
-
* Fetch health info from the daemon's /health endpoint.
|
|
17
|
-
*/
|
|
18
|
-
function fetchHealth(host, port) {
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
const req = httpRequest({ hostname: host, port, method: 'GET', path: '/health', timeout: 3000 }, (res) => {
|
|
21
|
-
let body = '';
|
|
22
|
-
res.on('data', (chunk) => {
|
|
23
|
-
body += chunk.toString();
|
|
24
|
-
});
|
|
25
|
-
res.on('end', () => {
|
|
26
|
-
try {
|
|
27
|
-
resolve(JSON.parse(body));
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
resolve(null);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
req.on('error', () => resolve(null));
|
|
35
|
-
req.on('timeout', () => {
|
|
36
|
-
req.destroy();
|
|
37
|
-
resolve(null);
|
|
38
|
-
});
|
|
39
|
-
req.end();
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
15
|
/**
|
|
43
16
|
* Resolve config and gather daemon + health status.
|
|
44
17
|
*/
|
|
@@ -50,17 +23,40 @@ function getServerStatus(opts) {
|
|
|
50
23
|
if (!daemon) {
|
|
51
24
|
return Promise.resolve({ running: false });
|
|
52
25
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
26
|
+
const httpOptions = {
|
|
27
|
+
timeout: 3000,
|
|
28
|
+
retries: 1,
|
|
29
|
+
retryDelay: 500,
|
|
30
|
+
logger: process.env.DEBUG
|
|
31
|
+
? (msg) => console.error(`[limps:http] ${msg}`)
|
|
32
|
+
: undefined,
|
|
33
|
+
};
|
|
34
|
+
return checkDaemonHealth(daemon.host, daemon.port, httpOptions).then((result) => {
|
|
35
|
+
if (result.ok) {
|
|
36
|
+
return {
|
|
37
|
+
running: true,
|
|
38
|
+
pid: daemon.pid,
|
|
39
|
+
host: daemon.host,
|
|
40
|
+
port: daemon.port,
|
|
41
|
+
startedAt: daemon.startedAt,
|
|
42
|
+
uptime: result.data.uptime,
|
|
43
|
+
sessions: result.data.sessions,
|
|
44
|
+
sessionTimeoutMs: result.data.sessionTimeoutMs,
|
|
45
|
+
healthy: result.data.status === 'ok',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return {
|
|
50
|
+
running: true,
|
|
51
|
+
pid: daemon.pid,
|
|
52
|
+
host: daemon.host,
|
|
53
|
+
port: daemon.port,
|
|
54
|
+
startedAt: daemon.startedAt,
|
|
55
|
+
healthy: false,
|
|
56
|
+
healthError: `${result.error.message} (${result.error.code})`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
});
|
|
64
60
|
}
|
|
65
61
|
export default function StatusServerCommand({ options: opts }) {
|
|
66
62
|
const jsonMode = isJsonMode(opts);
|
|
@@ -104,7 +100,7 @@ function StatusDisplay({ opts }) {
|
|
|
104
100
|
return _jsx(Text, { color: "yellow", children: "limps server is not running." });
|
|
105
101
|
}
|
|
106
102
|
const uptimeStr = result.uptime !== undefined ? formatUptime(result.uptime) : 'unknown';
|
|
107
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "limps server is running" }), _jsxs(Text, { children: ["PID: ", result.pid, " | ", result.host, ":", result.port] }), _jsxs(Text, { children: ["Uptime: ", uptimeStr] }), _jsxs(Text, { children: ["Sessions: ", result.sessions ?? 'unknown'] }), result.healthy === false &&
|
|
103
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "limps server is running" }), _jsxs(Text, { children: ["PID: ", result.pid, " | ", result.host, ":", result.port] }), _jsxs(Text, { children: ["Uptime: ", uptimeStr] }), _jsxs(Text, { children: ["Sessions: ", result.sessions ?? 'unknown'] }), result.healthy === false && (_jsxs(Text, { color: "red", children: ["Health check failed", result.healthError ? `: ${result.healthError}` : ''] }))] }));
|
|
108
104
|
}
|
|
109
105
|
function formatUptime(seconds) {
|
|
110
106
|
if (seconds < 60)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-server.js","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status-server.js","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAA0B,MAAM,yBAAyB,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAE3D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CACxD,CAAC,CAAC;AAmBH;;GAEG;AACH,SAAS,eAAe,CAAC,IAA6B;IACpD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAsB;QACrC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,GAAG;QACf,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;YACvB,CAAC,CAAC,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC7D,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9E,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;gBAC1B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;gBAC9B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB;gBAC9C,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;aACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAS;IAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAElC,SAAS,CAAC,GAA6B,EAAE;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,eAAe,CAAC,IAAI,CAAC;qBAClB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACf,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;gBACxD,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,UAAU,CACR,SAAS,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;wBAC1D,IAAI,EAAE,qBAAqB;qBAC5B,CAAC,EACF,CAAC,CACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,IAAI,EAAqC;IAChE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,SAAS,CAAC;aACf,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAElB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAS,KAAK,IAAQ,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAC,IAAI,4CAAiC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,6CAAoC,CAAC;IAClE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,wCAA+B,EAClD,MAAC,IAAI,wBACG,MAAM,CAAC,GAAG,SAAK,MAAM,CAAC,IAAI,OAAG,MAAM,CAAC,IAAI,IACzC,EACP,MAAC,IAAI,2BAAU,SAAS,IAAQ,EAChC,MAAC,IAAI,6BAAY,MAAM,CAAC,QAAQ,IAAI,SAAS,IAAQ,EACpD,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,CAC3B,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,oCACK,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAClE,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP client utilities for daemon health checks.
|
|
3
|
+
* Provides typed error handling, retry logic, and debug logging.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Error codes for HTTP operations.
|
|
7
|
+
*/
|
|
8
|
+
export type HttpErrorCode = 'NETWORK_ERROR' | 'TIMEOUT' | 'NON_200_STATUS' | 'INVALID_RESPONSE';
|
|
9
|
+
/**
|
|
10
|
+
* HTTP error details.
|
|
11
|
+
*/
|
|
12
|
+
export interface HttpError {
|
|
13
|
+
code: HttpErrorCode;
|
|
14
|
+
message: string;
|
|
15
|
+
details?: unknown;
|
|
16
|
+
statusCode?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Result type for HTTP operations (discriminated union).
|
|
20
|
+
*/
|
|
21
|
+
export type HttpResult<T> = {
|
|
22
|
+
ok: true;
|
|
23
|
+
data: T;
|
|
24
|
+
statusCode: number;
|
|
25
|
+
} | {
|
|
26
|
+
ok: false;
|
|
27
|
+
error: HttpError;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Health check response schema.
|
|
31
|
+
*/
|
|
32
|
+
export interface HealthCheckResponse {
|
|
33
|
+
status: string;
|
|
34
|
+
sessions: number;
|
|
35
|
+
uptime: number;
|
|
36
|
+
pid: number;
|
|
37
|
+
sessionTimeoutMs?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* HTTP client configuration options.
|
|
41
|
+
*/
|
|
42
|
+
export interface HttpClientOptions {
|
|
43
|
+
/** Request timeout in milliseconds (default: 3000) */
|
|
44
|
+
timeout?: number;
|
|
45
|
+
/** Number of retry attempts (default: 0) */
|
|
46
|
+
retries?: number;
|
|
47
|
+
/** Delay between retries in milliseconds (default: 500) */
|
|
48
|
+
retryDelay?: number;
|
|
49
|
+
/** Error codes that trigger retries (default: ['NETWORK_ERROR', 'TIMEOUT']) */
|
|
50
|
+
retryOn?: HttpErrorCode[];
|
|
51
|
+
/** Optional logger function for debugging */
|
|
52
|
+
logger?: (msg: string) => void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check daemon health with retry logic and typed error handling.
|
|
56
|
+
*
|
|
57
|
+
* @param host - Daemon host address
|
|
58
|
+
* @param port - Daemon port number
|
|
59
|
+
* @param options - HTTP client options
|
|
60
|
+
* @returns Promise resolving to HttpResult with health data or error details
|
|
61
|
+
*/
|
|
62
|
+
export declare function checkDaemonHealth(host: string, port: number, options?: HttpClientOptions): Promise<HttpResult<HealthCheckResponse>>;
|
|
63
|
+
/**
|
|
64
|
+
* Simple boolean wrapper for daemon health check (backwards compatible).
|
|
65
|
+
*
|
|
66
|
+
* @param host - Daemon host address
|
|
67
|
+
* @param port - Daemon port number
|
|
68
|
+
* @param options - HTTP client options
|
|
69
|
+
* @returns Promise resolving to true if daemon is healthy, false otherwise
|
|
70
|
+
*/
|
|
71
|
+
export declare function isDaemonHealthy(host: string, port: number, options?: HttpClientOptions): Promise<boolean>;
|
|
72
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,SAAS,GACT,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAmID;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAwC1C;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP client utilities for daemon health checks.
|
|
3
|
+
* Provides typed error handling, retry logic, and debug logging.
|
|
4
|
+
*/
|
|
5
|
+
import { request as httpRequest } from 'http';
|
|
6
|
+
/**
|
|
7
|
+
* Validate that a parsed JSON object matches the HealthCheckResponse schema.
|
|
8
|
+
*/
|
|
9
|
+
function validateHealthResponse(data) {
|
|
10
|
+
if (typeof data !== 'object' || data === null) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const obj = data;
|
|
14
|
+
return (typeof obj.status === 'string' &&
|
|
15
|
+
typeof obj.sessions === 'number' &&
|
|
16
|
+
typeof obj.uptime === 'number' &&
|
|
17
|
+
typeof obj.pid === 'number' &&
|
|
18
|
+
(obj.sessionTimeoutMs === undefined || typeof obj.sessionTimeoutMs === 'number'));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Make a single HTTP GET request to the health endpoint.
|
|
22
|
+
*/
|
|
23
|
+
function makeHealthRequest(host, port, timeoutMs, logger) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
const url = `http://${host}:${port}/health`;
|
|
26
|
+
const startTime = Date.now();
|
|
27
|
+
logger?.(`HTTP GET ${url}`);
|
|
28
|
+
const req = httpRequest({
|
|
29
|
+
hostname: host,
|
|
30
|
+
port,
|
|
31
|
+
method: 'GET',
|
|
32
|
+
path: '/health',
|
|
33
|
+
timeout: timeoutMs,
|
|
34
|
+
}, (res) => {
|
|
35
|
+
const statusCode = res.statusCode ?? 0;
|
|
36
|
+
let body = '';
|
|
37
|
+
res.on('data', (chunk) => {
|
|
38
|
+
body += chunk.toString();
|
|
39
|
+
});
|
|
40
|
+
res.on('end', () => {
|
|
41
|
+
const duration = Date.now() - startTime;
|
|
42
|
+
logger?.(`HTTP ${statusCode} in ${duration}ms`);
|
|
43
|
+
if (statusCode !== 200) {
|
|
44
|
+
resolve({
|
|
45
|
+
ok: false,
|
|
46
|
+
error: {
|
|
47
|
+
code: 'NON_200_STATUS',
|
|
48
|
+
message: `Health endpoint returned status ${statusCode}`,
|
|
49
|
+
statusCode,
|
|
50
|
+
details: body,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const data = JSON.parse(body);
|
|
57
|
+
if (!validateHealthResponse(data)) {
|
|
58
|
+
resolve({
|
|
59
|
+
ok: false,
|
|
60
|
+
error: {
|
|
61
|
+
code: 'INVALID_RESPONSE',
|
|
62
|
+
message: 'Health response missing required fields or has invalid types',
|
|
63
|
+
details: data,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
resolve({
|
|
69
|
+
ok: true,
|
|
70
|
+
data,
|
|
71
|
+
statusCode,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
resolve({
|
|
76
|
+
ok: false,
|
|
77
|
+
error: {
|
|
78
|
+
code: 'INVALID_RESPONSE',
|
|
79
|
+
message: 'Failed to parse JSON response',
|
|
80
|
+
details: err instanceof Error ? err.message : String(err),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
req.on('error', (err) => {
|
|
87
|
+
const duration = Date.now() - startTime;
|
|
88
|
+
logger?.(`HTTP error after ${duration}ms: ${err.message}`);
|
|
89
|
+
resolve({
|
|
90
|
+
ok: false,
|
|
91
|
+
error: {
|
|
92
|
+
code: 'NETWORK_ERROR',
|
|
93
|
+
message: err.message,
|
|
94
|
+
details: err,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
req.on('timeout', () => {
|
|
99
|
+
const duration = Date.now() - startTime;
|
|
100
|
+
logger?.(`HTTP timeout after ${duration}ms`);
|
|
101
|
+
req.destroy();
|
|
102
|
+
resolve({
|
|
103
|
+
ok: false,
|
|
104
|
+
error: {
|
|
105
|
+
code: 'TIMEOUT',
|
|
106
|
+
message: `Request timed out after ${timeoutMs}ms`,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
req.end();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check daemon health with retry logic and typed error handling.
|
|
115
|
+
*
|
|
116
|
+
* @param host - Daemon host address
|
|
117
|
+
* @param port - Daemon port number
|
|
118
|
+
* @param options - HTTP client options
|
|
119
|
+
* @returns Promise resolving to HttpResult with health data or error details
|
|
120
|
+
*/
|
|
121
|
+
export async function checkDaemonHealth(host, port, options = {}) {
|
|
122
|
+
const { timeout = 3000, retries = 0, retryDelay = 500, retryOn = ['NETWORK_ERROR', 'TIMEOUT'], logger, } = options;
|
|
123
|
+
let lastResult = null;
|
|
124
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
125
|
+
if (attempt > 0) {
|
|
126
|
+
logger?.(`Retry attempt ${attempt}/${retries} after ${retryDelay}ms delay`);
|
|
127
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
128
|
+
}
|
|
129
|
+
const result = await makeHealthRequest(host, port, timeout, logger);
|
|
130
|
+
if (result.ok) {
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
lastResult = result;
|
|
134
|
+
// Don't retry if error code is not in retryOn list
|
|
135
|
+
if (!retryOn.includes(result.error.code)) {
|
|
136
|
+
logger?.(`Not retrying error code: ${result.error.code}`);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
// Don't retry on last attempt
|
|
140
|
+
if (attempt === retries) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// TypeScript knows lastResult is non-null here because we always enter the loop at least once (attempt = 0)
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
146
|
+
return lastResult;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Simple boolean wrapper for daemon health check (backwards compatible).
|
|
150
|
+
*
|
|
151
|
+
* @param host - Daemon host address
|
|
152
|
+
* @param port - Daemon port number
|
|
153
|
+
* @param options - HTTP client options
|
|
154
|
+
* @returns Promise resolving to true if daemon is healthy, false otherwise
|
|
155
|
+
*/
|
|
156
|
+
export async function isDaemonHealthy(host, port, options = {}) {
|
|
157
|
+
const result = await checkDaemonHealth(host, port, options);
|
|
158
|
+
return result.ok && result.data.status === 'ok';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-mcp.d.ts","sourceRoot":"","sources":["../../../src/commands/config/sync-mcp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,WAAW,8EACqD,CAAC;AAE9E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;iBAsBlB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CA4OhF"}
|