suzi-cli 0.1.11 → 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/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +213 -143
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +86 -25
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio.js +214 -155
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/index.js +47 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/lock-manager.d.ts +68 -0
- package/dist/lib/lock-manager.d.ts.map +1 -0
- package/dist/lib/lock-manager.js +342 -0
- package/dist/lib/lock-manager.js.map +1 -0
- package/dist/types/portfolio.d.ts +129 -0
- package/dist/types/portfolio.d.ts.map +1 -0
- package/dist/types/portfolio.js +5 -0
- package/dist/types/portfolio.js.map +1 -0
- package/dist/utils/ui.d.ts +10 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +40 -0
- package/dist/utils/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,sEAA6C;AAE7C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEjC,4CAAwD;AACxD,oDAAgE;AAChE,wDAAoE;AACpE,0DAAqE;AACrE,8CAA0D;AAC1D,8CAA0D;AAC1D,8CAA0D;AAC1D,4CAAwD;AACxD,oDAAgE;AAChE,0DAAsE;AACtE,sEAA0E;AAC1E,8CAA0D;AAC1D,8CAA0D;AAC1D,kDAA8D;AAC9D,kDAA8D;AAC9D,wCAAoD;AACpD,kDAA8D;AAC9D,4DAAuE;AACvE,8CAA0D;AAC1D,0CAAsD;AACtD,4DAAuE;AACvE,4CAAwD;AACxD,wCAAoD;AACpD,
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/types/portfolio.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,iEAAiE"}
|
package/dist/utils/ui.d.ts
CHANGED
|
@@ -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
|
package/dist/utils/ui.d.ts.map
CHANGED
|
@@ -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"}
|