@graphty/remote-logger 0.0.1 → 1.2.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.
Files changed (138) hide show
  1. package/README.md +944 -28
  2. package/bin/remote-log-server.js +3 -0
  3. package/dist/client/RemoteLogClient.d.ts +116 -0
  4. package/dist/client/RemoteLogClient.d.ts.map +1 -0
  5. package/dist/client/RemoteLogClient.js +269 -0
  6. package/dist/client/RemoteLogClient.js.map +1 -0
  7. package/dist/client/index.d.ts +7 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +6 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/types.d.ts +60 -0
  12. package/dist/client/types.d.ts.map +1 -0
  13. package/dist/client/types.js +6 -0
  14. package/dist/client/types.js.map +1 -0
  15. package/dist/index.d.ts +22 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +23 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/mcp/index.d.ts +9 -0
  20. package/dist/mcp/index.d.ts.map +1 -0
  21. package/dist/mcp/index.js +9 -0
  22. package/dist/mcp/index.js.map +1 -0
  23. package/dist/mcp/mcp-server.d.ts +32 -0
  24. package/dist/mcp/mcp-server.d.ts.map +1 -0
  25. package/dist/mcp/mcp-server.js +270 -0
  26. package/dist/mcp/mcp-server.js.map +1 -0
  27. package/dist/mcp/tools/index.d.ts +14 -0
  28. package/dist/mcp/tools/index.d.ts.map +1 -0
  29. package/dist/mcp/tools/index.js +14 -0
  30. package/dist/mcp/tools/index.js.map +1 -0
  31. package/dist/mcp/tools/logs-clear.d.ts +76 -0
  32. package/dist/mcp/tools/logs-clear.d.ts.map +1 -0
  33. package/dist/mcp/tools/logs-clear.js +58 -0
  34. package/dist/mcp/tools/logs-clear.js.map +1 -0
  35. package/dist/mcp/tools/logs-get-all.d.ts +60 -0
  36. package/dist/mcp/tools/logs-get-all.d.ts.map +1 -0
  37. package/dist/mcp/tools/logs-get-all.js +50 -0
  38. package/dist/mcp/tools/logs-get-all.js.map +1 -0
  39. package/dist/mcp/tools/logs-get-errors.d.ts +65 -0
  40. package/dist/mcp/tools/logs-get-errors.d.ts.map +1 -0
  41. package/dist/mcp/tools/logs-get-errors.js +46 -0
  42. package/dist/mcp/tools/logs-get-errors.js.map +1 -0
  43. package/dist/mcp/tools/logs-get-file-path.d.ts +75 -0
  44. package/dist/mcp/tools/logs-get-file-path.d.ts.map +1 -0
  45. package/dist/mcp/tools/logs-get-file-path.js +90 -0
  46. package/dist/mcp/tools/logs-get-file-path.js.map +1 -0
  47. package/dist/mcp/tools/logs-get-recent.d.ts +89 -0
  48. package/dist/mcp/tools/logs-get-recent.d.ts.map +1 -0
  49. package/dist/mcp/tools/logs-get-recent.js +74 -0
  50. package/dist/mcp/tools/logs-get-recent.js.map +1 -0
  51. package/dist/mcp/tools/logs-list-sessions.d.ts +64 -0
  52. package/dist/mcp/tools/logs-list-sessions.d.ts.map +1 -0
  53. package/dist/mcp/tools/logs-list-sessions.js +48 -0
  54. package/dist/mcp/tools/logs-list-sessions.js.map +1 -0
  55. package/dist/mcp/tools/logs-receive.d.ts +150 -0
  56. package/dist/mcp/tools/logs-receive.d.ts.map +1 -0
  57. package/dist/mcp/tools/logs-receive.js +68 -0
  58. package/dist/mcp/tools/logs-receive.js.map +1 -0
  59. package/dist/mcp/tools/logs-search.d.ts +91 -0
  60. package/dist/mcp/tools/logs-search.d.ts.map +1 -0
  61. package/dist/mcp/tools/logs-search.js +68 -0
  62. package/dist/mcp/tools/logs-search.js.map +1 -0
  63. package/dist/mcp/tools/logs-status.d.ts +45 -0
  64. package/dist/mcp/tools/logs-status.d.ts.map +1 -0
  65. package/dist/mcp/tools/logs-status.js +45 -0
  66. package/dist/mcp/tools/logs-status.js.map +1 -0
  67. package/dist/server/dual-server.d.ts +76 -0
  68. package/dist/server/dual-server.d.ts.map +1 -0
  69. package/dist/server/dual-server.js +214 -0
  70. package/dist/server/dual-server.js.map +1 -0
  71. package/dist/server/index.d.ts +12 -0
  72. package/dist/server/index.d.ts.map +1 -0
  73. package/dist/server/index.js +12 -0
  74. package/dist/server/index.js.map +1 -0
  75. package/dist/server/jsonl-writer.d.ts +93 -0
  76. package/dist/server/jsonl-writer.d.ts.map +1 -0
  77. package/dist/server/jsonl-writer.js +205 -0
  78. package/dist/server/jsonl-writer.js.map +1 -0
  79. package/dist/server/log-server.d.ts +126 -0
  80. package/dist/server/log-server.d.ts.map +1 -0
  81. package/dist/server/log-server.js +589 -0
  82. package/dist/server/log-server.js.map +1 -0
  83. package/dist/server/log-storage.d.ts +301 -0
  84. package/dist/server/log-storage.d.ts.map +1 -0
  85. package/dist/server/log-storage.js +408 -0
  86. package/dist/server/log-storage.js.map +1 -0
  87. package/dist/server/marker-utils.d.ts +69 -0
  88. package/dist/server/marker-utils.d.ts.map +1 -0
  89. package/dist/server/marker-utils.js +118 -0
  90. package/dist/server/marker-utils.js.map +1 -0
  91. package/dist/server/self-signed-cert.d.ts +30 -0
  92. package/dist/server/self-signed-cert.d.ts.map +1 -0
  93. package/dist/server/self-signed-cert.js +83 -0
  94. package/dist/server/self-signed-cert.js.map +1 -0
  95. package/dist/ui/ConsoleCaptureUI.d.ts +118 -0
  96. package/dist/ui/ConsoleCaptureUI.d.ts.map +1 -0
  97. package/dist/ui/ConsoleCaptureUI.js +571 -0
  98. package/dist/ui/ConsoleCaptureUI.js.map +1 -0
  99. package/dist/ui/index.d.ts +15 -0
  100. package/dist/ui/index.d.ts.map +1 -0
  101. package/dist/ui/index.js +15 -0
  102. package/dist/ui/index.js.map +1 -0
  103. package/dist/vite/index.d.ts +8 -0
  104. package/dist/vite/index.d.ts.map +1 -0
  105. package/dist/vite/index.js +8 -0
  106. package/dist/vite/index.js.map +1 -0
  107. package/dist/vite/plugin.d.ts +42 -0
  108. package/dist/vite/plugin.d.ts.map +1 -0
  109. package/dist/vite/plugin.js +46 -0
  110. package/dist/vite/plugin.js.map +1 -0
  111. package/package.json +90 -7
  112. package/src/client/RemoteLogClient.ts +328 -0
  113. package/src/client/index.ts +7 -0
  114. package/src/client/types.ts +62 -0
  115. package/src/index.ts +28 -0
  116. package/src/mcp/index.ts +25 -0
  117. package/src/mcp/mcp-server.ts +364 -0
  118. package/src/mcp/tools/index.ts +69 -0
  119. package/src/mcp/tools/logs-clear.ts +86 -0
  120. package/src/mcp/tools/logs-get-all.ts +78 -0
  121. package/src/mcp/tools/logs-get-errors.ts +71 -0
  122. package/src/mcp/tools/logs-get-file-path.ts +121 -0
  123. package/src/mcp/tools/logs-get-recent.ts +104 -0
  124. package/src/mcp/tools/logs-list-sessions.ts +71 -0
  125. package/src/mcp/tools/logs-receive.ts +96 -0
  126. package/src/mcp/tools/logs-search.ts +95 -0
  127. package/src/mcp/tools/logs-status.ts +69 -0
  128. package/src/server/dual-server.ts +308 -0
  129. package/src/server/index.ts +54 -0
  130. package/src/server/jsonl-writer.ts +277 -0
  131. package/src/server/log-server.ts +763 -0
  132. package/src/server/log-storage.ts +651 -0
  133. package/src/server/marker-utils.ts +144 -0
  134. package/src/server/self-signed-cert.ts +93 -0
  135. package/src/ui/ConsoleCaptureUI.ts +649 -0
  136. package/src/ui/index.ts +15 -0
  137. package/src/vite/index.ts +8 -0
  138. package/src/vite/plugin.ts +59 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../dist/server/index.js";
3
+ main();
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Browser client for sending log messages to a remote server.
3
+ * Provides batching and automatic retry with exponential backoff.
4
+ * @module client/RemoteLogClient
5
+ */
6
+ import type { RemoteLogClientOptions } from "./types.js";
7
+ /**
8
+ * Client for sending log messages to a remote logging server.
9
+ *
10
+ * Features:
11
+ * - Batches multiple log entries before sending
12
+ * - Automatic retry with exponential backoff on network failures
13
+ * - Unique session ID for correlating logs
14
+ * @example
15
+ * ```typescript
16
+ * const client = new RemoteLogClient({
17
+ * serverUrl: "http://localhost:9080",
18
+ * sessionPrefix: "myapp",
19
+ * });
20
+ *
21
+ * client.log("INFO", "User logged in", { userId: 123 });
22
+ * client.log("DEBUG", "Loading data...");
23
+ *
24
+ * // Flush immediately when needed
25
+ * await client.flush();
26
+ *
27
+ * // Clean up when done
28
+ * await client.close();
29
+ * ```
30
+ */
31
+ export declare class RemoteLogClient {
32
+ /** Unique identifier for this logging session */
33
+ readonly sessionId: string;
34
+ private readonly serverUrl;
35
+ private readonly batchIntervalMs;
36
+ private readonly maxRetries;
37
+ private readonly retryDelayMs;
38
+ private readonly throttlePatterns;
39
+ private readonly projectMarker;
40
+ private readonly worktreePath;
41
+ private pendingLogs;
42
+ private batchTimer;
43
+ private isClosed;
44
+ private flushPromise;
45
+ /** Tracks when each throttle pattern was last allowed through */
46
+ private throttleLastTimes;
47
+ /**
48
+ * Creates a new RemoteLogClient.
49
+ * @param options - Configuration options
50
+ */
51
+ constructor(options: RemoteLogClientOptions);
52
+ /**
53
+ * Checks if a message should be throttled based on configured patterns.
54
+ * Updates the last time tracking if the message is allowed through.
55
+ * @param message - The message to check
56
+ * @returns true if the message should be dropped (throttled)
57
+ */
58
+ private shouldThrottle;
59
+ /**
60
+ * Logs a message at the specified level.
61
+ * @param level - Log level (e.g., "INFO", "DEBUG", "WARN", "ERROR")
62
+ * @param message - The log message
63
+ * @param data - Optional additional data to include
64
+ */
65
+ log(level: string, message: string, data?: Record<string, unknown>): void;
66
+ /**
67
+ * Schedules a batch send after the configured interval.
68
+ * If a timer is already scheduled, does nothing.
69
+ */
70
+ private scheduleBatchSend;
71
+ /**
72
+ * Sends the current batch of logs to the server.
73
+ * Uses retry logic with exponential backoff on failure.
74
+ */
75
+ private sendBatch;
76
+ /**
77
+ * Sends logs with retry logic using exponential backoff.
78
+ * @param logs - The log entries to send
79
+ */
80
+ private sendWithRetry;
81
+ /**
82
+ * Makes the actual HTTP request to send logs.
83
+ * @param logs - The log entries to send
84
+ * @throws Error if the request fails
85
+ */
86
+ private sendRequest;
87
+ /**
88
+ * Helper to sleep for the specified duration.
89
+ * @param ms - Milliseconds to sleep
90
+ * @returns A promise that resolves after the specified time
91
+ */
92
+ private sleep;
93
+ /**
94
+ * Immediately flushes all pending logs to the server.
95
+ * Useful before page unload or when immediate delivery is needed.
96
+ */
97
+ flush(): Promise<void>;
98
+ /**
99
+ * Closes the client, flushing any pending logs and stopping the batch timer.
100
+ * After calling close(), no more logs will be accepted.
101
+ */
102
+ close(): Promise<void>;
103
+ }
104
+ /**
105
+ * Factory function to create a RemoteLogClient.
106
+ * @param options - Configuration options
107
+ * @returns A new RemoteLogClient instance
108
+ * @example
109
+ * ```typescript
110
+ * const client = createRemoteLogClient({
111
+ * serverUrl: "http://localhost:9080",
112
+ * });
113
+ * ```
114
+ */
115
+ export declare function createRemoteLogClient(options: RemoteLogClientOptions): RemoteLogClient;
116
+ //# sourceMappingURL=RemoteLogClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteLogClient.d.ts","sourceRoot":"","sources":["../../src/client/RemoteLogClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAY,sBAAsB,EAAmB,MAAM,YAAY,CAAC;AA+CpF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,eAAe;IACxB,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAA8B;IAElD,iEAAiE;IACjE,OAAO,CAAC,iBAAiB,CAA6B;IAEtD;;;OAGG;gBACS,OAAO,EAAE,sBAAsB;IAa3C;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBzE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;YACW,SAAS;IAYvB;;;OAGG;YACW,aAAa;IAuB3B;;;;OAIG;YACW,WAAW;IAgCzB;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Browser client for sending log messages to a remote server.
3
+ * Provides batching and automatic retry with exponential backoff.
4
+ * @module client/RemoteLogClient
5
+ */
6
+ /**
7
+ * Safely read a global variable that may or may not be defined.
8
+ * @param name - Name of the global variable
9
+ * @returns The value of the global variable, or undefined if not defined
10
+ */
11
+ function getGlobalValue(name) {
12
+ try {
13
+ if (name === "__REMOTE_LOG_PROJECT_MARKER__") {
14
+ return typeof __REMOTE_LOG_PROJECT_MARKER__ !== "undefined" ? __REMOTE_LOG_PROJECT_MARKER__ : undefined;
15
+ }
16
+ if (name === "__REMOTE_LOG_WORKTREE_PATH__") {
17
+ return typeof __REMOTE_LOG_WORKTREE_PATH__ !== "undefined" ? __REMOTE_LOG_WORKTREE_PATH__ : undefined;
18
+ }
19
+ }
20
+ catch {
21
+ // ReferenceError if the global is not defined at all
22
+ return undefined;
23
+ }
24
+ return undefined;
25
+ }
26
+ /** Default configuration values */
27
+ const DEFAULT_BATCH_INTERVAL_MS = 1000;
28
+ const DEFAULT_MAX_RETRIES = 3;
29
+ const DEFAULT_RETRY_DELAY_MS = 1000;
30
+ const DEFAULT_SESSION_PREFIX = "session";
31
+ /**
32
+ * Generates a unique session ID with the given prefix.
33
+ * Format: {prefix}-{timestamp}-{random}
34
+ * @param prefix - The prefix to use for the session ID
35
+ * @returns A unique session ID string
36
+ */
37
+ function generateSessionId(prefix) {
38
+ const timestamp = Date.now().toString(36);
39
+ const random = Math.random().toString(36).substring(2, 8);
40
+ return `${prefix}-${timestamp}-${random}`;
41
+ }
42
+ /**
43
+ * Client for sending log messages to a remote logging server.
44
+ *
45
+ * Features:
46
+ * - Batches multiple log entries before sending
47
+ * - Automatic retry with exponential backoff on network failures
48
+ * - Unique session ID for correlating logs
49
+ * @example
50
+ * ```typescript
51
+ * const client = new RemoteLogClient({
52
+ * serverUrl: "http://localhost:9080",
53
+ * sessionPrefix: "myapp",
54
+ * });
55
+ *
56
+ * client.log("INFO", "User logged in", { userId: 123 });
57
+ * client.log("DEBUG", "Loading data...");
58
+ *
59
+ * // Flush immediately when needed
60
+ * await client.flush();
61
+ *
62
+ * // Clean up when done
63
+ * await client.close();
64
+ * ```
65
+ */
66
+ export class RemoteLogClient {
67
+ /**
68
+ * Creates a new RemoteLogClient.
69
+ * @param options - Configuration options
70
+ */
71
+ constructor(options) {
72
+ this.pendingLogs = [];
73
+ this.batchTimer = null;
74
+ this.isClosed = false;
75
+ this.flushPromise = null;
76
+ /** Tracks when each throttle pattern was last allowed through */
77
+ this.throttleLastTimes = new Map();
78
+ this.serverUrl = options.serverUrl;
79
+ this.sessionId = generateSessionId(options.sessionPrefix ?? DEFAULT_SESSION_PREFIX);
80
+ this.batchIntervalMs = options.batchIntervalMs ?? DEFAULT_BATCH_INTERVAL_MS;
81
+ this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
82
+ this.retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
83
+ this.throttlePatterns = options.throttlePatterns ?? [];
84
+ // Priority: explicit option > global variable
85
+ this.projectMarker = options.projectMarker ?? getGlobalValue("__REMOTE_LOG_PROJECT_MARKER__");
86
+ this.worktreePath = options.worktreePath ?? getGlobalValue("__REMOTE_LOG_WORKTREE_PATH__");
87
+ }
88
+ /**
89
+ * Checks if a message should be throttled based on configured patterns.
90
+ * Updates the last time tracking if the message is allowed through.
91
+ * @param message - The message to check
92
+ * @returns true if the message should be dropped (throttled)
93
+ */
94
+ shouldThrottle(message) {
95
+ const now = Date.now();
96
+ for (const { pattern, intervalMs } of this.throttlePatterns) {
97
+ if (pattern.test(message)) {
98
+ const key = pattern.source;
99
+ const lastTime = this.throttleLastTimes.get(key) ?? 0;
100
+ if (now - lastTime < intervalMs) {
101
+ // Within throttle window, drop this message
102
+ return true;
103
+ }
104
+ // Outside throttle window, update timestamp and allow through
105
+ this.throttleLastTimes.set(key, now);
106
+ return false;
107
+ }
108
+ }
109
+ // No matching pattern, allow through
110
+ return false;
111
+ }
112
+ /**
113
+ * Logs a message at the specified level.
114
+ * @param level - Log level (e.g., "INFO", "DEBUG", "WARN", "ERROR")
115
+ * @param message - The log message
116
+ * @param data - Optional additional data to include
117
+ */
118
+ log(level, message, data) {
119
+ if (this.isClosed) {
120
+ return;
121
+ }
122
+ // Check throttling before adding to buffer
123
+ if (this.shouldThrottle(message)) {
124
+ return;
125
+ }
126
+ const entry = {
127
+ time: new Date().toISOString(),
128
+ level,
129
+ message,
130
+ ...(data !== undefined && { data }),
131
+ };
132
+ this.pendingLogs.push(entry);
133
+ this.scheduleBatchSend();
134
+ }
135
+ /**
136
+ * Schedules a batch send after the configured interval.
137
+ * If a timer is already scheduled, does nothing.
138
+ */
139
+ scheduleBatchSend() {
140
+ if (this.batchTimer !== null || this.isClosed) {
141
+ return;
142
+ }
143
+ this.batchTimer = setTimeout(() => {
144
+ this.batchTimer = null;
145
+ void this.sendBatch();
146
+ }, this.batchIntervalMs);
147
+ }
148
+ /**
149
+ * Sends the current batch of logs to the server.
150
+ * Uses retry logic with exponential backoff on failure.
151
+ */
152
+ async sendBatch() {
153
+ if (this.pendingLogs.length === 0) {
154
+ return;
155
+ }
156
+ // Take the current logs and clear the pending array
157
+ const logsToSend = this.pendingLogs;
158
+ this.pendingLogs = [];
159
+ await this.sendWithRetry(logsToSend);
160
+ }
161
+ /**
162
+ * Sends logs with retry logic using exponential backoff.
163
+ * @param logs - The log entries to send
164
+ */
165
+ async sendWithRetry(logs) {
166
+ let lastError = null;
167
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
168
+ try {
169
+ await this.sendRequest(logs);
170
+ return; // Success!
171
+ }
172
+ catch (error) {
173
+ lastError = error instanceof Error ? error : new Error(String(error));
174
+ if (attempt < this.maxRetries) {
175
+ // Exponential backoff: delay * 2^attempt
176
+ const delay = this.retryDelayMs * Math.pow(2, attempt);
177
+ await this.sleep(delay);
178
+ }
179
+ }
180
+ }
181
+ // All retries exhausted - log the error but don't throw
182
+ // In a browser context, we don't want to break the application
183
+ console.error("[RemoteLogClient] Failed to send logs after retries:", lastError?.message);
184
+ }
185
+ /**
186
+ * Makes the actual HTTP request to send logs.
187
+ * @param logs - The log entries to send
188
+ * @throws Error if the request fails
189
+ */
190
+ async sendRequest(logs) {
191
+ const requestBody = {
192
+ sessionId: this.sessionId,
193
+ logs,
194
+ };
195
+ // Only include these fields if they have values
196
+ if (this.projectMarker !== undefined) {
197
+ requestBody.projectMarker = this.projectMarker;
198
+ }
199
+ if (this.worktreePath !== undefined) {
200
+ requestBody.worktreePath = this.worktreePath;
201
+ }
202
+ const response = await fetch(`${this.serverUrl}/log`, {
203
+ method: "POST",
204
+ headers: {
205
+ "Content-Type": "application/json",
206
+ },
207
+ body: JSON.stringify(requestBody),
208
+ });
209
+ if (!response.ok) {
210
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
211
+ }
212
+ }
213
+ /**
214
+ * Helper to sleep for the specified duration.
215
+ * @param ms - Milliseconds to sleep
216
+ * @returns A promise that resolves after the specified time
217
+ */
218
+ sleep(ms) {
219
+ return new Promise((resolve) => setTimeout(resolve, ms));
220
+ }
221
+ /**
222
+ * Immediately flushes all pending logs to the server.
223
+ * Useful before page unload or when immediate delivery is needed.
224
+ */
225
+ async flush() {
226
+ // Cancel any scheduled batch
227
+ if (this.batchTimer !== null) {
228
+ clearTimeout(this.batchTimer);
229
+ this.batchTimer = null;
230
+ }
231
+ // Wait for any in-progress flush
232
+ if (this.flushPromise !== null) {
233
+ await this.flushPromise;
234
+ }
235
+ // Send any remaining logs
236
+ if (this.pendingLogs.length > 0) {
237
+ this.flushPromise = this.sendBatch();
238
+ await this.flushPromise;
239
+ this.flushPromise = null;
240
+ }
241
+ }
242
+ /**
243
+ * Closes the client, flushing any pending logs and stopping the batch timer.
244
+ * After calling close(), no more logs will be accepted.
245
+ */
246
+ async close() {
247
+ if (this.isClosed) {
248
+ return;
249
+ }
250
+ this.isClosed = true;
251
+ // Flush remaining logs
252
+ await this.flush();
253
+ }
254
+ }
255
+ /**
256
+ * Factory function to create a RemoteLogClient.
257
+ * @param options - Configuration options
258
+ * @returns A new RemoteLogClient instance
259
+ * @example
260
+ * ```typescript
261
+ * const client = createRemoteLogClient({
262
+ * serverUrl: "http://localhost:9080",
263
+ * });
264
+ * ```
265
+ */
266
+ export function createRemoteLogClient(options) {
267
+ return new RemoteLogClient(options);
268
+ }
269
+ //# sourceMappingURL=RemoteLogClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteLogClient.js","sourceRoot":"","sources":["../../src/client/RemoteLogClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Browser client for remote logging.
3
+ * @module client
4
+ */
5
+ export { createRemoteLogClient, RemoteLogClient } from "./RemoteLogClient.js";
6
+ export type { LogEntry, RemoteLogClientOptions, ThrottlePattern } from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Browser client for remote logging.
3
+ * @module client
4
+ */
5
+ export { createRemoteLogClient, RemoteLogClient } from "./RemoteLogClient.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Type definitions for the remote logging client.
3
+ * @module client/types
4
+ */
5
+ /**
6
+ * A single log entry to be sent to the remote server.
7
+ */
8
+ export interface LogEntry {
9
+ /** ISO 8601 timestamp when the log was created */
10
+ time: string;
11
+ /** Log level (e.g., "INFO", "DEBUG", "WARN", "ERROR") */
12
+ level: string;
13
+ /** The log message */
14
+ message: string;
15
+ /** Optional additional data to include with the log */
16
+ data?: Record<string, unknown>;
17
+ }
18
+ /**
19
+ * Configuration for throttling specific message patterns.
20
+ */
21
+ export interface ThrottlePattern {
22
+ /** Regular expression pattern to match log messages */
23
+ pattern: RegExp;
24
+ /** Minimum interval in milliseconds between matching messages */
25
+ intervalMs: number;
26
+ }
27
+ /**
28
+ * Configuration options for the RemoteLogClient.
29
+ */
30
+ export interface RemoteLogClientOptions {
31
+ /** URL of the remote log server (e.g., "http://localhost:9080") */
32
+ serverUrl: string;
33
+ /** Prefix for the generated session ID (default: "session") */
34
+ sessionPrefix?: string;
35
+ /** Interval in milliseconds between batch sends (default: 1000) */
36
+ batchIntervalMs?: number;
37
+ /** Maximum number of retry attempts for failed sends (default: 3) */
38
+ maxRetries?: number;
39
+ /** Base delay in milliseconds between retries (uses exponential backoff) (default: 1000) */
40
+ retryDelayMs?: number;
41
+ /**
42
+ * Patterns to throttle to prevent log flooding.
43
+ * Messages matching a pattern will only be sent once per the configured interval.
44
+ */
45
+ throttlePatterns?: ThrottlePattern[];
46
+ /**
47
+ * Project marker to identify logs from this project.
48
+ * If not provided, the client will attempt to read from the
49
+ * __REMOTE_LOG_PROJECT_MARKER__ global variable (injected by Vite plugin).
50
+ */
51
+ projectMarker?: string;
52
+ /**
53
+ * Full path to the worktree or project directory.
54
+ * Used for debugging and log organization.
55
+ * If not provided, the client will attempt to read from the
56
+ * __REMOTE_LOG_WORKTREE_PATH__ global variable (injected by Vite plugin).
57
+ */
58
+ worktreePath?: string;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type definitions for the remote logging client.
3
+ * @module client/types
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Remote logging client and server for browser debugging.
3
+ *
4
+ * Client usage (Browser):
5
+ * import { RemoteLogClient } from "@graphty/remote-logger";
6
+ * const client = new RemoteLogClient({ serverUrl: "http://localhost:9080" });
7
+ * client.log("INFO", "Hello from browser");
8
+ *
9
+ * Server usage (Node.js):
10
+ * import { startLogServer } from "@graphty/remote-logger/server";
11
+ * startLogServer({ port: 9080 });
12
+ *
13
+ * Or via CLI:
14
+ * npx remote-log-server --port 9080
15
+ *
16
+ * UI usage (Browser):
17
+ * import { initConsoleCaptureUI } from "@graphty/remote-logger/ui";
18
+ * initConsoleCaptureUI();
19
+ */
20
+ export type { LogEntry, RemoteLogClientOptions, ThrottlePattern } from "./client/index.js";
21
+ export { createRemoteLogClient, RemoteLogClient } from "./client/index.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Remote logging client and server for browser debugging.
3
+ *
4
+ * Client usage (Browser):
5
+ * import { RemoteLogClient } from "@graphty/remote-logger";
6
+ * const client = new RemoteLogClient({ serverUrl: "http://localhost:9080" });
7
+ * client.log("INFO", "Hello from browser");
8
+ *
9
+ * Server usage (Node.js):
10
+ * import { startLogServer } from "@graphty/remote-logger/server";
11
+ * startLogServer({ port: 9080 });
12
+ *
13
+ * Or via CLI:
14
+ * npx remote-log-server --port 9080
15
+ *
16
+ * UI usage (Browser):
17
+ * import { initConsoleCaptureUI } from "@graphty/remote-logger/ui";
18
+ * initConsoleCaptureUI();
19
+ */
20
+ export { createRemoteLogClient, RemoteLogClient } from "./client/index.js";
21
+ // Note: UI components are NOT re-exported here to keep the main entry lightweight.
22
+ // Import from "@graphty/remote-logger/ui" for UI usage.
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,mFAAmF;AACnF,wDAAwD"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP server module exports.
3
+ *
4
+ * Provides Model Context Protocol interface for log queries.
5
+ * @module mcp
6
+ */
7
+ export { createMcpServer, getToolNames, startMcpServer } from "./mcp-server.js";
8
+ export { logsGetRecentHandler, type LogsGetRecentInput, logsGetRecentInputSchema, type LogsGetRecentOutput, logsGetRecentTool, logsListSessionsHandler, type LogsListSessionsInput, logsListSessionsInputSchema, type LogsListSessionsOutput, logsListSessionsTool, logsStatusHandler, type LogsStatusInput, logsStatusInputSchema, type LogsStatusOutput, logsStatusTool, } from "./tools/index.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACH,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,cAAc,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP server module exports.
3
+ *
4
+ * Provides Model Context Protocol interface for log queries.
5
+ * @module mcp
6
+ */
7
+ export { createMcpServer, getToolNames, startMcpServer } from "./mcp-server.js";
8
+ export { logsGetRecentHandler, logsGetRecentInputSchema, logsGetRecentTool, logsListSessionsHandler, logsListSessionsInputSchema, logsListSessionsTool, logsStatusHandler, logsStatusInputSchema, logsStatusTool, } from "./tools/index.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACH,oBAAoB,EAEpB,wBAAwB,EAExB,iBAAiB,EACjB,uBAAuB,EAEvB,2BAA2B,EAE3B,oBAAoB,EACpB,iBAAiB,EAEjB,qBAAqB,EAErB,cAAc,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * MCP Server for remote logging.
3
+ *
4
+ * Provides an MCP interface for Claude Code to query logs from browser
5
+ * applications. Uses STDIO transport for communication.
6
+ * @module mcp/mcp-server
7
+ */
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { LogStorage } from "../server/log-storage.js";
10
+ /**
11
+ * Get the names of all registered tools.
12
+ * Useful for testing.
13
+ * @returns Array of registered tool names
14
+ */
15
+ export declare function getToolNames(): string[];
16
+ /**
17
+ * Create an MCP server with logging tools.
18
+ *
19
+ * Registers all logging tools and returns the configured server.
20
+ * The server is not started; use `startMcpServer` to run it.
21
+ * @param storage - The LogStorage instance to use for log operations
22
+ * @returns Configured McpServer instance
23
+ */
24
+ export declare function createMcpServer(storage: LogStorage): McpServer;
25
+ /**
26
+ * Start the MCP server with STDIO transport.
27
+ *
28
+ * This function runs the MCP server and blocks until the connection is closed.
29
+ * @param storage - The LogStorage instance to use for log operations
30
+ */
31
+ export declare function startMcpServer(storage: LogStorage): Promise<void>;
32
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAyC3D;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAsFD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAkM9D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvE"}