@shuji-bonji/rxjs-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 (36) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +284 -0
  3. package/README.md +295 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +94 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/tools/analyze-operators.d.ts +3 -0
  9. package/dist/tools/analyze-operators.d.ts.map +1 -0
  10. package/dist/tools/analyze-operators.js +396 -0
  11. package/dist/tools/analyze-operators.js.map +1 -0
  12. package/dist/tools/execute-stream-worker.d.ts +2 -0
  13. package/dist/tools/execute-stream-worker.d.ts.map +1 -0
  14. package/dist/tools/execute-stream-worker.js +246 -0
  15. package/dist/tools/execute-stream-worker.js.map +1 -0
  16. package/dist/tools/execute-stream.d.ts +3 -0
  17. package/dist/tools/execute-stream.d.ts.map +1 -0
  18. package/dist/tools/execute-stream.js +219 -0
  19. package/dist/tools/execute-stream.js.map +1 -0
  20. package/dist/tools/marble-diagram.d.ts +3 -0
  21. package/dist/tools/marble-diagram.d.ts.map +1 -0
  22. package/dist/tools/marble-diagram.js +207 -0
  23. package/dist/tools/marble-diagram.js.map +1 -0
  24. package/dist/tools/memory-leak.d.ts +3 -0
  25. package/dist/tools/memory-leak.d.ts.map +1 -0
  26. package/dist/tools/memory-leak.js +285 -0
  27. package/dist/tools/memory-leak.js.map +1 -0
  28. package/dist/tools/suggest-pattern.d.ts +3 -0
  29. package/dist/tools/suggest-pattern.d.ts.map +1 -0
  30. package/dist/tools/suggest-pattern.js +571 -0
  31. package/dist/tools/suggest-pattern.js.map +1 -0
  32. package/dist/types.d.ts +85 -0
  33. package/dist/types.d.ts.map +1 -0
  34. package/dist/types.js +3 -0
  35. package/dist/types.js.map +1 -0
  36. package/package.json +71 -0
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Worker thread for isolated RxJS code execution
3
+ * This runs in a separate thread to prevent main process pollution
4
+ */
5
+ import { parentPort, workerData } from 'worker_threads';
6
+ import { Observable, Subject, BehaviorSubject, ReplaySubject, AsyncSubject, connectable, of, from, interval, timer, range, generate, concat, merge, combineLatest, zip, forkJoin, race, partition, iif, defer, scheduled, throwError, EMPTY, NEVER, firstValueFrom, lastValueFrom, map, scan, mergeScan, reduce, pairwise, groupBy, mergeMap, switchMap, concatMap, exhaustMap, expand, buffer, bufferTime, bufferCount, bufferWhen, bufferToggle, windowTime, window as windowOp, windowCount, windowToggle, windowWhen, filter, take, takeLast, takeWhile, skip, skipLast, skipWhile, skipUntil, first, last, elementAt, find, findIndex, debounceTime, throttleTime, auditTime, audit, sampleTime, sample, ignoreElements, distinct, distinctUntilChanged, distinctUntilKeyChanged, concatWith, mergeWith, combineLatestWith, zipWith, raceWith, withLatestFrom, mergeAll, concatAll, switchAll, exhaustAll, combineLatestAll, zipAll, tap, delay, delayWhen, timeout, takeUntil, finalize, repeat, retry, startWith, endWith, toArray, materialize, dematerialize, observeOn, subscribeOn, timestamp, defaultIfEmpty, every, isEmpty, catchError, retryWhen, share, shareReplay, pluck, mapTo, switchMapTo, mergeMapTo, concatMapTo, count, max, min, single, throwIfEmpty, connect, refCount, } from 'rxjs';
7
+ async function executeCode(input) {
8
+ const result = {
9
+ values: [],
10
+ errors: [],
11
+ completed: false,
12
+ hasError: false,
13
+ timeline: [],
14
+ executionTime: 0,
15
+ memoryUsage: {
16
+ before: 0,
17
+ after: 0,
18
+ peak: 0,
19
+ },
20
+ };
21
+ const startTime = Date.now();
22
+ const startMemory = process.memoryUsage().heapUsed;
23
+ result.memoryUsage.before = startMemory;
24
+ try {
25
+ // Create a safe execution context with RxJS imports
26
+ // Note: We deliberately exclude process, require, import, fs, etc.
27
+ const context = {
28
+ Observable,
29
+ Subject,
30
+ BehaviorSubject,
31
+ ReplaySubject,
32
+ AsyncSubject,
33
+ of,
34
+ from,
35
+ interval,
36
+ timer,
37
+ range,
38
+ generate,
39
+ concat,
40
+ merge,
41
+ combineLatest,
42
+ zip,
43
+ forkJoin,
44
+ race,
45
+ partition,
46
+ iif,
47
+ defer,
48
+ scheduled,
49
+ throwError,
50
+ EMPTY,
51
+ NEVER,
52
+ firstValueFrom,
53
+ lastValueFrom,
54
+ map,
55
+ scan,
56
+ mergeScan,
57
+ reduce,
58
+ pairwise,
59
+ groupBy,
60
+ mergeMap,
61
+ switchMap,
62
+ concatMap,
63
+ exhaustMap,
64
+ expand,
65
+ buffer,
66
+ bufferTime,
67
+ bufferCount,
68
+ bufferWhen,
69
+ bufferToggle,
70
+ windowTime,
71
+ window: windowOp,
72
+ windowCount,
73
+ windowToggle,
74
+ windowWhen,
75
+ filter,
76
+ take,
77
+ takeLast,
78
+ takeWhile,
79
+ skip,
80
+ skipLast,
81
+ skipWhile,
82
+ skipUntil,
83
+ first,
84
+ last,
85
+ elementAt,
86
+ find,
87
+ findIndex,
88
+ debounceTime,
89
+ throttleTime,
90
+ auditTime,
91
+ audit,
92
+ sampleTime,
93
+ sample,
94
+ ignoreElements,
95
+ distinct,
96
+ distinctUntilChanged,
97
+ distinctUntilKeyChanged,
98
+ concatWith,
99
+ mergeWith,
100
+ combineLatestWith,
101
+ zipWith,
102
+ raceWith,
103
+ withLatestFrom,
104
+ mergeAll,
105
+ concatAll,
106
+ switchAll,
107
+ exhaustAll,
108
+ combineLatestAll,
109
+ zipAll,
110
+ tap,
111
+ delay,
112
+ delayWhen,
113
+ timeout,
114
+ takeUntil,
115
+ finalize,
116
+ repeat,
117
+ retry,
118
+ startWith,
119
+ endWith,
120
+ toArray,
121
+ materialize,
122
+ dematerialize,
123
+ observeOn,
124
+ subscribeOn,
125
+ timestamp,
126
+ defaultIfEmpty,
127
+ every,
128
+ isEmpty,
129
+ catchError,
130
+ retryWhen,
131
+ share,
132
+ shareReplay,
133
+ pluck,
134
+ mapTo,
135
+ switchMapTo,
136
+ mergeMapTo,
137
+ concatMapTo,
138
+ count,
139
+ max,
140
+ min,
141
+ single,
142
+ throwIfEmpty,
143
+ connect,
144
+ connectable,
145
+ refCount,
146
+ // Safe globals only
147
+ console: {
148
+ log: (...args) => { },
149
+ error: (...args) => { },
150
+ warn: (...args) => { },
151
+ },
152
+ setTimeout,
153
+ clearTimeout,
154
+ Date,
155
+ Math,
156
+ JSON,
157
+ Array,
158
+ Object,
159
+ String,
160
+ Number,
161
+ Boolean,
162
+ Promise,
163
+ // Explicitly undefined dangerous globals
164
+ process: undefined,
165
+ require: undefined,
166
+ module: undefined,
167
+ exports: undefined,
168
+ __dirname: undefined,
169
+ __filename: undefined,
170
+ global: undefined,
171
+ globalThis: undefined,
172
+ };
173
+ // Create function with context
174
+ const func = new Function(...Object.keys(context), `
175
+ "use strict";
176
+ ${input.code}
177
+ `);
178
+ // Execute the function with context
179
+ const observable$ = func(...Object.values(context));
180
+ if (!(observable$ instanceof Observable)) {
181
+ throw new Error('Code must return an Observable');
182
+ }
183
+ // Execute the observable with limits
184
+ await new Promise((resolve, reject) => {
185
+ const timeoutHandle = setTimeout(() => {
186
+ reject(new Error(`Stream execution timeout after ${input.timeoutMs}ms`));
187
+ }, input.timeoutMs);
188
+ let errorOccurred = false;
189
+ const subscription = observable$
190
+ .pipe(take(input.takeCount), tap(value => {
191
+ const time = Date.now() - startTime;
192
+ result.values.push(value);
193
+ result.timeline.push({ time, type: 'next', value });
194
+ }), catchError(error => {
195
+ const time = Date.now() - startTime;
196
+ const errorMessage = error instanceof Error ? error.message : String(error);
197
+ result.errors.push(errorMessage);
198
+ result.timeline.push({ time, type: 'error', value: errorMessage });
199
+ result.hasError = true;
200
+ errorOccurred = true;
201
+ return EMPTY;
202
+ }), finalize(() => {
203
+ clearTimeout(timeoutHandle);
204
+ if (!errorOccurred) {
205
+ result.completed = true;
206
+ }
207
+ const time = Date.now() - startTime;
208
+ result.timeline.push({ time, type: 'complete' });
209
+ }))
210
+ .subscribe({
211
+ complete: () => resolve(),
212
+ error: (err) => {
213
+ clearTimeout(timeoutHandle);
214
+ reject(err);
215
+ }
216
+ });
217
+ // Clean up on timeout
218
+ setTimeout(() => {
219
+ subscription.unsubscribe();
220
+ }, input.timeoutMs);
221
+ });
222
+ }
223
+ catch (error) {
224
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
225
+ result.errors.push(errorMessage);
226
+ result.hasError = true;
227
+ }
228
+ result.executionTime = Date.now() - startTime;
229
+ const endMemory = process.memoryUsage().heapUsed;
230
+ result.memoryUsage.after = endMemory;
231
+ result.memoryUsage.peak = Math.max(startMemory, endMemory);
232
+ return result;
233
+ }
234
+ // Main worker entry point
235
+ const input = workerData;
236
+ executeCode(input)
237
+ .then(result => {
238
+ parentPort?.postMessage({ success: true, result });
239
+ })
240
+ .catch(error => {
241
+ parentPort?.postMessage({
242
+ success: false,
243
+ error: error instanceof Error ? error.message : 'Unknown error',
244
+ });
245
+ });
246
+ //# sourceMappingURL=execute-stream-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-stream-worker.js","sourceRoot":"","sources":["../../src/tools/execute-stream-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolImplementation } from '../types.js';
2
+ export declare const executeStreamTool: ToolImplementation;
3
+ //# sourceMappingURL=execute-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-stream.d.ts","sourceRoot":"","sources":["../../src/tools/execute-stream.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAuC,MAAM,aAAa,CAAC;AA6NtF,eAAO,MAAM,iBAAiB,EAAE,kBAsC/B,CAAC"}
@@ -0,0 +1,219 @@
1
+ import { z } from 'zod';
2
+ import { Worker } from 'worker_threads';
3
+ import { fileURLToPath } from 'url';
4
+ import path from 'path';
5
+ // Get the directory of this file
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ // Determine the worker path - handle both src (vitest) and dist (production) scenarios
9
+ function getWorkerPath() {
10
+ // Check if we're in src directory (vitest) or dist directory (production)
11
+ if (__dirname.includes('/src/')) {
12
+ // Running from src - look for compiled worker in dist
13
+ return path.resolve(__dirname, '../../dist/tools/execute-stream-worker.js');
14
+ }
15
+ // Running from dist
16
+ return path.join(__dirname, 'execute-stream-worker.js');
17
+ }
18
+ // Input schema
19
+ const inputSchema = z.object({
20
+ code: z.string().describe('RxJS code to execute. Should return an Observable.'),
21
+ takeCount: z.number().optional().default(10).describe('Maximum number of values to take from the stream'),
22
+ timeout: z.number().optional().default(5000).describe('Timeout in milliseconds'),
23
+ captureTimeline: z.boolean().optional().default(true).describe('Whether to capture emission timeline'),
24
+ captureMemory: z.boolean().optional().default(false).describe('Whether to capture memory usage'),
25
+ });
26
+ /**
27
+ * Execute RxJS code in an isolated Worker thread
28
+ * This prevents any side effects from affecting the main process
29
+ */
30
+ async function executeRxJSCodeInWorker(code, takeCount, timeoutMs) {
31
+ return new Promise((resolve) => {
32
+ const workerPath = getWorkerPath();
33
+ const worker = new Worker(workerPath, {
34
+ workerData: {
35
+ code,
36
+ takeCount,
37
+ timeoutMs,
38
+ },
39
+ });
40
+ // Set a hard timeout that will kill the worker
41
+ const hardTimeout = setTimeout(() => {
42
+ worker.terminate().then(() => {
43
+ resolve({
44
+ values: [],
45
+ errors: [`Execution forcefully terminated after ${timeoutMs}ms timeout`],
46
+ completed: false,
47
+ timeline: [],
48
+ executionTime: timeoutMs,
49
+ memoryUsage: {
50
+ before: 0,
51
+ after: 0,
52
+ peak: 0,
53
+ },
54
+ });
55
+ });
56
+ }, timeoutMs + 1000); // Give 1 extra second for graceful completion
57
+ worker.on('message', (message) => {
58
+ clearTimeout(hardTimeout);
59
+ if (message.success && message.result) {
60
+ resolve({
61
+ values: message.result.values,
62
+ errors: message.result.errors,
63
+ completed: message.result.completed && !message.result.hasError,
64
+ timeline: message.result.timeline,
65
+ executionTime: message.result.executionTime,
66
+ memoryUsage: message.result.memoryUsage,
67
+ });
68
+ }
69
+ else {
70
+ resolve({
71
+ values: [],
72
+ errors: [message.error || 'Unknown worker error'],
73
+ completed: false,
74
+ timeline: [],
75
+ executionTime: 0,
76
+ memoryUsage: {
77
+ before: 0,
78
+ after: 0,
79
+ peak: 0,
80
+ },
81
+ });
82
+ }
83
+ worker.terminate();
84
+ });
85
+ worker.on('error', (error) => {
86
+ clearTimeout(hardTimeout);
87
+ resolve({
88
+ values: [],
89
+ errors: [error.message || 'Worker execution error'],
90
+ completed: false,
91
+ timeline: [],
92
+ executionTime: 0,
93
+ memoryUsage: {
94
+ before: 0,
95
+ after: 0,
96
+ peak: 0,
97
+ },
98
+ });
99
+ worker.terminate();
100
+ });
101
+ worker.on('exit', (code) => {
102
+ clearTimeout(hardTimeout);
103
+ if (code !== 0) {
104
+ resolve({
105
+ values: [],
106
+ errors: [`Worker stopped with exit code ${code}`],
107
+ completed: false,
108
+ timeline: [],
109
+ executionTime: 0,
110
+ memoryUsage: {
111
+ before: 0,
112
+ after: 0,
113
+ peak: 0,
114
+ },
115
+ });
116
+ }
117
+ });
118
+ });
119
+ }
120
+ // Format result for display
121
+ function formatResult(result, captureTimeline, captureMemory) {
122
+ const parts = [];
123
+ const hasErrors = result.errors.length > 0;
124
+ // Execution summary
125
+ parts.push('## Stream Execution Result\n');
126
+ // Status now correctly shows error state
127
+ if (hasErrors && !result.completed) {
128
+ parts.push('**Status:** ❌ Error');
129
+ }
130
+ else if (hasErrors && result.completed) {
131
+ parts.push('**Status:** ⚠️ Completed with errors');
132
+ }
133
+ else if (result.completed) {
134
+ parts.push('**Status:** ✅ Completed');
135
+ }
136
+ else {
137
+ parts.push('**Status:** ⚠️ Not completed');
138
+ }
139
+ parts.push(`**Execution Time:** ${result.executionTime}ms`);
140
+ parts.push(`**Values Emitted:** ${result.values.length}`);
141
+ if (hasErrors) {
142
+ parts.push(`**Errors:** ${result.errors.length}`);
143
+ }
144
+ parts.push('');
145
+ // Emitted values
146
+ if (result.values.length > 0) {
147
+ parts.push('### Emitted Values');
148
+ parts.push('```json');
149
+ parts.push(JSON.stringify(result.values, null, 2));
150
+ parts.push('```');
151
+ parts.push('');
152
+ }
153
+ // Errors
154
+ if (hasErrors) {
155
+ parts.push('### Errors');
156
+ result.errors.forEach((error, i) => {
157
+ parts.push(`${i + 1}. ${error}`);
158
+ });
159
+ parts.push('');
160
+ }
161
+ // Timeline
162
+ if (captureTimeline && result.timeline.length > 0) {
163
+ parts.push('### Emission Timeline');
164
+ parts.push('```');
165
+ result.timeline.forEach(event => {
166
+ const marker = event.type === 'next' ? '→' : event.type === 'error' ? '✗' : '|';
167
+ const value = event.value !== undefined ? ` ${JSON.stringify(event.value)}` : '';
168
+ parts.push(`${event.time.toString().padStart(5)}ms ${marker}${value}`);
169
+ });
170
+ parts.push('```');
171
+ parts.push('');
172
+ }
173
+ // Memory usage
174
+ if (captureMemory && result.memoryUsage) {
175
+ parts.push('### Memory Usage');
176
+ const beforeMB = (result.memoryUsage.before / 1024 / 1024).toFixed(2);
177
+ const afterMB = (result.memoryUsage.after / 1024 / 1024).toFixed(2);
178
+ const deltaMB = ((result.memoryUsage.after - result.memoryUsage.before) / 1024 / 1024).toFixed(2);
179
+ parts.push(`- Before: ${beforeMB} MB`);
180
+ parts.push(`- After: ${afterMB} MB`);
181
+ parts.push(`- Delta: ${deltaMB} MB`);
182
+ }
183
+ return parts.join('\n');
184
+ }
185
+ // Tool implementation
186
+ export const executeStreamTool = {
187
+ definition: {
188
+ name: 'execute_stream',
189
+ description: 'Execute RxJS code in an isolated environment and capture the stream emissions, timeline, and performance metrics. Code runs in a separate worker thread for security.',
190
+ inputSchema: inputSchema,
191
+ annotations: {
192
+ readOnlyHint: true,
193
+ idempotentHint: true,
194
+ },
195
+ },
196
+ handler: async (args) => {
197
+ const input = inputSchema.parse(args);
198
+ try {
199
+ const result = await executeRxJSCodeInWorker(input.code, input.takeCount, input.timeout);
200
+ const formatted = formatResult(result, input.captureTimeline, input.captureMemory);
201
+ return {
202
+ content: [{
203
+ type: 'text',
204
+ text: formatted,
205
+ }],
206
+ };
207
+ }
208
+ catch (error) {
209
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
210
+ return {
211
+ content: [{
212
+ type: 'text',
213
+ text: `## Execution Error\n\n${errorMessage}\n\n### Troubleshooting\n- Check syntax errors in the code\n- Ensure the code returns an Observable\n- Verify operator usage and imports`,
214
+ }],
215
+ };
216
+ }
217
+ },
218
+ };
219
+ //# sourceMappingURL=execute-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-stream.js","sourceRoot":"","sources":["../../src/tools/execute-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,iCAAiC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,uFAAuF;AACvF,SAAS,aAAa;IACpB,0EAA0E;IAC1E,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,sDAAsD;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;IAC9E,CAAC;IACD,oBAAoB;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;AAC1D,CAAC;AAED,eAAe;AACf,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACzG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAChF,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACtG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CACjG,CAAC,CAAC;AAoBH;;;GAGG;AACH,KAAK,UAAU,uBAAuB,CACpC,IAAY,EACZ,SAAiB,EACjB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YACpC,UAAU,EAAE;gBACV,IAAI;gBACJ,SAAS;gBACT,SAAS;aACV;SACF,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC3B,OAAO,CAAC;oBACN,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,CAAC,yCAAyC,SAAS,YAAY,CAAC;oBACxE,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,SAAS;oBACxB,WAAW,EAAE;wBACX,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,CAAC;qBACR;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,8CAA8C;QAEpE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAoE,EAAE,EAAE;YAC5F,YAAY,CAAC,WAAW,CAAC,CAAC;YAE1B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC;oBACN,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;oBAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;oBAC7B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ;oBAC/D,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;oBACjC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;oBAC3C,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;iBACxC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC;oBACN,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,sBAAsB,CAAC;oBACjD,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,CAAC;oBAChB,WAAW,EAAE;wBACX,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,CAAC;qBACR;iBACF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC;gBACN,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAC;gBACnD,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,CAAC;gBAChB,WAAW,EAAE;oBACX,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;iBACR;aACF,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC;oBACN,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,CAAC,iCAAiC,IAAI,EAAE,CAAC;oBACjD,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,CAAC;oBAChB,WAAW,EAAE;wBACX,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,CAAC;qBACR;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4BAA4B;AAC5B,SAAS,YAAY,CAAC,MAA6B,EAAE,eAAwB,EAAE,aAAsB;IACnG,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3C,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE3C,yCAAyC;IACzC,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iBAAiB;IACjB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,SAAS;IACT,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,WAAW;IACX,IAAI,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAChF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,eAAe;IACf,IAAI,aAAa,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE;QACV,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uKAAuK;QACpL,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;SACrB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAyB,EAAE;QACtD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,OAAO,CACd,CAAC;YAEF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAEnF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS;qBAChB,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,YAAY,0IAA0I;qBACtL,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolImplementation } from '../types.js';
2
+ export declare const generateMarbleTool: ToolImplementation;
3
+ //# sourceMappingURL=marble-diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marble-diagram.d.ts","sourceRoot":"","sources":["../../src/tools/marble-diagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAqC,MAAM,aAAa,CAAC;AA2LpF,eAAO,MAAM,kBAAkB,EAAE,kBAsDhC,CAAC"}