suzi-cli 0.1.12 → 0.1.13

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export interface LockMetadata {
2
+ pid: number;
3
+ sessionId: string;
4
+ hostId: string;
5
+ hostname: string;
6
+ acquiredAt: number;
7
+ leaseExpiry: number;
8
+ lastHeartbeat: number;
9
+ aiProvider: 'claude' | 'codex';
10
+ workingDir: string;
11
+ version: string;
12
+ }
13
+ export interface LockHandle {
14
+ lockDir: string;
15
+ sessionId: string;
16
+ heartbeatTimer: NodeJS.Timeout | null;
17
+ released: boolean;
18
+ }
19
+ export type LockResult = {
20
+ ok: true;
21
+ handle: LockHandle;
22
+ } | {
23
+ ok: false;
24
+ error: LockError;
25
+ };
26
+ export type LockError = {
27
+ type: 'held_by_other';
28
+ metadata: LockMetadata;
29
+ } | {
30
+ type: 'corrupted_lock';
31
+ lockDir: string;
32
+ } | {
33
+ type: 'failed_to_acquire';
34
+ reason: string;
35
+ };
36
+ /**
37
+ * Handle corrupted lock by renaming it to .corrupted-{timestamp}.
38
+ * Preserves the corrupted lock for debugging.
39
+ */
40
+ export declare function handleCorruptedLock(lockDir: string): void;
41
+ /**
42
+ * Acquire a lock for the working directory.
43
+ * Returns a handle on success, or an error on failure.
44
+ *
45
+ * Strategy:
46
+ * 1. Try to create lock directory atomically (fs.mkdirSync)
47
+ * 2. If it exists, check if stale (lease expired or PID dead)
48
+ * 3. If stale, remove and retry once
49
+ * 4. If held by another session, return error with owner info
50
+ */
51
+ export declare function acquireLock(workingDir: string, aiProvider: 'claude' | 'codex', version: string): LockResult;
52
+ /**
53
+ * Start heartbeat to keep lock alive.
54
+ * Updates lease timestamp every 10 seconds.
55
+ *
56
+ * The timer is unref'd so it doesn't prevent process exit.
57
+ */
58
+ export declare function startHeartbeat(handle: LockHandle): void;
59
+ /**
60
+ * Stop heartbeat updates.
61
+ */
62
+ export declare function stopHeartbeat(handle: LockHandle): void;
63
+ /**
64
+ * Release lock.
65
+ * Only removes lock if session ID matches (prevents cleanup collision).
66
+ */
67
+ export declare function releaseLock(handle: LockHandle): void;
68
+ //# sourceMappingURL=lock-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-manager.d.ts","sourceRoot":"","sources":["../../src/lib/lock-manager.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEpC,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiHlD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAazD;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,QAAQ,GAAG,OAAO,EAC9B,OAAO,EAAE,MAAM,GACd,UAAU,CAwGZ;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAsCvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAKtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAsBpD"}
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleCorruptedLock = handleCorruptedLock;
7
+ exports.acquireLock = acquireLock;
8
+ exports.startHeartbeat = startHeartbeat;
9
+ exports.stopHeartbeat = stopHeartbeat;
10
+ exports.releaseLock = releaseLock;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const os_1 = __importDefault(require("os"));
14
+ const crypto_1 = require("crypto");
15
+ const LOCK_DIR_NAME = '.suzi-session.lock';
16
+ const LEASE_DURATION_MS = 90000; // 90 seconds
17
+ const HEARTBEAT_INTERVAL_MS = 10000; // 10 seconds
18
+ const STALE_THRESHOLD_MS = 120000; // 2 minutes grace period
19
+ /**
20
+ * Get platform-specific machine identifier.
21
+ * Used to detect if a lock was created on the same machine.
22
+ * MUST be deterministic - same machine = same ID across calls.
23
+ */
24
+ function getHostId() {
25
+ const platform = process.platform;
26
+ // Linux: use /etc/machine-id (persistent across reboots)
27
+ if (platform === 'linux') {
28
+ try {
29
+ const machineIdPath = '/etc/machine-id';
30
+ if (fs_1.default.existsSync(machineIdPath)) {
31
+ const machineId = fs_1.default.readFileSync(machineIdPath, 'utf-8').trim();
32
+ return `linux-${machineId.slice(0, 16)}`;
33
+ }
34
+ }
35
+ catch {
36
+ // Fall through to hostname-based ID
37
+ }
38
+ }
39
+ // macOS: use hostname only (boot time is unreliable due to timing precision)
40
+ if (platform === 'darwin') {
41
+ return `darwin-${os_1.default.hostname()}`;
42
+ }
43
+ // Windows/Fallback: hostname + platform only (no timestamps)
44
+ return `${platform}-${os_1.default.hostname()}`;
45
+ }
46
+ /**
47
+ * Check if a process with the given PID is alive.
48
+ * Only works reliably on the same machine.
49
+ */
50
+ function isProcessAlive(pid) {
51
+ try {
52
+ // process.kill with signal 0 doesn't actually kill,
53
+ // it just checks if the process exists
54
+ process.kill(pid, 0);
55
+ return true;
56
+ }
57
+ catch (err) {
58
+ if (err && typeof err === 'object' && 'code' in err) {
59
+ // ESRCH = No such process
60
+ // EPERM = Process exists but we don't have permission to signal it
61
+ return err.code === 'EPERM';
62
+ }
63
+ return false;
64
+ }
65
+ }
66
+ /**
67
+ * Determine if a lock is stale based on:
68
+ * 1. Lease expiry + grace period
69
+ * 2. Process liveness (same machine only)
70
+ */
71
+ function isLockStale(metadata) {
72
+ const now = Date.now();
73
+ const currentHostId = getHostId();
74
+ // Check lease expiry with grace period
75
+ if (now > metadata.leaseExpiry + STALE_THRESHOLD_MS) {
76
+ return true;
77
+ }
78
+ // If same machine, check if process is still alive
79
+ if (metadata.hostId === currentHostId) {
80
+ if (!isProcessAlive(metadata.pid)) {
81
+ return true;
82
+ }
83
+ }
84
+ return false;
85
+ }
86
+ /**
87
+ * Attempt to read and parse lock metadata.
88
+ * Returns null if corrupted or missing.
89
+ */
90
+ function readLockMetadata(lockDir) {
91
+ const metadataPath = path_1.default.join(lockDir, 'metadata.json');
92
+ try {
93
+ if (!fs_1.default.existsSync(metadataPath)) {
94
+ return null;
95
+ }
96
+ const content = fs_1.default.readFileSync(metadataPath, 'utf-8');
97
+ const parsed = JSON.parse(content);
98
+ // Validate required fields
99
+ if (typeof parsed.pid !== 'number' ||
100
+ typeof parsed.sessionId !== 'string' ||
101
+ typeof parsed.hostId !== 'string' ||
102
+ typeof parsed.hostname !== 'string' ||
103
+ typeof parsed.acquiredAt !== 'number' ||
104
+ typeof parsed.leaseExpiry !== 'number' ||
105
+ typeof parsed.lastHeartbeat !== 'number' ||
106
+ (parsed.aiProvider !== 'claude' && parsed.aiProvider !== 'codex') ||
107
+ typeof parsed.workingDir !== 'string' ||
108
+ typeof parsed.version !== 'string') {
109
+ return null;
110
+ }
111
+ return parsed;
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ }
117
+ /**
118
+ * Handle corrupted lock by renaming it to .corrupted-{timestamp}.
119
+ * Preserves the corrupted lock for debugging.
120
+ */
121
+ function handleCorruptedLock(lockDir) {
122
+ try {
123
+ const timestamp = Date.now();
124
+ const corruptedPath = `${lockDir}.corrupted-${timestamp}`;
125
+ fs_1.default.renameSync(lockDir, corruptedPath);
126
+ }
127
+ catch {
128
+ // If rename fails, try to remove it
129
+ try {
130
+ fs_1.default.rmSync(lockDir, { recursive: true, force: true });
131
+ }
132
+ catch {
133
+ // Ignore - will fail on next acquire attempt
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Atomically write metadata to prevent read races during truncate-write.
139
+ * Writes to temp file first, then renames atomically.
140
+ */
141
+ function writeMetadataAtomic(lockDir, metadata) {
142
+ const metadataPath = path_1.default.join(lockDir, 'metadata.json');
143
+ const tempPath = `${metadataPath}.tmp.${process.pid}`;
144
+ try {
145
+ // Write to temp file
146
+ fs_1.default.writeFileSync(tempPath, JSON.stringify(metadata, null, 2));
147
+ // Atomic rename (no truncation, no partial reads)
148
+ fs_1.default.renameSync(tempPath, metadataPath);
149
+ }
150
+ catch (err) {
151
+ // Clean up temp file on error
152
+ try {
153
+ fs_1.default.unlinkSync(tempPath);
154
+ }
155
+ catch {
156
+ // Ignore cleanup errors
157
+ }
158
+ throw err;
159
+ }
160
+ }
161
+ /**
162
+ * Acquire a lock for the working directory.
163
+ * Returns a handle on success, or an error on failure.
164
+ *
165
+ * Strategy:
166
+ * 1. Try to create lock directory atomically (fs.mkdirSync)
167
+ * 2. If it exists, check if stale (lease expired or PID dead)
168
+ * 3. If stale, remove and retry once
169
+ * 4. If held by another session, return error with owner info
170
+ */
171
+ function acquireLock(workingDir, aiProvider, version) {
172
+ const lockDir = path_1.default.join(workingDir, LOCK_DIR_NAME);
173
+ const sessionId = (0, crypto_1.randomUUID)();
174
+ const now = Date.now();
175
+ const metadata = {
176
+ pid: process.pid,
177
+ sessionId,
178
+ hostId: getHostId(),
179
+ hostname: os_1.default.hostname(),
180
+ acquiredAt: now,
181
+ leaseExpiry: now + LEASE_DURATION_MS,
182
+ lastHeartbeat: now,
183
+ aiProvider,
184
+ workingDir: path_1.default.resolve(workingDir),
185
+ version,
186
+ };
187
+ // Attempt 1: Try to create lock directory atomically
188
+ try {
189
+ fs_1.default.mkdirSync(lockDir);
190
+ // Write metadata atomically
191
+ writeMetadataAtomic(lockDir, metadata);
192
+ return {
193
+ ok: true,
194
+ handle: {
195
+ lockDir,
196
+ sessionId,
197
+ heartbeatTimer: null,
198
+ released: false,
199
+ },
200
+ };
201
+ }
202
+ catch (err) {
203
+ // Lock directory already exists
204
+ if (err && typeof err === 'object' && 'code' in err && err.code === 'EEXIST') {
205
+ // Try to read existing lock metadata
206
+ const existingMetadata = readLockMetadata(lockDir);
207
+ if (!existingMetadata) {
208
+ // Corrupted lock - rename and retry
209
+ return {
210
+ ok: false,
211
+ error: { type: 'corrupted_lock', lockDir },
212
+ };
213
+ }
214
+ // Check if stale
215
+ if (isLockStale(existingMetadata)) {
216
+ // Remove stale lock
217
+ try {
218
+ fs_1.default.rmSync(lockDir, { recursive: true, force: true });
219
+ }
220
+ catch {
221
+ return {
222
+ ok: false,
223
+ error: {
224
+ type: 'failed_to_acquire',
225
+ reason: 'Failed to remove stale lock',
226
+ },
227
+ };
228
+ }
229
+ // Retry acquisition
230
+ try {
231
+ fs_1.default.mkdirSync(lockDir);
232
+ writeMetadataAtomic(lockDir, metadata);
233
+ return {
234
+ ok: true,
235
+ handle: {
236
+ lockDir,
237
+ sessionId,
238
+ heartbeatTimer: null,
239
+ released: false,
240
+ },
241
+ };
242
+ }
243
+ catch {
244
+ return {
245
+ ok: false,
246
+ error: {
247
+ type: 'failed_to_acquire',
248
+ reason: 'Failed to acquire lock after removing stale lock',
249
+ },
250
+ };
251
+ }
252
+ }
253
+ // Lock is held by another active session
254
+ return {
255
+ ok: false,
256
+ error: { type: 'held_by_other', metadata: existingMetadata },
257
+ };
258
+ }
259
+ // Other filesystem error
260
+ return {
261
+ ok: false,
262
+ error: {
263
+ type: 'failed_to_acquire',
264
+ reason: err instanceof Error ? err.message : 'Unknown error',
265
+ },
266
+ };
267
+ }
268
+ }
269
+ /**
270
+ * Start heartbeat to keep lock alive.
271
+ * Updates lease timestamp every 10 seconds.
272
+ *
273
+ * The timer is unref'd so it doesn't prevent process exit.
274
+ */
275
+ function startHeartbeat(handle) {
276
+ if (handle.released) {
277
+ return;
278
+ }
279
+ handle.heartbeatTimer = setInterval(() => {
280
+ try {
281
+ // Read current metadata
282
+ const metadata = readLockMetadata(handle.lockDir);
283
+ if (!metadata) {
284
+ // Lock was removed externally - stop heartbeat
285
+ stopHeartbeat(handle);
286
+ return;
287
+ }
288
+ // Verify session ID matches (prevent collision)
289
+ if (metadata.sessionId !== handle.sessionId) {
290
+ // Another session took over - stop heartbeat
291
+ stopHeartbeat(handle);
292
+ return;
293
+ }
294
+ // Update lease
295
+ const now = Date.now();
296
+ metadata.lastHeartbeat = now;
297
+ metadata.leaseExpiry = now + LEASE_DURATION_MS;
298
+ // Atomic write to prevent read races
299
+ writeMetadataAtomic(handle.lockDir, metadata);
300
+ }
301
+ catch {
302
+ // Heartbeat failed - log warning but don't crash
303
+ // Lock will eventually expire if heartbeat keeps failing
304
+ }
305
+ }, HEARTBEAT_INTERVAL_MS);
306
+ // Don't prevent process exit
307
+ handle.heartbeatTimer.unref();
308
+ }
309
+ /**
310
+ * Stop heartbeat updates.
311
+ */
312
+ function stopHeartbeat(handle) {
313
+ if (handle.heartbeatTimer) {
314
+ clearInterval(handle.heartbeatTimer);
315
+ handle.heartbeatTimer = null;
316
+ }
317
+ }
318
+ /**
319
+ * Release lock.
320
+ * Only removes lock if session ID matches (prevents cleanup collision).
321
+ */
322
+ function releaseLock(handle) {
323
+ if (handle.released) {
324
+ return;
325
+ }
326
+ // Stop heartbeat first
327
+ stopHeartbeat(handle);
328
+ try {
329
+ // Verify session ID before removing
330
+ const metadata = readLockMetadata(handle.lockDir);
331
+ if (metadata && metadata.sessionId === handle.sessionId) {
332
+ // Safe to remove - this is our lock
333
+ fs_1.default.rmSync(handle.lockDir, { recursive: true, force: true });
334
+ }
335
+ // If session ID doesn't match, don't remove (another session took over)
336
+ }
337
+ catch {
338
+ // Ignore errors during cleanup
339
+ }
340
+ handle.released = true;
341
+ }
342
+ //# sourceMappingURL=lock-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-manager.js","sourceRoot":"","sources":["../../src/lib/lock-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ export interface HlLeverage {
2
+ type: string;
3
+ value: number;
4
+ }
5
+ export interface HlCumFunding {
6
+ allTime: string;
7
+ sinceOpen: string;
8
+ sinceChange: string;
9
+ }
10
+ export interface HlPositionData {
11
+ coin: string;
12
+ szi: string;
13
+ leverage: HlLeverage;
14
+ entryPx: string;
15
+ positionValue: string;
16
+ unrealizedPnl: string;
17
+ returnOnEquity: string;
18
+ liquidationPx: string | null;
19
+ marginUsed: string;
20
+ maxLeverage: number;
21
+ cumFunding: HlCumFunding;
22
+ }
23
+ export interface HlPosition {
24
+ position: HlPositionData;
25
+ dex?: string;
26
+ }
27
+ export interface MarketMakerSummary {
28
+ equity: number;
29
+ availableBalance: number;
30
+ positions: HlPosition[];
31
+ }
32
+ export interface TokenBalance {
33
+ token: string;
34
+ balance: number;
35
+ rawBalance: string;
36
+ mint?: string;
37
+ }
38
+ export interface HyperliquidBreakdown {
39
+ totalEquity: number;
40
+ availableBalance: number;
41
+ totalPositions: number;
42
+ marketMakers: {
43
+ main?: MarketMakerSummary;
44
+ xyz?: MarketMakerSummary;
45
+ flx?: MarketMakerSummary;
46
+ vntl?: MarketMakerSummary;
47
+ hyna?: MarketMakerSummary;
48
+ km?: MarketMakerSummary;
49
+ cash?: MarketMakerSummary;
50
+ };
51
+ spotBalances: TokenBalance[];
52
+ }
53
+ export interface SolanaBreakdown {
54
+ nativeBalance: number;
55
+ tokenBalances: TokenBalance[];
56
+ }
57
+ export interface MeteoraPosition {
58
+ publicKey: string;
59
+ lowerBinId: number;
60
+ upperBinId: number;
61
+ totalXAmount: string;
62
+ totalYAmount: string;
63
+ feeX: string;
64
+ feeY: string;
65
+ }
66
+ export interface MeteoraBreakdown {
67
+ totalEquity: number;
68
+ availableBalance: number;
69
+ totalPositions: number;
70
+ positions?: Array<{
71
+ poolAddress: string;
72
+ estimatedValueUsd: number;
73
+ positions: MeteoraPosition[];
74
+ }>;
75
+ }
76
+ export interface PolymarketPosition {
77
+ proxyWallet: string;
78
+ asset: string;
79
+ conditionId: string;
80
+ size: number;
81
+ avgPrice: number;
82
+ curPrice: number;
83
+ initialValue: number;
84
+ currentValue: number;
85
+ cashPnl: number;
86
+ percentPnl: number;
87
+ realizedPnl: number;
88
+ title: string;
89
+ outcome: string;
90
+ eventSlug: string;
91
+ endDate: string;
92
+ redeemable: boolean;
93
+ mergeable: boolean;
94
+ }
95
+ export interface PolymarketBreakdown {
96
+ totalValue: number;
97
+ totalPnl: number;
98
+ totalPositions: number;
99
+ positions: PolymarketPosition[];
100
+ }
101
+ export interface KaminoPosition {
102
+ type: 'deposit' | 'borrow';
103
+ symbol: string;
104
+ amount: string;
105
+ amountUsd: string;
106
+ }
107
+ export interface KaminoBreakdown {
108
+ totalDepositsUsd: number;
109
+ totalBorrowsUsd: number;
110
+ netValueUsd: number;
111
+ positions: KaminoPosition[];
112
+ }
113
+ export interface DetailedPortfolioSummary {
114
+ totals: {
115
+ totalEquity: number;
116
+ availableBalance: number;
117
+ totalPositions: number;
118
+ };
119
+ protocols: {
120
+ hyperliquid: HyperliquidBreakdown;
121
+ meteora: MeteoraBreakdown;
122
+ polymarket: PolymarketBreakdown;
123
+ kamino: KaminoBreakdown;
124
+ };
125
+ balances: {
126
+ solana: SolanaBreakdown;
127
+ };
128
+ }
129
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../src/types/portfolio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Portfolio API Response Types
3
+ // Copied from apps/api/src/features/portfolio/portfolio.types.ts
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/types/portfolio.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,iEAAiE"}
@@ -25,4 +25,14 @@ export declare function formatSol(amount: number): string;
25
25
  export declare function formatUsd(amount: number): string;
26
26
  export declare function safeParseJSON(value: unknown, fallback?: Record<string, any>): Record<string, any>;
27
27
  export declare function statusBadge(status: string): string;
28
+ /**
29
+ * Calculate Levenshtein distance between two strings.
30
+ * Used for finding similar commands when user types an unknown command.
31
+ */
32
+ export declare function levenshteinDistance(a: string, b: string): number;
33
+ /**
34
+ * Find similar commands based on Levenshtein distance.
35
+ * Returns commands sorted by similarity (closest first).
36
+ */
37
+ export declare function findSimilarCommands(input: string, commands: string[], maxSuggestions?: number, maxDistance?: number): string[];
28
38
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,MAAM;;;;;;;;;;CAUlB,CAAC;AAEF,wBAAgB,IAAI,IAAI,MAAM,CAW7B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAK5E;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQrG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBlD"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,MAAM;;;;;;;;;;CAUlB,CAAC;AAEF,wBAAgB,IAAI,IAAI,MAAM,CAW7B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAK5E;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQrG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBlD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,GAAE,MAAU,EAC1B,WAAW,GAAE,MAAU,GACtB,MAAM,EAAE,CAOV"}