@appkit/llamacpp-cli 2.0.0 → 2.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 +271 -277
- package/dist/cli.js +133 -23
- package/dist/cli.js.map +1 -1
- package/dist/commands/admin/config.d.ts +1 -1
- package/dist/commands/admin/config.js +5 -5
- package/dist/commands/admin/config.js.map +1 -1
- package/dist/commands/admin/log-config.d.ts +11 -0
- package/dist/commands/admin/log-config.d.ts.map +1 -0
- package/dist/commands/admin/log-config.js +159 -0
- package/dist/commands/admin/log-config.js.map +1 -0
- package/dist/commands/admin/logs.d.ts +2 -3
- package/dist/commands/admin/logs.d.ts.map +1 -1
- package/dist/commands/admin/logs.js +6 -48
- package/dist/commands/admin/logs.js.map +1 -1
- package/dist/commands/admin/status.d.ts.map +1 -1
- package/dist/commands/admin/status.js +1 -0
- package/dist/commands/admin/status.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +63 -196
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create.d.ts +3 -2
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +24 -97
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +7 -24
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/internal/server-wrapper.d.ts +15 -0
- package/dist/commands/internal/server-wrapper.d.ts.map +1 -0
- package/dist/commands/internal/server-wrapper.js +126 -0
- package/dist/commands/internal/server-wrapper.js.map +1 -0
- package/dist/commands/logs-all.d.ts +0 -2
- package/dist/commands/logs-all.d.ts.map +1 -1
- package/dist/commands/logs-all.js +1 -61
- package/dist/commands/logs-all.js.map +1 -1
- package/dist/commands/logs.d.ts +2 -5
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +104 -120
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/migrate-labels.d.ts +12 -0
- package/dist/commands/migrate-labels.d.ts.map +1 -0
- package/dist/commands/migrate-labels.js +160 -0
- package/dist/commands/migrate-labels.js.map +1 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +2 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +22 -48
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/router/config.d.ts +1 -1
- package/dist/commands/router/config.js +6 -6
- package/dist/commands/router/config.js.map +1 -1
- package/dist/commands/router/logs.d.ts +2 -4
- package/dist/commands/router/logs.d.ts.map +1 -1
- package/dist/commands/router/logs.js +34 -189
- package/dist/commands/router/logs.js.map +1 -1
- package/dist/commands/router/status.d.ts.map +1 -1
- package/dist/commands/router/status.js +1 -0
- package/dist/commands/router/status.js.map +1 -1
- package/dist/commands/server-show.d.ts.map +1 -1
- package/dist/commands/server-show.js +3 -0
- package/dist/commands/server-show.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -72
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +10 -26
- package/dist/commands/stop.js.map +1 -1
- package/dist/launchers/llamacpp-admin +8 -0
- package/dist/launchers/llamacpp-router +8 -0
- package/dist/launchers/llamacpp-server +8 -0
- package/dist/lib/admin-manager.d.ts +4 -0
- package/dist/lib/admin-manager.d.ts.map +1 -1
- package/dist/lib/admin-manager.js +42 -18
- package/dist/lib/admin-manager.js.map +1 -1
- package/dist/lib/admin-server.d.ts +48 -1
- package/dist/lib/admin-server.d.ts.map +1 -1
- package/dist/lib/admin-server.js +632 -238
- package/dist/lib/admin-server.js.map +1 -1
- package/dist/lib/config-generator.d.ts +1 -0
- package/dist/lib/config-generator.d.ts.map +1 -1
- package/dist/lib/config-generator.js +12 -5
- package/dist/lib/config-generator.js.map +1 -1
- package/dist/lib/keyboard-manager.d.ts +162 -0
- package/dist/lib/keyboard-manager.d.ts.map +1 -0
- package/dist/lib/keyboard-manager.js +247 -0
- package/dist/lib/keyboard-manager.js.map +1 -0
- package/dist/lib/label-migration.d.ts +65 -0
- package/dist/lib/label-migration.d.ts.map +1 -0
- package/dist/lib/label-migration.js +458 -0
- package/dist/lib/label-migration.js.map +1 -0
- package/dist/lib/launchctl-manager.d.ts +9 -0
- package/dist/lib/launchctl-manager.d.ts.map +1 -1
- package/dist/lib/launchctl-manager.js +65 -19
- package/dist/lib/launchctl-manager.js.map +1 -1
- package/dist/lib/log-management-service.d.ts +51 -0
- package/dist/lib/log-management-service.d.ts.map +1 -0
- package/dist/lib/log-management-service.js +124 -0
- package/dist/lib/log-management-service.js.map +1 -0
- package/dist/lib/log-workers.d.ts +70 -0
- package/dist/lib/log-workers.d.ts.map +1 -0
- package/dist/lib/log-workers.js +217 -0
- package/dist/lib/log-workers.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +9 -1
- package/dist/lib/model-downloader.d.ts.map +1 -1
- package/dist/lib/model-downloader.js +98 -1
- package/dist/lib/model-downloader.js.map +1 -1
- package/dist/lib/model-management-service.d.ts +60 -0
- package/dist/lib/model-management-service.d.ts.map +1 -0
- package/dist/lib/model-management-service.js +246 -0
- package/dist/lib/model-management-service.js.map +1 -0
- package/dist/lib/model-management-service.test.d.ts +2 -0
- package/dist/lib/model-management-service.test.d.ts.map +1 -0
- package/dist/lib/model-management-service.test.js.map +1 -0
- package/dist/lib/model-scanner.d.ts +15 -3
- package/dist/lib/model-scanner.d.ts.map +1 -1
- package/dist/lib/model-scanner.js +174 -17
- package/dist/lib/model-scanner.js.map +1 -1
- package/dist/lib/openapi-spec.d.ts +1335 -0
- package/dist/lib/openapi-spec.d.ts.map +1 -0
- package/dist/lib/openapi-spec.js +1017 -0
- package/dist/lib/openapi-spec.js.map +1 -0
- package/dist/lib/router-logger.d.ts +1 -1
- package/dist/lib/router-logger.d.ts.map +1 -1
- package/dist/lib/router-logger.js +13 -11
- package/dist/lib/router-logger.js.map +1 -1
- package/dist/lib/router-manager.d.ts +4 -0
- package/dist/lib/router-manager.d.ts.map +1 -1
- package/dist/lib/router-manager.js +30 -18
- package/dist/lib/router-manager.js.map +1 -1
- package/dist/lib/router-server.d.ts.map +1 -1
- package/dist/lib/router-server.js +22 -12
- package/dist/lib/router-server.js.map +1 -1
- package/dist/lib/server-config-service.d.ts +51 -0
- package/dist/lib/server-config-service.d.ts.map +1 -0
- package/dist/lib/server-config-service.js +310 -0
- package/dist/lib/server-config-service.js.map +1 -0
- package/dist/lib/server-config-service.test.d.ts +2 -0
- package/dist/lib/server-config-service.test.d.ts.map +1 -0
- package/dist/lib/server-config-service.test.js.map +1 -0
- package/dist/lib/server-lifecycle-service.d.ts +172 -0
- package/dist/lib/server-lifecycle-service.d.ts.map +1 -0
- package/dist/lib/server-lifecycle-service.js +619 -0
- package/dist/lib/server-lifecycle-service.js.map +1 -0
- package/dist/lib/state-manager.d.ts +18 -1
- package/dist/lib/state-manager.d.ts.map +1 -1
- package/dist/lib/state-manager.js +51 -2
- package/dist/lib/state-manager.js.map +1 -1
- package/dist/lib/status-checker.d.ts +11 -4
- package/dist/lib/status-checker.d.ts.map +1 -1
- package/dist/lib/status-checker.js +34 -1
- package/dist/lib/status-checker.js.map +1 -1
- package/dist/lib/validation-service.d.ts +43 -0
- package/dist/lib/validation-service.d.ts.map +1 -0
- package/dist/lib/validation-service.js +112 -0
- package/dist/lib/validation-service.js.map +1 -0
- package/dist/lib/validation-service.test.d.ts +2 -0
- package/dist/lib/validation-service.test.d.ts.map +1 -0
- package/dist/lib/validation-service.test.js.map +1 -0
- package/dist/scripts/http-log-filter.sh +8 -0
- package/dist/tui/ConfigApp.d.ts.map +1 -1
- package/dist/tui/ConfigApp.js +222 -184
- package/dist/tui/ConfigApp.js.map +1 -1
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
- package/dist/tui/HistoricalMonitorApp.js +12 -0
- package/dist/tui/HistoricalMonitorApp.js.map +1 -1
- package/dist/tui/ModelsApp.d.ts.map +1 -1
- package/dist/tui/ModelsApp.js +93 -17
- package/dist/tui/ModelsApp.js.map +1 -1
- package/dist/tui/MonitorApp.d.ts.map +1 -1
- package/dist/tui/MonitorApp.js +1 -3
- package/dist/tui/MonitorApp.js.map +1 -1
- package/dist/tui/MultiServerMonitorApp.d.ts +3 -3
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +724 -508
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/tui/RootNavigator.d.ts.map +1 -1
- package/dist/tui/RootNavigator.js +17 -1
- package/dist/tui/RootNavigator.js.map +1 -1
- package/dist/tui/RouterApp.d.ts +6 -0
- package/dist/tui/RouterApp.d.ts.map +1 -0
- package/dist/tui/RouterApp.js +928 -0
- package/dist/tui/RouterApp.js.map +1 -0
- package/dist/tui/SearchApp.d.ts.map +1 -1
- package/dist/tui/SearchApp.js +27 -6
- package/dist/tui/SearchApp.js.map +1 -1
- package/dist/tui/shared/modal-controller.d.ts +65 -0
- package/dist/tui/shared/modal-controller.d.ts.map +1 -0
- package/dist/tui/shared/modal-controller.js +625 -0
- package/dist/tui/shared/modal-controller.js.map +1 -0
- package/dist/tui/shared/overlay-utils.d.ts +7 -0
- package/dist/tui/shared/overlay-utils.d.ts.map +1 -0
- package/dist/tui/shared/overlay-utils.js +54 -0
- package/dist/tui/shared/overlay-utils.js.map +1 -0
- package/dist/types/admin-config.d.ts +15 -2
- package/dist/types/admin-config.d.ts.map +1 -1
- package/dist/types/model-info.d.ts +5 -0
- package/dist/types/model-info.d.ts.map +1 -1
- package/dist/types/router-config.d.ts +2 -2
- package/dist/types/router-config.d.ts.map +1 -1
- package/dist/types/server-config.d.ts +8 -0
- package/dist/types/server-config.d.ts.map +1 -1
- package/dist/types/server-config.js +25 -0
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/http-log-filter.d.ts +10 -0
- package/dist/utils/http-log-filter.d.ts.map +1 -0
- package/dist/utils/http-log-filter.js +84 -0
- package/dist/utils/http-log-filter.js.map +1 -0
- package/dist/utils/log-parser.d.ts.map +1 -1
- package/dist/utils/log-parser.js +7 -4
- package/dist/utils/log-parser.js.map +1 -1
- package/dist/utils/log-utils.d.ts +59 -4
- package/dist/utils/log-utils.d.ts.map +1 -1
- package/dist/utils/log-utils.js +150 -11
- package/dist/utils/log-utils.js.map +1 -1
- package/dist/utils/shard-utils.d.ts +72 -0
- package/dist/utils/shard-utils.d.ts.map +1 -0
- package/dist/utils/shard-utils.js +168 -0
- package/dist/utils/shard-utils.js.map +1 -0
- package/package.json +18 -4
- package/src/launchers/llamacpp-admin +8 -0
- package/src/launchers/llamacpp-router +8 -0
- package/src/launchers/llamacpp-server +8 -0
- package/web/dist/assets/index-Byhoy86V.css +1 -0
- package/web/dist/assets/index-HSrgvray.js +50 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-Bin89Lwr.css +0 -1
- package/web/dist/assets/index-CVmonw3T.js +0 -17
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyboardManager = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* KeyboardManager provides centralized keyboard event handling with a context stack.
|
|
6
|
+
*
|
|
7
|
+
* This solves several problems with blessed.js's event model:
|
|
8
|
+
* 1. No built-in event.stopPropagation() mechanism
|
|
9
|
+
* 2. Multiple handlers can fire for the same key
|
|
10
|
+
* 3. Modal focus doesn't prevent screen handlers from executing
|
|
11
|
+
* 4. Handler re-registration in render() causes races and state loss
|
|
12
|
+
*
|
|
13
|
+
* Usage pattern:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const keyboardManager = new KeyboardManager(screen);
|
|
16
|
+
*
|
|
17
|
+
* // Push main app context
|
|
18
|
+
* keyboardManager.pushContext('main', {
|
|
19
|
+
* 'escape': () => process.exit(0),
|
|
20
|
+
* 'up': () => scrollUp(),
|
|
21
|
+
* 'down': () => scrollDown(),
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // When opening a modal, push a blocking context
|
|
25
|
+
* keyboardManager.pushContext('confirm-modal', {
|
|
26
|
+
* 'enter': () => confirmAction(),
|
|
27
|
+
* 'escape': () => closeModal(),
|
|
28
|
+
* }, true); // blocking=true prevents main context from receiving keys
|
|
29
|
+
*
|
|
30
|
+
* // When closing the modal, pop the context
|
|
31
|
+
* keyboardManager.popContext();
|
|
32
|
+
*
|
|
33
|
+
* // Now main context receives keys again
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Context Stack Example:
|
|
37
|
+
* ```
|
|
38
|
+
* [top] modal-context (blocking) <- Keys go here first
|
|
39
|
+
* main-context <- Only receives keys if modal doesn't handle and is non-blocking
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
class KeyboardManager {
|
|
43
|
+
/**
|
|
44
|
+
* Create a new KeyboardManager.
|
|
45
|
+
*
|
|
46
|
+
* @param screen - blessed screen instance to intercept keys from
|
|
47
|
+
* @param debugMode - If true, log key handling to stderr for debugging
|
|
48
|
+
*/
|
|
49
|
+
constructor(screen, debugMode = false) {
|
|
50
|
+
this.contextStack = [];
|
|
51
|
+
this.debugMode = false;
|
|
52
|
+
this.screen = screen;
|
|
53
|
+
this.debugMode = debugMode;
|
|
54
|
+
this.interceptKeys();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Intercept all keypresses at the screen level.
|
|
58
|
+
* This is called BEFORE blessed's screen.key() handlers.
|
|
59
|
+
*/
|
|
60
|
+
interceptKeys() {
|
|
61
|
+
this.screen.on('keypress', (ch, key) => {
|
|
62
|
+
this.handleKeypress(ch, key);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Route keypress to the top-most context.
|
|
67
|
+
* If context doesn't handle it and is non-blocking, pass to lower contexts.
|
|
68
|
+
*/
|
|
69
|
+
handleKeypress(ch, key) {
|
|
70
|
+
if (this.debugMode) {
|
|
71
|
+
const contextNames = this.contextStack.map(c => c.name).join(' -> ');
|
|
72
|
+
console.error(`[KeyboardManager] Key: ${key.full || key.name} | Contexts: ${contextNames || '(none)'}`);
|
|
73
|
+
}
|
|
74
|
+
if (this.contextStack.length === 0) {
|
|
75
|
+
if (this.debugMode) {
|
|
76
|
+
console.error('[KeyboardManager] No contexts registered, key not handled');
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Iterate from top of stack (most recent context) to bottom
|
|
81
|
+
for (let i = this.contextStack.length - 1; i >= 0; i--) {
|
|
82
|
+
const context = this.contextStack[i];
|
|
83
|
+
const handled = this.tryContext(context, ch, key);
|
|
84
|
+
if (handled) {
|
|
85
|
+
// Event consumed by this context
|
|
86
|
+
if (this.debugMode) {
|
|
87
|
+
console.error(`[KeyboardManager] ✓ Handled by context: ${context.name}`);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (context.blocking) {
|
|
92
|
+
// Context is blocking, don't pass to lower contexts
|
|
93
|
+
if (this.debugMode) {
|
|
94
|
+
console.error(`[KeyboardManager] ✗ Not handled, but blocked by: ${context.name}`);
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Not handled and not blocking, continue to next context
|
|
99
|
+
if (this.debugMode) {
|
|
100
|
+
console.error(`[KeyboardManager] ↓ Not handled by ${context.name}, trying next context`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (this.debugMode) {
|
|
104
|
+
console.error('[KeyboardManager] Key not handled by any context');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Try to handle key in the given context.
|
|
109
|
+
* Returns true if handled, false otherwise.
|
|
110
|
+
*/
|
|
111
|
+
tryContext(context, ch, key) {
|
|
112
|
+
// Try full key name first (e.g., "C-c", "escape", "M-x")
|
|
113
|
+
const fullKey = key.full || key.name;
|
|
114
|
+
let handler = context.handlers[fullKey];
|
|
115
|
+
if (!handler && key.name) {
|
|
116
|
+
// Try just the key name (e.g., "c" instead of "C-c")
|
|
117
|
+
handler = context.handlers[key.name];
|
|
118
|
+
}
|
|
119
|
+
if (!handler && ch) {
|
|
120
|
+
// Try the character itself (e.g., "a", "1")
|
|
121
|
+
handler = context.handlers[ch];
|
|
122
|
+
}
|
|
123
|
+
if (handler) {
|
|
124
|
+
const result = handler(ch, key);
|
|
125
|
+
// Handler can return false to indicate "not handled"
|
|
126
|
+
return result !== false;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Push a new keyboard context onto the stack.
|
|
132
|
+
* This context will receive keys before lower contexts.
|
|
133
|
+
*
|
|
134
|
+
* @param name - Human-readable name for debugging
|
|
135
|
+
* @param handlers - Map of key names to handler functions
|
|
136
|
+
* @param blocking - If true, prevent keys from reaching lower contexts (default: true)
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // Push a blocking modal context
|
|
141
|
+
* keyboardManager.pushContext('error-modal', {
|
|
142
|
+
* 'enter': () => closeModal(),
|
|
143
|
+
* 'escape': () => closeModal(),
|
|
144
|
+
* }, true);
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
pushContext(name, handlers, blocking = true) {
|
|
148
|
+
if (this.debugMode) {
|
|
149
|
+
console.error(`[KeyboardManager] ⬆ Push context: ${name} (blocking: ${blocking})`);
|
|
150
|
+
}
|
|
151
|
+
this.contextStack.push({
|
|
152
|
+
name,
|
|
153
|
+
handlers,
|
|
154
|
+
blocking,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Pop the top keyboard context from the stack.
|
|
159
|
+
* Previous context (if any) will now receive keys.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* // Close modal and restore previous context
|
|
164
|
+
* keyboardManager.popContext();
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
popContext() {
|
|
168
|
+
const context = this.contextStack.pop();
|
|
169
|
+
if (this.debugMode && context) {
|
|
170
|
+
console.error(`[KeyboardManager] ⬇ Pop context: ${context.name}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Update handlers for the current (top) context.
|
|
175
|
+
* Useful for view mode changes without push/pop.
|
|
176
|
+
*
|
|
177
|
+
* @param handlers - New handler map for the current context
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* // Switch from list mode to detail mode handlers
|
|
182
|
+
* keyboardManager.updateCurrentContext({
|
|
183
|
+
* 'escape': () => backToList(),
|
|
184
|
+
* 'h': () => showHistory(),
|
|
185
|
+
* 'l': () => showLogs(),
|
|
186
|
+
* });
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
updateCurrentContext(handlers) {
|
|
190
|
+
if (this.contextStack.length === 0) {
|
|
191
|
+
throw new Error('No context to update');
|
|
192
|
+
}
|
|
193
|
+
const current = this.contextStack[this.contextStack.length - 1];
|
|
194
|
+
current.handlers = handlers;
|
|
195
|
+
if (this.debugMode) {
|
|
196
|
+
console.error(`[KeyboardManager] ↻ Updated context: ${current.name}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the current context name (for debugging).
|
|
201
|
+
*
|
|
202
|
+
* @returns Current context name, or null if no contexts
|
|
203
|
+
*/
|
|
204
|
+
getCurrentContextName() {
|
|
205
|
+
return this.contextStack.length > 0
|
|
206
|
+
? this.contextStack[this.contextStack.length - 1].name
|
|
207
|
+
: null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the full context stack (for debugging).
|
|
211
|
+
*
|
|
212
|
+
* @returns Array of context names from bottom to top
|
|
213
|
+
*/
|
|
214
|
+
getContextStack() {
|
|
215
|
+
return this.contextStack.map(c => c.name);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Clear all contexts (useful for cleanup).
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* // Cleanup on exit
|
|
223
|
+
* keyboardManager.clearAll();
|
|
224
|
+
* screen.destroy();
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
clearAll() {
|
|
228
|
+
if (this.debugMode) {
|
|
229
|
+
console.error('[KeyboardManager] Clear all contexts');
|
|
230
|
+
}
|
|
231
|
+
this.contextStack = [];
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Enable or disable debug mode.
|
|
235
|
+
* When enabled, logs key handling to stderr.
|
|
236
|
+
*
|
|
237
|
+
* @param enabled - True to enable debug logging
|
|
238
|
+
*/
|
|
239
|
+
setDebugMode(enabled) {
|
|
240
|
+
this.debugMode = enabled;
|
|
241
|
+
if (enabled) {
|
|
242
|
+
console.error('[KeyboardManager] Debug mode enabled');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.KeyboardManager = KeyboardManager;
|
|
247
|
+
//# sourceMappingURL=keyboard-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard-manager.js","sourceRoot":"","sources":["../../src/lib/keyboard-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ServerConfig } from '../types/server-config';
|
|
2
|
+
import { RouterConfig } from '../types/router-config';
|
|
3
|
+
import { AdminConfig } from '../types/admin-config';
|
|
4
|
+
export interface MigrationBackup {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
servers: ServerConfig[];
|
|
7
|
+
router: RouterConfig | null;
|
|
8
|
+
admin: AdminConfig | null;
|
|
9
|
+
runningServices: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface MigrationResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
migratedCount: number;
|
|
14
|
+
failedServices: string[];
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class LabelMigration {
|
|
18
|
+
private configDir;
|
|
19
|
+
private launchAgentsDir;
|
|
20
|
+
private markerPath;
|
|
21
|
+
private backupPath;
|
|
22
|
+
constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Check if migration is needed
|
|
25
|
+
*/
|
|
26
|
+
needsMigration(): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Detect services with old labels
|
|
29
|
+
*/
|
|
30
|
+
detectOldLabels(): Promise<string[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Create backup of current state
|
|
33
|
+
*/
|
|
34
|
+
createBackup(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Migrate a single server
|
|
37
|
+
*/
|
|
38
|
+
migrateServer(server: ServerConfig, wasRunning: boolean): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Migrate router service
|
|
41
|
+
*/
|
|
42
|
+
migrateRouter(wasRunning: boolean): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Migrate admin service
|
|
45
|
+
*/
|
|
46
|
+
migrateAdmin(wasRunning: boolean): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Migrate all services
|
|
49
|
+
*/
|
|
50
|
+
migrateAll(onProgress?: (message: string, current: number, total: number) => void): Promise<MigrationResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Rollback migration
|
|
53
|
+
*/
|
|
54
|
+
rollback(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Get backup info if exists
|
|
57
|
+
*/
|
|
58
|
+
getBackupInfo(): Promise<MigrationBackup | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Delete backup file
|
|
61
|
+
*/
|
|
62
|
+
deleteBackup(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
export declare const labelMigration: LabelMigration;
|
|
65
|
+
//# sourceMappingURL=label-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-migration.d.ts","sourceRoot":"","sources":["../../src/lib/label-migration.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAepD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;;IAS3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAWxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA0B1C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BnC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC;IAwDhB;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DvD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DtD;;OAEG;IACG,UAAU,CACd,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrE,OAAO,CAAC,eAAe,CAAC;IAgG3B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoG/B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAOtD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAKpC;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|