@taiga-ui/mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,8 +12,8 @@ development workflow.
12
12
  ### Key Features
13
13
 
14
14
  - **Docs + code snippets**. Full Taiga UI markdown plus ready Angular examples in one place.
15
- - **Three MCP tools**. Get structured overview with `get_overview`, discover with `get_list_components`, fetch examples
16
- via `get_component_example`.
15
+ - **Four MCP tools**. Get structured overview with `get_overview`, discover with `get_list_components`, fetch examples
16
+ via `get_component_example`, and access migration guides with `get_migration_guide`.
17
17
  - **Configurable & lightweight**. Swap source URL (stable/next) without local Angular install.
18
18
 
19
19
  ### Requirements
@@ -143,8 +143,44 @@ get_component_example({names: ['Alert']});
143
143
  }
144
144
  ```
145
145
 
146
- > Tip: Start with `get_overview` to get import map and common mistakes, then use `get_list_components` to discover IDs
147
- > and `get_component_example` to fetch full implementation snippets.
146
+ 4. `get_migration_guide`
147
+ - Returns the complete Migration Guide for Taiga UI version updates with pre-update checklist, migration instructions
148
+ via schematics, and troubleshooting for common issues.
149
+ - Use this tool when you need to migrate between Taiga UI major versions or understand the migration process.
150
+ - Input: none (no parameters required).
151
+ - Output: `title`, `introduction` with version info, and `sections` array with migration guidance, code blocks for
152
+ CLI commands, and solutions for common problems.
153
+
154
+ ```ts
155
+ get_migration_guide();
156
+ ```
157
+
158
+ ```json
159
+ {
160
+ "title": "Migration Guide",
161
+ "introduction": [
162
+ "**Guide to update Taiga UI v{CURRENT_MAJOR} -> v{NEXT_MAJOR}**"
163
+ ],
164
+ "sections": [
165
+ {
166
+ "title": "Before You Update",
167
+ "content": [...]
168
+ },
169
+ {
170
+ "title": "Updating",
171
+ "content": [...],
172
+ "codeBlocks": [...]
173
+ },
174
+ {
175
+ "title": "Troubleshooting",
176
+ "content": [...]
177
+ }
178
+ ]
179
+ }
180
+ ```
181
+
182
+ > Tip: Start with `get_overview` to get import map and common mistakes, then use `get_list_components` to discover IDs,
183
+ > `get_component_example` to fetch full implementation snippets, and `get_migration_guide` for version upgrade guidance.
148
184
 
149
185
  </details>
150
186
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Model Context Protocol server providing Taiga UI documentation search and scaffolding tools.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -24,12 +24,12 @@
24
24
  "license": "Apache-2.0",
25
25
  "contributors": [
26
26
  {
27
- "name": "Vladimir Potekhin",
28
- "email": "vladimir.potekh@gmail.com"
27
+ "email": "vladimir.potekh@gmail.com",
28
+ "name": "Vladimir Potekhin"
29
29
  },
30
30
  {
31
- "name": "German Panov",
32
- "email": "zidakbew@gmail.com"
31
+ "email": "zidakbew@gmail.com",
32
+ "name": "German Panov"
33
33
  }
34
34
  ],
35
35
  "type": "module",
@@ -72,8 +72,8 @@
72
72
  "zod": "3.25.76"
73
73
  },
74
74
  "devDependencies": {
75
- "@taiga-ui/configs": "0.446.0",
76
- "@types/node": "24.10.11",
75
+ "@taiga-ui/configs": "0.522.0",
76
+ "@types/node": "24.12.2",
77
77
  "husky": "9.1.7",
78
78
  "typescript": "5.9.3"
79
79
  },
package/dist/index.js DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import { start } from './server/server.js';
3
- import { logError } from './utils/logger.js';
4
- start().catch((err) => {
5
- logError('Unhandled startup error', err);
6
- process.exit(1);
7
- });
8
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC3B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=doc-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-types.js","sourceRoot":"","sources":["../../src/schemas/doc-types.ts"],"names":[],"mappings":""}
@@ -1,33 +0,0 @@
1
- import { parseContent } from '../utils/parse-content.js';
2
- import { state } from './server.js';
3
- // 6-hour refresh window
4
- const REFRESH_INTERVAL_MS = 6 * 60 * 60 * 1000;
5
- export async function fetchSource() {
6
- const argProvidedUrl = process.argv
7
- .find((arg) => arg.startsWith('--source-url='))
8
- ?.split('=')[1];
9
- const sourceUrl = argProvidedUrl ?? process.env.SOURCE_URL;
10
- if (!sourceUrl) {
11
- throw new Error('Source URL not provided. Set SOURCE_URL or pass --source-url=...');
12
- }
13
- const response = await fetch(sourceUrl).catch((error) => {
14
- throw new Error(`Network error fetching documentation source: ${error instanceof Error ? error.message : String(error)}`);
15
- });
16
- if (!response.ok) {
17
- throw new Error(`Failed to fetch documentation (HTTP ${response.status} ${response.statusText}) from ${sourceUrl}`);
18
- }
19
- const content = await response.text();
20
- if (!content.trim()) {
21
- throw new Error(`Fetched documentation from ${sourceUrl} is empty.`);
22
- }
23
- return { url: sourceUrl, content };
24
- }
25
- export async function ensureSourceLoaded() {
26
- const isContentStale = !state.lastLoadedAt || Date.now() - state.lastLoadedAt > REFRESH_INTERVAL_MS;
27
- if (!state.sections.length || isContentStale) {
28
- const { url, content } = await fetchSource();
29
- parseContent(content, url);
30
- state.lastLoadedAt = Date.now();
31
- }
32
- }
33
- //# sourceMappingURL=fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/server/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAElC,wBAAwB;AACxB,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI;SAC9B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC/C,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE3D,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,kEAAkE,CACrE,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC7D,MAAM,IAAI,KAAK,CACX,gDAAgD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3G,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACX,uCAAuC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,UAAU,SAAS,EAAE,CACrG,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,MAAM,cAAc,GAChB,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAEjF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,EAAC,GAAG,EAAE,OAAO,EAAC,GAAG,MAAM,WAAW,EAAE,CAAC;QAE3C,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE3B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;AACL,CAAC"}
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env node
2
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import packageJson from '../../package.json' with { type: 'json' };
5
- import { registerAllTools } from '../tools/index.js';
6
- import { logError, logInfo } from '../utils/logger.js';
7
- import { ensureSourceLoaded } from './fetch.js';
8
- export const state = {
9
- sections: [],
10
- overview: undefined,
11
- sourceUrl: undefined,
12
- lastLoadedAt: undefined,
13
- };
14
- const server = new McpServer({
15
- name: 'taiga-ui-mcp',
16
- version: packageJson.version,
17
- }, {
18
- capabilities: { tools: {} },
19
- instructions: `
20
- <General Purpose>
21
- This server provides programmatic access to Taiga UI component documentation for AI assistants.
22
- Use these tools to discover, understand, and retrieve usage examples for Taiga UI components.
23
- </General Purpose>
24
-
25
- <Core Workflows & Tool Guide>
26
- * **1. Get Documentation Overview (Start Here):** Always begin by calling \`get_overview\` to retrieve the structured documentation header with installation instructions, critical notices, and general guidance.
27
-
28
- * **2. Discover Components:** Call \`get_list_components\` to see all available Taiga UI components. Use the optional \`query\` parameter for fuzzy filtering to find specific components.
29
-
30
- * **3. Get Component Examples:** Once you identify needed component(s), call \`get_component_example\` with component name(s) to retrieve full documentation and code examples.
31
- </Core Workflows & Tool Guide>
32
-
33
- <Key Concepts>
34
- * **Component Categories:** Components are organized by category (UI elements, forms, layouts, etc.)
35
- * **Packages:** Components belong to different packages (CORE, KIT, etc.)
36
- * **Fuzzy Matching:** Component queries support fuzzy matching for flexible searching.
37
- </Key Concepts>
38
- `,
39
- });
40
- registerAllTools(server);
41
- export async function start() {
42
- try {
43
- await ensureSourceLoaded();
44
- }
45
- catch (error) {
46
- logError('Initial source load failed', error);
47
- }
48
- const transport = new StdioServerTransport();
49
- await server.connect(transport);
50
- logInfo(`Angular Taiga UI MCP Server running. Fetched source components: ${state.sections.length}`);
51
- }
52
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,2CAA2C,CAAC;AAE/E,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AAEjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAS9C,MAAM,CAAC,MAAM,KAAK,GAAe;IAC7B,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;CAC1B,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CACxB;IACI,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,WAAW,CAAC,OAAO;CAC/B,EACD;IACI,YAAY,EAAE,EAAC,KAAK,EAAE,EAAE,EAAC;IACzB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;CAmBrB;CACI,CACJ,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,KAAK;IACvB,IAAI,CAAC;QACD,MAAM,kBAAkB,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CACH,mEAAmE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAC7F,CAAC;AACN,CAAC"}
@@ -1,37 +0,0 @@
1
- import { z } from 'zod';
2
- import { ensureSourceLoaded } from '../server/fetch.js';
3
- import { buildQueryResults } from '../utils/query-results.js';
4
- export function registerGetComponentExampleTool(server) {
5
- server.registerTool('get_component_example', {
6
- title: 'Get Component Example',
7
- description: 'Return section-related content snippets (formerly examples) for specified documentation section name(s). The presence of id indicates a successful match.',
8
- inputSchema: { names: z.array(z.string().min(2)).min(1) },
9
- outputSchema: {
10
- results: z.array(z.object({
11
- query: z.string(),
12
- id: z.string().optional(),
13
- package: z.string().nullable().optional(),
14
- type: z.string().nullable().optional(),
15
- suggestions: z.array(z.string()).optional(),
16
- content: z.array(z.string()).optional(),
17
- })),
18
- matched: z.number(),
19
- },
20
- }, async ({ names }) => {
21
- if (!names.length) {
22
- const output = { error: 'Provide at least one name in names array.' };
23
- return {
24
- content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
25
- structuredContent: output,
26
- };
27
- }
28
- await ensureSourceLoaded();
29
- const { results, matches } = buildQueryResults(names);
30
- const output = { results, matched: matches };
31
- return {
32
- content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
33
- structuredContent: output,
34
- };
35
- });
36
- }
37
- //# sourceMappingURL=get-component-example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-component-example.js","sourceRoot":"","sources":["../../src/tools/get-component-example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACf,uBAAuB,EACvB;QACI,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACP,2JAA2J;QAC/J,WAAW,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC;QACvD,YAAY,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;gBACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;gBAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;aAC1C,CAAC,CACL;YACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAoB,EAAE,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,EAAC,KAAK,EAAE,2CAA2C,EAAC,CAAC;YAEpE,OAAO;gBACH,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAC,CAAC;gBAChE,iBAAiB,EAAE,MAAM;aAC5B,CAAC;QACN,CAAC;QAED,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;QAE3C,OAAO;YACH,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAC,CAAC;YAChE,iBAAiB,EAAE,MAAM;SAC5B,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1,32 +0,0 @@
1
- import { z } from 'zod';
2
- import { ensureSourceLoaded } from '../server/fetch.js';
3
- import { constructComponentsList } from '../utils/list-components.js';
4
- export function registerGetListComponentsTool(server) {
5
- server.registerTool('get_list_components', {
6
- title: 'List Components',
7
- description: 'List all Taiga UI documentation section IDs (structured JSON only).',
8
- inputSchema: { query: z.string().optional().default('') },
9
- outputSchema: {
10
- items: z.array(z.object({
11
- id: z.string(),
12
- name: z.string(),
13
- category: z.string(),
14
- package: z.string().nullable(),
15
- type: z.string().nullable(),
16
- })),
17
- },
18
- }, async ({ query }) => {
19
- await ensureSourceLoaded();
20
- const output = { items: constructComponentsList(query) };
21
- return {
22
- content: [
23
- {
24
- type: 'text',
25
- text: JSON.stringify(output, null, 2),
26
- },
27
- ],
28
- structuredContent: output,
29
- };
30
- });
31
- }
32
- //# sourceMappingURL=get-list-components.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-list-components.js","sourceRoot":"","sources":["../../src/tools/get-list-components.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;QACI,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACP,qEAAqE;QACzE,WAAW,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAC;QACvD,YAAY,EAAE;YACV,KAAK,EAAE,CAAC,CAAC,KAAK,CACV,CAAC,CAAC,MAAM,CAAC;gBACL,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;gBACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,CAAC,CACL;SACJ;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAmB,EAAE,EAAE;QAChC,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,EAAC,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAC,CAAC;QAEvD,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC;aACJ;YACD,iBAAiB,EAAE,MAAM;SAC5B,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1,102 +0,0 @@
1
- import { z } from 'zod';
2
- import { ensureSourceLoaded } from '../server/fetch.js';
3
- import { state } from '../server/server.js';
4
- import { parseHeaderSections, } from '../utils/extract-header.js';
5
- export function registerGetOverviewTool(server) {
6
- server.registerTool('get_overview', {
7
- title: 'Get Documentation Overview',
8
- description: 'Call this tool FIRST to retrieve the fully structured documentation header as JSON. Returns hierarchical sections with parsed content (no raw markdown). Includes installation instructions, critical notices, and subsections with their content and code blocks. This provides essential context before exploring specific components.',
9
- inputSchema: z.object({}).optional(),
10
- outputSchema: {
11
- title: z.string(),
12
- sections: z.array(z.object({
13
- title: z.string(),
14
- description: z.string().optional(),
15
- criticalNotices: z.array(z.string()),
16
- subsections: z.array(z.object({
17
- title: z.string(),
18
- content: z.array(z.string()),
19
- sections: z
20
- .array(z.object({
21
- section: z.string(),
22
- code: z.string().optional(),
23
- }))
24
- .optional(),
25
- items: z
26
- .array(z.object({
27
- title: z.string(),
28
- content: z.array(z.string()),
29
- code: z.string().optional(),
30
- sections: z
31
- .array(z.object({
32
- section: z.string(),
33
- code: z.string().optional(),
34
- }))
35
- .optional(),
36
- }))
37
- .optional(),
38
- })),
39
- })),
40
- totalComponents: z.number(),
41
- sourceUrl: z.string().optional(),
42
- },
43
- }, async () => {
44
- await ensureSourceLoaded();
45
- const headerInfo = state.overview
46
- ? parseHeaderSections(state.overview)
47
- : {
48
- title: 'Taiga UI Documentation',
49
- sections: [],
50
- };
51
- const output = {
52
- title: headerInfo.title,
53
- sections: headerInfo.sections.map((section) => {
54
- const sectionData = { title: section.title };
55
- if (section.description) {
56
- sectionData.description = section.description;
57
- }
58
- sectionData.criticalNotices = section.criticalNotices;
59
- sectionData.subsections = section.subsections.map((sub) => {
60
- const subData = {
61
- title: sub.title,
62
- content: sub.content,
63
- };
64
- // Only include sections if not empty
65
- if (sub.sections && sub.sections.length > 0) {
66
- subData.sections = sub.sections;
67
- }
68
- // Only include items if not empty
69
- if (sub.items && sub.items.length > 0) {
70
- subData.items = sub.items.map((item) => {
71
- const itemData = {
72
- title: item.title,
73
- content: item.content,
74
- };
75
- if (item.code) {
76
- itemData.code = item.code;
77
- }
78
- if (item.sections && item.sections.length > 0) {
79
- itemData.sections = item.sections;
80
- }
81
- return itemData;
82
- });
83
- }
84
- return subData;
85
- });
86
- return sectionData;
87
- }),
88
- totalComponents: state.sections.length,
89
- sourceUrl: state.sourceUrl,
90
- };
91
- return {
92
- content: [
93
- {
94
- type: 'text',
95
- text: JSON.stringify(output, null, 2),
96
- },
97
- ],
98
- structuredContent: output,
99
- };
100
- });
101
- }
102
- //# sourceMappingURL=get-overview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-overview.js","sourceRoot":"","sources":["../../src/tools/get-overview.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { registerGetComponentExampleTool } from './get-component-example.js';
2
- import { registerGetListComponentsTool } from './get-list-components.js';
3
- import { registerGetOverviewTool } from './get-overview.js';
4
- export function registerAllTools(server) {
5
- registerGetOverviewTool(server);
6
- registerGetListComponentsTool(server);
7
- registerGetComponentExampleTool(server);
8
- }
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,+BAA+B,EAAC,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAC,6BAA6B,EAAC,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAC9C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,407 +0,0 @@
1
- /**
2
- * Extracts the documentation header from raw content.
3
- * Header is everything before the first "# components/" heading.
4
- */
5
- export function extractHeaderContent(rawContent) {
6
- const lines = rawContent.split(/\r?\n/);
7
- const headerLines = [];
8
- for (const line of lines) {
9
- if (/^#\s+components\//.test(line)) {
10
- break;
11
- }
12
- headerLines.push(line);
13
- }
14
- return headerLines.join('\n').trim();
15
- }
16
- /**
17
- * Finds the line number where components section starts.
18
- */
19
- export function findComponentsSectionStart(rawContent) {
20
- const lines = rawContent.split(/\r?\n/);
21
- for (let i = 0; i < lines.length; i++) {
22
- const line = lines[i];
23
- if (line && /^#\s+components\//.test(line)) {
24
- return i;
25
- }
26
- }
27
- return lines.length;
28
- }
29
- /**
30
- * Parses code blocks from content lines.
31
- */
32
- function extractCodeBlocks(content) {
33
- const codeBlocks = [];
34
- const lines = content.split('\n');
35
- let inCodeBlock = false;
36
- let currentLang = '';
37
- let currentCode = [];
38
- for (const line of lines) {
39
- if (line.startsWith('```')) {
40
- if (inCodeBlock) {
41
- // End of code block
42
- codeBlocks.push({
43
- language: currentLang,
44
- code: currentCode.join('\n').trim(),
45
- });
46
- currentCode = [];
47
- inCodeBlock = false;
48
- }
49
- else {
50
- // Start of code block
51
- currentLang = line.slice(3).trim() || 'plaintext';
52
- inCodeBlock = true;
53
- }
54
- }
55
- else if (inCodeBlock) {
56
- currentCode.push(line);
57
- }
58
- }
59
- return codeBlocks;
60
- }
61
- /**
62
- * Extracts plain text content (removes markdown formatting, code blocks, etc).
63
- */
64
- function extractPlainContent(content) {
65
- const lines = content.split('\n');
66
- const plainLines = [];
67
- let inCodeBlock = false;
68
- for (const line of lines) {
69
- // Skip code blocks
70
- if (line.startsWith('```')) {
71
- inCodeBlock = !inCodeBlock;
72
- continue;
73
- }
74
- if (inCodeBlock) {
75
- continue;
76
- }
77
- // Skip empty lines
78
- if (!line.trim()) {
79
- continue;
80
- }
81
- // Skip markdown headings (they're already captured)
82
- if (/^#{1,6}\s+/.test(line)) {
83
- continue;
84
- }
85
- // Skip horizontal rules
86
- if (/^-{3,}\s*$/.test(line)) {
87
- continue;
88
- }
89
- // Skip blockquotes with **Critical** or **Auto-generated** (already extracted)
90
- if (line.includes('**Critical**:') || line.includes('**Auto-generated**:')) {
91
- continue;
92
- }
93
- // Clean up other blockquotes
94
- let cleaned = line.replace(/^>\s*/, '').trim();
95
- // Remove bold/italic markers
96
- cleaned = cleaned.replaceAll(/\*\*([^*]+)\*\*/g, '$1');
97
- cleaned = cleaned.replaceAll(/\*([^*]+)\*/g, '$1');
98
- // Remove inline code markers
99
- cleaned = cleaned.replaceAll(/`([^`]+)`/g, '$1');
100
- if (cleaned) {
101
- plainLines.push(cleaned);
102
- }
103
- }
104
- return plainLines;
105
- }
106
- /**
107
- * Parses a section into structured data.
108
- */
109
- function parseSection(content) {
110
- const lines = content.split('\n');
111
- const subsections = [];
112
- const description = [];
113
- const criticalNotices = [];
114
- let title = '';
115
- // Find all headings (both markdown # and **bold:** patterns)
116
- const headings = [];
117
- for (let i = 0; i < lines.length; i++) {
118
- const line = lines[i];
119
- if (!line) {
120
- continue;
121
- }
122
- // Extract title from first heading
123
- const h1Match = /^#\s+([^#]\S.*)$/.exec(line);
124
- if (h1Match?.[1] && !title) {
125
- title = h1Match[1].trim();
126
- headings.push({ line: i, level: 1, title: h1Match[1].trim() });
127
- continue;
128
- }
129
- // Extract subsections (##, ###, etc)
130
- const hMatch = /^(#{2,6})\s+(\S.*)$/.exec(line);
131
- if (hMatch?.[1] && hMatch[2]) {
132
- const level = hMatch[1].length;
133
- headings.push({ line: i, level, title: hMatch[2].trim() });
134
- continue;
135
- }
136
- // Extract **Bold:** headings (treat as level 2)
137
- const boldMatch = /^\*\*(.+):\*\*$/.exec(line);
138
- if (boldMatch?.[1]) {
139
- headings.push({ line: i, level: 2, title: `${boldMatch[1].trim()}:` });
140
- }
141
- // Extract critical notices
142
- if (line.startsWith('> **Critical**:')) {
143
- const notice = line.replace(/^>\s*\*\*Critical\*\*:\s*/, '').trim();
144
- if (notice) {
145
- criticalNotices.push(notice);
146
- }
147
- }
148
- }
149
- // Extract description (content before first subsection)
150
- if (headings.length > 0 && headings[0]) {
151
- const firstSubsectionLine = headings.find((h) => h.level > 1)?.line;
152
- const descEnd = firstSubsectionLine ?? lines.length;
153
- const descContent = lines.slice(headings[0].line + 1, descEnd).join('\n');
154
- description.push(...extractPlainContent(descContent));
155
- }
156
- // Parse subsections - group bold headings under level-3, level-3 under level-2
157
- let currentSubsection = null;
158
- let currentItem = null;
159
- let currentGroup = null;
160
- const pushCurrentItem = () => {
161
- if (!currentItem || !currentSubsection) {
162
- return;
163
- }
164
- if (currentItem.content.length > 0 ||
165
- currentItem.code ||
166
- (currentItem.sections && currentItem.sections.length > 0)) {
167
- currentSubsection.items = currentSubsection.items || [];
168
- currentSubsection.items.push(currentItem);
169
- }
170
- currentItem = null;
171
- };
172
- const pushCurrentGroup = () => {
173
- if (!currentGroup || !currentSubsection) {
174
- return;
175
- }
176
- if (currentGroup.content.length > 0 ||
177
- (currentGroup.sections && currentGroup.sections.length > 0)) {
178
- currentSubsection.items = currentSubsection.items || [];
179
- currentSubsection.items.push(currentGroup);
180
- }
181
- currentGroup = null;
182
- };
183
- const addSectionToItem = (item, sectionItem, plainContent) => {
184
- item.sections = item.sections || [];
185
- item.sections.push(sectionItem);
186
- if (plainContent.length > 0) {
187
- item.content.push(...plainContent);
188
- }
189
- };
190
- for (let i = 1; i < headings.length; i++) {
191
- const current = headings[i];
192
- if (!current) {
193
- continue;
194
- }
195
- const start = current.line;
196
- const end = headings[i + 1]?.line ?? lines.length;
197
- const subsectionContent = lines.slice(start + 1, end).join('\n');
198
- // Level 2 heading (##) - create new subsection
199
- if (current.level === 2 && !current.title.endsWith(':')) {
200
- // Save previous subsection and item (only if they have content)
201
- pushCurrentItem();
202
- pushCurrentGroup();
203
- if (currentSubsection) {
204
- // Only push if has content
205
- if (currentSubsection.content.length > 0 ||
206
- (currentSubsection.sections &&
207
- currentSubsection.sections.length > 0) ||
208
- (currentSubsection.items && currentSubsection.items.length > 0)) {
209
- subsections.push(currentSubsection);
210
- }
211
- }
212
- const [block] = extractCodeBlocks(subsectionContent);
213
- const subsectionSections = block
214
- ? [
215
- {
216
- section: current.title,
217
- code: block.code,
218
- },
219
- ]
220
- : [];
221
- currentSubsection = {
222
- title: current.title,
223
- content: extractPlainContent(subsectionContent),
224
- sections: subsectionSections,
225
- items: [],
226
- };
227
- }
228
- // Level 3 heading (###) - create new nested item
229
- else if (current.level === 3 && !current.title.endsWith(':')) {
230
- const plainContent = extractPlainContent(subsectionContent);
231
- const codeBlocks = extractCodeBlocks(subsectionContent);
232
- const code = codeBlocks.length > 0 ? codeBlocks[0]?.code : undefined;
233
- if (currentGroup && currentSubsection) {
234
- const sectionItem = {
235
- section: current.title,
236
- code,
237
- };
238
- currentGroup.sections = currentGroup.sections || [];
239
- currentGroup.sections.push(sectionItem);
240
- if (plainContent.length > 0) {
241
- currentGroup.content.push(...plainContent);
242
- }
243
- continue;
244
- }
245
- // Save previous item (only if it has content or sections)
246
- pushCurrentItem();
247
- currentItem = {
248
- title: current.title,
249
- content: plainContent,
250
- ...(code ? { code } : {}),
251
- sections: [],
252
- };
253
- }
254
- // Bold heading (ends with :) - add to current context
255
- else if (current.title.endsWith(':')) {
256
- const codeBlocks = extractCodeBlocks(subsectionContent);
257
- const code = codeBlocks.length > 0 ? codeBlocks[0]?.code : undefined;
258
- const plainContent = extractPlainContent(subsectionContent);
259
- const nextHeading = headings[i + 1];
260
- if (currentSubsection && !currentItem && nextHeading?.level === 3) {
261
- pushCurrentGroup();
262
- currentGroup = {
263
- title: current.title.replace(/:\s*$/, ''),
264
- content: plainContent,
265
- ...(code ? { code } : {}),
266
- sections: [],
267
- };
268
- currentItem = null;
269
- }
270
- else {
271
- const sectionItem = {
272
- section: current.title,
273
- code,
274
- };
275
- if (currentItem) {
276
- addSectionToItem(currentItem, sectionItem, plainContent);
277
- continue;
278
- }
279
- if (currentSubsection) {
280
- currentSubsection.sections = currentSubsection.sections || [];
281
- currentSubsection.sections.push(sectionItem);
282
- continue;
283
- }
284
- // Standalone bold heading
285
- subsections.push({
286
- title: current.title,
287
- content: plainContent,
288
- sections: code ? [sectionItem] : undefined,
289
- });
290
- }
291
- }
292
- // Other headings - handle as needed
293
- else {
294
- pushCurrentItem();
295
- pushCurrentGroup();
296
- if (currentSubsection) {
297
- subsections.push(currentSubsection);
298
- currentSubsection = null;
299
- }
300
- const plainContent = extractPlainContent(subsectionContent);
301
- const codeBlocks = extractCodeBlocks(subsectionContent);
302
- subsections.push({
303
- title: current.title,
304
- content: plainContent,
305
- sections: codeBlocks.length > 0
306
- ? [{ section: current.title, code: codeBlocks[0]?.code }]
307
- : undefined,
308
- });
309
- }
310
- }
311
- // Push last item/group and subsection (only if they have content)
312
- pushCurrentItem();
313
- pushCurrentGroup();
314
- if (currentSubsection) {
315
- // Only push subsection if it has content, sections, or items
316
- if (currentSubsection.content.length > 0 ||
317
- (currentSubsection.sections && currentSubsection.sections.length > 0) ||
318
- (currentSubsection.items && currentSubsection.items.length > 0)) {
319
- subsections.push(currentSubsection);
320
- }
321
- }
322
- // Special handling for .md files: if no subsections were created but there's code content
323
- // (typical for installation guide files), create a subsection with the code
324
- if (subsections.length === 0 && headings.length === 1 && headings[0]) {
325
- // Get content after the title heading
326
- const contentAfterTitle = lines.slice(headings[0].line + 1).join('\n');
327
- const codeBlocks = extractCodeBlocks(contentAfterTitle);
328
- if (codeBlocks.length > 0 && codeBlocks[0]) {
329
- // Create a subsection with code directly in content
330
- subsections.push({
331
- title: '', // Empty title for direct code under h1
332
- content: [codeBlocks[0].code], // Put code as single string in content
333
- });
334
- }
335
- }
336
- const descriptionText = description.join('\n');
337
- return {
338
- title,
339
- description: descriptionText || '',
340
- criticalNotices,
341
- subsections,
342
- };
343
- }
344
- /**
345
- * Parses the header content into fully structured JSON.
346
- */
347
- export function parseHeaderSections(headerContent) {
348
- const lines = headerContent.split(/\r?\n/);
349
- const sections = [];
350
- const title = 'Taiga UI - Complete Documentation';
351
- // Find main sections (level-1 headings)
352
- const sectionIndices = [];
353
- for (let i = 0; i < lines.length; i++) {
354
- const line = lines[i];
355
- if (!line) {
356
- continue;
357
- }
358
- // Level-1 heading
359
- const h1Match = /^#\s+([^#]\S.*)$/.exec(line);
360
- if (h1Match?.[1]) {
361
- sectionIndices.push({
362
- line: i,
363
- title: h1Match[1].trim(),
364
- });
365
- }
366
- }
367
- // Parse each section
368
- for (let i = 0; i < sectionIndices.length; i++) {
369
- const currentSection = sectionIndices[i];
370
- if (!currentSection) {
371
- continue;
372
- }
373
- const start = currentSection.line;
374
- const end = sectionIndices[i + 1]?.line ?? lines.length;
375
- const sectionContent = lines.slice(start, end).join('\n');
376
- const parsedSection = parseSection(sectionContent);
377
- sections.push(parsedSection);
378
- }
379
- const compactSections = sections.map((section) => {
380
- const hasMarkdownSubsections = section.subsections.some((subsection) => subsection.title.endsWith('.md'));
381
- if (!hasMarkdownSubsections) {
382
- return section;
383
- }
384
- return {
385
- ...section,
386
- subsections: section.subsections.map((subsection) => {
387
- const redundantSingleCodeSection = subsection.content.length === 0 &&
388
- !subsection.items?.length &&
389
- subsection.sections?.length === 1 &&
390
- subsection.sections[0]?.section === subsection.title &&
391
- Boolean(subsection.sections[0].code);
392
- if (!redundantSingleCodeSection) {
393
- return subsection;
394
- }
395
- return {
396
- title: subsection.title,
397
- content: [subsection.sections?.[0]?.code ?? ''],
398
- };
399
- }),
400
- };
401
- });
402
- return {
403
- title,
404
- sections: compactSections,
405
- };
406
- }
407
- //# sourceMappingURL=extract-header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-header.js","sourceRoot":"","sources":["../../src/utils/extract-header.ts"],"names":[],"mappings":"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"}
@@ -1,97 +0,0 @@
1
- import { state } from '../server/server.js';
2
- const GENERIC_SUFFIXES = new Set([
3
- 'component',
4
- 'context',
5
- 'directive',
6
- 'guard',
7
- 'interceptor',
8
- 'module',
9
- 'options',
10
- 'pipe',
11
- 'service',
12
- ]);
13
- function normalizeToKebab(name) {
14
- const stripped = name.replace(/^[Tt]ui[-_]?/, '');
15
- return stripped.replaceAll(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
16
- }
17
- export function findSection(name) {
18
- const stripped = name.replace(/^[Tt]ui[-_]?/, '');
19
- const kebab = normalizeToKebab(name);
20
- // Last word of kebab: "icon-button" → "button" (useful for compound names like TuiIconButton)
21
- // Exclude generic Angular suffixes that match too broadly
22
- const kebabParts = kebab.split('-').filter(Boolean);
23
- const lastWordCandidate = kebabParts.length > 1 ? (kebabParts[kebabParts.length - 1] ?? '') : '';
24
- const lastWord = GENERIC_SUFFIXES.has(lastWordCandidate) ? '' : lastWordCandidate;
25
- const pascalCase = (stripped || name)
26
- .toLowerCase()
27
- .split(/[-_\s]+/)
28
- .filter(Boolean)
29
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
30
- .join('');
31
- const tuiVariant = pascalCase.startsWith('Tui') ? pascalCase : `Tui${pascalCase}`;
32
- // All variants pre-lowercased to avoid repeated .toLowerCase() in loops
33
- const variants = [
34
- name.toLowerCase(),
35
- stripped.toLowerCase(),
36
- kebab,
37
- lastWord,
38
- pascalCase.toLowerCase(),
39
- tuiVariant.toLowerCase(),
40
- ].filter(Boolean);
41
- // Pre-compute per-section data once per call
42
- const sections = state.sections.map((section) => ({
43
- section,
44
- id: section.id.toLowerCase(),
45
- segment: section.id.split('/').pop()?.toLowerCase() ?? '',
46
- }));
47
- // Exact match
48
- for (const variant of variants) {
49
- const match = sections.find((s) => s.id === variant);
50
- if (match) {
51
- return match.section;
52
- }
53
- }
54
- // Last path segment match
55
- for (const variant of variants) {
56
- const match = sections.find((s) => s.segment === variant);
57
- if (match) {
58
- return match.section;
59
- }
60
- }
61
- // Ends-with match
62
- for (const variant of variants) {
63
- const match = sections.find((s) => s.id.endsWith(`/${variant}`));
64
- if (match) {
65
- return match.section;
66
- }
67
- }
68
- // Substring fallback — check all variants including stripped/kebab
69
- for (const variant of variants) {
70
- const match = sections.find((s) => s.id.includes(variant));
71
- if (match) {
72
- return match.section;
73
- }
74
- }
75
- return undefined;
76
- }
77
- export function suggestSections(query) {
78
- const kebab = normalizeToKebab(query);
79
- const parts = kebab
80
- .split('-')
81
- .filter((p) => !GENERIC_SUFFIXES.has(p) && p.length > 1);
82
- // Try full kebab first, then without generic suffixes
83
- const normalizedQuery = (parts.join('-') || kebab || query).toLowerCase();
84
- const results = [];
85
- for (const section of state.sections) {
86
- const idLower = section.id.toLowerCase();
87
- const matchIndex = idLower.indexOf(normalizedQuery);
88
- if (matchIndex !== -1) {
89
- results.push({
90
- id: section.id,
91
- score: matchIndex * 10 + Math.abs(idLower.length - normalizedQuery.length),
92
- });
93
- }
94
- }
95
- return results.sort((a, b) => a.score - b.score).map((r) => r.id);
96
- }
97
- //# sourceMappingURL=find-section.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-section.js","sourceRoot":"","sources":["../../src/utils/find-section.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { state } from '../server/server.js';
2
- export function constructComponentsList(query = '') {
3
- const normalizedQuery = query.toLowerCase().replace(/^tui/, '');
4
- return state.sections
5
- .filter((section) => !normalizedQuery || section.id.toLowerCase().includes(normalizedQuery))
6
- .map((section) => {
7
- const idParts = section.id.split('/');
8
- const name = idParts[idParts.length - 1] ?? section.id;
9
- const category = idParts[0] ?? '';
10
- return {
11
- id: section.id,
12
- name,
13
- category,
14
- package: section.package ?? null,
15
- type: section.kind ?? null,
16
- };
17
- });
18
- }
19
- //# sourceMappingURL=list-components.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/utils/list-components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAU1C,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,EAAE;IAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhE,OAAO,KAAK,CAAC,QAAQ;SAChB,MAAM,CACH,CAAC,OAAO,EAAE,EAAE,CACR,CAAC,eAAe,IAAI,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC7E;SACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,OAAO;YACH,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI;YACJ,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;IACN,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1,10 +0,0 @@
1
- // In STDIO-based MCP servers can use only stderr for logging
2
- // https://modelcontextprotocol.io/docs/develop/build-server#logging-in-mcp-servers
3
- export function logError(message, err) {
4
- const stack = err instanceof Error ? (err.stack ?? err.message) : String(err);
5
- console.error(`[ERROR] ${message}: ${stack}`);
6
- }
7
- export function logInfo(message) {
8
- console.warn(`[INFO] ${message}`);
9
- }
10
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,mFAAmF;AAEnF,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAY;IAClD,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACnC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC"}
@@ -1,53 +0,0 @@
1
- import { state } from '../server/server.js';
2
- import { extractHeaderContent, findComponentsSectionStart } from './extract-header.js';
3
- function extractMeta(text) {
4
- let pkg;
5
- let kind;
6
- const pkgMatch = /\*\*Package\*\*:\s*`([^`]+)`/i.exec(text);
7
- if (pkgMatch?.[1]) {
8
- pkg = pkgMatch[1];
9
- }
10
- const typeMatch = /\*\*Type\*\*:\s*([^\n]+)/i.exec(text);
11
- if (typeMatch?.[1]) {
12
- kind = typeMatch[1].trim();
13
- }
14
- return { package: pkg, kind };
15
- }
16
- export function parseContent(rawContent, sourceUrl) {
17
- state.sourceUrl = sourceUrl;
18
- // Extract and store header separately
19
- const headerContent = extractHeaderContent(rawContent);
20
- state.overview = headerContent;
21
- const lines = rawContent.split(/\r?\n/);
22
- const componentsStartLine = findComponentsSectionStart(rawContent);
23
- const headerIndices = [];
24
- // Find all level-1 headings that are components (starting after the horizontal rule)
25
- for (let lineIndex = componentsStartLine; lineIndex < lines.length; lineIndex++) {
26
- const line = lines[lineIndex];
27
- if (line === undefined) {
28
- continue;
29
- }
30
- // Match level-1 headings for components (# ...)
31
- const headerMatch = /^#\s+(\S.*)$/.exec(line);
32
- if (headerMatch?.[1]) {
33
- headerIndices.push({
34
- line: lineIndex,
35
- title: headerMatch[1].trim(),
36
- });
37
- }
38
- }
39
- state.sections = headerIndices.map((header, headerIndex) => {
40
- const start = header.line;
41
- const end = headerIndices[headerIndex + 1]?.line ?? lines.length;
42
- const content = lines.slice(start, end).join('\n');
43
- const meta = extractMeta(content);
44
- return {
45
- id: header.title,
46
- title: header.title,
47
- content,
48
- package: meta.package,
49
- kind: meta.kind,
50
- };
51
- });
52
- }
53
- //# sourceMappingURL=parse-content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-content.js","sourceRoot":"","sources":["../../src/utils/parse-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAErF,SAAS,WAAW,CAAC,IAAY;IAC7B,IAAI,GAAuB,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAE7B,MAAM,QAAQ,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5D,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,SAAiB;IAC9D,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAE5B,sCAAsC;IACtC,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEvD,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IAE/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAyC,EAAE,CAAC;IAE/D,qFAAqF;IACrF,KAAK,IAAI,SAAS,GAAG,mBAAmB,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QAED,gDAAgD;QAChD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAc,EAAE;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAElC,OAAO;YACH,EAAE,EAAE,MAAM,CAAC,KAAK;YAChB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,42 +0,0 @@
1
- import { findSection, suggestSections } from './find-section.js';
2
- export function extractContentSnippets(section) {
3
- const text = section.content || '';
4
- const trimmed = text.trim();
5
- if (!trimmed) {
6
- return [];
7
- }
8
- const cleaned = trimmed
9
- .split(/\r?\n/)
10
- .map((line) => line.replace(/^#{1,6}\s*/, ''))
11
- .join('\n')
12
- .trim();
13
- return cleaned ? [cleaned] : [];
14
- }
15
- export function buildQueryResults(names) {
16
- const results = [];
17
- for (const queryName of names) {
18
- const section = findSection(queryName);
19
- if (!section) {
20
- const notFound = {
21
- query: queryName,
22
- suggestions: suggestSections(queryName),
23
- };
24
- results.push(notFound);
25
- continue;
26
- }
27
- const snippets = extractContentSnippets(section);
28
- const foundResult = {
29
- query: queryName,
30
- id: section.id,
31
- package: section.package ?? null,
32
- type: section.kind ?? null,
33
- };
34
- if (snippets.length) {
35
- foundResult.content = snippets;
36
- }
37
- results.push(foundResult);
38
- }
39
- const matches = results.filter((result) => !!result.id).length;
40
- return { results, matches };
41
- }
42
- //# sourceMappingURL=query-results.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-results.js","sourceRoot":"","sources":["../../src/utils/query-results.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IAEZ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAI7C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,QAAQ,GAAgB;gBAC1B,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,eAAe,CAAC,SAAS,CAAC;aAC1C,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvB,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAgB;YAC7B,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAE/D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;AAC9B,CAAC"}