@mikoto_zero/minigame-open-mcp 1.2.0-beta.8 → 1.2.1
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/README.md +266 -153
- package/dist/{auth → core/auth}/deviceFlow.d.ts +28 -2
- package/dist/core/auth/deviceFlow.d.ts.map +1 -0
- package/dist/{auth → core/auth}/deviceFlow.js +130 -12
- package/dist/core/auth/deviceFlow.js.map +1 -0
- package/dist/core/handlers/appHandlers.d.ts +9 -0
- package/dist/core/handlers/appHandlers.d.ts.map +1 -0
- package/dist/core/handlers/appHandlers.js +9 -0
- package/dist/core/handlers/appHandlers.js.map +1 -0
- package/dist/core/handlers/environmentHandlers.d.ts.map +1 -0
- package/dist/core/handlers/environmentHandlers.js +57 -0
- package/dist/core/handlers/environmentHandlers.js.map +1 -0
- package/dist/{network → core/network}/httpClient.d.ts +4 -0
- package/dist/core/network/httpClient.d.ts.map +1 -0
- package/dist/{network → core/network}/httpClient.js +66 -22
- package/dist/core/network/httpClient.js.map +1 -0
- package/dist/core/types/index.d.ts +96 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/utils/cache.d.ts.map +1 -0
- package/dist/core/utils/cache.js.map +1 -0
- package/dist/core/utils/docHelpers.d.ts +92 -0
- package/dist/core/utils/docHelpers.d.ts.map +1 -0
- package/dist/core/utils/docHelpers.js +138 -0
- package/dist/core/utils/docHelpers.js.map +1 -0
- package/dist/core/utils/logger.d.ts +102 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +353 -0
- package/dist/core/utils/logger.js.map +1 -0
- package/dist/features/app/api.d.ts +144 -0
- package/dist/features/app/api.d.ts.map +1 -0
- package/dist/features/app/api.js +231 -0
- package/dist/features/app/api.js.map +1 -0
- package/dist/{handlers/appHandlers.d.ts → features/app/handlers.d.ts} +9 -7
- package/dist/features/app/handlers.d.ts.map +1 -0
- package/dist/{handlers/appHandlers.js → features/app/handlers.js} +46 -2
- package/dist/{handlers/appHandlers.js.map → features/app/handlers.js.map} +1 -1
- package/dist/features/app/index.d.ts +10 -0
- package/dist/features/app/index.d.ts.map +1 -0
- package/dist/features/app/index.js +14 -0
- package/dist/features/app/index.js.map +1 -0
- package/dist/features/app/tools.d.ts +11 -0
- package/dist/features/app/tools.d.ts.map +1 -0
- package/dist/features/app/tools.js +169 -0
- package/dist/features/app/tools.js.map +1 -0
- package/dist/features/h5Game/api.d.ts +20 -0
- package/dist/features/h5Game/api.d.ts.map +1 -0
- package/dist/features/h5Game/api.js +16 -0
- package/dist/features/h5Game/api.js.map +1 -0
- package/dist/features/h5Game/handlers.d.ts +49 -0
- package/dist/features/h5Game/handlers.d.ts.map +1 -0
- package/dist/features/h5Game/handlers.js +321 -0
- package/dist/features/h5Game/handlers.js.map +1 -0
- package/dist/features/h5Game/index.d.ts +7 -0
- package/dist/features/h5Game/index.d.ts.map +1 -0
- package/dist/features/h5Game/index.js +11 -0
- package/dist/features/h5Game/index.js.map +1 -0
- package/dist/features/h5Game/messages.d.ts +79 -0
- package/dist/features/h5Game/messages.d.ts.map +1 -0
- package/dist/features/h5Game/messages.js +141 -0
- package/dist/features/h5Game/messages.js.map +1 -0
- package/dist/features/h5Game/tools.d.ts +14 -0
- package/dist/features/h5Game/tools.d.ts.map +1 -0
- package/dist/features/h5Game/tools.js +181 -0
- package/dist/features/h5Game/tools.js.map +1 -0
- package/dist/features/h5Game/types.d.ts +113 -0
- package/dist/features/h5Game/types.d.ts.map +1 -0
- package/dist/features/h5Game/types.js +2 -0
- package/dist/features/h5Game/types.js.map +1 -0
- package/dist/{network/leaderboardApi.d.ts → features/leaderboard/api.d.ts} +1 -64
- package/dist/features/leaderboard/api.d.ts.map +1 -0
- package/dist/{network/leaderboardApi.js → features/leaderboard/api.js} +3 -151
- package/dist/features/leaderboard/api.js.map +1 -0
- package/dist/{tools/leaderboardTools.d.ts → features/leaderboard/docTools.d.ts} +6 -1
- package/dist/features/leaderboard/docTools.d.ts.map +1 -0
- package/dist/{tools/leaderboardTools.js → features/leaderboard/docTools.js} +125 -51
- package/dist/features/leaderboard/docTools.js.map +1 -0
- package/dist/features/leaderboard/docs.d.ts +11 -0
- package/dist/features/leaderboard/docs.d.ts.map +1 -0
- package/dist/{data/leaderboardDocs.js → features/leaderboard/docs.js} +5 -127
- package/dist/features/leaderboard/docs.js.map +1 -0
- package/dist/{handlers/leaderboardHandlers.d.ts → features/leaderboard/handlers.d.ts} +1 -1
- package/dist/features/leaderboard/handlers.d.ts.map +1 -0
- package/dist/{handlers/leaderboardHandlers.js → features/leaderboard/handlers.js} +37 -20
- package/dist/features/leaderboard/handlers.js.map +1 -0
- package/dist/features/leaderboard/index.d.ts +10 -0
- package/dist/features/leaderboard/index.d.ts.map +1 -0
- package/dist/features/leaderboard/index.js +27 -0
- package/dist/features/leaderboard/index.js.map +1 -0
- package/dist/features/leaderboard/resources.d.ts +11 -0
- package/dist/features/leaderboard/resources.d.ts.map +1 -0
- package/dist/features/leaderboard/resources.js +68 -0
- package/dist/features/leaderboard/resources.js.map +1 -0
- package/dist/features/leaderboard/tools.d.ts +11 -0
- package/dist/features/leaderboard/tools.d.ts.map +1 -0
- package/dist/features/leaderboard/tools.js +146 -0
- package/dist/features/leaderboard/tools.js.map +1 -0
- package/dist/server.js +366 -159
- package/dist/server.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/package.json +17 -10
- package/dist/auth/deviceFlow.d.ts.map +0 -1
- package/dist/auth/deviceFlow.js.map +0 -1
- package/dist/config/promptDefinitions.d.ts +0 -19
- package/dist/config/promptDefinitions.d.ts.map +0 -1
- package/dist/config/promptDefinitions.js +0 -28
- package/dist/config/promptDefinitions.js.map +0 -1
- package/dist/config/resourceDefinitions.d.ts +0 -19
- package/dist/config/resourceDefinitions.d.ts.map +0 -1
- package/dist/config/resourceDefinitions.js +0 -93
- package/dist/config/resourceDefinitions.js.map +0 -1
- package/dist/config/toolDefinitions.d.ts +0 -10
- package/dist/config/toolDefinitions.d.ts.map +0 -1
- package/dist/config/toolDefinitions.js +0 -250
- package/dist/config/toolDefinitions.js.map +0 -1
- package/dist/data/leaderboardDocs.d.ts +0 -37
- package/dist/data/leaderboardDocs.d.ts.map +0 -1
- package/dist/data/leaderboardDocs.js.map +0 -1
- package/dist/handlers/appHandlers.d.ts.map +0 -1
- package/dist/handlers/environmentHandlers.d.ts.map +0 -1
- package/dist/handlers/environmentHandlers.js +0 -21
- package/dist/handlers/environmentHandlers.js.map +0 -1
- package/dist/handlers/leaderboardHandlers.d.ts.map +0 -1
- package/dist/handlers/leaderboardHandlers.js.map +0 -1
- package/dist/handlers/promptHandlers.d.ts +0 -26
- package/dist/handlers/promptHandlers.d.ts.map +0 -1
- package/dist/handlers/promptHandlers.js +0 -336
- package/dist/handlers/promptHandlers.js.map +0 -1
- package/dist/network/httpClient.d.ts.map +0 -1
- package/dist/network/httpClient.js.map +0 -1
- package/dist/network/leaderboardApi.d.ts.map +0 -1
- package/dist/network/leaderboardApi.js.map +0 -1
- package/dist/tools/leaderboardTools.d.ts.map +0 -1
- package/dist/tools/leaderboardTools.js.map +0 -1
- package/dist/types/index.d.ts +0 -18
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -45
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -192
- package/dist/utils/logger.js.map +0 -1
- /package/dist/{handlers → core/handlers}/environmentHandlers.d.ts +0 -0
- /package/dist/{types → core/types}/index.js +0 -0
- /package/dist/{utils → core/utils}/cache.d.ts +0 -0
- /package/dist/{utils → core/utils}/cache.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/core/utils/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation Helper Utilities
|
|
3
|
+
* Shared utilities for generating documentation across all features
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generic API interface for documentation
|
|
7
|
+
*/
|
|
8
|
+
export interface APIDefinition {
|
|
9
|
+
name: string;
|
|
10
|
+
method: string;
|
|
11
|
+
description: string;
|
|
12
|
+
parameters?: Record<string, string>;
|
|
13
|
+
returnValue?: string;
|
|
14
|
+
example: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generic category interface
|
|
18
|
+
*/
|
|
19
|
+
export interface APICategory {
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
apis: APIDefinition[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generic documentation structure
|
|
26
|
+
*/
|
|
27
|
+
export interface Documentation {
|
|
28
|
+
title: string;
|
|
29
|
+
description: string;
|
|
30
|
+
apiReference?: string;
|
|
31
|
+
categories: Record<string, APICategory>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate API documentation in Markdown format
|
|
35
|
+
*
|
|
36
|
+
* @param documentation - The documentation structure
|
|
37
|
+
* @param categoryKey - The category key to look up
|
|
38
|
+
* @param apiName - The API name to find
|
|
39
|
+
* @returns Formatted Markdown documentation
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const doc = generateAPIDoc(
|
|
44
|
+
* LEADERBOARD_DOCUMENTATION,
|
|
45
|
+
* 'initialization',
|
|
46
|
+
* 'tap.getLeaderboardManager'
|
|
47
|
+
* );
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateAPIDoc(documentation: Documentation, categoryKey: string, apiName: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate category documentation (all APIs in a category)
|
|
53
|
+
*
|
|
54
|
+
* @param documentation - The documentation structure
|
|
55
|
+
* @param categoryKey - The category key to generate
|
|
56
|
+
* @returns Formatted Markdown documentation
|
|
57
|
+
*/
|
|
58
|
+
export declare function generateCategoryDoc(documentation: Documentation, categoryKey: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Search documentation by keyword
|
|
61
|
+
*
|
|
62
|
+
* @param documentation - The documentation structure
|
|
63
|
+
* @param query - Search query
|
|
64
|
+
* @returns Array of matching API documentation strings
|
|
65
|
+
*/
|
|
66
|
+
export declare function searchDocumentation(documentation: Documentation, query: string): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Generate complete overview documentation
|
|
69
|
+
*
|
|
70
|
+
* @param documentation - The documentation structure
|
|
71
|
+
* @returns Formatted Markdown overview
|
|
72
|
+
*/
|
|
73
|
+
export declare function generateOverview(documentation: Documentation): string;
|
|
74
|
+
/**
|
|
75
|
+
* Resource suggestion based on keywords
|
|
76
|
+
* Used when search returns no results
|
|
77
|
+
*/
|
|
78
|
+
export interface ResourceSuggestion {
|
|
79
|
+
keywords: string[];
|
|
80
|
+
uri: string;
|
|
81
|
+
description: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generate search suggestions when no results found
|
|
85
|
+
*
|
|
86
|
+
* @param query - Search query
|
|
87
|
+
* @param suggestions - Array of resource suggestions
|
|
88
|
+
* @param overviewUri - URI of the overview resource
|
|
89
|
+
* @returns Formatted suggestion message
|
|
90
|
+
*/
|
|
91
|
+
export declare function generateSearchSuggestions(query: string, suggestions: ResourceSuggestion[], overviewUri?: string): string;
|
|
92
|
+
//# sourceMappingURL=docHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docHelpers.d.ts","sourceRoot":"","sources":["../../../src/core/utils/docHelpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CA8BR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,MAAM,CAeR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAkBV;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAuBrE;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,kBAAkB,EAAE,EACjC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAoBR"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation Helper Utilities
|
|
3
|
+
* Shared utilities for generating documentation across all features
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate API documentation in Markdown format
|
|
7
|
+
*
|
|
8
|
+
* @param documentation - The documentation structure
|
|
9
|
+
* @param categoryKey - The category key to look up
|
|
10
|
+
* @param apiName - The API name to find
|
|
11
|
+
* @returns Formatted Markdown documentation
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const doc = generateAPIDoc(
|
|
16
|
+
* LEADERBOARD_DOCUMENTATION,
|
|
17
|
+
* 'initialization',
|
|
18
|
+
* 'tap.getLeaderboardManager'
|
|
19
|
+
* );
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function generateAPIDoc(documentation, categoryKey, apiName) {
|
|
23
|
+
const category = documentation.categories[categoryKey];
|
|
24
|
+
if (!category) {
|
|
25
|
+
return `Category "${categoryKey}" not found`;
|
|
26
|
+
}
|
|
27
|
+
const api = category.apis.find(a => a.name === apiName);
|
|
28
|
+
if (!api) {
|
|
29
|
+
return `API "${apiName}" not found in category "${categoryKey}"`;
|
|
30
|
+
}
|
|
31
|
+
let doc = `# ${api.name}\n\n`;
|
|
32
|
+
doc += `**Method Signature:**\n\`\`\`javascript\n${api.method}\n\`\`\`\n\n`;
|
|
33
|
+
doc += `**Description:** ${api.description}\n\n`;
|
|
34
|
+
if (api.parameters) {
|
|
35
|
+
doc += `## Parameters\n\n`;
|
|
36
|
+
for (const [param, desc] of Object.entries(api.parameters)) {
|
|
37
|
+
doc += `- **\`${param}\`**: ${desc}\n`;
|
|
38
|
+
}
|
|
39
|
+
doc += '\n';
|
|
40
|
+
}
|
|
41
|
+
if (api.returnValue) {
|
|
42
|
+
doc += `## Returns\n\n${api.returnValue}\n\n`;
|
|
43
|
+
}
|
|
44
|
+
doc += `## Code Example\n\n\`\`\`javascript\n${api.example}\n\`\`\`\n`;
|
|
45
|
+
return doc;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate category documentation (all APIs in a category)
|
|
49
|
+
*
|
|
50
|
+
* @param documentation - The documentation structure
|
|
51
|
+
* @param categoryKey - The category key to generate
|
|
52
|
+
* @returns Formatted Markdown documentation
|
|
53
|
+
*/
|
|
54
|
+
export function generateCategoryDoc(documentation, categoryKey) {
|
|
55
|
+
const category = documentation.categories[categoryKey];
|
|
56
|
+
if (!category) {
|
|
57
|
+
return `Category "${categoryKey}" not found`;
|
|
58
|
+
}
|
|
59
|
+
let doc = `# ${category.title}\n\n${category.description}\n\n`;
|
|
60
|
+
for (const api of category.apis) {
|
|
61
|
+
doc += `## ${api.name}\n\n`;
|
|
62
|
+
doc += `${api.description}\n\n`;
|
|
63
|
+
doc += `\`\`\`javascript\n${api.example}\n\`\`\`\n\n`;
|
|
64
|
+
}
|
|
65
|
+
return doc;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Search documentation by keyword
|
|
69
|
+
*
|
|
70
|
+
* @param documentation - The documentation structure
|
|
71
|
+
* @param query - Search query
|
|
72
|
+
* @returns Array of matching API documentation strings
|
|
73
|
+
*/
|
|
74
|
+
export function searchDocumentation(documentation, query) {
|
|
75
|
+
const results = [];
|
|
76
|
+
const queryLower = query.toLowerCase();
|
|
77
|
+
for (const [categoryKey, category] of Object.entries(documentation.categories)) {
|
|
78
|
+
for (const api of category.apis) {
|
|
79
|
+
// Search in name, method, and description
|
|
80
|
+
if (api.name.toLowerCase().includes(queryLower) ||
|
|
81
|
+
api.method.toLowerCase().includes(queryLower) ||
|
|
82
|
+
api.description.toLowerCase().includes(queryLower)) {
|
|
83
|
+
results.push(generateAPIDoc(documentation, categoryKey, api.name));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate complete overview documentation
|
|
91
|
+
*
|
|
92
|
+
* @param documentation - The documentation structure
|
|
93
|
+
* @returns Formatted Markdown overview
|
|
94
|
+
*/
|
|
95
|
+
export function generateOverview(documentation) {
|
|
96
|
+
let doc = `# ${documentation.title}\n\n`;
|
|
97
|
+
doc += `${documentation.description}\n\n`;
|
|
98
|
+
if (documentation.apiReference) {
|
|
99
|
+
doc += `**Official Documentation**: ${documentation.apiReference}\n\n`;
|
|
100
|
+
}
|
|
101
|
+
doc += `## 📚 API Categories\n\n`;
|
|
102
|
+
for (const [key, category] of Object.entries(documentation.categories)) {
|
|
103
|
+
doc += `### ${category.title}\n\n`;
|
|
104
|
+
doc += `${category.description}\n\n`;
|
|
105
|
+
doc += `**APIs:**\n`;
|
|
106
|
+
for (const api of category.apis) {
|
|
107
|
+
doc += `- \`${api.name}\` - ${api.description.split('\n')[0]}\n`;
|
|
108
|
+
}
|
|
109
|
+
doc += `\n`;
|
|
110
|
+
}
|
|
111
|
+
return doc;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Generate search suggestions when no results found
|
|
115
|
+
*
|
|
116
|
+
* @param query - Search query
|
|
117
|
+
* @param suggestions - Array of resource suggestions
|
|
118
|
+
* @param overviewUri - URI of the overview resource
|
|
119
|
+
* @returns Formatted suggestion message
|
|
120
|
+
*/
|
|
121
|
+
export function generateSearchSuggestions(query, suggestions, overviewUri) {
|
|
122
|
+
let message = `No results found for "${query}".\n\n`;
|
|
123
|
+
message += `💡 **建议:直接读取相关 Resources 获取完整文档**\n\n`;
|
|
124
|
+
const queryLower = query.toLowerCase();
|
|
125
|
+
let foundSuggestions = false;
|
|
126
|
+
for (const suggestion of suggestions) {
|
|
127
|
+
if (suggestion.keywords.some(keyword => queryLower.includes(keyword))) {
|
|
128
|
+
message += `- ${suggestion.uri} - ${suggestion.description}\n`;
|
|
129
|
+
foundSuggestions = true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (!foundSuggestions && overviewUri) {
|
|
133
|
+
message += `\n或查看完整概览:\n`;
|
|
134
|
+
message += `- ${overviewUri} - 完整功能概览\n`;
|
|
135
|
+
}
|
|
136
|
+
return message;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=docHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docHelpers.js","sourceRoot":"","sources":["../../../src/core/utils/docHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP-compliant Logger for TapTap Minigame MCP Server
|
|
3
|
+
* Supports RFC 5424 log levels and dual output mode (stderr + MCP notifications)
|
|
4
|
+
*/
|
|
5
|
+
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* RFC 5424 log levels (syslog severity levels)
|
|
8
|
+
*/
|
|
9
|
+
export type LogLevel = 'debug' | 'info' | 'notice' | 'warning' | 'error' | 'critical' | 'alert' | 'emergency';
|
|
10
|
+
/**
|
|
11
|
+
* MCP-compliant Logger class
|
|
12
|
+
*/
|
|
13
|
+
export declare class Logger {
|
|
14
|
+
private verbose;
|
|
15
|
+
private currentLevel;
|
|
16
|
+
private server?;
|
|
17
|
+
private transport?;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Initialize logger with MCP server instance
|
|
21
|
+
*/
|
|
22
|
+
initialize(server: Server, transport: 'stdio' | 'sse'): void;
|
|
23
|
+
/**
|
|
24
|
+
* Set log level (implements MCP logging/setLevel)
|
|
25
|
+
*/
|
|
26
|
+
setLevel(level: LogLevel): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get current log level
|
|
29
|
+
*/
|
|
30
|
+
getLevel(): LogLevel;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a message should be logged based on current level
|
|
33
|
+
*/
|
|
34
|
+
private shouldLog;
|
|
35
|
+
/**
|
|
36
|
+
* Core logging method with dual output
|
|
37
|
+
* Pure dual-write: simple stderr + MCP notification
|
|
38
|
+
*/
|
|
39
|
+
private log;
|
|
40
|
+
/**
|
|
41
|
+
* Log debug message
|
|
42
|
+
*/
|
|
43
|
+
debug(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Log info message
|
|
46
|
+
*/
|
|
47
|
+
info(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Log notice message
|
|
50
|
+
*/
|
|
51
|
+
notice(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Log warning message
|
|
54
|
+
*/
|
|
55
|
+
warning(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Log error message
|
|
58
|
+
*/
|
|
59
|
+
error(message: string, error?: any, loggerName?: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Log critical message
|
|
62
|
+
*/
|
|
63
|
+
critical(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Log alert message
|
|
66
|
+
*/
|
|
67
|
+
alert(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Log emergency message
|
|
70
|
+
*/
|
|
71
|
+
emergency(message: string, data?: any, loggerName?: string): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Log tool call with input arguments
|
|
74
|
+
*/
|
|
75
|
+
logToolCall(toolName: string, args: any): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Log tool response with output
|
|
78
|
+
*/
|
|
79
|
+
logToolResponse(toolName: string, output: any, success?: boolean): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Log HTTP request
|
|
82
|
+
*/
|
|
83
|
+
logRequest(method: string, url: string, headers: Record<string, string>, body?: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Log HTTP response
|
|
86
|
+
*/
|
|
87
|
+
logResponse(method: string, url: string, status: number, statusText: string, body: any, success?: boolean, responseHeaders?: Record<string, string>): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Log client connection event
|
|
90
|
+
*/
|
|
91
|
+
logClientConnection(sessionId: string): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Log client disconnection event
|
|
94
|
+
*/
|
|
95
|
+
logClientDisconnection(sessionId: string): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Check if verbose mode is enabled
|
|
98
|
+
*/
|
|
99
|
+
isVerbose(): boolean;
|
|
100
|
+
}
|
|
101
|
+
export declare const logger: Logger;
|
|
102
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/utils/logger.ts"],"names":[],"mappings":"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"}
|