@creatoria/miniapp-mcp 0.1.2 → 0.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 (247) hide show
  1. package/README.md +14 -3
  2. package/dist/app/cli/index.d.ts +6 -0
  3. package/dist/app/cli/index.d.ts.map +1 -0
  4. package/dist/app/cli/index.js +6 -0
  5. package/dist/app/cli/index.js.map +1 -0
  6. package/dist/app/index.d.ts +6 -0
  7. package/dist/app/index.d.ts.map +1 -0
  8. package/dist/app/index.js +6 -0
  9. package/dist/app/index.js.map +1 -0
  10. package/dist/app/server/index.d.ts +7 -0
  11. package/dist/app/server/index.d.ts.map +1 -0
  12. package/dist/app/server/index.js +6 -0
  13. package/dist/app/server/index.js.map +1 -0
  14. package/dist/capabilities/assert/index.d.ts +5 -0
  15. package/dist/capabilities/assert/index.d.ts.map +1 -0
  16. package/dist/capabilities/assert/index.js +5 -0
  17. package/dist/capabilities/assert/index.js.map +1 -0
  18. package/dist/capabilities/automator/index.d.ts +6 -0
  19. package/dist/capabilities/automator/index.d.ts.map +1 -0
  20. package/dist/capabilities/automator/index.js +6 -0
  21. package/dist/capabilities/automator/index.js.map +1 -0
  22. package/dist/capabilities/automator/schemas/close.d.ts +5 -0
  23. package/dist/capabilities/automator/schemas/close.d.ts.map +1 -0
  24. package/dist/capabilities/automator/schemas/close.js +11 -0
  25. package/dist/capabilities/automator/schemas/close.js.map +1 -0
  26. package/dist/capabilities/automator/schemas/connect.d.ts +11 -0
  27. package/dist/capabilities/automator/schemas/connect.d.ts.map +1 -0
  28. package/dist/capabilities/automator/schemas/connect.js +19 -0
  29. package/dist/capabilities/automator/schemas/connect.js.map +1 -0
  30. package/dist/capabilities/automator/schemas/disconnect.d.ts +5 -0
  31. package/dist/capabilities/automator/schemas/disconnect.d.ts.map +1 -0
  32. package/dist/capabilities/automator/schemas/disconnect.js +11 -0
  33. package/dist/capabilities/automator/schemas/disconnect.js.map +1 -0
  34. package/dist/capabilities/automator/schemas/index.d.ts +4 -0
  35. package/dist/capabilities/automator/schemas/index.d.ts.map +1 -0
  36. package/dist/capabilities/automator/schemas/index.js +12 -0
  37. package/dist/capabilities/automator/schemas/index.js.map +1 -0
  38. package/dist/capabilities/automator/schemas/launch.d.ts +17 -0
  39. package/dist/capabilities/automator/schemas/launch.d.ts.map +1 -0
  40. package/dist/capabilities/automator/schemas/launch.js +26 -0
  41. package/dist/capabilities/automator/schemas/launch.js.map +1 -0
  42. package/dist/capabilities/element/index.d.ts +5 -0
  43. package/dist/capabilities/element/index.d.ts.map +1 -0
  44. package/dist/capabilities/element/index.js +5 -0
  45. package/dist/capabilities/element/index.js.map +1 -0
  46. package/dist/capabilities/index.d.ts +15 -0
  47. package/dist/capabilities/index.d.ts.map +1 -0
  48. package/dist/capabilities/index.js +14 -0
  49. package/dist/capabilities/index.js.map +1 -0
  50. package/dist/capabilities/miniprogram/index.d.ts +5 -0
  51. package/dist/capabilities/miniprogram/index.d.ts.map +1 -0
  52. package/dist/capabilities/miniprogram/index.js +5 -0
  53. package/dist/capabilities/miniprogram/index.js.map +1 -0
  54. package/dist/capabilities/network/index.d.ts +5 -0
  55. package/dist/capabilities/network/index.d.ts.map +1 -0
  56. package/dist/capabilities/network/index.js +5 -0
  57. package/dist/capabilities/network/index.js.map +1 -0
  58. package/dist/capabilities/page/index.d.ts +5 -0
  59. package/dist/capabilities/page/index.d.ts.map +1 -0
  60. package/dist/capabilities/page/index.js +5 -0
  61. package/dist/capabilities/page/index.js.map +1 -0
  62. package/dist/capabilities/record/index.d.ts +5 -0
  63. package/dist/capabilities/record/index.d.ts.map +1 -0
  64. package/dist/capabilities/record/index.js +5 -0
  65. package/dist/capabilities/record/index.js.map +1 -0
  66. package/dist/capabilities/schema-registry.d.ts +4 -0
  67. package/dist/capabilities/schema-registry.d.ts.map +1 -0
  68. package/dist/capabilities/schema-registry.js +18 -0
  69. package/dist/capabilities/schema-registry.js.map +1 -0
  70. package/dist/capabilities/schema-types.d.ts +22 -0
  71. package/dist/capabilities/schema-types.d.ts.map +1 -0
  72. package/dist/capabilities/schema-types.js +2 -0
  73. package/dist/capabilities/schema-types.js.map +1 -0
  74. package/dist/capabilities/snapshot/index.d.ts +5 -0
  75. package/dist/capabilities/snapshot/index.d.ts.map +1 -0
  76. package/dist/capabilities/snapshot/index.js +5 -0
  77. package/dist/capabilities/snapshot/index.js.map +1 -0
  78. package/dist/config/loader.js +1 -1
  79. package/dist/config/loader.js.map +1 -1
  80. package/dist/core/element-ref.d.ts +1 -43
  81. package/dist/core/element-ref.d.ts.map +1 -1
  82. package/dist/core/element-ref.js +1 -212
  83. package/dist/core/element-ref.js.map +1 -1
  84. package/dist/core/logger.d.ts +1 -54
  85. package/dist/core/logger.d.ts.map +1 -1
  86. package/dist/core/logger.js +1 -377
  87. package/dist/core/logger.js.map +1 -1
  88. package/dist/core/output.d.ts +1 -20
  89. package/dist/core/output.d.ts.map +1 -1
  90. package/dist/core/output.js +1 -55
  91. package/dist/core/output.js.map +1 -1
  92. package/dist/core/report-generator.d.ts +1 -23
  93. package/dist/core/report-generator.d.ts.map +1 -1
  94. package/dist/core/report-generator.js +1 -211
  95. package/dist/core/report-generator.js.map +1 -1
  96. package/dist/core/session.d.ts +2 -82
  97. package/dist/core/session.d.ts.map +1 -1
  98. package/dist/core/session.js +2 -305
  99. package/dist/core/session.js.map +1 -1
  100. package/dist/core/timeout.d.ts +1 -48
  101. package/dist/core/timeout.d.ts.map +1 -1
  102. package/dist/core/timeout.js +1 -66
  103. package/dist/core/timeout.js.map +1 -1
  104. package/dist/core/tool-logger.d.ts +1 -82
  105. package/dist/core/tool-logger.d.ts.map +1 -1
  106. package/dist/core/tool-logger.js +1 -452
  107. package/dist/core/tool-logger.js.map +1 -1
  108. package/dist/core/validation.d.ts +1 -38
  109. package/dist/core/validation.d.ts.map +1 -1
  110. package/dist/core/validation.js +1 -92
  111. package/dist/core/validation.js.map +1 -1
  112. package/dist/runtime/element/element-ref.d.ts +44 -0
  113. package/dist/runtime/element/element-ref.d.ts.map +1 -0
  114. package/dist/runtime/element/element-ref.js +214 -0
  115. package/dist/runtime/element/element-ref.js.map +1 -0
  116. package/dist/runtime/element/index.d.ts +2 -0
  117. package/dist/runtime/element/index.d.ts.map +1 -0
  118. package/dist/runtime/element/index.js +2 -0
  119. package/dist/runtime/element/index.js.map +1 -0
  120. package/dist/runtime/index.d.ts +10 -0
  121. package/dist/runtime/index.d.ts.map +1 -0
  122. package/dist/runtime/index.js +10 -0
  123. package/dist/runtime/index.js.map +1 -0
  124. package/dist/runtime/logging/index.d.ts +3 -0
  125. package/dist/runtime/logging/index.d.ts.map +1 -0
  126. package/dist/runtime/logging/index.js +3 -0
  127. package/dist/runtime/logging/index.js.map +1 -0
  128. package/dist/runtime/logging/logger.d.ts +55 -0
  129. package/dist/runtime/logging/logger.d.ts.map +1 -0
  130. package/dist/runtime/logging/logger.js +379 -0
  131. package/dist/runtime/logging/logger.js.map +1 -0
  132. package/dist/runtime/logging/tool-logger.d.ts +83 -0
  133. package/dist/runtime/logging/tool-logger.d.ts.map +1 -0
  134. package/dist/runtime/logging/tool-logger.js +454 -0
  135. package/dist/runtime/logging/tool-logger.js.map +1 -0
  136. package/dist/runtime/outputs/index.d.ts +3 -0
  137. package/dist/runtime/outputs/index.d.ts.map +1 -0
  138. package/dist/runtime/outputs/index.js +3 -0
  139. package/dist/runtime/outputs/index.js.map +1 -0
  140. package/dist/runtime/outputs/output-manager.d.ts +12 -0
  141. package/dist/runtime/outputs/output-manager.d.ts.map +1 -0
  142. package/dist/runtime/outputs/output-manager.js +39 -0
  143. package/dist/runtime/outputs/output-manager.js.map +1 -0
  144. package/dist/runtime/outputs/report-generator.d.ts +5 -0
  145. package/dist/runtime/outputs/report-generator.d.ts.map +1 -0
  146. package/dist/runtime/outputs/report-generator.js +175 -0
  147. package/dist/runtime/outputs/report-generator.js.map +1 -0
  148. package/dist/runtime/session/index.d.ts +3 -0
  149. package/dist/runtime/session/index.d.ts.map +1 -0
  150. package/dist/runtime/session/index.js +3 -0
  151. package/dist/runtime/session/index.js.map +1 -0
  152. package/dist/runtime/session/store.d.ts +28 -0
  153. package/dist/runtime/session/store.d.ts.map +1 -0
  154. package/dist/runtime/session/store.js +154 -0
  155. package/dist/runtime/session/store.js.map +1 -0
  156. package/dist/runtime/session/utils/cleanup.d.ts +3 -0
  157. package/dist/runtime/session/utils/cleanup.d.ts.map +1 -0
  158. package/dist/runtime/session/utils/cleanup.js +78 -0
  159. package/dist/runtime/session/utils/cleanup.js.map +1 -0
  160. package/dist/runtime/timeout/index.d.ts +2 -0
  161. package/dist/runtime/timeout/index.d.ts.map +1 -0
  162. package/dist/runtime/timeout/index.js +2 -0
  163. package/dist/runtime/timeout/index.js.map +1 -0
  164. package/dist/runtime/timeout/timeout.d.ts +49 -0
  165. package/dist/runtime/timeout/timeout.d.ts.map +1 -0
  166. package/dist/runtime/timeout/timeout.js +67 -0
  167. package/dist/runtime/timeout/timeout.js.map +1 -0
  168. package/dist/runtime/validation/index.d.ts +2 -0
  169. package/dist/runtime/validation/index.d.ts.map +1 -0
  170. package/dist/runtime/validation/index.js +2 -0
  171. package/dist/runtime/validation/index.js.map +1 -0
  172. package/dist/runtime/validation/validation.d.ts +39 -0
  173. package/dist/runtime/validation/validation.d.ts.map +1 -0
  174. package/dist/runtime/validation/validation.js +93 -0
  175. package/dist/runtime/validation/validation.js.map +1 -0
  176. package/dist/schemas/automator/miniprogram_close.json +12 -0
  177. package/dist/schemas/automator/miniprogram_connect.json +19 -0
  178. package/dist/schemas/automator/miniprogram_disconnect.json +12 -0
  179. package/dist/schemas/automator/miniprogram_launch.json +30 -0
  180. package/dist/server.js +1 -1
  181. package/dist/server.js.map +1 -1
  182. package/dist/tools/index.d.ts.map +1 -1
  183. package/dist/tools/index.js +3 -3
  184. package/dist/tools/index.js.map +1 -1
  185. package/dist/tools/miniprogram.d.ts +2 -1
  186. package/dist/tools/miniprogram.d.ts.map +1 -1
  187. package/dist/tools/miniprogram.js +19 -24
  188. package/dist/tools/miniprogram.js.map +1 -1
  189. package/dist/tools/page.js +2 -2
  190. package/dist/tools/page.js.map +1 -1
  191. package/docs/directory-structure-and-code-style-best-practices.md +91 -0
  192. package/docs/migration/README.md +34 -0
  193. package/docs/migration/TC-ALIGN-01-notes.md +35 -0
  194. package/docs/migration/runtime-skeleton.md +50 -0
  195. package/docs/migration/tool-schema-strategy.md +75 -0
  196. package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +14 -14
  197. package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +7 -7
  198. package/package.json +4 -2
  199. package/docs/SIMPLE_USAGE.md +0 -210
  200. package/docs/architecture.E-Docs.md +0 -1359
  201. package/docs/architecture.F1.md +0 -720
  202. package/docs/architecture.F2.md +0 -871
  203. package/docs/architecture.F3.md +0 -905
  204. package/docs/architecture.md +0 -90
  205. package/docs/charter.A1.align.yaml +0 -170
  206. package/docs/charter.A2.align.yaml +0 -199
  207. package/docs/charter.A3.align.yaml +0 -242
  208. package/docs/charter.A4.align.yaml +0 -227
  209. package/docs/charter.B1.align.yaml +0 -179
  210. package/docs/charter.B2.align.yaml +0 -200
  211. package/docs/charter.B3.align.yaml +0 -200
  212. package/docs/charter.B4.align.yaml +0 -188
  213. package/docs/charter.C1.align.yaml +0 -190
  214. package/docs/charter.C2.align.yaml +0 -202
  215. package/docs/charter.C3.align.yaml +0 -211
  216. package/docs/charter.C4.align.yaml +0 -263
  217. package/docs/charter.C5.align.yaml +0 -220
  218. package/docs/charter.D1.align.yaml +0 -190
  219. package/docs/charter.D2.align.yaml +0 -234
  220. package/docs/charter.D3.align.yaml +0 -206
  221. package/docs/charter.E-Docs.align.yaml +0 -294
  222. package/docs/charter.F1.align.yaml +0 -193
  223. package/docs/charter.F2.align.yaml +0 -248
  224. package/docs/charter.F3.align.yaml +0 -287
  225. package/docs/charter.G.align.yaml +0 -174
  226. package/docs/charter.align.yaml +0 -111
  227. package/docs/maintenance.md +0 -682
  228. package/docs/playwright-mcp/350/260/203/347/240/224.md +0 -53
  229. package/docs/setup-guide.md +0 -775
  230. package/docs/tasks.A1.atomize.md +0 -296
  231. package/docs/tasks.A2.atomize.md +0 -408
  232. package/docs/tasks.A3.atomize.md +0 -564
  233. package/docs/tasks.A4.atomize.md +0 -496
  234. package/docs/tasks.B1.atomize.md +0 -352
  235. package/docs/tasks.B2.atomize.md +0 -561
  236. package/docs/tasks.B3.atomize.md +0 -508
  237. package/docs/tasks.B4.atomize.md +0 -504
  238. package/docs/tasks.C1.atomize.md +0 -540
  239. package/docs/tasks.C2.atomize.md +0 -665
  240. package/docs/tasks.C3.atomize.md +0 -745
  241. package/docs/tasks.C4.atomize.md +0 -908
  242. package/docs/tasks.C5.atomize.md +0 -755
  243. package/docs/tasks.D1.atomize.md +0 -547
  244. package/docs/tasks.D2.atomize.md +0 -619
  245. package/docs/tasks.D3.atomize.md +0 -790
  246. package/docs/tasks.E-Docs.atomize.md +0 -1204
  247. package/docs/tasks.atomize.md +0 -189
@@ -0,0 +1,175 @@
1
+ function calculateSummary(toolCalls) {
2
+ if (toolCalls.length === 0) {
3
+ return {
4
+ totalCalls: 0,
5
+ successCount: 0,
6
+ failureCount: 0,
7
+ successRate: 0,
8
+ avgDuration: 0,
9
+ maxDuration: 0,
10
+ minDuration: 0,
11
+ };
12
+ }
13
+ const successCount = toolCalls.filter((call) => call.success).length;
14
+ const failureCount = toolCalls.length - successCount;
15
+ const durations = toolCalls.map((call) => call.duration);
16
+ return {
17
+ totalCalls: toolCalls.length,
18
+ successCount,
19
+ failureCount,
20
+ successRate: toolCalls.length > 0 ? successCount / toolCalls.length : 0,
21
+ avgDuration: durations.reduce((sum, d) => sum + d, 0) / durations.length,
22
+ maxDuration: Math.max(...durations),
23
+ minDuration: Math.min(...durations),
24
+ };
25
+ }
26
+ export function generateSessionReport(session) {
27
+ if (!session.reportData) {
28
+ throw new Error('Session report data not initialized');
29
+ }
30
+ const { reportData } = session;
31
+ const endTime = reportData.endTime || new Date();
32
+ const duration = endTime.getTime() - reportData.startTime.getTime();
33
+ const summary = calculateSummary(reportData.toolCalls);
34
+ const failures = reportData.toolCalls
35
+ .filter((call) => !call.success && call.error)
36
+ .map((call) => ({
37
+ toolName: call.toolName,
38
+ timestamp: call.timestamp.toISOString(),
39
+ error: call.error.message,
40
+ snapshotPath: call.error.snapshotPath,
41
+ }));
42
+ return {
43
+ sessionId: session.sessionId,
44
+ startTime: reportData.startTime.toISOString(),
45
+ endTime: endTime.toISOString(),
46
+ duration,
47
+ summary,
48
+ toolCalls: reportData.toolCalls.map((call) => ({
49
+ ...call,
50
+ timestamp: call.timestamp,
51
+ })),
52
+ failures,
53
+ };
54
+ }
55
+ function formatDuration(ms) {
56
+ if (ms < 1000) {
57
+ return `${ms}ms`;
58
+ }
59
+ if (ms < 60000) {
60
+ return `${(ms / 1000).toFixed(1)}s`;
61
+ }
62
+ const minutes = Math.floor(ms / 60000);
63
+ const seconds = Math.floor((ms % 60000) / 1000);
64
+ return `${minutes}m ${seconds}s`;
65
+ }
66
+ function formatPercent(value) {
67
+ return `${(value * 100).toFixed(0)}%`;
68
+ }
69
+ function formatTimestamp(date) {
70
+ return date.toISOString().replace('T', ' ').replace('Z', '').split('.')[0];
71
+ }
72
+ function calculateToolStats(toolCalls) {
73
+ const statsMap = new Map();
74
+ for (const call of toolCalls) {
75
+ const existing = statsMap.get(call.toolName);
76
+ if (!existing) {
77
+ statsMap.set(call.toolName, {
78
+ toolName: call.toolName,
79
+ calls: 1,
80
+ success: call.success ? 1 : 0,
81
+ failure: call.success ? 0 : 1,
82
+ avgDuration: call.duration,
83
+ });
84
+ }
85
+ else {
86
+ existing.calls++;
87
+ existing.success += call.success ? 1 : 0;
88
+ existing.failure += call.success ? 0 : 1;
89
+ existing.avgDuration =
90
+ (existing.avgDuration * (existing.calls - 1) + call.duration) / existing.calls;
91
+ }
92
+ }
93
+ return Array.from(statsMap.values()).sort((a, b) => b.calls - a.calls);
94
+ }
95
+ export function generateMarkdownReport(report) {
96
+ const lines = [];
97
+ lines.push(`# Session Report: ${report.sessionId}`);
98
+ lines.push('');
99
+ lines.push('## Summary');
100
+ lines.push(`- **Duration**: ${formatDuration(report.duration)}`);
101
+ lines.push(`- **Total Calls**: ${report.summary.totalCalls}`);
102
+ lines.push(`- **Success Rate**: ${formatPercent(report.summary.successRate)} (${report.summary.successCount}/${report.summary.totalCalls})`);
103
+ lines.push(`- **Average Duration**: ${formatDuration(report.summary.avgDuration)}`);
104
+ lines.push('');
105
+ const hasToolCalls = report.toolCalls.length > 0;
106
+ if (hasToolCalls) {
107
+ lines.push('## Timeline');
108
+ lines.push('| Time | Tool | Status | Duration |');
109
+ lines.push('|------|------|--------|----------|');
110
+ for (const toolCall of report.toolCalls) {
111
+ lines.push(`| ${formatTimestamp(toolCall.timestamp)} | ${toolCall.toolName} | ${toolCall.success ? '✅' : '❌'} | ${formatDuration(toolCall.duration)} |`);
112
+ }
113
+ lines.push('');
114
+ lines.push('## Tool Calls');
115
+ for (const toolCall of report.toolCalls) {
116
+ lines.push(`- ${formatTimestamp(toolCall.timestamp)} · ${toolCall.toolName} (${formatDuration(toolCall.duration)}) · ${toolCall.success ? '✅ Success' : '❌ Failure'}`);
117
+ if (!toolCall.success && toolCall.error) {
118
+ lines.push(` - Error: ${toolCall.error.message}`);
119
+ if (toolCall.error.snapshotPath) {
120
+ lines.push(` - Snapshot: ${toolCall.error.snapshotPath}`);
121
+ }
122
+ }
123
+ }
124
+ lines.push('');
125
+ const toolStats = calculateToolStats(report.toolCalls);
126
+ if (toolStats.length > 0) {
127
+ lines.push('## Tool Call Statistics');
128
+ lines.push('| Tool Name | Calls | Success | Failure | Avg Duration |');
129
+ lines.push('|-----------|-------|---------|---------|--------------|');
130
+ for (const stat of toolStats) {
131
+ lines.push(`| ${stat.toolName} | ${stat.calls} | ${stat.success} | ${stat.failure} | ${formatDuration(stat.avgDuration)} |`);
132
+ }
133
+ lines.push('');
134
+ }
135
+ }
136
+ if (report.failures.length > 0) {
137
+ lines.push('## Failures');
138
+ report.failures.forEach((failure, index) => {
139
+ lines.push(`### ${index + 1}. ${failure.toolName}`);
140
+ lines.push(`- **Time**: ${formatTimestamp(new Date(failure.timestamp))}`);
141
+ lines.push(`- **Error**: ${failure.error}`);
142
+ if (failure.snapshotPath) {
143
+ lines.push(`- **Snapshot**: [${failure.snapshotPath}](${failure.snapshotPath})`);
144
+ }
145
+ });
146
+ }
147
+ return lines.join('\n');
148
+ }
149
+ export async function generateAndSaveReports(session) {
150
+ const logger = session.logger;
151
+ if (!session.outputManager) {
152
+ logger?.warn?.('Cannot generate report: outputManager not available');
153
+ return;
154
+ }
155
+ try {
156
+ const report = generateSessionReport(session);
157
+ const jsonContent = JSON.stringify(report, null, 2);
158
+ await session.outputManager.writeFile('session-report.json', jsonContent);
159
+ try {
160
+ const markdownContent = generateMarkdownReport(report);
161
+ await session.outputManager.writeFile('session-report.md', markdownContent);
162
+ }
163
+ catch (error) {
164
+ logger?.error?.('Failed to generate session reports', {
165
+ error: error instanceof Error ? error.message : String(error),
166
+ });
167
+ }
168
+ }
169
+ catch (error) {
170
+ logger?.error?.('Failed to generate session reports', {
171
+ error: error instanceof Error ? error.message : String(error),
172
+ });
173
+ }
174
+ }
175
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../../src/runtime/outputs/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { SessionStore } from './store.js';
2
+ export { cleanupSessionResources } from './utils/cleanup.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { SessionStore } from './store.js';
2
+ export { cleanupSessionResources } from './utils/cleanup.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import type { SessionState, SessionConfig, SessionMetrics, LoggerConfig } from '../../types.js';
2
+ export declare class SessionStore {
3
+ private sessions;
4
+ private sessionTimeout;
5
+ private outputDir;
6
+ private loggerConfig?;
7
+ private enableSessionReport;
8
+ private cleanupInterval?;
9
+ constructor(config?: {
10
+ sessionTimeout?: number;
11
+ outputDir?: string;
12
+ loggerConfig?: LoggerConfig;
13
+ enableSessionReport?: boolean;
14
+ });
15
+ get(sessionId: string): SessionState | undefined;
16
+ set(sessionId: string, state: SessionState): void;
17
+ delete(sessionId: string): Promise<void>;
18
+ has(sessionId: string): boolean;
19
+ dispose(): Promise<void>;
20
+ getOrCreate(sessionId: string, config?: SessionConfig): SessionState;
21
+ updateActivity(sessionId: string): void;
22
+ private isSessionExpired;
23
+ private startCleanupTimer;
24
+ getMetrics(): SessionMetrics;
25
+ getAllSessionIds(): string[];
26
+ cleanupExpired(): Promise<number>;
27
+ }
28
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ/F,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAgB;gBAGtC,MAAM,GAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,YAAY,CAAA;QAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAA;KACzB;IAUR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAahD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAI3C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,YAAY;IA+BpE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IA2BzB,UAAU,IAAI,cAAc;IA2B5B,gBAAgB,IAAI,MAAM,EAAE;IAItB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAmBxC"}
@@ -0,0 +1,154 @@
1
+ import { join } from 'path';
2
+ import { createLogger } from '../logging/index.js';
3
+ import { createOutputManager } from '../outputs/index.js';
4
+ import { cleanupSessionResources } from './utils/cleanup.js';
5
+ const DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes
6
+ const DEFAULT_OUTPUT_DIR = '.mcp-artifacts';
7
+ export class SessionStore {
8
+ sessions = new Map();
9
+ sessionTimeout;
10
+ outputDir;
11
+ loggerConfig;
12
+ enableSessionReport;
13
+ cleanupInterval;
14
+ constructor(config = {}) {
15
+ this.sessionTimeout = config.sessionTimeout || DEFAULT_SESSION_TIMEOUT;
16
+ this.outputDir = config.outputDir || DEFAULT_OUTPUT_DIR;
17
+ this.loggerConfig = config.loggerConfig;
18
+ this.enableSessionReport = config.enableSessionReport || false;
19
+ this.startCleanupTimer();
20
+ }
21
+ get(sessionId) {
22
+ const session = this.sessions.get(sessionId);
23
+ if (session && this.isSessionExpired(session)) {
24
+ console.error(`Session ${sessionId} has expired, cleaning up...`);
25
+ this.sessions.delete(sessionId);
26
+ void cleanupSessionResources(session, sessionId).catch((error) => {
27
+ console.error(`Failed to cleanup expired session ${sessionId}:`, error);
28
+ });
29
+ return undefined;
30
+ }
31
+ return session;
32
+ }
33
+ set(sessionId, state) {
34
+ this.sessions.set(sessionId, state);
35
+ }
36
+ async delete(sessionId) {
37
+ const session = this.sessions.get(sessionId);
38
+ if (!session) {
39
+ this.sessions.delete(sessionId);
40
+ return;
41
+ }
42
+ this.sessions.delete(sessionId);
43
+ await cleanupSessionResources(session, sessionId);
44
+ }
45
+ has(sessionId) {
46
+ return this.sessions.has(sessionId);
47
+ }
48
+ async dispose() {
49
+ if (this.cleanupInterval) {
50
+ clearInterval(this.cleanupInterval);
51
+ this.cleanupInterval = undefined;
52
+ }
53
+ const deletions = Array.from(this.sessions.keys()).map((sessionId) => this.delete(sessionId).catch((error) => {
54
+ console.error(`Failed to delete session ${sessionId} during dispose:`, error);
55
+ }));
56
+ await Promise.all(deletions);
57
+ console.error('All sessions disposed');
58
+ }
59
+ getOrCreate(sessionId, config) {
60
+ let session = this.get(sessionId);
61
+ if (!session) {
62
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
63
+ const outputDir = join(this.outputDir, `${sessionId}-${timestamp}`);
64
+ const now = new Date();
65
+ session = {
66
+ sessionId,
67
+ pages: [],
68
+ elements: new Map(),
69
+ outputDir,
70
+ createdAt: now,
71
+ lastActivity: now,
72
+ config,
73
+ logger: createLogger(sessionId, this.loggerConfig),
74
+ loggerConfig: this.loggerConfig,
75
+ outputManager: createOutputManager(outputDir),
76
+ reportData: this.enableSessionReport
77
+ ? {
78
+ toolCalls: [],
79
+ startTime: now,
80
+ }
81
+ : undefined,
82
+ };
83
+ this.set(sessionId, session);
84
+ console.error(`Created new session: ${sessionId}`);
85
+ }
86
+ return session;
87
+ }
88
+ updateActivity(sessionId) {
89
+ const session = this.get(sessionId);
90
+ if (session) {
91
+ session.lastActivity = new Date();
92
+ }
93
+ }
94
+ isSessionExpired(session) {
95
+ const now = Date.now();
96
+ const lastActivity = session.lastActivity.getTime();
97
+ return now - lastActivity > this.sessionTimeout;
98
+ }
99
+ startCleanupTimer() {
100
+ this.cleanupInterval = setInterval(async () => {
101
+ const expiredSessions = [];
102
+ for (const [sessionId, session] of this.sessions.entries()) {
103
+ if (this.isSessionExpired(session)) {
104
+ expiredSessions.push(sessionId);
105
+ }
106
+ }
107
+ if (expiredSessions.length > 0) {
108
+ console.error(`Cleaning up ${expiredSessions.length} expired sessions`);
109
+ const deletions = expiredSessions.map((sessionId) => this.delete(sessionId).catch((error) => {
110
+ console.error(`Failed to delete expired session ${sessionId}:`, error);
111
+ }));
112
+ await Promise.all(deletions);
113
+ }
114
+ }, 5 * 60 * 1000);
115
+ this.cleanupInterval.unref();
116
+ }
117
+ getMetrics() {
118
+ const sessions = Array.from(this.sessions.values());
119
+ let oldestSession;
120
+ let totalElements = 0;
121
+ if (sessions.length > 0) {
122
+ const oldest = sessions.reduce((prev, curr) => prev.createdAt < curr.createdAt ? prev : curr);
123
+ oldestSession = {
124
+ sessionId: oldest.sessionId,
125
+ age: Date.now() - oldest.createdAt.getTime(),
126
+ };
127
+ }
128
+ for (const session of sessions) {
129
+ totalElements += session.elements.size;
130
+ }
131
+ return {
132
+ totalSessions: this.sessions.size,
133
+ activeSessions: sessions.filter((s) => !this.isSessionExpired(s)).length,
134
+ oldestSession,
135
+ totalElements,
136
+ };
137
+ }
138
+ getAllSessionIds() {
139
+ return Array.from(this.sessions.keys());
140
+ }
141
+ async cleanupExpired() {
142
+ const expiredSessions = [];
143
+ for (const [sessionId, session] of this.sessions.entries()) {
144
+ if (this.isSessionExpired(session)) {
145
+ expiredSessions.push(sessionId);
146
+ }
147
+ }
148
+ await Promise.all(expiredSessions.map((sessionId) => this.delete(sessionId).catch((error) => {
149
+ console.error(`Failed to delete expired session ${sessionId}:`, error);
150
+ })));
151
+ return expiredSessions.length;
152
+ }
153
+ }
154
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/runtime/session/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SessionState } from '../../../types.js';
2
+ export declare function cleanupSessionResources(session: SessionState, sessionId: string): Promise<void>;
3
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../../src/runtime/session/utils/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ErG"}
@@ -0,0 +1,78 @@
1
+ import { generateAndSaveReports } from '../../outputs/report-generator.js';
2
+ export async function cleanupSessionResources(session, sessionId) {
3
+ const errors = [];
4
+ if (session.reportData) {
5
+ try {
6
+ await generateAndSaveReports(session);
7
+ console.error(`Session reports generated for ${sessionId}`);
8
+ }
9
+ catch (error) {
10
+ console.error(`Failed to generate session reports for ${sessionId}:`, error);
11
+ }
12
+ }
13
+ if (session.logger?.dispose) {
14
+ try {
15
+ await session.logger.dispose();
16
+ console.error(`Logger disposed for session ${sessionId}`);
17
+ }
18
+ catch (error) {
19
+ const err = error instanceof Error ? error : new Error(String(error));
20
+ errors.push(new Error(`Failed to dispose logger: ${err.message}`));
21
+ console.error(`Failed to dispose logger for session ${sessionId}:`, error);
22
+ }
23
+ }
24
+ if (session.miniProgram) {
25
+ try {
26
+ if (typeof session.miniProgram.disconnect === 'function') {
27
+ await session.miniProgram.disconnect();
28
+ }
29
+ console.error(`Disconnected miniProgram for session ${sessionId}`);
30
+ }
31
+ catch (error) {
32
+ const err = error instanceof Error ? error : new Error(String(error));
33
+ errors.push(new Error(`Failed to disconnect miniProgram: ${err.message}`));
34
+ console.error(`Failed to disconnect miniProgram for session ${sessionId}:`, error);
35
+ }
36
+ }
37
+ const ideProcess = session.ideProcess;
38
+ if (ideProcess) {
39
+ try {
40
+ if (typeof ideProcess.kill === 'function') {
41
+ if (typeof ideProcess.once === 'function') {
42
+ await new Promise((resolve, reject) => {
43
+ const timeout = setTimeout(() => {
44
+ reject(new Error('IDE process did not exit within 5 seconds'));
45
+ }, 5000);
46
+ ideProcess.once('exit', () => {
47
+ clearTimeout(timeout);
48
+ resolve();
49
+ });
50
+ ideProcess.kill();
51
+ });
52
+ }
53
+ else {
54
+ ideProcess.kill();
55
+ }
56
+ }
57
+ console.error(`Killed IDE process for session ${sessionId}`);
58
+ }
59
+ catch (error) {
60
+ const err = error instanceof Error ? error : new Error(String(error));
61
+ errors.push(new Error(`Failed to kill IDE process: ${err.message}`));
62
+ console.error(`Failed to kill IDE process for session ${sessionId}:`, error);
63
+ }
64
+ }
65
+ try {
66
+ session.elements.clear();
67
+ }
68
+ catch (error) {
69
+ const err = error instanceof Error ? error : new Error(String(error));
70
+ errors.push(new Error(`Failed to clear element cache: ${err.message}`));
71
+ }
72
+ if (errors.length > 0) {
73
+ console.error(`Session ${sessionId} cleanup completed with ${errors.length} error(s)`);
74
+ throw new AggregateError(errors, `Session cleanup had ${errors.length} error(s)`);
75
+ }
76
+ console.error(`Session ${sessionId} cleaned up successfully`);
77
+ }
78
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../../src/runtime/session/utils/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './timeout.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/timeout/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './timeout.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/timeout/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -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/runtime/timeout/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/runtime/timeout/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,2 @@
1
+ export * from './validation.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}