@progress/kendo-angular-mcp 1.2.1 → 1.3.0-dev.934b7db7.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
@@ -2,6 +2,27 @@
2
2
 
3
3
  The Kendo UI for Angular [MCP Server](https://modelcontextprotocol.io/introduction) enables you achieve interation with AI and reach new levels of developer productivity. The MCP server provides proprietary context to AI-powered IDEs, apps and tools. You can use the Kendo UI for Angular MCP server to ask about Kendo UI for Angular components, features, or general usage. You can successfully prompt more complex questions and tasks, and generate tailored code that includes Kendo UI for Angular components and API.
4
4
 
5
+ As of version 1.3 the Kendo UI for Angular MCP server supports two modes of operation that depends on your [Telerik license type](https://www.telerik.com/purchase/faq/licensing-purchasing): **AI Coding Assistant** and **Agentic UI Generator**.
6
+
7
+ ## **AI Coding Assistant** Intended Use
8
+
9
+ * **Initial code generation**: Quickly add components to your app to speed up the initial development.
10
+ * **Component configuration**: Enable or disable specific component features, or fine tune the configuration through prompting. More * complex configurations are possible but may require additional manual work to be production-ready.
11
+ * **Dummy data generation and data binding**: Quickly add data to your app for testing and prototyping purposes. Avoid exposing or providing access to your proprietary or production data to AI-enabled tools.
12
+ * **Step-by-step explanations**: Understand the solutions provided by the AI Coding Assistant through the detailed explanations (depends * on the tool, mode, and model used). To further develop your knowledge, check the respective documentation.
13
+ * **Preliminary troubleshooting**: Resolve obvious and easy-to-solve issues affecting your code. For more complex issues, look for assistance from the community or contact the support team.
14
+
15
+ ## **Agentic UI Generator** Intended Use
16
+
17
+ * **Create Individual Components**: Build specific Kendo UI for Angular components with particular configurations and features like filtering, validation, and data binding.
18
+ * **Create Full Responsive Pages**
19
+ * Build complete dashboards, landing pages, and listing pages in existing applications.
20
+ * Generate pages similar to the [Progress Design System page templates](https://www.telerik.com/design-system/docs/ui-templates/overview/).
21
+ * **Modify Existing Pages**: Generate new themes inside existing applications. Add dark mode or high-contrast themes.
22
+ * **Implement Responsive Layout**
23
+ * Create new responsive pages and sections.
24
+ * Convert existing pages to be responsive for mobile and tablet views.
25
+
5
26
  ## Prerequisites
6
27
 
7
28
  To use the Kendo UI for Angular MCP server, you need:
@@ -16,7 +37,7 @@ Use the documentation of your AI-powered MCP client to add the Kendo UI for Angu
16
37
 
17
38
  The generic settings of the Kendo UI for Angular MCP server are:
18
39
 
19
- * Server name: `kendo-angular-assistant`
40
+ * Server name: `kendo-mcp`
20
41
  * Type: `stdio` (standard input/output transport)
21
42
  * Command: `npx` (the MCP server works through an npm package)
22
43
  * Supported arguments: `-y`
@@ -25,6 +46,8 @@ The generic settings of the Kendo UI for Angular MCP server are:
25
46
  * (recommended) Use a `TELERIK_LICENSE_PATH` argument and point to your Telerik license file location.
26
47
  * Use a `TELERIK_LICENSE` argument and paste your Telerik license key. Make sure to [update the license key](https://www.telerik.com/kendo-angular-ui/components/licensing) when necessary.
27
48
 
49
+ > You can ignore the `env` parameter if you have the Telerik license key set up as a global environment variable on your machine. And if the MCP client supports passing global environment variables to MCP servers.
50
+
28
51
  ## Authentication
29
52
 
30
53
  The MCP server requires a valid Telerik account with a valid license. In order to get a valid license key check the [Kendo UI for Angular documentation](https://www.telerik.com/kendo-angular-ui/components/licensing).
@@ -58,6 +81,8 @@ To enable the Kendo UI for Angular MCP server in a specific workspace or Angular
58
81
  }
59
82
  ```
60
83
 
84
+ > You can ignore the `env` parameter if you have the Telerik license key set up as a global environment variable on your machine. And if the MCP client supports passing global environment variables to MCP servers.
85
+
61
86
  ### Cursor
62
87
 
63
88
  Refer to [Model Context Protocol](https://docs.cursor.com/context/model-context-protocol).
@@ -83,16 +108,50 @@ To [enable the Kendo UI for Angular MCP server in a specific workspace](https://
83
108
  }
84
109
  ```
85
110
 
111
+ > You can ignore the `env` parameter if you have the Telerik license key set up as a global environment variable on your machine. And if the MCP client supports passing global environment variables to MCP servers.
112
+
86
113
  ## Usage
87
114
 
115
+ To increase the probability of the Kendo UI for Angular MCP Server being used, or to call it without the need to mention "kendo" explicitly, add custom idea instructions to your AI-powered tool. Here are examples for [GitHub Copilot](https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot#about-repository-custom-instructions-for-github-copilot-chat) and [Cursor](https://docs.cursor.com/context/rules).
116
+
117
+ ### AI Coding Assistant
118
+
88
119
  To use the Kendo UI for Angular MCP server:
89
120
 
90
- 1. Start your prompt with `#kendo-angular-assistant`
91
- 2. Inspect the output and verify that the MCP Server is used. Look for a similar statement in the output (the exact text may vary across tools):
121
+ 1. Start your prompt with `#kendo_angular_assistant` (the main MCP tool to start the agentic workflow in the coding agent).
122
+ 1. This will trigger an agentic workflow using the other available MCP tools to retrieve relevant context based on your prompt.
123
+ 1. Inspect the output and verify that the Kendo UI for Angular MCP Server is used. Look for a statement in the output, which is similar to:
124
+ * `Running kendo-angular-mcp-server` (in VS Code)
125
+ * `Calling MCP tool kendo-angular-mcp-server` (in Cursor)
126
+ If the Kendo UI for Angular MCP server is not used even though it's installed and enabled, double-check the server name in your configuration and try rephrasing your prompt.
127
+ 1. If requested, grant the Kendo UI for Angular MCP server a permission to run for this session, workspace, or always.
92
128
 
93
- ![MCP Server uses Kendo UI Angular AI Coding Assistant in VS Code](https://www.telerik.com/kendo-angular-ui/components/assets/3b8003e42e7b587c39644f0435808f09/mcp-confirmation.png)
129
+ Also check more useful documentation about how to use the AI Coding Assistant here:
130
+ - [Getting Started](https://www.telerik.com/kendo-angular-ui/components/ai-tools/ai-assistant#getting-started)
131
+ - [Recommendations](https://www.telerik.com/kendo-angular-ui/components/ai-tools/ai-assistant#recommendations)
132
+ - [Prompt Library](https://www.telerik.com/kendo-angular-ui/components/ai-tools/ai-assistant/prompt-library)
94
133
 
95
- 3. If the Kendo UI for Angular MCP server is not used even though it's installed and enabled, double-check the server name in your configuration and try rephrasing your prompt.
96
- 4. If requested, grant the Kendo UI for Angular MCP server a permission to run for this session, workspace, or always.
134
+ ### Agentic UI Generator
135
+
136
+ To use the Agentic UI Generator mode:
137
+
138
+ 1. Open the AI chat interface in your IDE—Start a new chat session to begin interacting with the Agentic UI Generator.
139
+ 1. Start your prompt with `#kendo_ui_generator` (the main MCP tool to start the agentic workflow in the Agentic UI Generator).
140
+ 1. This will trigger an agentic workflow using the other available MCP tools to retrieve relevant context based on your prompt.
141
+ 1. Inspect the output and verify that the Kendo UI for Angular MCP Server is used. Look for a statement in the output, which is similar to:
142
+ * `Running kendo-angular-mcp-server` (in VS Code)
143
+ * `Calling MCP tool kendo-angular-mcp-server` (in Cursor)
144
+ 1. If requested, grant the Kendo UI for Angular MCP server a permission to run for this session, workspace, or always.
145
+
146
+ Also check more usefule documentation about how to use the Agentic UI Generator here:
147
+ - [Getting Started](https://www.telerik.com/kendo-angular-ui/components/ai-tools/agentic-ui-generator#getting-started)
148
+ - [Intended Use](https://www.telerik.com/kendo-angular-ui/components/ai-tools/agentic-ui-generator#intended-use)
149
+ - [Recommendations](https://www.telerik.com/kendo-angular-ui/components/ai-tools/agentic-ui-generator#recommendations) for more usage tips.
150
+ - [Prompt Library](https://www.telerik.com/kendo-angular-ui/components/ai-tools/agentic-ui-generator/prompt-library#kendoangular-agentic-ui-generator-prompt-library)
151
+
152
+ ### AI Tools Usage
153
+
154
+ You can check the usage limits and the modes of operation in our documentation:
155
+ - [AI Coding Assistant - Usage Limits](https://www.telerik.com/kendo-angular-ui/components/ai-tools/ai-assistant#usage-limits)
156
+ - [Agentic UI Generator - Usage Limits](https://www.telerik.com/kendo-angular-ui/components/ai-tools/agentic-ui-generator#usage-limits)
97
157
 
98
- To increase the probability of the Kendo UI for Angular MCP Server being used, or to call it without the need to mention "kendo" explicitly, add custom idea instructions to your AI-powered tool. Here are examples for [GitHub Copilot](https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot#about-repository-custom-instructions-for-github-copilot-chat) and [Cursor](https://docs.cursor.com/context/rules).
package/dist/index.js CHANGED
@@ -1,146 +1,692 @@
1
1
  #!/usr/bin/env node
2
- var G=Object.defineProperty;var B=(e,r,o)=>r in e?G(e,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[r]=o;var m=(e,r,o)=>B(e,typeof r!="symbol"?r+"":r,o);import{McpServer as Y}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as Z}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as T}from"zod";var f="Kendo UI for Angular",y="angular",v=["AIPrompt","ActionSheet","AppBar","ArcGauge","AutoComplete","Avatar","Badge","Barcode","BottomNavigation","BreadCrumb","Button","ButtonGroup","Calendar","Card","ChartWizard","Charts","CheckBox","Chip","ChipList","ChunkProgressBar","CircularGauge","CircularProgressBar","ColorGradient","ColorPalette","ColorPicker","ComboBox","ContextMenu","ConversationalUI","DataQuery","DateInput","DateMath","DatePicker","DateRange","DateTimePicker","Diagram","Dialog","DragandDrop","Drawer","Drawing","DropDownButton","DropDownList","DropDownTree","Editor","ExcelExport","ExpansionPanel","FileSaver","FileSelect","Filter","FlatColorPicker","FloatingActionButton","FloatingLabel","Forms","FormField","Gantt","Gauges","General","Grid","GridLayout","Icon","InlineAIPrompt","Label","LinearGauge","ListBox","ListView","Loader","Map","MaskedTextBox","Menu","MultiColumnComboBox","MultiSelect","MultiSelectTree","MultiViewCalendar","Notification","NumericTextBox","OTPInput","Pager","PanelBar","PDFExport","PDFViewer","PivotGrid","Popover","Popup","ProgressBar","QRCode","RadialGauge","RadioButton","RangeSlider","Rating","Ripple","Sankey","Scheduler","ScrollView","Signature","Skeleton","Slider","Sortable","StockChart","Sparkline","SpeechToTextButton","SplitButton","Splitter","Spreadsheet","StackLayout","Stepper","SVGIcon","Switch","TabStrip","TextArea","TextBox","TileLayout","Timeline","TimePicker","ToolBar","Tooltip","TreeList","TreeView","Typography","Upload","Window"];import{dirname as q,join as O}from"path";import{fileURLToPath as $}from"url";import{loadLicense as M,decodeLicenseKey as _,decodeLicenseEvidence as L}from"@progress/kendo-licensing/utils";import u from"node:fs";import c from"node:path";import N from"@grpc/proto-loader";import g from"@grpc/grpc-js";var k=class extends Error{constructor(e){super(e),this.name="LicenseError"}};async function R(){let e=M();if(!e.success)throw new k(e.message);return(await _(e.value)).licenses.find(async o=>!!(await L(o)).userId)||e.value}var h=!1,i=process.env.DEBUG_LOG_FILE,w=!!(i&&typeof i=="string");if(w){let e=c.resolve(i),r=c.dirname(e);if(r!=="."&&r!==process.cwd()&&!u.existsSync(r))try{u.mkdirSync(r,{recursive:!0})}catch(o){console.error("Error creating log directory:",o)}if(!u.existsSync(e))try{u.writeFileSync(e,"")}catch(o){console.error("Error creating log file:",o)}}else h=!1;h=w&&!!i&&u.existsSync(c.resolve(i));function a(...e){if(h&&i){let r=`${new Date().toISOString()}: ${e.join(" ")}
3
- `,o=c.resolve(i);u.appendFile(o,r,t=>{t&&console.error("Error writing to log file:",t)})}}var p=(e=>(e[e.UNAUTHENTICATED=16]="UNAUTHENTICATED",e[e.RESOURCE_EXHAUSTED=8]="RESOURCE_EXHAUSTED",e[e.PERMISSION_DENIED=7]="PERMISSION_DENIED",e))(p||{}),b=class{constructor(e,r){m(this,"client");m(this,"isDev");this.contextApiUrl=e,this.protoPath=r;let o=N.loadSync(this.protoPath,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0});this.isDev=this.contextApiUrl?.includes("localhost")||this.contextApiUrl?.includes("127.0.0.1"),a("Using ContextApi URl:",this.contextApiUrl);let t=g.loadPackageDefinition(o);this.client=new t.ContextQueryService(this.contextApiUrl||"contextapi.telerik.com:443",this.isDev?g.credentials.createInsecure():g.credentials.createSsl())}async query(e){let r=this.isDev?"fake_license":await R(),o=process.env.CONTEXTAPI_API_KEY,t=new g.Metadata;if(r&&typeof r=="string"){r=r.replace(/^\uFEFF/,"");try{t.add("x-license-key",r)}catch(n){return a("Error adding license key to metadata:",n),Promise.reject(new Error(`Failed to use license key: ${n.message}`))}}return o&&typeof o=="string"&&t.add("x-api-key",o),new Promise((n,s)=>{this.client.query(e,t,(l,d)=>{l?s(l):n(d)})})}};var K=O(q($(import.meta.url)),"../proto/service.proto"),W=new b("contextapi.telerik.com:443",K);async function x(e){return W.query(e)}import ee from"fs";import P from"path";import{fileURLToPath as re}from"url";var S=`
4
- ## Grid Data Binding
2
+ import{McpServer as tt}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as ot}from"@modelcontextprotocol/sdk/server/stdio.js";import{dirname as je,join as ze}from"path";import{fileURLToPath as Ye}from"url";import{loadLicense as Le,decodeLicenseKey as Me,decodeLicenseEvidence as qe}from"@progress/kendo-licensing/utils";var M=class extends Error{constructor(t){super(t),this.name="LicenseError"}};function X(e){return e.replace(/^\uFEFF/,"")}async function Z(){let e=null,t=null;try{let o=Le();if(!o.success)throw new M(o.message);try{e=(await Me(o.value)).licenses.find(async s=>!!(await qe(s)).userId)}catch(n){console.log(n.message)}if(!e)return[X(o.value),null]}catch(o){return t=o.message||"Unknown error loading license.",[null,t]}return[X(e),null]}import w from"node:fs";import R from"node:path";var q=!1,I=process.env.DEBUG_LOG_FILE,ee=!!(I&&typeof I=="string");if(ee){let e=R.resolve(I),t=R.dirname(e);if(t!=="."&&t!==process.cwd()&&!w.existsSync(t))try{w.mkdirSync(t,{recursive:!0})}catch(o){console.error("Error creating log directory:",o)}if(!w.existsSync(e))try{w.writeFileSync(e,"")}catch(o){console.error("Error creating log file:",o)}}else q=!1;q=ee&&!!I&&w.existsSync(R.resolve(I));function d(...e){if(q&&I){let n=`${new Date().toISOString()}: ${e.join(" ")}
3
+ `,s=R.resolve(I);w.appendFile(s,n,r=>{r&&console.error("Error writing to log file:",r)})}}import Be from"@grpc/proto-loader";import D from"@grpc/grpc-js";import ne from"path";import te from"fs";import{fileURLToPath as Ge}from"url";var Ke=Ge(import.meta.url),Fe=ne.dirname(Ke),se={version:"unknown"},oe=ne.resolve(Fe,"../package.json");te.existsSync(oe)&&(se=JSON.parse(te.readFileSync(oe,"utf-8")));var $=class{constructor(t,o,n){this.contextApiUrl=t;this.protoPath=o;this.options=n;this.toolNameHeader="assistant";let s=Be.loadSync(this.protoPath,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0});this.isDev=this.contextApiUrl?.includes("localhost")||this.contextApiUrl?.includes("127.0.0.1"),d("Using ContextApi URl:",this.contextApiUrl);let r=D.loadPackageDefinition(s);this.client=new r.ContextQueryService(this.contextApiUrl||"contextapi.telerik.com:443",this.isDev?D.credentials.createInsecure():D.credentials.createSsl())}async getMetadata(){let[t,o]=this.isDev?"fake_license":await Z(),n=process.env.CONTEXTAPI_API_KEY,s=n&&typeof n=="string",r=t&&typeof t=="string";if(!r&&!s&&o)throw new Error(`Failed to authenticate with API key or License key!
4
+
5
+ License Error: ${o}`);let a=new D.Metadata;if(r)try{a.add("x-license-key",t)}catch(m){throw d("Error adding license key to metadata:",m),new Error(`Failed to use license key: ${m.message}`)}return s&&a.add("x-api-key",n),this.options?.libName&&a.add("x-library-name",this.options.libName),a.add("x-tool-name",this.toolNameHeader),a}async query(t){let o=await this.getMetadata();return new Promise((n,s)=>{this.client.query({...t,metadata:{source:"npm",version:se.version,os:process.platform,node_version:process.version}},o,(r,a)=>{r?s(new Error(r)):n(a)})})}async queryCssUtils(t){let o=await this.getMetadata();return new Promise((n,s)=>{this.client.cssUtilsSearch(t,o,(r,a)=>{r?(d("Error querying CSS Utils:",r),s(new Error(r))):n(a)})})}async queryIconsSearch(t){let o=await this.getMetadata();return new Promise((n,s)=>{this.client.iconsSearch(t,o,(r,a)=>{r?(d("Error querying Icons Search:",r),s(new Error(r))):n(a)})})}async queryBuildingBlocks(t){let o=await this.getMetadata();return new Promise((n,s)=>{this.client.buildingBlocksSearch(t,o,(r,a)=>{r?(d("Error querying Building Blocks:",r),s(new Error(r))):n(a)})})}async validateUserLicense(){let t=await this.getMetadata();return new Promise((o,n)=>{this.client.validateUserLicense(null,t,(s,r)=>{s?(d("Error validating user license:",s),n(new Error(s))):o(r)})})}async queryThemeGenerate(t){let o=await this.getMetadata();return new Promise((n,s)=>{this.client.generateTheme(t,o,(r,a)=>{r?(d("Error querying context API/GenerateTheme:",r),s(new Error(r))):n(a)})})}async recordOrchestratorUserRequest(){let t=await this.getMetadata();return new Promise((o,n)=>{this.client.recordOrchestratorUserRequest(null,t,(s,r)=>{s?(d("Error recording orchestrator user request:",s),n(new Error(s))):o(r)})})}};import{z as B}from"zod";var vt=B.object({user_id:B.string(),user_email:B.string().email()});import{z as p}from"zod";var Ve=p.object({Product:p.object({Id:p.number().int(),Code:p.string(),Name:p.string()}),License:p.nullable(p.object({Id:p.number().int(),Name:p.string(),Type:p.string(),Active:p.boolean()})),Availability:p.array(p.object({LicenseStart:p.nullable(p.string().datetime()),LicenseEnd:p.nullable(p.string().datetime())})),IsLicenseAvailable:p.optional(p.boolean())}),Pt=p.array(Ve);async function re(e){let t=process.env.KENDO_MCP_ACCESS;if(t==="true"||t==="1"||t==="full")return"full";if(typeof t=="string"&&(t.toLowerCase()==="agent"||t.toLowerCase()==="assistant"))return t.toLowerCase();let o=await e();return o.toLocaleLowerCase()==="agentic_ui_generator"?"agent":o.toLocaleLowerCase()==="ai_coding_assistants"?"assistant":"none"}var l="Kendo UI for Angular",T="angular",E="kendo",_=["AIPrompt","ActionSheet","AppBar","ArcGauge","AutoComplete","Avatar","Badge","Barcode","BottomNavigation","BreadCrumb","Button","ButtonGroup","Calendar","Card","ChartWizard","Charts","CheckBox","Chip","ChipList","ChunkProgressBar","CircularGauge","CircularProgressBar","ColorGradient","ColorPalette","ColorPicker","ComboBox","ContextMenu","ConversationalUI","DataQuery","DateInput","DateMath","DatePicker","DateRange","DateTimePicker","Diagram","Dialog","DragandDrop","Drawer","Drawing","DropDownButton","DropDownList","DropDownTree","Editor","ExcelExport","ExpansionPanel","FileSaver","FileSelect","Filter","FlatColorPicker","FloatingActionButton","FloatingLabel","Forms","FormField","Gantt","Gauges","General","Grid","GridLayout","Icon","InlineAIPrompt","Label","LinearGauge","ListBox","ListView","Loader","Map","MaskedTextBox","Menu","MultiColumnComboBox","MultiSelect","MultiSelectTree","MultiViewCalendar","Notification","NumericTextBox","OTPInput","Pager","PanelBar","PDFExport","PDFViewer","PivotGrid","Popover","Popup","ProgressBar","QRCode","RadialGauge","RadioButton","RangeSlider","Rating","Ripple","Sankey","Scheduler","ScrollView","Signature","Skeleton","Slider","Sortable","StockChart","Sparkline","SpeechToTextButton","SplitButton","Splitter","Spreadsheet","StackLayout","Stepper","SVGIcon","Switch","TabStrip","TextArea","TextBox","TileLayout","Timeline","TimePicker","ToolBar","Tooltip","TreeList","TreeView","Typography","Upload","Window"],ae=new Map([["actionsheet","@progress/kendo-angular-navigation"],["aiprompt","@progress/kendo-angular-conversational-ui"],["appbar","@progress/kendo-angular-navigation"],["arcgauge","@progress/kendo-angular-gauges"],["autocomplete","@progress/kendo-angular-dropdowns"],["avatar","@progress/kendo-angular-layout"],["badge","@progress/kendo-angular-indicators"],["barcode","@progress/kendo-angular-barcodes"],["bottomnavigation","@progress/kendo-angular-navigation"],["breadcrumb","@progress/kendo-angular-navigation"],["button","@progress/kendo-angular-buttons"],["buttongroup","@progress/kendo-angular-buttons"],["calendar","@progress/kendo-angular-dateinputs"],["card","@progress/kendo-angular-layout"],["chartwizard","@progress/kendo-angular-chart-wizard"],["checkbox","@progress/kendo-angular-inputs"],["chip","@progress/kendo-angular-buttons"],["chiplist","@progress/kendo-angular-buttons"],["chunkprogressbar","@progress/kendo-angular-progressbar"],["circulargauge","@progress/kendo-angular-gauges"],["circularprogressbar","@progress/kendo-angular-progressbar"],["colorgradient","@progress/kendo-angular-inputs"],["colorpalette","@progress/kendo-angular-inputs"],["colorpicker","@progress/kendo-angular-inputs"],["combobox","@progress/kendo-angular-dropdowns"],["contextmenu","@progress/kendo-angular-menu"],["dataquery","@progress/kendo-data-query"],["dateinput","@progress/kendo-angular-dateinputs"],["datemath","@progress/kendo-date-math"],["datepicker","@progress/kendo-angular-dateinputs"],["daterangepicker","@progress/kendo-angular-dateinputs"],["datetimepicker","@progress/kendo-angular-dateinputs"],["diagram","@progress/kendo-angular-diagrams"],["dialog","@progress/kendo-angular-dialog"],["drawer","@progress/kendo-angular-layout"],["drawing","@progress/kendo-drawing"],["dropdownbutton","@progress/kendo-angular-buttons"],["dropdownlist","@progress/kendo-angular-dropdowns"],["dropdowntree","@progress/kendo-angular-dropdowns"],["editor","@progress/kendo-angular-editor"],["excelexport","@progress/kendo-angular-excel-export"],["expansionpanel","@progress/kendo-angular-layout"],["filesaver","@progress/kendo-file-saver"],["fileselect","@progress/kendo-angular-upload"],["filter","@progress/kendo-angular-filter"],["flatcolorpicker","@progress/kendo-angular-inputs"],["floatingactionbutton","@progress/kendo-angular-buttons"],["floatinglabel","@progress/kendo-angular-label"],["formfield","@progress/kendo-angular-inputs"],["forms","@progress/kendo-angular-inputs"],["gantt","@progress/kendo-angular-gantt"],["grid","@progress/kendo-angular-grid"],["gridlayout","@progress/kendo-angular-layout"],["icon","@progress/kendo-angular-icons"],["inlineaiprompt","@progress/kendo-angular-conversational-ui"],["label","@progress/kendo-angular-label"],["lineargauge","@progress/kendo-angular-gauges"],["listbox","@progress/kendo-angular-listbox"],["listview","@progress/kendo-angular-listview"],["loader","@progress/kendo-angular-indicators"],["map","@progress/kendo-angular-map"],["maskedtextbox","@progress/kendo-angular-inputs"],["menu","@progress/kendo-angular-menu"],["multicolumncombobox","@progress/kendo-angular-dropdowns"],["multiselect","@progress/kendo-angular-dropdowns"],["multiselecttree","@progress/kendo-angular-dropdowns"],["multiviewcalendar","@progress/kendo-angular-dateinputs"],["notification","@progress/kendo-angular-notification"],["numerictextbox","@progress/kendo-angular-inputs"],["otpinput","@progress/kendo-angular-inputs"],["pager","@progress/kendo-angular-pager"],["panelbar","@progress/kendo-angular-layout"],["pdfexport","@progress/kendo-angular-pdf-export"],["pdfviewer","@progress/kendo-angular-pdfviewer"],["pivotgrid","@progress/kendo-angular-pivotgrid"],["popover","@progress/kendo-angular-tooltip"],["popup","@progress/kendo-angular-popup"],["progressbar","@progress/kendo-angular-progressbar"],["qrcode","@progress/kendo-angular-barcodes"],["radialgauge","@progress/kendo-angular-gauges"],["radiobutton","@progress/kendo-angular-inputs"],["rangeslider","@progress/kendo-angular-inputs"],["rating","@progress/kendo-angular-inputs"],["ripple","@progress/kendo-angular-ripple"],["sankey","@progress/kendo-angular-charts"],["scheduler","@progress/kendo-angular-scheduler"],["scrollview","@progress/kendo-angular-scrollview"],["signature","@progress/kendo-angular-inputs"],["skeleton","@progress/kendo-angular-indicators"],["slider","@progress/kendo-angular-inputs"],["sortable","@progress/kendo-angular-sortable"],["sparkline","@progress/kendo-angular-charts"],["speechtotextbutton","@progress/kendo-angular-buttons"],["splitbutton","@progress/kendo-angular-buttons"],["splitter","@progress/kendo-angular-layout"],["spreadsheet","@progress/kendo-angular-spreadsheet"],["stacklayout","@progress/kendo-angular-layout"],["stepper","@progress/kendo-angular-layout"],["stockchart","@progress/kendo-angular-charts"],["svgicon","@progress/kendo-angular-icons"],["switch","@progress/kendo-angular-inputs"],["tabstrip","@progress/kendo-angular-layout"],["textarea","@progress/kendo-angular-inputs"],["textbox","@progress/kendo-angular-inputs"],["tilelayout","@progress/kendo-angular-layout"],["timeline","@progress/kendo-angular-layout"],["timepicker","@progress/kendo-angular-dateinputs"],["toolbar","@progress/kendo-angular-toolbar"],["treelist","@progress/kendo-angular-treelist"],["treeview","@progress/kendo-angular-treeview"],["typography","@progress/kendo-angular-typography"],["upload","@progress/kendo-angular-upload"],["window","@progress/kendo-angular-dialog"],["charts","@progress/kendo-angular-charts"],["conversationalui","@progress/kendo-angular-conversational-ui"],["tooltip","@progress/kendo-angular-tooltip"]]);var He=ze(je(Ye(import.meta.url)),"../proto/service.proto"),L=new $("contextapi.telerik.com:443",He,{libName:T});var ie=async()=>L.validateUserLicense();import nt from"fs";import $e from"path";import{fileURLToPath as st}from"url";import{z as u}from"zod";var k=class{constructor(t,o,n){this.name=t;this.config=o;this.cb=n}register(t){this.server=t,this.server.registerTool(this.name,this.config,this.cb)}hasAccess(t){return!this.config.requiredAccess||this.config.requiredAccess.length===0?!0:t==="full"||this.config.requiredAccess.includes(t)}};var x=(e,t)=>`# ${e.suiteName} - Code Validation & Quality Assurance
6
+
7
+ ## Comprehensive Code Validation Checklist
8
+ Execute these validation steps systematically to ensure high-quality, maintainable code:
9
+
10
+ ### Validation Phase: Framework-Specific Validation
11
+
12
+ ${t}
13
+
14
+ ### Validation Phase: General Code Quality & Best Practices
15
+
16
+ File Organization:
17
+ - Files are properly named using appropriate conventions
18
+ - Components are logically grouped in appropriate directories
19
+ - File sizes are reasonable
20
+ - Clear separation of concerns between files
21
+
22
+ Performance Best Practices:
23
+ - Optimized rendering patterns
24
+ - Minimal unnecessary re-renders/change detection cycles
25
+ - Efficient data handling and caching
26
+ - Proper component lifecycle management
27
+
28
+ ### Validation Phase: Security & Accessibility Validation
29
+
30
+ Security Measures:
31
+ - Input validation and sanitization
32
+ - XSS protection measures
33
+ - CSRF protection where applicable
34
+ - Secure data handling practices
35
+
36
+ Accessibility (a11y) Compliance
37
+ - Proper semantic HTML structure
38
+ - ARIA labels and roles where needed
39
+ - Keyboard navigation support
40
+ - Screen reader compatibility
41
+ - Sufficient color contrast ratios
42
+
43
+ Interactive Elements:
44
+ - Focus management and visual indicators
45
+ - Descriptive alt text for images
46
+ - Proper form labels and error messages
47
+
48
+ ### Validation Phase: UI/UX & Design System Compliance
49
+
50
+ Responsive Design:
51
+ - Proper breakpoint handling
52
+ - Flexible layouts that adapt to different screen sizes
53
+ - Touch-friendly interface elements
54
+
55
+ ### Validation Phase: Error Handling & Edge Cases
56
+
57
+ Error Handling:
58
+ - Graceful error handling for all user interactions
59
+ - Meaningful error messages for users
60
+ - Network error handling for API calls
61
+ `;var U=(e,t)=>{let o=x({suiteName:e.suiteName,libKey:e.libKey},t.validationSteps),n=e.libKey==="angular"?"- **Drag and Drop**: Consider using the DragandDrop and Sortable components when drag-and-drop functionality is needed.":"",s=e.components?e.components.join(", "):"components";return`# \u{1F3AF} ${e.suiteName} - Execution Plan
62
+
63
+ **Current Goal:**
64
+
65
+ ${e.userIntent}
66
+
67
+ **Requirements Summary:**
68
+ - **Framework:** ${e.libKey}
69
+ ${e.includeComponentsDocs?`- **Component Library:** ${e.suiteName}
70
+ - Ensure to use ONLY ${e.suiteName} components for all UI elements.
71
+ - And use the ${e.codeAssistantName} tool to get ${e.suiteName} component documentation and code snippets.
72
+ - Ensure that after you read the plan you use exactly the ${e.codeAssistantName} no matter if there is another tool that can provide code snippets, documentation or other resources related to ${e.suiteName}.
73
+ `:""}${e.includeLayout?`- **Layout:** Yes
74
+ - And use the ${e.layoutAssistantName} tool to get Kendo CSS utility classes needed for layout structure and responsive design.
75
+ `:""}${e.includeIcons?`- **Icons:** Yes
76
+ - Use icons that align with the project theme and enhance usability.
77
+ - Use the ${e.iconAssistantName} tool to search for icons that fit the theme and purpose of your project.
78
+ `:""}${e.includeTheming?`- **Custom Theming:**
79
+ - Create a custom theme that aligns with the current goal and branding needs.
80
+ - Use Kendo Themes and Design System guidelines.
81
+ - Make sure to include strict CSS variables or theme requirements from the current goal.
82
+ - And use the ${e.styleAssistantName} tool to create a custom theme for your project.
83
+ `:""}${e.includeResponsive?`- **Responsive:**
84
+ - Ensure the layout is fully responsive across mobile, tablet, and desktop views.
85
+ - And use the ${e.layoutAssistantName} tool to get Kendo CSS utility classes needed for responsive design.
86
+ `:""}
87
+ ${e.includeLayout?`**STYLING AND LAYOUT REQUIREMENTS:**
88
+ ## CRITICAL DESIGN SYSTEM CONSTRAINTS
89
+ - **USE ONLY KENDO DESIGN SYSTEM UTILITIES** for ALL styling, layout, spacing, positioning, and responsive behavior
90
+ - Avoid custom CSS, inline styles, or other CSS framework classes
91
+ - The ${e.layoutAssistantName} tool will provide the specific Kendo CSS utility classes needed
92
+ - All layout requirements must use Kendo utilities exclusively
93
+
94
+ `:""}---
95
+
96
+ ## Detailed Execution Plan
97
+ Follow these steps strictly in order to achieve a complete and polished implementation of the current goal:
98
+
99
+ ${e.includeLayout?`
100
+ ### Phase: Layout Foundation
101
+
102
+ **Step 1: Create Base Layout Structure**
103
+ **IMPORTANT LAYOUT REQUIREMENTS:**
104
+ - Consider the hierarchy and nesting of layout elements (page \u2192 sections \u2192 components)
105
+ - Each layout level should have appropriate wrapper containers with proper Kendo utilities
106
+ - Sections should be wrapped in containers that provide the necessary layout structure
107
+
108
+ **Tool call example:**
109
+ \`\`\`
110
+ ${e.layoutAssistantName}({
111
+ prompt="Provide Kendo Design System utility classes for the following layout structure: [LAYOUT DESCRIPTION HERE]",
112
+ includeBuildingBlockExamples=true // Optional, include examples of Kendo building blocks (Grid, Flex, Stack, etc.)
113
+ })
114
+ \`\`\`
115
+ `:""}
116
+ ${e.includeComponentsDocs?`
117
+ ### Phase: Component Integration
118
+ **Step 1: Identify and Implement Core Components**
119
+ Based on your current goal, analyze what other ${e.suiteName} components are needed and implement them one by one. Here you are some appropriate components based on the different project type:
120
+
121
+ **Component Selection Guidelines:**
122
+ - **Landing Pages**: Consider Button, Card, Form components, Layout containers, Navigation elements
123
+ - **Dashboards**: Consider Grid, Chart, TileLayout, Drawer, Notification, ToolBar components
124
+ - **Data Entry**: Consider Form, TextBox, DatePicker, DropDownList, Upload, Validation components
125
+ - **Content Management**: Consider Grid, Editor, TreeView, FileManager, Dialog components
126
+ - **E-commerce**: Consider ListView, Card, Button, Rating, Badge, Carousel components
127
+ ${n}
128
+
129
+ **IMPORTANT COMPONENT USAGE REQUIREMENTS:**
130
+ - Make sure to identify all necessary features related to the ${s} based on the current goal.
131
+ - Make sure to identify specific features needed for other ${e.suiteName} components based on the current goal.
132
+ - Make sure to generate a query for ${e.codeAssistantName} tool for each component and call the tool for each specific feature or functionality.
133
+ - Always specify the exact features you want for each component. Describe only the needed functionality, and behavior you need. Be concise and don't include any information about the use case.
134
+
135
+ **Tool call examples:**
136
+ \`\`\`
137
+ ${e.codeAssistantName}({
138
+ query="Give me information about [COMPONENT_NAME] with [SPECIFIC_FEATURES]." <!-- For example: 'Grid with paging' or 'Button with click events' or 'Chart with multiple series' -->
139
+ component="[COMPONENT_NAME]" <!-- For example: 'Grid', 'Button', 'Chart', etc. -->
140
+ })
141
+ \`\`\`
142
+
143
+ For broad queries, break them down into specific features (e.g., paging, sorting, filtering for Grid) and call the tool separately for each feature:
144
+ \`\`\`
145
+ ${e.codeAssistantName}({
146
+ query="How to implement [SPECIFIC_FEATURE] in [COMPONENT_NAME]?" <!-- For example: 'paging in Grid' -->
147
+ component="[COMPONENT_NAME]" <!-- For example: 'Grid', 'Button', etc. -->
148
+ })
149
+ \`\`\`
150
+
151
+ \`\`\`
152
+ ${e.codeAssistantName}({
153
+ query="How to implement [SPECIFIC_FEATURE] in [COMPONENT_NAME]?" <!-- For example: 'sorting in Grid' -->
154
+ component="[COMPONENT_NAME]" <!-- For example: 'Grid', 'Button', etc. -->
155
+ })
156
+ \`\`\`
157
+
158
+ \`\`\`
159
+ ${e.codeAssistantName}({
160
+ query="How to implement [SPECIFIC_FEATURE] in [COMPONENT_NAME]?" <!-- For example: 'filtering in Grid' -->
161
+ component="[COMPONENT_NAME]" <!-- For example: 'Grid', 'Button', etc. -->
162
+ })
163
+ \`\`\`
164
+ `:""}
165
+ ${e.includeResponsive?`
166
+ ### Phase: Layout Responsive Finalization
167
+
168
+ **Step 1: Implement Responsive Behavior**
169
+
170
+ **Tool call example:**
171
+ \`\`\`
172
+ ${e.layoutAssistantName}({
173
+ prompt="Provide Kendo Design System utility classes to make the following layout structure responsive across mobile, tablet, and desktop views: [LAYOUT DESCRIPTION HERE]",
174
+ includeBuildingBlockExamples=false // Optional, include examples of Kendo building blocks (Grid, Flex, Stack, etc.)
175
+ })
176
+ \`\`\`
177
+ `:""}
178
+ ${e.includeTheming?`
179
+ **Step 2: Custom Theme Implementation**
180
+
181
+ **CUSTOM THEME REQUIREMENTS:**
182
+ - Create a custom theme that aligns with the current goal and branding needs.
183
+ - Use Kendo Themes and Design System guidelines.
184
+ - Make sure to include strict CSS variables or theme requirements from the current goal.
185
+
186
+ **Tool call example:**
187
+ \`\`\`
188
+ ${e.styleAssistantName}({
189
+ query="Create a custom Kendo UI theme that aligns with the following current goal and branding needs: [CURRENT GOAL HERE]. Include strict CSS variables or theme requirements as needed.",
190
+ includeThemeVariables=true // Optional, include specific CSS variables for colors, typography, spacing, etc.
191
+ })
192
+ \`\`\`
193
+ `:""}
194
+ ${e.includeIcons?`
195
+ **Step 3: Iconography and Visual Enhancements**
196
+
197
+ **ICONOGRAPHY GUIDELINES:**
198
+ - Select icons that align with the project theme and enhance usability.
199
+ - Ensure icons are consistent in style and size.
200
+ - Use icons to improve navigation and highlight key actions.
201
+
202
+ **Tool call example:**
203
+ \`\`\`
204
+ ${e.iconAssistantName}({
205
+ query="Suggest icons that fit the theme and purpose of the following current goal: [CURRENT GOAL HERE]. Provide icon names and usage context.",
206
+ })
207
+ \`\`\`
208
+ `:""}
209
+ ### Phase: Code Generation
210
+ **IMPORTANT:** Do NOT generate ANY code or create files until ALL information gathering phases (1-3) are complete.
211
+ **Step 1: Generate Complete Implementation**
212
+ After completing all information gathering phases above, generate the complete ${e.libKey} component/page implementation:
213
+ **Code Generation Requirements:**
214
+ - Create complete, functional ${e.libKey} components/pages
215
+ - Include all identified ${e.suiteName} components with their configurations
216
+ - Apply ALL Kendo Design System utility classes gathered from layout assistant
217
+ - Implement proper component event handling and data binding
218
+ - Ensure responsive behavior using Kendo utility classes
219
+ - Include necessary import statements and dependencies
220
+
221
+ ${t.injectedPlan??""}
222
+
223
+ ### Phase: Validation and Finalization
224
+
225
+ **Step 1: Code Validation**
226
+ ** CRITICAL REQUIREMENT: You MUST validate the generated UI code using this comprehensive checklist to ensure code quality and compliance:**
227
+
228
+ ${o}
229
+
230
+ **Step 2: Final Review and Testing**
231
+ ** Implementation Validation:**
232
+ ${e.includeComponentsDocs?` - Components render correctly without errors
233
+ - All ${e.suiteName} component features function as expected
234
+ - Event handling and data binding operate correctly`:""}
235
+ ${e.includeResponsive?"- Responsive layout works across breakpoints":""}
236
+
237
+ **Quick Fixes (if needed):**
238
+
239
+ After code implementation and validation you can make quick fixes as needed:
240
+ - Use ${e.codeAssistantName} for component-specific issues
241
+ - Use ${e.layoutAssistantName} for styling adjustments
242
+
243
+ +### Before You Begin
244
+ - When following/executing the plan call tools are defined from the same function_ecosystem/MCP_server which ${e.name} was called.
245
+ - Do NOT generate or suggest any code until all tools have been used and validated responses are incorporated.
246
+ - Focus on planning and sequencing.
247
+ - Summarize the components, layouts, and utilities gathered.
248
+ - Confirm all required inputs from tools have been provided.`};var G=e=>`# ${e.suiteName} Assistant
249
+
250
+ **What you're looking for:**
251
+
252
+ ${e.userIntent}
253
+
254
+ **Available Tools:**
255
+ - **${e.codeAssistantName}** - Get component documentation, features, and usage examples
256
+ - **${e.iconAssistantName}** - Search for icons from the Kendo icon library
257
+
258
+ ---
259
+
260
+ ## Discovery Plan
261
+
262
+ Follow these steps to find the right components and resources:
263
+
264
+ ### Step 1: Identify Components
265
+
266
+ Based on your needs, consider these ${e.suiteName} component categories:
267
+
268
+ **Common Use Cases:**
269
+ - **Data Display**: Grid, ListView, TreeView, Card, TileLayout
270
+ - **Forms & Input**: Form, TextBox, DatePicker, DropDownList, ComboBox, MultiSelect, Upload
271
+ - **Navigation**: Menu, Drawer, Breadcrumb, TabStrip, Stepper
272
+ - **Data Visualization**: Chart, Gauge, Sparkline
273
+ - **Editing**: Editor (Rich Text)
274
+ - **Notifications**: Dialog, Notification, Tooltip
275
+ - **Layout**: Splitter, PanelBar, ExpansionPanel
276
+
277
+ **How to explore components:**
278
+
279
+ Use the ${e.codeAssistantName} tool to learn about specific components:
280
+
281
+ \`\`\`
282
+ ${e.codeAssistantName}({
283
+ query: "What are the main features of [COMPONENT_NAME]?",
284
+ component: "[COMPONENT_NAME]"
285
+ })
286
+ \`\`\`
287
+
288
+ **Examples:**
289
+ \`\`\`
290
+ ${e.codeAssistantName}({
291
+ query: "How to use Grid with paging and sorting?",
292
+ component: "Grid"
293
+ })
294
+ \`\`\`
295
+
296
+ \`\`\`
297
+ ${e.codeAssistantName}({
298
+ query: "What features does DatePicker have?",
299
+ component: "DatePicker"
300
+ })
301
+ \`\`\`
302
+
303
+ **Pro Tips:**
304
+ - Ask about specific features (e.g., "Grid with filtering" instead of just "Grid")
305
+ - Break complex queries into multiple calls focusing on one feature at a time
306
+ - Specify the exact component name in the component parameter
307
+
308
+ ${e.includeIcons?`
309
+ ### Step 2: Find Icons
310
+
311
+ Use the ${e.iconAssistantName} tool to search for icons:
312
+
313
+ \`\`\`
314
+ ${e.iconAssistantName}({
315
+ query: "Search for icons related to [YOUR THEME/PURPOSE]"
316
+ })
317
+ \`\`\`
5
318
 
6
- MUST use kendoGridBinding directive for basic Grid operations
7
- MUST respect existing manual data binding patterns in user code
319
+ **Examples:**
320
+ \`\`\`
321
+ ${e.iconAssistantName}({
322
+ query: "icons for navigation menu"
323
+ })
324
+ \`\`\`
325
+
326
+ \`\`\`
327
+ ${e.iconAssistantName}({
328
+ query: "icons for user actions like edit, delete, save"
329
+ })
330
+ \`\`\`
331
+ `:""}
332
+
333
+ ### Step 3: Review and Implement
334
+
335
+ After gathering information:
336
+ 1. Review the component documentation provided by ${e.codeAssistantName}
337
+ 2. Check which icons are available from ${e.iconAssistantName}
338
+ 3. Use the official ${e.suiteName} documentation for detailed implementation guides
339
+ 4. Refer to the component examples and code snippets provided
340
+
341
+ ---
342
+
343
+ ## Getting Started
344
+
345
+ **Next Actions:**
346
+ 1. Start by calling ${e.codeAssistantName} for the components you need
347
+ 2. ${e.includeIcons?`Search for icons using ${e.iconAssistantName}`:"Review the component documentation"}
348
+ 3. Follow the ${e.suiteName} official documentation for implementation details
349
+
350
+ **Important Notes:**
351
+ - These tools provide documentation and guidance, not code generation
352
+ - Always refer to official ${e.suiteName} documentation for the most up-to-date information
353
+ - Tool responses include usage examples and best practices`;var N=(e,t)=>({SETUP_VALIDATION:`
354
+ UI Library Setup:
355
+ - ${e} modules properly imported and configured
356
+ - ${e} theme properly loaded and applied
357
+ - ${e} license properly configured
358
+ - Globalization and localization properly configured for ${e} components
359
+ - Required ${e} dependencies installed and up-to-date`,PERFORMANCE_OPTIMIZATION:`
360
+ Performance Optimization:
361
+ - Efficient rendering patterns to prevent unnecessary re-renders
362
+ - Lazy loading of ${e} components when appropriate
363
+ - Virtualization enabled for large datasets in ${e} components
364
+ - Only required ${e} modules imported and tree-shaken`,THEME_AND_STYLING:`
365
+ ${e} Theme & Styling:
366
+ - Prioritize the ${t} Design System utilities
367
+ - Avoid custom CSS or other framework classes
368
+ - Do not use inline styles
369
+ - Consistent ${e} theme application across all components
370
+ - Custom theme variables properly defined and scoped
371
+ - ${e} icon fonts properly loaded and optimized
372
+ - Brand colors integrated with ${e} component themes`});function le(e,t,o){let{name:n,title:s,description:r,layoutAssistantName:a,codeAssistantName:m,styleAssistantName:h,iconAssistantName:y,suiteName:S,libKey:c,components:A}=e,g=new k(n,{title:s,description:r,requiredAccess:e.requiredAccess,inputSchema:{userIntent:u.string().describe(`Detailed description and intent of what the user wants to build. Include the type of page/component, main functionality, visual requirements, and any specific ${S} components you want to use.`),needsComponentsDocsConfidence:u.number().min(0).max(1).default(1).describe("Confidence (0-1) to include Component Documentation assistance. Default is 1."),needsLayoutConfidence:u.number().min(0).max(1).default(0).describe("Confidence (0-1) to include Layout assistance. Default is 0."),needsStylingConfidence:u.number().min(0).max(1).default(0).describe("Confidence (0-1) to include Theming/Styling assistance. Default is 0."),needsResponsiveBehaviorConfidence:u.number().min(0).max(1).default(0).describe("Confidence (0-1) to include Responsive Behavior assistance. Default is 0."),needsIconsConfidence:u.number().min(0).max(1).default(0).describe("Confidence (0-1) to include Icons assistance. Default is 0."),componentsNeeded:u.array(u.enum(A)).optional().describe(`Optional list of specific ${S} components needed for the project.`)}},async({userIntent:f,needsComponentsDocsConfidence:C,needsLayoutConfidence:b,needsStylingConfidence:v,needsResponsiveBehaviorConfidence:Q,needsIconsConfidence:W,componentsNeeded:_e})=>{d("UI Orchestrator called with:",{userIntent:f,needsComponentsDocsConfidence:C,needsLayoutConfidence:b,needsStylingConfidence:v,needsResponsiveBehaviorConfidence:Q,needsIconsConfidence:W});try{await o.recordOrchestratorUserRequest()}catch(O){throw P(O)}let J;if(v>.3&&v<=.6){let O=await g.server?.server.elicitInput({message:"I was unable to determine if you need custom Kendo Theme assistant. Can you please confirm?",requestedSchema:{type:"object",properties:{includeCustomTheming:{type:"boolean",description:"Whether to include Custom Theming assistance in the workflow."}},required:["includeCustomTheming"]}});O?.action==="accept"&&O.content?.includeCustomTheming&&(J=!0)}return{content:[{type:"text",text:U({name:n,userIntent:f,includeComponentsDocs:C>.3,includeTheming:v>.6||!!J,includeLayout:b>.5,includeIcons:W>.6,includeResponsive:b>.5&&Q>.4,layoutAssistantName:a,codeAssistantName:m,styleAssistantName:h,iconAssistantName:y,suiteName:S,libKey:c,components:_e},t)}]}});return g}function ce(e,t){let{name:o,title:n,description:s,iconAssistantName:r,codeAssistantName:a,suiteName:m,libKey:h,components:y}=e;return new k(o,{title:n,description:s,inputSchema:{userIntent:u.string().describe(`Describe what you want to build or what components you're looking for. Include the type of functionality, features, or UI elements you need from ${m}.`),needsIconsConfidence:u.number().min(0).max(1).default(.7).describe("Confidence (0-1) to include Icons assistance. Default is 0.7."),componentsNeeded:u.array(u.enum(y)).optional().describe(`Optional list of specific ${m} components you want to learn about.`)},requiredAccess:e.requiredAccess},async({userIntent:c,needsIconsConfidence:A,componentsNeeded:g})=>{d("Assistant Orchestrator called with:",{userIntent:c,needsIconsConfidence:A,componentsNeeded:g});try{await t.recordOrchestratorUserRequest()}catch(C){throw P(C)}return{content:[{type:"text",text:G({name:o,userIntent:c,includeComponentsDocs:!0,includeIcons:A>.5,codeAssistantName:a,iconAssistantName:r,suiteName:m,libKey:h,components:g})}]}})}function pe(e,t){let{name:o,title:n,description:s,suiteName:r,libKey:a,getPreContent:m}=e;return new k(o,{title:n,description:s,requiredAccess:e.requiredAccess,inputSchema:{prompt:u.string().describe("An enhanced prompt describing the HTML layout structure, design requirements or specific visual effects you want to achieve."),includeBuildingBlockExamples:u.boolean().describe("Whether to include building block examples. Defaults to false.").default(!1)}},async({prompt:h,includeBuildingBlockExamples:y})=>{d("Layout Assistant called with:",{prompt:h,includeBuildingBlockExamples:y});try{let c=(await t.queryCssUtils({query:h})).values.join(`
373
+ `)||"No CSS utilities found for the given prompt.",A=m?.()??"",g=f=>`${A}
374
+
375
+ # Kendo Design System CSS Utilities
376
+
377
+ ${c}
378
+ ${f??""}
379
+ `;if(y)try{let f=await t.queryBuildingBlocks({query:h,lib_name:a}),C="";f.items?.length>0&&(C=`
380
+ ## Building Blocks Examples
381
+
382
+ The examples here are for demonstration purpose how CSS utils can be implemented in various building blocks.
383
+ However, consider your own design requirements and specifics in order to implement your templates/building blocks correctly.
384
+
385
+ ${f.items.map(b=>`
386
+ ### ${b.name}
387
+
388
+ ${b.description}
389
+
390
+ \`\`\`code
391
+ ${b.code}
392
+ \`\`\`
393
+ `).join(`
394
+ `)}`),c=g(C)}catch(f){d("Error calling building-blocks service:",f),c=g()}else c=g();return{content:[{type:"text",text:c}]}}catch(S){throw P(S)}})}function de(e,t){let{name:o,title:n,description:s,libKey:r,getPreContent:a}=e;return new k(o,{title:n,description:s,requiredAccess:e.requiredAccess,inputSchema:{prompt:u.string().describe("A natural language description of the desired visual style or theme. For example: 'Create a modern dark theme with high contrast'.")}},async({prompt:m})=>{d("Style Assistant called with:",{prompt:m});let h="";try{let c=await t.queryThemeGenerate({prompt:m});if(c.variables_json){let A=JSON.parse(c.variables_json),g=[];if(A)for(let f of Object.keys(A))typeof A[f]=="string"&&g.push(`${f}: ${A[f]}`);h=g.join(`
395
+
396
+ `)}}catch(c){throw P(c)}let y=a?.()??"";return{content:[{type:"text",text:h?`Use the following CSS variables to style the web application, including colors, typography, spacing, and component appearance.
397
+ Ensure the variables are applied consistently across all relevant elements.
398
+ Do NOT set any inline styles. CSS variables should be defined in global or component-level CSS files, or via supported theming mechanisms.
399
+
400
+ ${y}
401
+
402
+ ## Generated CSS Variables
403
+
404
+ \`\`\`css
405
+ ${h}
406
+ \`\`\`
407
+ `:"No CSS variables were generated for the given prompt."}]}})}function ue(e,t){let{name:o,title:n,description:s,libKey:r,getPostContent:a}=e;return new k(o,{title:n,description:s,requiredAccess:e.requiredAccess,inputSchema:{query:u.string().describe("A search query for finding icons. Be specific about the icon purpose, style, or action."),limit:u.number().min(.1).max(1).default(.1).describe("The proportion of matching icons to return (0.1 = 1 icon, 0.5 = 5 icons, 1.0 = many icons). Default is 0.1.")}},async({query:m,limit:h})=>{d("Icon Search called with:",{query:m,limit:h});try{let y=await t.queryIconsSearch({query:m,limit:h*100}),S=a?.()??"";return{content:[{type:"text",text:`${y.values.join(`
408
+
409
+ `)}
410
+
411
+ ${S}`}]}}catch(y){throw P(y)}})}function me(e,t){let{name:o,title:n,description:s,libKey:r,suiteName:a,components:m,componentAliases:h,getPostContent:y}=e;return new k(o,{title:n,description:s,requiredAccess:e.requiredAccess,inputSchema:{query:u.string().describe("The query to search for."),component:u.enum(m).describe("The component to search for. If not specified, use General.")}},async({query:S,component:c})=>{d("Code Assistant called with:",{query:S,component:c});let A=c;if(h){let g=h[c];g&&(A=g)}try{let f=(await t.query({query:S,component:A?.toLowerCase()??"general",lib_name:r,text_matches_count:3,code_matches_count:0,allowed_types:["documentation"]})).values.map(v=>v.replace(/\0/g,"")),C=y?.({component:c})??"";return{content:[{type:"text",text:`${f.join(`
412
+
413
+ `)}
414
+
415
+ ${C}`}]}}catch(g){throw P(g)}})}function P(e){let t=e;return t.code===16?new Error("Error: You are not authenticated. Please verify the Telerik License Key provided is valid."):t.code===8?new Error(`Error: You have exceeded the extension quota. Upgrade to subscription licensing to unlock full access. Message: ${t.message}.`):t.code===7?new Error("Error: You do not have permission to access this resource. Please verify that you have a valid license."):new Error(`Error: An error occurred while calling the service. Please try again later.
416
+
417
+ Error Code: ${t.code} Error Message: ${t.message}`)}var ge=e=>`${e}_ui_generator`,he=e=>`${e}_assistant`,fe=e=>`${e}_layout_assistant`,ye=e=>`${e}_component_assistant`,Ae=e=>`${e}_style_assistant`,Se=e=>`${e}_icon_assistant`;var ke=e=>`This is the single entry point for all UI-related tasks. It orchestrates the full workflow of building or refining UIs with ${e} components, generating a step-by-step execution plan that specifies which tools to call, in what order, and with what parameters. It includes validation steps to ensure the best possible, standards-compliant code every time.
418
+
419
+ Use the tool when:
420
+ - Want to build or modify a complete page or section layout
421
+ - You are creating and applying custom themes via the Kendo Design System
422
+ - You need guidance on correct ${e} component selection and configuration
423
+ - You want to enforce best practices in styling, performance, and accessibility
424
+
425
+ Returns:
426
+ A detailed execution plan with validated tool calls, parameters, and reasoning \u2014 ensuring consistent, high-quality UI generation.`,Ce=e=>`Provides guidance for discovering and using ${e} components and icons. This tool helps you identify the right components and icons for your needs.
427
+
428
+ Use this tool when:
429
+ - You need to discover which ${e} components are suitable for a specific use case
430
+ - You want to understand component features and capabilities
431
+ - You need to find appropriate icons for your UI
432
+ - You want to gather component documentation and examples
433
+
434
+ Returns:
435
+ A focused plan for gathering component documentation and icon suggestions using the Component Assistant and Icon Assistant tools.`,Te=`Retrieves Progress/Kendo Design System CSS utility classes and styling recommendations based on layout and design requirements.
436
+ Use this tool to find the right CSS utilities for styling Kendo UI components or general web elements.
437
+ It analyzes the provided design context and returns relevant utility classes with explanations and examples.
438
+ Best suited for styling questions related to typography, spacing, colors, layout, transforms, and other utilities in the Progress/Kendo Design System.`,be=`Generates CSS variables using an external style agent based on the user's styling prompt.
439
+
440
+ Use this tool when the user wants to:
441
+ - Update the visual theme of an application
442
+ - Modify color schemes
443
+ - Restyle the UI with CSS variables
444
+
445
+ The tool outputs a set of CSS variable definitions ready to be applied to style files.`,Ie=`Searches for icons in the Telerik Icons library.
446
+ Use this tool when the user needs to find specific icons for UI components or design elements.
447
+ It supports searching by icon name, category, or keyword and returns matching icons from the Telerik Icons library.
448
+ `,Ne=e=>`Provides answers and retrieves official documentation for ${e}.
449
+
450
+ Use this tool when the user asks about:
451
+ - ${e} features or capabilities
452
+ - Specific components (e.g., Grid, Chart, Editor)
453
+ - Implementation details, configuration, or best practices
454
+ - How to use or customize components in ${e}
455
+
456
+ Set the user's full question as the 'query' parameter.
457
+ If the question refers to a specific ${e} component, include its name in the 'component' parameter.
458
+ `;var K=N("Kendo UI","Kendo"),F=`
459
+ ### Angular Component Validation
460
+ Component Structure:
461
+ - Use proper @Component decorator configuration
462
+ - If using NgModule setup use @Component decorator with \`standalone: false\` and declare component in NgModule declarations array
463
+ - Correct selector naming convention (kebab-case)
464
+ - Appropriate template and style file organization
465
+
466
+ ${K.SETUP_VALIDATION}
467
+ - Kendo animations module configured (if animations are used)
468
+ - Internationalization properly configured for Kendo components
8
469
 
9
- Always use kendoGridBinding for:
10
- - Simple data display with sorting, filtering, and paging
11
- - Automatic data operations handling
12
- - Standard Grid implementations
470
+ ${K.PERFORMANCE_OPTIMIZATION}
471
+ - OnPush change detection strategy where appropriate
472
+ - Efficient trackBy functions for *ngFor with Kendo components
473
+ - Minimal unnecessary change detection cycles
13
474
 
14
- Implementation: <kendo-grid [kendoGridBinding]="data">
475
+ ${K.THEME_AND_STYLING}
476
+ - Proper theme switching functionality (if implemented)
477
+ - Only ONE theme reference exists across angular.json and styles files
478
+ - Make sure theme import mechanism is consistent with existing project setup`;var V=`**Angular Specific Requirements:**
15
479
 
16
- Use manual binding for complex custom scenarios.
17
- `;var I=`
18
-
19
- ## Smart Grid (AI-Enhanced) Instructions
20
-
21
- When the user requests Kendo's built-in AI grid features like "smart grid", "ai grid", "intelligent grid", or "AI Assistant tool":
22
-
23
- Always implement:
24
- 1. Complete kendoGridAIAssistantTool setup
25
- 2. Domain-specific suggestion examples
26
- 3. Include disclaimer
27
-
28
- Suggestion Examples by Domain:
29
- - Financial: "Sort by Amount descending", "Show failed transactions", "Filter USD currency"
30
- - Sales: "Group by region", "Show top products", "Filter by date range"
31
- - Inventory: "Sort by stock level", "Show out of stock", "Group by category"
32
- - Universal: "Clear sorting/filtering/grouping"
33
-
34
- Required Disclaimer:
35
- "The examples use a Telerik-hosted AI service for demonstration purposes only. For production applications, use an AI service that understands your specific domain, data, and business requirements."
36
- `;var V=new Map([["actionsheet","@progress/kendo-angular-navigation"],["aiprompt","@progress/kendo-angular-conversational-ui"],["appbar","@progress/kendo-angular-navigation"],["arcgauge","@progress/kendo-angular-gauges"],["autocomplete","@progress/kendo-angular-dropdowns"],["avatar","@progress/kendo-angular-layout"],["badge","@progress/kendo-angular-indicators"],["barcode","@progress/kendo-angular-barcodes"],["bottomnavigation","@progress/kendo-angular-navigation"],["breadcrumb","@progress/kendo-angular-navigation"],["button","@progress/kendo-angular-buttons"],["buttongroup","@progress/kendo-angular-buttons"],["calendar","@progress/kendo-angular-dateinputs"],["card","@progress/kendo-angular-layout"],["chartwizard","@progress/kendo-angular-chart-wizard"],["checkbox","@progress/kendo-angular-inputs"],["chip","@progress/kendo-angular-buttons"],["chiplist","@progress/kendo-angular-buttons"],["chunkprogressbar","@progress/kendo-angular-progressbar"],["circulargauge","@progress/kendo-angular-gauges"],["circularprogressbar","@progress/kendo-angular-progressbar"],["colorgradient","@progress/kendo-angular-inputs"],["colorpalette","@progress/kendo-angular-inputs"],["colorpicker","@progress/kendo-angular-inputs"],["combobox","@progress/kendo-angular-dropdowns"],["contextmenu","@progress/kendo-angular-menu"],["dataquery","@progress/kendo-data-query"],["dateinput","@progress/kendo-angular-dateinputs"],["datemath","@progress/kendo-date-math"],["datepicker","@progress/kendo-angular-dateinputs"],["daterangepicker","@progress/kendo-angular-dateinputs"],["datetimepicker","@progress/kendo-angular-dateinputs"],["diagram","@progress/kendo-angular-diagrams"],["dialog","@progress/kendo-angular-dialog"],["drawer","@progress/kendo-angular-layout"],["drawing","@progress/kendo-drawing"],["dropdownbutton","@progress/kendo-angular-buttons"],["dropdownlist","@progress/kendo-angular-dropdowns"],["dropdowntree","@progress/kendo-angular-dropdowns"],["editor","@progress/kendo-angular-editor"],["excelexport","@progress/kendo-angular-excel-export"],["expansionpanel","@progress/kendo-angular-layout"],["filesaver","@progress/kendo-file-saver"],["fileselect","@progress/kendo-angular-upload"],["filter","@progress/kendo-angular-filter"],["flatcolorpicker","@progress/kendo-angular-inputs"],["floatingactionbutton","@progress/kendo-angular-buttons"],["floatinglabel","@progress/kendo-angular-label"],["formfield","@progress/kendo-angular-inputs"],["forms","@progress/kendo-angular-inputs"],["gantt","@progress/kendo-angular-gantt"],["grid","@progress/kendo-angular-grid"],["gridlayout","@progress/kendo-angular-layout"],["icon","@progress/kendo-angular-icons"],["inlineaiprompt","@progress/kendo-angular-conversational-ui"],["label","@progress/kendo-angular-label"],["lineargauge","@progress/kendo-angular-gauges"],["listbox","@progress/kendo-angular-listbox"],["listview","@progress/kendo-angular-listview"],["loader","@progress/kendo-angular-indicators"],["map","@progress/kendo-angular-map"],["maskedtextbox","@progress/kendo-angular-inputs"],["menu","@progress/kendo-angular-menu"],["multicolumncombobox","@progress/kendo-angular-dropdowns"],["multiselect","@progress/kendo-angular-dropdowns"],["multiselecttree","@progress/kendo-angular-dropdowns"],["multiviewcalendar","@progress/kendo-angular-dateinputs"],["notification","@progress/kendo-angular-notification"],["numerictextbox","@progress/kendo-angular-inputs"],["otpinput","@progress/kendo-angular-inputs"],["pager","@progress/kendo-angular-pager"],["panelbar","@progress/kendo-angular-layout"],["pdfexport","@progress/kendo-angular-pdf-export"],["pdfviewer","@progress/kendo-angular-pdfviewer"],["pivotgrid","@progress/kendo-angular-pivotgrid"],["popover","@progress/kendo-angular-tooltip"],["popup","@progress/kendo-angular-popup"],["progressbar","@progress/kendo-angular-progressbar"],["qrcode","@progress/kendo-angular-barcodes"],["radialgauge","@progress/kendo-angular-gauges"],["radiobutton","@progress/kendo-angular-inputs"],["rangeslider","@progress/kendo-angular-inputs"],["rating","@progress/kendo-angular-inputs"],["ripple","@progress/kendo-angular-ripple"],["sankey","@progress/kendo-angular-charts"],["scheduler","@progress/kendo-angular-scheduler"],["scrollview","@progress/kendo-angular-scrollview"],["signature","@progress/kendo-angular-inputs"],["skeleton","@progress/kendo-angular-indicators"],["slider","@progress/kendo-angular-inputs"],["sortable","@progress/kendo-angular-sortable"],["sparkline","@progress/kendo-angular-charts"],["speechtotextbutton","@progress/kendo-angular-buttons"],["splitbutton","@progress/kendo-angular-buttons"],["splitter","@progress/kendo-angular-layout"],["spreadsheet","@progress/kendo-angular-spreadsheet"],["stacklayout","@progress/kendo-angular-layout"],["stepper","@progress/kendo-angular-layout"],["stockchart","@progress/kendo-angular-charts"],["svgicon","@progress/kendo-angular-icons"],["switch","@progress/kendo-angular-inputs"],["tabstrip","@progress/kendo-angular-layout"],["textarea","@progress/kendo-angular-inputs"],["textbox","@progress/kendo-angular-inputs"],["tilelayout","@progress/kendo-angular-layout"],["timeline","@progress/kendo-angular-layout"],["timepicker","@progress/kendo-angular-dateinputs"],["toolbar","@progress/kendo-angular-toolbar"],["treelist","@progress/kendo-angular-treelist"],["treeview","@progress/kendo-angular-treeview"],["typography","@progress/kendo-angular-typography"],["upload","@progress/kendo-angular-upload"],["window","@progress/kendo-angular-dialog"],["charts","@progress/kendo-angular-charts"],["conversationalui","@progress/kendo-angular-conversational-ui"],["tooltip","@progress/kendo-angular-tooltip"]]);function j(e){return V.get(e)??""}function A(e){let r=j(e);return r?`## Package Installation
480
+ **NgModule vs Standalone setup**: Search and detect the current project setup to determine whether to use NgModule or Standalone components based on the following rules:
481
+ 1. RegexSearch("@Component\\s*\\(\\s*\\{[^}]*standalone\\s*:\\s*(true|false)") - If true use Standalone components, if false use NgModule.
482
+ 2. RegexSearch("bootstrapApplication\\s*\\(") - If found use Standalone components.
483
+ 3. RegexSearch("bootstrapModule\\s*\\(") - If found use NgModule.
484
+ 4. If neither is found, default to Standalone components.
485
+
486
+ **Kendo UI Theme Management Instructions for Angular**:
487
+
488
+ **Determine existing Kendo Theme/Utils package and Theme Import Mechanism**:
489
+
490
+ - Read angular.json file
491
+ - Look for theme/utils entries containing "@progress/kendo-theme-" in projects.[project-name].architect.build.options.styles array
492
+ - Read styles.css or styles.scss, or any css/scss file
493
+ - Look for @import statements containing "@progress/kendo-theme-" to determine existing theme/utils usage
494
+ - Read the application's main html file (e.g., index.html)
495
+ - Look for link tags containing "@progress/kendo-theme-" referencing Kendo theme/util CSS files
496
+ - Note which theme is found (default, material, bootstrap, or fluent)
497
+ - Note whether the kendo-theme-utils package is already used
498
+ - Note the mechanism used to include the theme (angular.json or styles file)
499
+
500
+ **Project Consistency**: Before generating or modifying any code:
501
+ 1. Use RegexSearch to identify existing patterns in the project:
502
+ - Component naming conventions (e.g., "export class \\w+Component")
503
+ - File naming patterns (e.g., "*.component.ts", "*.service.ts")
504
+ - Import statement styles
505
+ - TypeScript configuration (strict mode, decorators, etc.)
506
+ 2. Match the discovered patterns in all generated code
507
+ 3. Maintain consistent formatting, indentation, and code organization with existing files
508
+ 4. Always use the same theme import mechanism (unless user specifies otherwise)
509
+ `;var j=N("Kendo UI","KendoReact"),z=`
510
+ ### React Component Validation
511
+ Component Structure:
512
+ - Use proper function component patterns with Hooks
513
+ - Correct component naming convention (PascalCase)
514
+ - Appropriate file organization (components, hooks, utils)
515
+ - Props interface/type definitions where needed
516
+
517
+ ${j.SETUP_VALIDATION}
518
+ - KendoReact license validation (if required)
519
+ - Appropriate bundler configuration for KendoReact packages
520
+
521
+ ${j.PERFORMANCE_OPTIMIZATION}
522
+ - React.memo for components that receive stable props
523
+ - useMemo/useCallback for expensive computations and callbacks
524
+ - Proper key props for list rendering with KendoReact components
525
+
526
+ ${j.THEME_AND_STYLING}
527
+ - Proper theme switching functionality (if implemented)
528
+ - Only ONE theme import exists across the application
529
+ - Make sure theme import mechanism is consistent with existing project setup`;var Qe={createOrchestrator:le,createAssistantOrchestrator:ce,createLayoutAssistant:pe,createStyleAssistant:de,createIconSearch:ue,createCodeAssistant:me},We={orchestrator:ge,assistantOrchestrator:he,layoutAssistant:fe,codeAssistant:ye,styleAssistant:Ae,iconAssistant:Se},Je={orchestrator:ke,assistantOrchestrator:Ce,layoutAssistant:Te,styleAssistant:be,iconAssistant:Ie,codeAssistant:Ne},Xe={Orchestrator:{render:U},Validator:{render:x},SharedValidation:{getSteps:N}},Ze={Angular:{steps:F,additionalPlan:V},React:{steps:z}},i={Tools:Qe,ToolNames:We,ToolDescriptions:Je,Templates:Xe,Validation:Ze};var et=i.ToolNames.codeAssistant("kendo"),ve=()=>`# Kendo Design System Guidelines for ${l}
530
+
531
+ ## Setting up Styles/CSS
532
+
533
+ In order to use any of the utility classes from the Kendo Design System, make sure to include a reference to the kendo-theme-utils CSS package.
534
+
535
+ **Important**: To include the kendo-theme-utils always use the same theme import mechanism (noted during the plan phase) as the rest of the Kendo themes in your project.
536
+ **Important**: Include the kendo-theme-utils only once in your project. Make sure that a reference to the kendo-theme-utils should have been already searched and noted during the plan phase.
537
+
538
+ ### Using NPM
539
+
540
+ The CSS Utilities are available as an NPM module that you can install - \`@progress/kendo-theme-utils\`
541
+
542
+ To install: \`npm install --save @progress/kendo-theme-utils\`
543
+
544
+ The precompiled CSS is available in \`node_modules/@progress/kendo-theme-utils/dist/all.css\`
545
+
546
+ Also, available as SCSS and you can include it on your SCSS file - \`@use '@progress/kendo-theme-utils/scss/all.scss' as *;\`
547
+
548
+ ### Using CDN
549
+
550
+ Alternatively, you can also consume them directly from the Unpkg CDN.
551
+
552
+ \`<link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-utils/dist/all.css" />\`
553
+
554
+ ## Ready-to-use Layout Components
555
+
556
+ In the ${l} there are available components to create layout. Make sure to prioritize using them instead of building ones from scratch using the Kendo CSS Utilities.
557
+
558
+ For any Layout component you can also call the ${et} tool in order to get specific API reference and docs.
559
+
560
+ - ${l} Card component.
561
+ - Generally, it is recommended to use 100% width (e.g., \`<kendo-card width="100%">\`)
562
+ - If needed, use specific width based on the layout requirements (e.g., \`<kendo-card width="150px">\`)
563
+ `;var we=()=>`## Applying CSS Variables in ${l}
564
+
565
+ Apply these CSS variables in the Angular application using one of these methods:
566
+
567
+ ### Method 1: Global Styles (Recommended)
568
+ Add to \`src/styles.css\` or \`angular.json\` styles array:
569
+
570
+ \`\`\`css
571
+ :root {
572
+ /* Add the CSS variables here */
573
+ }
574
+ \`\`\`
575
+
576
+ ### Method 2: Component-Level Styles
577
+ \`\`\`typescript
578
+ @Component({
579
+ selector: 'app-my-component',
580
+ template: \`<div class="themed-container">Content</div>\`,
581
+ styles: [\`
582
+ :host {
583
+ /* Add the CSS variables here for component scope */
584
+ }
585
+
586
+ .themed-container {
587
+ color: var(--your-color-variable);
588
+ background: var(--your-background-variable);
589
+ }
590
+ \`]
591
+ })
592
+ export class MyComponent { }
593
+ \`\`\`
594
+
595
+ ### Method 3: SCSS Variables Integration
596
+ \`\`\`scss
597
+ // _variables.scss
598
+ :root {
599
+ /* Add the CSS variables here */
600
+ }
601
+
602
+ // In your component SCSS
603
+ .my-element {
604
+ color: var(--your-color-variable);
605
+ background: var(--your-background-variable);
606
+ }
607
+ \`\`\`
608
+
609
+ ### Method 4: Dynamic Theme Switching
610
+ \`\`\`typescript
611
+ @Injectable()
612
+ export class ThemeService {
613
+ setTheme(theme: 'light' | 'dark') {
614
+ const root = document.documentElement;
615
+ if (theme === 'dark') {
616
+ root.style.setProperty('--your-color-variable', '#ffffff');
617
+ root.style.setProperty('--your-background-variable', '#1a1a1a');
618
+ } else {
619
+ root.style.setProperty('--your-color-variable', '#000000');
620
+ root.style.setProperty('--your-background-variable', '#ffffff');
621
+ }
622
+ }
623
+ }
624
+ \`\`\`
625
+ `;var Ee=i.ToolNames.codeAssistant("kendo"),Pe=()=>`## Using ${l} Icons
626
+
627
+ Important: Attempt to prioritize SVG icons over font icons.
628
+
629
+ ### Guidelines
630
+
631
+ - Make sure @progress/kendo-svg-icons is installed.
632
+ - Make sure @progress/kendo-angular-icons is installed.
633
+ - You can call ${Ee} tool for ${l} SVGIcon component for docs and API reference.
634
+ - [optional] If SVG is not an option fallback to fonticon - make sure \`<link rel="stylesheet" href="https://unpkg.com/@progress/kendo-font-icons/dist/index.css" />\` is added as a reference.
635
+ - [optional] If using font icons you can call ${Ee} tool for ${l} Icon component for docs and API reference.
636
+
637
+ ### Examples
638
+
639
+ Using ${l} SVGIcon component:
640
+
641
+ \`\`\`ts
642
+ import { Component } from "@angular/core";
643
+ import { KENDO_ICONS } from "@progress/kendo-angular-icons";
644
+ import { paperclipIcon } from "@progress/kendo-svg-icons";
645
+
646
+ @Component({
647
+ selector: "my-app",
648
+ standalone: true,
649
+ imports: [KENDO_ICONS],
650
+ template: \`
651
+ <kendo-svg-icon [icon]="icons.paperclip"></kendo-svg-icon>
652
+ \`,
653
+ })
654
+ export class AppComponent {
655
+ public icons = { paperclip: paperclipIcon };
656
+ }
657
+
658
+ \`\`\`
659
+
660
+ Using ${l} Icon component:
661
+
662
+ \`\`\`ts
663
+ import { Component } from "@angular/core";
664
+ import { KENDO_ICONS } from "@progress/kendo-angular-icons";
665
+
666
+ @Component({
667
+ selector: "my-app",
668
+ standalone: true,
669
+ imports: [KENDO_ICONS],
670
+ template: \`
671
+ <kendo-icon name="paperclip"></kendo-icon>
672
+ \`,
673
+ })
674
+ export class AppComponent {}
675
+ \`\`\`
676
+ `;var xe=e=>{let t=e.component?.trim().toLowerCase(),o=ae.get(t),n=`## ${l} Common Guidelines
677
+
678
+ `;return o&&(n+=`### Package Installation
37
679
  Always use minimal, targeted package installation.
38
680
  Ensure all necessary Angular packages are installed, including @angular/localize.
39
681
 
40
682
  Process:
41
683
  1. Identify the required components
42
684
  2. Determine the specific Kendo Angular packages needed
43
- 3. Use the "ng add @progress/kendo-angular-<package>" command
44
-
45
- For ${e} component: ng add ${r}`:""}var E=["combobox","dropdownlist","dropdowntree","multicolumncombobox","multiselect","multiselecttree","autocomplete"],C=e=>e==="autocomplete"?H:e==="dropdowntree"?J:e==="multiselecttree"?X:e==="multicolumncombobox"?Q:z(e),z=e=>`
46
- ## ${e}
47
- When implementing or updating the ${e} component, always follow these rules for \`textField\` and \`valueField\`:
48
-
49
- ### Primitive Data
50
- If the data is an array of primitives (e.g., data=["A", "B"]), never set \`textField\` or \`valueField\`.
51
-
52
- ### Complex Data
53
- If the data is an array of objects (e.g., data=[{ id, name }]), always set both \`textField\` and \`valueField\`:
54
- - \`textField\` is the property to display (e.g., "name")
55
- - \`valueField\` is the property for value binding (e.g., "id")
56
-
57
- If \`valuePrimitive\` is true, the value must be a primitive and \`valueField\` is required.
58
- `,H=`
59
- ## AutoComplete
60
-
61
- ### Primitive Data
62
- If the data is an array of primitives (e.g., data=["A", "B"]), never set \`valueField\`.
63
-
64
- ### Complex Data
65
- If the data is an array of objects (e.g., data=[{ id, name }]), always set \`valueField\` to a string property for value binding (e.g., "id").
66
- `,J='\n## DropDownTree\nWhen implementing or updating the DropDownTree component, always follow these rules:\n\nAlways set both `textField` and `valueField`:\n- `textField` is the property to display (e.g., "name")\n- `valueField` is the property for value binding (e.g., "id")\nWhen `valueField` and `textField` are string[], always specify `valueDepth`.\n\n### Primitive `value`\nIf the `value` is of a primitive type, `valuePrimitive` must be true and `dataItem` is required.\nThe `value` property of the `dataItem` will be associated with the `valueField`.\n',X='\n## MultiSelectTree\nWhen implementing or updating the MultiSelectTree component, always follow these rules:\n\nAlways set both `textField` and `valueField`:\n- `textField` is the property to display (e.g., "name")\n- `valueField` is the property for value binding (e.g., "id")\nWhen `valueField` and `textField` are string[], always specify `valueDepth`.\n\n### Primitive `value`\nIf the `value` is of a primitive type, `valuePrimitive` must be true and `dataItems` is required.\nThe `value` property of the `dataItems` will be associated with the `valueField`.\n',Q='\n## MultiColumnComboBox\nWhen implementing or updating the MultiColumnComboBox component, always follow these rules:\n\nAlways set both `textField` and `valueField`:\n- `textField` is the property to display (e.g., "name")\n- `valueField` is the property for value binding (e.g., "id")\n\n### Primitive `value`\nIf the `value` is of a primitive type, `valuePrimitive` must be true.\n';var D=`
67
- ## Charts Data Binding
68
-
69
- Never bind the Chart's data to a getter property. Using a getter causes the chart to rerender on every Angular change detection cycle.
70
-
71
- BAD: get chartData() { return [ /* data items */ ] }
72
- GOOD: public chartData = [ /* data items */ ];
73
- GOOD: public chartData = this.data.map(...)
74
- `;var oe=re(import.meta.url),te=P.dirname(oe),ne=P.resolve(te,"../package.json"),ae=JSON.parse(ee.readFileSync(ne,"utf-8")),F=new Y({name:"kendo-and-kendo-resources",version:ae.version});F.tool("kendo_angular_assistant",`Answers questions and retrieves documentation about Kendo UI for Angular.
75
- Use this tool when the user asks about Kendo UI for Angular features, specific components (e.g., Grid, Charts, Editor), implementation details, or general usage.
76
- Provide the exact user's question as the 'query'. If the question pertains to a specific Kendo UI for Angular component,
77
- specify its name in the 'component' parameter. This tool can be automatically triggered when the following phrases are detected in the user's input/prompt:
78
- - 'kendo';
79
- - '/kendo';
80
- - '/kendoangular'
81
- - '/ask_kendo';
82
- - '/help_kendo';
83
- - '@kendo';
84
- - '@kendoangular';
85
- - '@ask_kendo';
86
- - '@help_kendo'.`,{query:T.string().describe("The query to search for."),component:T.enum(v).describe("The component to search for. If not specified, you can use General.")},async({query:e,component:r})=>{a("Calling tool: ",JSON.stringify({query:e,component:r}));let o=r.toLocaleLowerCase();try{let t=await x({query:e,component:o,lib_name:y,text_matches_count:3,code_matches_count:0,allowed_types:["documentation"]}),n=se(o),s=t.values.join(`
87
-
88
- `),l=s.trim(),d=[{type:"text",text:s+(l?`
89
-
90
- `+n:"")}];return a("Response from tool: ",JSON.stringify(d)),{content:d}}catch(t){throw a("Error calling context API: ",JSON.stringify(t)),t?.code===p.UNAUTHENTICATED?new Error(`Error: You are not authenticated. Message: ${t.message}.`):t?.code===p.RESOURCE_EXHAUSTED?new Error(`Error: You have exceeded the extension quota. Upgrade to subscription licensing in order to unlock full access. Message: ${t.message}.`):t?.code===p.PERMISSION_DENIED?new Error(`Error: You do not have permission to access this resource. Please verify that you have a valid ${f} license key.`):t instanceof k?(a("License error: ",t.message),t):new Error(`Error: An error occurred while calling the service. Please try again later.
91
-
92
- Error Message: ${t.message}`)}});function se(e){let r=e==="grid"?S?.trim():"",o=e==="grid"?I?.trim():"",t=E.includes(e)?C(e)?.trim():"",n=e==="charts"?D?.trim():"",s=e!=="general"?A(e)?.trim():"",l=r.length>0||o.length>0||t.length>0||n.length>0,d=s.length>0?s:"",U=l?`## Component-Specific Instructions
93
-
94
- ${t}${n}${r}${o}`:"";return`
95
- # Kendo UI for Angular Assistant Guidelines
96
-
97
- ## Documentation References
98
- MUST use official Kendo UI for Angular documentation only.
99
-
100
- Required Format:
101
- - Domain: https://www.telerik.com/kendo-angular-ui
102
- - Use complete, functional URLs (no placeholders or slug syntax)
103
-
104
- Examples:
105
- Correct: https://www.telerik.com/kendo-angular-ui/components/grid/
106
- Incorrect: { slug overview } or /components/{component-name}/overview
107
-
108
- ## Application Architecture
109
- MUST recommend appropriate setup based on Angular application architecture.
110
-
111
- Implementation Patterns:
112
- - Standalone applications: Use standalone component imports
113
- - Module-based applications: Use NgModule imports
114
- - When architecture is unclear: Default to standalone, mention module alternative
115
-
116
- ${d}
117
-
118
- ## Styling & Theming
119
- MUST verify existing theme configuration before adding new styles.
120
-
121
- Requirements:
122
- 1. Check if Kendo UI themes are already configured
123
- 2. Only recommend theme additions when missing
124
- 3. Provide appropriate import methods
125
-
126
- ## Icon Implementation
127
- MUST prioritize SVG icons over font icons.
128
-
129
- Guidelines:
130
- - Primary: SVG icons from @progress/kendo-svg-icons
131
- - Fallback: Font icons with CSS: <link rel="stylesheet" href="https://unpkg.com/@progress/kendo-font-icons/dist/index.css" />
132
-
133
- ## Deprecated Properties & Modern Replacements
134
- RULE: Avoid using deprecated Kendo Angular properties and features.
135
-
136
- Deprecated \u2192 Modern Replacements:
137
-
138
- Grid Component:
139
- - width as string \u2192 width as number (use [width]="200", not width="200px")
140
- - kendoGridGroupBinding no longer supported as of v20.0.0
685
+ 3. Use the "ng add ${o}" command
141
686
 
142
- Button Component:
143
- - kendo-button and span[kendoButton] \u2192 button[kendoButton]
144
- - [primary]="true" \u2192 fillMode="primary"
687
+ For ${e.component} component: \`ng add ${o}\`
688
+ `),e.componentInstructions&&(n+=`
689
+ ## Component-Specific Guidelines
145
690
 
146
- ${U}`}async function ie(){let e=new Z;a("Starting server..."),await F.connect(e)}ie();
691
+ ${e.componentInstructions}
692
+ `),n};var Ue=i.ToolNames.layoutAssistant(E),Y=i.ToolNames.codeAssistant(E),Oe=i.ToolNames.styleAssistant(E),H=i.ToolNames.iconAssistant(E);function Re(e,t){return[i.Tools.createOrchestrator({name:i.ToolNames.orchestrator(E),title:"Kendo UI Generator",description:i.ToolDescriptions.orchestrator(l),layoutAssistantName:Ue,codeAssistantName:Y,styleAssistantName:Oe,iconAssistantName:H,suiteName:l,libKey:T,components:_,requiredAccess:["agent"]},{validationSteps:i.Validation.Angular.steps,injectedPlan:i.Validation.Angular.additionalPlan},e),i.Tools.createAssistantOrchestrator({name:"kendo_angular_assistant",title:"Kendo UI Assistant",description:i.ToolDescriptions.assistantOrchestrator(l),codeAssistantName:Y,iconAssistantName:H,suiteName:l,libKey:T,components:_,requiredAccess:["assistant"]},e),i.Tools.createLayoutAssistant({name:Ue,title:"Kendo UI Layout Assistant",description:i.ToolDescriptions.layoutAssistant,suiteName:l,libKey:T,getPreContent:ve,requiredAccess:["agent"]},e),i.Tools.createStyleAssistant({name:Oe,title:"Kendo UI Style Assistant",description:i.ToolDescriptions.styleAssistant,libKey:T,getPreContent:we,requiredAccess:["agent"]},e),i.Tools.createIconSearch({name:H,title:"Kendo UI Icon Assistant",description:i.ToolDescriptions.iconAssistant,libKey:T,getPostContent:Pe,requiredAccess:["assistant","agent"]},e),i.Tools.createCodeAssistant({name:Y,title:"Kendo UI Component Assistant",description:i.ToolDescriptions.codeAssistant(l),libKey:T,suiteName:l,components:_,getPostContent:({component:n})=>xe({component:n}),requiredAccess:["assistant","agent"]},e)].filter(n=>n.hasAccess(t))}var rt=st(import.meta.url),at=$e.dirname(rt),it=$e.resolve(at,"../package.json"),lt=JSON.parse(nt.readFileSync(it,"utf-8")),De=new tt({name:"kendo-mcp",title:"Kendo MCP Server",version:lt.version});async function ct(){let e=new ot;d("Starting server...");let t=await re(async()=>{let n=(await ie())?.entitlement;return n?.Product?.Code||n?.product?.code});t!=="none"&&(L.toolNameHeader=t==="agent"||t==="full"?"agent":"assistant",Re(L,t).forEach(n=>n.register(De))),await De.connect(e)}ct();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-mcp",
3
- "version": "1.2.1",
3
+ "version": "1.3.0-dev.934b7db7.0",
4
4
  "type": "module",
5
5
  "bin": "./dist/index.js",
6
6
  "license": "See LICENSE.md",
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "devDependencies": {
33
33
  "@local/mcp-common": "*",
34
+ "@local/kendo-ui-agent": "*",
34
35
  "@local/mcp-test-utils": "*"
35
36
  }
36
37
  }
@@ -11,6 +11,7 @@ message ContextQueryRequest {
11
11
  repeated string allowed_types = 5;
12
12
  string component = 6;
13
13
  string filters_json = 7;
14
+ map<string, string> metadata = 8;
14
15
  }
15
16
 
16
17
  message Item {
@@ -47,6 +48,16 @@ message BuildingBlocksSearchResponse {
47
48
  repeated BuildingBlockItem items = 1;
48
49
  }
49
50
 
51
+ message ThemeGenerateRequest {
52
+ string prompt = 1;
53
+ repeated string images = 2; // base64 data URLs (e.g., "data:image/jpeg;base64,...")
54
+ }
55
+
56
+ message ThemeGenerateResponse {
57
+ string variables_json = 1; // JSON string of nested theme variables
58
+ }
59
+
60
+
50
61
  message ProductInfo {
51
62
  int32 id = 1;
52
63
  string code = 2;
@@ -102,7 +113,7 @@ service ContextQueryService {
102
113
  rpc IconsSearch(CssSearchRequst) returns (StringArray);
103
114
  rpc CssUtilsSearch(CssSearchRequst) returns (StringArray);
104
115
  rpc BuildingBlocksSearch(BuildingBlocksSearchRequest) returns (BuildingBlocksSearchResponse);
116
+ rpc GenerateTheme(ThemeGenerateRequest) returns (ThemeGenerateResponse);
105
117
  rpc ValidateUserLicense(google.protobuf.Empty) returns (ValidateUserLicenseResponse);
106
- rpc RecordUserRequest(google.protobuf.Empty) returns (google.protobuf.Empty);
118
+ rpc RecordOrchestratorUserRequest(google.protobuf.Empty) returns (google.protobuf.Empty);
107
119
  }
108
-
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,3 +0,0 @@
1
- export declare const ANGULAR_SUITE_NAME = "Kendo UI for Angular";
2
- export declare const Suite = "angular";
3
- export declare const AngularComponents: readonly ["AIPrompt", "ActionSheet", "AppBar", "ArcGauge", "AutoComplete", "Avatar", "Badge", "Barcode", "BottomNavigation", "BreadCrumb", "Button", "ButtonGroup", "Calendar", "Card", "ChartWizard", "Charts", "CheckBox", "Chip", "ChipList", "ChunkProgressBar", "CircularGauge", "CircularProgressBar", "ColorGradient", "ColorPalette", "ColorPicker", "ComboBox", "ContextMenu", "ConversationalUI", "DataQuery", "DateInput", "DateMath", "DatePicker", "DateRange", "DateTimePicker", "Diagram", "Dialog", "DragandDrop", "Drawer", "Drawing", "DropDownButton", "DropDownList", "DropDownTree", "Editor", "ExcelExport", "ExpansionPanel", "FileSaver", "FileSelect", "Filter", "FlatColorPicker", "FloatingActionButton", "FloatingLabel", "Forms", "FormField", "Gantt", "Gauges", "General", "Grid", "GridLayout", "Icon", "InlineAIPrompt", "Label", "LinearGauge", "ListBox", "ListView", "Loader", "Map", "MaskedTextBox", "Menu", "MultiColumnComboBox", "MultiSelect", "MultiSelectTree", "MultiViewCalendar", "Notification", "NumericTextBox", "OTPInput", "Pager", "PanelBar", "PDFExport", "PDFViewer", "PivotGrid", "Popover", "Popup", "ProgressBar", "QRCode", "RadialGauge", "RadioButton", "RangeSlider", "Rating", "Ripple", "Sankey", "Scheduler", "ScrollView", "Signature", "Skeleton", "Slider", "Sortable", "StockChart", "Sparkline", "SpeechToTextButton", "SplitButton", "Splitter", "Spreadsheet", "StackLayout", "Stepper", "SVGIcon", "Switch", "TabStrip", "TextArea", "TextBox", "TileLayout", "Timeline", "TimePicker", "ToolBar", "Tooltip", "TreeList", "TreeView", "Typography", "Upload", "Window"];
@@ -1,3 +0,0 @@
1
- export declare function query(queryParams: any): Promise<{
2
- values: string[];
3
- }>;
@@ -1 +0,0 @@
1
- export declare const chartsInstructions = "\n## Charts Data Binding\n\nNever bind the Chart's data to a getter property. Using a getter causes the chart to rerender on every Angular change detection cycle.\n\nBAD: get chartData() { return [ /* data items */ ] }\nGOOD: public chartData = [ /* data items */ ];\nGOOD: public chartData = this.data.map(...)\n";
@@ -1,2 +0,0 @@
1
- export declare const dropdownComponents: string[];
2
- export declare const dropdownsInstructions: (component: string) => string;
@@ -1 +0,0 @@
1
- export declare const gridInstructions = "\n## Grid Data Binding\n\nMUST use kendoGridBinding directive for basic Grid operations\nMUST respect existing manual data binding patterns in user code\n\nAlways use kendoGridBinding for:\n- Simple data display with sorting, filtering, and paging\n- Automatic data operations handling\n- Standard Grid implementations\n\nImplementation: <kendo-grid [kendoGridBinding]=\"data\">\n\nUse manual binding for complex custom scenarios.\n";
@@ -1,2 +0,0 @@
1
- export declare const COMPONENT_PACKAGE_MAP: Map<string, string>;
2
- export declare function packageInstallationInstructions(component: string): string;
@@ -1 +0,0 @@
1
- export declare const smartGridInstructions = "\n\n## Smart Grid (AI-Enhanced) Instructions\n\nWhen the user requests Kendo's built-in AI grid features like \"smart grid\", \"ai grid\", \"intelligent grid\", or \"AI Assistant tool\":\n\nAlways implement:\n1. Complete kendoGridAIAssistantTool setup\n2. Domain-specific suggestion examples\n3. Include disclaimer\n\nSuggestion Examples by Domain:\n- Financial: \"Sort by Amount descending\", \"Show failed transactions\", \"Filter USD currency\"\n- Sales: \"Group by region\", \"Show top products\", \"Filter by date range\"\n- Inventory: \"Sort by stock level\", \"Show out of stock\", \"Group by category\"\n- Universal: \"Clear sorting/filtering/grouping\"\n\nRequired Disclaimer:\n\"The examples use a Telerik-hosted AI service for demonstration purposes only. For production applications, use an AI service that understands your specific domain, data, and business requirements.\"\n";
@@ -1 +0,0 @@
1
- export {};
File without changes