@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.
- package/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/docs/fetcher.d.ts +18 -0
- package/dist/docs/fetcher.d.ts.map +1 -0
- package/dist/docs/fetcher.js +129 -0
- package/dist/docs/fetcher.js.map +1 -0
- package/dist/docs/format.d.ts +6 -0
- package/dist/docs/format.d.ts.map +1 -0
- package/dist/docs/format.js +153 -0
- package/dist/docs/format.js.map +1 -0
- package/dist/docs/index.d.ts +44 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +99 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/parser.d.ts +6 -0
- package/dist/docs/parser.d.ts.map +1 -0
- package/dist/docs/parser.js +206 -0
- package/dist/docs/parser.js.map +1 -0
- package/dist/docs/search.d.ts +14 -0
- package/dist/docs/search.d.ts.map +1 -0
- package/dist/docs/search.js +195 -0
- package/dist/docs/search.js.map +1 -0
- package/dist/docs/types.d.ts +62 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/types.js +3 -0
- package/dist/docs/types.js.map +1 -0
- package/dist/docs/version.d.ts +25 -0
- package/dist/docs/version.d.ts.map +1 -0
- package/dist/docs/version.js +76 -0
- package/dist/docs/version.js.map +1 -0
- package/dist/handlers/tools/get-class.d.ts +9 -0
- package/dist/handlers/tools/get-class.d.ts.map +1 -0
- package/dist/handlers/tools/get-class.js +52 -0
- package/dist/handlers/tools/get-class.js.map +1 -0
- package/dist/handlers/tools/search-docs.d.ts +10 -0
- package/dist/handlers/tools/search-docs.d.ts.map +1 -0
- package/dist/handlers/tools/search-docs.js +62 -0
- package/dist/handlers/tools/search-docs.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|