@spartan-ng/mcp 0.0.1-alpha.707

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 (44) hide show
  1. package/README.md +149 -0
  2. package/package.json +40 -0
  3. package/src/index.d.ts +1 -0
  4. package/src/index.js +2 -0
  5. package/src/index.js.map +1 -0
  6. package/src/server.d.ts +2 -0
  7. package/src/server.js +32 -0
  8. package/src/server.js.map +1 -0
  9. package/src/tools/analysis.d.ts +2 -0
  10. package/src/tools/analysis.js +269 -0
  11. package/src/tools/analysis.js.map +1 -0
  12. package/src/tools/blocks.d.ts +2 -0
  13. package/src/tools/blocks.js +173 -0
  14. package/src/tools/blocks.js.map +1 -0
  15. package/src/tools/cache-tools.d.ts +2 -0
  16. package/src/tools/cache-tools.js +175 -0
  17. package/src/tools/cache-tools.js.map +1 -0
  18. package/src/tools/cache-warmup.d.ts +40 -0
  19. package/src/tools/cache-warmup.js +156 -0
  20. package/src/tools/cache-warmup.js.map +1 -0
  21. package/src/tools/cache.d.ts +99 -0
  22. package/src/tools/cache.js +361 -0
  23. package/src/tools/cache.js.map +1 -0
  24. package/src/tools/components.d.ts +2 -0
  25. package/src/tools/components.js +126 -0
  26. package/src/tools/components.js.map +1 -0
  27. package/src/tools/docs.d.ts +2 -0
  28. package/src/tools/docs.js +91 -0
  29. package/src/tools/docs.js.map +1 -0
  30. package/src/tools/health.d.ts +2 -0
  31. package/src/tools/health.js +103 -0
  32. package/src/tools/health.js.map +1 -0
  33. package/src/tools/meta.d.ts +2 -0
  34. package/src/tools/meta.js +47 -0
  35. package/src/tools/meta.js.map +1 -0
  36. package/src/tools/prompts.d.ts +2 -0
  37. package/src/tools/prompts.js +299 -0
  38. package/src/tools/prompts.js.map +1 -0
  39. package/src/tools/resources.d.ts +2 -0
  40. package/src/tools/resources.js +178 -0
  41. package/src/tools/resources.js.map +1 -0
  42. package/src/tools/utils.d.ts +84 -0
  43. package/src/tools/utils.js +581 -0
  44. package/src/tools/utils.js.map +1 -0
@@ -0,0 +1,173 @@
1
+ import { z } from 'zod';
2
+ import { cacheManager } from './cache.js';
3
+ import { KNOWN_BLOCKS, KNOWN_COMPONENTS, SPARTAN_BLOCKS_BASE, extractCodeBlocks, fetchContent, htmlToText, } from './utils.js';
4
+ export function registerBlockTools(server) {
5
+ server.registerTool('spartan_blocks_list', {
6
+ title: 'List Spartan UI blocks',
7
+ description: 'Returns a list of known Spartan Angular UI blocks (pre-built UI patterns) with their documentation URLs. ' +
8
+ 'Blocks are higher-level compositions of components like sidebars, login forms, signup forms, and calendars. ' +
9
+ 'Use this to discover available blocks, then call spartan_blocks_get with specific block names to get detailed code.',
10
+ inputSchema: {},
11
+ }, async () => {
12
+ const items = KNOWN_BLOCKS.map((name) => ({
13
+ name,
14
+ url: `${SPARTAN_BLOCKS_BASE}/${name}`,
15
+ }));
16
+ const responseText = JSON.stringify({ blocks: items }, null, 2) +
17
+ '\n\nPROCESSING INSTRUCTIONS:\n' +
18
+ '- This list contains all available Spartan UI blocks\n' +
19
+ '- Use spartan_blocks_get with any block name to get detailed code and documentation\n' +
20
+ '- Blocks are pre-built UI patterns composed of multiple components\n' +
21
+ '- Always present block code and dependencies when helping users';
22
+ return {
23
+ content: [{ type: 'text', text: responseText }],
24
+ };
25
+ });
26
+ server.registerTool('spartan_blocks_get', {
27
+ title: 'Get block documentation and code',
28
+ description: "Fetch the Spartan UI documentation page for a given block (e.g., 'sidebar', 'login'). " +
29
+ 'Blocks are pre-built UI patterns that combine multiple components. ' +
30
+ 'The response includes complete code examples showing how to use the block.',
31
+ inputSchema: {
32
+ name: z
33
+ .string()
34
+ .min(1, 'name is required')
35
+ .describe("Block name (kebab-case), e.g., 'sidebar', 'login', 'signup', 'calendar'."),
36
+ format: z.enum(['html', 'text']).default('html').describe('Return format: raw HTML or plain text.'),
37
+ noCache: z.boolean().default(false).describe('Bypass cache when true.'),
38
+ spartanVersion: z
39
+ .string()
40
+ .optional()
41
+ .describe("Spartan UI version to use for caching (e.g., '1.2.3'). If not provided, defaults to 'latest'."),
42
+ },
43
+ }, async (args) => {
44
+ const name = String(args.name || '')
45
+ .trim()
46
+ .toLowerCase();
47
+ if (!name)
48
+ throw new Error('Missing block name');
49
+ if (!KNOWN_BLOCKS.includes(name)) {
50
+ throw new Error(`Unknown block: ${name}. Available: ${KNOWN_BLOCKS.join(', ')}`);
51
+ }
52
+ await cacheManager.initialize(args.spartanVersion);
53
+ const url = `${SPARTAN_BLOCKS_BASE}/${encodeURIComponent(name)}`;
54
+ const format = args.format === 'text' ? 'text' : 'html';
55
+ const noCache = Boolean(args.noCache);
56
+ // Cache HTML as the single canonical entry; text is derived on read so the
57
+ // two formats can never drift for the same block/version.
58
+ const cacheKey = `${name}__html`;
59
+ let html;
60
+ let cacheInfo = '';
61
+ if (!noCache) {
62
+ const cached = await cacheManager.getBlock(cacheKey);
63
+ if (cached.cached && !cached.stale) {
64
+ html = cached.data.html;
65
+ cacheInfo = `\n[CACHED DATA - Version: ${cached.version}, Cached at: ${cached.cachedAt}]`;
66
+ }
67
+ else {
68
+ html = await fetchContent(url, 'html', true);
69
+ const extracted = extractCodeBlocks(html);
70
+ await cacheManager.setBlock(cacheKey, {
71
+ html,
72
+ code: extracted,
73
+ full: { html, code: extracted, url },
74
+ });
75
+ cacheInfo = cached.cached
76
+ ? `\n[CACHE REFRESHED - Version: ${cacheManager.currentVersion}]`
77
+ : `\n[NEWLY CACHED - Version: ${cacheManager.currentVersion}]`;
78
+ }
79
+ }
80
+ else {
81
+ html = await fetchContent(url, 'html', true);
82
+ cacheInfo = '\n[LIVE FETCH - Cache bypassed]';
83
+ }
84
+ const content = format === 'text' ? htmlToText(html) : html;
85
+ const responseText = `${content}${cacheInfo}\n\nSource: ${url}\n\n` +
86
+ 'PROCESSING INSTRUCTIONS:\n' +
87
+ '- This response contains block documentation and code examples\n' +
88
+ '- Blocks are pre-built UI patterns using Spartan components\n' +
89
+ '- Present the complete code examples for the block\n' +
90
+ '- List the required components and dependencies\n' +
91
+ '- Show how to integrate the block into an Angular application';
92
+ return {
93
+ content: [{ type: 'text', text: responseText }],
94
+ };
95
+ });
96
+ server.registerTool('spartan_blocks_dependencies', {
97
+ title: 'Show block dependencies',
98
+ description: 'Analyze what components and packages a Spartan UI block requires. ' +
99
+ 'Blocks are compositions of multiple components, so this shows all underlying dependencies.',
100
+ inputSchema: {
101
+ blockName: z.string().min(1, 'blockName is required').describe("Spartan block name (e.g., 'sidebar', 'login')"),
102
+ },
103
+ }, async (args) => {
104
+ const blockName = String(args.blockName || '')
105
+ .trim()
106
+ .toLowerCase();
107
+ if (!KNOWN_BLOCKS.includes(blockName)) {
108
+ throw new Error(`Unknown block: ${blockName}. Available: ${KNOWN_BLOCKS.join(', ')}`);
109
+ }
110
+ const url = `${SPARTAN_BLOCKS_BASE}/${blockName}`;
111
+ const html = await fetchContent(url, 'html', false);
112
+ const text = htmlToText(html);
113
+ const dependencies = {
114
+ spartanComponents: [],
115
+ npmPackages: [],
116
+ angularCdk: [],
117
+ };
118
+ // Derive referenced Spartan components from `@spartan-ng/{brain,helm}/...`
119
+ // import paths in the page's code examples. Matching the full page text
120
+ // would match the docs navigation sidebar, which lists every component.
121
+ const importedComponents = new Set();
122
+ const importRegex = /@spartan-ng\/(?:brain|helm)\/([\w-]+)/g;
123
+ let importMatch;
124
+ while ((importMatch = importRegex.exec(text)) !== null) {
125
+ importedComponents.add(importMatch[1]);
126
+ }
127
+ for (const component of KNOWN_COMPONENTS) {
128
+ if (importedComponents.has(component)) {
129
+ dependencies.spartanComponents.push(component);
130
+ }
131
+ }
132
+ // Find npm packages
133
+ const npmRegex = /npm\s+install\s+([^\n]+)/gi;
134
+ let match;
135
+ while ((match = npmRegex.exec(text)) !== null) {
136
+ const packages = match[1]
137
+ .split(/\s+/)
138
+ .filter((pkg) => pkg.length > 0 && !pkg.startsWith('-'))
139
+ .map((pkg) => pkg.replace(/[,;]$/, ''));
140
+ dependencies.npmPackages.push(...packages);
141
+ }
142
+ // Find Angular CDK references
143
+ const cdkComponents = [
144
+ '@angular/cdk/a11y',
145
+ '@angular/cdk/dialog',
146
+ '@angular/cdk/overlay',
147
+ '@angular/cdk/portal',
148
+ '@angular/cdk/scrolling',
149
+ ];
150
+ for (const cdk of cdkComponents) {
151
+ if (text.includes(cdk))
152
+ dependencies.angularCdk.push(cdk);
153
+ }
154
+ return {
155
+ content: [
156
+ {
157
+ type: 'text',
158
+ text: JSON.stringify({
159
+ block: blockName,
160
+ url,
161
+ dependencies,
162
+ installation: [
163
+ ...dependencies.npmPackages.map((pkg) => `npm install ${pkg}`),
164
+ ...dependencies.spartanComponents.map((comp) => `npx ng g @spartan-ng/cli:ui ${comp}`),
165
+ ],
166
+ processingInstructions: 'Present dependencies with installation commands and setup instructions. Show which Spartan components are used in this block.',
167
+ }, null, 2),
168
+ },
169
+ ],
170
+ };
171
+ });
172
+ }
173
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../../../../libs/mcp/src/tools/blocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EACN,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,UAAU,GACV,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CAClB,qBAAqB,EACrB;QACC,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACV,2GAA2G;YAC3G,8GAA8G;YAC9G,qHAAqH;QACtH,WAAW,EAAE,EAAE;KACf,EACD,KAAK,IAAI,EAAE;QACV,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI;YACJ,GAAG,EAAE,GAAG,mBAAmB,IAAI,IAAI,EAAE;SACrC,CAAC,CAAC,CAAC;QACJ,MAAM,YAAY,GACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,gCAAgC;YAChC,wDAAwD;YACxD,uFAAuF;YACvF,sEAAsE;YACtE,iEAAiE,CAAC;QACnE,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,oBAAoB,EACpB;QACC,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACV,wFAAwF;YACxF,qEAAqE;YACrE,4EAA4E;QAC7E,WAAW,EAAE;YACZ,IAAI,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;iBAC1B,QAAQ,CAAC,0EAA0E,CAAC;YACtF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACnG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACvE,cAAc,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,+FAA+F,CAAC;SAC3G;KACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;aAClC,IAAI,EAAE;aACN,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,gBAAgB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,GAAG,mBAAmB,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,GAAG,IAAI,QAAQ,CAAC;QACjC,IAAI,IAAY,CAAC;QACjB,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,GAAI,MAAM,CAAC,IAAyB,CAAC,IAAI,CAAC;gBAC9C,SAAS,GAAG,6BAA6B,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACP,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBACrC,IAAI;oBACJ,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;iBACpC,CAAC,CAAC;gBACH,SAAS,GAAG,MAAM,CAAC,MAAM;oBACxB,CAAC,CAAC,iCAAiC,YAAY,CAAC,cAAc,GAAG;oBACjE,CAAC,CAAC,8BAA8B,YAAY,CAAC,cAAc,GAAG,CAAC;YACjE,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7C,SAAS,GAAG,iCAAiC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5D,MAAM,YAAY,GACjB,GAAG,OAAO,GAAG,SAAS,eAAe,GAAG,MAAM;YAC9C,4BAA4B;YAC5B,kEAAkE;YAClE,+DAA+D;YAC/D,sDAAsD;YACtD,mDAAmD;YACnD,+DAA+D,CAAC;QAEjE,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,6BAA6B,EAC7B;QACC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACV,oEAAoE;YACpE,4FAA4F;QAC7F,WAAW,EAAE;YACZ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SAC/G;KACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;aAC5C,IAAI,EAAE;aACN,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,gBAAgB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,mBAAmB,IAAI,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAE9B,MAAM,YAAY,GAId;YACH,iBAAiB,EAAE,EAAE;YACrB,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,EAAE;SACd,CAAC;QAEF,2EAA2E;QAC3E,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,MAAM,WAAW,GAAG,wCAAwC,CAAC;QAC7D,IAAI,WAAmC,CAAC;QACxC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YAC1C,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;QACF,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAC9C,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;iBACvB,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACvD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACzC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG;YACrB,mBAAmB;YACnB,qBAAqB;YACrB,sBAAsB;YACtB,qBAAqB;YACrB,wBAAwB;SACxB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CACnB;wBACC,KAAK,EAAE,SAAS;wBAChB,GAAG;wBACH,YAAY;wBACZ,YAAY,EAAE;4BACb,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,GAAG,EAAE,CAAC;4BAC9D,GAAG,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,IAAI,EAAE,CAAC;yBACtF;wBACD,sBAAsB,EACrB,+HAA+H;qBAChI,EACD,IAAI,EACJ,CAAC,CACD;iBACD;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCacheTools(server: McpServer): void;
@@ -0,0 +1,175 @@
1
+ import { z } from 'zod';
2
+ import { warmCache } from './cache-warmup.js';
3
+ import { cacheManager } from './cache.js';
4
+ import { KNOWN_BLOCKS, KNOWN_COMPONENTS } from './utils.js';
5
+ export function registerCacheTools(server) {
6
+ server.registerTool('spartan_cache_status', {
7
+ title: 'Get cache status',
8
+ description: 'Get current cache status, including version, cached components, and statistics',
9
+ inputSchema: {},
10
+ }, async () => {
11
+ try {
12
+ await cacheManager.initialize();
13
+ const stats = await cacheManager.getStats();
14
+ const summary = {
15
+ currentVersion: stats.currentVersion,
16
+ totalVersions: stats.totalVersions,
17
+ versions: stats.versions,
18
+ totalComponents: KNOWN_COMPONENTS.length,
19
+ totalBlocks: KNOWN_BLOCKS.length,
20
+ };
21
+ return {
22
+ content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
23
+ };
24
+ }
25
+ catch (error) {
26
+ return {
27
+ content: [
28
+ {
29
+ type: 'text',
30
+ text: `Error getting cache status: ${error.message}`,
31
+ },
32
+ ],
33
+ isError: true,
34
+ };
35
+ }
36
+ });
37
+ server.registerTool('spartan_cache_clear', {
38
+ title: 'Clear cache',
39
+ description: 'Clear cached documentation for the current Spartan UI version',
40
+ inputSchema: {
41
+ allVersions: z.boolean().optional().describe('Clear cache for all versions (default: false)'),
42
+ },
43
+ }, async ({ allVersions }) => {
44
+ try {
45
+ await cacheManager.initialize();
46
+ const result = allVersions ? await cacheManager.clearAll() : await cacheManager.clearVersion();
47
+ return {
48
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
49
+ };
50
+ }
51
+ catch (error) {
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: `Error clearing cache: ${error.message}`,
57
+ },
58
+ ],
59
+ isError: true,
60
+ };
61
+ }
62
+ });
63
+ server.registerTool('spartan_cache_rebuild', {
64
+ title: 'Rebuild cache',
65
+ description: 'Rebuild cache by fetching fresh documentation from spartan.ng for all components and blocks',
66
+ inputSchema: {
67
+ components: z.array(z.string()).optional().describe('Specific components to rebuild (default: all components)'),
68
+ blocks: z.array(z.string()).optional().describe('Specific blocks to rebuild (default: all blocks)'),
69
+ includeDocs: z.boolean().optional().describe('Include documentation topics (default: true)'),
70
+ },
71
+ }, async ({ components, blocks, includeDocs = true }) => {
72
+ try {
73
+ await cacheManager.initialize();
74
+ await cacheManager.clearVersion();
75
+ const results = await warmCache({
76
+ components: components || KNOWN_COMPONENTS,
77
+ blocks: blocks || KNOWN_BLOCKS,
78
+ includeDocs,
79
+ onProgress: (current, total) => {
80
+ if (current % 5 === 0) {
81
+ console.error(`Progress: ${current}/${total} items cached`);
82
+ }
83
+ },
84
+ });
85
+ return {
86
+ content: [
87
+ {
88
+ type: 'text',
89
+ text: JSON.stringify({
90
+ success: true,
91
+ version: results.version,
92
+ components: {
93
+ total: results.components.total,
94
+ success: results.components.success,
95
+ failed: results.components.failed,
96
+ },
97
+ blocks: {
98
+ total: results.blocks.total,
99
+ success: results.blocks.success,
100
+ failed: results.blocks.failed,
101
+ },
102
+ docs: {
103
+ total: results.docs.total,
104
+ success: results.docs.success,
105
+ failed: results.docs.failed,
106
+ },
107
+ duration: `${(results.duration / 1000).toFixed(2)}s`,
108
+ }, null, 2),
109
+ },
110
+ ],
111
+ };
112
+ }
113
+ catch (error) {
114
+ return {
115
+ content: [
116
+ {
117
+ type: 'text',
118
+ text: `Error rebuilding cache: ${error.message}`,
119
+ },
120
+ ],
121
+ isError: true,
122
+ };
123
+ }
124
+ });
125
+ server.registerTool('spartan_cache_switch_version', {
126
+ title: 'Switch version',
127
+ description: 'Switch to a different Spartan UI version for caching and retrieval',
128
+ inputSchema: {
129
+ version: z.string().describe("Spartan UI version (e.g., '1.2.3', 'latest')"),
130
+ },
131
+ }, async ({ version }) => {
132
+ try {
133
+ const result = await cacheManager.switchVersion(version);
134
+ return {
135
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
136
+ };
137
+ }
138
+ catch (error) {
139
+ return {
140
+ content: [
141
+ {
142
+ type: 'text',
143
+ text: `Error switching version: ${error.message}`,
144
+ },
145
+ ],
146
+ isError: true,
147
+ };
148
+ }
149
+ });
150
+ server.registerTool('spartan_cache_list_versions', {
151
+ title: 'List cached versions',
152
+ description: 'List all cached Spartan UI versions',
153
+ inputSchema: {},
154
+ }, async () => {
155
+ try {
156
+ await cacheManager.initialize();
157
+ const versions = await cacheManager.listVersions();
158
+ return {
159
+ content: [{ type: 'text', text: JSON.stringify(versions, null, 2) }],
160
+ };
161
+ }
162
+ catch (error) {
163
+ return {
164
+ content: [
165
+ {
166
+ type: 'text',
167
+ text: `Error listing versions: ${error.message}`,
168
+ },
169
+ ],
170
+ isError: true,
171
+ };
172
+ }
173
+ });
174
+ }
175
+ //# sourceMappingURL=cache-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-tools.js","sourceRoot":"","sources":["../../../../../libs/mcp/src/tools/cache-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ interface WarmupOptions {
2
+ components?: string[];
3
+ blocks?: string[];
4
+ includeDocs?: boolean;
5
+ onProgress?: (current: number, total: number) => void;
6
+ }
7
+ interface WarmupResult {
8
+ version: string | null;
9
+ components: {
10
+ total: number;
11
+ success: number;
12
+ failed: number;
13
+ errors: Array<{
14
+ component: string;
15
+ error: string;
16
+ }>;
17
+ };
18
+ blocks: {
19
+ total: number;
20
+ success: number;
21
+ failed: number;
22
+ errors: Array<{
23
+ block: string;
24
+ error: string;
25
+ }>;
26
+ };
27
+ docs: {
28
+ total: number;
29
+ success: number;
30
+ failed: number;
31
+ errors: Array<{
32
+ topic: string;
33
+ error: string;
34
+ }>;
35
+ };
36
+ duration: number;
37
+ }
38
+ export declare function warmCache(options?: WarmupOptions): Promise<WarmupResult>;
39
+ export declare function runCacheWarmup(): Promise<WarmupResult>;
40
+ export {};
@@ -0,0 +1,156 @@
1
+ import { pathToFileURL } from 'url';
2
+ import { cacheManager } from './cache.js';
3
+ import { DOCUMENTATION_TOPICS, extractAPIInfo, extractCodeBlocks, fetchContent, KNOWN_BLOCKS, KNOWN_COMPONENTS, SPARTAN_BLOCKS_BASE, SPARTAN_COMPONENTS_BASE, SPARTAN_DOCS_BASE, } from './utils.js';
4
+ async function warmComponent(componentName) {
5
+ try {
6
+ console.error(` Caching ${componentName}...`);
7
+ const url = `${SPARTAN_COMPONENTS_BASE}/${componentName}`;
8
+ const html = await fetchContent(url, 'html', true);
9
+ const api = extractAPIInfo(html);
10
+ const examples = extractCodeBlocks(html);
11
+ await cacheManager.setComponent(componentName, {
12
+ html,
13
+ api,
14
+ examples,
15
+ full: { html, api, examples, url },
16
+ });
17
+ return { success: true, component: componentName };
18
+ }
19
+ catch (error) {
20
+ console.error(` Failed to cache ${componentName}: ${error.message}`);
21
+ return { success: false, component: componentName, error: error.message };
22
+ }
23
+ }
24
+ async function warmBlock(blockName) {
25
+ try {
26
+ console.error(` Caching block: ${blockName}...`);
27
+ const url = `${SPARTAN_BLOCKS_BASE}/${blockName}`;
28
+ const html = await fetchContent(url, 'html', true);
29
+ const code = extractCodeBlocks(html);
30
+ await cacheManager.setBlock(`${blockName}__html`, {
31
+ html,
32
+ code,
33
+ full: { html, code, url },
34
+ });
35
+ return { success: true, block: blockName };
36
+ }
37
+ catch (error) {
38
+ console.error(` Failed to cache block ${blockName}: ${error.message}`);
39
+ return { success: false, block: blockName, error: error.message };
40
+ }
41
+ }
42
+ async function warmDocs(topic) {
43
+ try {
44
+ console.error(` Caching docs: ${topic}...`);
45
+ const url = `${SPARTAN_DOCS_BASE}/${topic}`;
46
+ const html = await fetchContent(url, 'html', true);
47
+ await cacheManager.setDocs(topic, html);
48
+ return { success: true, topic };
49
+ }
50
+ catch (error) {
51
+ console.error(` Failed to cache ${topic}: ${error.message}`);
52
+ return { success: false, topic, error: error.message };
53
+ }
54
+ }
55
+ export async function warmCache(options = {}) {
56
+ const { components = KNOWN_COMPONENTS, blocks = KNOWN_BLOCKS, includeDocs = true, onProgress = undefined } = options;
57
+ const startTime = Date.now();
58
+ const results = {
59
+ version: cacheManager.currentVersion,
60
+ components: { total: components.length, success: 0, failed: 0, errors: [] },
61
+ blocks: { total: blocks.length, success: 0, failed: 0, errors: [] },
62
+ docs: { total: includeDocs ? DOCUMENTATION_TOPICS.length : 0, success: 0, failed: 0, errors: [] },
63
+ duration: 0,
64
+ };
65
+ console.error(`\nWarming cache for Spartan UI v${results.version}\n`);
66
+ console.error(`Components: ${components.length}`);
67
+ console.error(`Blocks: ${blocks.length}`);
68
+ if (includeDocs)
69
+ console.error(`Documentation topics: ${DOCUMENTATION_TOPICS.length}`);
70
+ console.error('');
71
+ let progress = 0;
72
+ const total = components.length + blocks.length + (includeDocs ? DOCUMENTATION_TOPICS.length : 0);
73
+ // Cache components
74
+ console.error('Caching Components...');
75
+ for (const component of components) {
76
+ const result = await warmComponent(component);
77
+ if (result.success)
78
+ results.components.success++;
79
+ else {
80
+ results.components.failed++;
81
+ results.components.errors.push({ component, error: result.error });
82
+ }
83
+ progress++;
84
+ if (onProgress)
85
+ onProgress(progress, total);
86
+ await new Promise((resolve) => setTimeout(resolve, 100));
87
+ }
88
+ // Cache blocks
89
+ console.error('\nCaching Blocks...');
90
+ for (const block of blocks) {
91
+ const result = await warmBlock(block);
92
+ if (result.success)
93
+ results.blocks.success++;
94
+ else {
95
+ results.blocks.failed++;
96
+ results.blocks.errors.push({ block, error: result.error });
97
+ }
98
+ progress++;
99
+ if (onProgress)
100
+ onProgress(progress, total);
101
+ await new Promise((resolve) => setTimeout(resolve, 100));
102
+ }
103
+ // Cache documentation
104
+ if (includeDocs) {
105
+ console.error('\nCaching Documentation...');
106
+ for (const topic of DOCUMENTATION_TOPICS) {
107
+ const result = await warmDocs(topic);
108
+ if (result.success)
109
+ results.docs.success++;
110
+ else {
111
+ results.docs.failed++;
112
+ results.docs.errors.push({ topic, error: result.error });
113
+ }
114
+ progress++;
115
+ if (onProgress)
116
+ onProgress(progress, total);
117
+ await new Promise((resolve) => setTimeout(resolve, 100));
118
+ }
119
+ }
120
+ results.duration = Date.now() - startTime;
121
+ console.error('\n' + '='.repeat(60));
122
+ console.error('CACHE WARMUP COMPLETE\n');
123
+ console.error(`Version: ${results.version}`);
124
+ console.error(`Duration: ${(results.duration / 1000).toFixed(2)}s\n`);
125
+ console.error(`Components: ${results.components.success}/${results.components.total} successful`);
126
+ console.error(`Blocks: ${results.blocks.success}/${results.blocks.total} successful`);
127
+ if (includeDocs)
128
+ console.error(`Documentation: ${results.docs.success}/${results.docs.total} successful`);
129
+ console.error('='.repeat(60));
130
+ return results;
131
+ }
132
+ export async function runCacheWarmup() {
133
+ const version = await cacheManager.initialize();
134
+ console.error(`Using Spartan UI version: ${version}`);
135
+ return warmCache({
136
+ components: KNOWN_COMPONENTS,
137
+ blocks: KNOWN_BLOCKS,
138
+ includeDocs: true,
139
+ });
140
+ }
141
+ // Run as a CLI only when invoked directly. `process.argv[1]` is undefined when
142
+ // imported, in a REPL, or under `node -e`, so guard before resolving it.
143
+ const invokedPath = process.argv[1];
144
+ if (invokedPath && import.meta.url === pathToFileURL(invokedPath).href) {
145
+ runCacheWarmup()
146
+ .then((results) => {
147
+ const failed = results.components.failed + results.blocks.failed + results.docs.failed;
148
+ process.exit(failed > 0 ? 1 : 0);
149
+ })
150
+ .catch((error) => {
151
+ console.error('Cache warmup failed:', error.message);
152
+ console.error(error.stack);
153
+ process.exit(1);
154
+ });
155
+ }
156
+ //# sourceMappingURL=cache-warmup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-warmup.js","sourceRoot":"","sources":["../../../../../libs/mcp/src/tools/cache-warmup.ts"],"names":[],"mappings":"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"}