@pinepaper.studio/mcp-server 1.4.3 → 1.5.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 (64) hide show
  1. package/README.md +114 -0
  2. package/dist/__tests__/fixtures/mock-generators.d.ts +147 -0
  3. package/dist/__tests__/fixtures/mock-generators.d.ts.map +1 -1
  4. package/dist/__tests__/fixtures/mock-generators.js +85 -0
  5. package/dist/__tests__/fixtures/mock-generators.js.map +1 -1
  6. package/dist/agent/export-manager.d.ts +77 -0
  7. package/dist/agent/export-manager.d.ts.map +1 -0
  8. package/dist/agent/export-manager.js +455 -0
  9. package/dist/agent/export-manager.js.map +1 -0
  10. package/dist/agent/index.d.ts +9 -0
  11. package/dist/agent/index.d.ts.map +1 -0
  12. package/dist/agent/index.js +12 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/session-manager.d.ts +109 -0
  15. package/dist/agent/session-manager.d.ts.map +1 -0
  16. package/dist/agent/session-manager.js +311 -0
  17. package/dist/agent/session-manager.js.map +1 -0
  18. package/dist/agent/types.d.ts +385 -0
  19. package/dist/agent/types.d.ts.map +1 -0
  20. package/dist/agent/types.js +141 -0
  21. package/dist/agent/types.js.map +1 -0
  22. package/dist/browser/index.d.ts +1 -1
  23. package/dist/browser/index.d.ts.map +1 -1
  24. package/dist/browser/index.js +1 -1
  25. package/dist/browser/index.js.map +1 -1
  26. package/dist/browser/puppeteer-controller.d.ts +89 -5
  27. package/dist/browser/puppeteer-controller.d.ts.map +1 -1
  28. package/dist/browser/puppeteer-controller.js +412 -11
  29. package/dist/browser/puppeteer-controller.js.map +1 -1
  30. package/dist/cli.js +3 -2
  31. package/dist/cli.js.map +1 -1
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2717 -147
  35. package/dist/index.js.map +1 -1
  36. package/dist/prompts/index.d.ts +39 -0
  37. package/dist/prompts/index.d.ts.map +1 -0
  38. package/dist/prompts/index.js +254 -0
  39. package/dist/prompts/index.js.map +1 -0
  40. package/dist/tools/compact-descriptions.d.ts +9 -0
  41. package/dist/tools/compact-descriptions.d.ts.map +1 -0
  42. package/dist/tools/compact-descriptions.js +260 -0
  43. package/dist/tools/compact-descriptions.js.map +1 -0
  44. package/dist/tools/definitions.d.ts +12 -0
  45. package/dist/tools/definitions.d.ts.map +1 -1
  46. package/dist/tools/definitions.js +4844 -1559
  47. package/dist/tools/definitions.js.map +1 -1
  48. package/dist/tools/handlers.d.ts.map +1 -1
  49. package/dist/tools/handlers.js +915 -17
  50. package/dist/tools/handlers.js.map +1 -1
  51. package/dist/tools/index.d.ts +2 -1
  52. package/dist/tools/index.d.ts.map +1 -1
  53. package/dist/tools/index.js +1 -1
  54. package/dist/tools/index.js.map +1 -1
  55. package/dist/types/code-generator.d.ts +197 -1
  56. package/dist/types/code-generator.d.ts.map +1 -1
  57. package/dist/types/code-generator.js +2338 -26
  58. package/dist/types/code-generator.js.map +1 -1
  59. package/dist/types/schemas.d.ts +5294 -1134
  60. package/dist/types/schemas.d.ts.map +1 -1
  61. package/dist/types/schemas.js +886 -4
  62. package/dist/types/schemas.js.map +1 -1
  63. package/manifest.json +70 -2
  64. package/package.json +1 -1
@@ -0,0 +1,455 @@
1
+ /**
2
+ * PinePaper Smart Export Manager
3
+ *
4
+ * Provides intelligent export recommendations and platform presets.
5
+ * Analyzes content to suggest optimal export formats.
6
+ */
7
+ import { PLATFORM_PRESETS, } from './types.js';
8
+ // =============================================================================
9
+ // EXPORT MANAGER CLASS
10
+ // =============================================================================
11
+ /**
12
+ * Manages smart exports with content analysis and platform presets.
13
+ *
14
+ * Features:
15
+ * - Content analysis (animations, colors, complexity)
16
+ * - Platform preset management
17
+ * - Optimal format recommendations
18
+ * - Export code generation
19
+ */
20
+ export class SmartExportManager {
21
+ /**
22
+ * Get platform preset configuration
23
+ */
24
+ getPreset(platform) {
25
+ return PLATFORM_PRESETS[platform];
26
+ }
27
+ /**
28
+ * List all available platforms
29
+ */
30
+ listPlatforms() {
31
+ return Object.keys(PLATFORM_PRESETS);
32
+ }
33
+ /**
34
+ * Generate code to analyze canvas content
35
+ */
36
+ generateAnalysisCode() {
37
+ return `
38
+ (function() {
39
+ const analysis = {
40
+ hasAnimations: false,
41
+ animationTypes: [],
42
+ colorComplexity: 'simple',
43
+ itemCount: 0,
44
+ canvasSize: { width: 0, height: 0 },
45
+ hasRelations: false,
46
+ relationTypes: [],
47
+ hasGradients: false,
48
+ hasShadows: false,
49
+ hasText: false,
50
+ hasImages: false,
51
+ };
52
+
53
+ // Get canvas size
54
+ if (app.canvasEl) {
55
+ analysis.canvasSize = {
56
+ width: app.canvasEl.width,
57
+ height: app.canvasEl.height
58
+ };
59
+ } else if (paper.view) {
60
+ analysis.canvasSize = {
61
+ width: paper.view.size.width,
62
+ height: paper.view.size.height
63
+ };
64
+ }
65
+
66
+ // Count items and analyze types
67
+ const items = app.itemRegistry ? app.itemRegistry.getAll() : [];
68
+ analysis.itemCount = items.length;
69
+
70
+ const animationSet = new Set();
71
+ const relationSet = new Set();
72
+ let hasGradient = false;
73
+ let hasShadow = false;
74
+
75
+ items.forEach(entry => {
76
+ const item = entry.item;
77
+ const data = item.data || {};
78
+
79
+ // Check for text
80
+ if (entry.type === 'text' || item.className === 'PointText') {
81
+ analysis.hasText = true;
82
+ }
83
+
84
+ // Check for images (raster items)
85
+ if (item.className === 'Raster') {
86
+ analysis.hasImages = true;
87
+ }
88
+
89
+ // Check for animations
90
+ if (data.animationType) {
91
+ analysis.hasAnimations = true;
92
+ animationSet.add(data.animationType);
93
+ }
94
+
95
+ // Check for gradients
96
+ if (item.fillColor && item.fillColor.gradient) {
97
+ hasGradient = true;
98
+ }
99
+ if (item.strokeColor && item.strokeColor.gradient) {
100
+ hasGradient = true;
101
+ }
102
+
103
+ // Check for shadows
104
+ if (item.shadowColor || item.shadowBlur) {
105
+ hasShadow = true;
106
+ }
107
+ });
108
+
109
+ analysis.animationTypes = Array.from(animationSet);
110
+ analysis.hasGradients = hasGradient;
111
+ analysis.hasShadows = hasShadow;
112
+
113
+ // Check for relations
114
+ if (app.relationRegistry) {
115
+ const relations = app.relationRegistry.getAll ? app.relationRegistry.getAll() : [];
116
+ analysis.hasRelations = relations.length > 0;
117
+ relations.forEach(rel => {
118
+ if (rel.relationType) {
119
+ relationSet.add(rel.relationType);
120
+ }
121
+ });
122
+ analysis.relationTypes = Array.from(relationSet);
123
+
124
+ // Relations imply animations
125
+ if (analysis.hasRelations) {
126
+ analysis.hasAnimations = true;
127
+ }
128
+ }
129
+
130
+ // Determine color complexity
131
+ if (hasGradient) {
132
+ analysis.colorComplexity = 'gradient';
133
+ } else if (analysis.itemCount > 20 || hasShadow) {
134
+ analysis.colorComplexity = 'complex';
135
+ } else {
136
+ analysis.colorComplexity = 'simple';
137
+ }
138
+
139
+ return analysis;
140
+ })();
141
+ `.trim();
142
+ }
143
+ /**
144
+ * Recommend export format based on content analysis
145
+ */
146
+ recommendFormat(analysis) {
147
+ const recommendations = [];
148
+ // Primary recommendation logic
149
+ if (analysis.hasAnimations) {
150
+ // Animated content
151
+ if (analysis.hasGradients || analysis.colorComplexity === 'complex') {
152
+ // Complex animations → WebM/MP4 for best quality
153
+ recommendations.push({
154
+ platform: 'web',
155
+ format: 'webm',
156
+ confidence: 0.9,
157
+ reason: 'Animated content with gradients renders best as WebM video',
158
+ warnings: analysis.hasImages ? ['Images may increase file size'] : undefined,
159
+ });
160
+ recommendations.push({
161
+ platform: 'instagram',
162
+ format: 'mp4',
163
+ confidence: 0.85,
164
+ reason: 'MP4 for social media compatibility with complex animations',
165
+ });
166
+ }
167
+ else {
168
+ // Simple animations → SVG for web, GIF for social
169
+ recommendations.push({
170
+ platform: 'web',
171
+ format: 'svg',
172
+ confidence: 0.95,
173
+ reason: 'Simple animations export well as animated SVG',
174
+ });
175
+ recommendations.push({
176
+ platform: 'twitter',
177
+ format: 'gif',
178
+ confidence: 0.8,
179
+ reason: 'GIF for social media with simple animations',
180
+ warnings: ['GIF limited to 256 colors'],
181
+ });
182
+ }
183
+ }
184
+ else {
185
+ // Static content
186
+ if (analysis.colorComplexity === 'simple' && !analysis.hasImages) {
187
+ recommendations.push({
188
+ platform: 'web',
189
+ format: 'svg',
190
+ confidence: 0.95,
191
+ reason: 'Vector graphics best as SVG for scalability',
192
+ });
193
+ }
194
+ else {
195
+ recommendations.push({
196
+ platform: 'instagram',
197
+ format: 'png',
198
+ confidence: 0.9,
199
+ reason: 'High quality static export as PNG',
200
+ });
201
+ }
202
+ }
203
+ // Add print recommendation if applicable
204
+ if (!analysis.hasAnimations && analysis.canvasSize.width > 1000) {
205
+ recommendations.push({
206
+ platform: 'print-a4',
207
+ format: 'pdf',
208
+ confidence: 0.7,
209
+ reason: 'High resolution suitable for print',
210
+ });
211
+ }
212
+ return recommendations;
213
+ }
214
+ /**
215
+ * Recommend platforms based on content analysis
216
+ */
217
+ recommendPlatforms(analysis) {
218
+ const platforms = [];
219
+ const { width, height } = analysis.canvasSize;
220
+ const aspectRatio = width / height;
221
+ // Square content
222
+ if (Math.abs(aspectRatio - 1) < 0.1) {
223
+ platforms.push('instagram');
224
+ }
225
+ // Vertical content (9:16)
226
+ if (aspectRatio < 0.7) {
227
+ platforms.push('instagram-story', 'tiktok');
228
+ }
229
+ // Horizontal content (16:9)
230
+ if (aspectRatio > 1.5) {
231
+ platforms.push('youtube', 'youtube-thumbnail', 'twitter', 'linkedin');
232
+ }
233
+ // Web is always an option
234
+ platforms.push('web');
235
+ return platforms;
236
+ }
237
+ /**
238
+ * Get optimal format for a specific platform based on content
239
+ */
240
+ getOptimalFormat(platform, analysis) {
241
+ const preset = PLATFORM_PRESETS[platform];
242
+ if (analysis.hasAnimations) {
243
+ return preset.formats.animated;
244
+ }
245
+ else {
246
+ return preset.formats.static;
247
+ }
248
+ }
249
+ /**
250
+ * Generate export code for a specific platform
251
+ */
252
+ generateExportCode(platform, format, options = {}) {
253
+ const preset = PLATFORM_PRESETS[platform];
254
+ const quality = options.quality || 'standard';
255
+ // Get quality settings
256
+ const qualitySettings = {
257
+ draft: { compression: 0.6, fps: 15, dpi: 72 },
258
+ standard: { compression: 0.85, fps: 30, dpi: 150 },
259
+ high: { compression: 0.95, fps: 60, dpi: 300 },
260
+ }[quality];
261
+ switch (format) {
262
+ case 'svg':
263
+ return this.generateSVGExportCode();
264
+ case 'png':
265
+ return this.generatePNGExportCode(qualitySettings.dpi);
266
+ case 'gif':
267
+ return this.generateGIFExportCode(qualitySettings.fps, qualitySettings.compression);
268
+ case 'mp4':
269
+ case 'webm':
270
+ return this.generateVideoExportCode(format, qualitySettings.fps, preset.dimensions);
271
+ case 'pdf':
272
+ return this.generatePDFExportCode(qualitySettings.dpi);
273
+ default:
274
+ return this.generateSVGExportCode();
275
+ }
276
+ }
277
+ /**
278
+ * Generate SVG export code
279
+ */
280
+ generateSVGExportCode() {
281
+ return `
282
+ (async function() {
283
+ const svgString = app.exportAnimatedSVG();
284
+ const hasAnimations = svgString.includes('<animate') || svgString.includes('@keyframes');
285
+
286
+ return {
287
+ success: true,
288
+ format: 'svg',
289
+ data: svgString,
290
+ mimeType: 'image/svg+xml',
291
+ size: new Blob([svgString]).size,
292
+ hasAnimations
293
+ };
294
+ })();
295
+ `.trim();
296
+ }
297
+ /**
298
+ * Generate PNG export code
299
+ */
300
+ generatePNGExportCode(dpi) {
301
+ return `
302
+ (async function() {
303
+ // Use exportPrintPNG if available for high DPI
304
+ if (app.exportPrintPNG && ${dpi} >= 150) {
305
+ const dataUrl = await app.exportPrintPNG(${dpi});
306
+ return {
307
+ success: true,
308
+ format: 'png',
309
+ data: dataUrl,
310
+ mimeType: 'image/png',
311
+ dpi: ${dpi}
312
+ };
313
+ }
314
+
315
+ // Fallback to canvas export
316
+ const canvas = document.querySelector('canvas');
317
+ const dataUrl = canvas.toDataURL('image/png');
318
+ return {
319
+ success: true,
320
+ format: 'png',
321
+ data: dataUrl,
322
+ mimeType: 'image/png',
323
+ size: Math.round(dataUrl.length * 0.75)
324
+ };
325
+ })();
326
+ `.trim();
327
+ }
328
+ /**
329
+ * Generate GIF export code
330
+ */
331
+ generateGIFExportCode(fps, quality) {
332
+ return `
333
+ (async function() {
334
+ if (!app.exportEngine || !app.exportEngine.exportGIF) {
335
+ return { success: false, error: 'GIF export not available' };
336
+ }
337
+
338
+ const blob = await app.exportEngine.exportGIF({
339
+ fps: ${fps},
340
+ quality: ${quality},
341
+ duration: 5
342
+ });
343
+
344
+ return new Promise((resolve) => {
345
+ const reader = new FileReader();
346
+ reader.onloadend = () => {
347
+ resolve({
348
+ success: true,
349
+ format: 'gif',
350
+ data: reader.result,
351
+ mimeType: 'image/gif',
352
+ size: blob.size
353
+ });
354
+ };
355
+ reader.readAsDataURL(blob);
356
+ });
357
+ })();
358
+ `.trim();
359
+ }
360
+ /**
361
+ * Generate video export code (MP4/WebM)
362
+ */
363
+ generateVideoExportCode(format, fps, dimensions) {
364
+ const exportMethod = format === 'mp4' ? 'exportMP4' : 'exportWebM';
365
+ const mimeType = format === 'mp4' ? 'video/mp4' : 'video/webm';
366
+ return `
367
+ (async function() {
368
+ if (!app.exportEngine || !app.exportEngine.${exportMethod}) {
369
+ return { success: false, error: '${format.toUpperCase()} export not available' };
370
+ }
371
+
372
+ const blob = await app.exportEngine.${exportMethod}({
373
+ fps: ${fps},
374
+ duration: 5,
375
+ width: ${dimensions.width},
376
+ height: ${dimensions.height}
377
+ });
378
+
379
+ return new Promise((resolve) => {
380
+ const reader = new FileReader();
381
+ reader.onloadend = () => {
382
+ resolve({
383
+ success: true,
384
+ format: '${format}',
385
+ data: reader.result,
386
+ mimeType: '${mimeType}',
387
+ size: blob.size
388
+ });
389
+ };
390
+ reader.readAsDataURL(blob);
391
+ });
392
+ })();
393
+ `.trim();
394
+ }
395
+ /**
396
+ * Generate PDF export code
397
+ */
398
+ generatePDFExportCode(dpi) {
399
+ return `
400
+ (async function() {
401
+ if (!app.exportEngine || !app.exportEngine.exportPDF) {
402
+ return { success: false, error: 'PDF export not available' };
403
+ }
404
+
405
+ const blob = await app.exportEngine.exportPDF({
406
+ dpi: ${dpi},
407
+ includeBleed: false
408
+ });
409
+
410
+ return new Promise((resolve) => {
411
+ const reader = new FileReader();
412
+ reader.onloadend = () => {
413
+ resolve({
414
+ success: true,
415
+ format: 'pdf',
416
+ data: reader.result,
417
+ mimeType: 'application/pdf',
418
+ size: blob.size,
419
+ dpi: ${dpi}
420
+ });
421
+ };
422
+ reader.readAsDataURL(blob);
423
+ });
424
+ })();
425
+ `.trim();
426
+ }
427
+ /**
428
+ * Generate code to set canvas size from preset
429
+ */
430
+ generateSetCanvasSizeCode(platform) {
431
+ const preset = PLATFORM_PRESETS[platform];
432
+ return `
433
+ // Set canvas size for ${platform}
434
+ app.setCanvasSize({
435
+ width: ${preset.dimensions.width},
436
+ height: ${preset.dimensions.height}
437
+ });
438
+ ({ success: true, platform: '${platform}', dimensions: ${JSON.stringify(preset.dimensions)} });
439
+ `.trim();
440
+ }
441
+ }
442
+ // =============================================================================
443
+ // SINGLETON INSTANCE
444
+ // =============================================================================
445
+ let exportManagerInstance = null;
446
+ /**
447
+ * Get the singleton export manager instance
448
+ */
449
+ export function getExportManager() {
450
+ if (!exportManagerInstance) {
451
+ exportManagerInstance = new SmartExportManager();
452
+ }
453
+ return exportManagerInstance;
454
+ }
455
+ //# sourceMappingURL=export-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-manager.js","sourceRoot":"","sources":["../../src/agent/export-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * PinePaper Agent Flow Mode Module
3
+ *
4
+ * Provides optimized workflows for AI agent content automation pipelines.
5
+ */
6
+ export * from './types.js';
7
+ export { AgentSessionManager, getSessionManager, resetSessionManager } from './session-manager.js';
8
+ export { SmartExportManager, getExportManager } from './export-manager.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * PinePaper Agent Flow Mode Module
3
+ *
4
+ * Provides optimized workflows for AI agent content automation pipelines.
5
+ */
6
+ // Export types
7
+ export * from './types.js';
8
+ // Export session manager
9
+ export { AgentSessionManager, getSessionManager, resetSessionManager } from './session-manager.js';
10
+ // Export export manager
11
+ export { SmartExportManager, getExportManager } from './export-manager.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,cAAc,YAAY,CAAC;AAE3B,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * PinePaper Agent Session Manager
3
+ *
4
+ * Manages job/session lifecycle for agent workflows.
5
+ * Provides batch code execution, item tracking, and job state management.
6
+ */
7
+ import type { JobContext, JobOptions, JobResult, ResetOptions, ScreenshotPolicy } from './types.js';
8
+ /**
9
+ * Manages agent job/session lifecycle.
10
+ *
11
+ * Features:
12
+ * - Job start/end with automatic tracking
13
+ * - Code queuing for batch execution
14
+ * - Item and relation tracking per job
15
+ * - Screenshot policy management
16
+ */
17
+ export declare class AgentSessionManager {
18
+ private currentJob;
19
+ private jobHistory;
20
+ /**
21
+ * Generate a unique job ID
22
+ */
23
+ private generateJobId;
24
+ /**
25
+ * Check if a job is currently active
26
+ */
27
+ hasActiveJob(): boolean;
28
+ /**
29
+ * Get the current job context
30
+ */
31
+ getCurrentJob(): JobContext | null;
32
+ /**
33
+ * Start a new agent job
34
+ */
35
+ startJob(options?: JobOptions): JobContext;
36
+ /**
37
+ * End the current job and return results
38
+ */
39
+ endJob(): JobResult | null;
40
+ /**
41
+ * Queue code for batch execution
42
+ */
43
+ queueCode(code: string): void;
44
+ /**
45
+ * Get queued code and clear the queue
46
+ */
47
+ flushCodeQueue(): string[];
48
+ /**
49
+ * Get combined code from queue as a single script
50
+ */
51
+ getCombinedCode(): string;
52
+ /**
53
+ * Check if there's queued code
54
+ */
55
+ hasQueuedCode(): boolean;
56
+ /**
57
+ * Get queue size
58
+ */
59
+ getQueueSize(): number;
60
+ /**
61
+ * Register an item created during the job
62
+ */
63
+ registerItem(itemId: string): void;
64
+ /**
65
+ * Register a relation created during the job
66
+ */
67
+ registerRelation(relationId: string): void;
68
+ /**
69
+ * Get screenshot policy for current job
70
+ */
71
+ getScreenshotPolicy(): ScreenshotPolicy;
72
+ /**
73
+ * Check if screenshot should be taken based on policy and event
74
+ */
75
+ shouldTakeScreenshot(event: 'operation' | 'error' | 'complete'): boolean;
76
+ /**
77
+ * Generate code for canvas reset
78
+ */
79
+ generateResetCode(options?: ResetOptions): string;
80
+ /**
81
+ * Get job history
82
+ */
83
+ getJobHistory(): JobResult[];
84
+ /**
85
+ * Clear job history
86
+ */
87
+ clearHistory(): void;
88
+ /**
89
+ * Get statistics about the current session
90
+ */
91
+ getStats(): {
92
+ activeJob: boolean;
93
+ currentJobId: string | null;
94
+ currentJobDuration: number | null;
95
+ itemsInCurrentJob: number;
96
+ codeQueueSize: number;
97
+ completedJobs: number;
98
+ totalItemsCreated: number;
99
+ };
100
+ }
101
+ /**
102
+ * Get the singleton session manager instance
103
+ */
104
+ export declare function getSessionManager(): AgentSessionManager;
105
+ /**
106
+ * Reset the session manager (useful for testing)
107
+ */
108
+ export declare function resetSessionManager(): void;
109
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/agent/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,YAAY,EAKZ,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,UAAU,CAAmB;IAErC;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACH,QAAQ,CAAC,OAAO,GAAE,UAAe,GAAG,UAAU;IA4B9C;;OAEG;IACH,MAAM,IAAI,SAAS,GAAG,IAAI;IA4B1B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS7B;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAU1B;;OAEG;IACH,eAAe,IAAI,MAAM;IAwCzB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMlC;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM1C;;OAEG;IACH,mBAAmB,IAAI,gBAAgB;IAIvC;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO;IAexE;;OAEG;IACH,iBAAiB,CAAC,OAAO,GAAE,YAAiB,GAAG,MAAM;IAwDrD;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE;IAI5B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,QAAQ,IAAI;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;CAcF;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAKvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C"}