@creatoria/miniapp-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +469 -0
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +144 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config/defaults.d.ts +73 -0
  7. package/dist/config/defaults.d.ts.map +1 -0
  8. package/dist/config/defaults.js +118 -0
  9. package/dist/config/defaults.js.map +1 -0
  10. package/dist/config/loader.d.ts +50 -0
  11. package/dist/config/loader.d.ts.map +1 -0
  12. package/dist/config/loader.js +189 -0
  13. package/dist/config/loader.js.map +1 -0
  14. package/dist/core/element-ref.d.ts +44 -0
  15. package/dist/core/element-ref.d.ts.map +1 -0
  16. package/dist/core/element-ref.js +213 -0
  17. package/dist/core/element-ref.js.map +1 -0
  18. package/dist/core/logger.d.ts +55 -0
  19. package/dist/core/logger.d.ts.map +1 -0
  20. package/dist/core/logger.js +378 -0
  21. package/dist/core/logger.js.map +1 -0
  22. package/dist/core/output.d.ts +21 -0
  23. package/dist/core/output.d.ts.map +1 -0
  24. package/dist/core/output.js +56 -0
  25. package/dist/core/output.js.map +1 -0
  26. package/dist/core/report-generator.d.ts +24 -0
  27. package/dist/core/report-generator.d.ts.map +1 -0
  28. package/dist/core/report-generator.js +212 -0
  29. package/dist/core/report-generator.js.map +1 -0
  30. package/dist/core/session.d.ts +83 -0
  31. package/dist/core/session.d.ts.map +1 -0
  32. package/dist/core/session.js +306 -0
  33. package/dist/core/session.js.map +1 -0
  34. package/dist/core/timeout.d.ts +49 -0
  35. package/dist/core/timeout.d.ts.map +1 -0
  36. package/dist/core/timeout.js +67 -0
  37. package/dist/core/timeout.js.map +1 -0
  38. package/dist/core/tool-logger.d.ts +83 -0
  39. package/dist/core/tool-logger.d.ts.map +1 -0
  40. package/dist/core/tool-logger.js +453 -0
  41. package/dist/core/tool-logger.js.map +1 -0
  42. package/dist/core/validation.d.ts +39 -0
  43. package/dist/core/validation.d.ts.map +1 -0
  44. package/dist/core/validation.js +93 -0
  45. package/dist/core/validation.js.map +1 -0
  46. package/dist/index.d.ts +7 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +6 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/server.d.ts +7 -0
  51. package/dist/server.d.ts.map +1 -0
  52. package/dist/server.js +85 -0
  53. package/dist/server.js.map +1 -0
  54. package/dist/tools/assert.d.ts +108 -0
  55. package/dist/tools/assert.d.ts.map +1 -0
  56. package/dist/tools/assert.js +291 -0
  57. package/dist/tools/assert.js.map +1 -0
  58. package/dist/tools/automator.d.ts +45 -0
  59. package/dist/tools/automator.d.ts.map +1 -0
  60. package/dist/tools/automator.js +186 -0
  61. package/dist/tools/automator.js.map +1 -0
  62. package/dist/tools/element.d.ts +253 -0
  63. package/dist/tools/element.d.ts.map +1 -0
  64. package/dist/tools/element.js +615 -0
  65. package/dist/tools/element.js.map +1 -0
  66. package/dist/tools/index.d.ts +97 -0
  67. package/dist/tools/index.d.ts.map +1 -0
  68. package/dist/tools/index.js +1565 -0
  69. package/dist/tools/index.js.map +1 -0
  70. package/dist/tools/miniprogram.d.ts +79 -0
  71. package/dist/tools/miniprogram.d.ts.map +1 -0
  72. package/dist/tools/miniprogram.js +245 -0
  73. package/dist/tools/miniprogram.js.map +1 -0
  74. package/dist/tools/network.d.ts +65 -0
  75. package/dist/tools/network.d.ts.map +1 -0
  76. package/dist/tools/network.js +205 -0
  77. package/dist/tools/network.js.map +1 -0
  78. package/dist/tools/page.d.ts +108 -0
  79. package/dist/tools/page.d.ts.map +1 -0
  80. package/dist/tools/page.js +307 -0
  81. package/dist/tools/page.js.map +1 -0
  82. package/dist/tools/record.d.ts +86 -0
  83. package/dist/tools/record.d.ts.map +1 -0
  84. package/dist/tools/record.js +316 -0
  85. package/dist/tools/record.js.map +1 -0
  86. package/dist/tools/snapshot.d.ts +82 -0
  87. package/dist/tools/snapshot.d.ts.map +1 -0
  88. package/dist/tools/snapshot.js +258 -0
  89. package/dist/tools/snapshot.js.map +1 -0
  90. package/dist/types.d.ts +240 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +5 -0
  93. package/dist/types.js.map +1 -0
  94. package/docs/SIMPLE_USAGE.md +210 -0
  95. package/docs/api/README.md +244 -0
  96. package/docs/api/assert.md +1015 -0
  97. package/docs/api/automator.md +345 -0
  98. package/docs/api/element.md +1454 -0
  99. package/docs/api/miniprogram.md +558 -0
  100. package/docs/api/network.md +883 -0
  101. package/docs/api/page.md +909 -0
  102. package/docs/api/record.md +963 -0
  103. package/docs/api/snapshot.md +792 -0
  104. package/docs/architecture.E-Docs.md +1359 -0
  105. package/docs/architecture.F1.md +720 -0
  106. package/docs/architecture.F2.md +871 -0
  107. package/docs/architecture.F3.md +905 -0
  108. package/docs/architecture.md +90 -0
  109. package/docs/charter.A1.align.yaml +170 -0
  110. package/docs/charter.A2.align.yaml +199 -0
  111. package/docs/charter.A3.align.yaml +242 -0
  112. package/docs/charter.A4.align.yaml +227 -0
  113. package/docs/charter.B1.align.yaml +179 -0
  114. package/docs/charter.B2.align.yaml +200 -0
  115. package/docs/charter.B3.align.yaml +200 -0
  116. package/docs/charter.B4.align.yaml +188 -0
  117. package/docs/charter.C1.align.yaml +190 -0
  118. package/docs/charter.C2.align.yaml +202 -0
  119. package/docs/charter.C3.align.yaml +211 -0
  120. package/docs/charter.C4.align.yaml +263 -0
  121. package/docs/charter.C5.align.yaml +220 -0
  122. package/docs/charter.D1.align.yaml +190 -0
  123. package/docs/charter.D2.align.yaml +234 -0
  124. package/docs/charter.D3.align.yaml +206 -0
  125. package/docs/charter.E-Docs.align.yaml +294 -0
  126. package/docs/charter.F1.align.yaml +193 -0
  127. package/docs/charter.F2.align.yaml +248 -0
  128. package/docs/charter.F3.align.yaml +287 -0
  129. package/docs/charter.G.align.yaml +174 -0
  130. package/docs/charter.align.yaml +111 -0
  131. package/docs/examples/session-report-usage.md +449 -0
  132. package/docs/maintenance.md +682 -0
  133. package/docs/playwright-mcp/350/260/203/347/240/224.md +53 -0
  134. package/docs/setup-guide.md +775 -0
  135. package/docs/tasks.A1.atomize.md +296 -0
  136. package/docs/tasks.A2.atomize.md +408 -0
  137. package/docs/tasks.A3.atomize.md +564 -0
  138. package/docs/tasks.A4.atomize.md +496 -0
  139. package/docs/tasks.B1.atomize.md +352 -0
  140. package/docs/tasks.B2.atomize.md +561 -0
  141. package/docs/tasks.B3.atomize.md +508 -0
  142. package/docs/tasks.B4.atomize.md +504 -0
  143. package/docs/tasks.C1.atomize.md +540 -0
  144. package/docs/tasks.C2.atomize.md +665 -0
  145. package/docs/tasks.C3.atomize.md +745 -0
  146. package/docs/tasks.C4.atomize.md +908 -0
  147. package/docs/tasks.C5.atomize.md +755 -0
  148. package/docs/tasks.D1.atomize.md +547 -0
  149. package/docs/tasks.D2.atomize.md +619 -0
  150. package/docs/tasks.D3.atomize.md +790 -0
  151. package/docs/tasks.E-Docs.atomize.md +1204 -0
  152. package/docs/tasks.atomize.md +189 -0
  153. package/docs/troubleshooting.md +855 -0
  154. package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +155 -0
  155. package/docs//345/274/200/345/217/221/344/273/273/345/212/241/350/256/241/345/210/222.md +110 -0
  156. package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226API/345/256/214/346/225/264/346/226/207/346/241/243.md +894 -0
  157. package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226/345/256/214/346/225/264/346/223/215/344/275/234/346/211/213/345/206/214.md +1885 -0
  158. package/docs//346/216/245/345/217/243/346/226/271/346/241/210.md +565 -0
  159. package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +380 -0
  160. package/package.json +87 -0
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Session management for MCP connections
3
+ * Each session maintains isolated state for miniProgram instances and elements
4
+ */
5
+ import { join } from 'path';
6
+ import { createLogger } from './logger.js';
7
+ import { createOutputManager } from './output.js';
8
+ import { generateAndSaveReports } from './report-generator.js';
9
+ const DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes
10
+ const DEFAULT_OUTPUT_DIR = '.mcp-artifacts';
11
+ export class SessionStore {
12
+ sessions = new Map();
13
+ sessionTimeout;
14
+ outputDir;
15
+ loggerConfig;
16
+ enableSessionReport;
17
+ cleanupInterval;
18
+ constructor(config = {}) {
19
+ this.sessionTimeout = config.sessionTimeout || DEFAULT_SESSION_TIMEOUT;
20
+ this.outputDir = config.outputDir || DEFAULT_OUTPUT_DIR;
21
+ this.loggerConfig = config.loggerConfig;
22
+ this.enableSessionReport = config.enableSessionReport || false;
23
+ // Start periodic cleanup of timed-out sessions
24
+ this.startCleanupTimer();
25
+ }
26
+ /**
27
+ * Get session by ID
28
+ */
29
+ get(sessionId) {
30
+ const session = this.sessions.get(sessionId);
31
+ if (session && this.isSessionExpired(session)) {
32
+ console.error(`Session ${sessionId} has expired, cleaning up...`);
33
+ // Remove from map immediately (synchronous)
34
+ this.sessions.delete(sessionId);
35
+ // Fire-and-forget cleanup of resources (async operation)
36
+ void this.cleanupSessionResources(session, sessionId).catch((error) => {
37
+ console.error(`Failed to cleanup expired session ${sessionId}:`, error);
38
+ });
39
+ return undefined;
40
+ }
41
+ return session;
42
+ }
43
+ /**
44
+ * Set session state
45
+ */
46
+ set(sessionId, state) {
47
+ this.sessions.set(sessionId, state);
48
+ }
49
+ /**
50
+ * Cleanup session resources (internal helper)
51
+ *
52
+ * @throws AggregateError if cleanup operations fail
53
+ */
54
+ async cleanupSessionResources(session, sessionId) {
55
+ const errors = [];
56
+ // F3: Generate session reports before cleanup (fire-and-forget)
57
+ if (session.reportData) {
58
+ try {
59
+ await generateAndSaveReports(session);
60
+ console.error(`Session reports generated for ${sessionId}`);
61
+ }
62
+ catch (error) {
63
+ // Don't add to errors - report generation failure shouldn't block cleanup
64
+ console.error(`Failed to generate session reports for ${sessionId}:`, error);
65
+ }
66
+ }
67
+ // Issue #5: Dispose logger after report generation (to capture report logs)
68
+ if (session.logger?.dispose) {
69
+ try {
70
+ await session.logger.dispose();
71
+ console.error(`Logger disposed for session ${sessionId}`);
72
+ }
73
+ catch (error) {
74
+ const err = error instanceof Error ? error : new Error(String(error));
75
+ errors.push(new Error(`Failed to dispose logger: ${err.message}`));
76
+ console.error(`Failed to dispose logger for session ${sessionId}:`, error);
77
+ }
78
+ }
79
+ // Clean up miniProgram instance (async operation)
80
+ if (session.miniProgram) {
81
+ try {
82
+ if (typeof session.miniProgram.disconnect === 'function') {
83
+ await session.miniProgram.disconnect();
84
+ }
85
+ console.error(`Disconnected miniProgram for session ${sessionId}`);
86
+ }
87
+ catch (error) {
88
+ const err = error instanceof Error ? error : new Error(String(error));
89
+ errors.push(new Error(`Failed to disconnect miniProgram: ${err.message}`));
90
+ console.error(`Failed to disconnect miniProgram for session ${sessionId}:`, error);
91
+ }
92
+ }
93
+ // Clean up IDE process (async operation - wait for exit)
94
+ const ideProcess = session.ideProcess;
95
+ if (ideProcess) {
96
+ try {
97
+ if (typeof ideProcess.kill === 'function') {
98
+ // Wait for process to actually exit (only if once method exists)
99
+ if (typeof ideProcess.once === 'function') {
100
+ await new Promise((resolve, reject) => {
101
+ const timeout = setTimeout(() => {
102
+ reject(new Error('IDE process did not exit within 5 seconds'));
103
+ }, 5000);
104
+ ideProcess.once('exit', () => {
105
+ clearTimeout(timeout);
106
+ resolve();
107
+ });
108
+ ideProcess.kill();
109
+ });
110
+ }
111
+ else {
112
+ // For test mocks or processes without event emitter
113
+ ideProcess.kill();
114
+ }
115
+ }
116
+ console.error(`Killed IDE process for session ${sessionId}`);
117
+ }
118
+ catch (error) {
119
+ const err = error instanceof Error ? error : new Error(String(error));
120
+ errors.push(new Error(`Failed to kill IDE process: ${err.message}`));
121
+ console.error(`Failed to kill IDE process for session ${sessionId}:`, error);
122
+ }
123
+ }
124
+ // Clear element cache (sync operation)
125
+ try {
126
+ session.elements.clear();
127
+ }
128
+ catch (error) {
129
+ const err = error instanceof Error ? error : new Error(String(error));
130
+ errors.push(new Error(`Failed to clear element cache: ${err.message}`));
131
+ }
132
+ // If there were any errors, throw AggregateError
133
+ if (errors.length > 0) {
134
+ console.error(`Session ${sessionId} cleanup completed with ${errors.length} error(s)`);
135
+ throw new AggregateError(errors, `Session cleanup had ${errors.length} error(s)`);
136
+ }
137
+ console.error(`Session ${sessionId} cleaned up successfully`);
138
+ }
139
+ /**
140
+ * Delete session and cleanup resources
141
+ *
142
+ * Properly cleans up all async resources:
143
+ * - Disconnects from miniProgram
144
+ * - Kills IDE process and waits for exit
145
+ * - Clears element cache
146
+ *
147
+ * @throws AggregateError if cleanup operations fail
148
+ */
149
+ async delete(sessionId) {
150
+ const session = this.sessions.get(sessionId);
151
+ if (!session) {
152
+ this.sessions.delete(sessionId);
153
+ return;
154
+ }
155
+ // Remove from session map first
156
+ this.sessions.delete(sessionId);
157
+ // Cleanup resources
158
+ await this.cleanupSessionResources(session, sessionId);
159
+ }
160
+ /**
161
+ * Check if session exists
162
+ */
163
+ has(sessionId) {
164
+ return this.sessions.has(sessionId);
165
+ }
166
+ /**
167
+ * Dispose all sessions
168
+ *
169
+ * Async method to properly cleanup all resources
170
+ */
171
+ async dispose() {
172
+ if (this.cleanupInterval) {
173
+ clearInterval(this.cleanupInterval);
174
+ this.cleanupInterval = undefined;
175
+ }
176
+ // Delete all sessions in parallel
177
+ const deletions = Array.from(this.sessions.keys()).map((sessionId) => this.delete(sessionId).catch((error) => {
178
+ console.error(`Failed to delete session ${sessionId} during dispose:`, error);
179
+ }));
180
+ await Promise.all(deletions);
181
+ console.error('All sessions disposed');
182
+ }
183
+ /**
184
+ * Get or create session
185
+ */
186
+ getOrCreate(sessionId, config) {
187
+ let session = this.get(sessionId);
188
+ if (!session) {
189
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
190
+ const outputDir = join(this.outputDir, `${sessionId}-${timestamp}`);
191
+ const now = new Date();
192
+ session = {
193
+ sessionId,
194
+ pages: [],
195
+ elements: new Map(),
196
+ outputDir,
197
+ createdAt: now,
198
+ lastActivity: now,
199
+ config,
200
+ logger: createLogger(sessionId, this.loggerConfig),
201
+ loggerConfig: this.loggerConfig,
202
+ outputManager: createOutputManager(outputDir),
203
+ // F3: Initialize report data if enabled
204
+ reportData: this.enableSessionReport
205
+ ? {
206
+ toolCalls: [],
207
+ startTime: now,
208
+ }
209
+ : undefined,
210
+ };
211
+ this.set(sessionId, session);
212
+ console.error(`Created new session: ${sessionId}`);
213
+ }
214
+ return session;
215
+ }
216
+ /**
217
+ * Update session activity timestamp
218
+ */
219
+ updateActivity(sessionId) {
220
+ const session = this.get(sessionId);
221
+ if (session) {
222
+ session.lastActivity = new Date();
223
+ }
224
+ }
225
+ /**
226
+ * Check if session has expired
227
+ */
228
+ isSessionExpired(session) {
229
+ const now = Date.now();
230
+ const lastActivity = session.lastActivity.getTime();
231
+ return now - lastActivity > this.sessionTimeout;
232
+ }
233
+ /**
234
+ * Cleanup expired sessions periodically
235
+ */
236
+ startCleanupTimer() {
237
+ // Check every 5 minutes
238
+ this.cleanupInterval = setInterval(async () => {
239
+ const expiredSessions = [];
240
+ for (const [sessionId, session] of this.sessions.entries()) {
241
+ if (this.isSessionExpired(session)) {
242
+ expiredSessions.push(sessionId);
243
+ }
244
+ }
245
+ if (expiredSessions.length > 0) {
246
+ console.error(`Cleaning up ${expiredSessions.length} expired sessions`);
247
+ // Delete expired sessions in parallel with error handling
248
+ const deletions = expiredSessions.map((sessionId) => this.delete(sessionId).catch((error) => {
249
+ console.error(`Failed to delete expired session ${sessionId}:`, error);
250
+ }));
251
+ await Promise.all(deletions);
252
+ }
253
+ }, 5 * 60 * 1000); // 5 minutes
254
+ // Don't block process exit
255
+ this.cleanupInterval.unref();
256
+ }
257
+ /**
258
+ * Get session metrics for monitoring
259
+ */
260
+ getMetrics() {
261
+ const sessions = Array.from(this.sessions.values());
262
+ let oldestSession;
263
+ let totalElements = 0;
264
+ if (sessions.length > 0) {
265
+ const oldest = sessions.reduce((prev, curr) => prev.createdAt < curr.createdAt ? prev : curr);
266
+ oldestSession = {
267
+ sessionId: oldest.sessionId,
268
+ age: Date.now() - oldest.createdAt.getTime(),
269
+ };
270
+ }
271
+ for (const session of sessions) {
272
+ totalElements += session.elements.size;
273
+ }
274
+ return {
275
+ totalSessions: this.sessions.size,
276
+ activeSessions: sessions.filter((s) => !this.isSessionExpired(s)).length,
277
+ oldestSession,
278
+ totalElements,
279
+ };
280
+ }
281
+ /**
282
+ * Get all session IDs
283
+ */
284
+ getAllSessionIds() {
285
+ return Array.from(this.sessions.keys());
286
+ }
287
+ /**
288
+ * Clear expired sessions manually
289
+ */
290
+ async cleanupExpired() {
291
+ const expiredSessions = [];
292
+ for (const [sessionId, session] of this.sessions.entries()) {
293
+ if (this.isSessionExpired(session)) {
294
+ expiredSessions.push(sessionId);
295
+ }
296
+ }
297
+ // Delete all expired sessions in parallel
298
+ await Promise.all(expiredSessions.map((sessionId) => this.delete(sessionId).catch((error) => {
299
+ console.error(`Failed to delete expired session ${sessionId}:`, error);
300
+ })));
301
+ return expiredSessions.length;
302
+ }
303
+ }
304
+ // Note: sessionStore should be created in server.ts with proper configuration
305
+ // This allows outputDir and other options to be configured via ServerConfig
306
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Timeout utilities for protecting async operations
3
+ */
4
+ /**
5
+ * Wraps a promise with timeout protection
6
+ *
7
+ * @param promise - The promise to wrap
8
+ * @param timeoutMs - Timeout in milliseconds
9
+ * @param operation - Description of the operation for error messages
10
+ * @returns The promise result or throws TimeoutError
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const result = await withTimeout(
15
+ * page.$(selector),
16
+ * 5000,
17
+ * 'Query element'
18
+ * )
19
+ * ```
20
+ */
21
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, operation: string): Promise<T>;
22
+ /**
23
+ * Default timeout values for different operations
24
+ */
25
+ export declare const DEFAULT_TIMEOUTS: {
26
+ /** Default timeout for most operations (30 seconds) */
27
+ readonly default: 30000;
28
+ /** Timeout for evaluate operations (5 seconds) */
29
+ readonly evaluate: 5000;
30
+ /** Timeout for launch operations (60 seconds) */
31
+ readonly launch: 60000;
32
+ /** Timeout for connect operations (30 seconds) */
33
+ readonly connect: 30000;
34
+ /** Timeout for screenshot operations (10 seconds) */
35
+ readonly screenshot: 10000;
36
+ /** Timeout for waitFor operations (30 seconds) */
37
+ readonly waitFor: 30000;
38
+ /** Timeout for element queries (10 seconds) */
39
+ readonly query: 10000;
40
+ };
41
+ /**
42
+ * Get timeout value with fallback chain:
43
+ * 1. Operation-specific timeout from config
44
+ * 2. Global timeout from config
45
+ * 3. Operation-specific default
46
+ * 4. Global default (30s)
47
+ */
48
+ export declare function getTimeout(configTimeout: number | undefined, operationDefault: number): number;
49
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/core/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,uDAAuD;;IAEvD,kDAAkD;;IAElD,iDAAiD;;IAEjD,kDAAkD;;IAElD,qDAAqD;;IAErD,kDAAkD;;IAElD,+CAA+C;;CAEvC,CAAA;AAEV;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE9F"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Timeout utilities for protecting async operations
3
+ */
4
+ /**
5
+ * Wraps a promise with timeout protection
6
+ *
7
+ * @param promise - The promise to wrap
8
+ * @param timeoutMs - Timeout in milliseconds
9
+ * @param operation - Description of the operation for error messages
10
+ * @returns The promise result or throws TimeoutError
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const result = await withTimeout(
15
+ * page.$(selector),
16
+ * 5000,
17
+ * 'Query element'
18
+ * )
19
+ * ```
20
+ */
21
+ export async function withTimeout(promise, timeoutMs, operation) {
22
+ let timeoutId;
23
+ const timeoutPromise = new Promise((_, reject) => {
24
+ timeoutId = setTimeout(() => {
25
+ reject(new Error(`${operation} timed out after ${timeoutMs}ms`));
26
+ }, timeoutMs);
27
+ });
28
+ try {
29
+ const result = await Promise.race([promise, timeoutPromise]);
30
+ clearTimeout(timeoutId);
31
+ return result;
32
+ }
33
+ catch (error) {
34
+ clearTimeout(timeoutId);
35
+ throw error;
36
+ }
37
+ }
38
+ /**
39
+ * Default timeout values for different operations
40
+ */
41
+ export const DEFAULT_TIMEOUTS = {
42
+ /** Default timeout for most operations (30 seconds) */
43
+ default: 30000,
44
+ /** Timeout for evaluate operations (5 seconds) */
45
+ evaluate: 5000,
46
+ /** Timeout for launch operations (60 seconds) */
47
+ launch: 60000,
48
+ /** Timeout for connect operations (30 seconds) */
49
+ connect: 30000,
50
+ /** Timeout for screenshot operations (10 seconds) */
51
+ screenshot: 10000,
52
+ /** Timeout for waitFor operations (30 seconds) */
53
+ waitFor: 30000,
54
+ /** Timeout for element queries (10 seconds) */
55
+ query: 10000,
56
+ };
57
+ /**
58
+ * Get timeout value with fallback chain:
59
+ * 1. Operation-specific timeout from config
60
+ * 2. Global timeout from config
61
+ * 3. Operation-specific default
62
+ * 4. Global default (30s)
63
+ */
64
+ export function getTimeout(configTimeout, operationDefault) {
65
+ return configTimeout ?? operationDefault ?? DEFAULT_TIMEOUTS.default;
66
+ }
67
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/core/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAyB,CAAA;IAE7B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAClD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,SAAS,IAAI,CAAC,CAAC,CAAA;QAClE,CAAC,EAAE,SAAS,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;QAC5D,YAAY,CAAC,SAAU,CAAC,CAAA;QACxB,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,SAAU,CAAC,CAAA;QACxB,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,uDAAuD;IACvD,OAAO,EAAE,KAAK;IACd,kDAAkD;IAClD,QAAQ,EAAE,IAAI;IACd,iDAAiD;IACjD,MAAM,EAAE,KAAK;IACb,kDAAkD;IAClD,OAAO,EAAE,KAAK;IACd,qDAAqD;IACrD,UAAU,EAAE,KAAK;IACjB,kDAAkD;IAClD,OAAO,EAAE,KAAK;IACd,+CAA+C;IAC/C,KAAK,EAAE,KAAK;CACJ,CAAA;AAEV;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,aAAiC,EAAE,gBAAwB;IACpF,OAAO,aAAa,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAA;AACtE,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Tool call logger wrapper for automatic logging
3
+ */
4
+ import type { Logger } from '../types.js';
5
+ import type { SessionState } from '../types.js';
6
+ /**
7
+ * Tool logger wrapper for automatic START/END/ERROR logging
8
+ */
9
+ export declare class ToolLogger {
10
+ private logger;
11
+ private config?;
12
+ private capturing;
13
+ constructor(logger: Logger, config?: import("../types.js").LoggerConfig | undefined);
14
+ /**
15
+ * Wrap a tool handler with automatic logging
16
+ *
17
+ * @param toolName - Name of the tool (e.g., "page_query")
18
+ * @param handler - Original tool handler function
19
+ * @returns Wrapped handler with automatic logging
20
+ */
21
+ wrap<TArgs, TResult>(toolName: string, handler: (session: SessionState, args: TArgs) => Promise<TResult>): (session: SessionState, args: TArgs) => Promise<TResult>;
22
+ /**
23
+ * Check if a key name matches sensitive patterns (Issue #3)
24
+ */
25
+ private isSensitiveKey;
26
+ /**
27
+ * Sanitize arguments for logging (remove sensitive data, limit size)
28
+ * Issue #3: Enhanced with deep recursion and pattern matching
29
+ */
30
+ private sanitizeArgs;
31
+ /**
32
+ * Sanitize result for logging (limit size, remove large objects)
33
+ * Issue #3: Use same deep sanitization as args
34
+ */
35
+ private sanitizeResult;
36
+ /**
37
+ * Capture failure snapshot when tool call fails (F2 feature)
38
+ *
39
+ * Creates a failure directory with:
40
+ * - snapshot.json: Page data
41
+ * - snapshot.png: Screenshot
42
+ * - error-context.json: Error details + tool context
43
+ *
44
+ * @param context Failure context
45
+ * @returns Relative path to the failure directory (for F3 reporting)
46
+ */
47
+ private captureFailureSnapshot;
48
+ /**
49
+ * Record a tool call to session report data (F3 feature)
50
+ *
51
+ * Adds a tool call record to the session's reportData. Implements
52
+ * memory protection by limiting to MAX_TOOL_CALL_RECORDS with FIFO eviction.
53
+ *
54
+ * @param session Session state
55
+ * @param record Tool call record to add
56
+ */
57
+ private recordToolCall;
58
+ /**
59
+ * Sanitize error message to remove sensitive information (F3-S1)
60
+ *
61
+ * Removes:
62
+ * - File paths (Unix, Linux, Windows)
63
+ * - API keys and tokens (32+ character alphanumeric strings)
64
+ * - Stack trace locations
65
+ *
66
+ * @param message Raw error message
67
+ * @returns Sanitized error message with placeholders
68
+ */
69
+ private sanitizeErrorMessage;
70
+ /**
71
+ * Sanitize stack trace to remove sensitive file paths (Issue #P2)
72
+ *
73
+ * Removes:
74
+ * - Absolute user paths (/Users/<username>/, /home/<username>/)
75
+ * - Windows paths (C:\Users\<username>\)
76
+ * - Environment-specific paths
77
+ *
78
+ * @param stack Raw stack trace
79
+ * @returns Sanitized stack trace with placeholders
80
+ */
81
+ private sanitizeStackTrace;
82
+ }
83
+ //# sourceMappingURL=tool-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-logger.d.ts","sourceRoot":"","sources":["../../src/core/tool-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA4C/C;;GAEG;AACH,qBAAa,UAAU;IAInB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM,CAAC;IAJjB,OAAO,CAAC,SAAS,CAAQ;gBAGf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,YAAA;IAGrD;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAChE,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC;IAgF3D;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAoEpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0EtB;;;;;;;;;;OAUG;YACW,sBAAsB;IAqGpC;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;CAqB3B"}