@taiga-ui/mcp 0.1.0-alpha.9 → 0.1.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
@@ -3,9 +3,6 @@
3
3
  [![MCP Badge](https://lobehub.com/badge/mcp/taiga-family-taiga-ui-mcp?style=plastic)](https://lobehub.com/mcp/taiga-family-taiga-ui-mcp)
4
4
  [![npm version](https://img.shields.io/npm/v/@taiga-ui/mcp.svg)](https://npmjs.com/package/@taiga-ui/mcp)
5
5
 
6
- > 🚧 **Alpha Release**
7
- > `@taiga-ui/mcp` is currently in **alpha**.
8
-
9
6
  > **🚀 The fastest way to integrate Taiga UI components into your AI workflow**
10
7
 
11
8
  A Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to
@@ -15,7 +12,8 @@ development workflow.
15
12
  ### Key Features
16
13
 
17
14
  - **Docs + code snippets**. Full Taiga UI markdown plus ready Angular examples in one place.
18
- - **Two MCP tools**. Discover with `get_list_components`, fetch examples via `get_component_example`.
15
+ - **Three MCP tools**. Get structured overview with `get_overview`, discover with `get_list_components`, fetch examples
16
+ via `get_component_example`.
19
17
  - **Configurable & lightweight**. Swap source URL (stable/next) without local Angular install.
20
18
 
21
19
  ### Requirements
@@ -29,17 +27,17 @@ First, install the Taiga UI MCP server with your client.
29
27
 
30
28
  **Standard config** works in most of the tools:
31
29
 
32
- ```json5
30
+ ```json
33
31
  {
34
- mcpServers: {
35
- 'taiga-ui': {
36
- command: 'npx',
37
- args: [
38
- '@taiga-ui/mcp@latest',
39
- '--source-url=https://taiga-ui.dev/llms-full.txt', // or file from "/next" version, if you want
40
- ],
41
- },
42
- },
32
+ "mcpServers": {
33
+ "taiga-ui": {
34
+ "command": "npx",
35
+ "args": [
36
+ "@taiga-ui/mcp@latest",
37
+ "--source-url=https://taiga-ui.dev/llms-full.txt" // or file from /next version, if you want
38
+ ]
39
+ }
40
+ }
43
41
  }
44
42
  ```
45
43
 
@@ -48,21 +46,77 @@ First, install the Taiga UI MCP server with your client.
48
46
  <details>
49
47
  <summary><b>Core automation</b></summary>
50
48
 
51
- 1. `get_list_components { query?: string }`
49
+ 1. `get_overview`
50
+ - Returns structured documentation header: import map (all packages and their exports), code generation checklist,
51
+ CDK types reference, common mistakes, and getting started guides.
52
+ - **Always call this first** before using other tools — it provides critical context for correct code generation
53
+ (right packages, right types, common pitfalls).
54
+ - Output: JSON with `sections` array (Import Map, Code Generation Checklist, CDK Types Reference, Common Mistakes,
55
+ Getting Started) and `totalComponents` count.
56
+
57
+ ```ts
58
+ get_overview();
59
+ ```
60
+
61
+ ```json
62
+ {
63
+ "title": "Taiga UI - Complete Documentation",
64
+ "sections": [
65
+ {
66
+ "title": "Import Map - Package Exports Reference",
67
+ "criticalNotices": ["Always import from the correct package. This is the #1 cause of compilation errors."],
68
+ "subsections": [...]
69
+ },
70
+ { "title": "Code Generation Checklist", "subsections": [...] },
71
+ { "title": "CDK Types Reference", "subsections": [...] },
72
+ { "title": "Common Mistakes", "subsections": [...] },
73
+ {
74
+ "title": "Getting Started",
75
+ "description": "Installation and setup guides",
76
+ "subsections": [
77
+ { "title": "addons", "content": ["npm i @taiga-ui/addon-charts ..."] },
78
+ { "title": "app-standalone", "content": ["import {TuiRoot} from '@taiga-ui/core'; ..."] },
79
+ ...
80
+ ]
81
+ }
82
+ ],
83
+ "totalComponents": 185
84
+ }
85
+ ```
86
+
87
+ 2. `get_list_components { query?: string }`
52
88
  - Lists component / section identifiers (with fuzzy substring filtering) along with basic metadata (category,
53
89
  package, type).
54
90
  - Input: optional `query` string to filter IDs (case-insensitive substring).
55
- - Output: strictly structured JSON containing `items`, `total`, `query`.
91
+ - Output: strictly structured JSON containing `items`, `total`.
92
+
93
+ ```ts
94
+ get_list_components();
95
+ ```
56
96
 
57
- ```json5
97
+ ```json
58
98
  {
59
- items: [{id: 'components/Alert', name: 'Alert', category: 'components', package: 'CORE', type: 'component'}],
60
- total: 1,
61
- query: null,
99
+ "items": [
100
+ {
101
+ "id": "components/Alert",
102
+ "name": "Alert",
103
+ "category": "components",
104
+ "package": "CORE",
105
+ "type": "component"
106
+ },
107
+ {
108
+ "id": "components/Button",
109
+ "package": "CORE",
110
+ "type": "component",
111
+ "name": "Button",
112
+ "category": "components"
113
+ },
114
+ ...
115
+ ],
62
116
  }
63
117
  ```
64
118
 
65
- 2. `get_component_example { "names": ["...", "..."] }`
119
+ 3. `get_component_example { "names": ["...", "..."] }`
66
120
  - Returns full markdown content for each resolved section (entire component documentation).
67
121
  - Fuzzy name resolution: exact match, path segment, suffix, substring, and `Tui*` variants.
68
122
  - Input: `{ names: string[] }` (each name length ≥ 2).
@@ -70,23 +124,27 @@ First, install the Taiga UI MCP server with your client.
70
124
  unresolved), `content` (array of code blocks, if examples exist). Top-level also includes `matched` (count of
71
125
  resolved names).
72
126
 
73
- ```json5
127
+ ```ts
128
+ get_component_example({names: ['Alert']});
129
+ ```
130
+
131
+ ```json
74
132
  {
75
- results: [
133
+ "results": [
76
134
  {
77
- query: 'Alert',
78
- id: 'components/Alert',
79
- package: 'CORE',
80
- type: 'component',
81
- content: ['# components/Alert\n- **Package**: ... (full section markdown here)'],
82
- },
135
+ "query": "Alert",
136
+ "id": "components/Alert",
137
+ "package": "CORE",
138
+ "type": "component",
139
+ "content": ["# components/Alert\n- **Package**: ... (full component API, usage examples, ...)"]
140
+ }
83
141
  ],
84
- matched: 1,
142
+ "matched": 1
85
143
  }
86
144
  ```
87
145
 
88
- > Tip: Combine `get_list_components` to discover IDs and then fetch full implementation snippets with
89
- > `get_component_example`.
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.
90
148
 
91
149
  </details>
92
150
 
@@ -7,12 +7,35 @@ import { logError, logInfo } from '../utils/logger.js';
7
7
  import { ensureSourceLoaded } from './fetch.js';
8
8
  export const state = {
9
9
  sections: [],
10
+ overview: undefined,
10
11
  sourceUrl: undefined,
11
12
  lastLoadedAt: undefined,
12
13
  };
13
14
  const server = new McpServer({
14
15
  name: 'taiga-ui-mcp',
15
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
+ `,
16
39
  });
17
40
  registerAllTools(server);
18
41
  export async function start() {
@@ -1 +1 @@
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;AAQ9C,MAAM,CAAC,MAAM,KAAK,GAAe;IAC7B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;CAC1B,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,WAAW,CAAC,OAAO;CAC/B,CAAC,CAAC;AAEH,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
+ {"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"}
@@ -19,9 +19,7 @@ export function registerGetComponentExampleTool(server) {
19
19
  },
20
20
  }, async ({ names }) => {
21
21
  if (!names.length) {
22
- const output = {
23
- error: 'Provide at least one name in names array.',
24
- };
22
+ const output = { error: 'Provide at least one name in names array.' };
25
23
  return {
26
24
  content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
27
25
  structuredContent: output,
@@ -1 +1 @@
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;gBACX,KAAK,EAAE,2CAA2C;aACrD,CAAC;YAEF,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
+ {"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"}
@@ -14,17 +14,10 @@ export function registerGetListComponentsTool(server) {
14
14
  package: z.string().nullable(),
15
15
  type: z.string().nullable(),
16
16
  })),
17
- total: z.number(),
18
- query: z.string().nullable(),
19
17
  },
20
18
  }, async ({ query }) => {
21
19
  await ensureSourceLoaded();
22
- const { items, normalizedQuery } = constructComponentsList(query);
23
- const output = {
24
- items,
25
- total: items.length,
26
- query: normalizedQuery,
27
- };
20
+ const output = { items: constructComponentsList(query) };
28
21
  return {
29
22
  content: [
30
23
  {
@@ -1 +1 @@
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;YACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC/B;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAmB,EAAE,EAAE;QAChC,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,EAAC,KAAK,EAAE,eAAe,EAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG;YACX,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,eAAe;SACzB,CAAC;QAEF,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
+ {"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"}
@@ -0,0 +1,102 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-overview.js","sourceRoot":"","sources":["../../src/tools/get-overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAEH,mBAAmB,GAEtB,MAAM,4BAA4B,CAAC;AAyBpC,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACf,cAAc,EACd;QACI,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACP,0UAA0U;QAC9U,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpC,YAAY,EAAE;YACV,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;gBACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAClC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpC,WAAW,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;oBACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;oBACjB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBAC5B,QAAQ,EAAE,CAAC;yBACN,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;wBACL,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;wBACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;qBAC9B,CAAC,CACL;yBACA,QAAQ,EAAE;oBACf,KAAK,EAAE,CAAC;yBACH,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;wBACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;wBACjB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;wBAC3B,QAAQ,EAAE,CAAC;6BACN,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;4BACL,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;4BACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;yBAC9B,CAAC,CACL;6BACA,QAAQ,EAAE;qBAClB,CAAC,CACL;yBACA,QAAQ,EAAE;iBAClB,CAAC,CACL;aACJ,CAAC,CACL;YACD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;YAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;KACJ,EACD,KAAK,IAAI,EAAE;QACP,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ;YAC7B,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC;gBACI,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,EAAE;aACf,CAAC;QAER,MAAM,MAAM,GAAmB;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAsB,EAAE,EAAE;gBACzD,MAAM,WAAW,GAAQ,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC;gBAEhD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACtB,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBAClD,CAAC;gBAED,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;gBACtD,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAC7C,CAAC,GAAe,EAAE,EAAE;oBAChB,MAAM,OAAO,GAAQ;wBACjB,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;qBACvB,CAAC;oBAEF,qCAAqC;oBACrC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1C,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBACpC,CAAC;oBAED,kCAAkC;oBAClC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;4BACxC,MAAM,QAAQ,GAAQ;gCAClB,KAAK,EAAE,IAAI,CAAC,KAAK;gCACjB,OAAO,EAAE,IAAI,CAAC,OAAO;6BACxB,CAAC;4BAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gCACZ,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC9B,CAAC;4BAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC5C,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;4BACtC,CAAC;4BAED,OAAO,QAAQ,CAAC;wBACpB,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,OAAO,OAAO,CAAC;gBACnB,CAAC,CACJ,CAAC;gBAEF,OAAO,WAAW,CAAC;YACvB,CAAC,CAAC;YACF,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;YACtC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC7B,CAAC;QAEF,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,6 +1,8 @@
1
1
  import { registerGetComponentExampleTool } from './get-component-example.js';
2
2
  import { registerGetListComponentsTool } from './get-list-components.js';
3
+ import { registerGetOverviewTool } from './get-overview.js';
3
4
  export function registerAllTools(server) {
5
+ registerGetOverviewTool(server);
4
6
  registerGetListComponentsTool(server);
5
7
  registerGetComponentExampleTool(server);
6
8
  }
@@ -1 +1 @@
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;AAEvE,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAC9C,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
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"}
@@ -0,0 +1,407 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-header.js","sourceRoot":"","sources":["../../src/utils/extract-header.ts"],"names":[],"mappings":"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"}
@@ -1,66 +1,97 @@
1
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
+ }
2
17
  export function findSection(name) {
3
- const pascalCase = 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)
4
26
  .toLowerCase()
5
27
  .split(/[-_\s]+/)
6
28
  .filter(Boolean)
7
29
  .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
8
30
  .join('');
9
- const camelCase = pascalCase
10
- ? pascalCase.charAt(0).toLowerCase() + pascalCase.slice(1)
11
- : '';
12
31
  const tuiVariant = pascalCase.startsWith('Tui') ? pascalCase : `Tui${pascalCase}`;
32
+ // All variants pre-lowercased to avoid repeated .toLowerCase() in loops
13
33
  const variants = [
14
34
  name.toLowerCase(),
15
- pascalCase,
16
- camelCase,
17
- tuiVariant,
35
+ stripped.toLowerCase(),
36
+ kebab,
37
+ lastWord,
38
+ pascalCase.toLowerCase(),
18
39
  tuiVariant.toLowerCase(),
19
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
+ }));
20
47
  // Exact match
21
48
  for (const variant of variants) {
22
- const exactMatch = state.sections.find((section) => section.id.toLowerCase() === variant.toLowerCase());
23
- if (exactMatch) {
24
- return exactMatch;
49
+ const match = sections.find((s) => s.id === variant);
50
+ if (match) {
51
+ return match.section;
25
52
  }
26
53
  }
27
54
  // Last path segment match
28
55
  for (const variant of variants) {
29
- const segmentMatch = state.sections.find((section) => section.id.split('/').pop()?.toLowerCase() === variant.toLowerCase());
30
- if (segmentMatch) {
31
- return segmentMatch;
56
+ const match = sections.find((s) => s.segment === variant);
57
+ if (match) {
58
+ return match.section;
32
59
  }
33
60
  }
34
61
  // Ends-with match
35
62
  for (const variant of variants) {
36
- const endsWithMatch = state.sections.find((section) => section.id.toLowerCase().endsWith(`/${variant.toLowerCase()}`));
37
- if (endsWithMatch) {
38
- return endsWithMatch;
63
+ const match = sections.find((s) => s.id.endsWith(`/${variant}`));
64
+ if (match) {
65
+ return match.section;
39
66
  }
40
67
  }
41
- // Substring fallback
42
- const substringMatch = state.sections.find((section) => section.id.toLowerCase().includes(name.toLowerCase()));
43
- if (substringMatch) {
44
- return substringMatch;
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
+ }
45
74
  }
46
75
  return undefined;
47
76
  }
48
77
  export function suggestSections(query) {
49
- const normalizedQuery = query.toLowerCase();
50
- return state.sections
51
- .map((section) => {
52
- const sectionIdLower = section.id.toLowerCase();
53
- const matchIndex = sectionIdLower.indexOf(normalizedQuery);
54
- return matchIndex === -1
55
- ? null
56
- : {
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({
57
90
  id: section.id,
58
- score: matchIndex * 10 +
59
- Math.abs(sectionIdLower.length - normalizedQuery.length),
60
- };
61
- })
62
- .filter((candidate) => !!candidate)
63
- .sort((a, b) => a.score - b.score)
64
- .map((result) => result.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);
65
96
  }
66
97
  //# sourceMappingURL=find-section.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-section.js","sourceRoot":"","sources":["../../src/utils/find-section.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-section.js","sourceRoot":"","sources":["../../src/utils/find-section.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { state } from '../server/server.js';
2
2
  export function constructComponentsList(query = '') {
3
3
  const normalizedQuery = query.toLowerCase().replace(/^tui/, '');
4
- const items = state.sections
4
+ return state.sections
5
5
  .filter((section) => !normalizedQuery || section.id.toLowerCase().includes(normalizedQuery))
6
6
  .map((section) => {
7
7
  const idParts = section.id.split('/');
@@ -15,6 +15,5 @@ export function constructComponentsList(query = '') {
15
15
  type: section.kind ?? null,
16
16
  };
17
17
  });
18
- return { items, normalizedQuery };
19
18
  }
20
19
  //# sourceMappingURL=list-components.js.map
@@ -1 +1 @@
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;IAI9C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAsB,KAAK,CAAC,QAAQ;SAC1C,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;IAEP,OAAO,EAAC,KAAK,EAAE,eAAe,EAAC,CAAC;AACpC,CAAC"}
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,4 +1,5 @@
1
1
  import { state } from '../server/server.js';
2
+ import { extractHeaderContent, findComponentsSectionStart } from './extract-header.js';
2
3
  function extractMeta(text) {
3
4
  let pkg;
4
5
  let kind;
@@ -14,14 +15,20 @@ function extractMeta(text) {
14
15
  }
15
16
  export function parseContent(rawContent, sourceUrl) {
16
17
  state.sourceUrl = sourceUrl;
18
+ // Extract and store header separately
19
+ const headerContent = extractHeaderContent(rawContent);
20
+ state.overview = headerContent;
17
21
  const lines = rawContent.split(/\r?\n/);
22
+ const componentsStartLine = findComponentsSectionStart(rawContent);
18
23
  const headerIndices = [];
19
- for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
24
+ // Find all level-1 headings that are components (starting after the horizontal rule)
25
+ for (let lineIndex = componentsStartLine; lineIndex < lines.length; lineIndex++) {
20
26
  const line = lines[lineIndex];
21
27
  if (line === undefined) {
22
28
  continue;
23
29
  }
24
- const headerMatch = /^#\s+(.+)$/.exec(line);
30
+ // Match level-1 headings for components (# ...)
31
+ const headerMatch = /^#\s+(\S.*)$/.exec(line);
25
32
  if (headerMatch?.[1]) {
26
33
  headerIndices.push({
27
34
  line: lineIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"parse-content.js","sourceRoot":"","sources":["../../src/utils/parse-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAE1C,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,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,aAAa,GAAyC,EAAE,CAAC;IAE/D,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,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
+ {"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/mcp",
3
- "version": "0.1.0-alpha.9",
3
+ "version": "0.1.0",
4
4
  "description": "Model Context Protocol server providing Taiga UI documentation search and scaffolding tools.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -22,6 +22,16 @@
22
22
  "url": "git+https://github.com/taiga-family/taiga-ui-mcp.git"
23
23
  },
24
24
  "license": "Apache-2.0",
25
+ "contributors": [
26
+ {
27
+ "name": "Vladimir Potekhin",
28
+ "email": "vladimir.potekh@gmail.com"
29
+ },
30
+ {
31
+ "name": "German Panov",
32
+ "email": "zidakbew@gmail.com"
33
+ }
34
+ ],
25
35
  "type": "module",
26
36
  "main": "./dist/index.js",
27
37
  "bin": {
@@ -39,7 +49,6 @@
39
49
  "prepublishOnly": "npm run build",
40
50
  "prettier": "prettier !package-lock.json . --ignore-path .gitignore",
41
51
  "release": "npm publish --access public --tag latest",
42
- "postrelease": "npm dist-tag add @taiga-ui/mcp@$(node -p 'require(`./package.json`).version') alpha",
43
52
  "start": "node dist/index.js",
44
53
  "typecheck": "tsc --noEmit --incremental false"
45
54
  },
@@ -59,21 +68,16 @@
59
68
  ],
60
69
  "prettier": "@taiga-ui/prettier-config",
61
70
  "dependencies": {
62
- "@modelcontextprotocol/sdk": "1.21.1",
71
+ "@modelcontextprotocol/sdk": "1.29.0",
63
72
  "zod": "3.25.76"
64
73
  },
65
74
  "devDependencies": {
66
- "@taiga-ui/configs": "0.355.0",
67
- "@types/node": "24.10.0",
75
+ "@taiga-ui/configs": "0.446.0",
76
+ "@types/node": "24.10.11",
68
77
  "husky": "9.1.7",
69
- "lint-staged": "15.5.2",
70
78
  "typescript": "5.9.3"
71
79
  },
72
80
  "engines": {
73
81
  "node": ">=18.0.0"
74
- },
75
- "authors": [
76
- "Vladimir Potekhin <vladimir.potekh@gmail.com>",
77
- "German Panov <zidakbew@gmail.com>"
78
- ]
82
+ }
79
83
  }