@lando-labs/lando-ds-mcp 4.0.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 (132) hide show
  1. package/CHANGELOG.md +526 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +4 -0
  4. package/README.md +170 -0
  5. package/build/data/ds-meta.json +1 -0
  6. package/build/data/ds-meta.schema.json +282 -0
  7. package/build/data/ds-meta.verbose.json +1 -0
  8. package/build/data/icon-metadata.d.ts +64 -0
  9. package/build/data/icon-metadata.d.ts.map +1 -0
  10. package/build/data/icon-metadata.js +1128 -0
  11. package/build/data/icon-metadata.js.map +1 -0
  12. package/build/data/lucide-icon-names.d.ts +12 -0
  13. package/build/data/lucide-icon-names.d.ts.map +1 -0
  14. package/build/data/lucide-icon-names.js +1653 -0
  15. package/build/data/lucide-icon-names.js.map +1 -0
  16. package/build/data/lucide-icons.d.ts +41 -0
  17. package/build/data/lucide-icons.d.ts.map +1 -0
  18. package/build/data/lucide-icons.js +80 -0
  19. package/build/data/lucide-icons.js.map +1 -0
  20. package/build/data/rn-tokens-snapshot.d.ts +753 -0
  21. package/build/data/rn-tokens-snapshot.d.ts.map +1 -0
  22. package/build/data/rn-tokens-snapshot.js +286 -0
  23. package/build/data/rn-tokens-snapshot.js.map +1 -0
  24. package/build/index.d.ts +18 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +411 -0
  27. package/build/index.js.map +1 -0
  28. package/build/prompts/index.d.ts +16 -0
  29. package/build/prompts/index.d.ts.map +1 -0
  30. package/build/prompts/index.js +145 -0
  31. package/build/prompts/index.js.map +1 -0
  32. package/build/resources/code-examples.d.ts +6 -0
  33. package/build/resources/code-examples.d.ts.map +1 -0
  34. package/build/resources/code-examples.js +278 -0
  35. package/build/resources/code-examples.js.map +1 -0
  36. package/build/resources/design-tokens.d.ts +6 -0
  37. package/build/resources/design-tokens.d.ts.map +1 -0
  38. package/build/resources/design-tokens.js +128 -0
  39. package/build/resources/design-tokens.js.map +1 -0
  40. package/build/resources/index.d.ts +19 -0
  41. package/build/resources/index.d.ts.map +1 -0
  42. package/build/resources/index.js +80 -0
  43. package/build/resources/index.js.map +1 -0
  44. package/build/test.d.ts +12 -0
  45. package/build/test.d.ts.map +1 -0
  46. package/build/test.js +680 -0
  47. package/build/test.js.map +1 -0
  48. package/build/tools/compose-components.d.ts +40 -0
  49. package/build/tools/compose-components.d.ts.map +1 -0
  50. package/build/tools/compose-components.js +61 -0
  51. package/build/tools/compose-components.js.map +1 -0
  52. package/build/tools/get-animation-examples.d.ts +30 -0
  53. package/build/tools/get-animation-examples.d.ts.map +1 -0
  54. package/build/tools/get-animation-examples.js +484 -0
  55. package/build/tools/get-animation-examples.js.map +1 -0
  56. package/build/tools/get-component-capabilities.d.ts +43 -0
  57. package/build/tools/get-component-capabilities.d.ts.map +1 -0
  58. package/build/tools/get-component-capabilities.js +108 -0
  59. package/build/tools/get-component-capabilities.js.map +1 -0
  60. package/build/tools/get-component-props.d.ts +23 -0
  61. package/build/tools/get-component-props.d.ts.map +1 -0
  62. package/build/tools/get-component-props.js +46 -0
  63. package/build/tools/get-component-props.js.map +1 -0
  64. package/build/tools/get-component-reference.d.ts +25 -0
  65. package/build/tools/get-component-reference.d.ts.map +1 -0
  66. package/build/tools/get-component-reference.js +112 -0
  67. package/build/tools/get-component-reference.js.map +1 -0
  68. package/build/tools/get-component.d.ts +25 -0
  69. package/build/tools/get-component.d.ts.map +1 -0
  70. package/build/tools/get-component.js +60 -0
  71. package/build/tools/get-component.js.map +1 -0
  72. package/build/tools/get-composition-hints.d.ts +22 -0
  73. package/build/tools/get-composition-hints.d.ts.map +1 -0
  74. package/build/tools/get-composition-hints.js +39 -0
  75. package/build/tools/get-composition-hints.js.map +1 -0
  76. package/build/tools/get-design-tokens.d.ts +24 -0
  77. package/build/tools/get-design-tokens.d.ts.map +1 -0
  78. package/build/tools/get-design-tokens.js +96 -0
  79. package/build/tools/get-design-tokens.js.map +1 -0
  80. package/build/tools/get-ds-metadata.d.ts +16 -0
  81. package/build/tools/get-ds-metadata.d.ts.map +1 -0
  82. package/build/tools/get-ds-metadata.js +65 -0
  83. package/build/tools/get-ds-metadata.js.map +1 -0
  84. package/build/tools/get-hook.d.ts +19 -0
  85. package/build/tools/get-hook.d.ts.map +1 -0
  86. package/build/tools/get-hook.js +46 -0
  87. package/build/tools/get-hook.js.map +1 -0
  88. package/build/tools/get-theme-presets.d.ts +13 -0
  89. package/build/tools/get-theme-presets.d.ts.map +1 -0
  90. package/build/tools/get-theme-presets.js +41 -0
  91. package/build/tools/get-theme-presets.js.map +1 -0
  92. package/build/tools/list-components.d.ts +29 -0
  93. package/build/tools/list-components.d.ts.map +1 -0
  94. package/build/tools/list-components.js +88 -0
  95. package/build/tools/list-components.js.map +1 -0
  96. package/build/tools/list-hooks.d.ts +22 -0
  97. package/build/tools/list-hooks.d.ts.map +1 -0
  98. package/build/tools/list-hooks.js +80 -0
  99. package/build/tools/list-hooks.js.map +1 -0
  100. package/build/tools/list-icons.d.ts +28 -0
  101. package/build/tools/list-icons.d.ts.map +1 -0
  102. package/build/tools/list-icons.js +161 -0
  103. package/build/tools/list-icons.js.map +1 -0
  104. package/build/tools/platform-transform.d.ts +64 -0
  105. package/build/tools/platform-transform.d.ts.map +1 -0
  106. package/build/tools/platform-transform.js +117 -0
  107. package/build/tools/platform-transform.js.map +1 -0
  108. package/build/tools/platform.d.ts +76 -0
  109. package/build/tools/platform.d.ts.map +1 -0
  110. package/build/tools/platform.js +80 -0
  111. package/build/tools/platform.js.map +1 -0
  112. package/build/tools/search-icons.d.ts +28 -0
  113. package/build/tools/search-icons.d.ts.map +1 -0
  114. package/build/tools/search-icons.js +257 -0
  115. package/build/tools/search-icons.js.map +1 -0
  116. package/build/utils/error-envelope.d.ts +14 -0
  117. package/build/utils/error-envelope.d.ts.map +1 -0
  118. package/build/utils/error-envelope.js +35 -0
  119. package/build/utils/error-envelope.js.map +1 -0
  120. package/build/utils/icon-library.d.ts +17 -0
  121. package/build/utils/icon-library.d.ts.map +1 -0
  122. package/build/utils/icon-library.js +24 -0
  123. package/build/utils/icon-library.js.map +1 -0
  124. package/build/utils/jsx-safety.d.ts +47 -0
  125. package/build/utils/jsx-safety.d.ts.map +1 -0
  126. package/build/utils/jsx-safety.js +63 -0
  127. package/build/utils/jsx-safety.js.map +1 -0
  128. package/build/utils/meta-loader.d.ts +37 -0
  129. package/build/utils/meta-loader.d.ts.map +1 -0
  130. package/build/utils/meta-loader.js +114 -0
  131. package/build/utils/meta-loader.js.map +1 -0
  132. package/package.json +60 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * get_hook Tool — meta-backed (v3.3.0).
3
+ *
4
+ * Full detail for a single DS utility hook — signature, returns, category,
5
+ * RSC safety, subpath, description, and an import snippet. Mirrors the
6
+ * `get_component` shape for the hooks side of the DS meta (schema 1.3,
7
+ * DS#504).
8
+ */
9
+ import { z } from 'zod';
10
+ import { getHook, getHookNames } from '../utils/meta-loader.js';
11
+ // Dynamic hook enum — derived from meta at module load. If meta pre-dates
12
+ // schema 1.3 (no hooks), fall back to a placeholder so the Zod enum still
13
+ // constructs; the runtime call will surface a clean "hooks unavailable" error.
14
+ const _hookNames = getHookNames();
15
+ const hookNameEnum = (_hookNames.length > 0 ? _hookNames : ['__none__']);
16
+ export const getHookSchema = z.object({
17
+ hookName: z
18
+ .enum(hookNameEnum)
19
+ .describe('Name of the hook to fetch (e.g. "useDisclosure", "useDebouncedValue").'),
20
+ });
21
+ export async function getHook_tool(params) {
22
+ const { hookName } = params;
23
+ const h = getHook(hookName);
24
+ if (!h) {
25
+ if (_hookNames.length === 0) {
26
+ return `Error: no hooks in loaded DS meta. The DS emits hooks starting with meta schema 1.3 (DS v0.56.0+).`;
27
+ }
28
+ return `Error: \`${hookName}\` is not registered in DS meta.`;
29
+ }
30
+ const rscTag = h.serverSafe ? 'rsc-safe' : 'client-only';
31
+ const importStatement = `import { ${hookName} } from '${h.subpath}'`;
32
+ let out = `# ${hookName}\n\n`;
33
+ out += `- **Category**: ${h.category}\n`;
34
+ out += `- **Signature**: \`${h.signature}\`\n`;
35
+ out += `- **Returns**: \`${h.returns}\`\n`;
36
+ out += `- **RSC safety**: ${rscTag}${h.useClient ? ' (requires "use client" boundary)' : ''}\n`;
37
+ out += `- **Subpath**: \`${h.subpath}\`\n\n`;
38
+ out += '## Import\n\n';
39
+ out += '```tsx\n';
40
+ out += `${importStatement}\n`;
41
+ out += '```\n\n';
42
+ out += '## Description\n\n';
43
+ out += `${h.description.trim()}\n`;
44
+ return out;
45
+ }
46
+ //# sourceMappingURL=get-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-hook.js","sourceRoot":"","sources":["../../src/tools/get-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE/D,0EAA0E;AAC1E,0EAA0E;AAC1E,+EAA+E;AAC/E,MAAM,UAAU,GAAG,YAAY,EAAE,CAAA;AACjC,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAA0B,CAAA;AAEjG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,YAAY,CAAC;SAClB,QAAQ,CAAC,wEAAwE,CAAC;CACtF,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAqB;IACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAE3B,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,oGAAoG,CAAA;QAC7G,CAAC;QACD,OAAO,YAAY,QAAQ,kCAAkC,CAAA;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAA;IACxD,MAAM,eAAe,GAAG,YAAY,QAAQ,YAAY,CAAC,CAAC,OAAO,GAAG,CAAA;IAEpE,IAAI,GAAG,GAAG,KAAK,QAAQ,MAAM,CAAA;IAC7B,GAAG,IAAI,mBAAmB,CAAC,CAAC,QAAQ,IAAI,CAAA;IACxC,GAAG,IAAI,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAA;IAC9C,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,MAAM,CAAA;IAC1C,GAAG,IAAI,qBAAqB,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAA;IAC/F,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,QAAQ,CAAA;IAE5C,GAAG,IAAI,eAAe,CAAA;IACtB,GAAG,IAAI,UAAU,CAAA;IACjB,GAAG,IAAI,GAAG,eAAe,IAAI,CAAA;IAC7B,GAAG,IAAI,SAAS,CAAA;IAEhB,GAAG,IAAI,oBAAoB,CAAA;IAC3B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAA;IAElC,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * get_theme_presets Tool — meta-backed since v3.1.1.
3
+ *
4
+ * Reads DS theme presets directly from `meta.themePresets` (schema 1.1+,
5
+ * DS#437). Falls back to a minimal informational message when the loaded
6
+ * meta predates schema 1.1 — that path is defensive only; the shipped MCP
7
+ * always bundles current meta.
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const getThemePresetsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
11
+ export type GetThemePresetsParams = z.infer<typeof getThemePresetsSchema>;
12
+ export declare function getThemePresets(_params?: GetThemePresetsParams): Promise<string>;
13
+ //# sourceMappingURL=get-theme-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-theme-presets.d.ts","sourceRoot":"","sources":["../../src/tools/get-theme-presets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,qBAAqB,gDAAe,CAAA;AAEjD,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,wBAAsB,eAAe,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1F"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * get_theme_presets Tool — meta-backed since v3.1.1.
3
+ *
4
+ * Reads DS theme presets directly from `meta.themePresets` (schema 1.1+,
5
+ * DS#437). Falls back to a minimal informational message when the loaded
6
+ * meta predates schema 1.1 — that path is defensive only; the shipped MCP
7
+ * always bundles current meta.
8
+ */
9
+ import { z } from 'zod';
10
+ import { getLightMeta } from '../utils/meta-loader.js';
11
+ export const getThemePresetsSchema = z.object({});
12
+ export async function getThemePresets(_params = {}) {
13
+ const meta = getLightMeta();
14
+ let out = `# Theme Presets (${meta.package.name}@${meta.package.version})\n\n`;
15
+ out += 'The DS ships opt-in theme presets rather than baking a brand identity as the default. Pick one when generating themed code, or apply your own ramps against the neutral base.\n\n';
16
+ if (!meta.themePresets || Object.keys(meta.themePresets.presets).length === 0) {
17
+ out += '_This meta snapshot predates the `themePresets` block (schema 1.1). Refresh the MCP by running `npm run copy:ds-meta && npm run build && npm pack && npm install -g <tgz>` to pick up the current preset list._\n';
18
+ return out;
19
+ }
20
+ const { default: defaultId, presets } = meta.themePresets;
21
+ const ids = Object.keys(presets).sort((a, b) => {
22
+ // Default preset first, then alphabetical
23
+ if (a === defaultId)
24
+ return -1;
25
+ if (b === defaultId)
26
+ return 1;
27
+ return a.localeCompare(b);
28
+ });
29
+ out += `**Default preset**: \`${defaultId}\`\n\n`;
30
+ for (const id of ids) {
31
+ const p = presets[id];
32
+ const badge = p.isDefault ? ' _(default)_' : '';
33
+ out += `## \`${p.id}\`${badge}\n\n`;
34
+ if (p.description)
35
+ out += `${p.description}\n\n`;
36
+ }
37
+ out += '## Applying a preset\n\n';
38
+ out += 'Preset selection is handled by the DS `themePresets` module; consumers import the preset they want and set it via the theme provider (see the DS README for the current API).\n';
39
+ return out;
40
+ }
41
+ //# sourceMappingURL=get-theme-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-theme-presets.js","sourceRoot":"","sources":["../../src/tools/get-theme-presets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAIjD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAiC,EAAE;IACvE,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAE3B,IAAI,GAAG,GAAG,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO,CAAA;IAC9E,GAAG,IAAI,mLAAmL,CAAA;IAE1L,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9E,GAAG,IAAI,mNAAmN,CAAA;QAC1N,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,CAAA;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,0CAA0C;QAC1C,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAA;QAC7B,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,GAAG,IAAI,yBAAyB,SAAS,QAAQ,CAAA;IAEjD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;QACrB,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/C,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,KAAK,MAAM,CAAA;QACnC,IAAI,CAAC,CAAC,WAAW;YAAE,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,MAAM,CAAA;IAClD,CAAC;IAED,GAAG,IAAI,0BAA0B,CAAA;IACjC,GAAG,IAAI,iLAAiL,CAAA;IAExL,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * list_components Tool — meta-backed (v3.0.0; RN param stripped in v4.0.0).
3
+ *
4
+ * Enumerates DS components with optional filters against meta.
5
+ * Filters are additive — omitting all returns everything.
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const listComponentsSchema: z.ZodObject<{
9
+ category: z.ZodOptional<z.ZodString>;
10
+ deprecated: z.ZodOptional<z.ZodBoolean>;
11
+ serverSafe: z.ZodOptional<z.ZodBoolean>;
12
+ polymorphic: z.ZodOptional<z.ZodBoolean>;
13
+ kind: z.ZodOptional<z.ZodEnum<["component"]>>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ category?: string | undefined;
16
+ deprecated?: boolean | undefined;
17
+ serverSafe?: boolean | undefined;
18
+ polymorphic?: boolean | undefined;
19
+ kind?: "component" | undefined;
20
+ }, {
21
+ category?: string | undefined;
22
+ deprecated?: boolean | undefined;
23
+ serverSafe?: boolean | undefined;
24
+ polymorphic?: boolean | undefined;
25
+ kind?: "component" | undefined;
26
+ }>;
27
+ export type ListComponentsParams = z.infer<typeof listComponentsSchema>;
28
+ export declare function listComponents(params?: ListComponentsParams): Promise<string>;
29
+ //# sourceMappingURL=list-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-components.d.ts","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,wBAAsB,cAAc,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEvF"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * list_components Tool — meta-backed (v3.0.0; RN param stripped in v4.0.0).
3
+ *
4
+ * Enumerates DS components with optional filters against meta.
5
+ * Filters are additive — omitting all returns everything.
6
+ */
7
+ import { z } from 'zod';
8
+ import { getLightMeta } from '../utils/meta-loader.js';
9
+ export const listComponentsSchema = z.object({
10
+ category: z.string().max(100).optional().describe('Filter by category (e.g. "Core & Form"). Matches meta.components[X].category exactly.'),
11
+ deprecated: z.boolean().optional().describe('If true, include ONLY deprecated components. If false, exclude deprecated. Omit to include both.'),
12
+ serverSafe: z.boolean().optional().describe('If true, only components with no "use client" directive (safe in React Server Components).'),
13
+ polymorphic: z.boolean().optional().describe('If true, only components that accept an `as` / `asChild` prop.'),
14
+ kind: z.enum(['component']).optional().describe('Filter by kind. Currently only "component"; reserved for future non-component entries.'),
15
+ });
16
+ export async function listComponents(params = {}) {
17
+ const meta = getLightMeta();
18
+ const { category, deprecated, serverSafe, polymorphic, kind } = params;
19
+ const entries = Object.entries(meta.components).filter(([, cmp]) => {
20
+ if (category && cmp.category !== category)
21
+ return false;
22
+ if (deprecated === true && cmp.deprecated === null)
23
+ return false;
24
+ if (deprecated === false && cmp.deprecated !== null)
25
+ return false;
26
+ if (serverSafe !== undefined && cmp.serverSafe !== serverSafe)
27
+ return false;
28
+ if (polymorphic !== undefined && cmp.polymorphic !== polymorphic)
29
+ return false;
30
+ if (kind && cmp.kind !== kind)
31
+ return false;
32
+ return true;
33
+ });
34
+ entries.sort(([a], [b]) => a.localeCompare(b));
35
+ const byCategory = new Map();
36
+ for (const [name, cmp] of entries) {
37
+ const bucket = byCategory.get(cmp.category) ?? [];
38
+ bucket.push(name);
39
+ byCategory.set(cmp.category, bucket);
40
+ }
41
+ const filterSummary = [];
42
+ if (category)
43
+ filterSummary.push(`category="${category}"`);
44
+ if (deprecated !== undefined)
45
+ filterSummary.push(`deprecated=${deprecated}`);
46
+ if (serverSafe !== undefined)
47
+ filterSummary.push(`serverSafe=${serverSafe}`);
48
+ if (polymorphic !== undefined)
49
+ filterSummary.push(`polymorphic=${polymorphic}`);
50
+ if (kind)
51
+ filterSummary.push(`kind="${kind}"`);
52
+ let response = '# Available Components\n\n';
53
+ response += `Total: ${entries.length} of ${Object.keys(meta.components).length} components`;
54
+ if (filterSummary.length > 0) {
55
+ response += ` (filtered: ${filterSummary.join(', ')})`;
56
+ }
57
+ response += `\nDS: ${meta.package.name}@${meta.package.version}\n\n`;
58
+ if (entries.length === 0) {
59
+ response += '_No components match these filters._\n';
60
+ return response;
61
+ }
62
+ const categoriesSorted = [...byCategory.keys()].sort();
63
+ for (const cat of categoriesSorted) {
64
+ const names = byCategory.get(cat).sort();
65
+ response += `## ${cat}\n\n`;
66
+ for (const name of names) {
67
+ const cmp = meta.components[name];
68
+ const flags = [];
69
+ if (cmp.deprecated)
70
+ flags.push(`deprecated since ${cmp.deprecated.since}`);
71
+ if (cmp.polymorphic)
72
+ flags.push('polymorphic');
73
+ if (cmp.serverSafe)
74
+ flags.push('rsc-safe');
75
+ const flagStr = flags.length > 0 ? ` _(${flags.join('; ')})_` : '';
76
+ response += `- **${name}**${flagStr}\n`;
77
+ }
78
+ response += '\n';
79
+ }
80
+ response += '## Usage\n\n';
81
+ response += '- `get_component` — generate JSX for a component\n';
82
+ response += '- `get_component_props` — props schema for a component\n';
83
+ response += '- `get_component_reference` — description + examples + composes + props in one call\n';
84
+ response += '- `get_composition_hints` — which components officially pair with this one\n';
85
+ response += '- `get_component_capabilities` — rsc-safety, polymorphism, ref-forwarding\n';
86
+ return response;
87
+ }
88
+ //# sourceMappingURL=list-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * list_hooks Tool — meta-backed (v3.3.0).
3
+ *
4
+ * Enumerates DS utility hooks with optional filters against meta.hooks
5
+ * (schema 1.3, DS#504). Filters are additive — omitting all returns
6
+ * everything. Groups by category for scan-ability (matches list_components
7
+ * shape).
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const listHooksSchema: z.ZodObject<{
11
+ category: z.ZodOptional<z.ZodString>;
12
+ serverSafe: z.ZodOptional<z.ZodBoolean>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ category?: string | undefined;
15
+ serverSafe?: boolean | undefined;
16
+ }, {
17
+ category?: string | undefined;
18
+ serverSafe?: boolean | undefined;
19
+ }>;
20
+ export type ListHooksParams = z.infer<typeof listHooksSchema>;
21
+ export declare function listHooks(params?: ListHooksParams): Promise<string>;
22
+ //# sourceMappingURL=list-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/list-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,eAAe;;;;;;;;;EAc1B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,wBAAsB,SAAS,CAAC,MAAM,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D7E"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * list_hooks Tool — meta-backed (v3.3.0).
3
+ *
4
+ * Enumerates DS utility hooks with optional filters against meta.hooks
5
+ * (schema 1.3, DS#504). Filters are additive — omitting all returns
6
+ * everything. Groups by category for scan-ability (matches list_components
7
+ * shape).
8
+ */
9
+ import { z } from 'zod';
10
+ import { getLightMeta } from '../utils/meta-loader.js';
11
+ export const listHooksSchema = z.object({
12
+ category: z
13
+ .string()
14
+ .max(100)
15
+ .optional()
16
+ .describe('Filter by category (e.g. "state", "dom", "browser", "a11y"). Matches meta.hooks[X].category exactly.'),
17
+ serverSafe: z
18
+ .boolean()
19
+ .optional()
20
+ .describe('If true, only hooks safe in React Server Components (no "use client" required).'),
21
+ });
22
+ export async function listHooks(params = {}) {
23
+ const meta = getLightMeta();
24
+ const hooks = meta.hooks ?? {};
25
+ const { category, serverSafe } = params;
26
+ const entries = Object.entries(hooks).filter(([, h]) => {
27
+ if (category && h.category !== category)
28
+ return false;
29
+ if (serverSafe !== undefined && h.serverSafe !== serverSafe)
30
+ return false;
31
+ return true;
32
+ });
33
+ entries.sort(([a], [b]) => a.localeCompare(b));
34
+ const byCategory = new Map();
35
+ for (const [name, h] of entries) {
36
+ const bucket = byCategory.get(h.category) ?? [];
37
+ bucket.push(name);
38
+ byCategory.set(h.category, bucket);
39
+ }
40
+ const filterSummary = [];
41
+ if (category)
42
+ filterSummary.push(`category="${category}"`);
43
+ if (serverSafe !== undefined)
44
+ filterSummary.push(`serverSafe=${serverSafe}`);
45
+ const totalHooks = Object.keys(hooks).length;
46
+ let response = '# Available Hooks\n\n';
47
+ response += `Total: ${entries.length} of ${totalHooks} hooks`;
48
+ if (filterSummary.length > 0) {
49
+ response += ` (filtered: ${filterSummary.join(', ')})`;
50
+ }
51
+ response += `\nDS: ${meta.package.name}@${meta.package.version}\n\n`;
52
+ if (totalHooks === 0) {
53
+ response += '_No hooks in loaded meta._ ';
54
+ response += `The DS emits hooks starting with meta schema 1.3 (DS v0.56.0+); current schema is v${meta.$schemaVersion}.\n`;
55
+ return response;
56
+ }
57
+ if (entries.length === 0) {
58
+ response += '_No hooks match these filters._\n';
59
+ return response;
60
+ }
61
+ const categoriesSorted = [...byCategory.keys()].sort();
62
+ for (const cat of categoriesSorted) {
63
+ const names = byCategory.get(cat).sort();
64
+ response += `## ${cat}\n\n`;
65
+ for (const name of names) {
66
+ const h = hooks[name];
67
+ const flags = [];
68
+ if (h.serverSafe)
69
+ flags.push('rsc-safe');
70
+ const flagStr = flags.length > 0 ? ` _(${flags.join('; ')})_` : '';
71
+ response += `- **${name}**${flagStr} — \`${h.signature}\`\n`;
72
+ }
73
+ response += '\n';
74
+ }
75
+ response += '## Usage\n\n';
76
+ response += `- All hooks import from \`${Object.values(hooks)[0]?.subpath ?? '@lando-labs/lando-ds/hooks'}\`\n`;
77
+ response += '- `get_hook` — full detail for a single hook (signature, returns, description, RSC safety)\n';
78
+ return response;
79
+ }
80
+ //# sourceMappingURL=list-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-hooks.js","sourceRoot":"","sources":["../../src/tools/list-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * list_icons Tool — meta-backed sources (v3.0.0).
3
+ *
4
+ * Two icon sources:
5
+ * - 'ds-brand' — DS-authoritative brand icons (meta.icons.registry, ~70)
6
+ * - 'lucide-curated' — MCP's curated Lucide subset (icon-metadata.ts, ~120)
7
+ * - 'all' — union of both, deduped by name
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const listIconsSchema: z.ZodObject<{
11
+ query: z.ZodOptional<z.ZodString>;
12
+ category: z.ZodOptional<z.ZodString>;
13
+ source: z.ZodOptional<z.ZodEnum<["ds-brand", "lucide-curated", "all"]>>;
14
+ limit: z.ZodOptional<z.ZodNumber>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ category?: string | undefined;
17
+ query?: string | undefined;
18
+ source?: "all" | "ds-brand" | "lucide-curated" | undefined;
19
+ limit?: number | undefined;
20
+ }, {
21
+ category?: string | undefined;
22
+ query?: string | undefined;
23
+ source?: "all" | "ds-brand" | "lucide-curated" | undefined;
24
+ limit?: number | undefined;
25
+ }>;
26
+ export type ListIconsParams = z.infer<typeof listIconsSchema>;
27
+ export declare function listIcons(params: ListIconsParams): Promise<string>;
28
+ //# sourceMappingURL=list-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-icons.d.ts","sourceRoot":"","sources":["../../src/tools/list-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAkB1B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AA2D7D,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBxE"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * list_icons Tool — meta-backed sources (v3.0.0).
3
+ *
4
+ * Two icon sources:
5
+ * - 'ds-brand' — DS-authoritative brand icons (meta.icons.registry, ~70)
6
+ * - 'lucide-curated' — MCP's curated Lucide subset (icon-metadata.ts, ~120)
7
+ * - 'all' — union of both, deduped by name
8
+ */
9
+ import { z } from 'zod';
10
+ import { allIconMetadata, categoryDescriptions, } from '../data/icon-metadata.js';
11
+ import { resolveLibraryInfo } from '../utils/icon-library.js';
12
+ import { getLightMeta } from '../utils/meta-loader.js';
13
+ export const listIconsSchema = z.object({
14
+ query: z.string().max(8_000).optional().describe('Search query to filter icons by name, description, or tags.'),
15
+ category: z
16
+ .string()
17
+ .max(100)
18
+ .optional()
19
+ .describe('Filter by icon category. Values differ per source (ds-brand uses DS categories; lucide-curated uses MCP categories).'),
20
+ source: z
21
+ .enum(['ds-brand', 'lucide-curated', 'all'])
22
+ .optional()
23
+ .describe("Icon source (default 'all'). 'ds-brand' = DS's authoritative named icons from meta.icons.registry. 'lucide-curated' = MCP's curated Lucide subset."),
24
+ limit: z
25
+ .number()
26
+ .int()
27
+ .min(1)
28
+ .max(200)
29
+ .optional()
30
+ .describe('Maximum icons to return (default: 50, max: 200).'),
31
+ });
32
+ function dsBrandIcons() {
33
+ const registry = getLightMeta().icons.registry;
34
+ return Object.values(registry).map((entry) => ({
35
+ name: entry.name,
36
+ source: 'ds-brand',
37
+ category: entry.category,
38
+ description: `${entry.name} (DS brand icon, maps to Lucide \`${entry.lucideName}\`)`,
39
+ tags: [entry.name, entry.category, entry.lucideName],
40
+ lucideName: entry.lucideName,
41
+ }));
42
+ }
43
+ function lucideCuratedIcons() {
44
+ return allIconMetadata
45
+ .filter((i) => i.source === 'lucide')
46
+ .map((i) => ({
47
+ name: i.name,
48
+ source: 'lucide-curated',
49
+ category: i.category,
50
+ description: i.description,
51
+ tags: i.tags,
52
+ lucideName: i.name, // Lucide-curated names ARE the Lucide component name
53
+ commonUsage: i.commonUsage,
54
+ aliases: i.aliases,
55
+ }));
56
+ }
57
+ function collectIcons(source) {
58
+ if (source === 'ds-brand')
59
+ return dsBrandIcons();
60
+ if (source === 'lucide-curated')
61
+ return lucideCuratedIcons();
62
+ // 'all' — union, dedup by name (ds-brand takes precedence on collision)
63
+ const brand = dsBrandIcons();
64
+ const brandNames = new Set(brand.map((i) => i.name));
65
+ const curated = lucideCuratedIcons().filter((i) => !brandNames.has(i.name));
66
+ return [...brand, ...curated];
67
+ }
68
+ function matchesQuery(icon, lowerQuery) {
69
+ if (icon.name.toLowerCase().includes(lowerQuery))
70
+ return true;
71
+ if (icon.description.toLowerCase().includes(lowerQuery))
72
+ return true;
73
+ if (icon.tags.some((t) => t.toLowerCase().includes(lowerQuery)))
74
+ return true;
75
+ if (icon.aliases?.some((a) => a.toLowerCase().includes(lowerQuery)))
76
+ return true;
77
+ return false;
78
+ }
79
+ export async function listIcons(params) {
80
+ const { query, category, limit } = params;
81
+ const source = params.source ?? 'all';
82
+ const safeLimit = limit ?? 50;
83
+ let icons = collectIcons(source);
84
+ if (category)
85
+ icons = icons.filter((i) => i.category === category);
86
+ if (query) {
87
+ const q = query.toLowerCase();
88
+ icons = icons.filter((i) => matchesQuery(i, q));
89
+ }
90
+ const totalMatching = icons.length;
91
+ icons = icons.slice(0, safeLimit);
92
+ const libraryInfo = resolveLibraryInfo();
93
+ return renderResponse(icons, {
94
+ query,
95
+ category,
96
+ source,
97
+ limit: safeLimit,
98
+ totalMatching,
99
+ libraryInfo,
100
+ });
101
+ }
102
+ function renderResponse(icons, filters) {
103
+ const { libraryInfo } = filters;
104
+ let out = '# Available Icons\n\n';
105
+ const filterSummary = [];
106
+ if (filters.source !== 'all')
107
+ filterSummary.push(`source="${filters.source}"`);
108
+ if (filters.category)
109
+ filterSummary.push(`category="${filters.category}"`);
110
+ if (filters.query)
111
+ filterSummary.push(`query="${filters.query}"`);
112
+ out += `Total: ${filters.totalMatching} icons`;
113
+ if (filterSummary.length > 0)
114
+ out += ` (filtered: ${filterSummary.join(', ')})`;
115
+ out += `\n\n`;
116
+ if (icons.length < filters.totalMatching) {
117
+ out += `_Showing first ${icons.length} results (limit: ${filters.limit}). Raise \`limit\` to see more._\n\n`;
118
+ }
119
+ if (filters.category && categoryDescriptions[filters.category]) {
120
+ out += `**${filters.category}**: ${categoryDescriptions[filters.category]}\n\n`;
121
+ }
122
+ // Availability banner — the full Lucide library is always reachable.
123
+ out += '## Full Lucide Library Available\n\n';
124
+ out += `Any icon from the Lucide library (~${libraryInfo.totalIcons.toLocaleString()} icons) can be used via \`${libraryInfo.libraryName}\`.\n\n`;
125
+ out += `- **Browse all**: ${libraryInfo.browseUrl}\n\n`;
126
+ // Grouped output — brand first, then curated
127
+ const brand = icons.filter((i) => i.source === 'ds-brand');
128
+ const curated = icons.filter((i) => i.source === 'lucide-curated');
129
+ if (brand.length > 0) {
130
+ out += `## DS Brand Icons (${brand.length})\n\n`;
131
+ out += 'Authoritative brand icons from `meta.icons.registry`.\n\n';
132
+ for (const icon of brand)
133
+ out += renderIconEntry(icon, libraryInfo);
134
+ }
135
+ if (curated.length > 0) {
136
+ out += `## Lucide Curated (${curated.length})\n\n`;
137
+ out += 'MCP-curated Lucide subset — battle-tested with DS components.\n\n';
138
+ for (const icon of curated)
139
+ out += renderIconEntry(icon, libraryInfo);
140
+ }
141
+ out += '\n---\n';
142
+ out += 'Use `search_icons` for purpose-driven / semantic search.\n';
143
+ return out;
144
+ }
145
+ function renderIconEntry(icon, libraryInfo) {
146
+ let entry = `### ${icon.name}\n\n`;
147
+ entry += `- **Description**: ${icon.description}\n`;
148
+ if (icon.tags.length > 0)
149
+ entry += `- **Tags**: ${icon.tags.join(', ')}\n`;
150
+ if (icon.commonUsage)
151
+ entry += `- **Common usage**: ${icon.commonUsage}\n`;
152
+ if (icon.aliases && icon.aliases.length > 0)
153
+ entry += `- **Aliases**: ${icon.aliases.join(', ')}\n`;
154
+ const lucideName = icon.lucideName ?? icon.name;
155
+ entry += `\n**Usage**:\n\`\`\`tsx\n`;
156
+ entry += `import { ${lucideName} } from '${libraryInfo.libraryName}'\n\n`;
157
+ entry += `<Icon size="md"><${lucideName} /></Icon>\n`;
158
+ entry += `\`\`\`\n\n`;
159
+ return entry;
160
+ }
161
+ //# sourceMappingURL=list-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-icons.js","sourceRoot":"","sources":["../../src/tools/list-icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Platform-aware transformations for code-gen tools.
3
+ *
4
+ * Sprint 29, Lane G (#244): given a chunk of generated JSX + an import
5
+ * statement, produce the RN-flavored variant when `platform === 'react-native'`.
6
+ *
7
+ * Transformations applied for RN:
8
+ * - Import path: `@lando-labs/design-system` → `@lando-labs/design-system-native`
9
+ * - Event handlers:
10
+ * onClick → onPress
11
+ * onChange → onChangeText (only when the target is an Input/Textarea)
12
+ * - JSX tags:
13
+ * <div>...</div> → <View>...</View>
14
+ * <span>...</span> → <Text>...</Text>
15
+ * - Inline `style={{...}}` is left in place but annotated with a one-line
16
+ * comment hint that `StyleSheet.create` is preferred.
17
+ *
18
+ * The helpers here are intentionally regex-based: the inputs are short
19
+ * generated snippets where a parser would be overkill. The transformations
20
+ * are conservative — anything ambiguous is left alone (and warned about).
21
+ */
22
+ import type { Platform } from './platform.js';
23
+ /**
24
+ * Swap the web package name for the RN package name inside any import
25
+ * statement that targets the web DS. Other imports (`react`, `next/link`,
26
+ * `lucide-react`, etc.) pass through unchanged.
27
+ *
28
+ * Safe to call on input that may not contain an import statement — it's a
29
+ * no-op in that case.
30
+ */
31
+ export declare function rewriteImportPath(snippet: string, platform: Platform): string;
32
+ /**
33
+ * Rewrite a JSX snippet for RN.
34
+ *
35
+ * Returns both the transformed code and any warnings the caller may want
36
+ * to surface (e.g. the inline-style hint, ambiguous onChange usage on
37
+ * non-text elements, etc.).
38
+ */
39
+ export declare function rewriteJsxForRn(jsx: string, options?: {
40
+ componentName?: string;
41
+ }): {
42
+ code: string;
43
+ warnings: string[];
44
+ };
45
+ /**
46
+ * Convenience wrapper: apply both import + JSX rewrites to a full snippet
47
+ * (import statement + JSX), keeping the existing two-section format
48
+ * (`<import>\n\n<jsx>`) produced by `get_component` / `get_usage_example`.
49
+ *
50
+ * Splits on the first blank line; if none is found, the entire input is
51
+ * treated as JSX (no import to rewrite).
52
+ */
53
+ export declare function rewriteSnippetForPlatform(snippet: string, platform: Platform, options?: {
54
+ componentName?: string;
55
+ }): {
56
+ code: string;
57
+ warnings: string[];
58
+ };
59
+ /**
60
+ * Format a list of warnings as a leading comment block. Returns an empty
61
+ * string if there are no warnings.
62
+ */
63
+ export declare function formatWarningsHeader(warnings: string[]): string;
64
+ //# sourceMappingURL=platform-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-transform.d.ts","sourceRoot":"","sources":["../../src/tools/platform-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAQ7C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAQ7E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA0CtC;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBtC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAI/D"}