@lydt/geogebra-studio 0.0.0-stage → 0.4.0-rc.2

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 (189) hide show
  1. package/.agents/plugins/marketplace.json +21 -0
  2. package/.codex-plugin/plugin.json +21 -0
  3. package/.mcp.json +18 -0
  4. package/LICENSE +339 -0
  5. package/LICENSE-MIT +21 -0
  6. package/README.md +108 -2
  7. package/README.zh-CN.md +89 -0
  8. package/THIRD_PARTY_NOTICES.md +35 -0
  9. package/dist/cli.d.ts +27 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +234 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/export/files.d.ts +4 -0
  14. package/dist/export/files.d.ts.map +1 -0
  15. package/dist/export/files.js +44 -0
  16. package/dist/export/files.js.map +1 -0
  17. package/dist/export/gikz.d.ts +11 -0
  18. package/dist/export/gikz.d.ts.map +1 -0
  19. package/dist/export/gikz.js +28 -0
  20. package/dist/export/gikz.js.map +1 -0
  21. package/dist/export/html.d.ts +14 -0
  22. package/dist/export/html.d.ts.map +1 -0
  23. package/dist/export/html.js +97 -0
  24. package/dist/export/html.js.map +1 -0
  25. package/dist/export/semantic.d.ts +43 -0
  26. package/dist/export/semantic.d.ts.map +1 -0
  27. package/dist/export/semantic.js +212 -0
  28. package/dist/export/semantic.js.map +1 -0
  29. package/dist/export/viewer-themes.d.ts +76 -0
  30. package/dist/export/viewer-themes.d.ts.map +1 -0
  31. package/dist/export/viewer-themes.js +169 -0
  32. package/dist/export/viewer-themes.js.map +1 -0
  33. package/dist/export/workspace.d.ts +4 -0
  34. package/dist/export/workspace.d.ts.map +1 -0
  35. package/dist/export/workspace.js +25 -0
  36. package/dist/export/workspace.js.map +1 -0
  37. package/dist/gikz-browser.js +770 -0
  38. package/dist/index.d.ts +5 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +84 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/server.d.ts +35 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +187 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/studio/artifact.d.ts +37 -0
  47. package/dist/studio/artifact.d.ts.map +1 -0
  48. package/dist/studio/artifact.js +61 -0
  49. package/dist/studio/artifact.js.map +1 -0
  50. package/dist/studio/browser.d.ts +7 -0
  51. package/dist/studio/browser.d.ts.map +1 -0
  52. package/dist/studio/browser.js +67 -0
  53. package/dist/studio/browser.js.map +1 -0
  54. package/dist/studio/install.d.ts +4 -0
  55. package/dist/studio/install.d.ts.map +1 -0
  56. package/dist/studio/install.js +60 -0
  57. package/dist/studio/install.js.map +1 -0
  58. package/dist/tools/apps-api-tools.d.ts +4 -0
  59. package/dist/tools/apps-api-tools.d.ts.map +1 -0
  60. package/dist/tools/apps-api-tools.js +96 -0
  61. package/dist/tools/apps-api-tools.js.map +1 -0
  62. package/dist/tools/educational-templates.d.ts +33 -0
  63. package/dist/tools/educational-templates.d.ts.map +1 -0
  64. package/dist/tools/educational-templates.js +261 -0
  65. package/dist/tools/educational-templates.js.map +1 -0
  66. package/dist/tools/export-tools.d.ts +3 -0
  67. package/dist/tools/export-tools.d.ts.map +1 -0
  68. package/dist/tools/export-tools.js +118 -0
  69. package/dist/tools/export-tools.js.map +1 -0
  70. package/dist/tools/geogebra-tools.d.ts +15 -0
  71. package/dist/tools/geogebra-tools.d.ts.map +1 -0
  72. package/dist/tools/geogebra-tools.js +3442 -0
  73. package/dist/tools/geogebra-tools.js.map +1 -0
  74. package/dist/tools/index.d.ts +43 -0
  75. package/dist/tools/index.d.ts.map +1 -0
  76. package/dist/tools/index.js +183 -0
  77. package/dist/tools/index.js.map +1 -0
  78. package/dist/tools/performance-tools.d.ts +7 -0
  79. package/dist/tools/performance-tools.d.ts.map +1 -0
  80. package/dist/tools/performance-tools.js +312 -0
  81. package/dist/tools/performance-tools.js.map +1 -0
  82. package/dist/tools/templates/algebra-templates.d.ts +7 -0
  83. package/dist/tools/templates/algebra-templates.d.ts.map +1 -0
  84. package/dist/tools/templates/algebra-templates.js +568 -0
  85. package/dist/tools/templates/algebra-templates.js.map +1 -0
  86. package/dist/tools/templates/geometry-templates.d.ts +7 -0
  87. package/dist/tools/templates/geometry-templates.d.ts.map +1 -0
  88. package/dist/tools/templates/geometry-templates.js +492 -0
  89. package/dist/tools/templates/geometry-templates.js.map +1 -0
  90. package/dist/types/geogebra.d.ts +103 -0
  91. package/dist/types/geogebra.d.ts.map +1 -0
  92. package/dist/types/geogebra.js +34 -0
  93. package/dist/types/geogebra.js.map +1 -0
  94. package/dist/types/mcp.d.ts +125 -0
  95. package/dist/types/mcp.d.ts.map +1 -0
  96. package/dist/types/mcp.js +19 -0
  97. package/dist/types/mcp.js.map +1 -0
  98. package/dist/utils/app-info.d.ts +12 -0
  99. package/dist/utils/app-info.d.ts.map +1 -0
  100. package/dist/utils/app-info.js +30 -0
  101. package/dist/utils/app-info.js.map +1 -0
  102. package/dist/utils/errors.d.ts +37 -0
  103. package/dist/utils/errors.d.ts.map +1 -0
  104. package/dist/utils/errors.js +72 -0
  105. package/dist/utils/errors.js.map +1 -0
  106. package/dist/utils/gemini-compatibility.d.ts +39 -0
  107. package/dist/utils/gemini-compatibility.d.ts.map +1 -0
  108. package/dist/utils/gemini-compatibility.js +154 -0
  109. package/dist/utils/gemini-compatibility.js.map +1 -0
  110. package/dist/utils/geogebra-instance.d.ts +252 -0
  111. package/dist/utils/geogebra-instance.d.ts.map +1 -0
  112. package/dist/utils/geogebra-instance.js +1560 -0
  113. package/dist/utils/geogebra-instance.js.map +1 -0
  114. package/dist/utils/geogebra-mock.d.ts +172 -0
  115. package/dist/utils/geogebra-mock.d.ts.map +1 -0
  116. package/dist/utils/geogebra-mock.js +732 -0
  117. package/dist/utils/geogebra-mock.js.map +1 -0
  118. package/dist/utils/logger.d.ts +4 -0
  119. package/dist/utils/logger.d.ts.map +1 -0
  120. package/dist/utils/logger.js +46 -0
  121. package/dist/utils/logger.js.map +1 -0
  122. package/dist/utils/performance/index.d.ts +76 -0
  123. package/dist/utils/performance/index.d.ts.map +1 -0
  124. package/dist/utils/performance/index.js +163 -0
  125. package/dist/utils/performance/index.js.map +1 -0
  126. package/dist/utils/performance/instance-pool.d.ts +78 -0
  127. package/dist/utils/performance/instance-pool.d.ts.map +1 -0
  128. package/dist/utils/performance/instance-pool.js +268 -0
  129. package/dist/utils/performance/instance-pool.js.map +1 -0
  130. package/dist/utils/validation.d.ts +92 -0
  131. package/dist/utils/validation.d.ts.map +1 -0
  132. package/dist/utils/validation.js +557 -0
  133. package/dist/utils/validation.js.map +1 -0
  134. package/dist/widget.html +110 -0
  135. package/docs/APPS-API-BRIDGE.md +28 -0
  136. package/docs/MODERNIZATION.md +15 -0
  137. package/docs/TANGENT-REGRESSION.md +34 -0
  138. package/docs/VALIDATION.md +26 -0
  139. package/docs/VISUAL-STANDARD.md +26 -0
  140. package/docs/images/native-construction.png +0 -0
  141. package/examples/tangent-construction.json +26 -0
  142. package/gikz/LICENSE +339 -0
  143. package/gikz/PROVENANCE.md +8 -0
  144. package/gikz/browser.cjs +2 -0
  145. package/gikz/cli.cjs +195 -0
  146. package/gikz/core.cjs +806 -0
  147. package/mcp.json +20 -0
  148. package/package.json +107 -4
  149. package/plugin.json +35 -0
  150. package/runtime/package.json +4 -0
  151. package/scripts/build-plugin.cjs +15 -0
  152. package/scripts/build-widget.cjs +7 -0
  153. package/skills/geogebra-construct/SKILL.md +40 -0
  154. package/skills/geogebra-setup/SKILL.md +37 -0
  155. package/skills/geometry-export/SKILL.md +31 -0
  156. package/src/cli.ts +212 -0
  157. package/src/export/files.ts +26 -0
  158. package/src/export/gikz.ts +22 -0
  159. package/src/export/html.ts +108 -0
  160. package/src/export/semantic.ts +180 -0
  161. package/src/export/viewer-themes.ts +165 -0
  162. package/src/export/workspace.ts +15 -0
  163. package/src/index.ts +71 -0
  164. package/src/server.ts +168 -0
  165. package/src/studio/artifact.ts +50 -0
  166. package/src/studio/browser.ts +38 -0
  167. package/src/studio/install.ts +43 -0
  168. package/src/tools/apps-api-tools.ts +96 -0
  169. package/src/tools/educational-templates.ts +299 -0
  170. package/src/tools/export-tools.ts +110 -0
  171. package/src/tools/geogebra-tools.ts +3836 -0
  172. package/src/tools/index.ts +192 -0
  173. package/src/tools/performance-tools.ts +322 -0
  174. package/src/tools/templates/algebra-templates.ts +619 -0
  175. package/src/tools/templates/geometry-templates.ts +550 -0
  176. package/src/types/geogebra.ts +140 -0
  177. package/src/types/global.d.ts +31 -0
  178. package/src/types/mcp.ts +141 -0
  179. package/src/utils/app-info.ts +35 -0
  180. package/src/utils/errors.ts +97 -0
  181. package/src/utils/gemini-compatibility.ts +193 -0
  182. package/src/utils/geogebra-instance.ts +1712 -0
  183. package/src/utils/geogebra-mock.ts +867 -0
  184. package/src/utils/logger.ts +60 -0
  185. package/src/utils/performance/index.ts +211 -0
  186. package/src/utils/performance/instance-pool.ts +323 -0
  187. package/src/utils/validation.ts +647 -0
  188. package/tsconfig.json +35 -0
  189. package/widget/main.ts +12 -0
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ /**
3
+ * Optimized GeoGebra Instance Pool Management
4
+ * GEB-9: Performance Optimization: Response Time and Resource Management
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.optimizedInstancePool = exports.OptimizedInstancePool = void 0;
11
+ const geogebra_instance_1 = require("../geogebra-instance");
12
+ const logger_1 = __importDefault(require("../logger"));
13
+ const index_1 = require("./index");
14
+ // Check if we're in MCP mode (stdio communication)
15
+ // When piping input, process.stdin.isTTY is undefined, not false
16
+ const isMcpMode = !process.stdin.isTTY;
17
+ class OptimizedInstancePool {
18
+ static poolInstance;
19
+ instances = new Map();
20
+ config;
21
+ cleanupInterval;
22
+ defaultConfig = {
23
+ maxInstances: 3, // Maximum concurrent instances
24
+ instanceTimeout: 300000, // 5 minutes
25
+ maxIdleTime: 600000, // 10 minutes
26
+ headless: true,
27
+ browserArgs: [
28
+ '--no-sandbox',
29
+ '--disable-setuid-sandbox',
30
+ '--disable-dev-shm-usage',
31
+ '--disable-accelerated-2d-canvas',
32
+ '--no-first-run',
33
+ '--no-zygote',
34
+ '--disable-gpu',
35
+ '--memory-pressure-off', // Reduce memory pressure
36
+ '--max_old_space_size=512' // Limit memory usage
37
+ ]
38
+ };
39
+ constructor(config) {
40
+ this.config = { ...this.defaultConfig, ...config };
41
+ this.startCleanupTimer();
42
+ // Transport lifecycle owns graceful cleanup.
43
+ if (!isMcpMode) {
44
+ logger_1.default.info('Optimized Instance Pool initialized', { config: this.config });
45
+ }
46
+ }
47
+ static getInstance(config) {
48
+ if (!OptimizedInstancePool.poolInstance) {
49
+ OptimizedInstancePool.poolInstance = new OptimizedInstancePool(config);
50
+ }
51
+ return OptimizedInstancePool.poolInstance;
52
+ }
53
+ /**
54
+ * Get an available instance from the pool
55
+ */
56
+ async getInstance() {
57
+ return index_1.performanceMonitor.measureOperation('instance_pool_get', async () => {
58
+ // Try to find an available instance
59
+ let availableInstance = this.findAvailableInstance();
60
+ if (!availableInstance) {
61
+ // Create new instance if under limit
62
+ if (this.instances.size < this.config.maxInstances) {
63
+ availableInstance = await this.createNewInstance();
64
+ }
65
+ else {
66
+ // Wait for an instance to become available or force cleanup
67
+ await this.forceCleanupOldest();
68
+ availableInstance = await this.createNewInstance();
69
+ }
70
+ }
71
+ // Mark as active and update usage stats
72
+ const pooled = this.instances.get(availableInstance.id);
73
+ pooled.isActive = true;
74
+ pooled.lastUsed = new Date();
75
+ pooled.usageCount++;
76
+ logger_1.default.debug(`Instance ${availableInstance.id} acquired from pool`, {
77
+ totalInstances: this.instances.size,
78
+ activeInstances: this.getActiveCount(),
79
+ usageCount: pooled.usageCount
80
+ });
81
+ return availableInstance;
82
+ });
83
+ }
84
+ /**
85
+ * Release an instance back to the pool
86
+ */
87
+ async releaseInstance(instance) {
88
+ return index_1.performanceMonitor.measureOperation('instance_pool_release', async () => {
89
+ const pooled = this.instances.get(instance.id);
90
+ if (pooled) {
91
+ pooled.isActive = false;
92
+ pooled.lastUsed = new Date();
93
+ // Clear construction to reset state for next use
94
+ try {
95
+ await instance.newConstruction();
96
+ }
97
+ catch (error) {
98
+ logger_1.default.warn(`Failed to clear construction on release: ${error}`);
99
+ }
100
+ logger_1.default.debug(`Instance ${instance.id} released to pool`, {
101
+ totalInstances: this.instances.size,
102
+ activeInstances: this.getActiveCount()
103
+ });
104
+ }
105
+ });
106
+ }
107
+ /**
108
+ * Find an available (non-active) instance
109
+ */
110
+ findAvailableInstance() {
111
+ for (const [, pooled] of this.instances) {
112
+ if (!pooled.isActive) {
113
+ return pooled.instance;
114
+ }
115
+ }
116
+ return null;
117
+ }
118
+ /**
119
+ * Create a new instance and add to pool
120
+ */
121
+ async createNewInstance() {
122
+ return index_1.performanceMonitor.measureOperation('instance_pool_create', async () => {
123
+ const instance = new geogebra_instance_1.GeoGebraInstance({
124
+ appName: 'classic',
125
+ width: 800,
126
+ height: 600,
127
+ showMenuBar: false,
128
+ showToolBar: false,
129
+ showAlgebraInput: false
130
+ });
131
+ await instance.initialize(this.config.headless, this.config.browserArgs);
132
+ const pooled = {
133
+ instance,
134
+ isActive: false,
135
+ lastUsed: new Date(),
136
+ createdAt: new Date(),
137
+ usageCount: 0
138
+ };
139
+ this.instances.set(instance.id, pooled);
140
+ logger_1.default.info(`New instance ${instance.id} created and added to pool`, {
141
+ totalInstances: this.instances.size
142
+ });
143
+ return instance;
144
+ });
145
+ }
146
+ /**
147
+ * Force cleanup of the oldest instance to make room
148
+ */
149
+ async forceCleanupOldest() {
150
+ let oldestId = null;
151
+ let oldestTime = Date.now();
152
+ // Find oldest inactive instance
153
+ for (const [id, pooled] of this.instances) {
154
+ if (!pooled.isActive && pooled.lastUsed.getTime() < oldestTime) {
155
+ oldestTime = pooled.lastUsed.getTime();
156
+ oldestId = id;
157
+ }
158
+ }
159
+ // If no inactive instance, find oldest active one
160
+ if (!oldestId) {
161
+ for (const [id, pooled] of this.instances) {
162
+ if (pooled.lastUsed.getTime() < oldestTime) {
163
+ oldestTime = pooled.lastUsed.getTime();
164
+ oldestId = id;
165
+ }
166
+ }
167
+ }
168
+ if (oldestId) {
169
+ await this.removeInstance(oldestId);
170
+ logger_1.default.info(`Forced cleanup of oldest instance ${oldestId} to make room`);
171
+ }
172
+ }
173
+ /**
174
+ * Remove and cleanup an instance
175
+ */
176
+ async removeInstance(instanceId) {
177
+ const pooled = this.instances.get(instanceId);
178
+ if (pooled) {
179
+ try {
180
+ await pooled.instance.cleanup();
181
+ }
182
+ catch (error) {
183
+ logger_1.default.error(`Error cleaning up instance ${instanceId}:`, error);
184
+ }
185
+ this.instances.delete(instanceId);
186
+ }
187
+ }
188
+ /**
189
+ * Start automatic cleanup timer
190
+ */
191
+ startCleanupTimer() {
192
+ this.cleanupInterval = setInterval(() => {
193
+ this.performCleanup();
194
+ }, 60000); // Run cleanup every minute
195
+ this.cleanupInterval.unref();
196
+ }
197
+ /**
198
+ * Perform periodic cleanup of idle instances
199
+ */
200
+ async performCleanup() {
201
+ const now = Date.now();
202
+ const instancesToRemove = [];
203
+ for (const [id, pooled] of this.instances) {
204
+ const idleTime = now - pooled.lastUsed.getTime();
205
+ const isExpired = idleTime > this.config.maxIdleTime;
206
+ const isOld = (now - pooled.createdAt.getTime()) > this.config.instanceTimeout;
207
+ if (!pooled.isActive && (isExpired || isOld)) {
208
+ instancesToRemove.push(id);
209
+ }
210
+ }
211
+ for (const id of instancesToRemove) {
212
+ await this.removeInstance(id);
213
+ logger_1.default.debug(`Cleaned up idle instance ${id}`);
214
+ }
215
+ if (instancesToRemove.length > 0) {
216
+ logger_1.default.info(`Cleanup completed: removed ${instancesToRemove.length} idle instances`);
217
+ }
218
+ }
219
+ /**
220
+ * Get count of active instances
221
+ */
222
+ getActiveCount() {
223
+ return Array.from(this.instances.values()).filter(p => p.isActive).length;
224
+ }
225
+ /**
226
+ * Get pool statistics
227
+ */
228
+ getStats() {
229
+ const instances = Array.from(this.instances.values());
230
+ const now = Date.now();
231
+ return {
232
+ totalInstances: instances.length,
233
+ activeInstances: this.getActiveCount(),
234
+ averageUsage: instances.reduce((sum, p) => sum + p.usageCount, 0) / instances.length || 0,
235
+ oldestInstanceAge: instances.length > 0
236
+ ? Math.max(...instances.map(p => now - p.createdAt.getTime())) / 1000
237
+ : 0,
238
+ memoryEstimate: instances.length * 75 // Approximate 75MB per instance
239
+ };
240
+ }
241
+ /**
242
+ * Cleanup all instances and stop timers
243
+ */
244
+ async cleanup() {
245
+ if (this.cleanupInterval) {
246
+ clearInterval(this.cleanupInterval);
247
+ this.cleanupInterval = undefined;
248
+ }
249
+ const cleanupPromises = Array.from(this.instances.keys()).map(id => this.removeInstance(id));
250
+ await Promise.all(cleanupPromises);
251
+ logger_1.default.info('Instance pool cleaned up completely');
252
+ }
253
+ /**
254
+ * Warm up the pool by pre-creating instances
255
+ */
256
+ async warmUp(count = 1) {
257
+ const warmUpPromises = [];
258
+ for (let i = 0; i < count && this.instances.size < this.config.maxInstances; i++) {
259
+ warmUpPromises.push(this.createNewInstance().then(instance => this.releaseInstance(instance)));
260
+ }
261
+ await Promise.all(warmUpPromises);
262
+ logger_1.default.info(`Pool warmed up with ${count} pre-created instances`);
263
+ }
264
+ }
265
+ exports.OptimizedInstancePool = OptimizedInstancePool;
266
+ // Global optimized pool instance
267
+ exports.optimizedInstancePool = OptimizedInstancePool.getInstance();
268
+ //# sourceMappingURL=instance-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-pool.js","sourceRoot":"","sources":["../../../src/utils/performance/instance-pool.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,4DAAwD;AAExD,uDAA+B;AAC/B,mCAA6C;AAE7C,mDAAmD;AACnD,iEAAiE;AACjE,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AAUvC,MAAa,qBAAqB;IACxB,MAAM,CAAC,YAAY,CAAwB;IAC3C,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IACnD,MAAM,CAAqB;IAC3B,eAAe,CAA8B;IAE7C,aAAa,GAAuB;QAC1C,YAAY,EAAE,CAAC,EAAS,+BAA+B;QACvD,eAAe,EAAE,MAAM,EAAE,YAAY;QACrC,WAAW,EAAE,MAAM,EAAK,aAAa;QACrC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;YACX,cAAc;YACd,0BAA0B;YAC1B,yBAAyB;YACzB,iCAAiC;YACjC,gBAAgB;YAChB,aAAa;YACb,eAAe;YACf,uBAAuB,EAAG,yBAAyB;YACnD,0BAA0B,CAAC,qBAAqB;SACjD;KACF,CAAC;IAEF,YAAoB,MAAoC;QACtD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;QACnD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,6CAA6C;QAE7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,gBAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAoC;QACrD,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;YACxC,qBAAqB,CAAC,YAAY,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,qBAAqB,CAAC,YAAY,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,0BAAkB,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACzE,oCAAoC;YACpC,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAErD,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,qCAAqC;gBACrC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBACnD,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACN,4DAA4D;oBAC5D,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAChC,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;YAED,wCAAwC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAE,CAAC;YACzD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,UAAU,EAAE,CAAC;YAEpB,gBAAM,CAAC,KAAK,CAAC,YAAY,iBAAiB,CAAC,EAAE,qBAAqB,EAAE;gBAClE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBACnC,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE;gBACtC,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YAEH,OAAO,iBAAiB,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAA0B;QAC9C,OAAO,0BAAkB,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBAE7B,iDAAiD;gBACjD,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;gBACnC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gBAAM,CAAC,IAAI,CAAC,4CAA4C,KAAK,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAED,gBAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,EAAE,mBAAmB,EAAE;oBACvD,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;oBACnC,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC,QAAQ,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,OAAO,0BAAkB,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,oCAAgB,CAAC;gBACpC,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,KAAK;gBAClB,WAAW,EAAE,KAAK;gBAClB,gBAAgB,EAAE,KAAK;aACxB,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAmB;gBAC7B,QAAQ;gBACR,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,IAAI,IAAI,EAAE;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,UAAU,EAAE,CAAC;aACd,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAExC,gBAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,EAAE,4BAA4B,EAAE;gBACnE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;aACpC,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,gCAAgC;QAChC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;gBAC/D,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACvC,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;oBAC3C,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACvC,QAAQ,GAAG,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACpC,gBAAM,CAAC,IAAI,CAAC,qCAAqC,QAAQ,eAAe,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAM,CAAC,KAAK,CAAC,8BAA8B,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,2BAA2B;QACtC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACrD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAE/E,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC9B,gBAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,gBAAM,CAAC,IAAI,CAAC,8BAA8B,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,QAAQ;QAON,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,OAAO;YACL,cAAc,EAAE,SAAS,CAAC,MAAM;YAChC,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE;YACtC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC;YACzF,iBAAiB,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI;gBACrE,CAAC,CAAC,CAAC;YACL,cAAc,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,gCAAgC;SACvE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CACjE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CACxB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEnC,gBAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,CAAC;QAC5B,MAAM,cAAc,GAAoB,EAAE,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACjF,cAAc,CAAC,IAAI,CACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CACvC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAC/B,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClC,gBAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,wBAAwB,CAAC,CAAC;IACpE,CAAC;CACF;AAzSD,sDAySC;AAED,iCAAiC;AACpB,QAAA,qBAAqB,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Validation utilities for GeoGebra MCP tools
3
+ */
4
+ export interface ValidationResult {
5
+ isValid: boolean;
6
+ error?: string;
7
+ }
8
+ /**
9
+ * Validate point name (GeoGebra naming conventions)
10
+ */
11
+ export declare function validatePointName(name: string): ValidationResult;
12
+ /**
13
+ * Validate object name (general GeoGebra naming conventions)
14
+ */
15
+ export declare function validateObjectName(name: string): ValidationResult;
16
+ /**
17
+ * Validate coordinates
18
+ */
19
+ export declare function validateCoordinates(x: number, y: number): ValidationResult;
20
+ /**
21
+ * Validate radius
22
+ */
23
+ export declare function validateRadius(radius: number): ValidationResult;
24
+ /**
25
+ * Validate polygon vertices
26
+ */
27
+ export declare function validatePolygonVertices(vertices: string[]): ValidationResult;
28
+ /**
29
+ * Validate linear equation format
30
+ */
31
+ export declare function validateLinearEquation(equation: string): ValidationResult;
32
+ /**
33
+ * Validate that required parameters are provided for a given method
34
+ */
35
+ export declare function validateRequiredParams(params: Record<string, unknown>, required: string[]): ValidationResult;
36
+ /**
37
+ * Validate function expression for standard functions f(x) = ...
38
+ */
39
+ export declare function validateFunctionExpression(expression: string): ValidationResult;
40
+ /**
41
+ * Validate parametric function expressions
42
+ */
43
+ export declare function validateParametricExpressions(xExpr: string, yExpr: string, parameter: string): ValidationResult;
44
+ /**
45
+ * Validate implicit function expression
46
+ */
47
+ export declare function validateImplicitExpression(expression: string): ValidationResult;
48
+ /**
49
+ * Validate domain range parameters
50
+ */
51
+ export declare function validateDomainRange(min: number, max: number, paramName?: string): ValidationResult;
52
+ /**
53
+ * Validate function styling parameters
54
+ */
55
+ export declare function validateFunctionStyling(color?: string, thickness?: number, style?: string): ValidationResult;
56
+ /**
57
+ * Validate algebraic expression for CAS operations
58
+ */
59
+ export declare function validateAlgebraicExpression(expression: string): ValidationResult;
60
+ /**
61
+ * Validate equation format for solving
62
+ */
63
+ export declare function validateEquation(equation: string): ValidationResult;
64
+ /**
65
+ * Validate variable name for CAS operations
66
+ */
67
+ export declare function validateVariableName(variable: string): ValidationResult;
68
+ /**
69
+ * Validate system of equations
70
+ */
71
+ export declare function validateSystemOfEquations(equations: string[]): ValidationResult;
72
+ /**
73
+ * Validate variables list for system solving
74
+ */
75
+ export declare function validateVariablesList(variables: string[]): ValidationResult;
76
+ /**
77
+ * Validates slider parameters for creation
78
+ */
79
+ export declare function validateSliderParameters(name: string, min: number, max: number, increment?: number, defaultValue?: number): ValidationResult;
80
+ /**
81
+ * Validates animation speed parameter
82
+ */
83
+ export declare function validateAnimationSpeed(speed: number): ValidationResult;
84
+ /**
85
+ * Validates animation direction parameter
86
+ */
87
+ export declare function validateAnimationDirection(direction?: string): ValidationResult;
88
+ /**
89
+ * Validates parameters for animation export
90
+ */
91
+ export declare function validateAnimationExportParameters(frameCount: number, frameDelay: number, totalDuration?: number): ValidationResult;
92
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgB1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAkB/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAgC5E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA6BzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAO5G;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA+B/E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAwB/G;AAuCD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAmC/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAoB,GAAG,gBAAgB,CA6B/G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAuC5G;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAiChF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAmCnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA0BvE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA0B/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAgC3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB,CAuBlB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUtE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAM/E;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAkBlB"}