@mindfiredigital/ignix-lite-mcp 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/.turbo/turbo-build.log +17 -14
  2. package/CHANGELOG.md +7 -0
  3. package/dist/manifests/accordion.json +61 -0
  4. package/dist/manifests/alert.json +69 -0
  5. package/dist/manifests/avatar.json +75 -0
  6. package/dist/manifests/badge.json +74 -0
  7. package/dist/manifests/breadcrumb.json +87 -0
  8. package/dist/manifests/button.json +85 -0
  9. package/dist/manifests/card.json +91 -0
  10. package/dist/manifests/checkbox.json +122 -0
  11. package/dist/manifests/codeblock.json +63 -0
  12. package/dist/manifests/combobox.json +33 -0
  13. package/dist/manifests/dialog.json +64 -0
  14. package/dist/manifests/divider.json +47 -0
  15. package/dist/manifests/dropdown.json +105 -0
  16. package/dist/manifests/form.json +81 -0
  17. package/dist/manifests/grid.json +143 -0
  18. package/dist/manifests/input.json +99 -0
  19. package/dist/manifests/meter.json +103 -0
  20. package/dist/manifests/navigation.json +70 -0
  21. package/dist/manifests/progress.json +88 -0
  22. package/dist/manifests/radio.json +121 -0
  23. package/dist/manifests/select.json +109 -0
  24. package/dist/manifests/skeleton.json +101 -0
  25. package/dist/manifests/tab.json +88 -0
  26. package/dist/manifests/table.json +92 -0
  27. package/dist/manifests/textarea.json +117 -0
  28. package/dist/manifests/toast.json +157 -0
  29. package/dist/manifests/tooltip.json +115 -0
  30. package/dist/server.d.ts +1 -2
  31. package/dist/server.js +2102 -1
  32. package/dist/server.js.map +1 -1
  33. package/dist/utils/check-api.d.ts +2 -0
  34. package/dist/utils/check-api.js +11 -0
  35. package/dist/utils/check-api.js.map +1 -0
  36. package/dist/vector-index.json +14015 -0
  37. package/package.json +25 -11
  38. package/src/context/api-context.ts +14 -0
  39. package/src/global.d.ts +15 -0
  40. package/src/manifests/accordion.json +61 -0
  41. package/src/manifests/alert.json +69 -0
  42. package/src/manifests/avatar.json +75 -0
  43. package/src/manifests/badge.json +74 -0
  44. package/src/manifests/breadcrumb.json +87 -0
  45. package/src/manifests/button.json +85 -0
  46. package/src/manifests/card.json +91 -0
  47. package/src/manifests/checkbox.json +122 -0
  48. package/src/manifests/codeblock.json +63 -0
  49. package/src/manifests/combobox.json +33 -0
  50. package/src/manifests/dialog.json +64 -0
  51. package/src/manifests/divider.json +47 -0
  52. package/src/manifests/dropdown.json +105 -0
  53. package/src/manifests/form.json +81 -0
  54. package/src/manifests/grid.json +143 -0
  55. package/src/manifests/index.ts +45 -0
  56. package/src/manifests/input.json +99 -0
  57. package/src/manifests/meter.json +103 -0
  58. package/src/manifests/navigation.json +70 -0
  59. package/src/manifests/progress.json +88 -0
  60. package/src/manifests/radio.json +121 -0
  61. package/src/manifests/select.json +109 -0
  62. package/src/manifests/skeleton.json +101 -0
  63. package/src/manifests/tab.json +88 -0
  64. package/src/manifests/table.json +92 -0
  65. package/src/manifests/textarea.json +117 -0
  66. package/src/manifests/toast.json +157 -0
  67. package/src/manifests/tooltip.json +115 -0
  68. package/src/server.ts +200 -2
  69. package/src/tools/build-index.ts +55 -0
  70. package/src/tools/check-a11y.ts +106 -0
  71. package/src/tools/embedder.ts +18 -0
  72. package/src/tools/generate-theme.ts +42 -0
  73. package/src/tools/get-emmet.ts +64 -0
  74. package/src/tools/get-manifests.ts +55 -0
  75. package/src/tools/intent-engine.ts +197 -0
  76. package/src/tools/list-components.ts +20 -0
  77. package/src/tools/search-index.ts +66 -0
  78. package/src/tools/theme-palette.ts +65 -0
  79. package/src/tools/theme-tokens.ts +176 -0
  80. package/src/tools/validator.ts +367 -0
  81. package/src/types.ts +63 -0
  82. package/src/utils/a11y-rules.ts +873 -0
  83. package/src/utils/a11y-types.ts +15 -0
  84. package/src/utils/check-api.ts +13 -0
  85. package/src/utils/cosine.ts +15 -0
  86. package/src/utils/emmet-helpers.ts +171 -0
  87. package/src/utils/intent-helpers.ts +66 -0
  88. package/src/utils/intent-parser.ts +186 -0
  89. package/src/utils/tokenizer.ts +7 -0
  90. package/tsconfig.json +9 -2
  91. package/tsup.config.ts +6 -3
  92. package/LICENSE +0 -21
  93. package/dist/server.cjs +0 -2
  94. package/dist/server.cjs.map +0 -1
  95. package/dist/server.d.cts +0 -3
  96. package/test/basic.test.ts +0 -8
@@ -1,22 +1,25 @@
1
1
 
2
- > @mindfiredigital/ignix-lite-mcp@1.0.0 build /home/runner/work/ignix-lite/ignix-lite/packages/mcp
3
- > tsup
2
+ > @mindfiredigital/ignix-lite-mcp@1.2.0 build /home/runner/work/ignix-lite/ignix-lite/packages/mcp
3
+ > tsup && copyfiles -u 2 src/manifests/*.json dist/manifests && pnpm build:index
4
4
 
5
- CLI Building entry: src/server.ts
5
+ CLI Building entry: src/server.ts, src/utils/check-api.ts
6
6
  CLI Using tsconfig: tsconfig.json
7
7
  CLI tsup v8.5.1
8
8
  CLI Using tsup config: /home/runner/work/ignix-lite/ignix-lite/packages/mcp/tsup.config.ts
9
- CLI Target: esnext
9
+ CLI Target: es2020
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
- CJS Build start
13
- ESM dist/server.js 103.00 B
14
- ESM dist/server.js.map 206.00 B
15
- ESM ⚡️ Build success in 26ms
16
- CJS dist/server.cjs 592.00 B
17
- CJS dist/server.cjs.map 307.00 B
18
- CJS ⚡️ Build success in 24ms
12
+ ESM dist/server.js 62.14 KB
13
+ ESM dist/utils/check-api.js 402.00 B
14
+ ESM dist/server.js.map 119.01 KB
15
+ ESM dist/utils/check-api.js.map 693.00 B
16
+ ESM ⚡️ Build success in 108ms
19
17
  DTS Build start
20
- DTS ⚡️ Build success in 2127ms
21
- DTS dist/server.d.ts 65.00 B
22
- DTS dist/server.d.cts 65.00 B
18
+ DTS ⚡️ Build success in 5366ms
19
+ DTS dist/server.d.ts 13.00 B
20
+ DTS dist/utils/check-api.d.ts 13.00 B
21
+
22
+ > @mindfiredigital/ignix-lite-mcp@1.2.0 build:index /home/runner/work/ignix-lite/ignix-lite/packages/mcp
23
+ > tsx src/tools/build-index.ts
24
+
25
+ Vector index built
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @mindfiredigital/ignix-lite-mcp
2
+
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Ignix-Lite v2 Agentic Layer
@@ -0,0 +1,61 @@
1
+ {
2
+ "component": "accordion",
3
+ "version": "2.0",
4
+
5
+ "description": "Displays expandable content sections using native HTML details and summary elements. Works without JavaScript and is accessible by default.",
6
+
7
+ "element": "details",
8
+
9
+ "emmet": "details[open?]>summary{title}+p{content}",
10
+
11
+
12
+ "props": {
13
+ "open": {
14
+ "type": "boolean",
15
+ "native": true,
16
+ "agent_hint": "Use open to keep accordion expanded by default."
17
+ }
18
+ },
19
+
20
+ "states": ["open"],
21
+
22
+ "forbidden_props": ["expanded", "isOpen", "collapsed", "variant", "class"],
23
+
24
+ "required_props": [],
25
+
26
+ "required_slots": [],
27
+
28
+ "required_children": ["summary"],
29
+
30
+ "do": [
31
+ "Use summary as the accordion trigger",
32
+ "Use open to expand by default",
33
+ "Use native details element for accessibility"
34
+ ],
35
+
36
+ "dont": [
37
+ "Do not replace details with div",
38
+ "Do not use JavaScript for open state",
39
+ "Do not use class attribute"
40
+ ],
41
+
42
+ "examples": [
43
+ {
44
+ "label": "Default accordion",
45
+ "emmet": "details>summary{What is ignix-lite?}+p{Lightweight semantic UI library}",
46
+ "html": "<details><summary>What is ignix-lite?</summary><p>Lightweight semantic UI library</p></details>"
47
+ },
48
+
49
+ {
50
+ "label": "Open by default",
51
+ "emmet": "details[open]>summary{How does this work?}+p{Uses native browser behavior}",
52
+ "html": "<details open><summary>How does this work?</summary><p>Uses native browser behavior</p></details>"
53
+ },
54
+
55
+ {
56
+ "label": "FAQ item",
57
+ "emmet": "details>summary{Does it require JS?}+p{No, it works without JavaScript}",
58
+ "html": "<details><summary>Does it require JS?</summary><p>No, it works without JavaScript</p></details>"
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "component": "alert",
3
+ "version": "2.0",
4
+
5
+ "description": "Displays semantic feedback messages using native <aside> element for warnings, errors, success messages, and informational updates.",
6
+
7
+ "element": "aside",
8
+
9
+ "emmet": "aside[data-intent=?]{message}",
10
+
11
+
12
+ "props": {
13
+ "data-intent": {
14
+ "type": "enum",
15
+ "values": ["danger", "warning", "success", "info"],
16
+ "default": "info",
17
+ "native": false,
18
+ "agent_hint": "Use danger for errors, warning for cautions, success for confirmations, info for updates."
19
+ }
20
+ },
21
+
22
+ "states": [],
23
+
24
+ "forbidden_props": [
25
+ "variant",
26
+ "color",
27
+ "appearance",
28
+ "colorScheme",
29
+ "severity",
30
+ "status",
31
+ "class"
32
+ ],
33
+
34
+ "required_props": [],
35
+
36
+ "required_slots": [],
37
+
38
+ "do": [
39
+ "Use data-intent='danger' for error states",
40
+ "Use data-intent='warning' for caution messages",
41
+ "Use native aside element for semantic alerts"
42
+ ],
43
+
44
+ "dont": [
45
+ "Do not use div instead of aside",
46
+ "Do not use variant or severity props",
47
+ "Do not use class attribute"
48
+ ],
49
+
50
+ "examples": [
51
+ {
52
+ "label": "Danger alert",
53
+ "emmet": "aside[data-intent=danger]{Something went wrong}",
54
+ "html": "<aside data-intent=\"danger\">Something went wrong</aside>"
55
+ },
56
+
57
+ {
58
+ "label": "Warning alert",
59
+ "emmet": "aside[data-intent=warning]{Session expires soon}",
60
+ "html": "<aside data-intent=\"warning\">Session expires soon</aside>"
61
+ },
62
+
63
+ {
64
+ "label": "Success alert",
65
+ "emmet": "aside[data-intent=success]{Saved successfully}",
66
+ "html": "<aside data-intent=\"success\">Saved successfully</aside>"
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "component": "avatar",
3
+ "version": "2.0",
4
+
5
+ "description": "Displays user profile visuals using native img element with text fallback support through span. Supports multiple sizes and loading skeletons.",
6
+
7
+ "element": "img | span",
8
+
9
+ "emmet": "img[src=? alt=? data-size=?]",
10
+
11
+
12
+ "props": {
13
+ "data-size": {
14
+ "type": "enum",
15
+ "values": ["sm", "md", "lg"],
16
+ "default": "md",
17
+ "native": false,
18
+ "agent_hint": "Use sm for compact lists, md for profile previews, lg for detailed cards."
19
+ },
20
+
21
+ "src": {
22
+ "type": "string",
23
+ "native": true,
24
+ "agent_hint": "Image URL for avatar image."
25
+ },
26
+
27
+ "alt": {
28
+ "type": "string",
29
+ "native": true,
30
+ "agent_hint": "Always provide descriptive alt text for accessibility."
31
+ }
32
+ },
33
+
34
+ "states": ["loading"],
35
+
36
+ "forbidden_props": ["size", "variant", "shape", "rounded", "class"],
37
+
38
+ "required_props": [],
39
+
40
+ "required_slots": [],
41
+
42
+ "fallback_element": "span",
43
+
44
+ "do": [
45
+ "Use img for avatar images",
46
+ "Use span fallback for initials",
47
+ "Always provide alt text on images"
48
+ ],
49
+
50
+ "dont": [
51
+ "Do not use class attribute",
52
+ "Do not use size prop instead of data-size",
53
+ "Do not omit alt attribute on img"
54
+ ],
55
+
56
+ "examples": [
57
+ {
58
+ "label": "Small avatar",
59
+ "emmet": "img[src=? alt=User data-size=sm]",
60
+ "html": "<img src=\"https://picsum.photos/100\" alt=\"User\" data-size=\"sm\">"
61
+ },
62
+
63
+ {
64
+ "label": "Medium avatar",
65
+ "emmet": "img[src=? alt=Sarah data-size=md]",
66
+ "html": "<img src=\"https://picsum.photos/100\" alt=\"Sarah\" data-size=\"md\">"
67
+ },
68
+
69
+ {
70
+ "label": "Fallback initials",
71
+ "emmet": "span[data-size=md]{JD}",
72
+ "html": "<span data-size=\"md\">JD</span>"
73
+ }
74
+ ]
75
+ }
@@ -0,0 +1,74 @@
1
+ {
2
+ "component": "badge",
3
+ "version": "2.0",
4
+ "description": "Status indicator using mark or span[role=status] with intent styling.",
5
+
6
+ "element": "badge",
7
+
8
+ "emmet": "mark[data-intent=?]{Label}",
9
+ "tokens": 3,
10
+
11
+ "props": {
12
+ "data-intent": {
13
+ "type": "enum",
14
+ "values": ["success", "danger", "warning", "neutral"],
15
+ "default": "neutral",
16
+ "native": false,
17
+ "agent_hint": "Controls badge color"
18
+ },
19
+
20
+ "role": {
21
+ "type": "enum",
22
+ "values": ["status"],
23
+ "native": true,
24
+ "agent_hint": "Required when using span"
25
+ }
26
+ },
27
+
28
+ "allowed_elements": ["mark", "span"],
29
+
30
+ "required_conditions": ["span must have role=status"],
31
+
32
+ "states": [],
33
+
34
+ "required_props": [],
35
+
36
+ "forbidden_props": ["class", "variant", "color", "style", "onclick"],
37
+
38
+ "do": [
39
+ "Use mark for standard badges",
40
+ "Use span with role=status for accessibility cases",
41
+ "Use data-intent to convey meaning",
42
+ "Keep text short"
43
+ ],
44
+
45
+ "dont": [
46
+ "Do not use class attribute",
47
+ "Do not use variant or color props",
48
+ "Do not attach JS handlers",
49
+ "Do not use span without role=status"
50
+ ],
51
+
52
+ "examples": [
53
+ {
54
+ "label": "Basic badge",
55
+ "emmet": "mark[data-intent=neutral]{Active}",
56
+ "html": "<mark data-intent=\"neutral\">Active</mark>"
57
+ },
58
+ {
59
+ "label": "Success badge",
60
+ "emmet": "mark[data-intent=success]{Active}",
61
+ "html": "<mark data-intent=\"success\">Active</mark>"
62
+ },
63
+ {
64
+ "label": "Danger badge",
65
+ "emmet": "mark[data-intent=danger]{Error}",
66
+ "html": "<mark data-intent=\"danger\">Error</mark>"
67
+ },
68
+ {
69
+ "label": "Status badge",
70
+ "emmet": "span[role=status data-intent=success]{Active}",
71
+ "html": "<span role=\"status\" data-intent=\"success\">Active</span>"
72
+ }
73
+ ]
74
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "component": "breadcrumb",
3
+ "version": "2.0",
4
+ "description": "Displays hierarchical navigation path using native nav > ol > li > a structure.",
5
+
6
+ "element": "nav",
7
+
8
+ "emmet": "nav[aria-label=Breadcrumb]>ol>(li>a[href=?])*3",
9
+
10
+ "props": {
11
+ "data-style": {
12
+ "type": "enum",
13
+
14
+ "values": ["chevron", "slash", "guillemet", "arrow", "thread", "pipe"],
15
+
16
+ "default": "chevron",
17
+ "native": false,
18
+ "agent_hint": "Controls breadcrumb separator style."
19
+ },
20
+
21
+ "data-intent": {
22
+ "type": "enum",
23
+
24
+ "values": ["primary", "success", "warning", "danger", "gradient"],
25
+
26
+ "default": "primary",
27
+ "native": false,
28
+ "agent_hint": "Controls active breadcrumb color intent."
29
+ },
30
+
31
+ "aria-label": {
32
+ "type": "string",
33
+ "native": true,
34
+ "required": true,
35
+ "agent_hint": "Use aria-label='Breadcrumb' for accessibility."
36
+ }
37
+ },
38
+
39
+ "states": [],
40
+ "slots": {},
41
+
42
+ "forbidden_props": [
43
+ "variant",
44
+ "color",
45
+ "appearance",
46
+ "separator",
47
+ "items",
48
+ "activeItem",
49
+ "class"
50
+ ],
51
+
52
+ "required_props": ["aria-label"],
53
+
54
+ "required_slots": [],
55
+
56
+ "do": [
57
+ "Use nav as breadcrumb container",
58
+ "Use ordered list structure",
59
+ "Mark current page using aria-current='page'"
60
+ ],
61
+
62
+ "dont": [
63
+ "Do not use class attribute",
64
+ "Do not replace nav with div",
65
+ "Do not pass breadcrumb items as props"
66
+ ],
67
+
68
+ "examples": [
69
+ {
70
+ "label": "Default breadcrumb",
71
+ "emmet": "nav[aria-label=Breadcrumb]>ol>(li>a[href=?])*3",
72
+ "html": "<nav aria-label=\"Breadcrumb\"><ol><li><a href=\"#\">Home</a></li><li><a href=\"#\">Docs</a></li><li><a aria-current=\"page\">Breadcrumb</a></li></ol></nav>"
73
+ },
74
+
75
+ {
76
+ "label": "Slash style",
77
+ "emmet": "nav[aria-label=Breadcrumb data-style=slash]>ol>(li>a[href=?])*3",
78
+ "html": "<nav aria-label=\"Breadcrumb\" data-style=\"slash\"></nav>"
79
+ },
80
+
81
+ {
82
+ "label": "Danger intent",
83
+ "emmet": "nav[aria-label=Breadcrumb data-intent=danger]>ol>(li>a[href=?])*3",
84
+ "html": "<nav aria-label=\"Breadcrumb\" data-intent=\"danger\"></nav>"
85
+ }
86
+ ]
87
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "component": "button",
3
+ "version": "2.0",
4
+ "description": "Triggers an action. Renders as native <button>.",
5
+
6
+ "element": "button",
7
+
8
+ "emmet": "button[data-intent=?]{label}",
9
+
10
+
11
+ "props": {
12
+ "data-intent": {
13
+ "type": "enum",
14
+ "values": ["primary", "danger", "warning", "success", "neutral", "ghost"],
15
+ "default": "primary",
16
+ "native": false,
17
+ "agent_hint": "Use danger for destructive actions. Use ghost for secondary actions."
18
+ },
19
+
20
+ "disabled": {
21
+ "type": "boolean",
22
+ "native": true,
23
+ "agent_hint": "Use native disabled attribute"
24
+ },
25
+
26
+ "aria-busy": {
27
+ "type": "boolean",
28
+ "native": true,
29
+ "agent_hint": "Use for loading state"
30
+ },
31
+
32
+ "type": {
33
+ "type": "enum",
34
+ "values": ["button", "submit", "reset"],
35
+ "default": "button",
36
+ "native": true
37
+ }
38
+ },
39
+
40
+ "states": ["disabled", "aria-busy"],
41
+
42
+ "forbidden_props": [
43
+ "variant",
44
+ "color",
45
+ "appearance",
46
+ "colorScheme",
47
+ "isLoading",
48
+ "isDisabled",
49
+ "size",
50
+ "class"
51
+ ],
52
+
53
+ "required_props": [],
54
+ "required_slots": [],
55
+
56
+ "do": [
57
+ "Use data-intent='danger' for destructive actions",
58
+ "Use aria-busy='true' for loading state",
59
+ "Use type='submit' inside forms"
60
+ ],
61
+
62
+ "dont": [
63
+ "Do not use class attribute",
64
+ "Do not use variant or color props",
65
+ "Do not use isLoading or isDisabled"
66
+ ],
67
+
68
+ "examples": [
69
+ {
70
+ "label": "Primary button",
71
+ "emmet": "button[data-intent=primary]{Save}",
72
+ "html": "<button data-intent=\"primary\">Save</button>"
73
+ },
74
+ {
75
+ "label": "Danger button",
76
+ "emmet": "button[data-intent=danger]{Delete}",
77
+ "html": "<button data-intent=\"danger\">Delete</button>"
78
+ },
79
+ {
80
+ "label": "Loading button",
81
+ "emmet": "button[aria-busy=true]{Saving...}",
82
+ "html": "<button aria-busy=\"true\">Saving...</button>"
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "component": "card",
3
+ "version": "2.0",
4
+ "description": "Displays structured content using semantic slots for avatar, title, metadata, body, actions, and footer. Renders as native article element.",
5
+
6
+ "element": "article",
7
+
8
+ "emmet": "article>(img[slot=avatar])+(span[slot=title])+(p[slot=body])",
9
+
10
+
11
+ "props": {},
12
+
13
+ "states": [],
14
+
15
+ "slots": {
16
+ "avatar": {
17
+ "required": false,
18
+
19
+ "element": ["img", "span"],
20
+
21
+ "agent_hint": "Avatar image or visual content."
22
+ },
23
+
24
+ "title": {
25
+ "required": true,
26
+
27
+ "element": ["span", "h1", "h2", "h3"],
28
+
29
+ "agent_hint": "Primary card heading."
30
+ },
31
+
32
+ "meta": {
33
+ "required": false,
34
+
35
+ "element": ["span", "small"],
36
+
37
+ "agent_hint": "Subtitle or metadata."
38
+ },
39
+
40
+ "body": {
41
+ "required": true,
42
+
43
+ "element": ["p"],
44
+
45
+ "agent_hint": "Main content area."
46
+ },
47
+
48
+ "action": {
49
+ "required": false,
50
+
51
+ "element": ["button", "a"],
52
+
53
+ "agent_hint": "Primary action area."
54
+ },
55
+
56
+ "footer": {
57
+ "required": false,
58
+
59
+ "element": ["span", "small"],
60
+
61
+ "agent_hint": "Footer metadata."
62
+ }
63
+ },
64
+
65
+ "forbidden_props": [
66
+ "title",
67
+ "subtitle",
68
+ "avatar",
69
+ "image",
70
+ "body",
71
+ "footer",
72
+ "actionLabel",
73
+ "class"
74
+ ],
75
+
76
+ "required_props": [],
77
+
78
+ "required_slots": ["title", "body"],
79
+
80
+ "do": [
81
+ "Use slot attributes for content placement",
82
+ "Use article as card container",
83
+ "Place actions inside slot='action'"
84
+ ],
85
+
86
+ "dont": [
87
+ "Do not pass title or body as props",
88
+ "Do not replace slots with attributes",
89
+ "Do not use class attribute"
90
+ ]
91
+ }