@xiedada/nodemw-mcp-server 0.0.1 → 0.0.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 (195) hide show
  1. package/LICENSE +24 -166
  2. package/README.md +124 -145
  3. package/dist/index.js +36 -63
  4. package/dist/index.js.map +7 -1
  5. package/package.json +5 -11
  6. package/dist/common/nodemwBot.d.ts +0 -21
  7. package/dist/common/nodemwBot.d.ts.map +0 -1
  8. package/dist/common/nodemwBot.js +0 -62
  9. package/dist/common/nodemwBot.js.map +0 -1
  10. package/dist/common/utils.d.ts +0 -7
  11. package/dist/common/utils.d.ts.map +0 -1
  12. package/dist/common/utils.js +0 -38
  13. package/dist/common/utils.js.map +0 -1
  14. package/dist/index.d.ts +0 -3
  15. package/dist/index.d.ts.map +0 -1
  16. package/dist/server.d.ts +0 -4
  17. package/dist/server.d.ts.map +0 -1
  18. package/dist/server.js +0 -9
  19. package/dist/server.js.map +0 -1
  20. package/dist/tools/editing/add-flow-topic.d.ts +0 -3
  21. package/dist/tools/editing/add-flow-topic.d.ts.map +0 -1
  22. package/dist/tools/editing/add-flow-topic.js +0 -25
  23. package/dist/tools/editing/add-flow-topic.js.map +0 -1
  24. package/dist/tools/editing/append.d.ts +0 -3
  25. package/dist/tools/editing/append.d.ts.map +0 -1
  26. package/dist/tools/editing/append.js +0 -26
  27. package/dist/tools/editing/append.js.map +0 -1
  28. package/dist/tools/editing/create-account.d.ts +0 -3
  29. package/dist/tools/editing/create-account.d.ts.map +0 -1
  30. package/dist/tools/editing/create-account.js +0 -24
  31. package/dist/tools/editing/create-account.js.map +0 -1
  32. package/dist/tools/editing/delete.d.ts +0 -3
  33. package/dist/tools/editing/delete.d.ts.map +0 -1
  34. package/dist/tools/editing/delete.js +0 -25
  35. package/dist/tools/editing/delete.js.map +0 -1
  36. package/dist/tools/editing/edit.d.ts +0 -3
  37. package/dist/tools/editing/edit.d.ts.map +0 -1
  38. package/dist/tools/editing/edit.js +0 -27
  39. package/dist/tools/editing/edit.js.map +0 -1
  40. package/dist/tools/editing/move.d.ts +0 -3
  41. package/dist/tools/editing/move.d.ts.map +0 -1
  42. package/dist/tools/editing/move.js +0 -26
  43. package/dist/tools/editing/move.js.map +0 -1
  44. package/dist/tools/editing/prepend.d.ts +0 -3
  45. package/dist/tools/editing/prepend.d.ts.map +0 -1
  46. package/dist/tools/editing/prepend.js +0 -26
  47. package/dist/tools/editing/prepend.js.map +0 -1
  48. package/dist/tools/editing/protect.d.ts +0 -3
  49. package/dist/tools/editing/protect.d.ts.map +0 -1
  50. package/dist/tools/editing/protect.js +0 -37
  51. package/dist/tools/editing/protect.js.map +0 -1
  52. package/dist/tools/editing/purge.d.ts +0 -3
  53. package/dist/tools/editing/purge.d.ts.map +0 -1
  54. package/dist/tools/editing/purge.js +0 -23
  55. package/dist/tools/editing/purge.js.map +0 -1
  56. package/dist/tools/editing/send-email.d.ts +0 -3
  57. package/dist/tools/editing/send-email.d.ts.map +0 -1
  58. package/dist/tools/editing/send-email.js +0 -25
  59. package/dist/tools/editing/send-email.js.map +0 -1
  60. package/dist/tools/editing/upload-by-url.d.ts +0 -3
  61. package/dist/tools/editing/upload-by-url.d.ts.map +0 -1
  62. package/dist/tools/editing/upload-by-url.js +0 -26
  63. package/dist/tools/editing/upload-by-url.js.map +0 -1
  64. package/dist/tools/editing/upload.d.ts +0 -3
  65. package/dist/tools/editing/upload.d.ts.map +0 -1
  66. package/dist/tools/editing/upload.js +0 -27
  67. package/dist/tools/editing/upload.js.map +0 -1
  68. package/dist/tools/index.d.ts +0 -3
  69. package/dist/tools/index.d.ts.map +0 -1
  70. package/dist/tools/index.js +0 -105
  71. package/dist/tools/index.js.map +0 -1
  72. package/dist/tools/ro/expand-templates.d.ts +0 -3
  73. package/dist/tools/ro/expand-templates.d.ts.map +0 -1
  74. package/dist/tools/ro/expand-templates.js +0 -28
  75. package/dist/tools/ro/expand-templates.js.map +0 -1
  76. package/dist/tools/ro/get-all-pages.d.ts +0 -3
  77. package/dist/tools/ro/get-all-pages.d.ts.map +0 -1
  78. package/dist/tools/ro/get-all-pages.js +0 -30
  79. package/dist/tools/ro/get-all-pages.js.map +0 -1
  80. package/dist/tools/ro/get-article-categories.d.ts +0 -3
  81. package/dist/tools/ro/get-article-categories.d.ts.map +0 -1
  82. package/dist/tools/ro/get-article-categories.js +0 -27
  83. package/dist/tools/ro/get-article-categories.js.map +0 -1
  84. package/dist/tools/ro/get-article-info.d.ts +0 -3
  85. package/dist/tools/ro/get-article-info.d.ts.map +0 -1
  86. package/dist/tools/ro/get-article-info.js +0 -35
  87. package/dist/tools/ro/get-article-info.js.map +0 -1
  88. package/dist/tools/ro/get-article-properties.d.ts +0 -3
  89. package/dist/tools/ro/get-article-properties.d.ts.map +0 -1
  90. package/dist/tools/ro/get-article-properties.js +0 -26
  91. package/dist/tools/ro/get-article-properties.js.map +0 -1
  92. package/dist/tools/ro/get-article-revisions.d.ts +0 -3
  93. package/dist/tools/ro/get-article-revisions.d.ts.map +0 -1
  94. package/dist/tools/ro/get-article-revisions.js +0 -29
  95. package/dist/tools/ro/get-article-revisions.js.map +0 -1
  96. package/dist/tools/ro/get-article.d.ts +0 -3
  97. package/dist/tools/ro/get-article.d.ts.map +0 -1
  98. package/dist/tools/ro/get-article.js +0 -54
  99. package/dist/tools/ro/get-article.js.map +0 -1
  100. package/dist/tools/ro/get-backlinks.d.ts +0 -3
  101. package/dist/tools/ro/get-backlinks.d.ts.map +0 -1
  102. package/dist/tools/ro/get-backlinks.js +0 -27
  103. package/dist/tools/ro/get-backlinks.js.map +0 -1
  104. package/dist/tools/ro/get-categories.d.ts +0 -3
  105. package/dist/tools/ro/get-categories.d.ts.map +0 -1
  106. package/dist/tools/ro/get-categories.js +0 -27
  107. package/dist/tools/ro/get-categories.js.map +0 -1
  108. package/dist/tools/ro/get-external-links.d.ts +0 -3
  109. package/dist/tools/ro/get-external-links.d.ts.map +0 -1
  110. package/dist/tools/ro/get-external-links.js +0 -27
  111. package/dist/tools/ro/get-external-links.js.map +0 -1
  112. package/dist/tools/ro/get-image-info.d.ts +0 -3
  113. package/dist/tools/ro/get-image-info.d.ts.map +0 -1
  114. package/dist/tools/ro/get-image-info.js +0 -29
  115. package/dist/tools/ro/get-image-info.js.map +0 -1
  116. package/dist/tools/ro/get-image-usage.d.ts +0 -3
  117. package/dist/tools/ro/get-image-usage.d.ts.map +0 -1
  118. package/dist/tools/ro/get-image-usage.js +0 -27
  119. package/dist/tools/ro/get-image-usage.js.map +0 -1
  120. package/dist/tools/ro/get-images-from-article.d.ts +0 -3
  121. package/dist/tools/ro/get-images-from-article.d.ts.map +0 -1
  122. package/dist/tools/ro/get-images-from-article.js +0 -27
  123. package/dist/tools/ro/get-images-from-article.js.map +0 -1
  124. package/dist/tools/ro/get-images.d.ts +0 -3
  125. package/dist/tools/ro/get-images.d.ts.map +0 -1
  126. package/dist/tools/ro/get-images.js +0 -43
  127. package/dist/tools/ro/get-images.js.map +0 -1
  128. package/dist/tools/ro/get-log.d.ts +0 -3
  129. package/dist/tools/ro/get-log.d.ts.map +0 -1
  130. package/dist/tools/ro/get-log.js +0 -46
  131. package/dist/tools/ro/get-log.js.map +0 -1
  132. package/dist/tools/ro/get-mediawiki-version.d.ts +0 -3
  133. package/dist/tools/ro/get-mediawiki-version.d.ts.map +0 -1
  134. package/dist/tools/ro/get-mediawiki-version.js +0 -20
  135. package/dist/tools/ro/get-mediawiki-version.js.map +0 -1
  136. package/dist/tools/ro/get-pages-by-prefix.d.ts +0 -3
  137. package/dist/tools/ro/get-pages-by-prefix.d.ts.map +0 -1
  138. package/dist/tools/ro/get-pages-by-prefix.js +0 -27
  139. package/dist/tools/ro/get-pages-by-prefix.js.map +0 -1
  140. package/dist/tools/ro/get-pages-in-category.d.ts +0 -3
  141. package/dist/tools/ro/get-pages-in-category.d.ts.map +0 -1
  142. package/dist/tools/ro/get-pages-in-category.js +0 -29
  143. package/dist/tools/ro/get-pages-in-category.js.map +0 -1
  144. package/dist/tools/ro/get-pages-in-namespace.d.ts +0 -3
  145. package/dist/tools/ro/get-pages-in-namespace.d.ts.map +0 -1
  146. package/dist/tools/ro/get-pages-in-namespace.js +0 -27
  147. package/dist/tools/ro/get-pages-in-namespace.js.map +0 -1
  148. package/dist/tools/ro/get-pages-transcluding.d.ts +0 -3
  149. package/dist/tools/ro/get-pages-transcluding.d.ts.map +0 -1
  150. package/dist/tools/ro/get-pages-transcluding.js +0 -32
  151. package/dist/tools/ro/get-pages-transcluding.js.map +0 -1
  152. package/dist/tools/ro/get-query-page.d.ts +0 -3
  153. package/dist/tools/ro/get-query-page.d.ts.map +0 -1
  154. package/dist/tools/ro/get-query-page.js +0 -27
  155. package/dist/tools/ro/get-query-page.js.map +0 -1
  156. package/dist/tools/ro/get-recent-changes.d.ts +0 -3
  157. package/dist/tools/ro/get-recent-changes.d.ts.map +0 -1
  158. package/dist/tools/ro/get-recent-changes.js +0 -43
  159. package/dist/tools/ro/get-recent-changes.js.map +0 -1
  160. package/dist/tools/ro/get-site-info.d.ts +0 -3
  161. package/dist/tools/ro/get-site-info.d.ts.map +0 -1
  162. package/dist/tools/ro/get-site-info.js +0 -23
  163. package/dist/tools/ro/get-site-info.js.map +0 -1
  164. package/dist/tools/ro/get-site-stats.d.ts +0 -3
  165. package/dist/tools/ro/get-site-stats.d.ts.map +0 -1
  166. package/dist/tools/ro/get-site-stats.js +0 -20
  167. package/dist/tools/ro/get-site-stats.js.map +0 -1
  168. package/dist/tools/ro/get-user-contribs.d.ts +0 -3
  169. package/dist/tools/ro/get-user-contribs.d.ts.map +0 -1
  170. package/dist/tools/ro/get-user-contribs.js +0 -39
  171. package/dist/tools/ro/get-user-contribs.js.map +0 -1
  172. package/dist/tools/ro/get-users.d.ts +0 -3
  173. package/dist/tools/ro/get-users.d.ts.map +0 -1
  174. package/dist/tools/ro/get-users.js +0 -29
  175. package/dist/tools/ro/get-users.js.map +0 -1
  176. package/dist/tools/ro/parse.d.ts +0 -3
  177. package/dist/tools/ro/parse.d.ts.map +0 -1
  178. package/dist/tools/ro/parse.js +0 -37
  179. package/dist/tools/ro/parse.js.map +0 -1
  180. package/dist/tools/ro/search.d.ts +0 -3
  181. package/dist/tools/ro/search.d.ts.map +0 -1
  182. package/dist/tools/ro/search.js +0 -32
  183. package/dist/tools/ro/search.js.map +0 -1
  184. package/dist/tools/ro/whoami.d.ts +0 -3
  185. package/dist/tools/ro/whoami.d.ts.map +0 -1
  186. package/dist/tools/ro/whoami.js +0 -20
  187. package/dist/tools/ro/whoami.js.map +0 -1
  188. package/dist/tools/ro/whoare.d.ts +0 -3
  189. package/dist/tools/ro/whoare.d.ts.map +0 -1
  190. package/dist/tools/ro/whoare.js +0 -19
  191. package/dist/tools/ro/whoare.js.map +0 -1
  192. package/dist/tools/ro/whois.d.ts +0 -3
  193. package/dist/tools/ro/whois.d.ts.map +0 -1
  194. package/dist/tools/ro/whois.js +0 -26
  195. package/dist/tools/ro/whois.js.map +0 -1
@@ -1,23 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function getSiteInfoTool(server) {
5
- return server.tool('get-site-info', 'Get site information from MediaWiki', {
6
- properties: z.array(z.string()).describe('List of site information properties to retrieve')
7
- }, {
8
- title: 'Get site info',
9
- readOnlyHint: true,
10
- destructiveHint: false
11
- }, async ({ properties }) => handleGetSiteInfoTool(properties));
12
- }
13
- async function handleGetSiteInfoTool(properties) {
14
- try {
15
- const bot = await getBot();
16
- const info = await promisifyBotMethod(bot, 'getSiteInfo', properties);
17
- return jsonResult(info || {});
18
- }
19
- catch (error) {
20
- return errorResult('Failed to get site info', error);
21
- }
22
- }
23
- //# sourceMappingURL=get-site-info.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-site-info.js","sourceRoot":"","sources":["../../../src/tools/ro/get-site-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAE,MAAiB;IACjD,OAAO,MAAM,CAAC,IAAI,CACjB,eAAe,EACf,qCAAqC,EACrC;QACC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;KAC3F,EACD;QACC,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,UAAU,EAAE,EAAG,EAAE,CAAC,qBAAqB,CAAE,UAAU,CAAE,CAC/D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,UAAoB;IAEpB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CACpC,GAAG,EACH,aAAa,EACb,UAAU,CACV,CAAC;QAEF,OAAO,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getSiteStatsTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=get-site-stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-site-stats.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-site-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAiBzF,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAYpE"}
@@ -1,20 +0,0 @@
1
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
2
- import { jsonResult, errorResult } from '../../common/utils.js';
3
- export function getSiteStatsTool(server) {
4
- return server.tool('get-site-stats', 'Get site statistics', {}, {
5
- title: 'Get site stats',
6
- readOnlyHint: true,
7
- destructiveHint: false
8
- }, async () => handleGetSiteStatsTool());
9
- }
10
- async function handleGetSiteStatsTool() {
11
- try {
12
- const bot = await getBot();
13
- const stats = await promisifyBotMethod(bot, 'getSiteStats');
14
- return jsonResult(stats);
15
- }
16
- catch (error) {
17
- return errorResult('Failed to get site stats', error);
18
- }
19
- }
20
- //# sourceMappingURL=get-site-stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-site-stats.js","sourceRoot":"","sources":["../../../src/tools/ro/get-site-stats.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAchE,MAAM,UAAU,gBAAgB,CAAE,MAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CACjB,gBAAgB,EAChB,qBAAqB,EACrB,EAAE,EACF;QACC,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,IAAI,EAAE,CAAC,sBAAsB,EAAE,CACpC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACrC,GAAG,EACH,cAAc,CACd,CAAC;QAEF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;IAChE,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getUserContribsTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=get-user-contribs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-user-contribs.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-user-contribs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAazF,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAgBvE"}
@@ -1,39 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function getUserContribsTool(server) {
5
- return server.tool('get-user-contribs', 'Get contributions made by a specific user', {
6
- username: z.string().describe('Username to get contributions for'),
7
- namespace: z.number().optional().describe('Filter contributions by namespace'),
8
- limit: z.number().optional().default(50).describe('Maximum number of contributions to return')
9
- }, {
10
- title: 'Get user contributions',
11
- readOnlyHint: true,
12
- destructiveHint: false
13
- }, async ({ username, namespace, limit }) => handleGetUserContribsTool(username, namespace, limit));
14
- }
15
- async function handleGetUserContribsTool(username, namespace, limit = 50) {
16
- try {
17
- const bot = await getBot();
18
- const options = {
19
- user: username,
20
- ...(namespace !== undefined && { namespace })
21
- };
22
- const callbackArgs = await promisifyBotMethod(bot, 'getUserContribs', options);
23
- const contribs = Array.isArray(callbackArgs[1]) ? callbackArgs[1] : [];
24
- // Limit results
25
- const limitedContribs = contribs.slice(0, limit);
26
- return jsonResult({
27
- username,
28
- namespace,
29
- limit,
30
- total: contribs.length,
31
- displayed: limitedContribs.length,
32
- contributions: limitedContribs
33
- });
34
- }
35
- catch (error) {
36
- return errorResult('Failed to get user contributions', error);
37
- }
38
- }
39
- //# sourceMappingURL=get-user-contribs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-user-contribs.js","sourceRoot":"","sources":["../../../src/tools/ro/get-user-contribs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUhE,MAAM,UAAU,mBAAmB,CAAE,MAAiB;IACrD,OAAO,MAAM,CAAC,IAAI,CACjB,mBAAmB,EACnB,2CAA2C,EAC3C;QACC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC9F,EACD;QACC,KAAK,EAAE,wBAAwB;QAC/B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,yBAAyB,CAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAE,CACnG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CACvC,QAAgB,EAChB,SAAkB,EAClB,QAAgB,EAAE;IAElB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG;YACf,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;SAC7C,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC5C,GAAG,EACH,iBAAiB,EACjB,OAAO,CACP,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvE,gBAAgB;QAChB,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEjD,OAAO,UAAU,CAAC;YACjB,QAAQ;YACR,SAAS;YACT,KAAK;YACL,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,SAAS,EAAE,eAAe,CAAC,MAAM;YACjC,aAAa,EAAE,eAAe;SAC9B,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,kCAAkC,EAAE,KAAc,CAAC,CAAC;IACxE,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getUsersTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=get-users.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-users.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAWzF,wBAAgB,YAAY,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAehE"}
@@ -1,29 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function getUsersTool(server) {
5
- return server.tool('get-users', 'Get all users matching a prefix', {
6
- prefix: z.string().optional().default('').describe('Prefix to filter usernames'),
7
- onlyWithEdits: z.boolean().optional().default(false).describe('Only include users with at least one edit')
8
- }, {
9
- title: 'Get users',
10
- readOnlyHint: true,
11
- destructiveHint: false
12
- }, async ({ prefix, onlyWithEdits }) => handleGetUsersTool(prefix, onlyWithEdits));
13
- }
14
- async function handleGetUsersTool(prefix, onlyWithEdits) {
15
- try {
16
- const bot = await getBot();
17
- const results = await promisifyBotMethod(bot, 'getUsers', { prefix, witheditsonly: onlyWithEdits });
18
- return jsonResult({
19
- prefix,
20
- onlyWithEdits,
21
- users: results,
22
- count: results.length
23
- });
24
- }
25
- catch (error) {
26
- return errorResult('Failed to get users', error);
27
- }
28
- }
29
- //# sourceMappingURL=get-users.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-users.js","sourceRoot":"","sources":["../../../src/tools/ro/get-users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQhE,MAAM,UAAU,YAAY,CAAE,MAAiB;IAC9C,OAAO,MAAM,CAAC,IAAI,CACjB,WAAW,EACX,iCAAiC,EACjC;QACC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAChF,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC1G,EACD;QACC,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,MAAM,EAAE,aAAa,EAAE,EAAG,EAAE,CAAC,kBAAkB,CAAE,MAAM,EAAE,aAAa,CAAE,CAClF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,MAAc,EACd,aAAsB;IAEtB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CACvC,GAAG,EACH,UAAU,EACV,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,CACxC,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,MAAM;YACN,aAAa;YACb,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,OAAO,CAAC,MAAM;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,qBAAqB,EAAE,KAAc,CAAC,CAAC;IAC3D,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function parseTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAIzF,wBAAgB,SAAS,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAe7D"}
@@ -1,37 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- export function parseTool(server) {
4
- return server.tool('parse', 'Parse wikitext to HTML', {
5
- text: z.string().describe('Wikitext to parse'),
6
- title: z.string().optional().describe('Context page title')
7
- }, {
8
- title: 'Parse wikitext',
9
- readOnlyHint: true,
10
- destructiveHint: false
11
- }, async ({ text, title }) => handleParseTool(text, title));
12
- }
13
- async function handleParseTool(text, title) {
14
- try {
15
- const bot = await getBot();
16
- const callbackArgs = await promisifyBotMethod(bot, 'parse', text, title || '');
17
- const xml = callbackArgs[1] || '';
18
- const images = Array.isArray(callbackArgs[2]) ? callbackArgs[2] : [];
19
- const output = [
20
- 'Parsed XML structure:',
21
- '',
22
- xml,
23
- '',
24
- `Images found: ${images.length > 0 ? images.join(', ') : 'none'}`
25
- ].join('\n');
26
- return {
27
- content: [{ type: 'text', text: output }]
28
- };
29
- }
30
- catch (error) {
31
- return {
32
- content: [{ type: 'text', text: `Error: ${error.message}` }],
33
- isError: true
34
- };
35
- }
36
- }
37
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/tools/ro/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,UAAU,SAAS,CAAE,MAAiB;IAC3C,OAAO,MAAM,CAAC,IAAI,CACjB,OAAO,EACP,wBAAwB,EACxB;QACC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC3D,EACD;QACC,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,eAAe,CAAE,IAAI,EAAE,KAAK,CAAE,CAC3D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,IAAY,EACZ,KAAc;IAEd,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC5C,GAAG,EACH,OAAO,EACP,IAAI,EACJ,KAAK,IAAI,EAAE,CACX,CAAC;QAEF,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,MAAM,MAAM,GAAG;YACd,uBAAuB;YACvB,EAAE;YACF,GAAG;YACH,EAAE;YACF,iBAAiB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;SACjE,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;QAEf,OAAO;YACN,OAAO,EAAE,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAE;SAC3C,CAAC;IACH,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO;YACN,OAAO,EAAE,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAa,KAAgB,CAAC,OAAQ,EAAE,EAAE,CAAE;YAC7E,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function searchTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAazF,wBAAgB,UAAU,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAe9D"}
@@ -1,32 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function searchTool(server) {
5
- return server.tool('search', 'Search for wiki pages by keyword', {
6
- keyword: z.string().describe('Search keyword'),
7
- limit: z.number().optional().default(10).describe('Maximum number of results')
8
- }, {
9
- title: 'Search',
10
- readOnlyHint: true,
11
- destructiveHint: false
12
- }, async ({ keyword, limit }) => handleSearchTool(keyword, limit));
13
- }
14
- async function handleSearchTool(keyword, limit) {
15
- try {
16
- const bot = await getBot();
17
- // nodemw search returns array of results directly
18
- const results = await promisifyBotMethod(bot, 'search', keyword);
19
- // Limit results
20
- const limitedResults = results.slice(0, limit);
21
- return jsonResult({
22
- total: results.length,
23
- limit,
24
- keyword,
25
- results: limitedResults
26
- });
27
- }
28
- catch (error) {
29
- return errorResult('Failed to search', error);
30
- }
31
- }
32
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/ro/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUhE,MAAM,UAAU,UAAU,CAAE,MAAiB;IAC5C,OAAO,MAAM,CAAC,IAAI,CACjB,QAAQ,EACR,kCAAkC,EAClC;QACC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAE,gBAAgB,CAAE;QAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAE,EAAE,CAAE,CAAC,QAAQ,CAAE,2BAA2B,CAAE;KAClF,EACD;QACC,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,gBAAgB,CAAE,OAAO,EAAE,KAAK,CAAE,CAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,OAAe,EACf,KAAa;IAEb,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAE3B,kDAAkD;QAClD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CACvC,GAAG,EACH,QAAQ,EACR,OAAO,CACP,CAAC;QAEF,gBAAgB;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC,EAAE,KAAK,CAAE,CAAC;QAEjD,OAAO,UAAU,CAAC;YACjB,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,KAAK;YACL,OAAO;YACP,OAAO,EAAE,cAAc;SACvB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,kBAAkB,EAAE,KAAc,CAAC,CAAC;IACxD,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function whoamiTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=whoami.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAazF,wBAAgB,UAAU,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAY9D"}
@@ -1,20 +0,0 @@
1
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
2
- import { jsonResult, errorResult } from '../../common/utils.js';
3
- export function whoamiTool(server) {
4
- return server.tool('whoami', 'Get information about the currently logged in user', {}, {
5
- title: 'Who am I',
6
- readOnlyHint: true,
7
- destructiveHint: false
8
- }, async () => handleWhoamiTool());
9
- }
10
- async function handleWhoamiTool() {
11
- try {
12
- const bot = await getBot();
13
- const userInfo = await promisifyBotMethod(bot, 'whoami');
14
- return jsonResult(userInfo);
15
- }
16
- catch (error) {
17
- return errorResult('Failed to get current user info', error);
18
- }
19
- }
20
- //# sourceMappingURL=whoami.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/tools/ro/whoami.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUhE,MAAM,UAAU,UAAU,CAAE,MAAiB;IAC5C,OAAO,MAAM,CAAC,IAAI,CACjB,QAAQ,EACR,oDAAoD,EACpD,EAAE,EACF;QACC,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACxC,GAAG,EACH,QAAQ,CACR,CAAC;QAEF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,iCAAiC,EAAE,KAAc,CAAC,CAAC;IACvE,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function whoareTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=whoare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoare.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/whoare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAKzF,wBAAgB,UAAU,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAU9D"}
@@ -1,19 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function whoareTool(server) {
5
- return server.tool('whoare', 'Get information about multiple wiki users', {
6
- usernames: z.array(z.string()).describe('Array of usernames to query'),
7
- }, {}, async (params) => handleWhoareTool(params));
8
- }
9
- async function handleWhoareTool(params) {
10
- try {
11
- const bot = await getBot();
12
- const users = await promisifyBotMethod(bot, 'whoare', params.usernames);
13
- return jsonResult(users);
14
- }
15
- catch (error) {
16
- return errorResult('Failed to get user information', error);
17
- }
18
- }
19
- //# sourceMappingURL=whoare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoare.js","sourceRoot":"","sources":["../../../src/tools/ro/whoare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,UAAU,CAAE,MAAiB;IAC5C,OAAO,MAAM,CAAC,IAAI,CACjB,QAAQ,EACR,2CAA2C,EAC3C;QACC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAE,CAAC,CAAC,MAAM,EAAE,CAAE,CAAC,QAAQ,CAAE,6BAA6B,CAAE;KAC1E,EACD,EAAE,EACF,KAAK,EAAG,MAAM,EAAG,EAAE,CAAC,gBAAgB,CAAE,MAAM,CAAE,CAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,MAEC;IAED,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACrC,GAAG,EACH,QAAQ,EACR,MAAM,CAAC,SAAS,CAChB,CAAC;QAEF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,gCAAgC,EAAE,KAAc,CAAC,CAAC;IACtE,CAAC;AACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function whoisTool(server: McpServer): RegisteredTool;
3
- //# sourceMappingURL=whois.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whois.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/whois.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAazF,wBAAgB,SAAS,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAc7D"}
@@ -1,26 +0,0 @@
1
- import { z } from 'zod';
2
- import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
- import { jsonResult, errorResult } from '../../common/utils.js';
4
- export function whoisTool(server) {
5
- return server.tool('whois', 'Get information about a specific user', {
6
- username: z.string().describe('Username to look up')
7
- }, {
8
- title: 'Whois',
9
- readOnlyHint: true,
10
- destructiveHint: false
11
- }, async ({ username }) => handleWhoisTool(username));
12
- }
13
- async function handleWhoisTool(username) {
14
- try {
15
- const bot = await getBot();
16
- const userInfo = await promisifyBotMethod(bot, 'whois', username);
17
- if (userInfo.missing) {
18
- return errorResult(`User "${username}" not found.`);
19
- }
20
- return jsonResult(userInfo);
21
- }
22
- catch (error) {
23
- return errorResult('Failed to get user info', error);
24
- }
25
- }
26
- //# sourceMappingURL=whois.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whois.js","sourceRoot":"","sources":["../../../src/tools/ro/whois.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUhE,MAAM,UAAU,SAAS,CAAE,MAAiB;IAC3C,OAAO,MAAM,CAAC,IAAI,CACjB,OAAO,EACP,uCAAuC,EACvC;QACC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACpD,EACD;QACC,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,QAAQ,EAAE,EAAG,EAAE,CAAC,eAAe,CAAE,QAAQ,CAAE,CACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,QAAgB;IAEhB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACxC,GAAG,EACH,OAAO,EACP,QAAQ,CACR,CAAC;QAEF,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC,SAAS,QAAQ,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC"}