@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.
Files changed (64) hide show
  1. package/README.md +587 -136
  2. package/dist/cli/config-cmd.d.ts +4 -17
  3. package/dist/cli/config-cmd.d.ts.map +1 -1
  4. package/dist/cli/config-cmd.js +22 -157
  5. package/dist/cli/config-cmd.js.map +1 -1
  6. package/dist/cli/init-project.d.ts.map +1 -1
  7. package/dist/cli/init-project.js +15 -33
  8. package/dist/cli/init-project.js.map +1 -1
  9. package/dist/cli/mcp-client-adapter.d.ts +17 -48
  10. package/dist/cli/mcp-client-adapter.d.ts.map +1 -1
  11. package/dist/cli/mcp-client-adapter.js +29 -194
  12. package/dist/cli/mcp-client-adapter.js.map +1 -1
  13. package/dist/cli/mcp-clients.d.ts +2 -40
  14. package/dist/cli/mcp-clients.d.ts.map +1 -1
  15. package/dist/cli/mcp-clients.js +31 -91
  16. package/dist/cli/mcp-clients.js.map +1 -1
  17. package/dist/commands/config/index.js +1 -1
  18. package/dist/commands/config/index.js.map +1 -1
  19. package/dist/commands/config/{sync-mcp.d.ts → print.d.ts} +2 -6
  20. package/dist/commands/config/print.d.ts.map +1 -0
  21. package/dist/commands/config/print.js +51 -0
  22. package/dist/commands/config/print.js.map +1 -0
  23. package/dist/commands/index.d.ts.map +1 -1
  24. package/dist/commands/index.js +1 -1
  25. package/dist/commands/index.js.map +1 -1
  26. package/dist/commands/start.d.ts.map +1 -1
  27. package/dist/commands/start.js +26 -23
  28. package/dist/commands/start.js.map +1 -1
  29. package/dist/commands/status-server.d.ts.map +1 -1
  30. package/dist/commands/status-server.js +113 -52
  31. package/dist/commands/status-server.js.map +1 -1
  32. package/dist/commands/stop.d.ts.map +1 -1
  33. package/dist/commands/stop.js +3 -2
  34. package/dist/commands/stop.js.map +1 -1
  35. package/dist/pidfile.d.ts +30 -4
  36. package/dist/pidfile.d.ts.map +1 -1
  37. package/dist/pidfile.js +66 -6
  38. package/dist/pidfile.js.map +1 -1
  39. package/dist/server-http.d.ts.map +1 -1
  40. package/dist/server-http.js +30 -3
  41. package/dist/server-http.js.map +1 -1
  42. package/dist/utils/app-paths.d.ts +15 -0
  43. package/dist/utils/app-paths.d.ts.map +1 -0
  44. package/dist/utils/app-paths.js +37 -0
  45. package/dist/utils/app-paths.js.map +1 -0
  46. package/dist/utils/config-resolver.d.ts +1 -0
  47. package/dist/utils/config-resolver.d.ts.map +1 -1
  48. package/dist/utils/config-resolver.js +29 -0
  49. package/dist/utils/config-resolver.js.map +1 -1
  50. package/dist/utils/http-client.d.ts +72 -0
  51. package/dist/utils/http-client.d.ts.map +1 -0
  52. package/dist/utils/http-client.js +160 -0
  53. package/dist/utils/http-client.js.map +1 -0
  54. package/dist/utils/port-checker.d.ts +23 -0
  55. package/dist/utils/port-checker.d.ts.map +1 -0
  56. package/dist/utils/port-checker.js +56 -0
  57. package/dist/utils/port-checker.js.map +1 -0
  58. package/dist/utils/version-state.d.ts.map +1 -1
  59. package/dist/utils/version-state.js +1 -19
  60. package/dist/utils/version-state.js.map +1 -1
  61. package/package.json +1 -1
  62. package/dist/commands/config/sync-mcp.d.ts.map +0 -1
  63. package/dist/commands/config/sync-mcp.js +0 -232
  64. package/dist/commands/config/sync-mcp.js.map +0 -1
@@ -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: "Commands:" }), '\n', ' ', "serve", ' ', "Start the MCP server", '\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', ' ', "reindex", ' ', "Rebuild the document index", '\n', ' ', "repair-plans", ' ', "Repair plan frontmatter", '\n', ' ', "health", ' ', "Run plan health checks", '\n', ' ', "proposals", ' ', "List and apply update proposals", '\n', ' ', "status", ' ', "Show plan progress", '\n', ' ', "version", ' ', "Show version information", '\n', ' ', "config", ' ', "Manage project configuration", '\n', ' ', "graph", ' ', "Knowledge graph commands", '\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."] }));
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,0BAAiB,EAClC,IAAI,EACJ,IAAI,WAAO,WAAW,0BAAsB,IAAI,EAChD,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,aAAS,SAAS,gCAA4B,IAAI,EACtD,IAAI,kBAAc,IAAI,6BAAyB,IAAI,EACnD,IAAI,YAAQ,UAAU,4BAAwB,IAAI,EAClD,IAAI,eAAW,OAAO,qCAAiC,IAAI,EAC3D,IAAI,YAAQ,UAAU,wBAAoB,IAAI,EAC9C,IAAI,aAAS,UAAU,8BAA0B,IAAI,EACrD,IAAI,YAAQ,UAAU,kCAA8B,IAAI,EACxD,IAAI,WAAO,WAAW,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
+ {"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;AA2BxB,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,CAyG9E"}
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"}
@@ -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(config.dataPath);
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 checkDaemonHealth(daemon.host, daemon.port, 500);
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 that the daemon is healthy
99
- const isHealthy = await checkDaemonHealth(daemon.host, daemon.port, 1000);
100
- if (isHealthy) {
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
- setError('Daemon started but is not responding to health checks. Check logs or try: limps start --foreground');
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":"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"}
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,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAEzD,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,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC9D,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAS;IAC3D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;gBAE1C,2BAA2B;gBAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CACN,qCAAqC,QAAQ,CAAC,GAAG,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,4BAA4B,CACnH,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,2CAA2C;oBAC3C,SAAS,CAAC,wCAAwC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC;oBACtE,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;oBAClC,SAAS,CAAC,uCAAuC,IAAI,IAAI,IAAI,aAAa,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;oBAE1F,wEAAwE;oBACxE,uCAAuC;oBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAClC,MAAM,QAAQ,GAAG,GAAS,EAAE;4BAC1B,cAAc,EAAE;iCACb,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;iCACrB,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC5B,CAAC,CAAC;wBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAClC,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,qCAAqC;oBACrC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;oBACtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;oBAEhE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;wBAC7D,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,QAAQ;qBAChB,CAAC,CAAC;oBACH,KAAK,CAAC,KAAK,EAAE,CAAC;oBAEd,iCAAiC;oBACjC,MAAM,WAAW,GAAsB;wBACrC,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,CAAC;wBACV,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;4BACvB,CAAC,CAAC,CAAC,GAAG,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;4BACrD,CAAC,CAAC,SAAS;qBACd,CAAC;oBAEF,gDAAgD;oBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC;oBACrB,MAAM,YAAY,GAAG,GAAG,CAAC;oBACzB,IAAI,MAAM,GAAG,IAAI,CAAC;oBAElB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;wBACxC,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;wBACvC,IAAI,MAAM,EAAE,CAAC;4BACX,uDAAuD;4BACvD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;4BAC/E,IAAI,SAAS;gCAAE,MAAM;wBACvB,CAAC;wBACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;oBAC1E,CAAC;oBAED,IAAI,MAAM,EAAE,CAAC;wBACX,kDAAkD;wBAClD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;4BACrE,GAAG,WAAW;4BACd,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;wBAEH,IAAI,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;4BACzD,SAAS,CACP,6BAA6B,MAAM,CAAC,GAAG,eAAe,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CACvF,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE;gCAC9B,CAAC,CAAC,iCAAiC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;gCAC7D,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;4BAEjE,MAAM,UAAU,GACd,CAAC,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;gCACvD,CAAC,CAAC,gFAAgF;gCAClF,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe;oCAC/D,CAAC,CAAC,uEAAuE;oCACzE,CAAC,CAAC,uCAAuC,CAAC;4BAEhD,QAAQ,CAAC,GAAG,QAAQ,KAAK,UAAU,wCAAwC,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,QAAQ,CACN,8EAA8E,CAC/E,CAAC;oBACJ,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,GAAG,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAS,KAAK,IAAQ,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,MAAM,GAAQ,CAAC;IAC7C,CAAC;IAED,OAAO,KAAC,IAAI,cAAE,MAAM,GAAQ,CAAC;AAC/B,CAAC"}
@@ -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;AA8ED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CA6BrF"}
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 { request as httpRequest } from 'http';
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
- * Fetch health info from the daemon's /health endpoint.
22
+ * Check health for a single daemon and build a StatusResult.
17
23
  */
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
- });
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 pidFilePath = getPidFilePath(config.dataPath);
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 fetchHealth(daemon.host, daemon.port).then((health) => ({
54
- running: true,
55
- pid: daemon.pid,
56
- host: daemon.host,
57
- port: daemon.port,
58
- startedAt: daemon.startedAt,
59
- uptime: health?.uptime,
60
- sessions: health?.sessions,
61
- sessionTimeoutMs: health?.sessionTimeoutMs,
62
- healthy: health?.status === 'ok',
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
- getServerStatus(opts)
71
- .then((result) => {
72
- handleJsonOutput(() => result, 'STATUS_SERVER_ERROR');
73
- })
74
- .catch((err) => {
75
- outputJson(wrapError(err instanceof Error ? err.message : String(err), {
76
- code: 'STATUS_SERVER_ERROR',
77
- }), 1);
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
- return _jsx(StatusDisplay, { opts: opts });
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 && _jsx(Text, { color: "red", children: "Health check failed" })] }));
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":"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"}
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,CA0E7E"}
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"}
@@ -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 pidFilePath = getPidFilePath(config.dataPath);
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;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC9D,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAS;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,GAA0C,IAAI,CAAC;QAChE,IAAI,SAAS,GAAyC,IAAI,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpC,SAAS,CAAC,qCAAqC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;gBACvB,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC3B,SAAS,CAAC,eAAe,MAAM,CAAC,GAAG,yCAAyC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,0CAA0C;YAC1C,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC5B,+BAA+B;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;oBACrB,IAAI,aAAa;wBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;oBAChD,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBACvC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,6BAA6B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,2BAA2B;YAC3B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,IAAI,aAAa;oBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC5B,6BAA6B;oBAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,kCAAkC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9D,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;oBACf,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,6BAA6B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,GAAS,EAAE;YAChB,IAAI,aAAa;gBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,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,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,MAAM,GAAQ,CAAC;AAC7C,CAAC"}
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,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC9D,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAS;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,GAA0C,IAAI,CAAC;QAChE,IAAI,SAAS,GAAyC,IAAI,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpC,SAAS,CAAC,qCAAqC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;gBACvB,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC3B,SAAS,CAAC,eAAe,MAAM,CAAC,GAAG,yCAAyC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,0CAA0C;YAC1C,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC5B,+BAA+B;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;oBACrB,IAAI,aAAa;wBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;oBAChD,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBACvC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,6BAA6B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,2BAA2B;YAC3B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,IAAI,aAAa;oBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC5B,6BAA6B;oBAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,kCAAkC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9D,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;oBACf,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,CAAC,6BAA6B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,GAAS,EAAE;YAChB,IAAI,aAAa;gBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,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,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,MAAM,GAAQ,CAAC;AAC7C,CAAC"}
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 file path for a given data directory.
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
- * @param dataPath - The data directory from config
17
- * @returns Path to the PID file (joins dataPath with 'limps.pid')
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(dataPath: string): string;
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
@@ -1 +1 @@
1
- {"version":3,"file":"pidfile.d.ts","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;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;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;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"}
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 file path for a given data directory.
15
+ * Get the system-wide PID directory.
16
+ * Creates the directory if it doesn't exist.
8
17
  *
9
- * @param dataPath - The data directory from config
10
- * @returns Path to the PID file (joins dataPath with 'limps.pid')
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 getPidFilePath(dataPath) {
13
- return join(dataPath, 'limps.pid');
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
@@ -1 +1 @@
1
- {"version":3,"file":"pidfile.js","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAYrC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,QAAyB;IACzE,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAClD,+BAA+B;QAC/B,IACE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YACxB,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YACpC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,iFAAiF;QACjF,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;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,+BAA+B;QAC/B,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"pidfile.js","sourceRoot":"","sources":["../src/pidfile.ts"],"names":[],"mappings":"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"}