@progress/kendo-angular-mcp 1.0.2 → 1.0.3

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/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- var _=Object.defineProperty;var L=(e,r,n)=>r in e?_(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n;var k=(e,r,n)=>L(e,typeof r!="symbol"?r+"":r,n);import{McpServer as H}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as z}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as U}from"zod";var v="Kendo UI for Angular",S="angular",E=["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 M,join as F}from"path";import{fileURLToPath as q}from"url";import{readFileSync as N}from"node:fs";import s from"node:fs";import u from"node:path";import B from"@grpc/proto-loader";import d from"@grpc/grpc-js";var f=["TELERIK_LICENSE","KENDO_UI_LICENSE"],b="TELERIK_LICENSE_PATH",p=(e=>(e[e.UNAUTHENTICATED=16]="UNAUTHENTICATED",e[e.RESOURCE_EXHAUSTED=8]="RESOURCE_EXHAUSTED",e[e.PERMISSION_DENIED=7]="PERMISSION_DENIED",e))(p||{}),y=!1,t=process.env.DEBUG_LOG_FILE,x=!!(t&&typeof t=="string");if(x){let e=u.resolve(t),r=u.dirname(e);if(r!=="."&&r!==process.cwd()&&!s.existsSync(r))try{s.mkdirSync(r,{recursive:!0})}catch(n){console.error("Error creating log directory:",n)}if(!s.existsSync(e))try{s.writeFileSync(e,"")}catch(n){console.error("Error creating log file:",n)}}else y=!1;y=x&&!!t&&s.existsSync(u.resolve(t));function a(...e){if(y&&t){let r=`${new Date().toISOString()}: ${e.join(" ")}
3
- `,n=u.resolve(t);s.appendFile(n,r,o=>{o&&console.error("Error writing to log file:",o)})}}var g=process.env[b],h=process.env[f[0]]||process.env[f[1]],c=class extends Error{constructor(e){super(e),this.name="LicenseError"}};function R(){if(!g&&!h)throw new c(`No license found. Please set one of the following environment variables: ${f.join(", ")} or ${b}`);let e;if(g)try{e=N(g,"utf8"),a("License key read from file: ",g)}catch{throw new c(`Error reading license file: ${g}. Please verify the file exists and is readable.`)}return h&&(e=h,a("License key read from environment variable.")),e}var A=class{constructor(e,r){k(this,"client");k(this,"isDev");this.contextApiUrl=e,this.protoPath=r;let n=B.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 o=d.loadPackageDefinition(n);this.client=new o.ContextQueryService(this.contextApiUrl||"contextapi.telerik.com:443",this.isDev?d.credentials.createInsecure():d.credentials.createSsl())}async query(e){let r=this.isDev?"fake_license":R(),n=new d.Metadata;if(r&&typeof r=="string"){r=r.replace(/^\uFEFF/,"");try{n.add("x-license-key",r)}catch(o){return a("Error adding license key to metadata:",o),Promise.reject(new Error(`Failed to use license key: ${o.message}`))}}return r&&typeof r=="string"&&n.add("x-license-key",r),new Promise((o,i)=>{this.client.query(e,n,(l,m)=>{l?i(l):o(m)})})}};var O=F(M(q(import.meta.url)),"../proto/service.proto"),K=new A("contextapi.telerik.com:443",O);async function I(e){return K.query(e)}import j from"fs";import D from"path";import{fileURLToPath as J}from"url";var C=`
2
+ var N=Object.defineProperty;var M=(e,r,t)=>r in e?N(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var h=(e,r,t)=>M(e,typeof r!="symbol"?r+"":r,t);import{McpServer as ee}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as re}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as G}from"zod";var w="Kendo UI for Angular",b="angular",x=["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 $,join as K}from"path";import{fileURLToPath as V}from"url";import{readFileSync as R}from"node:fs";import l from"node:fs";import m from"node:path";import O from"@grpc/proto-loader";import c from"@grpc/grpc-js";var v=["TELERIK_LICENSE","KENDO_UI_LICENSE"],I="TELERIK_LICENSE_PATH",u=(e=>(e[e.UNAUTHENTICATED=16]="UNAUTHENTICATED",e[e.RESOURCE_EXHAUSTED=8]="RESOURCE_EXHAUSTED",e[e.PERMISSION_DENIED=7]="PERMISSION_DENIED",e))(u||{}),y=!1,s=process.env.DEBUG_LOG_FILE,S=!!(s&&typeof s=="string");if(S){let e=m.resolve(s),r=m.dirname(e);if(r!=="."&&r!==process.cwd()&&!l.existsSync(r))try{l.mkdirSync(r,{recursive:!0})}catch(t){console.error("Error creating log directory:",t)}if(!l.existsSync(e))try{l.writeFileSync(e,"")}catch(t){console.error("Error creating log file:",t)}}else y=!1;y=S&&!!s&&l.existsSync(m.resolve(s));function n(...e){if(y&&s){let r=`${new Date().toISOString()}: ${e.join(" ")}
3
+ `,t=m.resolve(s);l.appendFile(t,r,o=>{o&&console.error("Error writing to log file:",o)})}}var p=process.env[I],f=process.env[v[0]]||process.env[v[1]],k=class extends Error{constructor(e){super(e),this.name="LicenseError"}};function q(){if(!p&&!f)throw new k(`No license found. Please set one of the following environment variables: ${v.join(", ")} or ${I}`);let e;if(p)try{e=R(p,"utf8"),n("License key read from file: ",p)}catch{throw new k(`Error reading license file: ${p}. Please verify the file exists and is readable.`)}return f&&(e=f,n("License key read from environment variable.")),e}var E=class{constructor(e,r){h(this,"client");h(this,"isDev");this.contextApiUrl=e,this.protoPath=r;let t=O.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"),n("Using ContextApi URl:",this.contextApiUrl);let o=c.loadPackageDefinition(t);this.client=new o.ContextQueryService(this.contextApiUrl||"contextapi.telerik.com:443",this.isDev?c.credentials.createInsecure():c.credentials.createSsl())}async query(e){let r=this.isDev?"fake_license":q(),t=new c.Metadata;if(r&&typeof r=="string"){r=r.replace(/^\uFEFF/,"");try{t.add("x-license-key",r)}catch(o){return n("Error adding license key to metadata:",o),Promise.reject(new Error(`Failed to use license key: ${o.message}`))}}return r&&typeof r=="string"&&t.add("x-license-key",r),new Promise((o,i)=>{this.client.query(e,t,(a,d)=>{a?i(a):o(d)})})}};var W=K($(V(import.meta.url)),"../proto/service.proto"),j=new E("contextapi.telerik.com:443",W);async function A(e){return j.query(e)}import oe from"fs";import _ from"path";import{fileURLToPath as te}from"url";var C=`
4
4
  ## Grid Data Binding
5
5
 
6
6
  MUST use kendoGridBinding directive for basic Grid operations
@@ -14,7 +14,8 @@ Always use kendoGridBinding for:
14
14
  Implementation: <kendo-grid [kendoGridBinding]="data">
15
15
 
16
16
  Use manual binding for complex custom scenarios.
17
- `;var T=`
17
+ `;var D=`
18
+
18
19
  ## Smart Grid (AI-Enhanced) Instructions
19
20
 
20
21
  When the user requests Kendo's built-in AI grid features like "smart grid", "ai grid", "intelligent grid", or "AI Assistant tool":
@@ -26,13 +27,13 @@ Always implement:
26
27
 
27
28
  Suggestion Examples by Domain:
28
29
  - Financial: "Sort by Amount descending", "Show failed transactions", "Filter USD currency"
29
- - Sales: "Group by region", "Show top products", "Filter by date range"
30
+ - Sales: "Group by region", "Show top products", "Filter by date range"
30
31
  - Inventory: "Sort by stock level", "Show out of stock", "Group by category"
31
32
  - Universal: "Clear sorting/filtering/grouping"
32
33
 
33
34
  Required Disclaimer:
34
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."
35
- `;var $=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 V(e){return $.get(e)??""}function P(e){let r=V(e);return r?`## Package Installation
36
+ `;var H=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 z(e){return H.get(e)??""}function T(e){let r=z(e);return r?`## Package Installation
36
37
  Always use minimal, targeted package installation.
37
38
  Ensure all necessary Angular packages are installed, including @angular/localize.
38
39
 
@@ -41,9 +42,38 @@ Process:
41
42
  2. Determine the specific Kendo Angular packages needed
42
43
  3. Use the "ng add @progress/kendo-angular-<package>" command
43
44
 
44
- For ${e} component: ng add ${r}`:""}var Q=J(import.meta.url),W=D.dirname(Q),X=D.resolve(W,"../package.json"),Y=JSON.parse(j.readFileSync(X,"utf-8")),G=new H({name:"kendo-and-kendo-resources",version:Y.version});G.tool("kendo_angular_assistant",`Answers questions and retrieves documentation about Kendo UI for Angular.
45
- 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.
46
- Provide the user's detailed question as the 'query'. If the question pertains to a specific Kendo UI for Angular component,
45
+ For ${e} component: ng add ${r}`:""}var P=["combobox","dropdownlist","dropdowntree","multicolumncombobox","multiselect","multiselecttree","autocomplete"],F=e=>e==="autocomplete"?Q:e==="dropdowntree"?X:e==="multiselecttree"?Y:e==="multicolumncombobox"?Z:J(e),J=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
+ `,Q=`
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
+ `,X='\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',Y='\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',Z='\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 U=`
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 ne=te(import.meta.url),ae=_.dirname(ne),se=_.resolve(ae,"../package.json"),ie=JSON.parse(oe.readFileSync(se,"utf-8")),B=new ee({name:"kendo-and-kendo-resources",version:ie.version});B.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 user's detailed question as the 'query'. If the question pertains to a specific Kendo UI for Angular component,
47
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:
48
78
  - 'kendo';
49
79
  - '/kendo';
@@ -53,13 +83,15 @@ specify its name in the 'component' parameter. This tool can be automatically tr
53
83
  - '@kendo';
54
84
  - '@kendoangular';
55
85
  - '@ask_kendo';
56
- - '@help_kendo'.`,{query:U.string().describe("The query to search for."),component:U.enum(E).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 n=r.toLocaleLowerCase();try{let o=await I({query:e,component:n,lib_name:S,text_matches_count:3,code_matches_count:0,allowed_types:["documentation"]}),i=Z(n),l=o.values.join(`
86
+ - '@help_kendo'.`,{query:G.string().describe("The query to search for."),component:G.enum(x).describe("The component to search for. If not specified, you can use General.")},async({query:e,component:r})=>{n("Calling tool: ",JSON.stringify({query:e,component:r}));let t=r.toLocaleLowerCase();try{let o=await A({query:e,component:t,lib_name:b,text_matches_count:3,code_matches_count:0,allowed_types:["documentation"]}),i=le(t),a=o.values.join(`
87
+
88
+ `),d=a.trim(),g=[{type:"text",text:a+(d?`
57
89
 
58
- `),m=l.trim(),w=[{type:"text",text:l+(m?`
90
+ `+i:"")}];return n("Response from tool: ",JSON.stringify(g)),{content:g}}catch(o){throw n("Error calling context API: ",JSON.stringify(o)),o?.code===u.UNAUTHENTICATED?new Error("Error: You are not authenticated. Please verify the Telerik License Key provided is valid."):o?.code===u.RESOURCE_EXHAUSTED?new Error(`Error: You have exceeded the extension quota. Upgrade to subscription licensing in order to unlock full access. Message: ${o.message}.`):o?.code===u.PERMISSION_DENIED?new Error(`Error: You do not have permission to access this resource. Please verify that you have a valid ${w} license key.`):o instanceof k?(n("License error: ",o.message),o):new Error(`Error: An error occurred while calling the service. Please try again later.
59
91
 
60
- `+i:"")}];return a("Response from tool: ",JSON.stringify(w)),{content:w}}catch(o){throw a("Error calling context API: ",JSON.stringify(o)),o?.code===p.UNAUTHENTICATED?new Error("Error: You are not authenticated. Please verify the Telerik License Key provided is valid."):o?.code===p.RESOURCE_EXHAUSTED?new Error(`Error: You have exceeded the extension quota. Upgrade to subscription licensing in order to unlock full access. Message: ${o.message}.`):o?.code===p.PERMISSION_DENIED?new Error(`Error: You do not have permission to access this resource. Please verify that you have a valid ${v} license key.`):o instanceof c?(a("License error: ",o.message),o):new Error(`Error: An error occurred while calling the service. Please try again later.
92
+ Error Message: ${o.message}`)}});function le(e){let r=e==="grid"?C?.trim():"",t=e==="grid"?D?.trim():"",o=P.includes(e)?F(e)?.trim():"",i=e==="charts"?U?.trim():"",a=e!=="general"?T(e)?.trim():"",d=r.length>0||t.length>0||o.length>0||i.length>0,g=a.length>0?a:"",L=d?`## Component-Specific Instructions
61
93
 
62
- Error Message: ${o.message}`)}});function Z(e){let r=e==="grid"?C?.trim():"",n=e==="grid"?T?.trim():"",o=e!=="general"?P(e)?.trim():"",i=r.length>0||n.length>0;return`
94
+ ${o}${i}${r}${t}`:"";return`
63
95
  # Kendo UI for Angular Assistant Guidelines
64
96
 
65
97
  ## Documentation References
@@ -81,7 +113,7 @@ Implementation Patterns:
81
113
  - Module-based applications: Use NgModule imports
82
114
  - When architecture is unclear: Default to standalone, mention module alternative
83
115
 
84
- ${o.length>0?o:""}
116
+ ${g}
85
117
 
86
118
  ## Styling & Theming
87
119
  MUST verify existing theme configuration before adding new styles.
@@ -111,9 +143,4 @@ Button Component:
111
143
  - kendo-button and span[kendoButton] \u2192 button[kendoButton]
112
144
  - [primary]="true" \u2192 fillMode="primary"
113
145
 
114
- ${i?`## Component-Specific Instructions
115
-
116
- ${r}
117
-
118
- ${n}`:""}
119
- `}async function ee(){let e=new z;a("Starting server..."),await G.connect(e)}ee();
146
+ ${L}`}async function de(){let e=new re;n("Starting server..."),await B.connect(e)}de();
@@ -0,0 +1 @@
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";
@@ -0,0 +1,2 @@
1
+ export declare const dropdownComponents: string[];
2
+ export declare const dropdownsInstructions: (component: string) => string;
@@ -1 +1 @@
1
- export declare const smartGridInstructions = "\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
+ 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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-mcp",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "bin": "./dist/index.js",
6
6
  "license": "See LICENSE.md",
@@ -23,9 +23,9 @@
23
23
  "!**/*.tsbuildinfo"
24
24
  ],
25
25
  "dependencies": {
26
- "@grpc/grpc-js": "^1.14.0",
26
+ "@grpc/grpc-js": "^1.14.1",
27
27
  "@grpc/proto-loader": "^0.8.0",
28
- "@modelcontextprotocol/sdk": "^1.18.2",
28
+ "@modelcontextprotocol/sdk": "^1.21.1",
29
29
  "tslib": "^2.3.0"
30
30
  },
31
31
  "devDependencies": {
@@ -1,5 +1,6 @@
1
1
  syntax = "proto3";
2
2
  option go_package = "github.com/telerik/ai-builder/contextapi/pkg/api/pb";
3
+ import "google/protobuf/empty.proto";
3
4
 
4
5
 
5
6
  message ContextQueryRequest {
@@ -9,8 +10,7 @@ message ContextQueryRequest {
9
10
  int32 code_matches_count = 4;
10
11
  repeated string allowed_types = 5;
11
12
  string component = 6;
12
- string userId = 7;
13
- string filters_json = 8;
13
+ string filters_json = 7;
14
14
  }
15
15
 
16
16
  message Item {
@@ -47,10 +47,62 @@ message BuildingBlocksSearchResponse {
47
47
  repeated BuildingBlockItem items = 1;
48
48
  }
49
49
 
50
+ message ProductInfo {
51
+ int32 id = 1;
52
+ string code = 2;
53
+ string name = 3;
54
+ }
55
+
56
+ message LicenseInfo {
57
+ int32 id = 1;
58
+ string name = 2;
59
+ string type = 3;
60
+ bool active = 4;
61
+ }
62
+
63
+ message SupportPackageInfo {
64
+ int32 id = 1;
65
+ string name = 2;
66
+ string public_name = 3;
67
+ int32 response_time_hours = 4;
68
+ bool active = 5;
69
+ repeated string incident_types = 6;
70
+ }
71
+
72
+ message AvailabilityInfo {
73
+ string license_start = 1;
74
+ string license_end = 2;
75
+ string support_start = 3;
76
+ string support_end = 4;
77
+ }
78
+
79
+ message EntitlementInfo {
80
+ string code = 1;
81
+ ProductInfo product = 2;
82
+ LicenseInfo license = 3;
83
+ SupportPackageInfo support_package = 4;
84
+ repeated AvailabilityInfo availability = 5;
85
+ bool is_license_available = 6;
86
+ bool is_support_available = 7;
87
+ }
88
+
89
+ message UserInfo {
90
+ string user_id = 1;
91
+ string user_email = 2;
92
+ }
93
+
94
+ message ValidateUserLicenseResponse {
95
+ EntitlementInfo entitlement = 1;
96
+ UserInfo user_info = 2;
97
+ bool has_exceeded_rate_limit = 3;
98
+ }
99
+
50
100
  service ContextQueryService {
51
101
  rpc Query(ContextQueryRequest) returns (StringArray);
52
102
  rpc IconsSearch(CssSearchRequst) returns (StringArray);
53
103
  rpc CssUtilsSearch(CssSearchRequst) returns (StringArray);
54
- rpc BuildingBlocksSearch(BuildingBlocksSearchRequest) returns (BuildingBlocksSearchResponse);
104
+ rpc BuildingBlocksSearch(BuildingBlocksSearchRequest) returns (BuildingBlocksSearchResponse);
105
+ rpc ValidateUserLicense(google.protobuf.Empty) returns (ValidateUserLicenseResponse);
106
+ rpc RecordUserRequest(google.protobuf.Empty) returns (google.protobuf.Empty);
55
107
  }
56
108