brosh 0.2.2

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 (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +181 -0
  3. package/brosh_brandmark.svg +3 -0
  4. package/brosh_logo.svg +27 -0
  5. package/cli_icon.svg +52 -0
  6. package/dist/client.d.ts +5 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +138 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +618 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib.d.ts +25 -0
  15. package/dist/lib.d.ts.map +1 -0
  16. package/dist/lib.js +28 -0
  17. package/dist/lib.js.map +1 -0
  18. package/dist/mode-selector.d.ts +7 -0
  19. package/dist/mode-selector.d.ts.map +1 -0
  20. package/dist/mode-selector.js +138 -0
  21. package/dist/mode-selector.js.map +1 -0
  22. package/dist/prompts/index.d.ts +3 -0
  23. package/dist/prompts/index.d.ts.map +1 -0
  24. package/dist/prompts/index.js +79 -0
  25. package/dist/prompts/index.js.map +1 -0
  26. package/dist/recording/index.d.ts +4 -0
  27. package/dist/recording/index.d.ts.map +1 -0
  28. package/dist/recording/index.js +3 -0
  29. package/dist/recording/index.js.map +1 -0
  30. package/dist/recording/manager.d.ts +62 -0
  31. package/dist/recording/manager.d.ts.map +1 -0
  32. package/dist/recording/manager.js +123 -0
  33. package/dist/recording/manager.js.map +1 -0
  34. package/dist/recording/recorder.d.ts +95 -0
  35. package/dist/recording/recorder.d.ts.map +1 -0
  36. package/dist/recording/recorder.js +330 -0
  37. package/dist/recording/recorder.js.map +1 -0
  38. package/dist/recording/types.d.ts +65 -0
  39. package/dist/recording/types.d.ts.map +1 -0
  40. package/dist/recording/types.js +2 -0
  41. package/dist/recording/types.js.map +1 -0
  42. package/dist/sandbox/ModeSelector.d.ts +2 -0
  43. package/dist/sandbox/ModeSelector.d.ts.map +1 -0
  44. package/dist/sandbox/ModeSelector.js +2 -0
  45. package/dist/sandbox/ModeSelector.js.map +1 -0
  46. package/dist/sandbox/config.d.ts +46 -0
  47. package/dist/sandbox/config.d.ts.map +1 -0
  48. package/dist/sandbox/config.js +144 -0
  49. package/dist/sandbox/config.js.map +1 -0
  50. package/dist/sandbox/controller.d.ts +72 -0
  51. package/dist/sandbox/controller.d.ts.map +1 -0
  52. package/dist/sandbox/controller.js +208 -0
  53. package/dist/sandbox/controller.js.map +1 -0
  54. package/dist/sandbox/index.d.ts +6 -0
  55. package/dist/sandbox/index.d.ts.map +1 -0
  56. package/dist/sandbox/index.js +4 -0
  57. package/dist/sandbox/index.js.map +1 -0
  58. package/dist/sandbox/mode-prompt.d.ts +10 -0
  59. package/dist/sandbox/mode-prompt.d.ts.map +1 -0
  60. package/dist/sandbox/mode-prompt.js +130 -0
  61. package/dist/sandbox/mode-prompt.js.map +1 -0
  62. package/dist/sandbox/prompt.d.ts +10 -0
  63. package/dist/sandbox/prompt.d.ts.map +1 -0
  64. package/dist/sandbox/prompt.js +434 -0
  65. package/dist/sandbox/prompt.js.map +1 -0
  66. package/dist/server.d.ts +28 -0
  67. package/dist/server.d.ts.map +1 -0
  68. package/dist/server.js +59 -0
  69. package/dist/server.js.map +1 -0
  70. package/dist/terminal/index.d.ts +5 -0
  71. package/dist/terminal/index.d.ts.map +1 -0
  72. package/dist/terminal/index.js +3 -0
  73. package/dist/terminal/index.js.map +1 -0
  74. package/dist/terminal/manager.d.ts +153 -0
  75. package/dist/terminal/manager.d.ts.map +1 -0
  76. package/dist/terminal/manager.js +276 -0
  77. package/dist/terminal/manager.js.map +1 -0
  78. package/dist/terminal/session.d.ts +137 -0
  79. package/dist/terminal/session.d.ts.map +1 -0
  80. package/dist/terminal/session.js +752 -0
  81. package/dist/terminal/session.js.map +1 -0
  82. package/dist/tools/definitions.d.ts +18 -0
  83. package/dist/tools/definitions.d.ts.map +1 -0
  84. package/dist/tools/definitions.js +114 -0
  85. package/dist/tools/definitions.js.map +1 -0
  86. package/dist/tools/getContent.d.ts +32 -0
  87. package/dist/tools/getContent.d.ts.map +1 -0
  88. package/dist/tools/getContent.js +38 -0
  89. package/dist/tools/getContent.js.map +1 -0
  90. package/dist/tools/index.d.ts +4 -0
  91. package/dist/tools/index.d.ts.map +1 -0
  92. package/dist/tools/index.js +49 -0
  93. package/dist/tools/index.js.map +1 -0
  94. package/dist/tools/screenshot.d.ts +20 -0
  95. package/dist/tools/screenshot.d.ts.map +1 -0
  96. package/dist/tools/screenshot.js +28 -0
  97. package/dist/tools/screenshot.js.map +1 -0
  98. package/dist/tools/sendKey.d.ts +31 -0
  99. package/dist/tools/sendKey.d.ts.map +1 -0
  100. package/dist/tools/sendKey.js +38 -0
  101. package/dist/tools/sendKey.js.map +1 -0
  102. package/dist/tools/startRecording.d.ts +68 -0
  103. package/dist/tools/startRecording.d.ts.map +1 -0
  104. package/dist/tools/startRecording.js +111 -0
  105. package/dist/tools/startRecording.js.map +1 -0
  106. package/dist/tools/stopRecording.d.ts +31 -0
  107. package/dist/tools/stopRecording.d.ts.map +1 -0
  108. package/dist/tools/stopRecording.js +76 -0
  109. package/dist/tools/stopRecording.js.map +1 -0
  110. package/dist/tools/type.d.ts +31 -0
  111. package/dist/tools/type.d.ts.map +1 -0
  112. package/dist/tools/type.js +31 -0
  113. package/dist/tools/type.js.map +1 -0
  114. package/dist/transport/gui-protocol.d.ts +163 -0
  115. package/dist/transport/gui-protocol.d.ts.map +1 -0
  116. package/dist/transport/gui-protocol.js +68 -0
  117. package/dist/transport/gui-protocol.js.map +1 -0
  118. package/dist/transport/gui-stream.d.ts +139 -0
  119. package/dist/transport/gui-stream.d.ts.map +1 -0
  120. package/dist/transport/gui-stream.js +440 -0
  121. package/dist/transport/gui-stream.js.map +1 -0
  122. package/dist/transport/index.d.ts +6 -0
  123. package/dist/transport/index.d.ts.map +1 -0
  124. package/dist/transport/index.js +6 -0
  125. package/dist/transport/index.js.map +1 -0
  126. package/dist/transport/socket.d.ts +46 -0
  127. package/dist/transport/socket.d.ts.map +1 -0
  128. package/dist/transport/socket.js +310 -0
  129. package/dist/transport/socket.js.map +1 -0
  130. package/dist/types/mcp-client-info.d.ts +226 -0
  131. package/dist/types/mcp-client-info.d.ts.map +1 -0
  132. package/dist/types/mcp-client-info.js +62 -0
  133. package/dist/types/mcp-client-info.js.map +1 -0
  134. package/dist/ui/index.d.ts +12 -0
  135. package/dist/ui/index.d.ts.map +1 -0
  136. package/dist/ui/index.js +84 -0
  137. package/dist/ui/index.js.map +1 -0
  138. package/dist/utils/env.d.ts +17 -0
  139. package/dist/utils/env.d.ts.map +1 -0
  140. package/dist/utils/env.js +35 -0
  141. package/dist/utils/env.js.map +1 -0
  142. package/dist/utils/keys.d.ts +16 -0
  143. package/dist/utils/keys.d.ts.map +1 -0
  144. package/dist/utils/keys.js +155 -0
  145. package/dist/utils/keys.js.map +1 -0
  146. package/dist/utils/platform.d.ts +16 -0
  147. package/dist/utils/platform.d.ts.map +1 -0
  148. package/dist/utils/platform.js +41 -0
  149. package/dist/utils/platform.js.map +1 -0
  150. package/dist/utils/session-logger.d.ts +31 -0
  151. package/dist/utils/session-logger.d.ts.map +1 -0
  152. package/dist/utils/session-logger.js +125 -0
  153. package/dist/utils/session-logger.js.map +1 -0
  154. package/dist/utils/stats.d.ts +46 -0
  155. package/dist/utils/stats.d.ts.map +1 -0
  156. package/dist/utils/stats.js +89 -0
  157. package/dist/utils/stats.js.map +1 -0
  158. package/dist/utils/version.d.ts +2 -0
  159. package/dist/utils/version.d.ts.map +1 -0
  160. package/dist/utils/version.js +9 -0
  161. package/dist/utils/version.js.map +1 -0
  162. package/logo.png +0 -0
  163. package/package.json +61 -0
  164. package/packages/desktop-electron/THIRD-PARTY-NOTICES +56 -0
  165. package/packages/desktop-electron/build/afterPack.cjs +147 -0
  166. package/packages/desktop-electron/package-lock.json +10071 -0
  167. package/packages/desktop-electron/package.json +170 -0
  168. package/packages/desktop-electron/resources/icons/mac/icon.icns +0 -0
  169. package/packages/desktop-electron/resources/icons/png/1024x1024.png +0 -0
  170. package/packages/desktop-electron/resources/icons/png/128x128.png +0 -0
  171. package/packages/desktop-electron/resources/icons/png/16x16.png +0 -0
  172. package/packages/desktop-electron/resources/icons/png/24x24.png +0 -0
  173. package/packages/desktop-electron/resources/icons/png/256x256.png +0 -0
  174. package/packages/desktop-electron/resources/icons/png/32x32.png +0 -0
  175. package/packages/desktop-electron/resources/icons/png/48x48.png +0 -0
  176. package/packages/desktop-electron/resources/icons/png/512x512.png +0 -0
  177. package/packages/desktop-electron/resources/icons/png/64x64.png +0 -0
  178. package/packages/desktop-electron/resources/icons/win/icon.ico +0 -0
  179. package/packages/desktop-electron/scripts/download-models.js +97 -0
  180. package/packages/desktop-electron/scripts/prepare-sandbox-bins.js +186 -0
  181. package/packages/desktop-electron/tests/main/ai-detection/additionalFunctions.test.ts +224 -0
  182. package/packages/desktop-electron/tests/main/ai-detection/checkOverridePrefix.test.ts +162 -0
  183. package/packages/desktop-electron/tests/main/ai-detection/classifyInput.test.ts +132 -0
  184. package/packages/desktop-electron/tests/main/ai-detection/detectTypos.test.ts +342 -0
  185. package/packages/desktop-electron/tests/main/ai-detection/fixtures/commands.ts +134 -0
  186. package/packages/desktop-electron/tests/main/ai-detection/fixtures/natural-language.ts +133 -0
  187. package/packages/desktop-electron/tests/main/ai-detection/fixtures/typos.ts +123 -0
  188. package/packages/desktop-electron/tests/main/ai-detection/hasValidSubcommand.test.ts +218 -0
  189. package/packages/desktop-electron/tests/main/ai-detection/isCommandNotFound.test.ts +117 -0
  190. package/packages/desktop-electron/tests/main/error-triage/buildTriagePrompt.test.ts +133 -0
  191. package/packages/desktop-electron/tests/main/error-triage/parseTriageResponse.test.ts +123 -0
  192. package/packages/desktop-electron/tests/main/terminal-bridge/battery-optimization.test.ts +243 -0
  193. package/packages/desktop-electron/tests/main/terminal-bridge/command-fast-track.test.ts +292 -0
  194. package/packages/desktop-electron/tests/main/terminal-bridge/default-cwd.test.ts +70 -0
  195. package/packages/desktop-electron/tests/setup.ts +274 -0
  196. package/packages/desktop-electron/tsconfig.json +18 -0
  197. package/packages/desktop-electron/tsconfig.main.json +20 -0
  198. package/packages/desktop-electron/vite.config.ts +19 -0
  199. package/packages/desktop-electron/vitest.config.ts +18 -0
  200. package/tsconfig.json +19 -0
@@ -0,0 +1,310 @@
1
+ import * as fs from "fs";
2
+ import { Server as NetServer, connect as netConnect } from "net";
3
+ import { getStats } from "../utils/stats.js";
4
+ // Status file for shell prompt to read MCP connection status
5
+ const MCP_STATUS_FILE = "/tmp/brosh-mcp-status";
6
+ /**
7
+ * Write MCP status to file for shell prompt to read
8
+ */
9
+ function writeMcpStatus(enabled) {
10
+ try {
11
+ fs.writeFileSync(MCP_STATUS_FILE, enabled ? "enabled" : "disabled");
12
+ }
13
+ catch {
14
+ // Ignore errors - status file is optional
15
+ }
16
+ }
17
+ /**
18
+ * Get the MCP status file path (for shell prompt integration)
19
+ */
20
+ export function getMcpStatusFile() {
21
+ return MCP_STATUS_FILE;
22
+ }
23
+ // Tool handlers
24
+ import { handleType } from "../tools/type.js";
25
+ import { handleSendKey } from "../tools/sendKey.js";
26
+ import { handleGetContent } from "../tools/getContent.js";
27
+ import { handleScreenshot } from "../tools/screenshot.js";
28
+ import { handleStartRecording } from "../tools/startRecording.js";
29
+ import { handleStopRecording } from "../tools/stopRecording.js";
30
+ /**
31
+ * Check if a socket path is already in use by another server.
32
+ * Attempts to connect - if successful, another instance is running.
33
+ * Returns a promise that resolves to true if in use, false otherwise.
34
+ */
35
+ export function isSocketInUse(socketPath) {
36
+ return new Promise((resolve) => {
37
+ // Check if socket file exists first
38
+ if (!fs.existsSync(socketPath)) {
39
+ resolve(false);
40
+ return;
41
+ }
42
+ const client = netConnect(socketPath);
43
+ // Set a short timeout for the connection attempt
44
+ const timeout = setTimeout(() => {
45
+ client.destroy();
46
+ resolve(false);
47
+ }, 1000);
48
+ client.on("connect", () => {
49
+ clearTimeout(timeout);
50
+ client.destroy();
51
+ resolve(true);
52
+ });
53
+ client.on("error", () => {
54
+ clearTimeout(timeout);
55
+ client.destroy();
56
+ resolve(false);
57
+ });
58
+ });
59
+ }
60
+ /**
61
+ * Check if socket is in use and log a warning if taking over from another instance.
62
+ * Call this before createToolProxyServer to notify users of the takeover.
63
+ * Returns the owner type if detected ("cli" or "gui"), or null if not in use.
64
+ */
65
+ export async function checkSocketAndWarn(socketPath) {
66
+ const inUse = await isSocketInUse(socketPath);
67
+ if (inUse) {
68
+ console.error(`[brosh] Warning: Taking over socket from another brosh instance at ${socketPath}`);
69
+ console.error("[brosh] The other instance's MCP connections will be disconnected.");
70
+ return "cli"; // Can't distinguish, assume generic
71
+ }
72
+ return null;
73
+ }
74
+ /**
75
+ * Transport that communicates over a Unix socket connection
76
+ * (Used for full MCP protocol when needed)
77
+ */
78
+ export class SocketTransport {
79
+ socket;
80
+ buffer = "";
81
+ onmessage;
82
+ onerror;
83
+ onclose;
84
+ constructor(socket) {
85
+ this.socket = socket;
86
+ this.socket.on("data", (data) => {
87
+ this.buffer += data.toString();
88
+ this.processBuffer();
89
+ });
90
+ this.socket.on("error", (error) => {
91
+ this.onerror?.(error);
92
+ });
93
+ this.socket.on("close", () => {
94
+ this.onclose?.();
95
+ });
96
+ }
97
+ processBuffer() {
98
+ const lines = this.buffer.split("\n");
99
+ this.buffer = lines.pop() || "";
100
+ for (const line of lines) {
101
+ if (line.trim()) {
102
+ try {
103
+ const message = JSON.parse(line);
104
+ this.onmessage?.(message);
105
+ }
106
+ catch (error) {
107
+ this.onerror?.(new Error(`Failed to parse message: ${line}`));
108
+ }
109
+ }
110
+ }
111
+ }
112
+ async start() {
113
+ // Socket is already connected
114
+ }
115
+ async close() {
116
+ this.socket.end();
117
+ }
118
+ async send(message) {
119
+ return new Promise((resolve, reject) => {
120
+ const data = JSON.stringify(message) + "\n";
121
+ this.socket.write(data, (error) => {
122
+ if (error) {
123
+ reject(error);
124
+ }
125
+ else {
126
+ resolve();
127
+ }
128
+ });
129
+ });
130
+ }
131
+ }
132
+ /**
133
+ * Create a Unix socket server that accepts MCP connections
134
+ */
135
+ export function createSocketServer(socketPath, onConnection) {
136
+ // Remove existing socket file if it exists
137
+ try {
138
+ fs.unlinkSync(socketPath);
139
+ }
140
+ catch {
141
+ // Ignore if doesn't exist
142
+ }
143
+ const server = new NetServer((socket) => {
144
+ const transport = new SocketTransport(socket);
145
+ onConnection(transport);
146
+ });
147
+ server.listen(socketPath);
148
+ return server;
149
+ }
150
+ /**
151
+ * Create a simple request/response socket server for tool proxying
152
+ * This is the protocol used between interactive mode and MCP client mode
153
+ */
154
+ export function createToolProxyServer(socketPath, manager) {
155
+ // Remove existing socket file if it exists
156
+ try {
157
+ fs.unlinkSync(socketPath);
158
+ }
159
+ catch {
160
+ // Ignore if doesn't exist
161
+ }
162
+ // Track active client - only one MCP connection allowed at a time
163
+ let activeClient = null;
164
+ const server = new NetServer((socket) => {
165
+ // Disconnect existing client — only one MCP connection at a time
166
+ if (activeClient) {
167
+ console.error("[brosh] New MCP client connected, disconnecting previous client");
168
+ activeClient.destroy();
169
+ activeClient = null;
170
+ }
171
+ activeClient = socket;
172
+ let buffer = "";
173
+ socket.on("data", async (data) => {
174
+ buffer += data.toString();
175
+ const lines = buffer.split("\n");
176
+ buffer = lines.pop() || "";
177
+ for (const line of lines) {
178
+ if (line.trim()) {
179
+ try {
180
+ const request = JSON.parse(line);
181
+ const response = await handleToolRequest(manager, request);
182
+ socket.write(JSON.stringify(response) + "\n");
183
+ }
184
+ catch (error) {
185
+ const errorMessage = error instanceof Error ? error.message : String(error);
186
+ socket.write(JSON.stringify({
187
+ id: 0,
188
+ error: { message: `Parse error: ${errorMessage}` },
189
+ }) + "\n");
190
+ }
191
+ }
192
+ }
193
+ });
194
+ socket.on("close", () => {
195
+ if (activeClient === socket) {
196
+ activeClient = null;
197
+ }
198
+ });
199
+ socket.on("error", () => {
200
+ if (activeClient === socket) {
201
+ activeClient = null;
202
+ }
203
+ });
204
+ });
205
+ server.listen(socketPath);
206
+ // Watch for socket file being replaced (another instance taking over)
207
+ // Track the inode of our socket - if it changes, someone replaced it
208
+ let socketStolen = false;
209
+ let originalInode = null;
210
+ // Get the inode of our socket file after server starts listening
211
+ server.once("listening", () => {
212
+ try {
213
+ const stats = fs.statSync(socketPath, { bigint: true });
214
+ originalInode = stats.ino;
215
+ // Write "enabled" status for shell prompt
216
+ writeMcpStatus(true);
217
+ }
218
+ catch {
219
+ // Couldn't get inode, watcher won't work
220
+ }
221
+ });
222
+ const watchInterval = setInterval(() => {
223
+ if (socketStolen || originalInode === null)
224
+ return;
225
+ try {
226
+ // Check if socket file still exists and has the same inode
227
+ const stats = fs.statSync(socketPath, { bigint: true });
228
+ if (!stats.isSocket() || stats.ino !== originalInode) {
229
+ // File was replaced by another instance
230
+ socketStolen = true;
231
+ writeMcpStatus(false);
232
+ console.error("\n[brosh] Socket was taken over by another brosh instance (GUI or CLI)");
233
+ console.error("[brosh] MCP clients can no longer connect to this session\n");
234
+ // Disconnect any active client since they're now orphaned
235
+ if (activeClient) {
236
+ activeClient.destroy();
237
+ activeClient = null;
238
+ }
239
+ }
240
+ }
241
+ catch {
242
+ // Socket file was deleted - another instance took over
243
+ socketStolen = true;
244
+ writeMcpStatus(false);
245
+ console.error("\n[brosh] Socket was taken over by another brosh instance (GUI or CLI)");
246
+ console.error("[brosh] MCP clients can no longer connect to this session\n");
247
+ // Disconnect any active client since they're now orphaned
248
+ if (activeClient) {
249
+ activeClient.destroy();
250
+ activeClient = null;
251
+ }
252
+ }
253
+ }, 2000); // Check every 2 seconds
254
+ // Clean up watcher when server closes
255
+ server.on("close", () => {
256
+ clearInterval(watchInterval);
257
+ writeMcpStatus(false);
258
+ });
259
+ return server;
260
+ }
261
+ /**
262
+ * Handle a tool request from the MCP client
263
+ */
264
+ async function handleToolRequest(manager, request) {
265
+ const { id, method, params } = request;
266
+ const stats = getStats();
267
+ try {
268
+ let result;
269
+ switch (method) {
270
+ case "type":
271
+ stats.recordToolCall("type");
272
+ result = handleType(manager, params);
273
+ break;
274
+ case "sendKey":
275
+ stats.recordToolCall("sendKey");
276
+ result = handleSendKey(manager, params);
277
+ break;
278
+ case "getContent":
279
+ stats.recordToolCall("getContent");
280
+ result = handleGetContent(manager, params);
281
+ break;
282
+ case "takeScreenshot":
283
+ stats.recordToolCall("takeScreenshot");
284
+ result = handleScreenshot(manager, params);
285
+ break;
286
+ case "startRecording":
287
+ stats.recordToolCall("startRecording");
288
+ result = handleStartRecording(manager, params);
289
+ break;
290
+ case "stopRecording":
291
+ stats.recordToolCall("stopRecording");
292
+ result = await handleStopRecording(manager, params);
293
+ break;
294
+ default:
295
+ return {
296
+ id,
297
+ error: { message: `Unknown method: ${method}` },
298
+ };
299
+ }
300
+ return { id, result };
301
+ }
302
+ catch (error) {
303
+ const message = error instanceof Error ? error.message : String(error);
304
+ return {
305
+ id,
306
+ error: { message },
307
+ };
308
+ }
309
+ }
310
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Extended ClientInfo Types for MCP Observability
3
+ *
4
+ * Defines the schema for extended client metadata passed during MCP initialization.
5
+ * Includes runtime info, capabilities, session metadata, and observability options.
6
+ */
7
+ import { z } from "zod";
8
+ export declare const ClientInfoSchema: z.ZodObject<{
9
+ name: z.ZodString;
10
+ version: z.ZodString;
11
+ instanceId: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ name: string;
14
+ version: string;
15
+ instanceId?: string | undefined;
16
+ }, {
17
+ name: string;
18
+ version: string;
19
+ instanceId?: string | undefined;
20
+ }>;
21
+ export declare const RuntimeInfoSchema: z.ZodObject<{
22
+ hostApp: z.ZodOptional<z.ZodString>;
23
+ platform: z.ZodOptional<z.ZodString>;
24
+ arch: z.ZodOptional<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ platform?: string | undefined;
27
+ hostApp?: string | undefined;
28
+ arch?: string | undefined;
29
+ }, {
30
+ platform?: string | undefined;
31
+ hostApp?: string | undefined;
32
+ arch?: string | undefined;
33
+ }>;
34
+ export declare const CapabilitiesSchema: z.ZodObject<{
35
+ streaming: z.ZodOptional<z.ZodBoolean>;
36
+ notifications: z.ZodOptional<z.ZodBoolean>;
37
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ streaming?: boolean | undefined;
40
+ notifications?: boolean | undefined;
41
+ maxConcurrency?: number | undefined;
42
+ }, {
43
+ streaming?: boolean | undefined;
44
+ notifications?: boolean | undefined;
45
+ maxConcurrency?: number | undefined;
46
+ }>;
47
+ export declare const SessionMetadataSchema: z.ZodObject<{
48
+ label: z.ZodOptional<z.ZodString>;
49
+ workspaceId: z.ZodOptional<z.ZodString>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ label?: string | undefined;
52
+ workspaceId?: string | undefined;
53
+ }, {
54
+ label?: string | undefined;
55
+ workspaceId?: string | undefined;
56
+ }>;
57
+ export declare const ObservabilitySchema: z.ZodObject<{
58
+ traceId: z.ZodOptional<z.ZodString>;
59
+ logLevel: z.ZodOptional<z.ZodEnum<["info", "debug"]>>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ traceId?: string | undefined;
62
+ logLevel?: "info" | "debug" | undefined;
63
+ }, {
64
+ traceId?: string | undefined;
65
+ logLevel?: "info" | "debug" | undefined;
66
+ }>;
67
+ export declare const ExtendedClientInfoSchema: z.ZodObject<{
68
+ clientInfo: z.ZodOptional<z.ZodObject<{
69
+ name: z.ZodString;
70
+ version: z.ZodString;
71
+ instanceId: z.ZodOptional<z.ZodString>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ name: string;
74
+ version: string;
75
+ instanceId?: string | undefined;
76
+ }, {
77
+ name: string;
78
+ version: string;
79
+ instanceId?: string | undefined;
80
+ }>>;
81
+ runtime: z.ZodOptional<z.ZodObject<{
82
+ hostApp: z.ZodOptional<z.ZodString>;
83
+ platform: z.ZodOptional<z.ZodString>;
84
+ arch: z.ZodOptional<z.ZodString>;
85
+ }, "strip", z.ZodTypeAny, {
86
+ platform?: string | undefined;
87
+ hostApp?: string | undefined;
88
+ arch?: string | undefined;
89
+ }, {
90
+ platform?: string | undefined;
91
+ hostApp?: string | undefined;
92
+ arch?: string | undefined;
93
+ }>>;
94
+ capabilities: z.ZodOptional<z.ZodObject<{
95
+ streaming: z.ZodOptional<z.ZodBoolean>;
96
+ notifications: z.ZodOptional<z.ZodBoolean>;
97
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
98
+ }, "strip", z.ZodTypeAny, {
99
+ streaming?: boolean | undefined;
100
+ notifications?: boolean | undefined;
101
+ maxConcurrency?: number | undefined;
102
+ }, {
103
+ streaming?: boolean | undefined;
104
+ notifications?: boolean | undefined;
105
+ maxConcurrency?: number | undefined;
106
+ }>>;
107
+ session: z.ZodOptional<z.ZodObject<{
108
+ label: z.ZodOptional<z.ZodString>;
109
+ workspaceId: z.ZodOptional<z.ZodString>;
110
+ }, "strip", z.ZodTypeAny, {
111
+ label?: string | undefined;
112
+ workspaceId?: string | undefined;
113
+ }, {
114
+ label?: string | undefined;
115
+ workspaceId?: string | undefined;
116
+ }>>;
117
+ observability: z.ZodOptional<z.ZodObject<{
118
+ traceId: z.ZodOptional<z.ZodString>;
119
+ logLevel: z.ZodOptional<z.ZodEnum<["info", "debug"]>>;
120
+ }, "strip", z.ZodTypeAny, {
121
+ traceId?: string | undefined;
122
+ logLevel?: "info" | "debug" | undefined;
123
+ }, {
124
+ traceId?: string | undefined;
125
+ logLevel?: "info" | "debug" | undefined;
126
+ }>>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ capabilities?: {
129
+ streaming?: boolean | undefined;
130
+ notifications?: boolean | undefined;
131
+ maxConcurrency?: number | undefined;
132
+ } | undefined;
133
+ clientInfo?: {
134
+ name: string;
135
+ version: string;
136
+ instanceId?: string | undefined;
137
+ } | undefined;
138
+ runtime?: {
139
+ platform?: string | undefined;
140
+ hostApp?: string | undefined;
141
+ arch?: string | undefined;
142
+ } | undefined;
143
+ session?: {
144
+ label?: string | undefined;
145
+ workspaceId?: string | undefined;
146
+ } | undefined;
147
+ observability?: {
148
+ traceId?: string | undefined;
149
+ logLevel?: "info" | "debug" | undefined;
150
+ } | undefined;
151
+ }, {
152
+ capabilities?: {
153
+ streaming?: boolean | undefined;
154
+ notifications?: boolean | undefined;
155
+ maxConcurrency?: number | undefined;
156
+ } | undefined;
157
+ clientInfo?: {
158
+ name: string;
159
+ version: string;
160
+ instanceId?: string | undefined;
161
+ } | undefined;
162
+ runtime?: {
163
+ platform?: string | undefined;
164
+ hostApp?: string | undefined;
165
+ arch?: string | undefined;
166
+ } | undefined;
167
+ session?: {
168
+ label?: string | undefined;
169
+ workspaceId?: string | undefined;
170
+ } | undefined;
171
+ observability?: {
172
+ traceId?: string | undefined;
173
+ logLevel?: "info" | "debug" | undefined;
174
+ } | undefined;
175
+ }>;
176
+ export type ClientInfo = z.infer<typeof ClientInfoSchema>;
177
+ export type RuntimeInfo = z.infer<typeof RuntimeInfoSchema>;
178
+ export type Capabilities = z.infer<typeof CapabilitiesSchema>;
179
+ export type SessionMetadata = z.infer<typeof SessionMetadataSchema>;
180
+ export type Observability = z.infer<typeof ObservabilitySchema>;
181
+ export type ExtendedClientInfo = z.infer<typeof ExtendedClientInfoSchema>;
182
+ /**
183
+ * Tracked client state stored per-connection
184
+ */
185
+ export interface TrackedClient {
186
+ clientId: string;
187
+ clientInfo?: ClientInfo;
188
+ runtime?: RuntimeInfo;
189
+ capabilities?: Capabilities;
190
+ session?: SessionMetadata;
191
+ observability?: Observability;
192
+ connectedAt: number;
193
+ }
194
+ /**
195
+ * Session log entry types for JSONL logging
196
+ */
197
+ export type SessionLogEntry = SessionConnectEntry | SessionDisconnectEntry | SessionToolCallEntry;
198
+ export interface SessionConnectEntry {
199
+ type: "connect";
200
+ timestamp: number;
201
+ clientId: string;
202
+ clientName?: string;
203
+ version?: string;
204
+ runtime?: RuntimeInfo;
205
+ }
206
+ export interface SessionDisconnectEntry {
207
+ type: "disconnect";
208
+ timestamp: number;
209
+ clientId: string;
210
+ }
211
+ export interface SessionToolCallEntry {
212
+ type: "tool_call";
213
+ timestamp: number;
214
+ clientId: string;
215
+ method: string;
216
+ params?: Record<string, unknown>;
217
+ durationMs: number;
218
+ result: "success" | "error";
219
+ error?: string;
220
+ }
221
+ /**
222
+ * Generate a client ID from client info
223
+ * Uses instanceId if provided, otherwise generates from name+version+timestamp+random
224
+ */
225
+ export declare function generateClientId(clientInfo?: Partial<ClientInfo>): string;
226
+ //# sourceMappingURL=mcp-client-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client-info.d.ts","sourceRoot":"","sources":["../../src/types/mcp-client-info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAGH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAC;AAGH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,sBAAsB,GACtB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAczE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Extended ClientInfo Types for MCP Observability
3
+ *
4
+ * Defines the schema for extended client metadata passed during MCP initialization.
5
+ * Includes runtime info, capabilities, session metadata, and observability options.
6
+ */
7
+ import { z } from "zod";
8
+ // Base client info (standard MCP)
9
+ export const ClientInfoSchema = z.object({
10
+ name: z.string(),
11
+ version: z.string(),
12
+ instanceId: z.string().optional(), // UUID per launch
13
+ });
14
+ // Runtime environment info
15
+ export const RuntimeInfoSchema = z.object({
16
+ hostApp: z.string().optional(), // "VSCode", "Cursor", "Terminal"
17
+ platform: z.string().optional(), // "macOS", "Linux", "Windows"
18
+ arch: z.string().optional(), // "arm64", "x64"
19
+ });
20
+ // Client capabilities
21
+ export const CapabilitiesSchema = z.object({
22
+ streaming: z.boolean().optional(),
23
+ notifications: z.boolean().optional(),
24
+ maxConcurrency: z.number().optional(),
25
+ });
26
+ // Session metadata
27
+ export const SessionMetadataSchema = z.object({
28
+ label: z.string().optional(), // "dev", "ci", "demo"
29
+ workspaceId: z.string().optional(),
30
+ });
31
+ // Observability options
32
+ export const ObservabilitySchema = z.object({
33
+ traceId: z.string().optional(),
34
+ logLevel: z.enum(["info", "debug"]).optional(),
35
+ });
36
+ // Extended client info schema
37
+ export const ExtendedClientInfoSchema = z.object({
38
+ clientInfo: ClientInfoSchema.optional(),
39
+ runtime: RuntimeInfoSchema.optional(),
40
+ capabilities: CapabilitiesSchema.optional(),
41
+ session: SessionMetadataSchema.optional(),
42
+ observability: ObservabilitySchema.optional(),
43
+ });
44
+ /**
45
+ * Generate a client ID from client info
46
+ * Uses instanceId if provided, otherwise generates from name+version+timestamp+random
47
+ */
48
+ export function generateClientId(clientInfo) {
49
+ // Use instanceId if provided
50
+ if (clientInfo?.instanceId) {
51
+ return clientInfo.instanceId;
52
+ }
53
+ // Generate fallback: name-version-timestamp-random
54
+ const parts = [
55
+ clientInfo?.name || "unknown",
56
+ clientInfo?.version || "0.0.0",
57
+ Date.now().toString(36),
58
+ Math.random().toString(36).substring(2, 8),
59
+ ];
60
+ return parts.join("-");
61
+ }
62
+ //# sourceMappingURL=mcp-client-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client-info.js","sourceRoot":"","sources":["../../src/types/mcp-client-info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;CACtD,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iCAAiC;IACjE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,8BAA8B;IAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iBAAiB;CAC/C,CAAC,CAAC;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,sBAAsB;IACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,wBAAwB;AACxB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACzC,aAAa,EAAE,mBAAmB,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAyDH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAgC;IAC/D,6BAA6B;IAC7B,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,mDAAmD;IACnD,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,IAAI,IAAI,SAAS;QAC7B,UAAU,EAAE,OAAO,IAAI,OAAO;QAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface BannerOptions {
2
+ socketPath: string;
3
+ cols: number;
4
+ rows: number;
5
+ shell: string;
6
+ sandboxEnabled?: boolean;
7
+ }
8
+ /**
9
+ * Generate the startup banner string
10
+ */
11
+ export declare function getBanner(options: BannerOptions): string;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAyDxD"}