@fernforestgames/mcp-server-godot-docs 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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/config.d.ts +4 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +10 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/docs/fetcher.d.ts +18 -0
  8. package/dist/docs/fetcher.d.ts.map +1 -0
  9. package/dist/docs/fetcher.js +129 -0
  10. package/dist/docs/fetcher.js.map +1 -0
  11. package/dist/docs/format.d.ts +6 -0
  12. package/dist/docs/format.d.ts.map +1 -0
  13. package/dist/docs/format.js +153 -0
  14. package/dist/docs/format.js.map +1 -0
  15. package/dist/docs/index.d.ts +44 -0
  16. package/dist/docs/index.d.ts.map +1 -0
  17. package/dist/docs/index.js +99 -0
  18. package/dist/docs/index.js.map +1 -0
  19. package/dist/docs/parser.d.ts +6 -0
  20. package/dist/docs/parser.d.ts.map +1 -0
  21. package/dist/docs/parser.js +206 -0
  22. package/dist/docs/parser.js.map +1 -0
  23. package/dist/docs/search.d.ts +14 -0
  24. package/dist/docs/search.d.ts.map +1 -0
  25. package/dist/docs/search.js +195 -0
  26. package/dist/docs/search.js.map +1 -0
  27. package/dist/docs/types.d.ts +62 -0
  28. package/dist/docs/types.d.ts.map +1 -0
  29. package/dist/docs/types.js +3 -0
  30. package/dist/docs/types.js.map +1 -0
  31. package/dist/docs/version.d.ts +25 -0
  32. package/dist/docs/version.d.ts.map +1 -0
  33. package/dist/docs/version.js +76 -0
  34. package/dist/docs/version.js.map +1 -0
  35. package/dist/handlers/tools/get-class.d.ts +9 -0
  36. package/dist/handlers/tools/get-class.d.ts.map +1 -0
  37. package/dist/handlers/tools/get-class.js +52 -0
  38. package/dist/handlers/tools/get-class.js.map +1 -0
  39. package/dist/handlers/tools/search-docs.d.ts +10 -0
  40. package/dist/handlers/tools/search-docs.d.ts.map +1 -0
  41. package/dist/handlers/tools/search-docs.js +62 -0
  42. package/dist/handlers/tools/search-docs.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +31 -0
  46. package/dist/index.js.map +1 -0
  47. package/package.json +52 -0
@@ -0,0 +1,206 @@
1
+ // Parse Godot XML documentation into TypeScript types
2
+ import * as fs from 'fs';
3
+ import { XMLParser } from 'fast-xml-parser';
4
+ // Configure XML parser to preserve attributes
5
+ const parser = new XMLParser({
6
+ ignoreAttributes: false,
7
+ attributeNamePrefix: '@_',
8
+ textNodeName: '#text',
9
+ isArray: (name) => {
10
+ // These elements can appear multiple times
11
+ return ['method', 'member', 'signal', 'constant', 'param', 'theme_item', 'link'].includes(name);
12
+ },
13
+ });
14
+ /**
15
+ * Parse a single Godot XML documentation file
16
+ */
17
+ export function parseClassXml(xmlPath) {
18
+ try {
19
+ const xml = fs.readFileSync(xmlPath, 'utf-8');
20
+ const parsed = parser.parse(xml);
21
+ const classData = parsed.class;
22
+ if (!classData) {
23
+ return null;
24
+ }
25
+ return {
26
+ name: classData['@_name'] || '',
27
+ inherits: classData['@_inherits'] || undefined,
28
+ brief: extractText(classData.brief_description),
29
+ description: extractText(classData.description),
30
+ keywords: classData['@_keywords']?.split(',').map((k) => k.trim()) || [],
31
+ tutorials: parseTutorials(classData.tutorials),
32
+ methods: parseMethods(classData.methods),
33
+ properties: parseMembers(classData.members),
34
+ signals: parseSignals(classData.signals),
35
+ constants: parseConstants(classData.constants),
36
+ themeItems: parseThemeItems(classData.theme_items),
37
+ };
38
+ }
39
+ catch (error) {
40
+ console.error(`Failed to parse ${xmlPath}:`, error);
41
+ return null;
42
+ }
43
+ }
44
+ /**
45
+ * Extract text content from an element (handles both string and object with #text)
46
+ */
47
+ function extractText(element) {
48
+ if (!element)
49
+ return '';
50
+ if (typeof element === 'string')
51
+ return element.trim();
52
+ if (typeof element === 'object' && element !== null && '#text' in element) {
53
+ return String(element['#text']).trim();
54
+ }
55
+ return '';
56
+ }
57
+ /**
58
+ * Parse tutorials section
59
+ */
60
+ function parseTutorials(tutorials) {
61
+ if (!tutorials)
62
+ return [];
63
+ const links = tutorials['link'];
64
+ if (!links)
65
+ return [];
66
+ const linksArray = Array.isArray(links) ? links : [links];
67
+ return linksArray.map((link) => {
68
+ if (typeof link === 'string') {
69
+ return { title: '', link };
70
+ }
71
+ const linkObj = link;
72
+ return {
73
+ title: String(linkObj['@_title'] || ''),
74
+ link: extractText(linkObj) || String(linkObj['#text'] || ''),
75
+ };
76
+ });
77
+ }
78
+ /**
79
+ * Parse methods section
80
+ */
81
+ function parseMethods(methods) {
82
+ if (!methods)
83
+ return [];
84
+ const methodList = methods['method'];
85
+ if (!methodList)
86
+ return [];
87
+ const methodsArray = Array.isArray(methodList) ? methodList : [methodList];
88
+ return methodsArray.map((method) => {
89
+ const m = method;
90
+ return {
91
+ name: String(m['@_name'] || ''),
92
+ returnType: parseReturnType(m['return']),
93
+ params: parseParams(m['param']),
94
+ description: extractText(m['description']),
95
+ qualifiers: m['@_qualifiers'] ? String(m['@_qualifiers']) : undefined,
96
+ };
97
+ });
98
+ }
99
+ /**
100
+ * Parse return type
101
+ */
102
+ function parseReturnType(ret) {
103
+ if (!ret)
104
+ return 'void';
105
+ const r = ret;
106
+ return String(r['@_type'] || 'void');
107
+ }
108
+ /**
109
+ * Parse method/signal parameters
110
+ */
111
+ function parseParams(params) {
112
+ if (!params)
113
+ return [];
114
+ const paramsArray = Array.isArray(params) ? params : [params];
115
+ return paramsArray.map((param) => {
116
+ const p = param;
117
+ return {
118
+ name: String(p['@_name'] || ''),
119
+ type: String(p['@_type'] || 'Variant'),
120
+ default: p['@_default'] ? String(p['@_default']) : undefined,
121
+ };
122
+ });
123
+ }
124
+ /**
125
+ * Parse members (properties) section
126
+ */
127
+ function parseMembers(members) {
128
+ if (!members)
129
+ return [];
130
+ const memberList = members['member'];
131
+ if (!memberList)
132
+ return [];
133
+ const membersArray = Array.isArray(memberList) ? memberList : [memberList];
134
+ return membersArray.map((member) => {
135
+ const m = member;
136
+ return {
137
+ name: String(m['@_name'] || ''),
138
+ type: String(m['@_type'] || 'Variant'),
139
+ default: m['@_default'] ? String(m['@_default']) : undefined,
140
+ setter: m['@_setter'] ? String(m['@_setter']) : undefined,
141
+ getter: m['@_getter'] ? String(m['@_getter']) : undefined,
142
+ description: extractText(m),
143
+ };
144
+ });
145
+ }
146
+ /**
147
+ * Parse signals section
148
+ */
149
+ function parseSignals(signals) {
150
+ if (!signals)
151
+ return [];
152
+ const signalList = signals['signal'];
153
+ if (!signalList)
154
+ return [];
155
+ const signalsArray = Array.isArray(signalList) ? signalList : [signalList];
156
+ return signalsArray.map((signal) => {
157
+ const s = signal;
158
+ return {
159
+ name: String(s['@_name'] || ''),
160
+ params: parseParams(s['param']),
161
+ description: extractText(s['description']),
162
+ };
163
+ });
164
+ }
165
+ /**
166
+ * Parse constants section
167
+ */
168
+ function parseConstants(constants) {
169
+ if (!constants)
170
+ return [];
171
+ const constantList = constants['constant'];
172
+ if (!constantList)
173
+ return [];
174
+ const constantsArray = Array.isArray(constantList) ? constantList : [constantList];
175
+ return constantsArray.map((constant) => {
176
+ const c = constant;
177
+ return {
178
+ name: String(c['@_name'] || ''),
179
+ value: String(c['@_value'] || '0'),
180
+ enum: c['@_enum'] ? String(c['@_enum']) : undefined,
181
+ description: extractText(c),
182
+ };
183
+ });
184
+ }
185
+ /**
186
+ * Parse theme items section
187
+ */
188
+ function parseThemeItems(themeItems) {
189
+ if (!themeItems)
190
+ return [];
191
+ const itemList = themeItems['theme_item'];
192
+ if (!itemList)
193
+ return [];
194
+ const itemsArray = Array.isArray(itemList) ? itemList : [itemList];
195
+ return itemsArray.map((item) => {
196
+ const t = item;
197
+ return {
198
+ name: String(t['@_name'] || ''),
199
+ type: String(t['@_data_type'] || t['@_type'] || 'unknown'),
200
+ dataType: t['@_data_type'] ? String(t['@_data_type']) : undefined,
201
+ default: t['@_default'] ? String(t['@_default']) : undefined,
202
+ description: extractText(t),
203
+ };
204
+ });
205
+ }
206
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/docs/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SearchMatch } from './types.js';
2
+ /**
3
+ * Search the documentation index
4
+ *
5
+ * Searches across:
6
+ * - Class names
7
+ * - Method names
8
+ * - Property names
9
+ * - Signal names
10
+ * - Constant names
11
+ * - Descriptions (lower priority)
12
+ */
13
+ export declare function searchDocs(query: string, limit?: number): Promise<SearchMatch[]>;
14
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/docs/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAG1D;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4F1F"}
@@ -0,0 +1,195 @@
1
+ import { docsIndex } from './index.js';
2
+ /**
3
+ * Search the documentation index
4
+ *
5
+ * Searches across:
6
+ * - Class names
7
+ * - Method names
8
+ * - Property names
9
+ * - Signal names
10
+ * - Constant names
11
+ * - Descriptions (lower priority)
12
+ */
13
+ export async function searchDocs(query, limit = 10) {
14
+ await docsIndex.ensureInitialized();
15
+ const queryLower = query.toLowerCase();
16
+ const results = [];
17
+ for (const godotClass of docsIndex.getAllClasses()) {
18
+ // Search class name
19
+ const classScore = scoreMatch(godotClass.name, queryLower);
20
+ if (classScore > 0) {
21
+ results.push({
22
+ className: godotClass.name,
23
+ matchType: 'class',
24
+ name: godotClass.name,
25
+ excerpt: godotClass.brief || godotClass.description.slice(0, 200),
26
+ score: classScore * 10, // Boost class matches
27
+ });
28
+ }
29
+ // Search methods
30
+ for (const method of godotClass.methods) {
31
+ const methodScore = scoreMatch(method.name, queryLower);
32
+ if (methodScore > 0) {
33
+ results.push({
34
+ className: godotClass.name,
35
+ matchType: 'method',
36
+ name: method.name,
37
+ excerpt: formatMethodSignature(method) + (method.description ? '\n' + method.description.slice(0, 150) : ''),
38
+ score: methodScore * 5,
39
+ });
40
+ }
41
+ }
42
+ // Search properties
43
+ for (const prop of godotClass.properties) {
44
+ const propScore = scoreMatch(prop.name, queryLower);
45
+ if (propScore > 0) {
46
+ results.push({
47
+ className: godotClass.name,
48
+ matchType: 'property',
49
+ name: prop.name,
50
+ excerpt: `${prop.type} ${prop.name}` + (prop.description ? '\n' + prop.description.slice(0, 150) : ''),
51
+ score: propScore * 5,
52
+ });
53
+ }
54
+ }
55
+ // Search signals
56
+ for (const signal of godotClass.signals) {
57
+ const signalScore = scoreMatch(signal.name, queryLower);
58
+ if (signalScore > 0) {
59
+ results.push({
60
+ className: godotClass.name,
61
+ matchType: 'signal',
62
+ name: signal.name,
63
+ excerpt: formatSignalSignature(signal) + (signal.description ? '\n' + signal.description.slice(0, 150) : ''),
64
+ score: signalScore * 5,
65
+ });
66
+ }
67
+ }
68
+ // Search constants
69
+ for (const constant of godotClass.constants) {
70
+ const constScore = scoreMatch(constant.name, queryLower);
71
+ if (constScore > 0) {
72
+ results.push({
73
+ className: godotClass.name,
74
+ matchType: 'constant',
75
+ name: constant.name,
76
+ excerpt: `${constant.name} = ${constant.value}` + (constant.enum ? ` (${constant.enum})` : '') + (constant.description ? '\n' + constant.description.slice(0, 150) : ''),
77
+ score: constScore * 3,
78
+ });
79
+ }
80
+ }
81
+ // Also search descriptions (lower priority)
82
+ const descScore = scoreDescriptionMatch(godotClass, queryLower);
83
+ if (descScore > 0 && classScore === 0) {
84
+ // Only add if not already matched by name
85
+ results.push({
86
+ className: godotClass.name,
87
+ matchType: 'class',
88
+ name: godotClass.name,
89
+ excerpt: extractRelevantExcerpt(godotClass.description, query),
90
+ score: descScore,
91
+ });
92
+ }
93
+ }
94
+ // Sort by score (highest first) and limit
95
+ results.sort((a, b) => b.score - a.score);
96
+ return results.slice(0, limit);
97
+ }
98
+ /**
99
+ * Score a match between a name and query
100
+ * Returns 0 for no match, higher for better matches
101
+ */
102
+ function scoreMatch(name, queryLower) {
103
+ const nameLower = name.toLowerCase();
104
+ // Exact match
105
+ if (nameLower === queryLower) {
106
+ return 100;
107
+ }
108
+ // Starts with query
109
+ if (nameLower.startsWith(queryLower)) {
110
+ return 80;
111
+ }
112
+ // Contains query
113
+ if (nameLower.includes(queryLower)) {
114
+ return 60;
115
+ }
116
+ // Query contains name (e.g., searching "RigidBody3D move" matches "move")
117
+ if (queryLower.includes(nameLower) && nameLower.length > 3) {
118
+ return 40;
119
+ }
120
+ // Word boundary match (e.g., "move" matches "move_and_slide")
121
+ const words = nameLower.split(/[_\s]+/);
122
+ for (const word of words) {
123
+ if (word === queryLower) {
124
+ return 70;
125
+ }
126
+ if (word.startsWith(queryLower)) {
127
+ return 50;
128
+ }
129
+ }
130
+ return 0;
131
+ }
132
+ /**
133
+ * Score description matches
134
+ */
135
+ function scoreDescriptionMatch(godotClass, queryLower) {
136
+ const desc = (godotClass.brief + ' ' + godotClass.description).toLowerCase();
137
+ // Check if query appears in description
138
+ if (desc.includes(queryLower)) {
139
+ // Bonus for multiple occurrences
140
+ const count = (desc.match(new RegExp(escapeRegExp(queryLower), 'g')) || []).length;
141
+ return Math.min(20 + count * 5, 40);
142
+ }
143
+ return 0;
144
+ }
145
+ /**
146
+ * Extract a relevant excerpt from description containing the query
147
+ */
148
+ function extractRelevantExcerpt(description, query) {
149
+ const queryLower = query.toLowerCase();
150
+ const descLower = description.toLowerCase();
151
+ const index = descLower.indexOf(queryLower);
152
+ if (index === -1) {
153
+ return description.slice(0, 200);
154
+ }
155
+ // Get context around the match
156
+ const start = Math.max(0, index - 50);
157
+ const end = Math.min(description.length, index + query.length + 150);
158
+ let excerpt = description.slice(start, end);
159
+ if (start > 0)
160
+ excerpt = '...' + excerpt;
161
+ if (end < description.length)
162
+ excerpt = excerpt + '...';
163
+ return excerpt;
164
+ }
165
+ /**
166
+ * Format method signature for display
167
+ */
168
+ function formatMethodSignature(method) {
169
+ const params = method.params.map(p => {
170
+ let param = `${p.name}: ${p.type}`;
171
+ if (p.default !== undefined) {
172
+ param += ` = ${p.default}`;
173
+ }
174
+ return param;
175
+ }).join(', ');
176
+ let sig = `${method.returnType} ${method.name}(${params})`;
177
+ if (method.qualifiers) {
178
+ sig += ` [${method.qualifiers}]`;
179
+ }
180
+ return sig;
181
+ }
182
+ /**
183
+ * Format signal signature for display
184
+ */
185
+ function formatSignalSignature(signal) {
186
+ const params = signal.params.map(p => `${p.name}: ${p.type}`).join(', ');
187
+ return `signal ${signal.name}(${params})`;
188
+ }
189
+ /**
190
+ * Escape special regex characters
191
+ */
192
+ function escapeRegExp(str) {
193
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
194
+ }
195
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/docs/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export interface GodotMethodParam {
2
+ name: string;
3
+ type: string;
4
+ default?: string;
5
+ }
6
+ export interface GodotMethod {
7
+ name: string;
8
+ returnType: string;
9
+ params: GodotMethodParam[];
10
+ description: string;
11
+ qualifiers?: string;
12
+ }
13
+ export interface GodotProperty {
14
+ name: string;
15
+ type: string;
16
+ default?: string;
17
+ setter?: string;
18
+ getter?: string;
19
+ description: string;
20
+ }
21
+ export interface GodotSignal {
22
+ name: string;
23
+ params: GodotMethodParam[];
24
+ description: string;
25
+ }
26
+ export interface GodotConstant {
27
+ name: string;
28
+ value: string;
29
+ enum?: string;
30
+ description: string;
31
+ }
32
+ export interface GodotThemeItem {
33
+ name: string;
34
+ type: string;
35
+ dataType?: string;
36
+ default?: string;
37
+ description: string;
38
+ }
39
+ export interface GodotClass {
40
+ name: string;
41
+ inherits?: string;
42
+ brief: string;
43
+ description: string;
44
+ keywords?: string[];
45
+ tutorials: {
46
+ title: string;
47
+ link: string;
48
+ }[];
49
+ methods: GodotMethod[];
50
+ properties: GodotProperty[];
51
+ signals: GodotSignal[];
52
+ constants: GodotConstant[];
53
+ themeItems: GodotThemeItem[];
54
+ }
55
+ export interface SearchMatch {
56
+ className: string;
57
+ matchType: 'class' | 'method' | 'property' | 'signal' | 'constant';
58
+ name: string;
59
+ excerpt: string;
60
+ score: number;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAGD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,3 @@
1
+ // Type definitions for parsed Godot XML documentation
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA,sDAAsD"}
@@ -0,0 +1,25 @@
1
+ export interface GodotVersionInfo {
2
+ major: number;
3
+ minor: number;
4
+ patch: number;
5
+ status: string;
6
+ full: string;
7
+ }
8
+ /**
9
+ * Get the Godot version from the executable
10
+ */
11
+ export declare function getGodotVersion(): GodotVersionInfo;
12
+ /**
13
+ * Map a Godot version to a GitHub ref (tag or branch)
14
+ *
15
+ * Stable versions: Use the exact tag (e.g., "4.5.1-stable")
16
+ * Dev/master builds: "master" branch
17
+ *
18
+ * Tags are preferred because they're immutable and match the exact version.
19
+ */
20
+ export declare function versionToGitRef(version: GodotVersionInfo): string;
21
+ /**
22
+ * Get a cache-safe version string (used for cache directory naming)
23
+ */
24
+ export declare function versionToCacheKey(version: GodotVersionInfo): string;
25
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/docs/version.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CA0ClD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAYjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAMnE"}
@@ -0,0 +1,76 @@
1
+ // Detect Godot version and map to GitHub ref
2
+ import { execSync } from 'child_process';
3
+ import { godotPath } from '../config.js';
4
+ /**
5
+ * Get the Godot version from the executable
6
+ */
7
+ export function getGodotVersion() {
8
+ try {
9
+ const output = execSync(`"${godotPath}" --version`, {
10
+ encoding: 'utf-8',
11
+ timeout: 10000,
12
+ }).trim();
13
+ // Godot version format: "4.3.stable.official.77dcf97d8"
14
+ // or "4.3.1.stable.official.77dcf97d8"
15
+ const parts = output.split('.');
16
+ const major = parseInt(parts[0] || '4', 10) || 4;
17
+ const minor = parseInt(parts[1] || '0', 10) || 0;
18
+ // Check if third part is a number (patch) or status
19
+ let patch = 0;
20
+ let statusIndex = 2;
21
+ if (parts[2] && /^\d+$/.test(parts[2])) {
22
+ patch = parseInt(parts[2], 10);
23
+ statusIndex = 3;
24
+ }
25
+ const status = parts[statusIndex] || 'stable';
26
+ return {
27
+ major,
28
+ minor,
29
+ patch,
30
+ status,
31
+ full: output,
32
+ };
33
+ }
34
+ catch (error) {
35
+ console.error('Failed to get Godot version:', error);
36
+ // Default to latest stable if we can't detect
37
+ return {
38
+ major: 4,
39
+ minor: 3,
40
+ patch: 0,
41
+ status: 'stable',
42
+ full: '4.3.stable',
43
+ };
44
+ }
45
+ }
46
+ /**
47
+ * Map a Godot version to a GitHub ref (tag or branch)
48
+ *
49
+ * Stable versions: Use the exact tag (e.g., "4.5.1-stable")
50
+ * Dev/master builds: "master" branch
51
+ *
52
+ * Tags are preferred because they're immutable and match the exact version.
53
+ */
54
+ export function versionToGitRef(version) {
55
+ // Dev, alpha, beta, rc builds use master
56
+ if (version.status !== 'stable') {
57
+ return 'master';
58
+ }
59
+ // Stable versions use the exact tag: X.Y.Z-stable
60
+ // For X.Y.0 releases, Godot uses "X.Y-stable" not "X.Y.0-stable"
61
+ if (version.patch === 0) {
62
+ return `${version.major}.${version.minor}-stable`;
63
+ }
64
+ return `${version.major}.${version.minor}.${version.patch}-stable`;
65
+ }
66
+ /**
67
+ * Get a cache-safe version string (used for cache directory naming)
68
+ */
69
+ export function versionToCacheKey(version) {
70
+ if (version.status !== 'stable') {
71
+ // For non-stable, include more version info to differentiate
72
+ return `${version.major}.${version.minor}.${version.patch}-${version.status}`;
73
+ }
74
+ return `${version.major}.${version.minor}-stable`;
75
+ }
76
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/docs/version.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,SAAS,aAAa,EAAE;YAClD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,wDAAwD;QACxD,uCAAuC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjD,oDAAoD;QACpD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC;QAE9C,OAAO;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,MAAM;YACN,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,8CAA8C;QAC9C,OAAO;YACL,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,YAAY;SACnB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,yCAAyC;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kDAAkD;IAClD,iEAAiE;IACjE,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,SAAS,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,SAAS,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAyB;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,6DAA6D;QAC7D,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,SAAS,CAAC;AACpD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function getGodotClass({ className, }: {
2
+ className: string;
3
+ }): Promise<{
4
+ content: {
5
+ type: "text";
6
+ text: string;
7
+ }[];
8
+ }>;
9
+ //# sourceMappingURL=get-class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-class.d.ts","sourceRoot":"","sources":["../../../src/handlers/tools/get-class.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,EAClC,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;CACnB;;;;;GAqDA"}