@atlaskit/ads-mcp 0.13.9 → 0.15.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.
@@ -0,0 +1,119 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import Fuse from 'fuse.js';
4
+ import { z } from 'zod';
5
+ import { cleanQuery, zodToJsonSchema } from '../../helpers';
6
+ import { lintRulesStructuredContent } from './lint-rules-structured-content.codegen';
7
+ export var getLintRulesInputSchema = z.object({
8
+ terms: z.array(z.string()).default([]).describe('An array of search terms to find lint rules by name or description, eg. `["icon-label", "xcss", "design token"]`. If empty or not provided, returns all lint rules.').optional(),
9
+ limit: z.number().default(1).describe('Maximum number of results per search term in the array (default: 1)').optional(),
10
+ exactName: z.boolean().default(false).describe('Enable to explicitly search lint rules by the exact rule name match (when you know the rule name, but need more details)').optional()
11
+ });
12
+ export var listGetLintRulesTool = {
13
+ name: 'ads_get_lint_rules',
14
+ description: "Get Atlassian Design System ESLint rule documentation (constellation) with optional search functionality.\n\n- If search parameters are provided, searches for lint rules matching the criteria.\n- If no search parameters are provided, returns all lint rules.\n\nExample: use this tool to look up documentation for rules like icon-label, ensure-proper-xcss-usage, or no-deprecated-apis.",
15
+ annotations: {
16
+ title: 'Get ADS lint rules',
17
+ readOnlyHint: true,
18
+ destructiveHint: false,
19
+ idempotentHint: true,
20
+ openWorldHint: true
21
+ },
22
+ inputSchema: zodToJsonSchema(getLintRulesInputSchema)
23
+ };
24
+ export var getLintRulesTool = /*#__PURE__*/function () {
25
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(params) {
26
+ var _params$terms, terms, _params$limit, limit, _params$exactName, exactName, searchTerms, ruleDocs, allRulesMarkdown, exactNameMatches, _formattedRules, fuse, results, uniqueResults, matchedRules, formattedRules;
27
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
28
+ while (1) switch (_context.prev = _context.next) {
29
+ case 0:
30
+ _params$terms = params.terms, terms = _params$terms === void 0 ? [] : _params$terms, _params$limit = params.limit, limit = _params$limit === void 0 ? 1 : _params$limit, _params$exactName = params.exactName, exactName = _params$exactName === void 0 ? false : _params$exactName;
31
+ searchTerms = terms.filter(Boolean).map(cleanQuery);
32
+ ruleDocs = lintRulesStructuredContent; // If no search terms provided, return all rules formatted as Markdown
33
+ if (!(searchTerms.length === 0)) {
34
+ _context.next = 6;
35
+ break;
36
+ }
37
+ allRulesMarkdown = ruleDocs.map(function (rule) {
38
+ return rule.content;
39
+ }).join('\n\n');
40
+ return _context.abrupt("return", {
41
+ content: [{
42
+ type: 'text',
43
+ text: allRulesMarkdown
44
+ }]
45
+ });
46
+ case 6:
47
+ if (!exactName) {
48
+ _context.next = 10;
49
+ break;
50
+ }
51
+ exactNameMatches = searchTerms.map(function (term) {
52
+ return ruleDocs.find(function (rule) {
53
+ return rule.ruleName.toLowerCase() === term.toLowerCase();
54
+ });
55
+ }).filter(function (rule) {
56
+ return rule !== undefined;
57
+ });
58
+ _formattedRules = exactNameMatches.map(function (rule) {
59
+ return rule.content;
60
+ }).join('\n\n');
61
+ return _context.abrupt("return", {
62
+ content: [{
63
+ type: 'text',
64
+ text: _formattedRules
65
+ }]
66
+ });
67
+ case 10:
68
+ // use Fuse.js to fuzzy-search for the rules
69
+ fuse = new Fuse(ruleDocs, {
70
+ keys: [{
71
+ name: 'ruleName',
72
+ weight: 3
73
+ }, {
74
+ name: 'description',
75
+ weight: 2
76
+ }, {
77
+ name: 'content',
78
+ weight: 1
79
+ }],
80
+ threshold: 0.4
81
+ });
82
+ results = searchTerms.map(function (term) {
83
+ var exactNameMatch = ruleDocs.find(function (rule) {
84
+ return rule.ruleName.toLowerCase() === term.toLowerCase();
85
+ });
86
+ if (exactNameMatch) {
87
+ return [{
88
+ item: exactNameMatch
89
+ }];
90
+ }
91
+ return fuse.search(term).slice(0, limit);
92
+ }).flat(); // Remove duplicates based on ruleName
93
+ uniqueResults = results.filter(function (result, index, arr) {
94
+ return arr.findIndex(function (r) {
95
+ return r.item.ruleName === result.item.ruleName;
96
+ }) === index;
97
+ });
98
+ matchedRules = uniqueResults.map(function (result) {
99
+ return result.item;
100
+ });
101
+ formattedRules = matchedRules.map(function (rule) {
102
+ return rule.content;
103
+ }).join('\n\n');
104
+ return _context.abrupt("return", {
105
+ content: [{
106
+ type: 'text',
107
+ text: formattedRules
108
+ }]
109
+ });
110
+ case 16:
111
+ case "end":
112
+ return _context.stop();
113
+ }
114
+ }, _callee);
115
+ }));
116
+ return function getLintRulesTool(_x) {
117
+ return _ref.apply(this, arguments);
118
+ };
119
+ }();