rackmind-cli 0.2.1 → 0.4.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/LICENSE +101 -21
- package/README.md +7 -1
- package/dist/ai/providers/anthropic-provider.d.ts +9 -2
- package/dist/ai/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/ai/providers/anthropic-provider.js +42 -9
- package/dist/ai/providers/anthropic-provider.js.map +1 -1
- package/dist/ai/providers/base.d.ts +6 -2
- package/dist/ai/providers/base.d.ts.map +1 -1
- package/dist/ai/tool-executor.d.ts +11 -13
- package/dist/ai/tool-executor.d.ts.map +1 -1
- package/dist/ai/tool-executor.js +183 -27
- package/dist/ai/tool-executor.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +8 -6
- package/dist/commands/logs.js.map +1 -1
- package/dist/config/types.d.ts +5 -5
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +5 -1
- package/dist/config/types.js.map +1 -1
- package/dist/interactive/App.d.ts.map +1 -1
- package/dist/interactive/App.js +13 -4
- package/dist/interactive/App.js.map +1 -1
- package/dist/interactive/useRackMind.d.ts +37 -0
- package/dist/interactive/useRackMind.d.ts.map +1 -1
- package/dist/interactive/useRackMind.js +162 -24
- package/dist/interactive/useRackMind.js.map +1 -1
- package/dist/utils/command-safety.d.ts.map +1 -1
- package/dist/utils/command-safety.js +14 -0
- package/dist/utils/command-safety.js.map +1 -1
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +80 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,39 @@
|
|
|
1
|
+
import type Anthropic from '@anthropic-ai/sdk';
|
|
1
2
|
import { type ToolExecution, type PendingDestructiveAction } from '../ai/providers/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Soft cap on conversation history. Tune to fit ≈80 % of the model's 200 K-token window.
|
|
5
|
+
* 400 K chars ≈ 100 K tokens at ~4 chars/token — leaves headroom for the system prompt,
|
|
6
|
+
* tool definitions, and the model's own 4 K max_tokens response budget.
|
|
7
|
+
*/
|
|
8
|
+
export declare const HISTORY_CAP_CHARS = 400000;
|
|
9
|
+
/** Maximum number of API message entries before trimming. */
|
|
10
|
+
export declare const HISTORY_CAP_TURNS = 150;
|
|
11
|
+
/** Fraction of the cap at which a /clear hint is shown (fires once per session). */
|
|
12
|
+
export declare const HISTORY_WARN_FRACTION = 0.75;
|
|
13
|
+
/**
|
|
14
|
+
* Estimate the total character count of a conversation history.
|
|
15
|
+
* Uses JSON serialisation for simplicity; slightly over-counts JSON structural
|
|
16
|
+
* overhead (safer: we trim a little earlier than strictly necessary).
|
|
17
|
+
*/
|
|
18
|
+
export declare function historyCharCount(history: Anthropic.Messages.MessageParam[]): number;
|
|
19
|
+
/**
|
|
20
|
+
* Trim the oldest entries from `history` so the result is back below
|
|
21
|
+
* HISTORY_WARN_FRACTION of each cap. Always ensures the first remaining
|
|
22
|
+
* entry has role 'user' so the Anthropic API constraint is satisfied.
|
|
23
|
+
* Returns the (possibly unchanged) array and a flag indicating whether
|
|
24
|
+
* any trimming was done.
|
|
25
|
+
*/
|
|
26
|
+
export declare function trimHistory(history: Anthropic.Messages.MessageParam[], capChars: number, capTurns: number): {
|
|
27
|
+
history: Anthropic.Messages.MessageParam[];
|
|
28
|
+
trimmed: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Check whether a /clear hint should be shown. Returns the warning message
|
|
32
|
+
* string when history is at or above HISTORY_WARN_FRACTION of either cap,
|
|
33
|
+
* or null otherwise. Pure function — the "fires once per session" guard is
|
|
34
|
+
* maintained by the caller via historyWarnFiredRef.
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkHistoryWarnMsg(history: Anthropic.Messages.MessageParam[], capChars: number, capTurns: number): string | null;
|
|
2
37
|
export interface ChatMessage {
|
|
3
38
|
id: string;
|
|
4
39
|
role: 'user' | 'assistant' | 'system';
|
|
@@ -29,6 +64,8 @@ export interface RackMindState {
|
|
|
29
64
|
}
|
|
30
65
|
export interface RackMindActions {
|
|
31
66
|
sendMessage: (text: string) => Promise<void>;
|
|
67
|
+
/** Abort the in-flight AI turn (if any). Safe to call when idle. */
|
|
68
|
+
abortTurn: () => void;
|
|
32
69
|
clearMessages: () => void;
|
|
33
70
|
connect: () => Promise<void>;
|
|
34
71
|
disconnect: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRackMind.d.ts","sourceRoot":"","sources":["../../src/interactive/useRackMind.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useRackMind.d.ts","sourceRoot":"","sources":["../../src/interactive/useRackMind.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAIH,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAChC,MAAM,0BAA0B,CAAC;AAkBlC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,CAAC;AACzC,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,MAAM,CAEnF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAwBlE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CASf;AAMD,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,wBAAwB,CAAC;IACjC,kDAAkD;IAClD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,oEAAoE;IACpE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AA0BD,wBAAgB,WAAW,IAAI,aAAa,GAAG,eAAe,CAoa7D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
9
9
|
import { getAIProvider, } from '../ai/providers/index.js';
|
|
10
|
+
import { isAbortError } from '../ai/providers/anthropic-provider.js';
|
|
10
11
|
import { resolveUsableModelId } from '../ai/models.js';
|
|
11
12
|
import { ServerClient } from '../server/client.js';
|
|
12
13
|
import { getAnthropicApiKey, resolveServerAlias, readConfig, MachineKeyMismatchError, } from '../config/index.js';
|
|
@@ -14,6 +15,69 @@ import { logger } from '../utils/logger.js';
|
|
|
14
15
|
import { isAutoYes, getServerAliasOverride } from '../globals.js';
|
|
15
16
|
import { onShutdown, removeShutdownHandler } from '../utils/shutdown.js';
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
18
|
+
// History soft-cap
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Soft cap on conversation history. Tune to fit ≈80 % of the model's 200 K-token window.
|
|
22
|
+
* 400 K chars ≈ 100 K tokens at ~4 chars/token — leaves headroom for the system prompt,
|
|
23
|
+
* tool definitions, and the model's own 4 K max_tokens response budget.
|
|
24
|
+
*/
|
|
25
|
+
export const HISTORY_CAP_CHARS = 400_000;
|
|
26
|
+
/** Maximum number of API message entries before trimming. */
|
|
27
|
+
export const HISTORY_CAP_TURNS = 150;
|
|
28
|
+
/** Fraction of the cap at which a /clear hint is shown (fires once per session). */
|
|
29
|
+
export const HISTORY_WARN_FRACTION = 0.75;
|
|
30
|
+
/**
|
|
31
|
+
* Estimate the total character count of a conversation history.
|
|
32
|
+
* Uses JSON serialisation for simplicity; slightly over-counts JSON structural
|
|
33
|
+
* overhead (safer: we trim a little earlier than strictly necessary).
|
|
34
|
+
*/
|
|
35
|
+
export function historyCharCount(history) {
|
|
36
|
+
return JSON.stringify(history).length;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Trim the oldest entries from `history` so the result is back below
|
|
40
|
+
* HISTORY_WARN_FRACTION of each cap. Always ensures the first remaining
|
|
41
|
+
* entry has role 'user' so the Anthropic API constraint is satisfied.
|
|
42
|
+
* Returns the (possibly unchanged) array and a flag indicating whether
|
|
43
|
+
* any trimming was done.
|
|
44
|
+
*/
|
|
45
|
+
export function trimHistory(history, capChars, capTurns) {
|
|
46
|
+
if (historyCharCount(history) <= capChars && history.length <= capTurns) {
|
|
47
|
+
return { history, trimmed: false };
|
|
48
|
+
}
|
|
49
|
+
const targetChars = Math.floor(capChars * HISTORY_WARN_FRACTION);
|
|
50
|
+
const targetTurns = Math.floor(capTurns * HISTORY_WARN_FRACTION);
|
|
51
|
+
let slice = history;
|
|
52
|
+
let didTrim = false;
|
|
53
|
+
while (slice.length > 2 &&
|
|
54
|
+
(historyCharCount(slice) > targetChars || slice.length > targetTurns)) {
|
|
55
|
+
slice = slice.slice(1);
|
|
56
|
+
didTrim = true;
|
|
57
|
+
// Preserve the Anthropic API invariant: history must start with a user message.
|
|
58
|
+
while (slice.length > 1 && slice[0].role !== 'user') {
|
|
59
|
+
slice = slice.slice(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { history: slice, trimmed: didTrim };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check whether a /clear hint should be shown. Returns the warning message
|
|
66
|
+
* string when history is at or above HISTORY_WARN_FRACTION of either cap,
|
|
67
|
+
* or null otherwise. Pure function — the "fires once per session" guard is
|
|
68
|
+
* maintained by the caller via historyWarnFiredRef.
|
|
69
|
+
*/
|
|
70
|
+
export function checkHistoryWarnMsg(history, capChars, capTurns) {
|
|
71
|
+
const charFrac = historyCharCount(history) / capChars;
|
|
72
|
+
const turnFrac = history.length / capTurns;
|
|
73
|
+
const maxFrac = Math.max(charFrac, turnFrac);
|
|
74
|
+
if (maxFrac >= HISTORY_WARN_FRACTION) {
|
|
75
|
+
const pct = Math.round(maxFrac * 100);
|
|
76
|
+
return `History is large (${pct}% of context). Consider /clear to start fresh.`;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
17
81
|
// ID generation
|
|
18
82
|
// ---------------------------------------------------------------------------
|
|
19
83
|
let messageCounter = 0;
|
|
@@ -21,6 +85,14 @@ function nextMessageId() {
|
|
|
21
85
|
messageCounter += 1;
|
|
22
86
|
return `msg-${Date.now()}-${messageCounter}`;
|
|
23
87
|
}
|
|
88
|
+
function makeSystemMessage(content) {
|
|
89
|
+
return {
|
|
90
|
+
id: nextMessageId(),
|
|
91
|
+
role: 'system',
|
|
92
|
+
content,
|
|
93
|
+
timestamp: Date.now(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
24
96
|
// ---------------------------------------------------------------------------
|
|
25
97
|
// Hook
|
|
26
98
|
// ---------------------------------------------------------------------------
|
|
@@ -43,6 +115,16 @@ export function useRackMind() {
|
|
|
43
115
|
const aiClientRef = useRef(null);
|
|
44
116
|
const historyRef = useRef([]);
|
|
45
117
|
const toolExecutionsRef = useRef([]);
|
|
118
|
+
/** AbortController for the currently in-flight turn, null when idle. */
|
|
119
|
+
const abortControllerRef = useRef(null);
|
|
120
|
+
/**
|
|
121
|
+
* Mirror of the pendingConfirmation React state kept in a ref so that
|
|
122
|
+
* abortTurn() can auto-decline the dialog synchronously without waiting
|
|
123
|
+
* for a React re-render, which would leave the confirm await hanging.
|
|
124
|
+
*/
|
|
125
|
+
const pendingConfirmationRef = useRef(null);
|
|
126
|
+
/** Tracks whether the "history is large" hint has been shown this session. */
|
|
127
|
+
const historyWarnFiredRef = useRef(false);
|
|
46
128
|
// -----------------------------------------------------------------------
|
|
47
129
|
// Connect to server
|
|
48
130
|
// -----------------------------------------------------------------------
|
|
@@ -183,7 +265,30 @@ export function useRackMind() {
|
|
|
183
265
|
setStreamingText('');
|
|
184
266
|
setError(null);
|
|
185
267
|
toolExecutionsRef.current = [];
|
|
268
|
+
// ------------------------------------------------------------------
|
|
269
|
+
// History soft-cap: warn when approaching the limit, trim when over.
|
|
270
|
+
// ------------------------------------------------------------------
|
|
271
|
+
if (!historyWarnFiredRef.current) {
|
|
272
|
+
const warnMsg = checkHistoryWarnMsg(historyRef.current, HISTORY_CAP_CHARS, HISTORY_CAP_TURNS);
|
|
273
|
+
if (warnMsg !== null) {
|
|
274
|
+
historyWarnFiredRef.current = true;
|
|
275
|
+
setMessages((prev) => [...prev, makeSystemMessage(warnMsg)]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
const trimResult = trimHistory(historyRef.current, HISTORY_CAP_CHARS, HISTORY_CAP_TURNS);
|
|
279
|
+
if (trimResult.trimmed) {
|
|
280
|
+
historyRef.current = trimResult.history;
|
|
281
|
+
setMessages((prev) => [
|
|
282
|
+
...prev,
|
|
283
|
+
makeSystemMessage('Trimmed old history to fit context.'),
|
|
284
|
+
]);
|
|
285
|
+
}
|
|
286
|
+
// ------------------------------------------------------------------
|
|
186
287
|
let accumulatedText = '';
|
|
288
|
+
// One AbortController per turn — stored in a ref so abortTurn() can
|
|
289
|
+
// reach it. Cleared in the finally block so the ref is never stale.
|
|
290
|
+
const ac = new AbortController();
|
|
291
|
+
abortControllerRef.current = ac;
|
|
187
292
|
const callbacks = {
|
|
188
293
|
onText: (chunk) => {
|
|
189
294
|
accumulatedText += chunk;
|
|
@@ -218,17 +323,21 @@ export function useRackMind() {
|
|
|
218
323
|
label: action.label,
|
|
219
324
|
details: action.details,
|
|
220
325
|
});
|
|
221
|
-
|
|
326
|
+
const confirmation = {
|
|
222
327
|
action,
|
|
223
328
|
respond: (allow) => {
|
|
329
|
+
pendingConfirmationRef.current = null;
|
|
224
330
|
setPendingConfirmation(null);
|
|
225
331
|
resolve(allow);
|
|
226
332
|
},
|
|
227
|
-
}
|
|
333
|
+
};
|
|
334
|
+
pendingConfirmationRef.current = confirmation;
|
|
335
|
+
setPendingConfirmation(confirmation);
|
|
228
336
|
}),
|
|
229
337
|
};
|
|
230
338
|
try {
|
|
231
|
-
const updatedHistory = await aiClientRef.current.chatMultiTurn(trimmed, historyRef.current, serverClientRef.current, connection.serverAlias, callbacks);
|
|
339
|
+
const updatedHistory = await aiClientRef.current.chatMultiTurn(trimmed, historyRef.current, serverClientRef.current, connection.serverAlias, callbacks, ac.signal);
|
|
340
|
+
// Only persist history when the turn completed normally.
|
|
232
341
|
historyRef.current = updatedHistory;
|
|
233
342
|
// Add assistant message with final text
|
|
234
343
|
const assistantMessage = {
|
|
@@ -243,42 +352,70 @@ export function useRackMind() {
|
|
|
243
352
|
setMessages((prev) => [...prev, assistantMessage]);
|
|
244
353
|
}
|
|
245
354
|
catch (err) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
355
|
+
if (isAbortError(err)) {
|
|
356
|
+
// User cancelled — do NOT persist the partial turn to history,
|
|
357
|
+
// do NOT surface a red error. Show a quiet "Cancelled." note.
|
|
358
|
+
logger.info('Interactive turn cancelled by user');
|
|
359
|
+
const cancelledMessage = {
|
|
360
|
+
id: nextMessageId(),
|
|
361
|
+
role: 'system',
|
|
362
|
+
content: 'Cancelled.',
|
|
363
|
+
timestamp: Date.now(),
|
|
364
|
+
};
|
|
365
|
+
setMessages((prev) => [...prev, cancelledMessage]);
|
|
255
366
|
}
|
|
256
|
-
else
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
userError =
|
|
367
|
+
else {
|
|
368
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
369
|
+
logger.error('Interactive chat failed', { error: message });
|
|
370
|
+
// Provide human-readable errors
|
|
371
|
+
let userError = message;
|
|
372
|
+
if (message.includes('401') || message.includes('authentication_error')) {
|
|
373
|
+
userError = 'Anthropic API authentication failed. Check your API key.';
|
|
374
|
+
}
|
|
375
|
+
else if (message.includes('429') || message.includes('rate_limit')) {
|
|
376
|
+
userError = 'Rate limit hit. Please wait and try again.';
|
|
377
|
+
}
|
|
378
|
+
else if (message.includes('overloaded')) {
|
|
379
|
+
userError = 'Anthropic API is overloaded. Try again in a moment.';
|
|
380
|
+
}
|
|
381
|
+
else if (message.includes('ECONNREFUSED') || message.includes('ETIMEDOUT')) {
|
|
382
|
+
userError = 'Cannot connect to server. Check your configuration.';
|
|
383
|
+
}
|
|
384
|
+
const errorMessage = {
|
|
385
|
+
id: nextMessageId(),
|
|
386
|
+
role: 'system',
|
|
387
|
+
content: userError,
|
|
388
|
+
timestamp: Date.now(),
|
|
389
|
+
};
|
|
390
|
+
setMessages((prev) => [...prev, errorMessage]);
|
|
261
391
|
}
|
|
262
|
-
const errorMessage = {
|
|
263
|
-
id: nextMessageId(),
|
|
264
|
-
role: 'system',
|
|
265
|
-
content: userError,
|
|
266
|
-
timestamp: Date.now(),
|
|
267
|
-
};
|
|
268
|
-
setMessages((prev) => [...prev, errorMessage]);
|
|
269
392
|
}
|
|
270
393
|
finally {
|
|
394
|
+
abortControllerRef.current = null;
|
|
395
|
+
pendingConfirmationRef.current = null;
|
|
396
|
+
setPendingConfirmation(null);
|
|
271
397
|
setIsThinking(false);
|
|
272
398
|
setStreamingText('');
|
|
273
399
|
setActiveTools([]);
|
|
274
400
|
}
|
|
275
401
|
}, [connection.serverAlias]);
|
|
276
402
|
// -----------------------------------------------------------------------
|
|
403
|
+
// Abort current turn
|
|
404
|
+
// -----------------------------------------------------------------------
|
|
405
|
+
const abortTurn = useCallback(() => {
|
|
406
|
+
// Auto-decline any open destructive-action dialog so the awaiting
|
|
407
|
+
// confirm() Promise resolves (to false) and unblocks the tool loop.
|
|
408
|
+
// Without this the chatMultiTurn await would hang even after abort().
|
|
409
|
+
pendingConfirmationRef.current?.respond(false);
|
|
410
|
+
abortControllerRef.current?.abort();
|
|
411
|
+
}, []);
|
|
412
|
+
// -----------------------------------------------------------------------
|
|
277
413
|
// Clear messages
|
|
278
414
|
// -----------------------------------------------------------------------
|
|
279
415
|
const clearMessages = useCallback(() => {
|
|
280
416
|
setMessages([]);
|
|
281
417
|
historyRef.current = [];
|
|
418
|
+
historyWarnFiredRef.current = false;
|
|
282
419
|
setStreamingText('');
|
|
283
420
|
setError(null);
|
|
284
421
|
}, []);
|
|
@@ -319,6 +456,7 @@ export function useRackMind() {
|
|
|
319
456
|
error,
|
|
320
457
|
pendingConfirmation,
|
|
321
458
|
sendMessage,
|
|
459
|
+
abortTurn,
|
|
322
460
|
clearMessages,
|
|
323
461
|
connect,
|
|
324
462
|
disconnect,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRackMind.js","sourceRoot":"","sources":["../../src/interactive/useRackMind.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useRackMind.js","sourceRoot":"","sources":["../../src/interactive/useRackMind.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-safety.d.ts","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"AAaA,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"command-safety.d.ts","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"AAaA,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAwLlE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE"}
|
|
@@ -113,6 +113,20 @@ export const DANGEROUS_PATTERNS = [
|
|
|
113
113
|
pattern: /\brm\b[^|;&]*\/etc\/(?:passwd|shadow|sudoers|group|gshadow)\b/i,
|
|
114
114
|
label: 'rm /etc/passwd|shadow|sudoers (auth file deletion)',
|
|
115
115
|
},
|
|
116
|
+
// sed -i (in-place edit) on auth files — any in-place sed on these files
|
|
117
|
+
// is dangerous regardless of the sed command (substitution or delete).
|
|
118
|
+
{
|
|
119
|
+
pattern: /\bsed\b[^|;&]*-i\b[^|;&]*\/etc\/(?:passwd|shadow|sudoers|group|gshadow)\b/i,
|
|
120
|
+
label: 'sed -i on auth file (in-place edit of auth file)',
|
|
121
|
+
},
|
|
122
|
+
// truncate -s 0 on system paths — zeros out a file without deleting it,
|
|
123
|
+
// bypassing the `rm` blocklist while having the same effect.
|
|
124
|
+
{
|
|
125
|
+
pattern: /\btruncate\b[^|;&]*-s\s*0\b[^|;&]*\/(?:etc|boot|usr|lib(?:64)?|bin|sbin|root)(?:\/|$|\s)/i,
|
|
126
|
+
label: 'truncate -s 0 on system path (file zeroing)',
|
|
127
|
+
},
|
|
128
|
+
// crontab -r removes ALL of the user's cron jobs with no undo.
|
|
129
|
+
{ pattern: /\bcrontab\b[^|;&]*-r\b/i, label: 'crontab -r (cron removal)' },
|
|
116
130
|
// -----------------------------------------------------------------------
|
|
117
131
|
// Process disruption — kill init / PID 1
|
|
118
132
|
// -----------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-safety.js","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"command-safety.js","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAChF,yEAAyE;AACzE,0EAA0E;AAC1E,uBAAuB;AACvB,8EAA8E;AAE9E,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACpE,0EAA0E;IAC1E,yBAAyB;IACzB,0EAA0E;IAC1E,mEAAmE;IACnE,gEAAgE;IAChE,yEAAyE;IACzE;QACI,OAAO,EACH,0IAA0I;QAC9I,KAAK,EAAE,wCAAwC;KAClD;IACD,+DAA+D;IAC/D;QACI,OAAO,EAAE,gEAAgE;QACzE,KAAK,EAAE,yBAAyB;KACnC;IACD,kEAAkE;IAClE;QACI,OAAO,EAAE,8CAA8C;QACvD,KAAK,EAAE,+CAA+C;KACzD;IACD,oEAAoE;IACpE;QACI,OAAO,EAAE,4DAA4D;QACrE,KAAK,EAAE,uCAAuC;KACjD;IACD;QACI,OAAO,EAAE,oDAAoD;QAC7D,KAAK,EAAE,uCAAuC;KACjD;IACD,0DAA0D;IAC1D;QACI,OAAO,EAAE,8DAA8D;QACvE,KAAK,EAAE,mDAAmD;KAC7D;IAED,0EAA0E;IAC1E,2CAA2C;IAC3C,0EAA0E;IAC1E,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3E,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAC1D,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC3D,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC7D,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC7D,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,oCAAoC,EAAE;IACvE,EAAE,OAAO,EAAE,qCAAqC,EAAE,KAAK,EAAE,kCAAkC,EAAE;IAC7F,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,sCAAsC,EAAE;IAClF,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,uCAAuC,EAAE;IACjF,EAAE,OAAO,EAAE,oDAAoD,EAAE,KAAK,EAAE,mBAAmB,EAAE;IAE7F,0EAA0E;IAC1E,0DAA0D;IAC1D,0EAA0E;IAC1E,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,sCAAsC,EAAE;IAC3F,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,yCAAyC,EAAE;IAC7F,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,wBAAwB,EAAE;IACjF,EAAE,OAAO,EAAE,kDAAkD,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACzF,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAc,EAAE;IAC3D,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,eAAe,EAAE;IAE7D,0EAA0E;IAC1E,sBAAsB;IACtB,0EAA0E;IAC1E;QACI,OAAO,EAAE,4DAA4D;QACrE,KAAK,EAAE,iDAAiD;KAC3D;IACD;QACI,OAAO,EAAE,6DAA6D;QACtE,KAAK,EAAE,8BAA8B;KACxC;IACD,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,mCAAmC,EAAE;IAC3E;QACI,OAAO,EAAE,mCAAmC;QAC5C,KAAK,EAAE,uDAAuD;KACjE;IACD;QACI,OAAO,EAAE,4BAA4B;QACrC,KAAK,EAAE,oDAAoD;KAC9D;IACD,EAAE,OAAO,EAAE,iCAAiC,EAAE,KAAK,EAAE,mCAAmC,EAAE;IAE1F,0EAA0E;IAC1E,oCAAoC;IACpC,0EAA0E;IAC1E,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,+BAA+B,EAAE;IACnE,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC9D,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,+BAA+B,EAAE;IACnE,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC9D;QACI,OAAO,EAAE,yCAAyC;QAClD,KAAK,EAAE,4CAA4C;KACtD;IACD;QACI,OAAO,EAAE,6BAA6B;QACtC,KAAK,EAAE,yCAAyC;KACnD;IACD,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,+BAA+B,EAAE;IACnF;QACI,OAAO,EAAE,uDAAuD;QAChE,KAAK,EAAE,2DAA2D;KACrE;IACD;QACI,OAAO,EAAE,gEAAgE;QACzE,KAAK,EAAE,oDAAoD;KAC9D;IACD,yEAAyE;IACzE,uEAAuE;IACvE;QACI,OAAO,EAAE,4EAA4E;QACrF,KAAK,EAAE,kDAAkD;KAC5D;IACD,wEAAwE;IACxE,6DAA6D;IAC7D;QACI,OAAO,EACH,2FAA2F;QAC/F,KAAK,EAAE,6CAA6C;KACvD;IACD,+DAA+D;IAC/D,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAE1E,0EAA0E;IAC1E,yCAAyC;IACzC,0EAA0E;IAC1E,EAAE,OAAO,EAAE,4CAA4C,EAAE,KAAK,EAAE,wBAAwB,EAAE;IAC1F,EAAE,OAAO,EAAE,0CAA0C,EAAE,KAAK,EAAE,cAAc,EAAE;IAC9E,EAAE,OAAO,EAAE,6CAA6C,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACpF,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACtF,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,YAAY,EAAE;IAC1E,EAAE,OAAO,EAAE,2CAA2C,EAAE,KAAK,EAAE,eAAe,EAAE;IAEhF,0EAA0E;IAC1E,2BAA2B;IAC3B,0EAA0E;IAC1E,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACxF;QACI,OAAO,EAAE,gDAAgD;QACzD,KAAK,EAAE,6BAA6B;KACvC;IACD;QACI,OAAO,EAAE,4DAA4D;QACrE,KAAK,EAAE,gCAAgC;KAC1C;IACD,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACxD,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACtD,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,+BAA+B,EAAE;IAE7E,0EAA0E;IAC1E,oBAAoB;IACpB,0EAA0E;IAC1E,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAEpD,0EAA0E;IAC1E,YAAY;IACZ,0EAA0E;IAC1E,wEAAwE;IACxE,oEAAoE;IACpE,6CAA6C;IAC7C;QACI,OAAO,EAAE,sDAAsD;QAC/D,KAAK,EAAE,WAAW;KACrB;IACD,yEAAyE;IACzE,qEAAqE;IACrE,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,WAAW,EAAE;IAE9D,0EAA0E;IAC1E,qDAAqD;IACrD,0EAA0E;IAC1E;QACI,OAAO,EAAE,kFAAkF;QAC3F,KAAK,EAAE,kDAAkD;KAC5D;IAED,0EAA0E;IAC1E,2BAA2B;IAC3B,0EAA0E;IAC1E,EAAE,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACjF;QACI,OAAO,EAAE,+BAA+B;QACxC,KAAK,EAAE,0CAA0C;KACpD;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
declare function getLogFile(): string;
|
|
2
|
+
/**
|
|
3
|
+
* Attempt to acquire the rotation lock for `logFile` using an O_EXCL sentinel
|
|
4
|
+
* file (`<logFile>.rotating`).
|
|
5
|
+
*
|
|
6
|
+
* Returns `true` when the lock is acquired; the caller MUST call
|
|
7
|
+
* `releaseRotationLock` in a `finally` block. Returns `false` when another
|
|
8
|
+
* process is actively rotating — the caller should skip this cycle silently.
|
|
9
|
+
*
|
|
10
|
+
* A sentinel whose mtime is older than SENTINEL_STALE_MS is treated as
|
|
11
|
+
* abandoned by a crashed process and is forcibly reclaimed.
|
|
12
|
+
*/
|
|
13
|
+
declare function acquireRotationLock(logFile: string): boolean;
|
|
14
|
+
declare function releaseRotationLock(logFile: string): void;
|
|
2
15
|
/**
|
|
3
16
|
* Rotate `logFile` if it exceeds MAX_FILE_BYTES.
|
|
4
17
|
*
|
|
@@ -9,6 +22,10 @@ declare function getLogFile(): string;
|
|
|
9
22
|
* cost) and best-effort — any failure here must NOT throw, so that a broken
|
|
10
23
|
* filesystem state cannot crash the CLI or the MCP. We swallow errors and let
|
|
11
24
|
* the caller fall back to appending to the (possibly oversized) file.
|
|
25
|
+
*
|
|
26
|
+
* Concurrent-write safety: an O_EXCL sentinel file (`<logFile>.rotating`)
|
|
27
|
+
* ensures exactly one process executes the rename sequence. The loser skips
|
|
28
|
+
* the cycle silently; the next write will re-check the size and retry.
|
|
12
29
|
*/
|
|
13
30
|
declare function rotateIfNeeded(logFile: string): void;
|
|
14
31
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
@@ -22,7 +39,11 @@ export declare const logger: {
|
|
|
22
39
|
export declare const __testing: {
|
|
23
40
|
MAX_FILE_BYTES: number;
|
|
24
41
|
MAX_BACKUPS: number;
|
|
42
|
+
SENTINEL_SUFFIX: string;
|
|
43
|
+
SENTINEL_STALE_MS: number;
|
|
25
44
|
rotateIfNeeded: typeof rotateIfNeeded;
|
|
45
|
+
acquireRotationLock: typeof acquireRotationLock;
|
|
46
|
+
releaseRotationLock: typeof releaseRotationLock;
|
|
26
47
|
getLogFile: typeof getLogFile;
|
|
27
48
|
};
|
|
28
49
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AA0BA,iBAAS,UAAU,IAAI,MAAM,CAG5B;AAMD;;;;;;;;;;GAUG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA2BrD;AAED,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOlD;AAED;;;;;;;;;;;;;;GAcG;AACH,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgD7C;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAW3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAyBD,eAAO,MAAM,MAAM;qBACE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBACvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBACtC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBACrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1D,CAAC;AAIF,eAAO,MAAM,SAAS;;;;;;;;;CASrB,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -10,6 +10,12 @@ const LOG_DIR = path.join(os.homedir(), '.rackmind', 'logs');
|
|
|
10
10
|
// = 10 MB * 6 = 60 MB per log basename.
|
|
11
11
|
const MAX_FILE_BYTES = 10 * 1024 * 1024;
|
|
12
12
|
const MAX_BACKUPS = 5;
|
|
13
|
+
// Sentinel-file lock constants for concurrent-rotation safety.
|
|
14
|
+
// Multiple processes (CLI + MCP child, cron + interactive) may log to the same
|
|
15
|
+
// file. We use an O_EXCL sentinel to guarantee only one process executes the
|
|
16
|
+
// rotate-and-rename sequence at a time.
|
|
17
|
+
const SENTINEL_SUFFIX = '.rotating';
|
|
18
|
+
const SENTINEL_STALE_MS = 30_000; // 30 s — treat older sentinels as from a crashed process
|
|
13
19
|
function ensureLogDir() {
|
|
14
20
|
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
15
21
|
}
|
|
@@ -20,6 +26,56 @@ function getLogFile() {
|
|
|
20
26
|
function formatTimestamp() {
|
|
21
27
|
return new Date().toISOString();
|
|
22
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Attempt to acquire the rotation lock for `logFile` using an O_EXCL sentinel
|
|
31
|
+
* file (`<logFile>.rotating`).
|
|
32
|
+
*
|
|
33
|
+
* Returns `true` when the lock is acquired; the caller MUST call
|
|
34
|
+
* `releaseRotationLock` in a `finally` block. Returns `false` when another
|
|
35
|
+
* process is actively rotating — the caller should skip this cycle silently.
|
|
36
|
+
*
|
|
37
|
+
* A sentinel whose mtime is older than SENTINEL_STALE_MS is treated as
|
|
38
|
+
* abandoned by a crashed process and is forcibly reclaimed.
|
|
39
|
+
*/
|
|
40
|
+
function acquireRotationLock(logFile) {
|
|
41
|
+
const sentinel = `${logFile}${SENTINEL_SUFFIX}`;
|
|
42
|
+
try {
|
|
43
|
+
// 'wx' = O_WRONLY|O_CREAT|O_EXCL — atomic on POSIX; throws EEXIST if
|
|
44
|
+
// the sentinel is already present.
|
|
45
|
+
const fd = fs.openSync(sentinel, 'wx');
|
|
46
|
+
fs.closeSync(fd);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err.code !== 'EEXIST') {
|
|
51
|
+
// Unexpected error (EACCES, ENOENT, …) — skip rotation rather than crash.
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
// Sentinel exists. Check if it belongs to a crashed process.
|
|
55
|
+
try {
|
|
56
|
+
const st = fs.statSync(sentinel);
|
|
57
|
+
if (Date.now() - st.mtimeMs > SENTINEL_STALE_MS) {
|
|
58
|
+
fs.unlinkSync(sentinel);
|
|
59
|
+
const fd = fs.openSync(sentinel, 'wx');
|
|
60
|
+
fs.closeSync(fd);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Lost the reclaim race or sentinel vanished — skip this cycle.
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function releaseRotationLock(logFile) {
|
|
71
|
+
const sentinel = `${logFile}${SENTINEL_SUFFIX}`;
|
|
72
|
+
try {
|
|
73
|
+
fs.unlinkSync(sentinel);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// ignore — may already be gone
|
|
77
|
+
}
|
|
78
|
+
}
|
|
23
79
|
/**
|
|
24
80
|
* Rotate `logFile` if it exceeds MAX_FILE_BYTES.
|
|
25
81
|
*
|
|
@@ -30,6 +86,10 @@ function formatTimestamp() {
|
|
|
30
86
|
* cost) and best-effort — any failure here must NOT throw, so that a broken
|
|
31
87
|
* filesystem state cannot crash the CLI or the MCP. We swallow errors and let
|
|
32
88
|
* the caller fall back to appending to the (possibly oversized) file.
|
|
89
|
+
*
|
|
90
|
+
* Concurrent-write safety: an O_EXCL sentinel file (`<logFile>.rotating`)
|
|
91
|
+
* ensures exactly one process executes the rename sequence. The loser skips
|
|
92
|
+
* the cycle silently; the next write will re-check the size and retry.
|
|
33
93
|
*/
|
|
34
94
|
function rotateIfNeeded(logFile) {
|
|
35
95
|
try {
|
|
@@ -41,7 +101,20 @@ function rotateIfNeeded(logFile) {
|
|
|
41
101
|
// File doesn't exist yet — nothing to rotate.
|
|
42
102
|
return;
|
|
43
103
|
}
|
|
104
|
+
// Skip silently if another process is already rotating.
|
|
105
|
+
if (!acquireRotationLock(logFile))
|
|
106
|
+
return;
|
|
44
107
|
try {
|
|
108
|
+
// Re-stat after acquiring the lock: if the winning peer already rotated,
|
|
109
|
+
// the live file will be gone or small — no work needed.
|
|
110
|
+
try {
|
|
111
|
+
const stat = fs.statSync(logFile);
|
|
112
|
+
if (stat.size <= MAX_FILE_BYTES)
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return; // file disappeared — nothing to rotate
|
|
117
|
+
}
|
|
45
118
|
// Drop the oldest backup if it exists.
|
|
46
119
|
const oldest = `${logFile}.${MAX_BACKUPS}`;
|
|
47
120
|
try {
|
|
@@ -68,6 +141,9 @@ function rotateIfNeeded(logFile) {
|
|
|
68
141
|
// Rotation failed — fall through, caller will append to the existing
|
|
69
142
|
// file. Bounded growth is preferred to a crashed CLI.
|
|
70
143
|
}
|
|
144
|
+
finally {
|
|
145
|
+
releaseRotationLock(logFile);
|
|
146
|
+
}
|
|
71
147
|
}
|
|
72
148
|
const LOG_LEVELS = {
|
|
73
149
|
debug: 0,
|
|
@@ -112,7 +188,11 @@ export const logger = {
|
|
|
112
188
|
export const __testing = {
|
|
113
189
|
MAX_FILE_BYTES,
|
|
114
190
|
MAX_BACKUPS,
|
|
191
|
+
SENTINEL_SUFFIX,
|
|
192
|
+
SENTINEL_STALE_MS,
|
|
115
193
|
rotateIfNeeded,
|
|
194
|
+
acquireRotationLock,
|
|
195
|
+
releaseRotationLock,
|
|
116
196
|
getLogFile,
|
|
117
197
|
};
|
|
118
198
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAE7D,iFAAiF;AACjF,gFAAgF;AAChF,+CAA+C;AAC/C,8DAA8D;AAC9D,uCAAuC;AACvC,wCAAwC;AACxC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,+DAA+D;AAC/D,+EAA+E;AAC/E,8EAA8E;AAC9E,wCAAwC;AACxC,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,yDAAyD;AAE3F,SAAS,YAAY;IACjB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU;IACf,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,eAAe;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAAC,OAAe;IACxC,MAAM,QAAQ,GAAG,GAAG,OAAO,GAAG,eAAe,EAAE,CAAC;IAChD,IAAI,CAAC;QACD,qEAAqE;QACrE,mCAAmC;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,0EAA0E;YAC1E,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,8DAA8D;QAC9D,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,GAAG,iBAAiB,EAAE,CAAC;gBAC9C,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,gEAAgE;QACpE,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IACxC,MAAM,QAAQ,GAAG,GAAG,OAAO,GAAG,eAAe,EAAE,CAAC;IAChD,IAAI,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,+BAA+B;IACnC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,cAAc,CAAC,OAAe;IACnC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc;YAAE,OAAO;IAC5C,CAAC;IAAC,MAAM,CAAC;QACL,8CAA8C;QAC9C,OAAO;IACX,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO;IAC1C,IAAI,CAAC;QACD,yEAAyE;QACzE,wDAAwD;QACxD,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAO;QAC5C,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,uCAAuC;QACnD,CAAC;QAED,uCAAuC;QACvC,MAAM,MAAM,GAAG,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC;YACD,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,yBAAyB;QAC7B,CAAC;QAED,qDAAqD;QACrD,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACL,8CAA8C;YAClD,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,qEAAqE;QACrE,sDAAsD;IAC1D,CAAC;YAAS,CAAC;QACP,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACL,CAAC;AAID,MAAM,UAAU,GAA6B;IACzC,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAC;AAEF,IAAI,YAAY,GAAa,MAAM,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,KAAe;IACvC,YAAY,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAC9B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;IAC9E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO;IAE9B,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG;YACV,SAAS,EAAE,eAAe,EAAE;YAC5B,KAAK;YACL,OAAO;YACP,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC;QACF,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,qDAAqD;IACzD,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,KAAK,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;IAC5F,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;IAC1F,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;IAC1F,KAAK,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;CAC/F,CAAC;AAEF,6EAA6E;AAC7E,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,cAAc;IACd,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,UAAU;CACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rackmind-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI interface for RackMind — Claude Code-style terminal experience for managing Proxmox servers, LXC containers, and QEMU VMs from your terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
]
|
|
90
90
|
},
|
|
91
91
|
"author": "RackMind <hello@rackmind.ai>",
|
|
92
|
-
"license": "
|
|
92
|
+
"license": "BUSL-1.1",
|
|
93
93
|
"engines": {
|
|
94
94
|
"node": ">=20.0.0"
|
|
95
95
|
},
|