@qodalis/cli-server-node 1.0.0-beta.3 → 1.0.0-beta.5

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.
Files changed (107) hide show
  1. package/README.md +145 -23
  2. package/dist/src/abstractions/index.d.ts +1 -1
  3. package/dist/src/abstractions/index.d.ts.map +1 -1
  4. package/dist/src/abstractions/index.js +4 -1
  5. package/dist/src/abstractions/index.js.map +1 -1
  6. package/dist/src/controllers/cli-controller.d.ts +6 -0
  7. package/dist/src/controllers/cli-controller.d.ts.map +1 -1
  8. package/dist/src/controllers/cli-controller.js +71 -1
  9. package/dist/src/controllers/cli-controller.js.map +1 -1
  10. package/dist/src/controllers/cli-version-controller.d.ts +4 -0
  11. package/dist/src/controllers/cli-version-controller.d.ts.map +1 -1
  12. package/dist/src/controllers/cli-version-controller.js +11 -3
  13. package/dist/src/controllers/cli-version-controller.js.map +1 -1
  14. package/dist/src/controllers/filesystem-controller.d.ts.map +1 -1
  15. package/dist/src/controllers/filesystem-controller.js +51 -7
  16. package/dist/src/controllers/filesystem-controller.js.map +1 -1
  17. package/dist/src/create-cli-server.d.ts +32 -4
  18. package/dist/src/create-cli-server.d.ts.map +1 -1
  19. package/dist/src/create-cli-server.js +19 -11
  20. package/dist/src/create-cli-server.js.map +1 -1
  21. package/dist/src/extensions/cli-builder.d.ts +21 -1
  22. package/dist/src/extensions/cli-builder.d.ts.map +1 -1
  23. package/dist/src/extensions/cli-builder.js +31 -0
  24. package/dist/src/extensions/cli-builder.js.map +1 -1
  25. package/dist/src/filesystem/filesystem-options.d.ts +1 -0
  26. package/dist/src/filesystem/filesystem-options.d.ts.map +1 -1
  27. package/dist/src/index.d.ts +4 -5
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +5 -5
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/models/cli-server-command-descriptor.d.ts +2 -1
  32. package/dist/src/models/cli-server-command-descriptor.d.ts.map +1 -1
  33. package/dist/src/models/cli-server-output.d.ts +1 -22
  34. package/dist/src/models/cli-server-output.d.ts.map +1 -1
  35. package/dist/src/models/cli-server-response.d.ts +1 -5
  36. package/dist/src/models/cli-server-response.d.ts.map +1 -1
  37. package/dist/src/processors/cli-base64-command-processor.d.ts +1 -0
  38. package/dist/src/processors/cli-base64-command-processor.d.ts.map +1 -1
  39. package/dist/src/processors/cli-base64-command-processor.js +3 -0
  40. package/dist/src/processors/cli-base64-command-processor.js.map +1 -1
  41. package/dist/src/processors/cli-echo-command-processor.d.ts +1 -0
  42. package/dist/src/processors/cli-echo-command-processor.d.ts.map +1 -1
  43. package/dist/src/processors/cli-echo-command-processor.js +1 -0
  44. package/dist/src/processors/cli-echo-command-processor.js.map +1 -1
  45. package/dist/src/processors/cli-hash-command-processor.d.ts +1 -0
  46. package/dist/src/processors/cli-hash-command-processor.d.ts.map +1 -1
  47. package/dist/src/processors/cli-hash-command-processor.js +1 -0
  48. package/dist/src/processors/cli-hash-command-processor.js.map +1 -1
  49. package/dist/src/processors/cli-http-command-processor.d.ts +1 -0
  50. package/dist/src/processors/cli-http-command-processor.d.ts.map +1 -1
  51. package/dist/src/processors/cli-http-command-processor.js +85 -6
  52. package/dist/src/processors/cli-http-command-processor.js.map +1 -1
  53. package/dist/src/processors/cli-status-command-processor.d.ts +1 -0
  54. package/dist/src/processors/cli-status-command-processor.d.ts.map +1 -1
  55. package/dist/src/processors/cli-status-command-processor.js +1 -0
  56. package/dist/src/processors/cli-status-command-processor.js.map +1 -1
  57. package/dist/src/processors/cli-system-command-processor.d.ts +1 -0
  58. package/dist/src/processors/cli-system-command-processor.d.ts.map +1 -1
  59. package/dist/src/processors/cli-system-command-processor.js +1 -0
  60. package/dist/src/processors/cli-system-command-processor.js.map +1 -1
  61. package/dist/src/processors/index.d.ts +0 -1
  62. package/dist/src/processors/index.d.ts.map +1 -1
  63. package/dist/src/processors/index.js +1 -3
  64. package/dist/src/processors/index.js.map +1 -1
  65. package/dist/src/server.js +8 -8
  66. package/dist/src/server.js.map +1 -1
  67. package/dist/src/services/cli-command-executor-service.d.ts +24 -3
  68. package/dist/src/services/cli-command-executor-service.d.ts.map +1 -1
  69. package/dist/src/services/cli-command-executor-service.js +35 -3
  70. package/dist/src/services/cli-command-executor-service.js.map +1 -1
  71. package/dist/src/services/cli-command-registry.d.ts +11 -0
  72. package/dist/src/services/cli-command-registry.d.ts.map +1 -1
  73. package/dist/src/services/cli-command-registry.js +5 -0
  74. package/dist/src/services/cli-command-registry.js.map +1 -1
  75. package/dist/src/services/cli-event-socket-manager.d.ts +18 -0
  76. package/dist/src/services/cli-event-socket-manager.d.ts.map +1 -1
  77. package/dist/src/services/cli-event-socket-manager.js +47 -2
  78. package/dist/src/services/cli-event-socket-manager.js.map +1 -1
  79. package/dist/src/services/cli-log-socket-manager.d.ts +53 -0
  80. package/dist/src/services/cli-log-socket-manager.d.ts.map +1 -0
  81. package/dist/src/services/cli-log-socket-manager.js +185 -0
  82. package/dist/src/services/cli-log-socket-manager.js.map +1 -0
  83. package/dist/src/services/cli-response-builder.d.ts +9 -0
  84. package/dist/src/services/cli-response-builder.d.ts.map +1 -1
  85. package/dist/src/services/cli-response-builder.js +1 -0
  86. package/dist/src/services/cli-response-builder.js.map +1 -1
  87. package/dist/src/services/cli-shell-session-manager.d.ts +11 -0
  88. package/dist/src/services/cli-shell-session-manager.d.ts.map +1 -1
  89. package/dist/src/services/cli-shell-session-manager.js +36 -5
  90. package/dist/src/services/cli-shell-session-manager.js.map +1 -1
  91. package/dist/src/services/index.d.ts +2 -1
  92. package/dist/src/services/index.d.ts.map +1 -1
  93. package/dist/src/services/index.js +3 -1
  94. package/dist/src/services/index.js.map +1 -1
  95. package/dist/src/utils/logger.d.ts +11 -0
  96. package/dist/src/utils/logger.d.ts.map +1 -0
  97. package/dist/src/utils/logger.js +13 -0
  98. package/dist/src/utils/logger.js.map +1 -0
  99. package/package.json +12 -3
  100. package/dist/src/controllers/cli-controller-v2.d.ts +0 -4
  101. package/dist/src/controllers/cli-controller-v2.d.ts.map +0 -1
  102. package/dist/src/controllers/cli-controller-v2.js +0 -46
  103. package/dist/src/controllers/cli-controller-v2.js.map +0 -1
  104. package/dist/src/processors/cli-uuid-command-processor.d.ts +0 -10
  105. package/dist/src/processors/cli-uuid-command-processor.d.ts.map +0 -1
  106. package/dist/src/processors/cli-uuid-command-processor.js +0 -27
  107. package/dist/src/processors/cli-uuid-command-processor.js.map +0 -1
@@ -4,10 +4,18 @@ exports.CliEventSocketManager = void 0;
4
4
  const ws_1 = require("ws");
5
5
  const url_1 = require("url");
6
6
  const cli_shell_session_manager_1 = require("./cli-shell-session-manager");
7
+ const logger_1 = require("../utils/logger");
8
+ const logger = (0, logger_1.createLogger)('EventSocket');
9
+ /**
10
+ * Manages WebSocket connections for server-push events and interactive shell sessions.
11
+ * Handles upgrades on `/ws/v1/qcli/events` and `/ws/v1/qcli/shell` paths.
12
+ */
7
13
  class CliEventSocketManager {
8
14
  _wss = null;
9
15
  _clients = new Set();
16
+ _clientMeta = new Map();
10
17
  _shellManager = new cli_shell_session_manager_1.CliShellSessionManager();
18
+ _nextClientId = 1;
11
19
  static EVENT_PATHS = new Set([
12
20
  '/ws/v1/qcli/events',
13
21
  '/ws/qcli/events',
@@ -48,16 +56,29 @@ class CliEventSocketManager {
48
56
  });
49
57
  return;
50
58
  }
51
- // Not our path — let other handlers deal with it
59
+ // Unrecognized path; leave for other upgrade handlers
52
60
  });
53
- this._wss.on('connection', (ws) => {
61
+ this._wss.on('connection', (ws, request) => {
54
62
  this._clients.add(ws);
63
+ const id = `evt-${this._nextClientId++}`;
64
+ this._clientMeta.set(ws, {
65
+ id,
66
+ connectedAt: new Date(),
67
+ remoteAddress: request.socket.remoteAddress ?? 'unknown',
68
+ });
69
+ logger.info('Client connected (id=%s)', id);
55
70
  ws.send(JSON.stringify({ type: 'connected' }));
56
71
  ws.on('close', () => {
72
+ const meta = this._clientMeta.get(ws);
73
+ logger.info('Client disconnected (id=%s)', meta?.id ?? 'unknown');
57
74
  this._clients.delete(ws);
75
+ this._clientMeta.delete(ws);
58
76
  });
59
77
  ws.on('error', () => {
78
+ const meta = this._clientMeta.get(ws);
79
+ logger.info('Client disconnected (id=%s)', meta?.id ?? 'unknown');
60
80
  this._clients.delete(ws);
81
+ this._clientMeta.delete(ws);
61
82
  });
62
83
  });
63
84
  }
@@ -76,6 +97,7 @@ class CliEventSocketManager {
76
97
  * Broadcast a disconnect event to all connected clients and close sockets.
77
98
  */
78
99
  async broadcastDisconnect() {
100
+ logger.info('Broadcasting disconnect to %d clients', this._clients.size);
79
101
  const message = JSON.stringify({ type: 'disconnect' });
80
102
  const promises = [];
81
103
  for (const ws of this._clients) {
@@ -90,12 +112,35 @@ class CliEventSocketManager {
90
112
  }
91
113
  await Promise.all(promises);
92
114
  this._clients.clear();
115
+ this._clientMeta.clear();
116
+ }
117
+ /**
118
+ * Return information about all currently connected event clients.
119
+ */
120
+ getClients() {
121
+ const result = [];
122
+ for (const ws of this._clients) {
123
+ if (ws.readyState === ws_1.WebSocket.OPEN) {
124
+ const meta = this._clientMeta.get(ws);
125
+ if (meta) {
126
+ result.push({
127
+ id: meta.id,
128
+ connectedAt: meta.connectedAt.toISOString(),
129
+ remoteAddress: meta.remoteAddress,
130
+ type: 'events',
131
+ });
132
+ }
133
+ }
134
+ }
135
+ return result;
93
136
  }
137
+ /** Terminates all connections and closes the WebSocket server. */
94
138
  dispose() {
95
139
  for (const ws of this._clients) {
96
140
  ws.terminate();
97
141
  }
98
142
  this._clients.clear();
143
+ this._clientMeta.clear();
99
144
  this._wss?.close();
100
145
  }
101
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-event-socket-manager.js","sourceRoot":"","sources":["../../../src/services/cli-event-socket-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-event-socket-manager.js","sourceRoot":"","sources":["../../../src/services/cli-event-socket-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { Server } from 'http';
2
+ /** Information about a connected WebSocket log-streaming client. */
3
+ export interface CliLogWebSocketClientInfo {
4
+ id: string;
5
+ connectedAt: string;
6
+ remoteAddress: string;
7
+ levelFilter: string | null;
8
+ type: 'logs';
9
+ }
10
+ /**
11
+ * Manages WebSocket connections for streaming log messages to clients.
12
+ *
13
+ * Parity with CliLogSocketManager in the .NET and Python servers.
14
+ * Handles `/ws/v1/qcli/logs` and `/ws/qcli/logs` upgrade paths.
15
+ */
16
+ export declare class CliLogSocketManager {
17
+ private _wss;
18
+ private readonly _clients;
19
+ private _nextClientId;
20
+ private static readonly LOG_PATHS;
21
+ /**
22
+ * Check whether a log at `logLevel` passes the `filterLevel` gate.
23
+ */
24
+ static shouldSendLog(filterLevel: string | null, logLevel: string): boolean;
25
+ /**
26
+ * Format a log message as a JSON string matching the cross-server schema.
27
+ */
28
+ static formatLogMessage(level: string, message: string, category?: string | null): string;
29
+ /**
30
+ * Attach to an HTTP server and handle WebSocket upgrades on log paths.
31
+ *
32
+ * If you already have a `CliEventSocketManager` attached, call this
33
+ * method on the same `server` — Node's `upgrade` event supports
34
+ * multiple listeners, and each manager only handles its own paths.
35
+ */
36
+ attach(server: Server): void;
37
+ /**
38
+ * Broadcast a log message to all connected clients whose filter allows it.
39
+ */
40
+ broadcastLog(level: string, message: string, category?: string | null): void;
41
+ /**
42
+ * Send a disconnect message to all clients and close connections.
43
+ */
44
+ broadcastDisconnect(): Promise<void>;
45
+ /**
46
+ * Return information about all currently connected log clients.
47
+ */
48
+ getClients(): CliLogWebSocketClientInfo[];
49
+ /** Terminates all connections and closes the WebSocket server. */
50
+ dispose(): void;
51
+ private _handleConnection;
52
+ }
53
+ //# sourceMappingURL=cli-log-socket-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-log-socket-manager.d.ts","sourceRoot":"","sources":["../../../src/services/cli-log-socket-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,MAAM,CAAC;AAMpD,oEAAoE;AACpE,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CAChB;AAsCD;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAG9B;IAEH;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAY3E;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAUzF;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB5B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAsB5E;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB1C;;OAEG;IACH,UAAU,IAAI,yBAAyB,EAAE;IAgBzC,kEAAkE;IAClE,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,iBAAiB;CAyB5B"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliLogSocketManager = void 0;
4
+ const ws_1 = require("ws");
5
+ const url_1 = require("url");
6
+ const logger_1 = require("../utils/logger");
7
+ const logger = (0, logger_1.createLogger)('LogSocket');
8
+ /**
9
+ * Level ordering from lowest to highest severity.
10
+ * Matches the Python/C# implementations.
11
+ */
12
+ const LEVEL_ORDER = {
13
+ verbose: 0,
14
+ debug: 1,
15
+ information: 2,
16
+ warning: 3,
17
+ error: 4,
18
+ fatal: 5,
19
+ };
20
+ /**
21
+ * Maps short/uppercase log levels (used by LogRingBuffer) to the
22
+ * standard level names used across all three servers.
23
+ */
24
+ const LEVEL_ALIASES = {
25
+ info: 'information',
26
+ warn: 'warning',
27
+ err: 'error',
28
+ };
29
+ function normalizeLevel(level) {
30
+ const lower = level.toLowerCase();
31
+ return LEVEL_ALIASES[lower] ?? lower;
32
+ }
33
+ /**
34
+ * Manages WebSocket connections for streaming log messages to clients.
35
+ *
36
+ * Parity with CliLogSocketManager in the .NET and Python servers.
37
+ * Handles `/ws/v1/qcli/logs` and `/ws/qcli/logs` upgrade paths.
38
+ */
39
+ class CliLogSocketManager {
40
+ _wss = null;
41
+ _clients = new Map();
42
+ _nextClientId = 1;
43
+ static LOG_PATHS = new Set([
44
+ '/ws/v1/qcli/logs',
45
+ '/ws/qcli/logs',
46
+ ]);
47
+ /**
48
+ * Check whether a log at `logLevel` passes the `filterLevel` gate.
49
+ */
50
+ static shouldSendLog(filterLevel, logLevel) {
51
+ if (!filterLevel)
52
+ return true;
53
+ const filterOrd = LEVEL_ORDER[normalizeLevel(filterLevel)];
54
+ const logOrd = LEVEL_ORDER[normalizeLevel(logLevel)];
55
+ // Unknown levels always pass
56
+ if (filterOrd === undefined || logOrd === undefined)
57
+ return true;
58
+ return logOrd >= filterOrd;
59
+ }
60
+ /**
61
+ * Format a log message as a JSON string matching the cross-server schema.
62
+ */
63
+ static formatLogMessage(level, message, category) {
64
+ return JSON.stringify({
65
+ type: 'log',
66
+ timestamp: new Date().toISOString(),
67
+ level: normalizeLevel(level),
68
+ message,
69
+ category: category ?? null,
70
+ });
71
+ }
72
+ /**
73
+ * Attach to an HTTP server and handle WebSocket upgrades on log paths.
74
+ *
75
+ * If you already have a `CliEventSocketManager` attached, call this
76
+ * method on the same `server` — Node's `upgrade` event supports
77
+ * multiple listeners, and each manager only handles its own paths.
78
+ */
79
+ attach(server) {
80
+ this._wss = new ws_1.WebSocketServer({ noServer: true });
81
+ server.on('upgrade', (request, socket, head) => {
82
+ const parsed = new url_1.URL(request.url ?? '', 'http://localhost');
83
+ const pathname = parsed.pathname;
84
+ if (!CliLogSocketManager.LOG_PATHS.has(pathname))
85
+ return;
86
+ this._wss.handleUpgrade(request, socket, head, (ws) => {
87
+ const levelFilter = parsed.searchParams.get('level') || null;
88
+ this._handleConnection(ws, request, levelFilter);
89
+ });
90
+ });
91
+ }
92
+ /**
93
+ * Broadcast a log message to all connected clients whose filter allows it.
94
+ */
95
+ broadcastLog(level, message, category) {
96
+ if (this._clients.size === 0)
97
+ return;
98
+ let formatted = null;
99
+ for (const entry of this._clients.values()) {
100
+ if (entry.ws.readyState !== ws_1.WebSocket.OPEN)
101
+ continue;
102
+ if (!CliLogSocketManager.shouldSendLog(entry.levelFilter, level))
103
+ continue;
104
+ // Lazy-format only when there's at least one recipient
105
+ if (!formatted) {
106
+ formatted = CliLogSocketManager.formatLogMessage(level, message, category);
107
+ }
108
+ try {
109
+ entry.ws.send(formatted);
110
+ }
111
+ catch {
112
+ // ignore send errors; cleanup happens on close/error events
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Send a disconnect message to all clients and close connections.
118
+ */
119
+ async broadcastDisconnect() {
120
+ logger.info('Broadcasting disconnect to %d log clients', this._clients.size);
121
+ const disconnectMsg = JSON.stringify({ type: 'disconnect' });
122
+ const promises = [];
123
+ for (const entry of this._clients.values()) {
124
+ if (entry.ws.readyState === ws_1.WebSocket.OPEN) {
125
+ promises.push(new Promise((resolve) => {
126
+ entry.ws.send(disconnectMsg, () => {
127
+ entry.ws.close(1000, 'Server shutting down');
128
+ resolve();
129
+ });
130
+ }));
131
+ }
132
+ }
133
+ await Promise.all(promises);
134
+ this._clients.clear();
135
+ }
136
+ /**
137
+ * Return information about all currently connected log clients.
138
+ */
139
+ getClients() {
140
+ const result = [];
141
+ for (const entry of this._clients.values()) {
142
+ if (entry.ws.readyState === ws_1.WebSocket.OPEN) {
143
+ result.push({
144
+ id: entry.id,
145
+ connectedAt: entry.connectedAt.toISOString(),
146
+ remoteAddress: entry.remoteAddress,
147
+ levelFilter: entry.levelFilter,
148
+ type: 'logs',
149
+ });
150
+ }
151
+ }
152
+ return result;
153
+ }
154
+ /** Terminates all connections and closes the WebSocket server. */
155
+ dispose() {
156
+ for (const entry of this._clients.values()) {
157
+ entry.ws.terminate();
158
+ }
159
+ this._clients.clear();
160
+ this._wss?.close();
161
+ }
162
+ _handleConnection(ws, request, levelFilter) {
163
+ const id = `log-${this._nextClientId++}`;
164
+ const entry = {
165
+ id,
166
+ ws,
167
+ connectedAt: new Date(),
168
+ remoteAddress: request.socket.remoteAddress ?? 'unknown',
169
+ levelFilter,
170
+ };
171
+ this._clients.set(id, entry);
172
+ ws.send(JSON.stringify({ type: 'connected' }));
173
+ logger.info('Log client connected (id=%s, level=%s)', id, levelFilter ?? 'all');
174
+ ws.on('close', () => {
175
+ logger.info('Log client disconnected (id=%s)', id);
176
+ this._clients.delete(id);
177
+ });
178
+ ws.on('error', () => {
179
+ logger.info('Log client disconnected (id=%s)', id);
180
+ this._clients.delete(id);
181
+ });
182
+ }
183
+ }
184
+ exports.CliLogSocketManager = CliLogSocketManager;
185
+ //# sourceMappingURL=cli-log-socket-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-log-socket-manager.js","sourceRoot":"","sources":["../../../src/services/cli-log-socket-manager.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,22 @@
1
1
  import { CliServerResponse } from '../models';
2
+ /** Fluent interface for building a structured CLI server response with typed output blocks. */
2
3
  export interface ICliResponseBuilder {
4
+ /** Appends a text output block with an optional style. */
3
5
  writeText(text: string, style?: 'success' | 'error' | 'info' | 'warning'): void;
6
+ /** Appends a table output block. */
4
7
  writeTable(headers: string[], rows: string[][]): void;
8
+ /** Appends a list output block. */
5
9
  writeList(items: string[], ordered?: boolean): void;
10
+ /** Appends a JSON output block. */
6
11
  writeJson(value: any): void;
12
+ /** Appends a key-value pairs output block. */
7
13
  writeKeyValue(entries: Record<string, string>): void;
14
+ /** Sets the exit code for the response. */
8
15
  setExitCode(code: number): void;
16
+ /** Builds and returns the final structured response. */
9
17
  build(): CliServerResponse;
10
18
  }
19
+ /** Default implementation of {@link ICliResponseBuilder} that accumulates output blocks. */
11
20
  export declare class CliResponseBuilder implements ICliResponseBuilder {
12
21
  private _exitCode;
13
22
  private _outputs;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-response-builder.d.ts","sourceRoot":"","sources":["../../../src/services/cli-response-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAChF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,IAAI,iBAAiB,CAAC;CAC9B;AAED,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAyB;IAEzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAI/E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAIrD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI;IAIjD,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAI3B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOpD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,iBAAiB;CAM7B"}
1
+ {"version":3,"file":"cli-response-builder.d.ts","sourceRoot":"","sources":["../../../src/services/cli-response-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,+FAA+F;AAC/F,MAAM,WAAW,mBAAmB;IAChC,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAChF,oCAAoC;IACpC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IACtD,mCAAmC;IACnC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,mCAAmC;IACnC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAC5B,8CAA8C;IAC9C,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACrD,2CAA2C;IAC3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,KAAK,IAAI,iBAAiB,CAAC;CAC9B;AAED,4FAA4F;AAC5F,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAyB;IAEzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAI/E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAIrD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI;IAIjD,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAI3B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOpD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,iBAAiB;CAM7B"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CliResponseBuilder = void 0;
4
+ /** Default implementation of {@link ICliResponseBuilder} that accumulates output blocks. */
4
5
  class CliResponseBuilder {
5
6
  _exitCode = 0;
6
7
  _outputs = [];
@@ -1 +1 @@
1
- {"version":3,"file":"cli-response-builder.js","sourceRoot":"","sources":["../../../src/services/cli-response-builder.ts"],"names":[],"mappings":";;;AAaA,MAAa,kBAAkB;IACnB,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAsB,EAAE,CAAC;IAEzC,SAAS,CAAC,IAAY,EAAE,KAAgD;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,OAAiB,EAAE,IAAgB;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAe,EAAE,OAAO,GAAG,KAAK;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAU;QAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,OAA+B;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAC;IACN,CAAC;CACJ;AArCD,gDAqCC"}
1
+ {"version":3,"file":"cli-response-builder.js","sourceRoot":"","sources":["../../../src/services/cli-response-builder.ts"],"names":[],"mappings":";;;AAqBA,4FAA4F;AAC5F,MAAa,kBAAkB;IACnB,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAsB,EAAE,CAAC;IAEzC,SAAS,CAAC,IAAY,EAAE,KAAgD;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,OAAiB,EAAE,IAAgB;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAe,EAAE,OAAO,GAAG,KAAK;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAU;QAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,OAA+B;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAC;IACN,CAAC;CACJ;AArCD,gDAqCC"}
@@ -1,8 +1,19 @@
1
1
  import { WebSocket } from 'ws';
2
+ /** Manages interactive PTY shell sessions over WebSocket connections. */
2
3
  export declare class CliShellSessionManager {
4
+ /**
5
+ * Creates a PTY shell session bridged to the given WebSocket.
6
+ * @param ws - WebSocket connection for the shell session.
7
+ * @param cols - Initial terminal width in columns.
8
+ * @param rows - Initial terminal height in rows.
9
+ * @param command - Optional command to execute instead of an interactive shell.
10
+ */
3
11
  handleSession(ws: WebSocket, cols: number, rows: number, command?: string): Promise<void>;
12
+ /** Determines the shell binary and arguments based on the platform and optional command. */
4
13
  private getShellInfo;
14
+ /** Detects the best available shell on Unix systems by checking $SHELL and common paths. */
5
15
  private detectShell;
16
+ /** Sends a JSON message to the WebSocket if the connection is open. */
6
17
  private send;
7
18
  }
8
19
  //# sourceMappingURL=cli-shell-session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-shell-session-manager.d.ts","sourceRoot":"","sources":["../../../src/services/cli-shell-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAgC/B,qBAAa,sBAAsB;IACzB,aAAa,CACf,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA2EhB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,IAAI;CAKf"}
1
+ {"version":3,"file":"cli-shell-session-manager.d.ts","sourceRoot":"","sources":["../../../src/services/cli-shell-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAuC/B,yEAAyE;AACzE,qBAAa,sBAAsB;IAC/B;;;;;;OAMG;IACG,aAAa,CACf,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA4FhB,4FAA4F;IAC5F,OAAO,CAAC,YAAY;IAcpB,4FAA4F;IAC5F,OAAO,CAAC,WAAW;IAwBnB,uEAAuE;IACvE,OAAO,CAAC,IAAI;CAKf"}
@@ -37,8 +37,12 @@ exports.CliShellSessionManager = void 0;
37
37
  const ws_1 = require("ws");
38
38
  const os = __importStar(require("os"));
39
39
  const path = __importStar(require("path"));
40
- // Lazy-load node-pty so that importing this module does not fail when the
41
- // native add-on is unavailable (e.g. in CI environments without build tools).
40
+ const logger_1 = require("../utils/logger");
41
+ const logger = (0, logger_1.createLogger)('ShellSession');
42
+ /**
43
+ * Lazy-loads node-pty to avoid import failures when the native add-on is unavailable.
44
+ * @throws {Error} If node-pty cannot be loaded.
45
+ */
42
46
  let _pty;
43
47
  function getPty() {
44
48
  if (!_pty) {
@@ -52,10 +56,27 @@ function getPty() {
52
56
  }
53
57
  return _pty;
54
58
  }
59
+ /** Manages interactive PTY shell sessions over WebSocket connections. */
55
60
  class CliShellSessionManager {
61
+ /**
62
+ * Creates a PTY shell session bridged to the given WebSocket.
63
+ * @param ws - WebSocket connection for the shell session.
64
+ * @param cols - Initial terminal width in columns.
65
+ * @param rows - Initial terminal height in rows.
66
+ * @param command - Optional command to execute instead of an interactive shell.
67
+ */
56
68
  async handleSession(ws, cols, rows, command) {
57
69
  const { shell, args } = this.getShellInfo(command);
58
- const nodePty = getPty();
70
+ let nodePty;
71
+ try {
72
+ nodePty = getPty();
73
+ }
74
+ catch (err) {
75
+ logger.error('node-pty unavailable: %s', err.message ?? err);
76
+ this.send(ws, { type: 'error', message: err.message });
77
+ ws.close();
78
+ return;
79
+ }
59
80
  let ptyProcess;
60
81
  try {
61
82
  ptyProcess = nodePty.spawn(shell, args, {
@@ -67,10 +88,12 @@ class CliShellSessionManager {
67
88
  });
68
89
  }
69
90
  catch (err) {
91
+ logger.error('Shell session error: %s', err.message ?? err);
70
92
  this.send(ws, { type: 'error', message: err.message });
71
93
  ws.close();
72
94
  return;
73
95
  }
96
+ logger.info('Shell session started (shell=%s, cols=%d, rows=%d)', shell, cols, rows);
74
97
  const detectedOs = os.platform() === 'win32'
75
98
  ? 'win32'
76
99
  : os.platform() === 'darwin'
@@ -85,6 +108,7 @@ class CliShellSessionManager {
85
108
  this.send(ws, { type: 'stdout', data });
86
109
  });
87
110
  ptyProcess.onExit(({ exitCode }) => {
111
+ logger.info('Shell session ended');
88
112
  this.send(ws, { type: 'exit', code: exitCode });
89
113
  if (ws.readyState === ws_1.WebSocket.OPEN) {
90
114
  ws.close();
@@ -104,6 +128,7 @@ class CliShellSessionManager {
104
128
  }
105
129
  catch {
106
130
  // Ignore malformed messages
131
+ logger.debug('Ignoring malformed WebSocket message');
107
132
  }
108
133
  });
109
134
  ws.on('close', () => {
@@ -112,17 +137,21 @@ class CliShellSessionManager {
112
137
  }
113
138
  catch {
114
139
  // Already exited
140
+ logger.debug('Process already exited, cleanup skipped');
115
141
  }
116
142
  });
117
- ws.on('error', () => {
143
+ ws.on('error', (error) => {
144
+ logger.error('Shell session error: %s', error.message ?? error);
118
145
  try {
119
146
  ptyProcess.kill();
120
147
  }
121
148
  catch {
122
149
  // Already exited
150
+ logger.debug('Process already exited, cleanup skipped');
123
151
  }
124
152
  });
125
153
  }
154
+ /** Determines the shell binary and arguments based on the platform and optional command. */
126
155
  getShellInfo(command) {
127
156
  if (os.platform() === 'win32') {
128
157
  const shell = 'powershell.exe';
@@ -135,6 +164,7 @@ class CliShellSessionManager {
135
164
  ? { shell, args: ['-c', command] }
136
165
  : { shell, args: [] };
137
166
  }
167
+ /** Detects the best available shell on Unix systems by checking $SHELL and common paths. */
138
168
  detectShell() {
139
169
  const envShell = process.env.SHELL;
140
170
  if (envShell) {
@@ -143,7 +173,7 @@ class CliShellSessionManager {
143
173
  return envShell;
144
174
  }
145
175
  catch {
146
- // SHELL env var points to non-existent binary, fall through
176
+ // $SHELL binary not accessible; try common paths
147
177
  }
148
178
  }
149
179
  const candidates = ['/bin/bash', '/usr/bin/bash', '/bin/sh'];
@@ -158,6 +188,7 @@ class CliShellSessionManager {
158
188
  }
159
189
  return '/bin/sh';
160
190
  }
191
+ /** Sends a JSON message to the WebSocket if the connection is open. */
161
192
  send(ws, msg) {
162
193
  if (ws.readyState === ws_1.WebSocket.OPEN) {
163
194
  ws.send(JSON.stringify(msg));
@@ -1 +1 @@
1
- {"version":3,"file":"cli-shell-session-manager.js","sourceRoot":"","sources":["../../../src/services/cli-shell-session-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAA+B;AAC/B,uCAAyB;AACzB,2CAA6B;AAE7B,0EAA0E;AAC1E,8EAA8E;AAC9E,IAAI,IAA2C,CAAC;AAChD,SAAS,MAAM;IACX,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,CAAC;YACD,iEAAiE;YACjE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACX,+DAA+D,GAAG,CAAC,OAAO,EAAE,CAC/E,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,IAAK,CAAC;AACjB,CAAC;AAaD,MAAa,sBAAsB;IAC/B,KAAK,CAAC,aAAa,CACf,EAAa,EACb,IAAY,EACZ,IAAY,EACZ,OAAgB;QAEhB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,IAAI,UAAmC,CAAC;QACxC,IAAI,CAAC;YACD,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;gBACpC,IAAI,EAAE,gBAAgB;gBACtB,IAAI;gBACJ,IAAI;gBACJ,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;gBACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAA4B;aAC5E,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO;YACxC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ;gBACxB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,OAAO,CAAC;QAElB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B,EAAE,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,EAAE,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAkB,CAAC;gBACxD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;oBACf,KAAK,OAAO;wBACR,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAC3B,MAAM;oBACV,KAAK,QAAQ;wBACT,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;wBACtC,MAAM;gBACd,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,4BAA4B;YAChC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,IAAI,CAAC;gBACD,UAAU,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACL,iBAAiB;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,IAAI,CAAC;gBACD,UAAU,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACL,iBAAiB;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,YAAY,CAAC,OAAgB;QACjC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,gBAAgB,CAAC;YAC/B,OAAO,OAAO;gBACV,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;gBACxC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,OAAO;YACV,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YAClC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;IAEO,WAAW;QACf,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjE,OAAO,QAAQ,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACL,4DAA4D;YAChE,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QAC7D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClE,OAAO,SAAS,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,IAAI,CAAC,EAAa,EAAE,GAAkB;QAC1C,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YACnC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;CACJ;AA5HD,wDA4HC"}
1
+ {"version":3,"file":"cli-shell-session-manager.js","sourceRoot":"","sources":["../../../src/services/cli-shell-session-manager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export { ICliCommandRegistry, CliCommandRegistry } from './cli-command-registry';
2
2
  export { ICliResponseBuilder, CliResponseBuilder } from './cli-response-builder';
3
3
  export { ICliCommandExecutorService, CliCommandExecutorService } from './cli-command-executor-service';
4
- export { CliEventSocketManager } from './cli-event-socket-manager';
4
+ export { CliEventSocketManager, CliWebSocketClientInfo } from './cli-event-socket-manager';
5
5
  export { CliShellSessionManager } from './cli-shell-session-manager';
6
+ export { CliLogSocketManager, CliLogWebSocketClientInfo } from './cli-log-socket-manager';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CliShellSessionManager = exports.CliEventSocketManager = exports.CliCommandExecutorService = exports.CliResponseBuilder = exports.CliCommandRegistry = void 0;
3
+ exports.CliLogSocketManager = exports.CliShellSessionManager = exports.CliEventSocketManager = exports.CliCommandExecutorService = exports.CliResponseBuilder = exports.CliCommandRegistry = void 0;
4
4
  var cli_command_registry_1 = require("./cli-command-registry");
5
5
  Object.defineProperty(exports, "CliCommandRegistry", { enumerable: true, get: function () { return cli_command_registry_1.CliCommandRegistry; } });
6
6
  var cli_response_builder_1 = require("./cli-response-builder");
@@ -11,4 +11,6 @@ var cli_event_socket_manager_1 = require("./cli-event-socket-manager");
11
11
  Object.defineProperty(exports, "CliEventSocketManager", { enumerable: true, get: function () { return cli_event_socket_manager_1.CliEventSocketManager; } });
12
12
  var cli_shell_session_manager_1 = require("./cli-shell-session-manager");
13
13
  Object.defineProperty(exports, "CliShellSessionManager", { enumerable: true, get: function () { return cli_shell_session_manager_1.CliShellSessionManager; } });
14
+ var cli_log_socket_manager_1 = require("./cli-log-socket-manager");
15
+ Object.defineProperty(exports, "CliLogSocketManager", { enumerable: true, get: function () { return cli_log_socket_manager_1.CliLogSocketManager; } });
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+EAAuG;AAAlE,yIAAA,yBAAyB,OAAA;AAC9D,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAC9B,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+EAAuG;AAAlE,yIAAA,yBAAyB,OAAA;AAC9D,uEAA2F;AAAlF,iIAAA,qBAAqB,OAAA;AAC9B,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,mEAA0F;AAAjF,6HAAA,mBAAmB,OAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Simple structured logger with category prefixes.
3
+ */
4
+ export interface Logger {
5
+ debug(message: string, ...args: unknown[]): void;
6
+ info(message: string, ...args: unknown[]): void;
7
+ warn(message: string, ...args: unknown[]): void;
8
+ error(message: string, ...args: unknown[]): void;
9
+ }
10
+ export declare function createLogger(category: string): Logger;
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQrD"}