aui-mcp-server 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.
Files changed (62) hide show
  1. package/README.md +122 -0
  2. package/dist/cli.cjs +1088 -0
  3. package/dist/cli.cjs.map +1 -0
  4. package/dist/cli.d.cts +1 -0
  5. package/dist/cli.d.ts +1 -0
  6. package/dist/cli.js +1076 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client/index.cjs +619 -0
  9. package/dist/client/index.cjs.map +1 -0
  10. package/dist/client/index.d.cts +194 -0
  11. package/dist/client/index.d.ts +194 -0
  12. package/dist/client/index.js +584 -0
  13. package/dist/client/index.js.map +1 -0
  14. package/dist/index.cjs +1053 -0
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/index.d.cts +163 -0
  17. package/dist/index.d.ts +163 -0
  18. package/dist/index.js +1036 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/rsbuild.cjs +1049 -0
  21. package/dist/rsbuild.cjs.map +1 -0
  22. package/dist/rsbuild.d.cts +12 -0
  23. package/dist/rsbuild.d.ts +12 -0
  24. package/dist/rsbuild.js +1038 -0
  25. package/dist/rsbuild.js.map +1 -0
  26. package/dist/rspack.cjs +1016 -0
  27. package/dist/rspack.cjs.map +1 -0
  28. package/dist/rspack.d.cts +40 -0
  29. package/dist/rspack.d.ts +40 -0
  30. package/dist/rspack.js +1005 -0
  31. package/dist/rspack.js.map +1 -0
  32. package/dist/server.cjs +304 -0
  33. package/dist/server.cjs.map +1 -0
  34. package/dist/server.d.cts +16 -0
  35. package/dist/server.d.ts +16 -0
  36. package/dist/server.js +297 -0
  37. package/dist/server.js.map +1 -0
  38. package/package.json +72 -0
  39. package/src/catalog/build.ts +89 -0
  40. package/src/catalog/entry.ts +183 -0
  41. package/src/catalog/parser.ts +173 -0
  42. package/src/catalog/tool_parser.ts +145 -0
  43. package/src/cli.ts +318 -0
  44. package/src/client/handshake.ts +166 -0
  45. package/src/client/index.ts +6 -0
  46. package/src/client/registry.tsx +184 -0
  47. package/src/client/types.ts +136 -0
  48. package/src/client/useA2UIStream.ts +378 -0
  49. package/src/client/useLogger.ts +147 -0
  50. package/src/generator.ts +100 -0
  51. package/src/index.ts +17 -0
  52. package/src/mcp-app-poc.html +69 -0
  53. package/src/poc.ts +88 -0
  54. package/src/rsbuild.ts +46 -0
  55. package/src/rspack.ts +282 -0
  56. package/src/server.ts +391 -0
  57. package/src/templates.ts +51 -0
  58. package/src/types.ts +195 -0
  59. package/src/utils.ts +29 -0
  60. package/test.js +16 -0
  61. package/tsconfig.json +19 -0
  62. package/tsup.config.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalog/tool_parser.ts","../src/catalog/entry.ts","../src/catalog/parser.ts","../src/catalog/build.ts","../src/utils.ts","../src/templates.ts","../src/generator.ts","../src/server.ts","../src/cli.ts"],"names":["isAbsolute","join","existsSync","readFileSync","dirname","fs","esbuild","path","fileURLToPath","init","loadRemote","Server","ListToolsRequestSchema","CallToolRequestSchema","chokidar","StdioServerTransport","http","SSEServerTransport","process"],"mappings":"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","file":"cli.cjs","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, isAbsolute } from 'node:path';\n\nexport interface ParsedToolLogic {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n /** Absolute path to the local logic file (if resolved). */\n logicFilePath: string;\n}\n\n/**\n * A simple regex-based tool logic parser for AUI-X.\n *\n * Responsibilities:\n * - Resolve a TS/JS file from a logicFilePath hint\n * - Parse JSDoc description\n * - Infer a minimal JSON-schema-like parameters shape from the\n * loader function's argument type\n *\n * NOTE: This function no longer infers or records any HTTP endpoint.\n * Endpoint routing is now owned by the MCP server, which executes\n * MF loaders directly via the Module Federation runtime.\n */\nexport function parseToolLogic(\n toolName: string,\n logicFilePath: string,\n baseDir: string\n): ParsedToolLogic | null {\n // 1. Resolve file path\n let targetPath = '';\n const extensions = ['.ts', '.tsx', '.js', '.jsx'];\n \n // Try absolute or relative\n const absPath = isAbsolute(logicFilePath) ? logicFilePath : join(baseDir, logicFilePath);\n for (const ext of ['', ...extensions]) {\n if (existsSync(absPath + ext)) {\n targetPath = absPath + ext;\n break;\n }\n }\n\n if (!targetPath) {\n console.error(`[AUI-X] Tool logic file not found: ${logicFilePath} (base: ${baseDir})`);\n return null;\n }\n\n const content = readFileSync(targetPath, 'utf-8');\n\n // 2. Extract description (JSDoc before the function)\n let description = `Automatically generated tool for ${toolName}.`;\n \n let jsdocContent = '';\n let paramsContent = '';\n let finalToolName = toolName;\n\n // Search for ANY block that contains @tool\n const jsdocRegex = /\\/\\*\\*([\\s\\S]*?)\\*\\/[\\s\\S]*?(?:export\\s+)?(?:async\\s+)?function\\s+(\\w+)/g;\n let match;\n \n while ((match = jsdocRegex.exec(content)) !== null) {\n const block = match[1]!;\n const funcName = match[2]!;\n \n // Pattern A: Manually specified @tool\n const toolMatch = block.match(/@tool\\s+(\\w+)/);\n if (toolMatch) {\n // If we are looking for a specific tool name, check if it matches\n // Or if we are looking for the 'loader' default, take the first @tool we find in the loader file\n if (toolMatch[1] === toolName || toolName.includes('artistevents') || toolName.endsWith('_data')) {\n jsdocContent = block;\n finalToolName = toolMatch[1]!;\n \n const pRegex = new RegExp(`(?:export\\\\s+)?(?:async\\\\s+)?function\\\\s+${funcName}\\\\s*\\\\(\\\\s*(?:args|\\\\{[\\\\s\\\\S]*?\\\\}|)\\\\s*:\\\\s*\\\\{([\\\\s\\\\S]*?)\\\\}\\\\s*\\\\)`, 'm');\n const pMatch = content.match(pRegex);\n if (pMatch) {\n paramsContent = pMatch[1] || '';\n }\n break;\n }\n }\n \n // Pattern B: Default MF 2.0 loader (if no @tool tag found yet)\n if (funcName === 'loader' && !jsdocContent) {\n jsdocContent = block;\n const pRegex = /(?:export\\s+)?(?:async\\s+)?function\\s+loader\\s*\\(\\s*(?:args|\\{[\\s\\S]*?\\}|)\\s*:\\s*\\{([\\s\\S]*?)\\}\\s*\\)/m;\n const pMatch = content.match(pRegex);\n if (pMatch) {\n paramsContent = pMatch[1] || '';\n }\n }\n }\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n if (jsdocContent) {\n // Check if there is an @description override in JSDoc\n const descriptionOverride = jsdocContent.match(/@description\\s+([^\\n@]+)/);\n if (descriptionOverride?.[1]) {\n description = descriptionOverride[1].trim();\n } else {\n description = jsdocContent\n .split('\\n')\n .map(l => l.replace(/^\\s*\\*\\s?/, '').trim())\n .filter(l => l && !l.startsWith('@') && !l.startsWith('/') && !l.endsWith('/'))\n .join('\\n') // keep line breaks first\n .trim();\n \n // If the extracted description still contains @tool-like remnants, clean it again\n // (helps with some non-standard JSDoc indentation).\n description = description.split('\\n').filter(l => !l.trim().startsWith('@')).join(' ').trim();\n }\n \n // Parse parameters\n if (paramsContent) {\n const fields = paramsContent.split(',').map(f => f.trim()).filter(Boolean);\n for (const field of fields) {\n const fieldMatch = field.match(/^(\\w+)(\\??):\\s*(\\w+)/);\n if (fieldMatch) {\n const name = fieldMatch[1]!;\n const optional = fieldMatch[2] === '?';\n const rawType = fieldMatch[3]!;\n let type = 'string';\n if (rawType === 'number') type = 'number';\n if (rawType === 'boolean') type = 'boolean';\n properties[name] = { type };\n if (!optional) required.push(name);\n }\n }\n }\n\n }\n\n return {\n name: finalToolName,\n description,\n logicFilePath: targetPath,\n parameters: {\n type: 'object',\n properties,\n required: required.length > 0 ? required : undefined,\n } as any,\n };\n}\n","import type {\n AuiXCatalogEntry,\n AuiXLoaderConfig,\n AuiXToolDefinition,\n PropDefinition,\n RemoteContext,\n} from '../types';\nimport { join, dirname } from 'node:path';\nimport { parseToolLogic } from './tool_parser';\n\nfunction propsToSchemaProperties(props: PropDefinition[]): AuiXCatalogEntry['properties'] {\n const result: AuiXCatalogEntry['properties'] = {};\n\n for (const prop of props) {\n result[prop.name] = {\n type: 'object',\n ...(prop.description ? { description: prop.description } : {}),\n properties: {\n literalString: { type: 'string' },\n path: { type: 'string' },\n },\n };\n }\n\n return result;\n}\n\nfunction getRequiredProps(props: PropDefinition[]): string[] {\n return props.filter((p) => !p.optional).map((p) => p.name);\n}\n\nfunction buildXLoader(ctx: RemoteContext): AuiXLoaderConfig {\n return {\n type: 'module-federation',\n url: ctx.remoteEntryUrl,\n scope: ctx.stats.id,\n module: ctx.expose.path,\n };\n}\n\nfunction buildFallbackExample(ctx: RemoteContext): unknown {\n const surfaceId = `${ctx.componentName.toLowerCase()}-surface-1`;\n const componentId = `${ctx.componentName.toLowerCase()}-card`;\n\n const required = getRequiredProps(ctx.props);\n const propsPayload: Record<string, unknown> = {};\n for (const name of required) {\n propsPayload[name] = { literalString: `<!-- ${name} -->` };\n }\n\n return [\n {\n beginRendering: {\n surfaceId,\n root: 'root-column',\n },\n },\n {\n surfaceUpdate: {\n surfaceId,\n components: [\n {\n id: 'root-column',\n component: {\n Column: {\n children: { explicitList: [componentId] },\n },\n },\n },\n {\n id: componentId,\n component: {\n [ctx.componentName]: propsPayload,\n },\n },\n ],\n },\n },\n ];\n}\n\nexport function generateCatalogEntry(ctx: RemoteContext): AuiXCatalogEntry {\n const schemaProps = propsToSchemaProperties(ctx.props);\n const required = getRequiredProps(ctx.props);\n\n // ─── A2UI v0.9 Actions (Custom Props) ──────────────────────────────────────\n // Convert `@action` tags into Action properties in the schema.\n if (ctx.jsdoc.actions && ctx.jsdoc.actions.length > 0) {\n for (const actionDef of ctx.jsdoc.actions) {\n const propName = `${actionDef.name}Action`;\n const desc = actionDef.description\n ? `${actionDef.description}${actionDef.replyWith ? ` (Expected reply: ${actionDef.replyWith})` : ''}`\n : `Trigger server event: ${actionDef.name}`;\n\n schemaProps[propName] = {\n type: 'object',\n description: desc,\n properties: {\n name: { type: 'string' },\n context: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n key: { type: 'string' },\n value: { type: 'object' },\n },\n required: ['key', 'value'],\n },\n },\n },\n required: ['name'],\n };\n }\n }\n\n const entry: AuiXCatalogEntry = {\n type: 'object',\n description: ctx.jsdoc.description ?? `AUI-X MF Remote component: ${ctx.componentName}.`,\n properties: schemaProps,\n ...(required.length > 0 ? { required } : {}),\n 'x-loader': buildXLoader(ctx),\n 'x-example': ctx.jsdoc.example ?? buildFallbackExample(ctx),\n ...(ctx.jsdoc.authRequired !== undefined\n ? { 'x-auth-required': ctx.jsdoc.authRequired }\n : {}),\n ...(ctx.jsdoc.fallback ? { 'x-fallback': ctx.jsdoc.fallback } : {}),\n };\n\n // ─── x-tools wiring ───────────────────────────────────────────────────────\n // 1) Prefer explicit `@tool <toolName> <logicFile>` tags.\n const xTools: AuiXToolDefinition[] = [];\n\n if (ctx.jsdoc.tools && ctx.jsdoc.tools.length > 0) {\n for (const tool of ctx.jsdoc.tools) {\n const sourceFile = ctx.expose.file;\n const baseDir = join(process.cwd(), dirname(sourceFile));\n\n const parsed = parseToolLogic(tool.name, tool.logicFile, baseDir);\n\n if (parsed && ctx.loaderExpose?.path) {\n xTools.push({\n name: parsed.name,\n description: parsed.description,\n loader: ctx.loaderExpose.path,\n parameters: parsed.parameters,\n logicFilePath: parsed.logicFilePath,\n });\n }\n }\n }\n\n // 2) Auto-detect MF 2.0 data loader as a tool.\n if (ctx.loaderExpose) {\n const loaderFile = ctx.loaderExpose.file;\n const baseDir = process.cwd();\n\n // Auto-generated tool naming convention: get_<ComponentName>_data\n const defaultToolName = `get_${ctx.componentName.toLowerCase()}_data`;\n\n const parsed = parseToolLogic(defaultToolName, loaderFile, baseDir);\n\n if (parsed) {\n // If the loader file defines an explicit `@tool`, `parseToolLogic` returns that tool name.\n // Only add it when not duplicated.\n if (!xTools.find(t => t.name === parsed.name || t.logicFilePath === parsed.logicFilePath)) {\n xTools.push({\n name: parsed.name,\n description: parsed.description,\n loader: ctx.loaderExpose.path,\n parameters: parsed.parameters,\n logicFilePath: parsed.logicFilePath,\n });\n }\n }\n }\n\n if (xTools.length > 0) {\n entry['x-tools'] = xTools;\n }\n\n return entry;\n}\n","import type { AuiJsDocTags, PropDefinition } from '../types';\n\n/**\n * Parse the first JSDoc block that contains `@aui-component`.\n */\nexport function parseJsDoc(dtsContent: string): AuiJsDocTags {\n const jsdocBlockRegex = /\\/\\*\\*([\\s\\S]*?)\\*\\//g;\n let targetBlock: string | null = null;\n\n for (const match of dtsContent.matchAll(jsdocBlockRegex)) {\n const block = match[1];\n if (block?.includes('@aui-component')) {\n targetBlock = block;\n break;\n }\n }\n\n if (!targetBlock) {\n return { isAuiComponent: false };\n }\n\n const result: AuiJsDocTags = { isAuiComponent: true };\n\n const lines = targetBlock\n .split('\\n')\n .map((l) => l.replace(/^\\s*\\*\\s?/, '').trimEnd());\n\n const descMatch = lines.find((l) => l.startsWith('@description'));\n if (descMatch) {\n result.description = descMatch.replace('@description', '').trim();\n }\n\n const authMatch = lines.find((l) => l.startsWith('@auth-required'));\n if (authMatch) {\n const val = authMatch.replace('@auth-required', '').trim().toLowerCase();\n result.authRequired = val === 'true';\n }\n\n const fallbackMatch = lines.find((l) => l.startsWith('@fallback'));\n if (fallbackMatch) {\n result.fallback = fallbackMatch.replace('@fallback', '').trim();\n }\n\n const exampleStartIdx = lines.findIndex((l) => l.startsWith('@example'));\n if (exampleStartIdx !== -1) {\n const exampleLine = lines[exampleStartIdx];\n if (exampleLine) {\n const exampleFirstLine = exampleLine.replace('@example', '').trim();\n\n const continuationLines: string[] = [];\n for (let i = exampleStartIdx + 1; i < lines.length; i++) {\n const l = lines[i];\n if (!l) break;\n if (/^@\\w/.test(l)) break;\n if (l && !/^[\\s[\\]{},\"'0-9\\-+tfn]/.test(l)) break;\n continuationLines.push(l);\n }\n\n const rawJson = [exampleFirstLine, ...continuationLines].join('\\n').trim();\n if (rawJson) {\n try {\n result.example = JSON.parse(rawJson);\n } catch {\n // keep silent and fallback later\n }\n }\n }\n }\n\n // ── @tool parsing ─────────────────────────────────────────────────────────\n // Supported syntax:\n // @tool <toolName> <logicFile>\n // Example:\n // @tool get_concert_tours ./getConcertTours\n const toolLines = lines.filter((l) => l.startsWith('@tool '));\n if (toolLines.length > 0) {\n result.tools = toolLines.map((l) => {\n const parts = l.replace('@tool', '').trim().split(/\\s+/);\n return {\n name: parts[0] ?? '',\n logicFile: parts[1] ?? '',\n };\n });\n }\n\n // ── @action parsing ───────────────────────────────────────────────────────\n // Supported syntax:\n // @action name=\"wish_more_shows\" replyWith=\"WishShowForm\" contextKeys=\"artist,region\" description=\"Wish for more tour shows\"\n const actionLines = lines.filter((l) => l.startsWith('@action '));\n if (actionLines.length > 0) {\n result.actions = actionLines.map((l) => {\n const raw = l.replace('@action', '').trim();\n const action: any = {};\n const pairs = raw.match(/(\\w+)=\"([^\"]*)\"/g) || [];\n for (const p of pairs) {\n const [k, v] = p.split('=\"');\n const key = k?.trim();\n const val = v?.replace(/\"$/, '');\n if (key === 'name') action.name = val;\n if (key === 'description') action.description = val;\n if (key === 'replyWith') action.replyWith = val;\n if (key === 'contextKeys') action.contextKeys = val?.split(',').map((s: string) => s.trim());\n }\n return action;\n });\n }\n\n return result;\n}\n\nexport function needsJsDocFill(dtsContent: string): boolean {\n return !dtsContent.includes('@aui-component');\n}\n\n/**\n * Parse props interface in compiled d.ts.\n */\nexport function parsePropsInterface(dtsContent: string, componentName: string): PropDefinition[] {\n const patterns = [\n new RegExp(`interface\\\\s+${componentName}Properties\\\\s*\\\\{([\\\\s\\\\S]*?)\\\\}`, 'm'),\n new RegExp(`interface\\\\s+${componentName}Props\\\\s*\\\\{([\\\\s\\\\S]*?)\\\\}`, 'm'),\n ];\n\n let interfaceBody: string | null = null;\n for (const pattern of patterns) {\n const m = dtsContent.match(pattern);\n const body = m?.[1];\n if (body) {\n interfaceBody = body;\n break;\n }\n }\n\n if (!interfaceBody) {\n return [];\n }\n\n // Handle nesting: node { properties { ... } }\n // In the AUI spec, actual props are defined under `node.properties`.\n const nodeMatch = interfaceBody.match(/node\\s*:\\s*\\{\\s*properties\\s*:\\s*\\{([\\s\\S]*?)\\}\\s*\\}/m);\n if (nodeMatch) {\n interfaceBody = nodeMatch[1]!;\n }\n\n const props: PropDefinition[] = [];\n // A more tolerant regex for matching nested property definitions in the AUI shape.\n const fieldRegex = /^\\s*(\\w+)(\\??):\\s*([\\s\\S]+?)(?:;|$)/;\n\n const reserved = ['node', 'properties', 'literalString', 'path'];\n\n for (const line of interfaceBody.split('\\n')) {\n const m = line.match(fieldRegex);\n if (!m) continue;\n\n const name = m[1];\n if (!name || (nodeMatch && reserved.includes(name))) continue;\n\n const questionMark = m[2];\n let rawType = m[3]?.trim() ?? '';\n\n // If the type is an inline object definition, simplify it to 'object'.\n if (rawType.startsWith('{')) {\n rawType = 'object';\n }\n\n const optional = questionMark === '?';\n const type = rawType;\n\n props.push({ name, type, optional });\n }\n\n return props;\n}\n","import type { AuiXCatalog, MfStats, RemoteContext } from '../types';\nimport { generateCatalogEntry } from './entry';\nimport { needsJsDocFill, parseJsDoc, parsePropsInterface } from './parser';\n\nexport interface CatalogBuildIssue {\n componentName?: string;\n message: string;\n detail?: string;\n}\n\nexport interface BuildCatalogFromStatsOptions {\n /** Parsed mf-stats.json */\n stats: MfStats;\n /** Read compiled type file for given component name */\n readCompiledTypes: (componentName: string) => string | undefined;\n}\n\nexport interface BuildCatalogFromStatsResult {\n catalog: AuiXCatalog;\n issues: CatalogBuildIssue[];\n /** Components missing @aui-component JSDoc */\n missingJsdocComponents: string[];\n}\n\nexport function buildCatalogFromStats(options: BuildCatalogFromStatsOptions): BuildCatalogFromStatsResult {\n const { stats, readCompiledTypes } = options;\n\n const catalog: AuiXCatalog = {};\n const issues: CatalogBuildIssue[] = [];\n const missingJsdocComponents: string[] = [];\n\n const { publicPath, remoteEntry } = stats.metaData;\n // Prefer MF manifest over remoteEntry.js for runtime loading.\n // Keep it co-located with remoteEntry in the same output directory.\n const remoteEntryUrl =\n publicPath.replace(/\\/$/, '') + '/' + [remoteEntry.path, 'mf-manifest.json'].filter(Boolean).join('/');\n\n const loaderExposes = stats.exposes.filter((e) => e.path.endsWith('.data'));\n const componentExposes = stats.exposes.filter((e) => !e.path.endsWith('.data'));\n\n for (const expose of componentExposes) {\n const componentName = expose.name;\n const loaderExpose = loaderExposes.find((le) => le.path === `${expose.path}.data`);\n\n // Note: In dev mode, MF type generation may run in parallel with the build.\n // Prefer generating the catalog in MF's `dts.generateTypes.afterGenerate` hook (so compiled d.ts are ready)\n // to avoid races where the first build misses type files.\n const dtsContent = readCompiledTypes(componentName);\n if (!dtsContent) {\n issues.push({ componentName, message: 'Missing compiled d.ts for component' });\n continue;\n }\n\n if (needsJsDocFill(dtsContent)) {\n missingJsdocComponents.push(componentName);\n issues.push({\n componentName,\n message: 'Missing @aui-component JSDoc (use skills/aui-jsdoc-gen)',\n });\n continue;\n }\n\n const jsdoc = parseJsDoc(dtsContent);\n const props = parsePropsInterface(dtsContent, componentName);\n\n const ctx: RemoteContext = {\n stats,\n expose,\n jsdoc,\n props,\n componentName,\n remoteEntryUrl,\n loaderExpose,\n };\n\n try {\n catalog[componentName] = generateCatalogEntry(ctx);\n } catch (err) {\n console.error(`[AUI-X] Failed to generate catalog entry for ${componentName}:`, err);\n issues.push({\n componentName,\n message: 'Failed to generate catalog entry',\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n return { catalog, issues, missingJsdocComponents };\n}\n","import { promises as fs } from 'node:fs';\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJsonFile<T>(filePath: string): Promise<T> {\n const raw = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(raw) as T;\n}\n\nexport function toSnakeCase(input: string): string {\n return input\n .trim()\n .replace(/[\\s-]+/g, '_')\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/_+/g, '_')\n .toLowerCase();\n}\n\nexport function toToolName(componentName: string): string {\n return `get_${toSnakeCase(componentName)}`;\n}\n","export function buildServerSource(): string {\n // NOTE: This file is meant to be bundled by esbuild in the generator.\n // It reads manifest.json next to itself.\n return `import { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst manifestPath = process.env.AUI_MCP_MANIFEST ?? join(__dirname, 'manifest.json');\nconst manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n\nconst server = new Server(\n { name: 'aui-x-catalog', version: '0.1.0' },\n { capabilities: { tools: {} } }\n);\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: (manifest.tools ?? []).map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema ?? { type: 'object', properties: {}, required: [] },\n })),\n };\n});\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const toolName = request.params?.name;\n const tool = (manifest.tools ?? []).find((t) => t.name === toolName);\n if (!tool) {\n throw new Error('Tool not found: ' + toolName);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(tool.entry, null, 2),\n },\n ],\n };\n});\n\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\n`;\n}\n","import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport esbuild from 'esbuild';\n\nimport type {\n AuiMcpManifest,\n AuiXCatalog,\n GenerateAuiMcpAssetsOptions,\n GenerateAuiMcpAssetsResult,\n} from './types';\nimport { fileExists, readJsonFile, toToolName } from './utils';\nimport { buildServerSource } from './templates';\n\nfunction assertCatalogShape(catalog: unknown): asserts catalog is AuiXCatalog {\n if (!catalog || typeof catalog !== 'object' || Array.isArray(catalog)) {\n throw new Error('Invalid aui-x-catalog.json: expected an object');\n }\n}\n\nasync function loadCatalog(options: GenerateAuiMcpAssetsOptions): Promise<AuiXCatalog> {\n const catalogPath = options.catalogPath ?? 'aui-x-catalog.json';\n if (!(await fileExists(catalogPath))) {\n throw new Error(`catalog not found: ${catalogPath}`);\n }\n const catalog = await readJsonFile<unknown>(catalogPath);\n assertCatalogShape(catalog);\n return catalog;\n}\n\nexport function buildAuiMcpManifest(catalog: AuiXCatalog): AuiMcpManifest {\n const tools = Object.entries(catalog).map(([componentName, entry]) => {\n return {\n name: toToolName(componentName),\n componentName,\n description: entry.description,\n inputSchema: { type: 'object', properties: {}, required: [] },\n entry,\n };\n });\n\n return {\n schemaVersion: 1,\n tools,\n };\n}\n\nexport async function bundleAuiMcpServer(): Promise<string> {\n const serverSource = buildServerSource();\n\n const result = await esbuild.build({\n stdin: {\n contents: serverSource,\n // Resolve from package root so pnpm symlinked deps can be bundled.\n resolveDir: path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'),\n sourcefile: 'aui-mcp-server.generated.ts',\n loader: 'ts',\n },\n bundle: true,\n platform: 'node',\n format: 'esm',\n target: 'node18',\n write: false,\n outfile: 'server.mjs',\n sourcemap: false,\n logLevel: 'silent',\n });\n\n const outputFile = result.outputFiles?.[0];\n if (!outputFile) {\n throw new Error('Failed to bundle MCP server');\n }\n\n return outputFile.text;\n}\n\nexport async function generateAuiMcpAssets(\n options: GenerateAuiMcpAssetsOptions = {}\n): Promise<GenerateAuiMcpAssetsResult> {\n const outDir = options.outDir ?? 'dist';\n const mcpDirname = options.mcpDirname ?? 'mcp';\n const mcpDir = path.join(outDir, mcpDirname);\n\n const catalog = await loadCatalog(options);\n const manifest = buildAuiMcpManifest(catalog);\n\n await fs.mkdir(mcpDir, { recursive: true });\n\n const manifestPath = path.join(mcpDir, 'manifest.json');\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\n\n let serverPath: string | undefined;\n if (options.emitServer !== false) {\n serverPath = path.join(mcpDir, 'server.mjs');\n const serverCode = await bundleAuiMcpServer();\n await fs.writeFile(serverPath, serverCode, 'utf-8');\n }\n\n return { manifestPath, serverPath };\n}\n","import http from 'node:http';\nimport { promises as fs } from 'node:fs';\n\nimport chokidar from 'chokidar';\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n type Tool,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { init, loadRemote } from '@module-federation/runtime';\n\n// In Node.js there is no `self` global by default, but many MF remoteEntry\n// bundles still reference it (especially browser-first builds). Polyfill it so\n// MF runtime can eval remoteEntry safely.\nconst __mfGlobal = globalThis as any;\nif (typeof __mfGlobal.self === 'undefined') __mfGlobal.self = __mfGlobal;\nif (typeof __mfGlobal.window === 'undefined') __mfGlobal.window = __mfGlobal;\n\nimport type { AuiMcpManifest, AuiXCatalog, AuiXToolDefinition } from './types';\nimport { readJsonFile, toToolName } from './utils';\n\nexport type TransportType = 'stdio' | 'sse';\n\nexport interface ServeAuiMcpServerOptions {\n /** If provided, server will load tools from manifest.json (recommended for prod) */\n manifestPath?: string;\n /** If provided, server will derive tools from aui-x-catalog.json (recommended for dev) */\n catalogPath?: string;\n /** Enable hot reload for manifest/catalog */\n watch?: boolean;\n /** Transport type */\n transport?: TransportType;\n /** SSE port (only for transport=sse) */\n port?: number;\n}\n\nconst EMPTY_INPUT_SCHEMA: Tool['inputSchema'] = {\n type: 'object',\n properties: {},\n required: [],\n};\n\nasync function loadManifestFromFile(manifestPath: string): Promise<AuiMcpManifest> {\n const manifest = await readJsonFile<AuiMcpManifest>(manifestPath);\n if (!manifest || typeof manifest !== 'object' || (manifest as any).schemaVersion !== 1) {\n throw new Error(`Invalid manifest: ${manifestPath}`);\n }\n return manifest;\n}\n\nasync function loadManifestFromCatalog(catalogPath: string): Promise<AuiMcpManifest> {\n const catalog = await readJsonFile<AuiXCatalog>(catalogPath);\n if (!catalog || typeof catalog !== 'object' || Array.isArray(catalog)) {\n throw new Error(`Invalid aui-x-catalog.json: ${catalogPath}`);\n }\n\n return {\n schemaVersion: 1,\n tools: Object.entries(catalog).map(([componentName, entry]) => ({\n name: toToolName(componentName),\n componentName,\n description: entry.description,\n inputSchema: EMPTY_INPUT_SCHEMA,\n entry,\n })),\n };\n}\n\nfunction buildToolMap(manifest: AuiMcpManifest): Map<string, (typeof manifest.tools)[number]> {\n const map = new Map<string, (typeof manifest.tools)[number]>();\n for (const tool of manifest.tools ?? []) {\n map.set(tool.name, tool);\n }\n return map;\n}\n\nasync function executeCatalogTool(\n manifest: AuiMcpManifest,\n toolName: string,\n args: unknown\n): Promise<{ ok: true; value: unknown } | { ok: false; message: string }> {\n const tools = buildToolMap(manifest);\n const tool = tools.get(toolName);\n\n if (!tool) {\n return { ok: false, message: `Tool not found: ${toolName}` };\n }\n\n const entry = tool.entry;\n const xLoader = entry['x-loader'];\n const xTools = (entry['x-tools'] ?? []) as AuiXToolDefinition[];\n\n if (!xLoader) {\n return { ok: false, message: `No x-loader config for tool: ${toolName}` };\n }\n\n if (!xTools.length) {\n return { ok: false, message: `No x-tools defined for component: ${tool.componentName}` };\n }\n\n const selectedTool = xTools.find((t) => t.name === toolName) ?? xTools[0];\n\n if (!selectedTool) {\n return { ok: false, message: `No matching x-tools entry for tool: ${toolName}` };\n }\n\n // Prefer MF remote loader when loader path is present; otherwise fall back to local logic file.\n const loaderPath = selectedTool.loader.slice(2); // Remove \"./\" prefix \n const logicFilePath = selectedTool.logicFilePath;\n\n try {\n const inputArgs = (args && typeof args === 'object') ? (args as Record<string, unknown>) : {};\n\n // MF 2.0 remote loader path (e.g. \"./ArtistEvents.data\")\n if (loaderPath) {\n const scope = xLoader.scope;\n const remoteEntryUrl = xLoader.url;\n\n // Initialize MF runtime for this remote; repeated init calls are tolerated.\n try {\n init({\n name: 'aui-mcp-mf-host',\n remotes: [\n {\n name: scope,\n entry: remoteEntryUrl,\n },\n ],\n });\n } catch {\n // Ignore init errors (e.g. duplicate init); runtime will reuse existing instance.\n }\n\n const remoteKey = `${scope}/${loaderPath}`;\n const mod: any = await loadRemote(remoteKey);\n const loaderFn = mod?.loader ?? mod?.default;\n\n if (typeof loaderFn !== 'function') {\n return {\n ok: false,\n message: `Loaded MF module '${remoteKey}' does not export a callable loader`,\n };\n }\n\n const result = await loaderFn(inputArgs);\n return { ok: true, value: result };\n }\n\n // Fallback: execute local logic file directly (dev/non-MF mode)\n if (logicFilePath) {\n const moduleUrl = new URL(`file://${logicFilePath}`);\n const mod: any = await import(moduleUrl.href);\n const loaderFn = mod?.loader ?? mod?.default;\n\n if (typeof loaderFn !== 'function') {\n return {\n ok: false,\n message: `Local logic file '${logicFilePath}' does not export a callable loader`,\n };\n }\n\n const result = await loaderFn(inputArgs);\n return { ok: true, value: result };\n }\n\n return { ok: false, message: `No executable loader found for tool: ${toolName}` };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[aui-mcp] tool execution failed:', error);\n return {\n ok: false,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nasync function createServer(getManifest: () => AuiMcpManifest): Promise<Server> {\n const server = new Server(\n { name: 'aui-x-catalog', version: '0.1.0' },\n { capabilities: { tools: {} } }\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n const manifest = getManifest();\n return {\n tools: (manifest.tools ?? []).map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema ?? EMPTY_INPUT_SCHEMA,\n })),\n };\n });\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const manifest = getManifest();\n const exec = await executeCatalogTool(manifest, request.params.name, request.params.arguments);\n\n if (!exec.ok) {\n return {\n content: [{ type: 'text' as const, text: exec.message }],\n isError: true,\n };\n }\n\n return {\n // Return raw loader result as JSON for the Agent to consume.\n content: [{ type: 'text' as const, text: JSON.stringify(exec.value) }],\n };\n });\n\n return server;\n}\n\nasync function startWatch(\n filePath: string,\n onReload: () => Promise<void>,\n onReloadError: (error: unknown) => void\n): Promise<chokidar.FSWatcher> {\n await fs.access(filePath);\n\n const watcher = chokidar.watch(filePath, { ignoreInitial: true });\n watcher.on('change', async () => {\n try {\n await onReload();\n } catch (err) {\n onReloadError(err);\n }\n });\n\n return watcher;\n}\n\nexport async function serveAuiMcpServer(options: ServeAuiMcpServerOptions = {}): Promise<void> {\n const transport: TransportType = options.transport ?? 'stdio';\n const port = options.port ?? 8001;\n\n const manifestPath = options.manifestPath;\n const catalogPath = options.catalogPath;\n\n if (!manifestPath && !catalogPath) {\n throw new Error('Either manifestPath or catalogPath is required');\n }\n\n const resolvedCatalogPath = catalogPath ?? '';\n let currentManifest: AuiMcpManifest = manifestPath\n ? await loadManifestFromFile(manifestPath)\n : await loadManifestFromCatalog(resolvedCatalogPath);\n\n const getRawCatalog = (): AuiXCatalog => {\n const catalog: AuiXCatalog = {};\n for (const tool of currentManifest.tools ?? []) {\n if (tool.entry) {\n catalog[tool.componentName] = tool.entry;\n }\n }\n return catalog;\n };\n\n const server = await createServer(() => currentManifest);\n\n if (options.watch) {\n const watchPath = manifestPath ?? resolvedCatalogPath;\n\n await startWatch(\n watchPath,\n async () => {\n currentManifest = manifestPath\n ? await loadManifestFromFile(manifestPath)\n : await loadManifestFromCatalog(resolvedCatalogPath);\n\n await server.sendToolListChanged();\n // eslint-disable-next-line no-console\n console.error(\n `[aui-mcp] reloaded: ${(currentManifest.tools ?? []).length} tools from ${watchPath}`\n );\n },\n (error) => {\n // eslint-disable-next-line no-console\n console.error(`[aui-mcp] reload failed:`, error);\n }\n );\n }\n\n if (transport === 'stdio') {\n await server.connect(new StdioServerTransport());\n return;\n }\n\n const transports = new Map<string, SSEServerTransport>();\n\n const httpServer = http.createServer(async (req, res) => {\n try {\n const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);\n\n if (req.method === 'GET' && url.pathname === '/catalog') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(getRawCatalog(), null, 2));\n return;\n }\n\n if (req.method === 'POST' && url.pathname === '/call-tool') {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk as Buffer);\n }\n\n let payload: any = {};\n try {\n const raw = Buffer.concat(chunks).toString('utf-8');\n payload = raw ? JSON.parse(raw) : {};\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[aui-mcp] invalid /call-tool payload:', error);\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Invalid JSON payload' }));\n return;\n }\n\n const name = payload.name as string | undefined;\n const args = payload.arguments ?? payload.args ?? {};\n\n if (!name || typeof name !== 'string') {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Missing tool name' }));\n return;\n }\n\n const exec = await executeCatalogTool(currentManifest, name, args);\n\n if (!exec.ok) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: exec.message }));\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(exec.value));\n return;\n }\n\n if (req.method === 'GET' && url.pathname === '/sse') {\n const transportInstance = new SSEServerTransport('/message', res);\n transports.set(transportInstance.sessionId, transportInstance);\n req.on('close', () => {\n transports.delete(transportInstance.sessionId);\n });\n await server.connect(transportInstance);\n return;\n }\n\n if (req.method === 'POST' && url.pathname === '/message') {\n const sessionId = url.searchParams.get('sessionId');\n if (!sessionId) {\n res.writeHead(400).end('Missing sessionId');\n return;\n }\n\n const transportInstance = transports.get(sessionId);\n if (!transportInstance) {\n res.writeHead(404).end('Unknown sessionId');\n return;\n }\n\n await transportInstance.handlePostMessage(req, res);\n return;\n }\n\n res.writeHead(404).end('Not found');\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[aui-mcp] request handler error:', error);\n res.writeHead(500).end('Internal server error');\n }\n });\n\n httpServer.on('error', (error) => {\n // Keep dev workflow resilient: don't crash the whole build process.\n // eslint-disable-next-line no-console\n console.error('[aui-mcp] http server error:', error);\n });\n\n httpServer.listen(port, () => {\n // eslint-disable-next-line no-console\n console.error(`[aui-mcp] SSE listening on http://localhost:${port}/sse`);\n });\n}\n","#!/usr/bin/env node\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\n\nimport chokidar from 'chokidar';\n\nimport { buildCatalogFromStats } from './catalog/build';\nimport { generateAuiMcpAssets } from './generator';\nimport type { AuiXCatalog, MfStats } from './types';\nimport { serveAuiMcpServer, type TransportType } from './server';\n\nfunction getArg(flag: string): string | undefined {\n const idx = process.argv.indexOf(flag);\n if (idx === -1) return undefined;\n return process.argv[idx + 1];\n}\n\nfunction hasFlag(flag: string): boolean {\n return process.argv.includes(flag);\n}\n\nfunction getTransportType(): TransportType {\n const v = getArg('--transport') ?? process.env['AUI_MCP_TRANSPORT'];\n return v === 'sse' ? 'sse' : 'stdio';\n}\n\nfunction getPort(): number {\n const v = getArg('--port') ?? process.env['AUI_MCP_PORT'];\n return v ? Number(v) : 8001;\n}\n\nfunction printHelp(): void {\n console.log(`aui-mcp (from aui-mcp-server)\n\nCommands:\n aui-mcp catalog <mf-stats...> Generate aui-x-catalog.json\n aui-mcp generate [options] Generate dist/mcp assets\n aui-mcp serve [options] Start MCP server (stdio or SSE)\n aui-mcp dev [options] Generate then start server (watch)\n\nCatalog options:\n -o, --output <path> Output file (default: aui-x-catalog.json)\n --dry-run Print output to stdout\n -v, --verbose Verbose logs\n\nCommon options:\n --catalog <path> Path to aui-x-catalog.json (default: aui-x-catalog.json)\n --outDir <dir> Remote dist directory (default: dist)\n --mcpDirname <name> Subdir under outDir (default: mcp)\n\nGenerate options:\n --noServer Only emit manifest.json\n\nServe options:\n --manifest <path> Path to manifest.json (default: dist/mcp/manifest.json)\n --watch Enable hot reload (manifest/catalog)\n --transport <type> stdio|sse (default: stdio; env: AUI_MCP_TRANSPORT)\n --port <number> SSE port (default: 8001; env: AUI_MCP_PORT)\n\nDev options:\n --noAutoGenerate Do not re-generate when catalog changes\n`);\n}\n\nfunction readCompiledTypesFromDist(distDir: string, componentName: string): string | undefined {\n const dtsPath = path.join(distDir, '@mf-types', 'compiled-types', `${componentName}.d.ts`);\n if (!fs.existsSync(dtsPath)) return undefined;\n return fs.readFileSync(dtsPath, 'utf-8');\n}\n\ninterface CatalogCliOptions {\n statsFiles: string[];\n output: string;\n dryRun: boolean;\n verbose: boolean;\n}\n\nfunction parseCatalogArgs(argv: string[]): CatalogCliOptions {\n const args = argv.slice(3);\n const opts: CatalogCliOptions = {\n statsFiles: [],\n output: 'aui-x-catalog.json',\n dryRun: false,\n verbose: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (!a) continue;\n\n if (a === '-o' || a === '--output') {\n opts.output = args[++i] ?? opts.output;\n continue;\n }\n\n if (a === '--dry-run') {\n opts.dryRun = true;\n continue;\n }\n\n if (a === '--verbose' || a === '-v') {\n opts.verbose = true;\n continue;\n }\n\n if (!a.startsWith('-')) {\n opts.statsFiles.push(a);\n }\n }\n\n return opts;\n}\n\nasync function cmdCatalog(): Promise<void> {\n const opts = parseCatalogArgs(process.argv);\n\n if (opts.statsFiles.length === 0) {\n console.error('Usage: aui-mcp catalog [options] <mf-stats.json...>');\n console.error('Example: aui-mcp catalog ./dist/mf-stats.json -o ./aui-x-catalog.json');\n process.exitCode = 1;\n return;\n }\n\n const catalog: AuiXCatalog = {};\n let hasErrors = false;\n\n for (const statsFile of opts.statsFiles) {\n const absFile = path.resolve(process.cwd(), statsFile);\n\n if (!fs.existsSync(absFile)) {\n console.error(`[aui-mcp] Cannot find mf-stats.json: ${absFile}`);\n hasErrors = true;\n continue;\n }\n\n let stats: MfStats;\n try {\n stats = JSON.parse(fs.readFileSync(absFile, 'utf-8')) as MfStats;\n } catch (e) {\n console.error(`[aui-mcp] Failed to parse mf-stats.json: ${absFile}`);\n console.error(e);\n hasErrors = true;\n continue;\n }\n\n const distDir = path.dirname(absFile);\n\n const result = buildCatalogFromStats({\n stats,\n readCompiledTypes: (componentName) => readCompiledTypesFromDist(distDir, componentName),\n });\n\n for (const [name, entry] of Object.entries(result.catalog)) {\n catalog[name] = entry;\n }\n\n for (const issue of result.issues) {\n console.warn(\n `[aui-mcp] ⚠ ${issue.componentName ?? 'unknown'}: ${issue.message}${issue.detail ? ` (${issue.detail})` : ''}`\n );\n hasErrors = true;\n }\n\n if (result.missingJsdocComponents.length > 0) {\n const names = result.missingJsdocComponents.join(', ');\n console.warn(\n `[aui-mcp] ⚠ Missing @aui-component JSDoc: ${names}. Please run skills/aui-jsdoc-gen to write back to source files and retry.`\n );\n hasErrors = true;\n }\n }\n\n if (Object.keys(catalog).length === 0) {\n console.error('[aui-mcp] No catalog entries were generated successfully.');\n process.exitCode = 1;\n return;\n }\n\n const outputJson = JSON.stringify(catalog, null, 2) + '\\n';\n\n if (opts.dryRun) {\n console.log(outputJson);\n return;\n }\n\n const outPath = path.resolve(process.cwd(), opts.output);\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, outputJson, 'utf-8');\n console.log(`[aui-mcp] Written: ${outPath}`);\n\n if (hasErrors) {\n console.warn(\n '[aui-mcp] Some components failed to generate catalog entries (see warnings above), but partial output has been written.'\n );\n }\n}\n\nasync function cmdGenerate(): Promise<void> {\n const outDir = getArg('--outDir') ?? 'dist';\n const catalogPath = getArg('--catalog') ?? 'aui-x-catalog.json';\n const mcpDirname = getArg('--mcpDirname');\n const emitServer = !hasFlag('--noServer');\n\n const result = await generateAuiMcpAssets({\n outDir,\n catalogPath: path.resolve(process.cwd(), catalogPath),\n mcpDirname,\n emitServer,\n });\n\n console.log(`Generated: ${result.manifestPath}`);\n if (result.serverPath) {\n console.log(`Generated: ${result.serverPath}`);\n }\n\n // dev shortcut: generate then serve\n if (hasFlag('--dev')) {\n const manifestPath = result.manifestPath;\n await serveAuiMcpServer({\n manifestPath,\n watch: true,\n transport: getTransportType(),\n port: getPort(),\n });\n }\n}\n\nasync function cmdServe(): Promise<void> {\n const outDir = getArg('--outDir') ?? 'dist';\n const mcpDirname = getArg('--mcpDirname') ?? 'mcp';\n\n const catalogPath = getArg('--catalog') ?? 'aui-x-catalog.json';\n const manifestPath =\n getArg('--manifest') ?? path.join(outDir, mcpDirname, 'manifest.json');\n\n // If user explicitly sets --catalog, use it.\n // Otherwise default to manifest.json if it exists.\n const useCatalog = hasFlag('--catalog');\n\n await serveAuiMcpServer({\n catalogPath: useCatalog ? path.resolve(process.cwd(), catalogPath) : undefined,\n manifestPath: useCatalog ? undefined : path.resolve(process.cwd(), manifestPath),\n watch: hasFlag('--watch') || Boolean(process.env['AUI_MCP_WATCH']),\n transport: getTransportType(),\n port: getPort(),\n });\n}\n\nasync function cmdDev(): Promise<void> {\n const outDir = getArg('--outDir') ?? 'dist';\n const catalogPath = path.resolve(process.cwd(), getArg('--catalog') ?? 'aui-x-catalog.json');\n const mcpDirname = getArg('--mcpDirname') ?? 'mcp';\n\n const enableAutoGenerate = !hasFlag('--noAutoGenerate');\n\n const result = await generateAuiMcpAssets({ outDir, catalogPath, mcpDirname, emitServer: true });\n\n if (enableAutoGenerate) {\n chokidar\n .watch(catalogPath, { ignoreInitial: true })\n .on('change', async () => {\n try {\n await generateAuiMcpAssets({ outDir, catalogPath, mcpDirname, emitServer: true });\n // eslint-disable-next-line no-console\n console.error(`[aui-mcp] regenerated from ${catalogPath}`);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[aui-mcp] regenerate failed:', err);\n }\n });\n }\n\n await serveAuiMcpServer({\n manifestPath: result.manifestPath,\n watch: true,\n transport: getTransportType(),\n port: getPort(),\n });\n}\n\nasync function main(): Promise<void> {\n const cmd = process.argv[2];\n if (!cmd || cmd === '--help' || cmd === '-h') {\n printHelp();\n return;\n }\n\n if (cmd === 'catalog') {\n await cmdCatalog();\n return;\n }\n\n if (cmd === 'generate') {\n await cmdGenerate();\n return;\n }\n\n if (cmd === 'serve') {\n await cmdServe();\n return;\n }\n\n if (cmd === 'dev') {\n await cmdDev();\n return;\n }\n\n console.error(`Unknown command: ${cmd}`);\n printHelp();\n process.exitCode = 1;\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exitCode = 1;\n});\n"]}
package/dist/cli.d.cts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node