@sky.ui/mcp 0.0.1
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/LICENSE.md +139 -0
- package/README.md +182 -0
- package/data/chart-api-sections.json +4185 -0
- package/data/component-tier.json +25 -0
- package/data/design-guidelines/p0-guidelines.json +13381 -0
- package/data/reactivity-readme-snapshot.json +1 -0
- package/data/theme-authoring-contract.json +598 -0
- package/data/utils-suggestion-snapshot.json +1 -0
- package/dist/cache.d.ts +3 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +15 -0
- package/dist/cache.js.map +1 -0
- package/dist/catalog.d.ts +60 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +343 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cem.d.ts +26 -0
- package/dist/cem.d.ts.map +1 -0
- package/dist/cem.js +348 -0
- package/dist/cem.js.map +1 -0
- package/dist/chart-usage-tool.d.ts +20 -0
- package/dist/chart-usage-tool.d.ts.map +1 -0
- package/dist/chart-usage-tool.js +153 -0
- package/dist/chart-usage-tool.js.map +1 -0
- package/dist/component-docs-tool.d.ts +45 -0
- package/dist/component-docs-tool.d.ts.map +1 -0
- package/dist/component-docs-tool.js +217 -0
- package/dist/component-docs-tool.js.map +1 -0
- package/dist/component-method-filter.d.ts +3 -0
- package/dist/component-method-filter.d.ts.map +1 -0
- package/dist/component-method-filter.js +32 -0
- package/dist/component-method-filter.js.map +1 -0
- package/dist/component-tier.d.ts +20 -0
- package/dist/component-tier.d.ts.map +1 -0
- package/dist/component-tier.js +59 -0
- package/dist/component-tier.js.map +1 -0
- package/dist/component-usage-tool.d.ts +20 -0
- package/dist/component-usage-tool.d.ts.map +1 -0
- package/dist/component-usage-tool.js +90 -0
- package/dist/component-usage-tool.js.map +1 -0
- package/dist/design-guidelines/a11y-engine.d.ts +22 -0
- package/dist/design-guidelines/a11y-engine.d.ts.map +1 -0
- package/dist/design-guidelines/a11y-engine.js +78 -0
- package/dist/design-guidelines/a11y-engine.js.map +1 -0
- package/dist/design-guidelines/compatibility-engine.d.ts +20 -0
- package/dist/design-guidelines/compatibility-engine.d.ts.map +1 -0
- package/dist/design-guidelines/compatibility-engine.js +57 -0
- package/dist/design-guidelines/compatibility-engine.js.map +1 -0
- package/dist/design-guidelines/component-guideline-engine.d.ts +19 -0
- package/dist/design-guidelines/component-guideline-engine.d.ts.map +1 -0
- package/dist/design-guidelines/component-guideline-engine.js +40 -0
- package/dist/design-guidelines/component-guideline-engine.js.map +1 -0
- package/dist/design-guidelines/composition-engine.d.ts +10 -0
- package/dist/design-guidelines/composition-engine.d.ts.map +1 -0
- package/dist/design-guidelines/composition-engine.js +29 -0
- package/dist/design-guidelines/composition-engine.js.map +1 -0
- package/dist/design-guidelines/pattern-engine.d.ts +20 -0
- package/dist/design-guidelines/pattern-engine.d.ts.map +1 -0
- package/dist/design-guidelines/pattern-engine.js +58 -0
- package/dist/design-guidelines/pattern-engine.js.map +1 -0
- package/dist/design-guidelines/recommendation-engine.d.ts +11 -0
- package/dist/design-guidelines/recommendation-engine.d.ts.map +1 -0
- package/dist/design-guidelines/recommendation-engine.js +88 -0
- package/dist/design-guidelines/recommendation-engine.js.map +1 -0
- package/dist/design-guidelines/repository.d.ts +19 -0
- package/dist/design-guidelines/repository.d.ts.map +1 -0
- package/dist/design-guidelines/repository.js +71 -0
- package/dist/design-guidelines/repository.js.map +1 -0
- package/dist/design-guidelines/review-engine.d.ts +20 -0
- package/dist/design-guidelines/review-engine.d.ts.map +1 -0
- package/dist/design-guidelines/review-engine.js +179 -0
- package/dist/design-guidelines/review-engine.js.map +1 -0
- package/dist/design-guidelines/schema.d.ts +256 -0
- package/dist/design-guidelines/schema.d.ts.map +1 -0
- package/dist/design-guidelines/schema.js +124 -0
- package/dist/design-guidelines/schema.js.map +1 -0
- package/dist/design-guidelines/token-engine.d.ts +23 -0
- package/dist/design-guidelines/token-engine.d.ts.map +1 -0
- package/dist/design-guidelines/token-engine.js +119 -0
- package/dist/design-guidelines/token-engine.js.map +1 -0
- package/dist/docs-read.d.ts +28 -0
- package/dist/docs-read.d.ts.map +1 -0
- package/dist/docs-read.js +102 -0
- package/dist/docs-read.js.map +1 -0
- package/dist/docs.d.ts +73 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +323 -0
- package/dist/docs.js.map +1 -0
- package/dist/example-site-doc-enrichment.d.ts +27 -0
- package/dist/example-site-doc-enrichment.d.ts.map +1 -0
- package/dist/example-site-doc-enrichment.js +171 -0
- package/dist/example-site-doc-enrichment.js.map +1 -0
- package/dist/example-site-fetch.d.ts +44 -0
- package/dist/example-site-fetch.d.ts.map +1 -0
- package/dist/example-site-fetch.js +255 -0
- package/dist/example-site-fetch.js.map +1 -0
- package/dist/framework-wrappers.d.ts +46 -0
- package/dist/framework-wrappers.d.ts.map +1 -0
- package/dist/framework-wrappers.js +131 -0
- package/dist/framework-wrappers.js.map +1 -0
- package/dist/mcp-response-truth.d.ts +18 -0
- package/dist/mcp-response-truth.d.ts.map +1 -0
- package/dist/mcp-response-truth.js +45 -0
- package/dist/mcp-response-truth.js.map +1 -0
- package/dist/mcp-runtime-status.d.ts +37 -0
- package/dist/mcp-runtime-status.d.ts.map +1 -0
- package/dist/mcp-runtime-status.js +96 -0
- package/dist/mcp-runtime-status.js.map +1 -0
- package/dist/mcp-stdio-entry.d.ts +3 -0
- package/dist/mcp-stdio-entry.d.ts.map +1 -0
- package/dist/mcp-stdio-entry.js +35 -0
- package/dist/mcp-stdio-entry.js.map +1 -0
- package/dist/mcp-tool-errors.d.ts +35 -0
- package/dist/mcp-tool-errors.d.ts.map +1 -0
- package/dist/mcp-tool-errors.js +42 -0
- package/dist/mcp-tool-errors.js.map +1 -0
- package/dist/parse-component-ast.d.ts +112 -0
- package/dist/parse-component-ast.d.ts.map +1 -0
- package/dist/parse-component-ast.js +695 -0
- package/dist/parse-component-ast.js.map +1 -0
- package/dist/post-endpoint-server.d.ts +19 -0
- package/dist/post-endpoint-server.d.ts.map +1 -0
- package/dist/post-endpoint-server.js +777 -0
- package/dist/post-endpoint-server.js.map +1 -0
- package/dist/reactivity-info.d.ts +22 -0
- package/dist/reactivity-info.d.ts.map +1 -0
- package/dist/reactivity-info.js +99 -0
- package/dist/reactivity-info.js.map +1 -0
- package/dist/reactivity-layer-tool.d.ts +18 -0
- package/dist/reactivity-layer-tool.d.ts.map +1 -0
- package/dist/reactivity-layer-tool.js +58 -0
- package/dist/reactivity-layer-tool.js.map +1 -0
- package/dist/reactivity-readme-topics.d.ts +46 -0
- package/dist/reactivity-readme-topics.d.ts.map +1 -0
- package/dist/reactivity-readme-topics.js +206 -0
- package/dist/reactivity-readme-topics.js.map +1 -0
- package/dist/read-only-tool-allowlist.d.ts +7 -0
- package/dist/read-only-tool-allowlist.d.ts.map +1 -0
- package/dist/read-only-tool-allowlist.js +17 -0
- package/dist/read-only-tool-allowlist.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +786 -0
- package/dist/server.js.map +1 -0
- package/dist/source-read.d.ts +31 -0
- package/dist/source-read.d.ts.map +1 -0
- package/dist/source-read.js +213 -0
- package/dist/source-read.js.map +1 -0
- package/dist/theme-authoring/contract-schema.d.ts +191 -0
- package/dist/theme-authoring/contract-schema.d.ts.map +1 -0
- package/dist/theme-authoring/contract-schema.js +49 -0
- package/dist/theme-authoring/contract-schema.js.map +1 -0
- package/dist/theme-authoring/repository.d.ts +18 -0
- package/dist/theme-authoring/repository.d.ts.map +1 -0
- package/dist/theme-authoring/repository.js +55 -0
- package/dist/theme-authoring/repository.js.map +1 -0
- package/dist/theme-tool.d.ts +26 -0
- package/dist/theme-tool.d.ts.map +1 -0
- package/dist/theme-tool.js +312 -0
- package/dist/theme-tool.js.map +1 -0
- package/dist/utils-guide-topics.d.ts +39 -0
- package/dist/utils-guide-topics.d.ts.map +1 -0
- package/dist/utils-guide-topics.js +202 -0
- package/dist/utils-guide-topics.js.map +1 -0
- package/dist/utils-info.d.ts +75 -0
- package/dist/utils-info.d.ts.map +1 -0
- package/dist/utils-info.js +219 -0
- package/dist/utils-info.js.map +1 -0
- package/dist/utils-suggestion-grounding.d.ts +59 -0
- package/dist/utils-suggestion-grounding.d.ts.map +1 -0
- package/dist/utils-suggestion-grounding.js +267 -0
- package/dist/utils-suggestion-grounding.js.map +1 -0
- package/docs/agent-recipe-example-site.md +91 -0
- package/docs/ai-design-mcp-blueprint.md +75 -0
- package/docs/cross-model-mcp-playbook.md +127 -0
- package/docs/example-site-and-mcp-training.md +82 -0
- package/docs/mcp-capability-status.md +51 -0
- package/docs/mcp-tooling-roadmap.md +36 -0
- package/docs/sky-chart-option-api.md +47 -0
- package/docs/starter-prompt.md +17 -0
- package/docs/theme-config-guide.md +178 -0
- package/docs/utils-usage-guide.md +110 -0
- package/docs/vue-wrapper-v-model.md +36 -0
- package/package.json +63 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { loadSkyComponentsCached, resolveComponentEntry, packagesDir } from './catalog.js';
|
|
5
|
+
import { PACKAGE_IMPORTS } from './component-tier.js';
|
|
6
|
+
export function kebabTagToPascal(tag) {
|
|
7
|
+
return tag
|
|
8
|
+
.split('-')
|
|
9
|
+
.map((p) => (p ? p[0].toUpperCase() + p.slice(1) : ''))
|
|
10
|
+
.join('');
|
|
11
|
+
}
|
|
12
|
+
function buildSnippets(framework, tag, pascal, vuePkg, reactPkg) {
|
|
13
|
+
if (framework === 'react') {
|
|
14
|
+
return {
|
|
15
|
+
reactPerComponent: `import { ${pascal} } from '${reactPkg}/${tag}';\n\nexport default function Demo() {\n return <${pascal}>Hello</${pascal}>;\n}`,
|
|
16
|
+
reactBarrel: `import { ${pascal} } from '${reactPkg}';\n\nexport default function Demo() {\n return <${pascal}>Hello</${pascal}>;\n}`,
|
|
17
|
+
reactAutoImportNote: `// With SkyUIReactVitePlugin() or SkyUIReactWebpackPlugin + SkyUIReactResolver — JSX can use <${pascal} /> without manual imports.\n// Full explicit barrel:\nimport { ${pascal} } from '${reactPkg}';\n\nexport default function Demo() {\n return <${pascal} variant="primary">Hello</${pascal}>;\n}`,
|
|
18
|
+
vuePerComponent: '',
|
|
19
|
+
vueBarrel: '',
|
|
20
|
+
vueAutoImportNote: '',
|
|
21
|
+
vueTemplateKebab: ''
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
reactPerComponent: '',
|
|
26
|
+
reactBarrel: '',
|
|
27
|
+
reactAutoImportNote: '',
|
|
28
|
+
vuePerComponent: `<script setup lang="ts">\nimport { ${pascal} } from '${vuePkg}/${tag}';\n</script>\n\n<template>\n <${pascal}>Hello</${pascal}>\n</template>`,
|
|
29
|
+
vueBarrel: `<script setup lang="ts">\nimport { ${pascal} } from '${vuePkg}';\n</script>\n\n<template>\n <${pascal}>Hello</${pascal}>\n</template>`,
|
|
30
|
+
vueAutoImportNote: `<!-- With SkyUIVueVitePlugin() / SkyUIVueWebpackPlugin + SkyUIVueResolver — SFCs can use <${pascal}> without script imports. -->\n<script setup lang="ts">\n// Optional explicit: import { ${pascal} } from '${vuePkg}';\n</script>\n\n<template>\n <${pascal} variant="primary">Hello</${pascal}>\n</template>`,
|
|
31
|
+
vueTemplateKebab: `<template>\n <!-- Pascal (recommended with script import) -->\n <${pascal} label="OK" />\n <!-- Kebab form also works (aligns with custom element name): -->\n <${tag} label="OK" />\n</template>`
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function readPublishedWrapperMeta(framework, tier) {
|
|
35
|
+
const monoFolder = tier === 'pro' ? `${framework}-pro` : framework;
|
|
36
|
+
const packageName = PACKAGE_IMPORTS[tier][framework];
|
|
37
|
+
const mono = join(packagesDir(), monoFolder);
|
|
38
|
+
const monoPkg = join(mono, 'package.json');
|
|
39
|
+
const parse = (path) => {
|
|
40
|
+
const raw = JSON.parse(readFileSync(path, 'utf8'));
|
|
41
|
+
return {
|
|
42
|
+
version: typeof raw.version === 'string' ? raw.version : null,
|
|
43
|
+
peerDependencies: raw.peerDependencies && typeof raw.peerDependencies === 'object' ? raw.peerDependencies : {}
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
if (existsSync(monoPkg)) {
|
|
47
|
+
return parse(monoPkg);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const req = createRequire(import.meta.url);
|
|
51
|
+
const resolved = req.resolve(`${packageName}/package.json`);
|
|
52
|
+
return parse(resolved);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { version: null, peerDependencies: {} };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function buildFrameworkWrapperDetails(framework, nameInput) {
|
|
59
|
+
const hitRes = loadSkyComponentsCached();
|
|
60
|
+
if (!hitRes.ok)
|
|
61
|
+
return { ok: false, error: hitRes.error };
|
|
62
|
+
const resolved = resolveComponentEntry(nameInput, hitRes.components);
|
|
63
|
+
if (!resolved)
|
|
64
|
+
return { ok: false, error: `Unknown component: ${nameInput}` };
|
|
65
|
+
const tag = resolved.entry.name;
|
|
66
|
+
const tier = resolved.entry.tier;
|
|
67
|
+
const pascal = kebabTagToPascal(tag);
|
|
68
|
+
const vuePkg = resolved.entry.vueImport.replace(/\/[^/]+$/, '');
|
|
69
|
+
const reactPkg = resolved.entry.reactImport.replace(/\/[^/]+$/, '');
|
|
70
|
+
const meta = readPublishedWrapperMeta(framework, tier);
|
|
71
|
+
const pkg = framework === 'react' ? reactPkg : vuePkg;
|
|
72
|
+
const primaryImportLine = framework === 'react'
|
|
73
|
+
? `import { ${pascal} } from '${resolved.entry.reactImport}';`
|
|
74
|
+
: `import { ${pascal} } from '${resolved.entry.vueImport}';`;
|
|
75
|
+
const conventions = framework === 'react'
|
|
76
|
+
? [
|
|
77
|
+
'JSX props follow camelCase; they map to the underlying custom element (see get_sky_component_docs with surface props for names/types).',
|
|
78
|
+
'Use children for default slot content; named slots may require patterns from get_sky_component_docs with surface slots.',
|
|
79
|
+
`For DOM/custom events, use get_sky_component_docs with surface events — @lit/react exposes listeners as React props (see component typings in ${reactPkg}).`,
|
|
80
|
+
'Bundler: prefer get_project_guide with kind setup, framework react, and your bundler (@sky.ui/react/vite or @sky.ui.pro/react/vite, /webpack, /rollup) + optional unplugin auto-import.',
|
|
81
|
+
`Barrel import \`import { ... } from '${reactPkg}'\` re-exports all wrappers; per-component path tree-shakes more predictably.`
|
|
82
|
+
]
|
|
83
|
+
: [
|
|
84
|
+
'In SFC templates you may use PascalCase (<SkyButton>) or kebab-case (<sky-button>) once the component is registered or auto-imported.',
|
|
85
|
+
'Props in templates: kebab-case attributes map to the underlying component (Vue generally accepts both where applicable).',
|
|
86
|
+
`Use get_sky_component_docs (props / events / slots surfaces) for authoritative names; Vue SFC types come from ${vuePkg}.`,
|
|
87
|
+
'v-model: use it only when the component docs describe a two-way prop + event pair; otherwise bind with :prop and @event from get_sky_component_docs. Custom events use CustomEvent detail—match the documented payload.',
|
|
88
|
+
'Usage patterns (default vs named v-model, explicit bindings): get_docs packages/mcp/docs/vue-wrapper-v-model.md',
|
|
89
|
+
`Bundler: get_project_guide with kind setup and framework vue for SkyUIVueVitePlugin (${vuePkg}/vite, /webpack, /rollup) and unplugin-vue-components resolver.`,
|
|
90
|
+
`Barrel \`import { ... } from '${vuePkg}'\` loads the full export surface; subpath \`${vuePkg}/<tag>\` matches core folder names.`
|
|
91
|
+
];
|
|
92
|
+
const details = {
|
|
93
|
+
framework,
|
|
94
|
+
componentKebab: tag,
|
|
95
|
+
pascalName: pascal,
|
|
96
|
+
primaryImportLine,
|
|
97
|
+
importPerComponent: framework === 'react' ? resolved.entry.reactImport : resolved.entry.vueImport,
|
|
98
|
+
importBarrel: pkg,
|
|
99
|
+
vueKebabTagInTemplate: tag,
|
|
100
|
+
snippets: buildSnippets(framework, tag, pascal, vuePkg, reactPkg),
|
|
101
|
+
conventions,
|
|
102
|
+
relatedMcpTools: [
|
|
103
|
+
'get_sky_component_docs',
|
|
104
|
+
'get_project_guide',
|
|
105
|
+
'get_component_usage',
|
|
106
|
+
...(framework === 'vue' ? ['get_docs'] : [])
|
|
107
|
+
],
|
|
108
|
+
packageVersion: meta.version,
|
|
109
|
+
peerDependencies: meta.peerDependencies
|
|
110
|
+
};
|
|
111
|
+
return { ok: true, details };
|
|
112
|
+
}
|
|
113
|
+
export function buildUsageSnippetForFramework(framework, componentInput, style) {
|
|
114
|
+
const rich = buildFrameworkWrapperDetails(framework, componentInput);
|
|
115
|
+
if (!rich.ok)
|
|
116
|
+
return rich;
|
|
117
|
+
const { componentKebab, pascalName, snippets } = rich.details;
|
|
118
|
+
if (framework === 'react') {
|
|
119
|
+
if (style === 'per_component')
|
|
120
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.reactPerComponent };
|
|
121
|
+
if (style === 'barrel')
|
|
122
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.reactBarrel };
|
|
123
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.reactAutoImportNote };
|
|
124
|
+
}
|
|
125
|
+
if (style === 'per_component')
|
|
126
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.vuePerComponent };
|
|
127
|
+
if (style === 'barrel')
|
|
128
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.vueBarrel };
|
|
129
|
+
return { ok: true, componentName: componentKebab, snippet: snippets.vueAutoImportNote };
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=framework-wrappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-wrappers.js","sourceRoot":"","sources":["../src/framework-wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACtD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AA8BD,SAAS,aAAa,CACpB,SAA0B,EAC1B,GAAW,EACX,MAAc,EACd,MAAc,EACd,QAAgB;IAEhB,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO;YACL,iBAAiB,EAAE,YAAY,MAAM,YAAY,QAAQ,IAAI,GAAG,qDAAqD,MAAM,WAAW,MAAM,OAAO;YACnJ,WAAW,EAAE,YAAY,MAAM,YAAY,QAAQ,qDAAqD,MAAM,WAAW,MAAM,OAAO;YACtI,mBAAmB,EAAE,iGAAiG,MAAM,mEAAmE,MAAM,YAAY,QAAQ,qDAAqD,MAAM,6BAA6B,MAAM,OAAO;YAC9T,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,iBAAiB,EAAE,EAAE;YACrB,gBAAgB,EAAE,EAAE;SACrB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,mBAAmB,EAAE,EAAE;QACvB,eAAe,EAAE,sCAAsC,MAAM,YAAY,MAAM,IAAI,GAAG,mCAAmC,MAAM,WAAW,MAAM,gBAAgB;QAChK,SAAS,EAAE,sCAAsC,MAAM,YAAY,MAAM,mCAAmC,MAAM,WAAW,MAAM,gBAAgB;QACnJ,iBAAiB,EAAE,6FAA6F,MAAM,2FAA2F,MAAM,YAAY,MAAM,mCAAmC,MAAM,6BAA6B,MAAM,gBAAgB;QACrU,gBAAgB,EAAE,sEAAsE,MAAM,2FAA2F,GAAG,6BAA6B;KAC1N,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,SAA0B,EAC1B,IAAsB;IAKtB,MAAM,UAAU,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAGhD,CAAC;QACF,OAAO;YACL,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAC7D,gBAAgB,EACd,GAAG,CAAC,gBAAgB,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;SAC/F,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAA0B,EAC1B,SAAiB;IAEjB,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,iBAAiB,GACrB,SAAS,KAAK,OAAO;QACnB,CAAC,CAAC,YAAY,MAAM,YAAY,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI;QAC9D,CAAC,CAAC,YAAY,MAAM,YAAY,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC;IAEjE,MAAM,WAAW,GACf,SAAS,KAAK,OAAO;QACnB,CAAC,CAAC;YACE,wIAAwI;YACxI,yHAAyH;YACzH,iJAAiJ,QAAQ,IAAI;YAC7J,yLAAyL;YACzL,wCAAwC,QAAQ,+EAA+E;SAChI;QACH,CAAC,CAAC;YACE,uIAAuI;YACvI,0HAA0H;YAC1H,iHAAiH,MAAM,GAAG;YAC1H,yNAAyN;YACzN,iHAAiH;YACjH,wFAAwF,MAAM,iEAAiE;YAC/J,iCAAiC,MAAM,gDAAgD,MAAM,qCAAqC;SACnI,CAAC;IAER,MAAM,OAAO,GAA4B;QACvC,SAAS;QACT,cAAc,EAAE,GAAG;QACnB,UAAU,EAAE,MAAM;QAClB,iBAAiB;QACjB,kBAAkB,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS;QACjG,YAAY,EAAE,GAAG;QACjB,qBAAqB,EAAE,GAAG;QAC1B,QAAQ,EAAE,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;QACjE,WAAW;QACX,eAAe,EAAE;YACf,wBAAwB;YACxB,mBAAmB;YACnB,qBAAqB;YACrB,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD;QACD,cAAc,EAAE,IAAI,CAAC,OAAO;QAC5B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,SAA0B,EAC1B,cAAsB,EACtB,KAAyB;IAEzB,MAAM,IAAI,GAAG,4BAA4B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,eAAe;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACvH,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1G,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAC5F,CAAC;IACD,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;IACrH,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;IACxG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every MCP tool response should carry explicit epistemic classification so clients
|
|
3
|
+
* never treat heuristic or guideline output as authoritative API truth.
|
|
4
|
+
*/
|
|
5
|
+
export type SkyUiMcpTruthLayer = 'api_source' | 'guideline_scoring' | 'heuristic_search' | 'deterministic' | 'static_reference' | 'external_optional';
|
|
6
|
+
export type SkyUiMcpMeta = {
|
|
7
|
+
truthLayer: SkyUiMcpTruthLayer;
|
|
8
|
+
summary: string;
|
|
9
|
+
agentMust: string;
|
|
10
|
+
serverVersion?: string;
|
|
11
|
+
enrichmentNote?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function skyUiMcpMeta(layer: SkyUiMcpTruthLayer, enrichmentNote?: string): SkyUiMcpMeta;
|
|
14
|
+
/** Attach once per JSON payload (merge-safe). */
|
|
15
|
+
export declare function withSkyUiMcpMeta<T extends Record<string, unknown>>(body: T, layer: SkyUiMcpTruthLayer, enrichmentNote?: string): T & {
|
|
16
|
+
_skyUiMcp: SkyUiMcpMeta;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=mcp-response-truth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-response-truth.d.ts","sourceRoot":"","sources":["../src/mcp-response-truth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,mBAAmB,GACnB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,CAAC;AAqCxB,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,cAAc,CAAC,EAAE,MAAM,GACtB,YAAY,CASd;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,kBAAkB,EACzB,cAAc,CAAC,EAAE,MAAM,GACtB,CAAC,GAAG;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,CAKjC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const TRUTH_GUIDANCE = {
|
|
2
|
+
api_source: {
|
|
3
|
+
summary: 'Derived from repo or package sources (CEM, AST, package.json, shipped JSON).',
|
|
4
|
+
agentMust: 'Use dataSource fields; confirm behavior against the consumer app version and tests — docs can lag or differ by build.'
|
|
5
|
+
},
|
|
6
|
+
guideline_scoring: {
|
|
7
|
+
summary: 'Design-guideline heuristics (rules, scores, recommendations).',
|
|
8
|
+
agentMust: 'Do not cite as API contracts or browser guarantees — validate UX and a11y in the real product.'
|
|
9
|
+
},
|
|
10
|
+
heuristic_search: {
|
|
11
|
+
summary: 'Search / ranking over catalogs — relevance is approximate.',
|
|
12
|
+
agentMust: 'Verify hits against get_sky_component_docs or split prop/event tools before asserting APIs.'
|
|
13
|
+
},
|
|
14
|
+
deterministic: {
|
|
15
|
+
summary: 'Computed from fixed inputs with explicit rules (contrast math, catalog membership, etc.).',
|
|
16
|
+
agentMust: 'Still scope results to stated assumptions (e.g. default theme catalog vs project theme).'
|
|
17
|
+
},
|
|
18
|
+
static_reference: {
|
|
19
|
+
summary: 'Bundled prose or version lists — not live API verification.',
|
|
20
|
+
agentMust: 'Cross-check installation paths and versions with the user package.json and registry.'
|
|
21
|
+
},
|
|
22
|
+
external_optional: {
|
|
23
|
+
summary: 'Optional HTTP response or shipped embed — not authoritative for the consumer repo.',
|
|
24
|
+
agentMust: 'Never prefer this over get_sky_component_docs or split prop/event tools for API facts; may be stale or marketing skewed.'
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
import { getMcpPackageVersion } from './mcp-runtime-status.js';
|
|
28
|
+
export function skyUiMcpMeta(layer, enrichmentNote) {
|
|
29
|
+
const g = TRUTH_GUIDANCE[layer];
|
|
30
|
+
return {
|
|
31
|
+
truthLayer: layer,
|
|
32
|
+
summary: g.summary,
|
|
33
|
+
agentMust: g.agentMust,
|
|
34
|
+
serverVersion: getMcpPackageVersion(),
|
|
35
|
+
...(enrichmentNote ? { enrichmentNote } : {})
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Attach once per JSON payload (merge-safe). */
|
|
39
|
+
export function withSkyUiMcpMeta(body, layer, enrichmentNote) {
|
|
40
|
+
return {
|
|
41
|
+
...body,
|
|
42
|
+
_skyUiMcp: skyUiMcpMeta(layer, enrichmentNote)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=mcp-response-truth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-response-truth.js","sourceRoot":"","sources":["../src/mcp-response-truth.ts"],"names":[],"mappings":"AAYA,MAAM,cAAc,GAGhB;IACF,UAAU,EAAE;QACV,OAAO,EAAE,8EAA8E;QACvF,SAAS,EACP,uHAAuH;KAC1H;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,+DAA+D;QACxE,SAAS,EACP,gGAAgG;KACnG;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,4DAA4D;QACrE,SAAS,EAAE,6FAA6F;KACzG;IACD,aAAa,EAAE;QACb,OAAO,EAAE,2FAA2F;QACpG,SAAS,EAAE,0FAA0F;KACtG;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,6DAA6D;QACtE,SAAS,EAAE,sFAAsF;KAClG;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,oFAAoF;QAC7F,SAAS,EACP,0HAA0H;KAC7H;CACF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAU/D,MAAM,UAAU,YAAY,CAC1B,KAAyB,EACzB,cAAuB;IAEvB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,aAAa,EAAE,oBAAoB,EAAE;QACrC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,gBAAgB,CAC9B,IAAO,EACP,KAAyB,EACzB,cAAuB;IAEvB,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare function getMcpPackageVersion(): string;
|
|
2
|
+
export type McpRuntimeStatus = {
|
|
3
|
+
version: string;
|
|
4
|
+
toolCount: number;
|
|
5
|
+
tools: readonly string[];
|
|
6
|
+
core: {
|
|
7
|
+
resolved: boolean;
|
|
8
|
+
root: string | null;
|
|
9
|
+
proResolved: boolean;
|
|
10
|
+
proRoot: string | null;
|
|
11
|
+
customElementsManifest: boolean;
|
|
12
|
+
astSourceAvailable: boolean;
|
|
13
|
+
docsReady: boolean;
|
|
14
|
+
hint: string | null;
|
|
15
|
+
};
|
|
16
|
+
utils: {
|
|
17
|
+
packageResolved: boolean;
|
|
18
|
+
engineSource: 'live' | 'snapshot' | 'none';
|
|
19
|
+
};
|
|
20
|
+
reactivity: {
|
|
21
|
+
packageResolved: boolean;
|
|
22
|
+
readmeSnapshot: boolean;
|
|
23
|
+
};
|
|
24
|
+
data: {
|
|
25
|
+
themeContract: boolean;
|
|
26
|
+
chartApiSections: boolean;
|
|
27
|
+
utilsClassSnapshot: boolean;
|
|
28
|
+
reactivityReadmeSnapshot: boolean;
|
|
29
|
+
};
|
|
30
|
+
exampleSite: {
|
|
31
|
+
baseUrlConfigured: boolean;
|
|
32
|
+
baseUrl: string | null;
|
|
33
|
+
};
|
|
34
|
+
remediation: string[];
|
|
35
|
+
};
|
|
36
|
+
export declare function getMcpRuntimeStatus(): McpRuntimeStatus;
|
|
37
|
+
//# sourceMappingURL=mcp-runtime-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-runtime-status.d.ts","sourceRoot":"","sources":["../src/mcp-runtime-status.ts"],"names":[],"mappings":"AAUA,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE;QACJ,QAAQ,EAAE,OAAO,CAAC;QAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,sBAAsB,EAAE,OAAO,CAAC;QAChC,kBAAkB,EAAE,OAAO,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC;QACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;KAC5C,CAAC;IACF,UAAU,EAAE;QACV,eAAe,EAAE,OAAO,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,IAAI,EAAE;QACJ,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,wBAAwB,EAAE,OAAO,CAAC;KACnC,CAAC;IACF,WAAW,EAAE;QACX,iBAAiB,EAAE,OAAO,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAWF,wBAAgB,mBAAmB,IAAI,gBAAgB,CAsEtD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { mcpPackageRoot, resolveMainPackageRoot, resolveMainProPackageRoot } from './catalog.js';
|
|
4
|
+
import { isCemManifestPresent } from './cem.js';
|
|
5
|
+
import { READ_ONLY_TOOL_NAMES } from './read-only-tool-allowlist.js';
|
|
6
|
+
import { resolveReactivityPackageRoot } from './reactivity-info.js';
|
|
7
|
+
import { resolveUtilsPackageRoot, utilityEngineSource } from './utils-suggestion-grounding.js';
|
|
8
|
+
import { themeAuthoringContractPath } from './theme-authoring/repository.js';
|
|
9
|
+
import { resolveExampleSiteBaseUrl } from './example-site-fetch.js';
|
|
10
|
+
export function getMcpPackageVersion() {
|
|
11
|
+
try {
|
|
12
|
+
const pkg = JSON.parse(readFileSync(join(mcpPackageRoot(), 'package.json'), 'utf8'));
|
|
13
|
+
return pkg.version ?? 'unknown';
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return 'unknown';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function dataFile(name) {
|
|
20
|
+
return existsSync(join(mcpPackageRoot(), 'data', name));
|
|
21
|
+
}
|
|
22
|
+
function coreAstSourceAvailable(mainRoot) {
|
|
23
|
+
if (!mainRoot)
|
|
24
|
+
return false;
|
|
25
|
+
return existsSync(join(mainRoot, 'src', 'sky-button', 'sky-button.ts'));
|
|
26
|
+
}
|
|
27
|
+
export function getMcpRuntimeStatus() {
|
|
28
|
+
const mainRoot = resolveMainPackageRoot();
|
|
29
|
+
const proRoot = resolveMainProPackageRoot();
|
|
30
|
+
const cem = isCemManifestPresent();
|
|
31
|
+
const ast = coreAstSourceAvailable(mainRoot) || coreAstSourceAvailable(proRoot);
|
|
32
|
+
const docsReady = Boolean((mainRoot || proRoot) && (cem || ast));
|
|
33
|
+
const utilsRoot = resolveUtilsPackageRoot();
|
|
34
|
+
const reactivityRoot = resolveReactivityPackageRoot();
|
|
35
|
+
const snapshotUtils = dataFile('utils-suggestion-snapshot.json');
|
|
36
|
+
const engineSource = utilityEngineSource() !== 'none'
|
|
37
|
+
? utilityEngineSource()
|
|
38
|
+
: snapshotUtils
|
|
39
|
+
? 'snapshot'
|
|
40
|
+
: 'none';
|
|
41
|
+
const remediation = [];
|
|
42
|
+
if (!mainRoot) {
|
|
43
|
+
remediation.push('Install @sky.ui/core alongside @sky.ui/mcp, or set SKY_UI_MAIN_PACKAGE_ROOT to a built core package.');
|
|
44
|
+
}
|
|
45
|
+
else if (!docsReady) {
|
|
46
|
+
remediation.push('Run npm run build:main (and build:main-pro for pro docs) so custom-elements.json exists, or point SKY_UI_MAIN_PACKAGE_ROOT / SKY_UI_MAIN_PRO_PACKAGE_ROOT at monorepo packages.');
|
|
47
|
+
}
|
|
48
|
+
if (!proRoot) {
|
|
49
|
+
remediation.push('Pro component docs/snippets need @sky.ui.pro/core (npm install @sky.ui.pro/vue pulls it) or monorepo packages/main-pro.');
|
|
50
|
+
}
|
|
51
|
+
if (engineSource === 'none') {
|
|
52
|
+
remediation.push('Install @sky.ui/utils@>=0.0.1 or use @sky.ui/mcp build that ships utils-suggestion-snapshot.json.');
|
|
53
|
+
}
|
|
54
|
+
if (!reactivityRoot && !dataFile('reactivity-readme-snapshot.json')) {
|
|
55
|
+
remediation.push('Install @sky.ui/reactivity or use MCP build with reactivity-readme-snapshot.json.');
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
version: getMcpPackageVersion(),
|
|
59
|
+
toolCount: READ_ONLY_TOOL_NAMES.length,
|
|
60
|
+
tools: READ_ONLY_TOOL_NAMES,
|
|
61
|
+
core: {
|
|
62
|
+
resolved: !!mainRoot,
|
|
63
|
+
root: mainRoot,
|
|
64
|
+
proResolved: !!proRoot,
|
|
65
|
+
proRoot,
|
|
66
|
+
customElementsManifest: cem,
|
|
67
|
+
astSourceAvailable: ast,
|
|
68
|
+
docsReady,
|
|
69
|
+
hint: !mainRoot
|
|
70
|
+
? 'Missing @sky.ui/core'
|
|
71
|
+
: !docsReady
|
|
72
|
+
? 'Core resolved but neither CEM nor AST sources found for component docs'
|
|
73
|
+
: null
|
|
74
|
+
},
|
|
75
|
+
utils: {
|
|
76
|
+
packageResolved: !!utilsRoot,
|
|
77
|
+
engineSource
|
|
78
|
+
},
|
|
79
|
+
reactivity: {
|
|
80
|
+
packageResolved: !!reactivityRoot,
|
|
81
|
+
readmeSnapshot: dataFile('reactivity-readme-snapshot.json')
|
|
82
|
+
},
|
|
83
|
+
data: {
|
|
84
|
+
themeContract: existsSync(themeAuthoringContractPath()),
|
|
85
|
+
chartApiSections: dataFile('chart-api-sections.json'),
|
|
86
|
+
utilsClassSnapshot: dataFile('utils-suggestion-snapshot.json'),
|
|
87
|
+
reactivityReadmeSnapshot: dataFile('reactivity-readme-snapshot.json')
|
|
88
|
+
},
|
|
89
|
+
exampleSite: {
|
|
90
|
+
baseUrlConfigured: Boolean(resolveExampleSiteBaseUrl()),
|
|
91
|
+
baseUrl: resolveExampleSiteBaseUrl()
|
|
92
|
+
},
|
|
93
|
+
remediation
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=mcp-runtime-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-runtime-status.js","sourceRoot":"","sources":["../src/mcp-runtime-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio-entry.d.ts","sourceRoot":"","sources":["../src/mcp-stdio-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* stdio MCP process entry only. Kept tiny so `process.argv[1]` always matches this file
|
|
4
|
+
* (avoids silent no-op when `npx` / Windows shims pass a path that does not match `server.js`).
|
|
5
|
+
*/
|
|
6
|
+
import { assertCoreDependencyAvailable, startSkyUiMcpStdio } from './server.js';
|
|
7
|
+
import { getMcpRuntimeStatus } from './mcp-runtime-status.js';
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
if (args.includes('--health')) {
|
|
10
|
+
try {
|
|
11
|
+
assertCoreDependencyAvailable();
|
|
12
|
+
const status = getMcpRuntimeStatus();
|
|
13
|
+
const ok = status.core.resolved && status.core.docsReady;
|
|
14
|
+
console.log(JSON.stringify({ ok, ...status }, null, 2));
|
|
15
|
+
if (status.remediation.length > 0) {
|
|
16
|
+
console.error('[sky-ui-mcp] health: ok with warnings');
|
|
17
|
+
for (const line of status.remediation)
|
|
18
|
+
console.error(` - ${line}`);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.error(`[sky-ui-mcp] health: ok (@sky.ui/mcp@${status.version}, ${status.toolCount} tools)`);
|
|
22
|
+
}
|
|
23
|
+
process.exit(ok ? 0 : 1);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error('[sky-ui-mcp] health: failed');
|
|
27
|
+
console.error(err);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
startSkyUiMcpStdio().catch((err) => {
|
|
32
|
+
console.error(err);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=mcp-stdio-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio-entry.js","sourceRoot":"","sources":["../src/mcp-stdio-entry.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,6BAA6B,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW;gBAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,SAAS,SAAS,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable `code` values for MCP tool JSON error payloads (`isError: true`).
|
|
3
|
+
* Clients should branch on `code`; `error` is human-readable detail.
|
|
4
|
+
*/
|
|
5
|
+
export declare const McpErrorCode: {
|
|
6
|
+
readonly COMPONENT_DOCS_FAILED: "COMPONENT_DOCS_FAILED";
|
|
7
|
+
readonly COMPONENT_CATALOG_FAILED: "COMPONENT_CATALOG_FAILED";
|
|
8
|
+
readonly COMPONENT_SEARCH_FAILED: "COMPONENT_SEARCH_FAILED";
|
|
9
|
+
readonly COMPONENT_API_SEARCH_FAILED: "COMPONENT_API_SEARCH_FAILED";
|
|
10
|
+
readonly INSTALL_GUIDE_INVALID_FRAMEWORK: "INSTALL_GUIDE_INVALID_FRAMEWORK";
|
|
11
|
+
readonly SETUP_GUIDE_INVALID_INPUT: "SETUP_GUIDE_INVALID_INPUT";
|
|
12
|
+
readonly USAGE_SNIPPET_INVALID_FRAMEWORK: "USAGE_SNIPPET_INVALID_FRAMEWORK";
|
|
13
|
+
readonly USAGE_SNIPPET_FAILED: "USAGE_SNIPPET_FAILED";
|
|
14
|
+
readonly COMPONENT_USAGE_FAILED: "COMPONENT_USAGE_FAILED";
|
|
15
|
+
readonly UNKNOWN_COMPONENT: "UNKNOWN_COMPONENT";
|
|
16
|
+
readonly THEME_EXTRACT_FAILED: "THEME_EXTRACT_FAILED";
|
|
17
|
+
readonly THEME_CONTRACT_FAILED: "THEME_CONTRACT_FAILED";
|
|
18
|
+
readonly DOCS_READ_FAILED: "DOCS_READ_FAILED";
|
|
19
|
+
readonly REACTIVITY_INFO_FAILED: "REACTIVITY_INFO_FAILED";
|
|
20
|
+
readonly REACTIVITY_TOPICS_FAILED: "REACTIVITY_TOPICS_FAILED";
|
|
21
|
+
readonly REACTIVITY_TOPIC_FAILED: "REACTIVITY_TOPIC_FAILED";
|
|
22
|
+
readonly UTILS_SUGGESTION_FAILED: "UTILS_SUGGESTION_FAILED";
|
|
23
|
+
readonly EXAMPLE_SITE_FETCH_FAILED: "EXAMPLE_SITE_FETCH_FAILED";
|
|
24
|
+
readonly CHART_USAGE_UNKNOWN_TYPE: "CHART_USAGE_UNKNOWN_TYPE";
|
|
25
|
+
};
|
|
26
|
+
export type McpErrorCodeValue = (typeof McpErrorCode)[keyof typeof McpErrorCode];
|
|
27
|
+
export declare function mcpErrorJson(code: McpErrorCodeValue | string, error: string, extra?: Record<string, unknown>): string;
|
|
28
|
+
export declare function mcpToolErr(code: McpErrorCodeValue | string, error: string, extra?: Record<string, unknown>): {
|
|
29
|
+
content: Array<{
|
|
30
|
+
type: 'text';
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
isError: true;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=mcp-tool-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-errors.d.ts","sourceRoot":"","sources":["../src/mcp-tool-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;CAoBf,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAEjF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,iBAAiB,GAAG,MAAM,EAChC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAQR;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,iBAAiB,GAAG,MAAM,EAChC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAKnE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable `code` values for MCP tool JSON error payloads (`isError: true`).
|
|
3
|
+
* Clients should branch on `code`; `error` is human-readable detail.
|
|
4
|
+
*/
|
|
5
|
+
export const McpErrorCode = {
|
|
6
|
+
COMPONENT_DOCS_FAILED: 'COMPONENT_DOCS_FAILED',
|
|
7
|
+
COMPONENT_CATALOG_FAILED: 'COMPONENT_CATALOG_FAILED',
|
|
8
|
+
COMPONENT_SEARCH_FAILED: 'COMPONENT_SEARCH_FAILED',
|
|
9
|
+
COMPONENT_API_SEARCH_FAILED: 'COMPONENT_API_SEARCH_FAILED',
|
|
10
|
+
INSTALL_GUIDE_INVALID_FRAMEWORK: 'INSTALL_GUIDE_INVALID_FRAMEWORK',
|
|
11
|
+
SETUP_GUIDE_INVALID_INPUT: 'SETUP_GUIDE_INVALID_INPUT',
|
|
12
|
+
USAGE_SNIPPET_INVALID_FRAMEWORK: 'USAGE_SNIPPET_INVALID_FRAMEWORK',
|
|
13
|
+
USAGE_SNIPPET_FAILED: 'USAGE_SNIPPET_FAILED',
|
|
14
|
+
COMPONENT_USAGE_FAILED: 'COMPONENT_USAGE_FAILED',
|
|
15
|
+
UNKNOWN_COMPONENT: 'UNKNOWN_COMPONENT',
|
|
16
|
+
THEME_EXTRACT_FAILED: 'THEME_EXTRACT_FAILED',
|
|
17
|
+
THEME_CONTRACT_FAILED: 'THEME_CONTRACT_FAILED',
|
|
18
|
+
DOCS_READ_FAILED: 'DOCS_READ_FAILED',
|
|
19
|
+
REACTIVITY_INFO_FAILED: 'REACTIVITY_INFO_FAILED',
|
|
20
|
+
REACTIVITY_TOPICS_FAILED: 'REACTIVITY_TOPICS_FAILED',
|
|
21
|
+
REACTIVITY_TOPIC_FAILED: 'REACTIVITY_TOPIC_FAILED',
|
|
22
|
+
UTILS_SUGGESTION_FAILED: 'UTILS_SUGGESTION_FAILED',
|
|
23
|
+
EXAMPLE_SITE_FETCH_FAILED: 'EXAMPLE_SITE_FETCH_FAILED',
|
|
24
|
+
CHART_USAGE_UNKNOWN_TYPE: 'CHART_USAGE_UNKNOWN_TYPE'
|
|
25
|
+
};
|
|
26
|
+
export function mcpErrorJson(code, error, extra) {
|
|
27
|
+
const body = { code, error };
|
|
28
|
+
if (extra) {
|
|
29
|
+
for (const [k, v] of Object.entries(extra)) {
|
|
30
|
+
if (v !== undefined)
|
|
31
|
+
body[k] = v;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return JSON.stringify(body, null, 2);
|
|
35
|
+
}
|
|
36
|
+
export function mcpToolErr(code, error, extra) {
|
|
37
|
+
return {
|
|
38
|
+
content: [{ type: 'text', text: mcpErrorJson(code, error, extra) }],
|
|
39
|
+
isError: true
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=mcp-tool-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-errors.js","sourceRoot":"","sources":["../src/mcp-tool-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,qBAAqB,EAAE,uBAAuB;IAC9C,wBAAwB,EAAE,0BAA0B;IACpD,uBAAuB,EAAE,yBAAyB;IAClD,2BAA2B,EAAE,6BAA6B;IAC1D,+BAA+B,EAAE,iCAAiC;IAClE,yBAAyB,EAAE,2BAA2B;IACtD,+BAA+B,EAAE,iCAAiC;IAClE,oBAAoB,EAAE,sBAAsB;IAC5C,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;IACpD,uBAAuB,EAAE,yBAAyB;IAClD,uBAAuB,EAAE,yBAAyB;IAClD,yBAAyB,EAAE,2BAA2B;IACtD,wBAAwB,EAAE,0BAA0B;CAC5C,CAAC;AAIX,MAAM,UAAU,YAAY,CAC1B,IAAgC,EAChC,KAAa,EACb,KAA+B;IAE/B,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACtD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAgC,EAChC,KAAa,EACb,KAA+B;IAE/B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
/** Structured component reference documentation (CEM-style fields where applicable). */
|
|
3
|
+
export type ComponentDocumentation = {
|
|
4
|
+
schemaVersion: 1;
|
|
5
|
+
/** Whether docs came from dist/custom-elements.json (CEM) or TypeScript AST */
|
|
6
|
+
dataSource?: 'cem' | 'ast';
|
|
7
|
+
/** Folder / export name, e.g. sky-button */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Custom element tag from @customElement */
|
|
10
|
+
tagName: string;
|
|
11
|
+
npmImport?: string;
|
|
12
|
+
sourceFile: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
/** @element */
|
|
15
|
+
element?: string;
|
|
16
|
+
/** @summary */
|
|
17
|
+
summary?: string;
|
|
18
|
+
/** @status */
|
|
19
|
+
status?: string;
|
|
20
|
+
/** @since */
|
|
21
|
+
since?: string;
|
|
22
|
+
/** @documentation URL */
|
|
23
|
+
documentation?: string;
|
|
24
|
+
slots: {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
}[];
|
|
28
|
+
properties: {
|
|
29
|
+
name: string;
|
|
30
|
+
type?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
}[];
|
|
33
|
+
cssParts: {
|
|
34
|
+
name: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
}[];
|
|
37
|
+
events: {
|
|
38
|
+
name: string;
|
|
39
|
+
type?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
}[];
|
|
42
|
+
methods: {
|
|
43
|
+
name: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
params: {
|
|
46
|
+
name: string;
|
|
47
|
+
type?: string;
|
|
48
|
+
optional?: boolean;
|
|
49
|
+
description?: string;
|
|
50
|
+
}[];
|
|
51
|
+
returns?: {
|
|
52
|
+
type?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
};
|
|
55
|
+
}[];
|
|
56
|
+
/** Named TS types referenced by extracted API types (flattened where possible) */
|
|
57
|
+
typeDefinitions?: Array<{
|
|
58
|
+
name: string;
|
|
59
|
+
kind: 'typeAlias' | 'interface';
|
|
60
|
+
definition: string;
|
|
61
|
+
}>;
|
|
62
|
+
/** @example bodies (trimmed) */
|
|
63
|
+
examples: {
|
|
64
|
+
source: string;
|
|
65
|
+
}[];
|
|
66
|
+
/** Tags we do not map to first-class fields */
|
|
67
|
+
miscTags: {
|
|
68
|
+
tag: string;
|
|
69
|
+
text: string;
|
|
70
|
+
}[];
|
|
71
|
+
/** Leading trivia before class (JSDoc + decorators) for debugging */
|
|
72
|
+
rawLeadTrivia?: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Prefer the better human description when both CEM and JSDoc supply text.
|
|
76
|
+
* CEM summaries are often terse; JSDoc next to `@property` / `@event` is usually richer—use length + tie-break to AST.
|
|
77
|
+
*/
|
|
78
|
+
export declare function pickRicherDescription(cemDesc: string | undefined, astDesc: string | undefined): string | undefined;
|
|
79
|
+
/** Prefer the more specific / documented type (e.g. `CustomEvent<Foo>` over `Event` or empty). */
|
|
80
|
+
export declare function pickRicherPropertyOrEventType(a: string | undefined, b: string | undefined): string | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* When CEM is the primary source, it often omits or weakly types `events` / `properties`,
|
|
83
|
+
* or carries shorter descriptions than JSDoc.
|
|
84
|
+
* Merge with the AST (JSDoc) list: union by `name`, richer type via {@link pickRicherPropertyOrEventType},
|
|
85
|
+
* richer description via {@link pickRicherDescription}, keep CEM order then append AST-only.
|
|
86
|
+
*/
|
|
87
|
+
export declare function mergeCemWithAstEventLists(cem: ComponentDocumentation['events'], ast: ComponentDocumentation['events']): ComponentDocumentation['events'];
|
|
88
|
+
export declare function mergeCemWithAstPropertyLists(cem: ComponentDocumentation['properties'], ast: ComponentDocumentation['properties']): ComponentDocumentation['properties'];
|
|
89
|
+
type NameDesc = {
|
|
90
|
+
name: string;
|
|
91
|
+
description?: string;
|
|
92
|
+
};
|
|
93
|
+
/** Merge slots or cssParts: union by `name`, enrich descriptions (same rules as props/events). */
|
|
94
|
+
export declare function mergeCemWithAstSlotLikeLists(cem: NameDesc[], ast: NameDesc[]): NameDesc[];
|
|
95
|
+
export declare function collectNamedTypeDefinitions(sf: ts.SourceFile, doc: ComponentDocumentation): ComponentDocumentation['typeDefinitions'];
|
|
96
|
+
/**
|
|
97
|
+
* Parse a Lit core component `.ts` file and return structured documentation from JSDoc + `@customElement`.
|
|
98
|
+
*/
|
|
99
|
+
export declare function parseLitComponentDocumentation(sourceFilePath: string, sourceText: string, componentFolderName: string, npmImport?: string, options?: {
|
|
100
|
+
maxCharsPerExample?: number;
|
|
101
|
+
}): {
|
|
102
|
+
ok: true;
|
|
103
|
+
doc: ComponentDocumentation;
|
|
104
|
+
truncated: boolean;
|
|
105
|
+
} | {
|
|
106
|
+
ok: false;
|
|
107
|
+
error: string;
|
|
108
|
+
};
|
|
109
|
+
/** Lightweight summary for search (parses full file; reuse parseLitComponentDocumentation). */
|
|
110
|
+
export declare function parseSummaryOnly(sourceFilePath: string, sourceText: string, componentFolderName: string): string | null;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=parse-component-ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-component-ast.d.ts","sourceRoot":"","sources":["../src/parse-component-ast.ts"],"names":[],"mappings":"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"}
|