@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.
- package/README.md +168 -115
- package/dist/cli/config-cmd.d.ts +22 -194
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +92 -981
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/index.d.ts +1 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init-project.d.ts +7 -3
- package/dist/cli/init-project.d.ts.map +1 -1
- package/dist/cli/init-project.js +43 -51
- 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 -92
- package/dist/cli/mcp-clients.js.map +1 -1
- package/dist/cli.js +18 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +3 -12
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/print.d.ts +20 -0
- 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/config/update.d.ts +3 -4
- package/dist/commands/config/update.d.ts.map +1 -1
- package/dist/commands/config/update.js +6 -5
- package/dist/commands/config/update.js.map +1 -1
- package/dist/commands/config/upgrade.d.ts +1 -1
- package/dist/commands/config/upgrade.js +2 -2
- package/dist/commands/config/upgrade.js.map +1 -1
- package/dist/commands/graph/check.d.ts +0 -1
- package/dist/commands/graph/check.d.ts.map +1 -1
- package/dist/commands/graph/check.js +4 -13
- package/dist/commands/graph/check.js.map +1 -1
- package/dist/commands/graph/entity.d.ts +0 -1
- package/dist/commands/graph/entity.d.ts.map +1 -1
- package/dist/commands/graph/entity.js +4 -13
- package/dist/commands/graph/entity.js.map +1 -1
- package/dist/commands/graph/health.d.ts +0 -1
- package/dist/commands/graph/health.d.ts.map +1 -1
- package/dist/commands/graph/health.js +4 -13
- package/dist/commands/graph/health.js.map +1 -1
- package/dist/commands/graph/index.d.ts.map +1 -1
- package/dist/commands/graph/index.js +1 -3
- package/dist/commands/graph/index.js.map +1 -1
- package/dist/commands/graph/overlap.d.ts +0 -1
- package/dist/commands/graph/overlap.d.ts.map +1 -1
- package/dist/commands/graph/overlap.js +3 -9
- package/dist/commands/graph/overlap.js.map +1 -1
- package/dist/commands/graph/reindex.d.ts +0 -1
- package/dist/commands/graph/reindex.d.ts.map +1 -1
- package/dist/commands/graph/reindex.js +3 -9
- package/dist/commands/graph/reindex.js.map +1 -1
- package/dist/commands/graph/search.d.ts +0 -1
- package/dist/commands/graph/search.d.ts.map +1 -1
- package/dist/commands/graph/search.js +3 -9
- package/dist/commands/graph/search.js.map +1 -1
- package/dist/commands/graph/suggest.d.ts +0 -1
- package/dist/commands/graph/suggest.d.ts.map +1 -1
- package/dist/commands/graph/suggest.js +4 -13
- package/dist/commands/graph/suggest.js.map +1 -1
- package/dist/commands/graph/trace.d.ts +0 -1
- package/dist/commands/graph/trace.d.ts.map +1 -1
- package/dist/commands/graph/trace.js +3 -9
- package/dist/commands/graph/trace.js.map +1 -1
- package/dist/commands/graph/watch.d.ts +0 -1
- package/dist/commands/graph/watch.d.ts.map +1 -1
- package/dist/commands/graph/watch.js +2 -5
- package/dist/commands/graph/watch.js.map +1 -1
- package/dist/commands/health/check.d.ts +0 -1
- package/dist/commands/health/check.d.ts.map +1 -1
- package/dist/commands/health/check.js +3 -9
- package/dist/commands/health/check.js.map +1 -1
- package/dist/commands/health/index.d.ts.map +1 -1
- package/dist/commands/health/index.js +1 -3
- package/dist/commands/health/index.js.map +1 -1
- package/dist/commands/health/inference.d.ts +0 -1
- package/dist/commands/health/inference.d.ts.map +1 -1
- package/dist/commands/health/inference.js +4 -10
- package/dist/commands/health/inference.js.map +1 -1
- package/dist/commands/health/staleness.d.ts +0 -1
- package/dist/commands/health/staleness.d.ts.map +1 -1
- package/dist/commands/health/staleness.js +3 -9
- package/dist/commands/health/staleness.js.map +1 -1
- 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/init.d.ts +4 -6
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list-agents.d.ts +0 -1
- package/dist/commands/list-agents.d.ts.map +1 -1
- package/dist/commands/list-agents.js +6 -17
- package/dist/commands/list-agents.js.map +1 -1
- package/dist/commands/list-plans.d.ts +0 -1
- package/dist/commands/list-plans.d.ts.map +1 -1
- package/dist/commands/list-plans.js +6 -12
- package/dist/commands/list-plans.js.map +1 -1
- package/dist/commands/next-task.d.ts +0 -1
- package/dist/commands/next-task.d.ts.map +1 -1
- package/dist/commands/next-task.js +7 -18
- package/dist/commands/next-task.js.map +1 -1
- package/dist/commands/proposals/apply-safe.d.ts +0 -1
- package/dist/commands/proposals/apply-safe.d.ts.map +1 -1
- package/dist/commands/proposals/apply-safe.js +4 -13
- package/dist/commands/proposals/apply-safe.js.map +1 -1
- package/dist/commands/proposals/apply.d.ts +0 -1
- package/dist/commands/proposals/apply.d.ts.map +1 -1
- package/dist/commands/proposals/apply.js +3 -9
- package/dist/commands/proposals/apply.js.map +1 -1
- package/dist/commands/proposals/index.d.ts +0 -1
- package/dist/commands/proposals/index.d.ts.map +1 -1
- package/dist/commands/proposals/index.js +4 -10
- package/dist/commands/proposals/index.js.map +1 -1
- package/dist/commands/reindex.d.ts +0 -1
- package/dist/commands/reindex.d.ts.map +1 -1
- package/dist/commands/reindex.js +4 -8
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/repair-plans.d.ts +0 -1
- package/dist/commands/repair-plans.d.ts.map +1 -1
- package/dist/commands/repair-plans.js +3 -6
- package/dist/commands/repair-plans.js.map +1 -1
- package/dist/commands/reset.d.ts +13 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +30 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/score-all.d.ts +0 -1
- package/dist/commands/score-all.d.ts.map +1 -1
- package/dist/commands/score-all.js +7 -18
- package/dist/commands/score-all.js.map +1 -1
- package/dist/commands/score-task.d.ts +0 -1
- package/dist/commands/score-task.d.ts.map +1 -1
- package/dist/commands/score-task.js +7 -22
- package/dist/commands/score-task.js.map +1 -1
- package/dist/commands/start.d.ts +15 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +131 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status-server.d.ts +13 -0
- package/dist/commands/status-server.d.ts.map +1 -0
- package/dist/commands/status-server.js +114 -0
- package/dist/commands/status-server.js.map +1 -0
- package/dist/commands/status.d.ts +0 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +3 -9
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +12 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +87 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +101 -0
- package/dist/config.js.map +1 -1
- package/dist/pidfile.d.ts +55 -0
- package/dist/pidfile.d.ts.map +1 -0
- package/dist/pidfile.js +103 -0
- package/dist/pidfile.js.map +1 -0
- package/dist/server-http-entry.d.ts +8 -0
- package/dist/server-http-entry.d.ts.map +1 -0
- package/dist/server-http-entry.js +42 -0
- package/dist/server-http-entry.js.map +1 -0
- package/dist/server-http.d.ts +19 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +292 -0
- package/dist/server-http.js.map +1 -0
- package/dist/server-main.d.ts +3 -3
- package/dist/server-main.d.ts.map +1 -1
- package/dist/server-main.js +17 -111
- package/dist/server-main.js.map +1 -1
- package/dist/server-shared.d.ts +30 -0
- package/dist/server-shared.d.ts.map +1 -0
- package/dist/server-shared.js +110 -0
- package/dist/server-shared.js.map +1 -0
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -3
- package/dist/server.js.map +1 -1
- package/dist/utils/cli-help.d.ts +0 -2
- package/dist/utils/cli-help.d.ts.map +1 -1
- package/dist/utils/cli-help.js +0 -6
- package/dist/utils/cli-help.js.map +1 -1
- package/dist/utils/config-resolver.d.ts +1 -11
- package/dist/utils/config-resolver.d.ts.map +1 -1
- package/dist/utils/config-resolver.js +2 -34
- 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/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +0 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/rate-limiter.d.ts +18 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +60 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/version-state.d.ts.map +1 -1
- package/dist/utils/version-state.js +20 -4
- package/dist/utils/version-state.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/registry.d.ts +0 -94
- package/dist/cli/registry.d.ts.map +0 -1
- package/dist/cli/registry.js +0 -150
- package/dist/cli/registry.js.map +0 -1
- package/dist/commands/config/add.d.ts +0 -9
- package/dist/commands/config/add.d.ts.map +0 -1
- package/dist/commands/config/add.js +0 -20
- package/dist/commands/config/add.js.map +0 -1
- package/dist/commands/config/discover.d.ts +0 -3
- package/dist/commands/config/discover.d.ts.map +0 -1
- package/dist/commands/config/discover.js +0 -9
- package/dist/commands/config/discover.js.map +0 -1
- package/dist/commands/config/list.d.ts +0 -11
- package/dist/commands/config/list.d.ts.map +0 -1
- package/dist/commands/config/list.js +0 -28
- package/dist/commands/config/list.js.map +0 -1
- package/dist/commands/config/migrate.d.ts +0 -3
- package/dist/commands/config/migrate.d.ts.map +0 -1
- package/dist/commands/config/migrate.js +0 -14
- package/dist/commands/config/migrate.js.map +0 -1
- package/dist/commands/config/remove.d.ts +0 -9
- package/dist/commands/config/remove.d.ts.map +0 -1
- package/dist/commands/config/remove.js +0 -17
- package/dist/commands/config/remove.js.map +0 -1
- package/dist/commands/config/set.d.ts +0 -9
- package/dist/commands/config/set.d.ts.map +0 -1
- package/dist/commands/config/set.js +0 -17
- package/dist/commands/config/set.js.map +0 -1
- package/dist/commands/config/sync-mcp.d.ts +0 -26
- package/dist/commands/config/sync-mcp.d.ts.map +0 -1
- package/dist/commands/config/sync-mcp.js +0 -259
- package/dist/commands/config/sync-mcp.js.map +0 -1
- package/dist/commands/config/use.d.ts +0 -9
- package/dist/commands/config/use.d.ts.map +0 -1
- package/dist/commands/config/use.js +0 -17
- package/dist/commands/config/use.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -18
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -29
- package/dist/commands/serve.js.map +0 -1
- package/dist/utils/os-paths.d.ts +0 -34
- package/dist/utils/os-paths.d.ts.map +0 -1
- package/dist/utils/os-paths.js +0 -60
- 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":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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 {
|
|
7
|
+
import { homedir } from 'os';
|
|
8
8
|
import { getPackageVersion } from './version.js';
|
|
9
|
-
|
|
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
|
-
|
|
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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"version-state.js","sourceRoot":"","sources":["../../src/utils/version-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/cli/registry.d.ts
DELETED
|
@@ -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"}
|
package/dist/cli/registry.js
DELETED
|
@@ -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
|
package/dist/cli/registry.js.map
DELETED
|
@@ -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"}
|