@sudosandwich/limps 3.0.0 → 3.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 +587 -136
- 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 +22 -157
- 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 +26 -23
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status-server.d.ts.map +1 -1
- package/dist/commands/status-server.js +113 -52
- package/dist/commands/status-server.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +3 -2
- package/dist/commands/stop.js.map +1 -1
- package/dist/pidfile.d.ts +30 -4
- package/dist/pidfile.d.ts.map +1 -1
- package/dist/pidfile.js +66 -6
- package/dist/pidfile.js.map +1 -1
- package/dist/server-http.d.ts.map +1 -1
- package/dist/server-http.js +30 -3
- package/dist/server-http.js.map +1 -1
- package/dist/utils/app-paths.d.ts +15 -0
- package/dist/utils/app-paths.d.ts.map +1 -0
- package/dist/utils/app-paths.js +37 -0
- package/dist/utils/app-paths.js.map +1 -0
- package/dist/utils/config-resolver.d.ts +1 -0
- package/dist/utils/config-resolver.d.ts.map +1 -1
- package/dist/utils/config-resolver.js +29 -0
- package/dist/utils/config-resolver.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/dist/utils/port-checker.d.ts +23 -0
- package/dist/utils/port-checker.d.ts.map +1 -0
- package/dist/utils/port-checker.js +56 -0
- package/dist/utils/port-checker.js.map +1 -0
- package/dist/utils/version-state.d.ts.map +1 -1
- package/dist/utils/version-state.js +1 -19
- package/dist/utils/version-state.js.map +1 -1
- 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'),
|
|
@@ -46,7 +30,7 @@ export default function StartCommand({ options: opts }) {
|
|
|
46
30
|
const port = opts.port ?? httpConfig.port;
|
|
47
31
|
const host = opts.host ?? httpConfig.host;
|
|
48
32
|
// Check if already running
|
|
49
|
-
const pidFilePath = getPidFilePath(
|
|
33
|
+
const pidFilePath = getPidFilePath(port);
|
|
50
34
|
const existing = getRunningDaemon(pidFilePath);
|
|
51
35
|
if (existing) {
|
|
52
36
|
setError(`limps daemon already running (PID ${existing.pid} on ${existing.host}:${existing.port}). Run 'limps stop' first.`);
|
|
@@ -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;
|
|
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;AAYxB,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;AA2FD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAiDrF"}
|
|
@@ -2,89 +2,150 @@ 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 {
|
|
6
|
-
import { loadConfig } from '../config.js';
|
|
5
|
+
import { loadConfig, getHttpServerConfig } from '../config.js';
|
|
7
6
|
import { resolveConfigPath } from '../utils/config-resolver.js';
|
|
8
|
-
import { getPidFilePath, getRunningDaemon } from '../pidfile.js';
|
|
7
|
+
import { getPidFilePath, getRunningDaemon, discoverRunningDaemons, } 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
|
+
const HTTP_OPTIONS = {
|
|
16
|
+
timeout: 3000,
|
|
17
|
+
retries: 1,
|
|
18
|
+
retryDelay: 500,
|
|
19
|
+
logger: process.env.DEBUG ? (msg) => console.error(`[limps:http] ${msg}`) : undefined,
|
|
20
|
+
};
|
|
15
21
|
/**
|
|
16
|
-
*
|
|
22
|
+
* Check health for a single daemon and build a StatusResult.
|
|
17
23
|
*/
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
24
|
+
async function getDaemonStatus(daemon) {
|
|
25
|
+
const result = await checkDaemonHealth(daemon.host, daemon.port, HTTP_OPTIONS);
|
|
26
|
+
if (result.ok) {
|
|
27
|
+
return {
|
|
28
|
+
running: true,
|
|
29
|
+
pid: daemon.pid,
|
|
30
|
+
host: daemon.host,
|
|
31
|
+
port: daemon.port,
|
|
32
|
+
startedAt: daemon.startedAt,
|
|
33
|
+
uptime: result.data.uptime,
|
|
34
|
+
sessions: result.data.sessions,
|
|
35
|
+
sessionTimeoutMs: result.data.sessionTimeoutMs,
|
|
36
|
+
healthy: result.data.status === 'ok',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
running: true,
|
|
41
|
+
pid: daemon.pid,
|
|
42
|
+
host: daemon.host,
|
|
43
|
+
port: daemon.port,
|
|
44
|
+
startedAt: daemon.startedAt,
|
|
45
|
+
healthy: false,
|
|
46
|
+
healthError: `${result.error.message} (${result.error.code})`,
|
|
47
|
+
};
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
43
|
-
* Resolve config and gather daemon + health status.
|
|
50
|
+
* Resolve config and gather daemon + health status for a specific project.
|
|
44
51
|
*/
|
|
45
52
|
function getServerStatus(opts) {
|
|
46
53
|
const configPath = resolveConfigPath(opts.config);
|
|
47
54
|
const config = loadConfig(configPath);
|
|
48
|
-
const
|
|
55
|
+
const httpConfig = getHttpServerConfig(config);
|
|
56
|
+
const pidFilePath = getPidFilePath(httpConfig.port);
|
|
49
57
|
const daemon = getRunningDaemon(pidFilePath);
|
|
50
58
|
if (!daemon) {
|
|
51
59
|
return Promise.resolve({ running: false });
|
|
52
60
|
}
|
|
53
|
-
return
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
return getDaemonStatus(daemon);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Discover all running daemons system-wide and gather their status.
|
|
65
|
+
*/
|
|
66
|
+
async function getAllServerStatuses() {
|
|
67
|
+
const daemons = discoverRunningDaemons();
|
|
68
|
+
if (daemons.length === 0) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
return Promise.all(daemons.map(getDaemonStatus));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a config is resolvable without throwing.
|
|
75
|
+
*/
|
|
76
|
+
function hasConfig(configOpt) {
|
|
77
|
+
try {
|
|
78
|
+
resolveConfigPath(configOpt);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
64
84
|
}
|
|
65
85
|
export default function StatusServerCommand({ options: opts }) {
|
|
66
86
|
const jsonMode = isJsonMode(opts);
|
|
87
|
+
const configAvailable = opts.config !== undefined || hasConfig();
|
|
67
88
|
useEffect(() => {
|
|
68
89
|
if (jsonMode) {
|
|
69
90
|
const timer = setTimeout(() => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
if (configAvailable) {
|
|
92
|
+
getServerStatus(opts)
|
|
93
|
+
.then((result) => {
|
|
94
|
+
handleJsonOutput(() => result, 'STATUS_SERVER_ERROR');
|
|
95
|
+
})
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
outputJson(wrapError(err instanceof Error ? err.message : String(err), {
|
|
98
|
+
code: 'STATUS_SERVER_ERROR',
|
|
99
|
+
}), 1);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
getAllServerStatuses()
|
|
104
|
+
.then((results) => {
|
|
105
|
+
handleJsonOutput(() => ({ daemons: results }), 'STATUS_SERVER_ERROR');
|
|
106
|
+
})
|
|
107
|
+
.catch((err) => {
|
|
108
|
+
outputJson(wrapError(err instanceof Error ? err.message : String(err), {
|
|
109
|
+
code: 'STATUS_SERVER_ERROR',
|
|
110
|
+
}), 1);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
79
113
|
}, 0);
|
|
80
114
|
return () => clearTimeout(timer);
|
|
81
115
|
}
|
|
82
116
|
return undefined;
|
|
83
|
-
}, [jsonMode, opts.config]);
|
|
117
|
+
}, [jsonMode, opts.config, configAvailable]);
|
|
84
118
|
if (jsonMode) {
|
|
85
119
|
return null;
|
|
86
120
|
}
|
|
87
|
-
|
|
121
|
+
if (configAvailable) {
|
|
122
|
+
return _jsx(StatusDisplay, { opts: opts });
|
|
123
|
+
}
|
|
124
|
+
return _jsx(AllDaemonsDisplay, {});
|
|
125
|
+
}
|
|
126
|
+
function AllDaemonsDisplay() {
|
|
127
|
+
const [results, setResults] = useState(null);
|
|
128
|
+
const [error, setError] = useState(null);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
getAllServerStatuses()
|
|
131
|
+
.then(setResults)
|
|
132
|
+
.catch((err) => setError(err.message));
|
|
133
|
+
}, []);
|
|
134
|
+
if (error) {
|
|
135
|
+
return _jsxs(Text, { color: "red", children: ["Error: ", error] });
|
|
136
|
+
}
|
|
137
|
+
if (!results) {
|
|
138
|
+
return _jsx(Text, { children: "Scanning for running daemons..." });
|
|
139
|
+
}
|
|
140
|
+
if (results.length === 0) {
|
|
141
|
+
return _jsx(Text, { color: "yellow", children: "No limps daemons running." });
|
|
142
|
+
}
|
|
143
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Text, { children: ["Found ", results.length, " running daemon", results.length > 1 ? 's' : '', ":"] }), results.map((result) => (_jsx(DaemonRow, { result: result }, result.port)))] }));
|
|
144
|
+
}
|
|
145
|
+
function DaemonRow({ result }) {
|
|
146
|
+
const uptimeStr = result.uptime !== undefined ? formatUptime(result.uptime) : 'unknown';
|
|
147
|
+
const healthColor = result.healthy === false ? 'red' : 'green';
|
|
148
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: healthColor, children: [result.host, ":", result.port, " (PID ", result.pid, ")"] }), _jsxs(Text, { children: [' ', "Uptime: ", uptimeStr, " | Sessions: ", result.sessions ?? 'unknown'] }), result.healthy === false && (_jsxs(Text, { color: "red", children: [' ', "Health check failed", result.healthError ? `: ${result.healthError}` : ''] }))] }));
|
|
88
149
|
}
|
|
89
150
|
function StatusDisplay({ opts }) {
|
|
90
151
|
const [result, setResult] = useState(null);
|
|
@@ -104,7 +165,7 @@ function StatusDisplay({ opts }) {
|
|
|
104
165
|
return _jsx(Text, { color: "yellow", children: "limps server is not running." });
|
|
105
166
|
}
|
|
106
167
|
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 &&
|
|
168
|
+
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
169
|
}
|
|
109
170
|
function formatUptime(seconds) {
|
|
110
171
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW,+BAA+B,CAAC;AAExD,eAAO,MAAM,OAAO;;iBAElB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW,+BAA+B,CAAC;AAExD,eAAO,MAAM,OAAO;;iBAElB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CA2E7E"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { Text } from 'ink';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { loadConfig } from '../config.js';
|
|
5
|
+
import { loadConfig, getHttpServerConfig } from '../config.js';
|
|
6
6
|
import { resolveConfigPath } from '../utils/config-resolver.js';
|
|
7
7
|
import { getPidFilePath, getRunningDaemon, removePidFile } from '../pidfile.js';
|
|
8
8
|
export const description = 'Stop the limps HTTP server';
|
|
@@ -18,7 +18,8 @@ export default function StopCommand({ options: opts }) {
|
|
|
18
18
|
try {
|
|
19
19
|
const configPath = resolveConfigPath(opts.config);
|
|
20
20
|
const config = loadConfig(configPath);
|
|
21
|
-
const
|
|
21
|
+
const httpConfig = getHttpServerConfig(config);
|
|
22
|
+
const pidFilePath = getPidFilePath(httpConfig.port);
|
|
22
23
|
const daemon = getRunningDaemon(pidFilePath);
|
|
23
24
|
if (!daemon) {
|
|
24
25
|
setStatus('No running limps daemon found.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.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,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.tsx"],"names":[],"mappings":"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"}
|
package/dist/pidfile.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PID file management for the limps HTTP daemon.
|
|
3
|
+
*
|
|
4
|
+
* PID files are stored in OS-standard application directories:
|
|
5
|
+
* - macOS: ~/Library/Application Support/limps/pids/
|
|
6
|
+
* - Windows: %APPDATA%/limps/pids/
|
|
7
|
+
* - Linux: $XDG_DATA_HOME/limps/pids/ or ~/.local/share/limps/pids/
|
|
8
|
+
*
|
|
9
|
+
* This allows system-wide awareness of which ports are in use.
|
|
3
10
|
*/
|
|
4
11
|
/**
|
|
5
12
|
* Contents of a PID file.
|
|
@@ -9,14 +16,26 @@ export interface PidFileContents {
|
|
|
9
16
|
port: number;
|
|
10
17
|
host: string;
|
|
11
18
|
startedAt: string;
|
|
19
|
+
configPath?: string;
|
|
12
20
|
}
|
|
13
21
|
/**
|
|
14
|
-
* Get the PID
|
|
22
|
+
* Get the system-wide PID directory.
|
|
23
|
+
* Creates the directory if it doesn't exist.
|
|
24
|
+
*
|
|
25
|
+
* @returns Path to the system PID directory
|
|
26
|
+
* @throws Error if directory cannot be created (e.g., permission denied, read-only filesystem)
|
|
27
|
+
*/
|
|
28
|
+
export declare function getSystemPidDir(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the PID file path for a given port.
|
|
15
31
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
32
|
+
* PID files are stored system-wide by port number to prevent
|
|
33
|
+
* duplicate daemons on the same port across different projects.
|
|
34
|
+
*
|
|
35
|
+
* @param port - The HTTP server port
|
|
36
|
+
* @returns Path to the PID file (e.g., ~/Library/Application Support/limps/pids/limps-4269.pid)
|
|
18
37
|
*/
|
|
19
|
-
export declare function getPidFilePath(
|
|
38
|
+
export declare function getPidFilePath(port: number): string;
|
|
20
39
|
/**
|
|
21
40
|
* Write a PID file.
|
|
22
41
|
*
|
|
@@ -52,4 +71,11 @@ export declare function isProcessRunning(pid: number): boolean;
|
|
|
52
71
|
* @returns PID file contents if daemon is running, null otherwise
|
|
53
72
|
*/
|
|
54
73
|
export declare function getRunningDaemon(pidFilePath: string): PidFileContents | null;
|
|
74
|
+
/**
|
|
75
|
+
* Scan the system PID directory and return all running daemons.
|
|
76
|
+
* Cleans up stale PID files automatically.
|
|
77
|
+
*
|
|
78
|
+
* @returns Array of PID file contents for all running daemons
|
|
79
|
+
*/
|
|
80
|
+
export declare function discoverRunningDaemons(): PidFileContents[];
|
|
55
81
|
//# sourceMappingURL=pidfile.d.ts.map
|
package/dist/pidfile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pidfile.d.ts","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pidfile.d.ts","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAGjF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsBvE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQvD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQrD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAW5E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAuB1D"}
|
package/dist/pidfile.js
CHANGED
|
@@ -1,16 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PID file management for the limps HTTP daemon.
|
|
3
|
+
*
|
|
4
|
+
* PID files are stored in OS-standard application directories:
|
|
5
|
+
* - macOS: ~/Library/Application Support/limps/pids/
|
|
6
|
+
* - Windows: %APPDATA%/limps/pids/
|
|
7
|
+
* - Linux: $XDG_DATA_HOME/limps/pids/ or ~/.local/share/limps/pids/
|
|
8
|
+
*
|
|
9
|
+
* This allows system-wide awareness of which ports are in use.
|
|
3
10
|
*/
|
|
4
|
-
import { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync } from 'fs';
|
|
11
|
+
import { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync, readdirSync } from 'fs';
|
|
5
12
|
import { dirname, join } from 'path';
|
|
13
|
+
import { getAppDataPath } from './utils/app-paths.js';
|
|
6
14
|
/**
|
|
7
|
-
* Get the PID
|
|
15
|
+
* Get the system-wide PID directory.
|
|
16
|
+
* Creates the directory if it doesn't exist.
|
|
8
17
|
*
|
|
9
|
-
* @
|
|
10
|
-
* @
|
|
18
|
+
* @returns Path to the system PID directory
|
|
19
|
+
* @throws Error if directory cannot be created (e.g., permission denied, read-only filesystem)
|
|
11
20
|
*/
|
|
12
|
-
export function
|
|
13
|
-
|
|
21
|
+
export function getSystemPidDir() {
|
|
22
|
+
const pidDir = join(getAppDataPath(), 'pids');
|
|
23
|
+
if (!existsSync(pidDir)) {
|
|
24
|
+
try {
|
|
25
|
+
mkdirSync(pidDir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
throw new Error(`Failed to create PID directory at ${pidDir}: ${message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return pidDir;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the PID file path for a given port.
|
|
36
|
+
*
|
|
37
|
+
* PID files are stored system-wide by port number to prevent
|
|
38
|
+
* duplicate daemons on the same port across different projects.
|
|
39
|
+
*
|
|
40
|
+
* @param port - The HTTP server port
|
|
41
|
+
* @returns Path to the PID file (e.g., ~/Library/Application Support/limps/pids/limps-4269.pid)
|
|
42
|
+
*/
|
|
43
|
+
export function getPidFilePath(port) {
|
|
44
|
+
const systemPidDir = getSystemPidDir();
|
|
45
|
+
return join(systemPidDir, `limps-${port}.pid`);
|
|
14
46
|
}
|
|
15
47
|
/**
|
|
16
48
|
* Write a PID file.
|
|
@@ -100,4 +132,32 @@ export function getRunningDaemon(pidFilePath) {
|
|
|
100
132
|
}
|
|
101
133
|
return contents;
|
|
102
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Scan the system PID directory and return all running daemons.
|
|
137
|
+
* Cleans up stale PID files automatically.
|
|
138
|
+
*
|
|
139
|
+
* @returns Array of PID file contents for all running daemons
|
|
140
|
+
*/
|
|
141
|
+
export function discoverRunningDaemons() {
|
|
142
|
+
const pidDir = getSystemPidDir();
|
|
143
|
+
const results = [];
|
|
144
|
+
let entries;
|
|
145
|
+
try {
|
|
146
|
+
entries = readdirSync(pidDir);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return results;
|
|
150
|
+
}
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
if (!entry.startsWith('limps-') || !entry.endsWith('.pid')) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const filePath = join(pidDir, entry);
|
|
156
|
+
const daemon = getRunningDaemon(filePath);
|
|
157
|
+
if (daemon) {
|
|
158
|
+
results.push(daemon);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
103
163
|
//# sourceMappingURL=pidfile.js.map
|
package/dist/pidfile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pidfile.js","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pidfile.js","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"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"}
|