@sudosandwich/limps 2.13.3 → 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.
Files changed (254) hide show
  1. package/README.md +168 -115
  2. package/dist/cli/config-cmd.d.ts +22 -194
  3. package/dist/cli/config-cmd.d.ts.map +1 -1
  4. package/dist/cli/config-cmd.js +92 -981
  5. package/dist/cli/config-cmd.js.map +1 -1
  6. package/dist/cli/index.d.ts +1 -2
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +2 -3
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/init-project.d.ts +7 -3
  11. package/dist/cli/init-project.d.ts.map +1 -1
  12. package/dist/cli/init-project.js +43 -51
  13. package/dist/cli/init-project.js.map +1 -1
  14. package/dist/cli/mcp-client-adapter.d.ts +17 -48
  15. package/dist/cli/mcp-client-adapter.d.ts.map +1 -1
  16. package/dist/cli/mcp-client-adapter.js +29 -194
  17. package/dist/cli/mcp-client-adapter.js.map +1 -1
  18. package/dist/cli/mcp-clients.d.ts +2 -40
  19. package/dist/cli/mcp-clients.d.ts.map +1 -1
  20. package/dist/cli/mcp-clients.js +31 -92
  21. package/dist/cli/mcp-clients.js.map +1 -1
  22. package/dist/cli.js +18 -8
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/config/index.d.ts.map +1 -1
  25. package/dist/commands/config/index.js +3 -12
  26. package/dist/commands/config/index.js.map +1 -1
  27. package/dist/commands/config/print.d.ts +20 -0
  28. package/dist/commands/config/print.d.ts.map +1 -0
  29. package/dist/commands/config/print.js +51 -0
  30. package/dist/commands/config/print.js.map +1 -0
  31. package/dist/commands/config/update.d.ts +3 -4
  32. package/dist/commands/config/update.d.ts.map +1 -1
  33. package/dist/commands/config/update.js +6 -5
  34. package/dist/commands/config/update.js.map +1 -1
  35. package/dist/commands/config/upgrade.d.ts +1 -1
  36. package/dist/commands/config/upgrade.js +2 -2
  37. package/dist/commands/config/upgrade.js.map +1 -1
  38. package/dist/commands/graph/check.d.ts +0 -1
  39. package/dist/commands/graph/check.d.ts.map +1 -1
  40. package/dist/commands/graph/check.js +4 -13
  41. package/dist/commands/graph/check.js.map +1 -1
  42. package/dist/commands/graph/entity.d.ts +0 -1
  43. package/dist/commands/graph/entity.d.ts.map +1 -1
  44. package/dist/commands/graph/entity.js +4 -13
  45. package/dist/commands/graph/entity.js.map +1 -1
  46. package/dist/commands/graph/health.d.ts +0 -1
  47. package/dist/commands/graph/health.d.ts.map +1 -1
  48. package/dist/commands/graph/health.js +4 -13
  49. package/dist/commands/graph/health.js.map +1 -1
  50. package/dist/commands/graph/index.d.ts.map +1 -1
  51. package/dist/commands/graph/index.js +1 -3
  52. package/dist/commands/graph/index.js.map +1 -1
  53. package/dist/commands/graph/overlap.d.ts +0 -1
  54. package/dist/commands/graph/overlap.d.ts.map +1 -1
  55. package/dist/commands/graph/overlap.js +3 -9
  56. package/dist/commands/graph/overlap.js.map +1 -1
  57. package/dist/commands/graph/reindex.d.ts +0 -1
  58. package/dist/commands/graph/reindex.d.ts.map +1 -1
  59. package/dist/commands/graph/reindex.js +3 -9
  60. package/dist/commands/graph/reindex.js.map +1 -1
  61. package/dist/commands/graph/search.d.ts +0 -1
  62. package/dist/commands/graph/search.d.ts.map +1 -1
  63. package/dist/commands/graph/search.js +3 -9
  64. package/dist/commands/graph/search.js.map +1 -1
  65. package/dist/commands/graph/suggest.d.ts +0 -1
  66. package/dist/commands/graph/suggest.d.ts.map +1 -1
  67. package/dist/commands/graph/suggest.js +4 -13
  68. package/dist/commands/graph/suggest.js.map +1 -1
  69. package/dist/commands/graph/trace.d.ts +0 -1
  70. package/dist/commands/graph/trace.d.ts.map +1 -1
  71. package/dist/commands/graph/trace.js +3 -9
  72. package/dist/commands/graph/trace.js.map +1 -1
  73. package/dist/commands/graph/watch.d.ts +0 -1
  74. package/dist/commands/graph/watch.d.ts.map +1 -1
  75. package/dist/commands/graph/watch.js +2 -5
  76. package/dist/commands/graph/watch.js.map +1 -1
  77. package/dist/commands/health/check.d.ts +0 -1
  78. package/dist/commands/health/check.d.ts.map +1 -1
  79. package/dist/commands/health/check.js +3 -9
  80. package/dist/commands/health/check.js.map +1 -1
  81. package/dist/commands/health/index.d.ts.map +1 -1
  82. package/dist/commands/health/index.js +1 -3
  83. package/dist/commands/health/index.js.map +1 -1
  84. package/dist/commands/health/inference.d.ts +0 -1
  85. package/dist/commands/health/inference.d.ts.map +1 -1
  86. package/dist/commands/health/inference.js +4 -10
  87. package/dist/commands/health/inference.js.map +1 -1
  88. package/dist/commands/health/staleness.d.ts +0 -1
  89. package/dist/commands/health/staleness.d.ts.map +1 -1
  90. package/dist/commands/health/staleness.js +3 -9
  91. package/dist/commands/health/staleness.js.map +1 -1
  92. package/dist/commands/index.d.ts.map +1 -1
  93. package/dist/commands/index.js +1 -1
  94. package/dist/commands/index.js.map +1 -1
  95. package/dist/commands/init.d.ts +4 -6
  96. package/dist/commands/init.d.ts.map +1 -1
  97. package/dist/commands/init.js +8 -8
  98. package/dist/commands/init.js.map +1 -1
  99. package/dist/commands/list-agents.d.ts +0 -1
  100. package/dist/commands/list-agents.d.ts.map +1 -1
  101. package/dist/commands/list-agents.js +6 -17
  102. package/dist/commands/list-agents.js.map +1 -1
  103. package/dist/commands/list-plans.d.ts +0 -1
  104. package/dist/commands/list-plans.d.ts.map +1 -1
  105. package/dist/commands/list-plans.js +6 -12
  106. package/dist/commands/list-plans.js.map +1 -1
  107. package/dist/commands/next-task.d.ts +0 -1
  108. package/dist/commands/next-task.d.ts.map +1 -1
  109. package/dist/commands/next-task.js +7 -18
  110. package/dist/commands/next-task.js.map +1 -1
  111. package/dist/commands/proposals/apply-safe.d.ts +0 -1
  112. package/dist/commands/proposals/apply-safe.d.ts.map +1 -1
  113. package/dist/commands/proposals/apply-safe.js +4 -13
  114. package/dist/commands/proposals/apply-safe.js.map +1 -1
  115. package/dist/commands/proposals/apply.d.ts +0 -1
  116. package/dist/commands/proposals/apply.d.ts.map +1 -1
  117. package/dist/commands/proposals/apply.js +3 -9
  118. package/dist/commands/proposals/apply.js.map +1 -1
  119. package/dist/commands/proposals/index.d.ts +0 -1
  120. package/dist/commands/proposals/index.d.ts.map +1 -1
  121. package/dist/commands/proposals/index.js +4 -10
  122. package/dist/commands/proposals/index.js.map +1 -1
  123. package/dist/commands/reindex.d.ts +0 -1
  124. package/dist/commands/reindex.d.ts.map +1 -1
  125. package/dist/commands/reindex.js +4 -8
  126. package/dist/commands/reindex.js.map +1 -1
  127. package/dist/commands/repair-plans.d.ts +0 -1
  128. package/dist/commands/repair-plans.d.ts.map +1 -1
  129. package/dist/commands/repair-plans.js +3 -6
  130. package/dist/commands/repair-plans.js.map +1 -1
  131. package/dist/commands/reset.d.ts +13 -0
  132. package/dist/commands/reset.d.ts.map +1 -0
  133. package/dist/commands/reset.js +30 -0
  134. package/dist/commands/reset.js.map +1 -0
  135. package/dist/commands/score-all.d.ts +0 -1
  136. package/dist/commands/score-all.d.ts.map +1 -1
  137. package/dist/commands/score-all.js +7 -18
  138. package/dist/commands/score-all.js.map +1 -1
  139. package/dist/commands/score-task.d.ts +0 -1
  140. package/dist/commands/score-task.d.ts.map +1 -1
  141. package/dist/commands/score-task.js +7 -22
  142. package/dist/commands/score-task.js.map +1 -1
  143. package/dist/commands/start.d.ts +15 -0
  144. package/dist/commands/start.d.ts.map +1 -0
  145. package/dist/commands/start.js +131 -0
  146. package/dist/commands/start.js.map +1 -0
  147. package/dist/commands/status-server.d.ts +13 -0
  148. package/dist/commands/status-server.d.ts.map +1 -0
  149. package/dist/commands/status-server.js +114 -0
  150. package/dist/commands/status-server.js.map +1 -0
  151. package/dist/commands/status.d.ts +0 -1
  152. package/dist/commands/status.d.ts.map +1 -1
  153. package/dist/commands/status.js +3 -9
  154. package/dist/commands/status.js.map +1 -1
  155. package/dist/commands/stop.d.ts +12 -0
  156. package/dist/commands/stop.d.ts.map +1 -0
  157. package/dist/commands/stop.js +87 -0
  158. package/dist/commands/stop.js.map +1 -0
  159. package/dist/config.d.ts +34 -0
  160. package/dist/config.d.ts.map +1 -1
  161. package/dist/config.js +101 -0
  162. package/dist/config.js.map +1 -1
  163. package/dist/pidfile.d.ts +55 -0
  164. package/dist/pidfile.d.ts.map +1 -0
  165. package/dist/pidfile.js +103 -0
  166. package/dist/pidfile.js.map +1 -0
  167. package/dist/server-http-entry.d.ts +8 -0
  168. package/dist/server-http-entry.d.ts.map +1 -0
  169. package/dist/server-http-entry.js +42 -0
  170. package/dist/server-http-entry.js.map +1 -0
  171. package/dist/server-http.d.ts +19 -0
  172. package/dist/server-http.d.ts.map +1 -0
  173. package/dist/server-http.js +292 -0
  174. package/dist/server-http.js.map +1 -0
  175. package/dist/server-main.d.ts +3 -3
  176. package/dist/server-main.d.ts.map +1 -1
  177. package/dist/server-main.js +17 -111
  178. package/dist/server-main.js.map +1 -1
  179. package/dist/server-shared.d.ts +30 -0
  180. package/dist/server-shared.d.ts.map +1 -0
  181. package/dist/server-shared.js +110 -0
  182. package/dist/server-shared.js.map +1 -0
  183. package/dist/server.d.ts +2 -1
  184. package/dist/server.d.ts.map +1 -1
  185. package/dist/server.js +4 -3
  186. package/dist/server.js.map +1 -1
  187. package/dist/utils/cli-help.d.ts +0 -2
  188. package/dist/utils/cli-help.d.ts.map +1 -1
  189. package/dist/utils/cli-help.js +0 -6
  190. package/dist/utils/cli-help.js.map +1 -1
  191. package/dist/utils/config-resolver.d.ts +1 -11
  192. package/dist/utils/config-resolver.d.ts.map +1 -1
  193. package/dist/utils/config-resolver.js +2 -34
  194. package/dist/utils/config-resolver.js.map +1 -1
  195. package/dist/utils/http-client.d.ts +72 -0
  196. package/dist/utils/http-client.d.ts.map +1 -0
  197. package/dist/utils/http-client.js +160 -0
  198. package/dist/utils/http-client.js.map +1 -0
  199. package/dist/utils/index.d.ts +0 -1
  200. package/dist/utils/index.d.ts.map +1 -1
  201. package/dist/utils/index.js +0 -1
  202. package/dist/utils/index.js.map +1 -1
  203. package/dist/utils/rate-limiter.d.ts +18 -0
  204. package/dist/utils/rate-limiter.d.ts.map +1 -0
  205. package/dist/utils/rate-limiter.js +60 -0
  206. package/dist/utils/rate-limiter.js.map +1 -0
  207. package/dist/utils/version-state.d.ts.map +1 -1
  208. package/dist/utils/version-state.js +20 -4
  209. package/dist/utils/version-state.js.map +1 -1
  210. package/package.json +1 -1
  211. package/dist/cli/registry.d.ts +0 -94
  212. package/dist/cli/registry.d.ts.map +0 -1
  213. package/dist/cli/registry.js +0 -150
  214. package/dist/cli/registry.js.map +0 -1
  215. package/dist/commands/config/add.d.ts +0 -9
  216. package/dist/commands/config/add.d.ts.map +0 -1
  217. package/dist/commands/config/add.js +0 -20
  218. package/dist/commands/config/add.js.map +0 -1
  219. package/dist/commands/config/discover.d.ts +0 -3
  220. package/dist/commands/config/discover.d.ts.map +0 -1
  221. package/dist/commands/config/discover.js +0 -9
  222. package/dist/commands/config/discover.js.map +0 -1
  223. package/dist/commands/config/list.d.ts +0 -11
  224. package/dist/commands/config/list.d.ts.map +0 -1
  225. package/dist/commands/config/list.js +0 -28
  226. package/dist/commands/config/list.js.map +0 -1
  227. package/dist/commands/config/migrate.d.ts +0 -3
  228. package/dist/commands/config/migrate.d.ts.map +0 -1
  229. package/dist/commands/config/migrate.js +0 -14
  230. package/dist/commands/config/migrate.js.map +0 -1
  231. package/dist/commands/config/remove.d.ts +0 -9
  232. package/dist/commands/config/remove.d.ts.map +0 -1
  233. package/dist/commands/config/remove.js +0 -17
  234. package/dist/commands/config/remove.js.map +0 -1
  235. package/dist/commands/config/set.d.ts +0 -9
  236. package/dist/commands/config/set.d.ts.map +0 -1
  237. package/dist/commands/config/set.js +0 -17
  238. package/dist/commands/config/set.js.map +0 -1
  239. package/dist/commands/config/sync-mcp.d.ts +0 -26
  240. package/dist/commands/config/sync-mcp.d.ts.map +0 -1
  241. package/dist/commands/config/sync-mcp.js +0 -259
  242. package/dist/commands/config/sync-mcp.js.map +0 -1
  243. package/dist/commands/config/use.d.ts +0 -9
  244. package/dist/commands/config/use.d.ts.map +0 -1
  245. package/dist/commands/config/use.js +0 -17
  246. package/dist/commands/config/use.js.map +0 -1
  247. package/dist/commands/serve.d.ts +0 -18
  248. package/dist/commands/serve.d.ts.map +0 -1
  249. package/dist/commands/serve.js +0 -29
  250. package/dist/commands/serve.js.map +0 -1
  251. package/dist/utils/os-paths.d.ts +0 -34
  252. package/dist/utils/os-paths.d.ts.map +0 -1
  253. package/dist/utils/os-paths.js +0 -60
  254. package/dist/utils/os-paths.js.map +0 -1
@@ -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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AAuD9C;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAa;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAChC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;QAC3B,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CACjF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,IAAY,EACZ,SAAiB,EACjB,MAA8B;IAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,SAAS,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAE5B,MAAM,GAAG,GAAG,WAAW,CACrB;YACE,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;SACnB,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;YACvC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACxC,MAAM,EAAE,CAAC,QAAQ,UAAU,OAAO,QAAQ,IAAI,CAAC,CAAC;gBAEhD,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvB,OAAO,CAAC;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE;4BACL,IAAI,EAAE,gBAAgB;4BACtB,OAAO,EAAE,mCAAmC,UAAU,EAAE;4BACxD,UAAU;4BACV,OAAO,EAAE,IAAI;yBACd;qBACF,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;oBAEzC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAClC,OAAO,CAAC;4BACN,EAAE,EAAE,KAAK;4BACT,KAAK,EAAE;gCACL,IAAI,EAAE,kBAAkB;gCACxB,OAAO,EAAE,8DAA8D;gCACvE,OAAO,EAAE,IAAI;6BACd;yBACF,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC;wBACN,EAAE,EAAE,IAAI;wBACR,IAAI;wBACJ,UAAU;qBACX,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE;4BACL,IAAI,EAAE,kBAAkB;4BACxB,OAAO,EAAE,+BAA+B;4BACxC,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBAC1D;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,EAAE,CAAC,oBAAoB,QAAQ,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG;iBACb;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,EAAE,CAAC,sBAAsB,QAAQ,IAAI,CAAC,CAAC;YAC7C,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,2BAA2B,SAAS,IAAI;iBAClD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,IAAY,EACZ,UAA6B,EAAE;IAE/B,MAAM,EACJ,OAAO,GAAG,IAAI,EACd,OAAO,GAAG,CAAC,EACX,UAAU,GAAG,GAAG,EAChB,OAAO,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EACtC,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,IAAI,UAAU,GAA2C,IAAI,CAAC;IAE9D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC,iBAAiB,OAAO,IAAI,OAAO,UAAU,UAAU,UAAU,CAAC,CAAC;YAC5E,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,UAAU,GAAG,MAAM,CAAC;QAEpB,mDAAmD;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,CAAC,4BAA4B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM;QACR,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IAED,4GAA4G;IAC5G,oEAAoE;IACpE,OAAO,UAAW,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAAY,EACZ,UAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AAClD,CAAC"}
@@ -4,7 +4,6 @@
4
4
  export * from './errors.js';
5
5
  export * from './paths.js';
6
6
  export * from './backup.js';
7
- export * from './os-paths.js';
8
7
  export * from './markdown.js';
9
8
  export * from './version-state.js';
10
9
  export * from './changelog.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -5,7 +5,6 @@
5
5
  export * from './errors.js';
6
6
  export * from './paths.js';
7
7
  export * from './backup.js';
8
- export * from './os-paths.js';
9
8
  export * from './markdown.js';
10
9
  export * from './version-state.js';
11
10
  export * from './changelog.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0BAA0B;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0BAA0B;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Simple in-memory rate limiter for HTTP requests.
3
+ * Tracks requests per IP address within a time window.
4
+ */
5
+ export interface RateLimiter {
6
+ isAllowed(ip: string): boolean;
7
+ getRemaining(ip: string): number;
8
+ reset(): void;
9
+ }
10
+ /**
11
+ * Create a rate limiter with the specified configuration.
12
+ *
13
+ * @param maxRequests - Maximum requests allowed per window
14
+ * @param windowMs - Time window in milliseconds
15
+ * @returns RateLimiter instance
16
+ */
17
+ export declare function createRateLimiter(maxRequests: number, windowMs: number): RateLimiter;
18
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;CACf;AAOD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAwDpF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Simple in-memory rate limiter for HTTP requests.
3
+ * Tracks requests per IP address within a time window.
4
+ */
5
+ /**
6
+ * Create a rate limiter with the specified configuration.
7
+ *
8
+ * @param maxRequests - Maximum requests allowed per window
9
+ * @param windowMs - Time window in milliseconds
10
+ * @returns RateLimiter instance
11
+ */
12
+ export function createRateLimiter(maxRequests, windowMs) {
13
+ const requests = new Map();
14
+ function getEntry(ip) {
15
+ const now = Date.now();
16
+ const existing = requests.get(ip);
17
+ if (!existing || now > existing.resetTime) {
18
+ // Create new entry or reset expired entry
19
+ const entry = {
20
+ count: 0,
21
+ resetTime: now + windowMs,
22
+ };
23
+ requests.set(ip, entry);
24
+ return entry;
25
+ }
26
+ return existing;
27
+ }
28
+ function cleanup() {
29
+ const now = Date.now();
30
+ for (const [ip, entry] of requests) {
31
+ if (now > entry.resetTime) {
32
+ requests.delete(ip);
33
+ }
34
+ }
35
+ }
36
+ // Periodically cleanup expired entries (every 5 minutes)
37
+ const cleanupInterval = setInterval(cleanup, 5 * 60 * 1000);
38
+ // Prevent the interval from keeping the process alive
39
+ if (cleanupInterval.unref) {
40
+ cleanupInterval.unref();
41
+ }
42
+ return {
43
+ isAllowed(ip) {
44
+ const entry = getEntry(ip);
45
+ if (entry.count >= maxRequests) {
46
+ return false;
47
+ }
48
+ entry.count++;
49
+ return true;
50
+ },
51
+ getRemaining(ip) {
52
+ const entry = getEntry(ip);
53
+ return Math.max(0, maxRequests - entry.count);
54
+ },
55
+ reset() {
56
+ requests.clear();
57
+ },
58
+ };
59
+ }
60
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,QAAgB;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEnD,SAAS,QAAQ,CAAC,EAAU;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,0CAA0C;YAC1C,MAAM,KAAK,GAAmB;gBAC5B,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG,GAAG,QAAQ;aAC1B,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,OAAO;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE5D,sDAAsD;IACtD,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;QAC1B,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,SAAS,CAAC,EAAU;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,KAAK,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,YAAY,CAAC,EAAU;YACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,KAAK;YACH,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"version-state.d.ts","sourceRoot":"","sources":["../../src/utils/version-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAgCD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAsC9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAMnE"}
1
+ {"version":3,"file":"version-state.d.ts","sourceRoot":"","sources":["../../src/utils/version-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAiDD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAsC9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAMnE"}
@@ -4,15 +4,31 @@
4
4
  */
5
5
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
6
6
  import { join, dirname } from 'path';
7
- import { getOSBasePath } from './os-paths.js';
7
+ import { homedir } from 'os';
8
8
  import { getPackageVersion } from './version.js';
9
- const DEFAULT_APP_NAME = 'limps';
9
+ /**
10
+ * Get the OS-specific cache directory for limps.
11
+ *
12
+ * - macOS: ~/Library/Caches/limps
13
+ * - Windows: %LOCALAPPDATA%/limps
14
+ * - Linux: $XDG_CACHE_HOME/limps or ~/.cache/limps
15
+ */
16
+ function getCachePath() {
17
+ const home = homedir();
18
+ switch (process.platform) {
19
+ case 'darwin':
20
+ return join(home, 'Library', 'Caches', 'limps');
21
+ case 'win32':
22
+ return join(process.env.LOCALAPPDATA || join(home, 'AppData', 'Local'), 'limps');
23
+ default:
24
+ return join(process.env.XDG_CACHE_HOME || join(home, '.cache'), 'limps');
25
+ }
26
+ }
10
27
  /**
11
28
  * Get the path to the version state file.
12
29
  */
13
30
  function getVersionStatePath() {
14
- const basePath = getOSBasePath(DEFAULT_APP_NAME);
15
- return join(basePath, 'version-state.json');
31
+ return join(getCachePath(), 'version-state.json');
16
32
  }
17
33
  /**
18
34
  * Compare two version strings using simple semantic versioning comparison.
@@ -1 +1 @@
1
- {"version":3,"file":"version-state.js","sourceRoot":"","sources":["../../src/utils/version-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-state.js","sourceRoot":"","sources":["../../src/utils/version-state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudosandwich/limps",
3
- "version": "2.13.3",
3
+ "version": "3.1.0",
4
4
  "description": "Local Intelligent MCP Planning Server - AI agent plan management",
5
5
  "mcpName": "io.github.paulbreuler/limps",
6
6
  "type": "module",
@@ -1,94 +0,0 @@
1
- /**
2
- * Project registry for managing limps configurations.
3
- * Stores a mapping of project names to config paths, enabling
4
- * users to switch between projects without specifying --config each time.
5
- */
6
- /**
7
- * A registered project entry in the registry.
8
- */
9
- export interface RegisteredProject {
10
- /** Absolute path to the project's config.json file */
11
- configPath: string;
12
- /** ISO timestamp when the project was registered */
13
- registeredAt: string;
14
- }
15
- /**
16
- * The project registry file structure.
17
- */
18
- export interface ProjectRegistry {
19
- /** Schema version for future migrations */
20
- version: 1;
21
- /** Currently active project name, or null if none set */
22
- current: string | null;
23
- /** Map of project names to their registration info */
24
- projects: Record<string, RegisteredProject>;
25
- }
26
- /**
27
- * Get the path to the registry file.
28
- * Uses XDG-compliant location: ~/.config/limps/registry.json
29
- *
30
- * @returns Absolute path to registry.json
31
- */
32
- export declare function getRegistryPath(): string;
33
- /**
34
- * Load the project registry from disk.
35
- * Returns an empty registry if the file doesn't exist.
36
- *
37
- * @returns The project registry
38
- */
39
- export declare function loadRegistry(): ProjectRegistry;
40
- /**
41
- * Save the project registry to disk.
42
- * Uses atomic write (write to temp, then rename) to prevent corruption.
43
- *
44
- * @param registry - The registry to save
45
- */
46
- export declare function saveRegistry(registry: ProjectRegistry): void;
47
- /**
48
- * Register a new project in the registry.
49
- *
50
- * @param name - Project name (used as identifier)
51
- * @param configPath - Absolute path to the project's config.json
52
- */
53
- export declare function registerProject(name: string, configPath: string): void;
54
- /**
55
- * Unregister a project from the registry.
56
- * If the project is the current project, clears the current selection.
57
- * Only modifies limps' registry file; does not touch any project config files on disk.
58
- *
59
- * @param name - Project name to unregister
60
- * @throws Error if the project is not registered
61
- */
62
- export declare function unregisterProject(name: string): void;
63
- /**
64
- * Set the current/default project.
65
- *
66
- * @param name - Project name to set as current, or null to clear
67
- * @throws Error if the project is not registered
68
- */
69
- export declare function setCurrentProject(name: string | null): void;
70
- /**
71
- * Get the config path for the current project.
72
- *
73
- * @returns Config path if a current project is set and exists, null otherwise
74
- */
75
- export declare function getCurrentProjectPath(): string | null;
76
- /**
77
- * Get the config path for a specific project by name.
78
- *
79
- * @param name - Project name to look up
80
- * @returns Config path if found, null otherwise
81
- */
82
- export declare function getProjectPath(name: string): string | null;
83
- /**
84
- * List all registered projects.
85
- *
86
- * @returns Array of project info objects
87
- */
88
- export declare function listProjects(): {
89
- name: string;
90
- current: boolean;
91
- configPath: string;
92
- registeredAt: string;
93
- }[];
94
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,OAAO,EAAE,CAAC,CAAC;IACX,yDAAyD;IACzD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,eAAe,CAqB9C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAQ5D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAOtE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAepD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAW3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAarD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,EAAE,CAWF"}
@@ -1,150 +0,0 @@
1
- /**
2
- * Project registry for managing limps configurations.
3
- * Stores a mapping of project names to config paths, enabling
4
- * users to switch between projects without specifying --config each time.
5
- */
6
- import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from 'fs';
7
- import { dirname } from 'path';
8
- import { getOSBasePath } from '../utils/os-paths.js';
9
- /**
10
- * Get the path to the registry file.
11
- * Uses XDG-compliant location: ~/.config/limps/registry.json
12
- *
13
- * @returns Absolute path to registry.json
14
- */
15
- export function getRegistryPath() {
16
- return `${getOSBasePath('limps')}/registry.json`;
17
- }
18
- /**
19
- * Load the project registry from disk.
20
- * Returns an empty registry if the file doesn't exist.
21
- *
22
- * @returns The project registry
23
- */
24
- export function loadRegistry() {
25
- const path = getRegistryPath();
26
- if (!existsSync(path)) {
27
- return { version: 1, current: null, projects: {} };
28
- }
29
- try {
30
- const content = readFileSync(path, 'utf-8');
31
- const registry = JSON.parse(content);
32
- // Validate basic structure
33
- if (!registry.version || !registry.projects) {
34
- console.error('Warning: Corrupt registry file, resetting to empty');
35
- return { version: 1, current: null, projects: {} };
36
- }
37
- return registry;
38
- }
39
- catch (_error) {
40
- console.error('Warning: Failed to parse registry file, resetting to empty');
41
- return { version: 1, current: null, projects: {} };
42
- }
43
- }
44
- /**
45
- * Save the project registry to disk.
46
- * Uses atomic write (write to temp, then rename) to prevent corruption.
47
- *
48
- * @param registry - The registry to save
49
- */
50
- export function saveRegistry(registry) {
51
- const path = getRegistryPath();
52
- mkdirSync(dirname(path), { recursive: true });
53
- // Atomic write: write to temp file, then rename
54
- const tmp = `${path}.tmp.${process.pid}`;
55
- writeFileSync(tmp, JSON.stringify(registry, null, 2));
56
- renameSync(tmp, path);
57
- }
58
- /**
59
- * Register a new project in the registry.
60
- *
61
- * @param name - Project name (used as identifier)
62
- * @param configPath - Absolute path to the project's config.json
63
- */
64
- export function registerProject(name, configPath) {
65
- const registry = loadRegistry();
66
- registry.projects[name] = {
67
- configPath,
68
- registeredAt: new Date().toISOString(),
69
- };
70
- saveRegistry(registry);
71
- }
72
- /**
73
- * Unregister a project from the registry.
74
- * If the project is the current project, clears the current selection.
75
- * Only modifies limps' registry file; does not touch any project config files on disk.
76
- *
77
- * @param name - Project name to unregister
78
- * @throws Error if the project is not registered
79
- */
80
- export function unregisterProject(name) {
81
- const registry = loadRegistry();
82
- if (!registry.projects[name]) {
83
- throw new Error(`Project not found: ${name}`);
84
- }
85
- // Clear current if this was the active project
86
- if (registry.current === name) {
87
- registry.current = null;
88
- }
89
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
90
- delete registry.projects[name];
91
- saveRegistry(registry);
92
- }
93
- /**
94
- * Set the current/default project.
95
- *
96
- * @param name - Project name to set as current, or null to clear
97
- * @throws Error if the project is not registered
98
- */
99
- export function setCurrentProject(name) {
100
- const registry = loadRegistry();
101
- if (name !== null && !registry.projects[name]) {
102
- throw new Error(`Project not found: ${name}\nRun \`limps config list\` to see available projects.`);
103
- }
104
- registry.current = name;
105
- saveRegistry(registry);
106
- }
107
- /**
108
- * Get the config path for the current project.
109
- *
110
- * @returns Config path if a current project is set and exists, null otherwise
111
- */
112
- export function getCurrentProjectPath() {
113
- const registry = loadRegistry();
114
- if (!registry.current) {
115
- return null;
116
- }
117
- const project = registry.projects[registry.current];
118
- if (!project) {
119
- return null;
120
- }
121
- return project.configPath;
122
- }
123
- /**
124
- * Get the config path for a specific project by name.
125
- *
126
- * @param name - Project name to look up
127
- * @returns Config path if found, null otherwise
128
- */
129
- export function getProjectPath(name) {
130
- const registry = loadRegistry();
131
- const project = registry.projects[name];
132
- return project?.configPath ?? null;
133
- }
134
- /**
135
- * List all registered projects.
136
- *
137
- * @returns Array of project info objects
138
- */
139
- export function listProjects() {
140
- const registry = loadRegistry();
141
- return Object.entries(registry.projects)
142
- .map(([name, project]) => ({
143
- name,
144
- current: name === registry.current,
145
- configPath: project.configPath,
146
- registeredAt: project.registeredAt,
147
- }))
148
- .sort((a, b) => a.name.localeCompare(b.name));
149
- }
150
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const description = "Register a config file or directory";
3
- export declare const args: z.ZodTuple<[z.ZodString, z.ZodString], null>;
4
- interface Props {
5
- args: z.infer<typeof args>;
6
- }
7
- export default function ConfigAddCommand({ args }: Props): React.ReactNode;
8
- export {};
9
- //# sourceMappingURL=add.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/config/add.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,WAAW,wCAAwC,CAAC;AAEjE,eAAO,MAAM,IAAI,8CAGf,CAAC;AAEH,UAAU,KAAK;IACb,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CASzE"}
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Text } from 'ink';
3
- import { z } from 'zod';
4
- import { configAdd } from '../../cli/config-cmd.js';
5
- export const description = 'Register a config file or directory';
6
- export const args = z.tuple([
7
- z.string().describe('Project name'),
8
- z.string().describe('Path to config file or directory'),
9
- ]);
10
- export default function ConfigAddCommand({ args }) {
11
- const [name, configPath] = args;
12
- try {
13
- const output = configAdd(name, configPath);
14
- return _jsx(Text, { color: "green", children: output });
15
- }
16
- catch (error) {
17
- return _jsxs(Text, { color: "red", children: ["Error: ", error.message] });
18
- }
19
- }
20
- //# sourceMappingURL=add.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/config/add.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1B,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACnC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACxD,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAS;IACtD,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3C,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,MAAM,GAAQ,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAU,KAAe,CAAC,OAAO,IAAQ,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare const description = "Find configs in default locations (use `limps config use <name>` to register)";
2
- export default function ConfigDiscoverCommand(): React.ReactNode;
3
- //# sourceMappingURL=discover.d.ts.map