@pinepaper.studio/mcp-server 1.4.3 → 1.5.1

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 (74) hide show
  1. package/README.md +89 -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 +465 -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 +61 -65
  31. package/dist/cli.js.map +1 -1
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2769 -150
  35. package/dist/index.js.map +1 -1
  36. package/dist/metrics/types.d.ts +3 -1
  37. package/dist/metrics/types.d.ts.map +1 -1
  38. package/dist/prompts/index.d.ts +30 -0
  39. package/dist/prompts/index.d.ts.map +1 -0
  40. package/dist/prompts/index.js +163 -0
  41. package/dist/prompts/index.js.map +1 -0
  42. package/dist/tools/compact-descriptions.d.ts +9 -0
  43. package/dist/tools/compact-descriptions.d.ts.map +1 -0
  44. package/dist/tools/compact-descriptions.js +291 -0
  45. package/dist/tools/compact-descriptions.js.map +1 -0
  46. package/dist/tools/definitions.d.ts +14 -0
  47. package/dist/tools/definitions.d.ts.map +1 -1
  48. package/dist/tools/definitions.js +4954 -1552
  49. package/dist/tools/definitions.js.map +1 -1
  50. package/dist/tools/handlers.d.ts.map +1 -1
  51. package/dist/tools/handlers.js +1302 -19
  52. package/dist/tools/handlers.js.map +1 -1
  53. package/dist/tools/index.d.ts +4 -1
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +2 -1
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/tools/minimal-descriptions.d.ts +9 -0
  58. package/dist/tools/minimal-descriptions.d.ts.map +1 -0
  59. package/dist/tools/minimal-descriptions.js +158 -0
  60. package/dist/tools/minimal-descriptions.js.map +1 -0
  61. package/dist/tools/toolkits.d.ts +51 -0
  62. package/dist/tools/toolkits.d.ts.map +1 -0
  63. package/dist/tools/toolkits.js +336 -0
  64. package/dist/tools/toolkits.js.map +1 -0
  65. package/dist/types/code-generator.d.ts +193 -1
  66. package/dist/types/code-generator.d.ts.map +1 -1
  67. package/dist/types/code-generator.js +2167 -26
  68. package/dist/types/code-generator.js.map +1 -1
  69. package/dist/types/schemas.d.ts +5278 -1141
  70. package/dist/types/schemas.d.ts.map +1 -1
  71. package/dist/types/schemas.js +863 -5
  72. package/dist/types/schemas.js.map +1 -1
  73. package/manifest.json +94 -2
  74. package/package.json +1 -1
@@ -0,0 +1,311 @@
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
+ // Simple unique ID generator (avoids uuid dependency)
8
+ function generateUniqueId() {
9
+ return Math.random().toString(36).substring(2, 10);
10
+ }
11
+ // =============================================================================
12
+ // SESSION MANAGER CLASS
13
+ // =============================================================================
14
+ /**
15
+ * Manages agent job/session lifecycle.
16
+ *
17
+ * Features:
18
+ * - Job start/end with automatic tracking
19
+ * - Code queuing for batch execution
20
+ * - Item and relation tracking per job
21
+ * - Screenshot policy management
22
+ */
23
+ export class AgentSessionManager {
24
+ currentJob = null;
25
+ jobHistory = [];
26
+ /**
27
+ * Generate a unique job ID
28
+ */
29
+ generateJobId() {
30
+ return `job_${Date.now()}_${generateUniqueId()}`;
31
+ }
32
+ /**
33
+ * Check if a job is currently active
34
+ */
35
+ hasActiveJob() {
36
+ return this.currentJob !== null;
37
+ }
38
+ /**
39
+ * Get the current job context
40
+ */
41
+ getCurrentJob() {
42
+ return this.currentJob;
43
+ }
44
+ /**
45
+ * Start a new agent job
46
+ */
47
+ startJob(options = {}) {
48
+ // End any existing job first
49
+ if (this.currentJob) {
50
+ console.warn('[AgentSession] Ending previous job before starting new one');
51
+ // Don't await - just clean up state
52
+ this.currentJob = null;
53
+ }
54
+ const jobId = this.generateJobId();
55
+ const now = Date.now();
56
+ this.currentJob = {
57
+ jobId,
58
+ name: options.name,
59
+ startTime: now,
60
+ itemsCreated: [],
61
+ relationsCreated: [],
62
+ codeQueue: [],
63
+ screenshotPolicy: options.screenshotPolicy || 'on_complete',
64
+ canvasPreset: options.canvasPreset,
65
+ agentMode: true,
66
+ };
67
+ console.error(`[AgentSession] Started job: ${jobId}${options.name ? ` (${options.name})` : ''}`);
68
+ return this.currentJob;
69
+ }
70
+ /**
71
+ * End the current job and return results
72
+ */
73
+ endJob() {
74
+ if (!this.currentJob) {
75
+ console.warn('[AgentSession] No active job to end');
76
+ return null;
77
+ }
78
+ const job = this.currentJob;
79
+ const duration = Date.now() - job.startTime;
80
+ const result = {
81
+ jobId: job.jobId,
82
+ name: job.name,
83
+ duration,
84
+ itemsCreated: [...job.itemsCreated],
85
+ relationsCreated: [...job.relationsCreated],
86
+ };
87
+ // Store in history
88
+ this.jobHistory.push(result);
89
+ // Clear current job
90
+ this.currentJob = null;
91
+ console.error(`[AgentSession] Ended job: ${job.jobId} (${duration}ms, ${job.itemsCreated.length} items)`);
92
+ return result;
93
+ }
94
+ /**
95
+ * Queue code for batch execution
96
+ */
97
+ queueCode(code) {
98
+ if (!this.currentJob) {
99
+ console.warn('[AgentSession] No active job - executing immediately');
100
+ return;
101
+ }
102
+ this.currentJob.codeQueue.push(code);
103
+ }
104
+ /**
105
+ * Get queued code and clear the queue
106
+ */
107
+ flushCodeQueue() {
108
+ if (!this.currentJob) {
109
+ return [];
110
+ }
111
+ const queue = [...this.currentJob.codeQueue];
112
+ this.currentJob.codeQueue = [];
113
+ return queue;
114
+ }
115
+ /**
116
+ * Get combined code from queue as a single script
117
+ */
118
+ getCombinedCode() {
119
+ if (!this.currentJob || this.currentJob.codeQueue.length === 0) {
120
+ return '';
121
+ }
122
+ const queue = this.currentJob.codeQueue;
123
+ // Wrap in IIFE with error handling and result collection
124
+ const combinedCode = `
125
+ (async function() {
126
+ const _results = [];
127
+ const _itemIds = [];
128
+
129
+ try {
130
+ ${queue.map((code, i) => `
131
+ // Operation ${i + 1}
132
+ try {
133
+ const _result${i} = await (async () => {
134
+ ${code}
135
+ })();
136
+ _results.push({ index: ${i}, success: true, result: _result${i} });
137
+ if (_result${i} && _result${i}.itemId) {
138
+ _itemIds.push(_result${i}.itemId);
139
+ }
140
+ } catch (e) {
141
+ _results.push({ index: ${i}, success: false, error: e.message });
142
+ throw e; // Re-throw for atomic mode
143
+ }
144
+ `).join('\n')}
145
+
146
+ return { success: true, itemIds: _itemIds, results: _results };
147
+ } catch (e) {
148
+ return { success: false, error: e.message, itemIds: _itemIds, results: _results };
149
+ }
150
+ })();
151
+ `.trim();
152
+ return combinedCode;
153
+ }
154
+ /**
155
+ * Check if there's queued code
156
+ */
157
+ hasQueuedCode() {
158
+ return this.currentJob !== null && this.currentJob.codeQueue.length > 0;
159
+ }
160
+ /**
161
+ * Get queue size
162
+ */
163
+ getQueueSize() {
164
+ return this.currentJob?.codeQueue.length ?? 0;
165
+ }
166
+ /**
167
+ * Register an item created during the job
168
+ */
169
+ registerItem(itemId) {
170
+ if (this.currentJob && itemId) {
171
+ this.currentJob.itemsCreated.push(itemId);
172
+ }
173
+ }
174
+ /**
175
+ * Register a relation created during the job
176
+ */
177
+ registerRelation(relationId) {
178
+ if (this.currentJob && relationId) {
179
+ this.currentJob.relationsCreated.push(relationId);
180
+ }
181
+ }
182
+ /**
183
+ * Get screenshot policy for current job
184
+ */
185
+ getScreenshotPolicy() {
186
+ return this.currentJob?.screenshotPolicy ?? 'on_request';
187
+ }
188
+ /**
189
+ * Check if screenshot should be taken based on policy and event
190
+ */
191
+ shouldTakeScreenshot(event) {
192
+ const policy = this.getScreenshotPolicy();
193
+ switch (event) {
194
+ case 'operation':
195
+ return false; // Never screenshot per operation in agent mode
196
+ case 'error':
197
+ return policy === 'on_error' || policy === 'on_complete';
198
+ case 'complete':
199
+ return policy === 'on_complete';
200
+ default:
201
+ return false;
202
+ }
203
+ }
204
+ /**
205
+ * Generate code for canvas reset
206
+ */
207
+ generateResetCode(options = {}) {
208
+ const parts = [];
209
+ // Clear all items
210
+ parts.push(`
211
+ // Clear canvas
212
+ if (app.clearCanvas) {
213
+ app.clearCanvas();
214
+ } else {
215
+ // Fallback: remove all items from text layer
216
+ if (app.textItemGroup) {
217
+ app.textItemGroup.removeChildren();
218
+ }
219
+ // Clear pattern group
220
+ if (app.patternGroup) {
221
+ app.patternGroup.removeChildren();
222
+ }
223
+ // Clear item registry
224
+ if (app.itemRegistry) {
225
+ app.itemRegistry.clear();
226
+ }
227
+ // Clear relation registry
228
+ if (app.relationRegistry) {
229
+ app.relationRegistry.clear();
230
+ }
231
+ }
232
+ `.trim());
233
+ // Set canvas size if preset specified
234
+ if (options.canvasPreset) {
235
+ parts.push(`
236
+ // Set canvas size to preset
237
+ app.setCanvasSize('${options.canvasPreset}');
238
+ `.trim());
239
+ }
240
+ // Set background color if specified
241
+ if (options.backgroundColor && !options.preserveBackground) {
242
+ parts.push(`
243
+ // Set background color
244
+ app.setBackgroundColor('${options.backgroundColor}');
245
+ `.trim());
246
+ }
247
+ // Save history state
248
+ parts.push(`
249
+ // Save state
250
+ if (app.historyManager) {
251
+ app.historyManager.saveState();
252
+ }
253
+ ({ success: true, reset: true });
254
+ `.trim());
255
+ return parts.join('\n\n');
256
+ }
257
+ /**
258
+ * Get job history
259
+ */
260
+ getJobHistory() {
261
+ return [...this.jobHistory];
262
+ }
263
+ /**
264
+ * Clear job history
265
+ */
266
+ clearHistory() {
267
+ this.jobHistory = [];
268
+ }
269
+ /**
270
+ * Get statistics about the current session
271
+ */
272
+ getStats() {
273
+ const completedJobs = this.jobHistory.length;
274
+ const totalItemsCreated = this.jobHistory.reduce((sum, job) => sum + job.itemsCreated.length, 0);
275
+ return {
276
+ activeJob: this.hasActiveJob(),
277
+ currentJobId: this.currentJob?.jobId ?? null,
278
+ currentJobDuration: this.currentJob ? Date.now() - this.currentJob.startTime : null,
279
+ itemsInCurrentJob: this.currentJob?.itemsCreated.length ?? 0,
280
+ codeQueueSize: this.getQueueSize(),
281
+ completedJobs,
282
+ totalItemsCreated: totalItemsCreated + (this.currentJob?.itemsCreated.length ?? 0),
283
+ };
284
+ }
285
+ }
286
+ // =============================================================================
287
+ // SINGLETON INSTANCE
288
+ // =============================================================================
289
+ let sessionManagerInstance = null;
290
+ /**
291
+ * Get the singleton session manager instance
292
+ */
293
+ export function getSessionManager() {
294
+ if (!sessionManagerInstance) {
295
+ sessionManagerInstance = new AgentSessionManager();
296
+ }
297
+ return sessionManagerInstance;
298
+ }
299
+ /**
300
+ * Reset the session manager (useful for testing)
301
+ */
302
+ export function resetSessionManager() {
303
+ if (sessionManagerInstance) {
304
+ if (sessionManagerInstance.hasActiveJob()) {
305
+ sessionManagerInstance.endJob();
306
+ }
307
+ sessionManagerInstance.clearHistory();
308
+ }
309
+ sessionManagerInstance = null;
310
+ }
311
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/agent/session-manager.ts"],"names":[],"mappings":"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"}