@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 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/studio/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ToolDefinition } from '../types/mcp';
2
+ /** A schema-checked bridge to the public methods exposed by the loaded GeoGebra Apps API. */
3
+ export declare const appsApiTools: ToolDefinition[];
4
+ //# sourceMappingURL=apps-api-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps-api-tools.d.ts","sourceRoot":"","sources":["../../src/tools/apps-api-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,6FAA6F;AAC7F,eAAO,MAAM,YAAY,EAAE,cAAc,EAsFxC,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appsApiTools = void 0;
4
+ const gikz_1 = require("../export/gikz");
5
+ const geogebra_tools_1 = require("./geogebra-tools");
6
+ const result = (value) => ({
7
+ content: [{ type: 'text', text: JSON.stringify(value) }], structuredContent: value,
8
+ });
9
+ /** A schema-checked bridge to the public methods exposed by the loaded GeoGebra Apps API. */
10
+ exports.appsApiTools = [
11
+ {
12
+ tool: {
13
+ name: 'geogebra_api_list_methods',
14
+ description: 'List callable methods exposed by the active GeoGebra Apps API. Availability depends on the loaded GeoGebra app/version.',
15
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
16
+ inputSchema: { type: 'object', properties: {}, additionalProperties: false },
17
+ },
18
+ handler: async () => {
19
+ try {
20
+ const methods = await (await geogebra_tools_1.instancePool.getDefaultInstance()).listAppsApiMethods();
21
+ return result({ success: true, methods, count: methods.length });
22
+ }
23
+ catch (error) {
24
+ return { ...result({ success: false, error: error instanceof Error ? error.message : String(error) }), isError: true };
25
+ }
26
+ },
27
+ },
28
+ {
29
+ tool: {
30
+ name: 'geogebra_api_call',
31
+ description: 'Call a public GeoGebra Apps API method by name with JSON arguments. Use geogebra_api_list_methods first. For one-shot callback exports set waitForCallbackIndex (0 for getBase64/exportSVG/getScreenshotBase64; 1 for exportPDF). For persistent listener functions put {"$ggbCallbackId":"my-id"} at that argument, then poll geogebra_api_get_callback_events; reuse the same marker to unregister. exportPGF always returns Gikz-cleaned standalone TikZ through this bridge. Destructive methods require allowDestructive=true.',
32
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ method: { type: 'string', minLength: 1, maxLength: 100 },
37
+ args: { type: 'array', maxItems: 20, items: {} },
38
+ waitForCallbackIndex: { type: 'integer', minimum: 0, maximum: 20 },
39
+ callbackTimeoutMs: { type: 'integer', minimum: 100, maximum: 60000 },
40
+ allowDestructive: { type: 'boolean', description: 'Required for methods that clear, replace, open, or remove a construction/applet.' },
41
+ },
42
+ required: ['method'], additionalProperties: false,
43
+ },
44
+ },
45
+ handler: async (params) => {
46
+ try {
47
+ const method = params['method'];
48
+ if (method === 'exportPGF') {
49
+ const source = await (await geogebra_tools_1.instancePool.getDefaultInstance()).exportNativeTikZ();
50
+ const value = await (0, gikz_1.cleanWithGikz)(source, { standalone: true });
51
+ return result({ success: true, method, value, backend: 'native-pgf+gikz', cleaned: true, semantics: 'visual-snapshot' });
52
+ }
53
+ const dangerous = new Set(['newConstruction', 'reset', 'openFile', 'setXML', 'evalXML', 'setBase64', 'remove']);
54
+ if (dangerous.has(method) && params['allowDestructive'] !== true) {
55
+ throw new Error(`${method} can replace or clear construction data; set allowDestructive=true to proceed`);
56
+ }
57
+ const args = params['args'] ?? [];
58
+ const callbacks = [];
59
+ for (let i = 0; i < args.length; i++) {
60
+ const arg = args[i];
61
+ if (arg && typeof arg === 'object' && !Array.isArray(arg) && typeof arg['$ggbCallbackId'] === 'string') {
62
+ callbacks.push({ argumentIndex: i, id: arg['$ggbCallbackId'] });
63
+ args[i] = null;
64
+ }
65
+ }
66
+ const value = await (await geogebra_tools_1.instancePool.getDefaultInstance()).callAppsApi(method, args, {
67
+ ...(typeof params['waitForCallbackIndex'] === 'number' ? { waitForCallbackIndex: params['waitForCallbackIndex'] } : {}),
68
+ ...(typeof params['callbackTimeoutMs'] === 'number' ? { callbackTimeoutMs: params['callbackTimeoutMs'] } : {}),
69
+ ...(callbacks.length ? { callbacks } : {}),
70
+ });
71
+ return result({ success: true, method, value: value === undefined ? null : value });
72
+ }
73
+ catch (error) {
74
+ return { ...result({ success: false, error: error instanceof Error ? error.message : String(error) }), isError: true };
75
+ }
76
+ },
77
+ },
78
+ {
79
+ tool: {
80
+ name: 'geogebra_api_get_callback_events',
81
+ description: 'Read events captured from persistent GeoGebra Apps API listeners registered through geogebra_api_call. Set clear=false to read without clearing the queue.',
82
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
83
+ inputSchema: { type: 'object', properties: { callbackId: { type: 'string', minLength: 1, maxLength: 80 }, clear: { type: 'boolean', default: true } }, required: ['callbackId'], additionalProperties: false },
84
+ },
85
+ handler: async (params) => {
86
+ try {
87
+ const events = await (await geogebra_tools_1.instancePool.getDefaultInstance()).readAppsApiCallbackEvents(params['callbackId'], params['clear'] !== false);
88
+ return result({ success: true, callbackId: params['callbackId'], events });
89
+ }
90
+ catch (error) {
91
+ return { ...result({ success: false, error: error instanceof Error ? error.message : String(error) }), isError: true };
92
+ }
93
+ },
94
+ },
95
+ ];
96
+ //# sourceMappingURL=apps-api-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps-api-tools.js","sourceRoot":"","sources":["../../src/tools/apps-api-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ToolDefinition } from '../types/mcp';
2
+ export type TemplateCategory = 'geometry' | 'algebra' | 'calculus' | 'statistics' | 'proofs';
3
+ export interface EducationalTemplate {
4
+ id: string;
5
+ name: string;
6
+ category: TemplateCategory;
7
+ description: string;
8
+ gradeLevel: string;
9
+ objectives: string[];
10
+ prerequisites: string[];
11
+ estimatedTime: number;
12
+ setup: () => Promise<any>;
13
+ }
14
+ /**
15
+ * Educational template registry
16
+ */
17
+ export declare class EducationalTemplateRegistry {
18
+ private templates;
19
+ register(template: EducationalTemplate): void;
20
+ getTemplate(id: string): EducationalTemplate | undefined;
21
+ getTemplatesByCategory(category: TemplateCategory): EducationalTemplate[];
22
+ getAllTemplates(): EducationalTemplate[];
23
+ }
24
+ export declare const templateRegistry: EducationalTemplateRegistry;
25
+ /**
26
+ * Core educational template tools
27
+ */
28
+ export declare const educationalTemplateTools: ToolDefinition[];
29
+ /**
30
+ * Initialize and register all educational templates
31
+ */
32
+ export declare function initializeEducationalTemplates(): void;
33
+ //# sourceMappingURL=educational-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"educational-templates.d.ts","sourceRoot":"","sources":["../../src/tools/educational-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoB9C,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;AAG7F,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,SAAS,CAA+C;IAEhE,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIxD,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,EAAE;IAIzE,eAAe,IAAI,mBAAmB,EAAE;CAGzC;AAED,eAAO,MAAM,gBAAgB,6BAAoC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,cAAc,EA8MpD,CAAC;AAEF;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAkBrD"}
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.educationalTemplateTools = exports.templateRegistry = exports.EducationalTemplateRegistry = void 0;
7
+ exports.initializeEducationalTemplates = initializeEducationalTemplates;
8
+ const index_1 = require("./index");
9
+ const logger_1 = __importDefault(require("../utils/logger"));
10
+ /**
11
+ * Educational Templates for GeoGebra MCP Tool - GEB-8 Implementation
12
+ *
13
+ * Pre-built mathematical scenarios for common educational use cases:
14
+ * - Geometry fundamentals
15
+ * - Algebra visualizations
16
+ * - Calculus demonstrations
17
+ * - Statistics and probability
18
+ * - Mathematical proofs
19
+ */
20
+ // Check if we're in MCP mode (stdio communication)
21
+ // When piping input, process.stdin.isTTY is undefined, not false
22
+ const isMcpMode = !process.stdin.isTTY;
23
+ /**
24
+ * Educational template registry
25
+ */
26
+ class EducationalTemplateRegistry {
27
+ templates = new Map();
28
+ register(template) {
29
+ this.templates.set(template.id, template);
30
+ if (!isMcpMode) {
31
+ logger_1.default.info(`Registered educational template: ${template.id}`);
32
+ }
33
+ }
34
+ getTemplate(id) {
35
+ return this.templates.get(id);
36
+ }
37
+ getTemplatesByCategory(category) {
38
+ return Array.from(this.templates.values()).filter(t => t.category === category);
39
+ }
40
+ getAllTemplates() {
41
+ return Array.from(this.templates.values());
42
+ }
43
+ }
44
+ exports.EducationalTemplateRegistry = EducationalTemplateRegistry;
45
+ exports.templateRegistry = new EducationalTemplateRegistry();
46
+ /**
47
+ * Core educational template tools
48
+ */
49
+ exports.educationalTemplateTools = [
50
+ {
51
+ tool: {
52
+ name: 'geogebra_list_educational_templates',
53
+ description: 'List all available educational templates by category',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ category: {
58
+ type: 'string',
59
+ enum: ['geometry', 'algebra', 'calculus', 'statistics', 'proofs'],
60
+ description: 'Filter templates by category (optional)'
61
+ },
62
+ gradeLevel: {
63
+ type: 'string',
64
+ description: 'Filter by grade level (e.g., "6-8", "9-12", "college")'
65
+ }
66
+ },
67
+ required: []
68
+ }
69
+ },
70
+ handler: async (params) => {
71
+ const { category, gradeLevel } = params;
72
+ let templates = exports.templateRegistry.getAllTemplates();
73
+ if (category) {
74
+ templates = templates.filter(t => t.category === category);
75
+ }
76
+ if (gradeLevel) {
77
+ templates = templates.filter(t => t.gradeLevel === gradeLevel);
78
+ }
79
+ const templateList = templates.map(template => ({
80
+ id: template.id,
81
+ name: template.name,
82
+ category: template.category,
83
+ description: template.description,
84
+ gradeLevel: template.gradeLevel,
85
+ estimatedTime: template.estimatedTime,
86
+ objectives: template.objectives
87
+ }));
88
+ return {
89
+ content: [{
90
+ type: 'text',
91
+ text: JSON.stringify({
92
+ success: true,
93
+ count: templateList.length,
94
+ templates: templateList
95
+ }, null, 2)
96
+ }]
97
+ };
98
+ }
99
+ },
100
+ {
101
+ tool: {
102
+ name: 'geogebra_load_educational_template',
103
+ description: 'Load and execute a specific educational template',
104
+ inputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ templateId: {
108
+ type: 'string',
109
+ description: 'The ID of the educational template to load'
110
+ },
111
+ customizations: {
112
+ type: 'object',
113
+ description: 'Optional customizations for the template (colors, parameters, etc.)',
114
+ properties: {
115
+ colors: {
116
+ type: 'object',
117
+ description: 'Custom color scheme'
118
+ },
119
+ parameters: {
120
+ type: 'object',
121
+ description: 'Custom parameter values'
122
+ },
123
+ showLabels: {
124
+ type: 'boolean',
125
+ description: 'Whether to show object labels'
126
+ }
127
+ }
128
+ }
129
+ },
130
+ required: ['templateId']
131
+ }
132
+ },
133
+ handler: async (params) => {
134
+ const { templateId } = params;
135
+ // Note: customizations parameter is accepted but not yet implemented
136
+ // Future enhancement: apply color schemes, parameters, and display options
137
+ // const customizations = params['customizations'] || {};
138
+ const template = exports.templateRegistry.getTemplate(templateId);
139
+ if (!template) {
140
+ throw new Error(`Educational template not found: ${templateId}`);
141
+ }
142
+ logger_1.default.info(`Loading educational template: ${template.name}`);
143
+ // Clear existing construction
144
+ await index_1.toolRegistry.executeTool('geogebra_clear_construction', {});
145
+ // Execute template setup
146
+ const result = await template.setup();
147
+ return {
148
+ content: [{
149
+ type: 'text',
150
+ text: JSON.stringify({
151
+ success: true,
152
+ template: {
153
+ id: template.id,
154
+ name: template.name,
155
+ category: template.category,
156
+ loaded: true
157
+ },
158
+ objectives: template.objectives,
159
+ instructions: `Template "${template.name}" loaded successfully. Estimated time: ${template.estimatedTime} minutes.`,
160
+ result
161
+ }, null, 2)
162
+ }]
163
+ };
164
+ }
165
+ },
166
+ {
167
+ tool: {
168
+ name: 'geogebra_create_lesson_plan',
169
+ description: 'Generate a complete lesson plan using multiple educational templates',
170
+ inputSchema: {
171
+ type: 'object',
172
+ properties: {
173
+ topic: {
174
+ type: 'string',
175
+ description: 'The mathematical topic for the lesson'
176
+ },
177
+ gradeLevel: {
178
+ type: 'string',
179
+ description: 'Target grade level'
180
+ },
181
+ duration: {
182
+ type: 'number',
183
+ description: 'Lesson duration in minutes'
184
+ },
185
+ templateIds: {
186
+ type: 'array',
187
+ items: { type: 'string' },
188
+ description: 'Specific template IDs to include in the lesson'
189
+ }
190
+ },
191
+ required: ['topic', 'gradeLevel', 'duration']
192
+ }
193
+ },
194
+ handler: async (params) => {
195
+ const { topic, gradeLevel, duration, templateIds } = params;
196
+ // Auto-select templates if not specified
197
+ let selectedTemplates;
198
+ if (templateIds && Array.isArray(templateIds)) {
199
+ selectedTemplates = templateIds
200
+ .map(id => exports.templateRegistry.getTemplate(id))
201
+ .filter(Boolean);
202
+ }
203
+ else {
204
+ // Auto-select based on topic and grade level
205
+ selectedTemplates = exports.templateRegistry.getAllTemplates()
206
+ .filter(t => t.gradeLevel === gradeLevel)
207
+ .filter(t => t.estimatedTime <= duration)
208
+ .reduce((chosen, t) => { if (chosen.length < 3 && chosen.reduce((sum, item) => sum + item.estimatedTime, 0) + t.estimatedTime <= duration)
209
+ chosen.push(t); return chosen; }, []);
210
+ }
211
+ const lessonPlan = {
212
+ topic,
213
+ gradeLevel,
214
+ duration,
215
+ templates: selectedTemplates.map(t => ({
216
+ id: t.id,
217
+ name: t.name,
218
+ category: t.category,
219
+ gradeLevel: t.gradeLevel,
220
+ estimatedTime: t.estimatedTime,
221
+ objectives: t.objectives,
222
+ prerequisites: t.prerequisites
223
+ })),
224
+ totalTime: selectedTemplates.reduce((sum, t) => sum + t.estimatedTime, 0),
225
+ structure: {
226
+ introduction: "5 minutes - Review prerequisites and introduce objectives",
227
+ activities: selectedTemplates.map((t, i) => `Activity ${i + 1}: ${t.name} (${t.estimatedTime} min) - ${t.description}`),
228
+ conclusion: "5 minutes - Summary and assessment"
229
+ }
230
+ };
231
+ return {
232
+ content: [{
233
+ type: 'text',
234
+ text: JSON.stringify(lessonPlan, null, 2)
235
+ }]
236
+ };
237
+ }
238
+ }
239
+ ];
240
+ /**
241
+ * Initialize and register all educational templates
242
+ */
243
+ function initializeEducationalTemplates() {
244
+ // Import templates from different categories
245
+ const { geometryTemplates } = require('./templates/geometry-templates');
246
+ const { algebraTemplates } = require('./templates/algebra-templates');
247
+ // Register geometry templates
248
+ geometryTemplates.forEach((template) => {
249
+ exports.templateRegistry.register(template);
250
+ });
251
+ // Register algebra templates
252
+ algebraTemplates.forEach((template) => {
253
+ exports.templateRegistry.register(template);
254
+ });
255
+ if (!isMcpMode) {
256
+ logger_1.default.info(`Registered ${exports.templateRegistry.getAllTemplates().length} educational templates`);
257
+ }
258
+ }
259
+ // Initialize templates when module is loaded
260
+ initializeEducationalTemplates();
261
+ //# sourceMappingURL=educational-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"educational-templates.js","sourceRoot":"","sources":["../../src/tools/educational-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types/mcp';
2
+ export declare const exportTools: ToolDefinition[];
3
+ //# sourceMappingURL=export-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-tools.d.ts","sourceRoot":"","sources":["../../src/tools/export-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAsC9C,eAAO,MAAM,WAAW,EAAE,cAAc,EAqEvC,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportTools = void 0;
4
+ const artifact_1 = require("../studio/artifact");
5
+ const html_1 = require("../export/html");
6
+ const semantic_1 = require("../export/semantic");
7
+ const gikz_1 = require("../export/gikz");
8
+ const files_1 = require("../export/files");
9
+ const geogebra_tools_1 = require("./geogebra-tools");
10
+ const textResult = (value) => ({ content: [{ type: 'text', text: JSON.stringify(value) }], structuredContent: value });
11
+ const safe = (handler) => async (params) => {
12
+ try {
13
+ return await handler(params);
14
+ }
15
+ catch (e) {
16
+ return { ...textResult({ success: false, error: e instanceof Error ? e.message : String(e) }), isError: true };
17
+ }
18
+ };
19
+ const scene = async (params) => (0, semantic_1.sceneFromXML)(typeof params['xml'] === 'string' ? params['xml'] : await (await geogebra_tools_1.instancePool.getDefaultInstance()).getConstructionXML());
20
+ /** Both named TikZ export and format=tikz use native PGF, then mandatory Gikz.
21
+ * Optional XML is loaded temporarily; restore the shared live construction even on failure.
22
+ */
23
+ async function nativeCleanedTikz(p) {
24
+ const engine = await geogebra_tools_1.instancePool.getDefaultInstance();
25
+ const xml = typeof p['xml'] === 'string' ? (0, semantic_1.sceneFromXML)(p['xml']).xml : undefined;
26
+ const previous = xml ? await engine.getConstructionXML() : undefined;
27
+ let source;
28
+ try {
29
+ if (xml)
30
+ await engine.callAppsApi('setXML', [xml]);
31
+ source = await engine.exportNativeTikZ();
32
+ }
33
+ finally {
34
+ if (previous)
35
+ await engine.callAppsApi('setXML', [previous]);
36
+ }
37
+ const code = await (0, gikz_1.cleanWithGikz)(source, { standalone: p['standalone'] !== false });
38
+ const saved = await (0, files_1.saveText)(p['filename'], code);
39
+ return textResult({ success: true, format: 'tikz', code, backend: 'native-pgf+gikz', cleaned: true,
40
+ semantics: 'visual-snapshot', complete: false, coordinateFallbacks: [], unsupportedObjects: [],
41
+ warnings: ['Native PGF followed by Gikz produces a visual snapshot; construction dependencies are retained in GGB/XML, not guaranteed in TikZ.',
42
+ 'Gikz normalizes colors, line widths, labels and coordinate precision. Inspect the printed result.'],
43
+ ...(saved ? { filename: saved } : {}), renderVerified: false });
44
+ }
45
+ const filename = { type: 'string', description: 'Optional new file within workspace; existing files are not overwritten.' };
46
+ exports.exportTools = [
47
+ {
48
+ tool: { name: 'geogebra_build_artifact', description: 'Default geometry delivery: execute ordered commands in an isolated GeoGebra engine, check visible definitions, embed a packed editable GGB into local HTML, reopen and check equal axes, and return a preview for visual review. Requires Chrome and GeoGebra network access; writes new workspace files only.',
49
+ _meta: { ui: { resourceUri: 'ui://geogebra/preview.html' } },
50
+ inputSchema: { type: 'object', properties: {
51
+ commands: { type: 'array', items: { type: 'string', maxLength: 10000 }, maxItems: 2000 }, ggbBase64: { type: 'string' },
52
+ title: { type: 'string', maxLength: 500 }, filename: { type: 'string', description: 'New .html file within the workspace; a sibling .preview.png is also created.' },
53
+ width: { type: 'integer', minimum: 200, maximum: 4000 }, height: { type: 'integer', minimum: 200, maximum: 4000 },
54
+ visibleLabels: { type: 'array', items: { type: 'string' } }, captionOverrides: { type: 'object', additionalProperties: { type: 'string' } }
55
+ }, required: ['filename'], additionalProperties: false } },
56
+ handler: safe(async (p) => (0, artifact_1.buildArtifact)(p)),
57
+ },
58
+ {
59
+ tool: { name: 'geogebra_create_html', description: 'Generate an unverified command-template GeoGebra HTML; prefer geogebra_build_artifact for default checked delivery. This generates an interactive GeoGebra HTML with current-state GGB, PNG, SVG, Gikz-cleaned native TikZ, PDF, XML and HTML downloads. No Chromium needed to generate; opening requires GeoGebra network access.',
60
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
61
+ _meta: { ui: { resourceUri: 'ui://geogebra/preview.html' } },
62
+ inputSchema: { type: 'object', properties: {
63
+ title: { type: 'string', maxLength: 500 }, commands: { type: 'array', items: { type: 'string', maxLength: 10000 }, maxItems: 2000 },
64
+ ggbBase64: { type: 'string', description: 'Optional packed GGB; commands run after loading it.' },
65
+ width: { type: 'integer', minimum: 200, maximum: 4000 }, height: { type: 'integer', minimum: 200, maximum: 4000 },
66
+ visibleLabels: { type: 'array', items: { type: 'string' } },
67
+ captionOverrides: { type: 'object', description: 'Optional LaTeX or plain-text captions keyed by GeoGebra object name.', additionalProperties: { type: 'string' } },
68
+ filename,
69
+ }, additionalProperties: false } },
70
+ handler: safe(async (p) => {
71
+ if (!p['commands'] && !p['ggbBase64'])
72
+ throw new Error('Provide commands or ggbBase64');
73
+ const html = (0, html_1.constructionHtml)(p);
74
+ const saved = await (0, files_1.saveText)(p['filename'], html);
75
+ return textResult({ success: true, format: 'html', html, ...(saved ? { filename: saved } : {}), requiresNetwork: true, renderVerified: false });
76
+ }),
77
+ },
78
+ {
79
+ tool: { name: 'geogebra_export_html', description: 'Package the current server-side construction in an interactive HTML, preserving its GGB styling and definitions.', _meta: { ui: { resourceUri: 'ui://geogebra/preview.html' } }, inputSchema: { type: 'object', properties: { title: { type: 'string' }, filename }, additionalProperties: false } },
80
+ handler: safe(async (p) => {
81
+ const ggbBase64 = await (await geogebra_tools_1.instancePool.getDefaultInstance()).exportGGB();
82
+ const html = (0, html_1.constructionHtml)({ title: typeof p['title'] === 'string' ? p['title'] : 'GeoGebra construction', ggbBase64 });
83
+ const saved = await (0, files_1.saveText)(p['filename'], html);
84
+ return textResult({ success: true, format: 'html', html, ...(saved ? { filename: saved } : {}), requiresNetwork: true });
85
+ }),
86
+ },
87
+ {
88
+ tool: { name: 'geogebra_get_semantic_scene', description: 'Read the original construction XML, command dependencies, coordinates, visibility, captions, and styles for editable export or AI-assisted reconstruction.',
89
+ inputSchema: { type: 'object', properties: { xml: { type: 'string', description: 'Optional original XML; omit to inspect live GeoGebra.' } }, additionalProperties: false } },
90
+ handler: safe(async (p) => textResult({ success: true, scene: await scene(p) })),
91
+ },
92
+ {
93
+ tool: { name: 'geogebra_export_tikz', description: 'Export current GeoGebra native PGF through mandatory Gikz cleanup. Returns a visual snapshot, not editable construction dependencies. No raw fallback.',
94
+ inputSchema: { type: 'object', properties: { xml: { type: 'string' }, standalone: { type: 'boolean', default: true }, filename }, additionalProperties: false } },
95
+ handler: safe(nativeCleanedTikz),
96
+ },
97
+ {
98
+ tool: { name: 'geogebra_export_source', description: 'TikZ always uses GeoGebra native PGF followed by mandatory Gikz cleanup (visual snapshot). Asymptote and mixed TSQX/Asymptote use the explicit semantic subset with strict validation; strict applies to those formats only.',
99
+ inputSchema: { type: 'object', properties: { format: { type: 'string', enum: ['tikz', 'asymptote', 'tsqx'] }, xml: { type: 'string' }, strict: { type: 'boolean', default: true }, standalone: { type: 'boolean', default: true }, filename }, required: ['format'], additionalProperties: false } },
100
+ handler: safe(async (p) => {
101
+ if (p['format'] === 'tikz')
102
+ return nativeCleanedTikz(p);
103
+ const result = (0, semantic_1.exportSource)(await scene(p), p['format'], p['strict'] !== false, p['standalone'] !== false);
104
+ const saved = await (0, files_1.saveText)(p['filename'], result.code);
105
+ return textResult({ success: true, ...result, ...(saved ? { filename: saved } : {}), renderVerified: false });
106
+ }),
107
+ },
108
+ {
109
+ tool: { name: 'geogebra_clean_tikz', description: 'Clean native GeoGebra TikZ text or convert XML through built-in Gikz. This is visual cleanup, not a guarantee of preserved construction semantics.',
110
+ inputSchema: { type: 'object', properties: { source: { type: 'string', maxLength: 10000000 }, standalone: { type: 'boolean' }, points: { type: 'boolean' }, labels: { type: 'boolean' }, round: { type: 'boolean' }, filename }, required: ['source'], additionalProperties: false } },
111
+ handler: safe(async (p) => {
112
+ const code = await (0, gikz_1.cleanWithGikz)(p['source'], p);
113
+ const saved = await (0, files_1.saveText)(p['filename'], code);
114
+ return textResult({ success: true, format: 'tikz', code, ...(saved ? { filename: saved } : {}), backend: 'built-in-gikz', semantics: 'not-guaranteed', renderVerified: false });
115
+ }),
116
+ },
117
+ ];
118
+ //# sourceMappingURL=export-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-tools.js","sourceRoot":"","sources":["../../src/tools/export-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ToolDefinition } from '../types/mcp';
2
+ import { GeoGebraInstance } from '../utils/geogebra-instance';
3
+ declare class GeoGebraInstancePool {
4
+ private instances;
5
+ private defaultInstance;
6
+ getDefaultInstance(): Promise<GeoGebraInstance>;
7
+ cleanup(): Promise<void>;
8
+ }
9
+ export declare const instancePool: GeoGebraInstancePool;
10
+ /**
11
+ * GeoGebra MCP Tools
12
+ */
13
+ export declare const geogebraTools: ToolDefinition[];
14
+ export {};
15
+ //# sourceMappingURL=geogebra-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geogebra-tools.d.ts","sourceRoot":"","sources":["../../src/tools/geogebra-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AA4B9D,cAAM,oBAAoB;IACxB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,eAAe,CAA+B;IAEhD,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwB/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAW/B;AAED,eAAO,MAAM,YAAY,sBAA6B,CAAC;AAmPvD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,cAAc,EA67GzC,CAAC"}