@gala-chain/launchpad-mcp-server 1.3.0 → 1.5.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 (48) hide show
  1. package/README.md +128 -0
  2. package/dist/constants/mcpToolNames.d.ts +159 -0
  3. package/dist/constants/mcpToolNames.d.ts.map +1 -0
  4. package/dist/constants/mcpToolNames.js +131 -0
  5. package/dist/constants/mcpToolNames.js.map +1 -0
  6. package/dist/prompts/__tests__/promptStructure.test.d.ts +7 -0
  7. package/dist/prompts/__tests__/promptStructure.test.d.ts.map +1 -0
  8. package/dist/prompts/__tests__/promptStructure.test.js +106 -0
  9. package/dist/prompts/__tests__/promptStructure.test.js.map +1 -0
  10. package/dist/prompts/__tests__/registry.test.d.ts +7 -0
  11. package/dist/prompts/__tests__/registry.test.d.ts.map +1 -0
  12. package/dist/prompts/__tests__/registry.test.js +119 -0
  13. package/dist/prompts/__tests__/registry.test.js.map +1 -0
  14. package/dist/prompts/analysis.d.ts +31 -0
  15. package/dist/prompts/analysis.d.ts.map +1 -0
  16. package/dist/prompts/analysis.js +342 -0
  17. package/dist/prompts/analysis.js.map +1 -0
  18. package/dist/prompts/index.d.ts +83 -0
  19. package/dist/prompts/index.d.ts.map +1 -0
  20. package/dist/prompts/index.js +117 -0
  21. package/dist/prompts/index.js.map +1 -0
  22. package/dist/prompts/portfolio.d.ts +31 -0
  23. package/dist/prompts/portfolio.d.ts.map +1 -0
  24. package/dist/prompts/portfolio.js +233 -0
  25. package/dist/prompts/portfolio.js.map +1 -0
  26. package/dist/prompts/trading.d.ts +27 -0
  27. package/dist/prompts/trading.d.ts.map +1 -0
  28. package/dist/prompts/trading.js +179 -0
  29. package/dist/prompts/trading.js.map +1 -0
  30. package/dist/prompts/utils/workflowTemplates.d.ts +103 -0
  31. package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -0
  32. package/dist/prompts/utils/workflowTemplates.js +315 -0
  33. package/dist/prompts/utils/workflowTemplates.js.map +1 -0
  34. package/dist/server.d.ts +4 -0
  35. package/dist/server.d.ts.map +1 -1
  36. package/dist/server.js +51 -1
  37. package/dist/server.js.map +1 -1
  38. package/dist/types/mcp.d.ts +29 -0
  39. package/dist/types/mcp.d.ts.map +1 -1
  40. package/dist/utils/__tests__/validation.test.d.ts +7 -0
  41. package/dist/utils/__tests__/validation.test.d.ts.map +1 -0
  42. package/dist/utils/__tests__/validation.test.js +122 -0
  43. package/dist/utils/__tests__/validation.test.js.map +1 -0
  44. package/dist/utils/validation.d.ts +162 -0
  45. package/dist/utils/validation.d.ts.map +1 -0
  46. package/dist/utils/validation.js +276 -0
  47. package/dist/utils/validation.js.map +1 -0
  48. package/package.json +2 -2
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /**
3
+ * Prompt Registry Tests
4
+ *
5
+ * Tests for prompt registration, lookup, and utility functions
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const index_1 = require("../index");
9
+ describe('Prompt Registry', () => {
10
+ describe('prompts array', () => {
11
+ it('should contain exactly 14 prompts', () => {
12
+ expect(index_1.prompts).toHaveLength(14);
13
+ });
14
+ it('should have all unique prompt names', () => {
15
+ const names = index_1.prompts.map((p) => p.name);
16
+ const uniqueNames = new Set(names);
17
+ expect(uniqueNames.size).toBe(names.length);
18
+ });
19
+ it('should have all prompts with galachain-launchpad prefix', () => {
20
+ index_1.prompts.forEach((prompt) => {
21
+ expect(prompt.name).toMatch(/^galachain-launchpad:/);
22
+ });
23
+ });
24
+ });
25
+ describe('getPrompt()', () => {
26
+ it('should return prompt for valid name', () => {
27
+ const prompt = (0, index_1.getPrompt)('galachain-launchpad:analyze-token');
28
+ expect(prompt).toBeDefined();
29
+ expect(prompt?.name).toBe('galachain-launchpad:analyze-token');
30
+ });
31
+ it('should return undefined for invalid name', () => {
32
+ const prompt = (0, index_1.getPrompt)('non-existent-prompt');
33
+ expect(prompt).toBeUndefined();
34
+ });
35
+ it('should find all 14 prompts by name', () => {
36
+ const names = [
37
+ 'galachain-launchpad:analyze-token',
38
+ 'galachain-launchpad:buy-tokens',
39
+ 'galachain-launchpad:sell-tokens',
40
+ 'galachain-launchpad:graduate-token',
41
+ 'galachain-launchpad:portfolio',
42
+ 'galachain-launchpad:tokens-held',
43
+ 'galachain-launchpad:tokens-created',
44
+ 'galachain-launchpad:balance',
45
+ 'galachain-launchpad:profile',
46
+ 'galachain-launchpad:compare-tokens',
47
+ 'galachain-launchpad:graduation-status',
48
+ 'galachain-launchpad:spot-prices',
49
+ 'galachain-launchpad:pool-details',
50
+ 'galachain-launchpad:trade-history',
51
+ ];
52
+ names.forEach((name) => {
53
+ const prompt = (0, index_1.getPrompt)(name);
54
+ expect(prompt).toBeDefined();
55
+ expect(prompt?.name).toBe(name);
56
+ });
57
+ });
58
+ it('should use O(1) Map lookup (performance test)', () => {
59
+ const iterations = 10000;
60
+ const start = Date.now();
61
+ for (let i = 0; i < iterations; i++) {
62
+ (0, index_1.getPrompt)('galachain-launchpad:analyze-token');
63
+ }
64
+ const duration = Date.now() - start;
65
+ // Should complete 10k lookups in under 100ms (Map is O(1))
66
+ expect(duration).toBeLessThan(100);
67
+ });
68
+ });
69
+ describe('getPromptNames()', () => {
70
+ it('should return array of all prompt names', () => {
71
+ const names = (0, index_1.getPromptNames)();
72
+ expect(names).toHaveLength(14);
73
+ expect(names).toContain('galachain-launchpad:analyze-token');
74
+ expect(names).toContain('galachain-launchpad:buy-tokens');
75
+ });
76
+ it('should return names in consistent order', () => {
77
+ const names1 = (0, index_1.getPromptNames)();
78
+ const names2 = (0, index_1.getPromptNames)();
79
+ expect(names1).toEqual(names2);
80
+ });
81
+ });
82
+ describe('hasPrompt()', () => {
83
+ it('should return true for existing prompts', () => {
84
+ expect((0, index_1.hasPrompt)('galachain-launchpad:analyze-token')).toBe(true);
85
+ expect((0, index_1.hasPrompt)('galachain-launchpad:buy-tokens')).toBe(true);
86
+ });
87
+ it('should return false for non-existent prompts', () => {
88
+ expect((0, index_1.hasPrompt)('invalid-prompt')).toBe(false);
89
+ expect((0, index_1.hasPrompt)('')).toBe(false);
90
+ });
91
+ });
92
+ describe('getPromptsByCategory()', () => {
93
+ it('should return 4 trading prompts', () => {
94
+ const trading = (0, index_1.getPromptsByCategory)('trading');
95
+ expect(trading).toHaveLength(4);
96
+ expect(trading[0].name).toContain('analyze-token');
97
+ expect(trading[1].name).toContain('buy-tokens');
98
+ });
99
+ it('should return 5 portfolio prompts', () => {
100
+ const portfolio = (0, index_1.getPromptsByCategory)('portfolio');
101
+ expect(portfolio).toHaveLength(5);
102
+ expect(portfolio[0].name).toContain('portfolio');
103
+ });
104
+ it('should return 5 analysis prompts', () => {
105
+ const analysis = (0, index_1.getPromptsByCategory)('analysis');
106
+ expect(analysis).toHaveLength(5);
107
+ });
108
+ it('should return empty array for invalid category', () => {
109
+ const result = (0, index_1.getPromptsByCategory)('invalid');
110
+ expect(result).toEqual([]);
111
+ });
112
+ });
113
+ describe('getPromptCount()', () => {
114
+ it('should return 14', () => {
115
+ expect((0, index_1.getPromptCount)()).toBe(14);
116
+ });
117
+ });
118
+ });
119
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Analysis Prompts
3
+ *
4
+ * Slash commands for token analysis and comparison on Gala Launchpad
5
+ */
6
+ import type { MCPPrompt } from '../types/mcp.js';
7
+ /**
8
+ * Compare Tokens - Side-by-side comparison
9
+ */
10
+ export declare const compareTokensPrompt: MCPPrompt;
11
+ /**
12
+ * Graduation Status - Check multiple tokens for graduation readiness
13
+ */
14
+ export declare const graduationStatusPrompt: MCPPrompt;
15
+ /**
16
+ * Spot Prices - Batch spot price lookup
17
+ */
18
+ export declare const spotPricesPrompt: MCPPrompt;
19
+ /**
20
+ * Pool Details - Comprehensive pool information
21
+ */
22
+ export declare const poolDetailsPrompt: MCPPrompt;
23
+ /**
24
+ * Trade History - Recent trades with filters
25
+ */
26
+ export declare const tradeHistoryPrompt: MCPPrompt;
27
+ /**
28
+ * Export all analysis prompts
29
+ */
30
+ export declare const analysisPrompts: MCPPrompt[];
31
+ //# sourceMappingURL=analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/prompts/analysis.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAkEjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAsDpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SA8C9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAiE/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SA4EhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,EAMtC,CAAC"}
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ /**
3
+ * Analysis Prompts
4
+ *
5
+ * Slash commands for token analysis and comparison on Gala Launchpad
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.analysisPrompts = exports.tradeHistoryPrompt = exports.poolDetailsPrompt = exports.spotPricesPrompt = exports.graduationStatusPrompt = exports.compareTokensPrompt = void 0;
9
+ const mcpToolNames_js_1 = require("../constants/mcpToolNames.js");
10
+ const validation_js_1 = require("../utils/validation.js");
11
+ /**
12
+ * Compare Tokens - Side-by-side comparison
13
+ */
14
+ exports.compareTokensPrompt = {
15
+ name: 'galachain-launchpad:compare-tokens',
16
+ description: 'Compare two Launchpad tokens side-by-side with detailed metrics',
17
+ arguments: [
18
+ {
19
+ name: 'token1',
20
+ description: 'First token to compare (e.g., anime)',
21
+ required: true,
22
+ },
23
+ {
24
+ name: 'token2',
25
+ description: 'Second token to compare (e.g., test216253)',
26
+ required: true,
27
+ },
28
+ ],
29
+ handler: (args) => {
30
+ // Validate inputs
31
+ (0, validation_js_1.validateTokenName)(args.token1, 'token1');
32
+ (0, validation_js_1.validateTokenName)(args.token2, 'token2');
33
+ return [
34
+ {
35
+ role: 'user',
36
+ content: {
37
+ type: 'text',
38
+ text: `Compare two Launchpad tokens side-by-side:
39
+
40
+ Token 1: ${args.token1}
41
+ Token 2: ${args.token2}
42
+
43
+ For EACH token, use the optimized pattern:
44
+
45
+ 1. Fetch pool details using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
46
+
47
+ 2. Calculate metrics using LOCAL mode:
48
+ - Spot price: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_LAUNCHPAD_TOKEN_SPOT_PRICE}
49
+ - Graduation cost: ${mcpToolNames_js_1.MCP_TOOLS.CALCULATE_BUY_AMOUNT_FOR_GRADUATION}
50
+ - Is graduated: ${mcpToolNames_js_1.MCP_TOOLS.IS_TOKEN_GRADUATED}
51
+
52
+ 3. Get additional data:
53
+ - Full pool details: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS}
54
+ - Token distribution: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_DISTRIBUTION}
55
+ - Badges: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_BADGES}
56
+
57
+ Present a comparison table:
58
+
59
+ | Metric | ${args.token1} | ${args.token2} |
60
+ |--------|--------|--------|
61
+ | Spot Price (USD) | ... | ... |
62
+ | Market Cap Estimate | ... | ... |
63
+ | Pool Status | ... | ... |
64
+ | Progress to Graduation | ... | ... |
65
+ | Remaining Tokens | ... | ... |
66
+ | GALA to Graduate | ... | ... |
67
+ | Holder Count | ... | ... |
68
+ | Creator Status | ... | ... |
69
+
70
+ Provide analysis:
71
+ - Which token is closer to graduation?
72
+ - Which has better liquidity?
73
+ - Which might be a better investment and why?
74
+ - Any notable badges or achievements?`,
75
+ },
76
+ },
77
+ ];
78
+ },
79
+ };
80
+ /**
81
+ * Graduation Status - Check multiple tokens for graduation readiness
82
+ */
83
+ exports.graduationStatusPrompt = {
84
+ name: 'galachain-launchpad:graduation-status',
85
+ description: 'Check graduation status and readiness for multiple tokens',
86
+ arguments: [
87
+ {
88
+ name: 'tokens',
89
+ description: 'Comma-separated token names (e.g., anime,test216253,dragnrkti)',
90
+ required: true,
91
+ },
92
+ ],
93
+ handler: (args) => {
94
+ // Validate inputs
95
+ const tokenArray = (0, validation_js_1.validateTokenList)(args.tokens);
96
+ return [
97
+ {
98
+ role: 'user',
99
+ content: {
100
+ type: 'text',
101
+ text: `Check graduation status for multiple tokens:
102
+
103
+ Tokens: ${args.tokens}
104
+
105
+ For EACH token in the list:
106
+
107
+ 1. Check if graduated: ${mcpToolNames_js_1.MCP_TOOLS.IS_TOKEN_GRADUATED}
108
+
109
+ 2. If not graduated, use optimized pattern:
110
+ a. Fetch pool details: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
111
+ b. Calculate graduation cost: ${mcpToolNames_js_1.MCP_TOOLS.CALCULATE_BUY_AMOUNT_FOR_GRADUATION} (LOCAL mode)
112
+ c. Calculate progress: (currentSupply / maxSupply * 100)
113
+
114
+ 3. Get full pool details: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS}
115
+
116
+ Present a table:
117
+
118
+ | Token | Status | Progress | Remaining Tokens | GALA to Graduate | Frontend URL |
119
+ |-------|--------|----------|------------------|------------------|--------------|
120
+ | ... | ... | ... | ... | ... | ... |
121
+
122
+ Summary:
123
+ - Total tokens analyzed: ${tokenArray.length}
124
+ - Already graduated: [count]
125
+ - Close to graduation (>90%): [count]
126
+ - Mid-progress (50-90%): [count]
127
+ - Early stage (<50%): [count]
128
+
129
+ Provide recommendations:
130
+ - Which tokens are good graduation opportunities?
131
+ - Which tokens might be undervalued?`,
132
+ },
133
+ },
134
+ ];
135
+ },
136
+ };
137
+ /**
138
+ * Spot Prices - Batch spot price lookup
139
+ */
140
+ exports.spotPricesPrompt = {
141
+ name: 'galachain-launchpad:spot-prices',
142
+ description: 'Get spot prices for multiple Launchpad tokens efficiently',
143
+ arguments: [
144
+ {
145
+ name: 'tokens',
146
+ description: 'Comma-separated token names (e.g., anime,test216253,dragnrkti)',
147
+ required: true,
148
+ },
149
+ ],
150
+ handler: (args) => {
151
+ // Validate inputs
152
+ (0, validation_js_1.validateTokenList)(args.tokens);
153
+ return [
154
+ {
155
+ role: 'user',
156
+ content: {
157
+ type: 'text',
158
+ text: `Get spot prices for multiple Launchpad tokens:
159
+
160
+ Tokens: ${args.tokens}
161
+
162
+ Use the optimized batch pattern for EACH token:
163
+
164
+ 1. Fetch pool details: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
165
+ 2. Calculate spot price: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_LAUNCHPAD_TOKEN_SPOT_PRICE} (LOCAL mode)
166
+
167
+ Also get GALA spot price: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_GALA_SPOT_PRICE}
168
+
169
+ Present results:
170
+
171
+ **GALA Spot Price:** $[price]
172
+
173
+ **Launchpad Token Prices:**
174
+ | Token | USD Price | GALA Price | Market Cap Est. |
175
+ |-------|-----------|------------|-----------------|
176
+ | ... | ... | ... | ... |
177
+
178
+ Performance note: Using LOCAL calculations - instant results with <0.01% difference from external!
179
+
180
+ Sort by USD price (highest to lowest).`,
181
+ },
182
+ },
183
+ ];
184
+ },
185
+ };
186
+ /**
187
+ * Pool Details - Comprehensive pool information
188
+ */
189
+ exports.poolDetailsPrompt = {
190
+ name: 'galachain-launchpad:pool-details',
191
+ description: 'Get comprehensive pool information including distribution and badges',
192
+ arguments: [
193
+ {
194
+ name: 'tokenName',
195
+ description: 'Token to analyze (e.g., anime)',
196
+ required: true,
197
+ },
198
+ ],
199
+ handler: (args) => {
200
+ // Validate inputs
201
+ (0, validation_js_1.validateTokenName)(args.tokenName);
202
+ return [
203
+ {
204
+ role: 'user',
205
+ content: {
206
+ type: 'text',
207
+ text: `Get comprehensive pool information for "${args.tokenName}":
208
+
209
+ 1. Full pool details: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS}
210
+ 2. Token distribution: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_DISTRIBUTION}
211
+ 3. Achievement badges: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_BADGES}
212
+ 4. Recent volume data (last 24h): ${mcpToolNames_js_1.MCP_TOOLS.FETCH_VOLUME_DATA} with 1h resolution
213
+ 5. Check if graduated: ${mcpToolNames_js_1.MCP_TOOLS.IS_TOKEN_GRADUATED}
214
+ 6. Frontend URL: ${mcpToolNames_js_1.MCP_TOOLS.GET_URL_BY_TOKEN_NAME}
215
+
216
+ Display organized sections:
217
+
218
+ **Basic Info:**
219
+ - Token name and symbol
220
+ - Pool status
221
+ - Created by
222
+ - Frontend URL
223
+
224
+ **Supply Metrics:**
225
+ - Current supply
226
+ - Maximum supply
227
+ - Remaining tokens
228
+ - Progress percentage
229
+
230
+ **Distribution:**
231
+ - Total holders
232
+ - Top holders (if available)
233
+ - Distribution metrics
234
+
235
+ **Achievements:**
236
+ - Volume badges
237
+ - Engagement badges
238
+ - Other achievements
239
+
240
+ **Recent Activity (24h):**
241
+ - Trading volume
242
+ - Price movement
243
+ - Number of trades
244
+
245
+ **Reverse Bonding Curve:**
246
+ - Max fee factor
247
+ - Min fee factor
248
+ - Current fee structure`,
249
+ },
250
+ },
251
+ ];
252
+ },
253
+ };
254
+ /**
255
+ * Trade History - Recent trades with filters
256
+ */
257
+ exports.tradeHistoryPrompt = {
258
+ name: 'galachain-launchpad:trade-history',
259
+ description: 'View recent trades for a token or user with filtering options',
260
+ arguments: [
261
+ {
262
+ name: 'tokenName',
263
+ description: 'Token to view trades for (optional)',
264
+ required: false,
265
+ },
266
+ {
267
+ name: 'userAddress',
268
+ description: 'User address to filter by (optional)',
269
+ required: false,
270
+ },
271
+ {
272
+ name: 'tradeType',
273
+ description: 'Trade type filter: BUY or SELL (optional)',
274
+ required: false,
275
+ },
276
+ {
277
+ name: 'limit',
278
+ description: 'Number of trades to show (default: 20)',
279
+ required: false,
280
+ },
281
+ ],
282
+ handler: (args) => {
283
+ // Validate inputs
284
+ if (args.tokenName) {
285
+ (0, validation_js_1.validateTokenName)(args.tokenName);
286
+ }
287
+ if (args.limit) {
288
+ (0, validation_js_1.validatePaginationLimit)(args.limit, 20);
289
+ }
290
+ if (args.tradeType && args.tradeType !== 'BUY' && args.tradeType !== 'SELL') {
291
+ throw new Error('tradeType must be either BUY or SELL');
292
+ }
293
+ const limit = args.limit || '20';
294
+ return [
295
+ {
296
+ role: 'user',
297
+ content: {
298
+ type: 'text',
299
+ text: `Show recent trade history:
300
+
301
+ ${args.tokenName ? `Token: ${args.tokenName}` : 'All tokens'}
302
+ ${args.userAddress ? `User: ${args.userAddress}` : 'All users'}
303
+ ${args.tradeType ? `Type: ${args.tradeType}` : 'All trade types'}
304
+ Limit: ${limit}
305
+
306
+ Use ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TRADES} with:
307
+ ${args.tokenName ? `- tokenName: "${args.tokenName}"` : ''}
308
+ ${args.userAddress ? `- userAddress: "${args.userAddress}"` : ''}
309
+ ${args.tradeType ? `- tradeType: "${args.tradeType}"` : ''}
310
+ - limit: ${limit}
311
+ - sortOrder: "DESC" (newest first)
312
+
313
+ For each trade, display:
314
+ - Timestamp (formatted)
315
+ - Token name
316
+ - Trade type (BUY/SELL)
317
+ - Amount (tokens)
318
+ - Price (GALA)
319
+ - User address (truncated)
320
+ - Transaction ID
321
+
322
+ Calculate summary:
323
+ - Total trades shown
324
+ - Total volume (GALA)
325
+ - Average trade size
326
+ - Buy vs Sell ratio (if not filtered)`,
327
+ },
328
+ },
329
+ ];
330
+ },
331
+ };
332
+ /**
333
+ * Export all analysis prompts
334
+ */
335
+ exports.analysisPrompts = [
336
+ exports.compareTokensPrompt,
337
+ exports.graduationStatusPrompt,
338
+ exports.spotPricesPrompt,
339
+ exports.poolDetailsPrompt,
340
+ exports.tradeHistoryPrompt,
341
+ ];
342
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/prompts/analysis.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,kEAAyD;AACzD,0DAAuG;AAEvG;;GAEG;AACU,QAAA,mBAAmB,GAAc;IAC5C,IAAI,EAAE,oCAAoC;IAC1C,WAAW,EAAE,iEAAiE;IAC9E,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,kBAAkB;QAClB,IAAA,iCAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAA,iCAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEzC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;WAEL,IAAI,CAAC,MAAM;WACX,IAAI,CAAC,MAAM;;;;8BAIQ,2BAAS,CAAC,kCAAkC;;;mBAGvD,2BAAS,CAAC,gCAAgC;wBACrC,2BAAS,CAAC,mCAAmC;qBAChD,2BAAS,CAAC,kBAAkB;;;0BAGvB,2BAAS,CAAC,kBAAkB;2BAC3B,2BAAS,CAAC,wBAAwB;eAC9C,2BAAS,CAAC,kBAAkB;;;;aAI9B,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM;;;;;;;;;;;;;;;sCAeH;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,sBAAsB,GAAc;IAC/C,IAAI,EAAE,uCAAuC;IAC7C,WAAW,EAAE,2DAA2D;IACxE,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAA,iCAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElD,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;UAEN,IAAI,CAAC,MAAM;;;;yBAII,2BAAS,CAAC,kBAAkB;;;4BAGzB,2BAAS,CAAC,kCAAkC;mCACrC,2BAAS,CAAC,mCAAmC;;;4BAGpD,2BAAS,CAAC,kBAAkB;;;;;;;;;2BAS7B,UAAU,CAAC,MAAM;;;;;;;;qCAQP;iBAC5B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,gBAAgB,GAAc;IACzC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EAAE,2DAA2D;IACxE,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,kBAAkB;QAClB,IAAA,iCAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;UAEN,IAAI,CAAC,MAAM;;;;yBAII,2BAAS,CAAC,kCAAkC;2BAC1C,2BAAS,CAAC,gCAAgC;;4BAEzC,2BAAS,CAAC,qBAAqB;;;;;;;;;;;;;uCAapB;iBAC9B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,iBAAiB,GAAc;IAC1C,IAAI,EAAE,kCAAkC;IACxC,WAAW,EAAE,sEAAsE;IACnF,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,kBAAkB;QAClB,IAAA,iCAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2CAA2C,IAAI,CAAC,SAAS;;wBAEjD,2BAAS,CAAC,kBAAkB;yBAC3B,2BAAS,CAAC,wBAAwB;yBAClC,2BAAS,CAAC,kBAAkB;oCACjB,2BAAS,CAAC,iBAAiB;yBACtC,2BAAS,CAAC,kBAAkB;mBAClC,2BAAS,CAAC,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAkC1B;iBACf;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAc;IAC3C,IAAI,EAAE,mCAAmC;IACzC,WAAW,EAAE,+DAA+D;IAC5E,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,2CAA2C;YACxD,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,kBAAkB;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAA,iCAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAA,uCAAuB,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAEjC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;EAEd,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY;EAC1D,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW;EAC5D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,iBAAiB;SACvD,KAAK;;MAER,2BAAS,CAAC,YAAY;EAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE;EACxD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE;EAC9D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE;WAC/C,KAAK;;;;;;;;;;;;;;;;sCAgBsB;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,eAAe,GAAgB;IAC1C,2BAAmB;IACnB,8BAAsB;IACtB,wBAAgB;IAChB,yBAAiB;IACjB,0BAAkB;CACnB,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Gala Launchpad MCP Prompts (Slash Commands)
3
+ *
4
+ * Provides user-friendly slash commands for common Launchpad workflows
5
+ */
6
+ import { tradingPrompts } from './trading.js';
7
+ import { portfolioPrompts } from './portfolio.js';
8
+ import { analysisPrompts } from './analysis.js';
9
+ import type { MCPPrompt } from '../types/mcp.js';
10
+ /**
11
+ * All available prompts
12
+ */
13
+ export declare const prompts: MCPPrompt[];
14
+ /**
15
+ * Get prompt by name (optimized with Map lookup)
16
+ *
17
+ * @param name - Prompt name (e.g., 'galachain-launchpad:analyze-token')
18
+ * @returns Prompt object or undefined if not found
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const prompt = getPrompt('galachain-launchpad:buy-tokens');
23
+ * if (prompt) {
24
+ * const messages = prompt.handler({ tokenName: 'anime', galaAmount: '100' });
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function getPrompt(name: string): MCPPrompt | undefined;
29
+ /**
30
+ * Get all prompt names
31
+ *
32
+ * @returns Array of all registered prompt names
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const names = getPromptNames();
37
+ * // ['galachain-launchpad:analyze-token', 'galachain-launchpad:buy-tokens', ...]
38
+ * ```
39
+ */
40
+ export declare function getPromptNames(): string[];
41
+ /**
42
+ * Check if a prompt exists by name
43
+ *
44
+ * @param name - Prompt name to check
45
+ * @returns True if prompt exists, false otherwise
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * if (hasPrompt('galachain-launchpad:analyze-token')) {
50
+ * console.log('Prompt is available');
51
+ * }
52
+ * ```
53
+ */
54
+ export declare function hasPrompt(name: string): boolean;
55
+ /**
56
+ * Get prompts by category
57
+ *
58
+ * @param category - Category name ('trading', 'portfolio', or 'analysis')
59
+ * @returns Array of prompts in the specified category
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const tradingCommands = getPromptsByCategory('trading');
64
+ * // Returns [analyzeTokenPrompt, buyTokensPrompt, sellTokensPrompt, graduateTokenPrompt]
65
+ * ```
66
+ */
67
+ export declare function getPromptsByCategory(category: 'trading' | 'portfolio' | 'analysis'): MCPPrompt[];
68
+ /**
69
+ * Get prompt count
70
+ *
71
+ * @returns Total number of registered prompts
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * console.log(`Total prompts: ${getPromptCount()}`); // Total prompts: 14
76
+ * ```
77
+ */
78
+ export declare function getPromptCount(): number;
79
+ /**
80
+ * Export individual prompt categories for documentation
81
+ */
82
+ export { tradingPrompts, portfolioPrompts, analysisPrompts };
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,SAAS,EAI9B,CAAC;AAUF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAC7C,SAAS,EAAE,CAWb;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}