skillmux 0.1.2 → 0.1.3
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/README.md +24 -1
- package/dist/chunk-DBEVDI27.js +1826 -0
- package/dist/chunk-DBEVDI27.js.map +1 -0
- package/dist/chunk-UMN3UJFN.js +836 -0
- package/dist/chunk-UMN3UJFN.js.map +1 -0
- package/dist/cli.js +4 -2540
- package/dist/cli.js.map +1 -1
- package/dist/index.js +4 -2539
- package/dist/index.js.map +1 -1
- package/dist/launch-tui-PHWJPIQZ.js +1790 -0
- package/dist/launch-tui-PHWJPIQZ.js.map +1 -0
- package/package.json +11 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/agents.ts","../src/commands/config-add-agent.ts","../src/config/agent-override-validation.ts","../src/config/write-user-config.ts","../src/commands/config-remove-agent.ts","../src/commands/config-update-agent.ts","../src/commands/config.ts","../src/commands/doctor.ts","../src/commands/import.ts","../src/commands/list.ts","../src/tui/tty.ts","../src/commands/tui.ts"],"sourcesContent":["import { Command } from \"commander\";\r\nimport { supportedPlatforms } from \"./config/default-agent-rules\";\r\nimport { runAdopt } from \"./commands/adopt\";\r\nimport { runAgents } from \"./commands/agents\";\r\nimport { runConfigAddAgent } from \"./commands/config-add-agent\";\r\nimport { runConfigRemoveAgent } from \"./commands/config-remove-agent\";\r\nimport { runConfigUpdateAgent } from \"./commands/config-update-agent\";\r\nimport { runConfig } from \"./commands/config\";\r\nimport { runDoctor } from \"./commands/doctor\";\r\nimport { runDisable } from \"./commands/disable\";\r\nimport { runEnable } from \"./commands/enable\";\r\nimport { runImport } from \"./commands/import\";\r\nimport { runList } from \"./commands/list\";\r\nimport { runRemove } from \"./commands/remove\";\r\nimport { runScan } from \"./commands/scan\";\r\nimport { runTui, TuiNonInteractiveTerminalError } from \"./commands/tui\";\n\r\nfunction collectValues(value: string, previous: string[] = []): string[] {\r\n return [...previous, value];\r\n}\r\n\r\nfunction requireSingleValue(values: string[], label: string): string {\r\n if (values.length !== 1) {\r\n throw new Error(`Expected exactly one ${label}`);\r\n }\r\n\r\n return values[0] as string;\r\n}\r\n\r\nfunction requireAtLeastOneValue(values: string[], label: string): string[] {\r\n if (values.length === 0) {\r\n throw new Error(`Expected at least one ${label}`);\r\n }\r\n\r\n return values;\r\n}\r\n\r\nexport function buildCli(): Command {\r\n const program = new Command();\r\n program.name(\"skillmux\");\r\n\r\n program\r\n .command(\"adopt\")\r\n .requiredOption(\"--agent <agent>\", \"Source agent id\")\r\n .option(\"--skill <skill>\", \"Repeatable installed skill to adopt\", collectValues, [])\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { agent: string; skill: string[]; json?: boolean }) => {\r\n const result = options.skill.length === 0\r\n ? await runAdopt({\r\n agent: options.agent,\r\n json: options.json === true\r\n })\r\n : options.skill.length === 1\r\n ? await runAdopt({\r\n agent: options.agent,\r\n skill: options.skill[0] as string,\r\n json: options.json === true\r\n })\r\n : await runAdopt({\r\n agent: options.agent,\r\n skills: options.skill,\r\n json: options.json === true\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"scan\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { json?: boolean }) => {\r\n const result = await runScan({ json: options.json === true });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"agents\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { json?: boolean }) => {\r\n const result = await runAgents({ json: options.json === true });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"list\")\r\n .option(\"--view <view>\", \"Select records, agents, or skills view\", \"records\")\r\n .option(\"--format <format>\", \"Select table or json output\", \"table\")\r\n .action(async (options: { view?: \"records\" | \"agents\" | \"skills\"; format?: \"table\" | \"json\" }) => {\r\n const result = await runList({\r\n view: options.view,\r\n format: options.format\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"import\")\r\n .requiredOption(\"--source <path>\", \"Local skill source directory\")\r\n .requiredOption(\"--name <name>\", \"Managed skill name\")\r\n .action(async (options: { source: string; name: string }) => {\r\n const result = await runImport({\r\n sourcePath: options.source,\r\n skillName: options.name\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"doctor\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { json?: boolean }) => {\r\n const result = await runDoctor({ json: options.json === true });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\n .command(\"tui\")\n .description(\"Open the interactive SkillMux dashboard\")\n .action(async () => {\n try {\n await runTui();\n } catch (error) {\n if (error instanceof TuiNonInteractiveTerminalError) {\n process.exitCode = 1;\n return;\n }\n\n throw error;\n }\n });\n\r\n const configCommand = program.command(\"config\");\r\n\r\n configCommand\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { json?: boolean }) => {\r\n const result = await runConfig({ json: options.json === true });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n configCommand\r\n .command(\"add-agent\")\r\n .requiredOption(\"--id <id>\", \"Agent id\")\r\n .requiredOption(\"--root <path>\", \"Home-relative root path\")\r\n .option(\"--skills <path>\", \"Skills directory path relative to the agent root\", \"skills\")\r\n .option(\"--name <name>\", \"Stable display name\")\r\n .option(\r\n \"--platform <platform>\",\r\n `Supported platform (${supportedPlatforms.join(\", \")})`,\r\n (value: string, previous: string[] = []) => [...previous, value],\r\n []\r\n )\r\n .option(\"--disabled-by-default\", \"Mark this custom agent as disabled by default\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(\r\n async (options: {\r\n id: string;\r\n root: string;\r\n skills?: string;\r\n name?: string;\r\n platform?: string[];\r\n disabledByDefault?: boolean;\r\n json?: boolean;\r\n }) => {\r\n const result = await runConfigAddAgent({\r\n id: options.id,\r\n root: options.root,\r\n skills: options.skills,\r\n name: options.name,\r\n platforms: options.platform,\r\n disabledByDefault: options.disabledByDefault === true,\r\n json: options.json === true\r\n });\r\n process.stdout.write(result.output);\r\n }\r\n );\r\n\r\n configCommand\r\n .command(\"remove-agent\")\r\n .requiredOption(\"--id <id>\", \"Agent id\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { id: string; json?: boolean }) => {\r\n const result = await runConfigRemoveAgent({\r\n id: options.id,\r\n json: options.json === true\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n configCommand\r\n .command(\"update-agent\")\r\n .requiredOption(\"--id <id>\", \"Agent id\")\r\n .option(\"--root <path>\", \"Home-relative root path\")\r\n .option(\"--skills <path>\", \"Skills directory path relative to the agent root\")\r\n .option(\"--name <name>\", \"Stable display name\")\r\n .option(\r\n \"--platform <platform>\",\r\n `Supported platform (${supportedPlatforms.join(\", \")})`,\r\n (value: string, previous: string[] = []) => [...previous, value],\r\n []\r\n )\r\n .option(\"--enabled-by-default\", \"Mark this custom agent as enabled by default\")\r\n .option(\"--disabled-by-default\", \"Mark this custom agent as disabled by default\")\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(\r\n async (options: {\r\n id: string;\r\n root?: string;\r\n skills?: string;\r\n name?: string;\r\n platform?: string[];\r\n enabledByDefault?: boolean;\r\n disabledByDefault?: boolean;\r\n json?: boolean;\r\n }) => {\r\n const result = await runConfigUpdateAgent({\r\n id: options.id,\r\n root: options.root,\r\n skills: options.skills,\r\n name: options.name,\r\n platforms:\r\n options.platform !== undefined && options.platform.length > 0\r\n ? options.platform\r\n : undefined,\r\n enabledByDefault:\r\n options.enabledByDefault === true ? true : undefined,\r\n disabledByDefault: options.disabledByDefault === true,\r\n json: options.json === true\r\n });\r\n process.stdout.write(result.output);\r\n }\r\n );\r\n\r\n program\r\n .command(\"enable\")\r\n .requiredOption(\"--skill <skill>\", \"Managed skill name or id\", collectValues, [])\r\n .requiredOption(\"--agent <agent>\", \"Repeatable target agent\", collectValues, [])\r\n .action(async (options: { skill: string[]; agent: string[] }) => {\r\n const result = await runEnable({\r\n skill: requireSingleValue(options.skill, \"skill\"),\r\n agents: requireAtLeastOneValue(options.agent, \"agent\")\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"disable\")\r\n .requiredOption(\"--skill <skill>\", \"Managed skill name or id\", collectValues, [])\r\n .requiredOption(\"--agent <agent>\", \"Repeatable target agent\", collectValues, [])\r\n .action(async (options: { skill: string[]; agent: string[] }) => {\r\n const result = await runDisable({\r\n skill: requireSingleValue(options.skill, \"skill\"),\r\n agents: requireAtLeastOneValue(options.agent, \"agent\")\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n program\r\n .command(\"remove\")\r\n .requiredOption(\"--skill <skill>\", \"Repeatable managed skill name or id\", collectValues, [])\r\n .option(\"--json\", \"Emit structured JSON output\")\r\n .action(async (options: { skill: string[]; json?: boolean }) => {\r\n const skills = requireAtLeastOneValue(options.skill, \"skill\");\r\n const result = skills.length === 1\r\n ? await runRemove({\r\n skill: skills[0] as string,\r\n json: options.json === true\r\n })\r\n : await runRemove({\r\n skills,\r\n json: options.json === true\r\n });\r\n process.stdout.write(result.output);\r\n });\r\n\r\n return program;\r\n}\r\n","import { homedir } from \"node:os\";\r\nimport { resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\r\nimport {\r\n discoverAgents,\r\n type DiscoveredAgent\r\n} from \"../discovery/discover-agents\";\r\nimport { printJson } from \"../output/print-json\";\r\nimport { printTable } from \"../output/print-table\";\r\n\r\nexport type RunAgentsOptions = {\r\n homeDir?: string;\r\n skillmuxHome?: string;\r\n platform?: NodeJS.Platform;\r\n json?: boolean;\r\n};\r\n\r\nexport type RunAgentsResult = {\r\n agents: DiscoveredAgent[];\r\n output: string;\r\n};\r\n\r\nfunction buildTableOutput(agents: DiscoveredAgent[]): string {\r\n return printTable(\r\n agents.map((agent) => ({\r\n id: agent.id,\r\n name: agent.stableName,\r\n path: agent.absoluteSkillsDirectoryPath,\r\n exists: String(agent.exists),\r\n supported: String(agent.supportedOnPlatform),\r\n discovery: agent.discovery\r\n })),\r\n [\r\n { key: \"id\", label: \"Agent\" },\r\n { key: \"name\", label: \"Name\" },\r\n { key: \"path\", label: \"Path\" },\r\n { key: \"exists\", label: \"Exists\" },\r\n { key: \"supported\", label: \"Supported\" },\r\n { key: \"discovery\", label: \"Discovery\" }\r\n ]\r\n );\r\n}\r\n\r\nexport async function runAgents(\r\n options: RunAgentsOptions = {}\r\n): Promise<RunAgentsResult> {\r\n const homeDir = options.homeDir ?? homedir();\r\n const resolvedPaths = resolveSkillmuxHome(homeDir);\r\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\r\n const agents = await discoverAgents({\r\n homeDir,\r\n skillmuxHome,\r\n platform: options.platform\r\n });\r\n\r\n return {\r\n agents,\r\n output:\r\n options.json === true\r\n ? printJson(agents)\r\n : buildTableOutput(agents)\r\n };\r\n}\r\n","import { homedir } from \"node:os\";\nimport {\r\n normalizeAgentId,\r\n normalizePlatforms,\r\n normalizeRelativePath\r\n} from \"../config/agent-override-validation\";\r\nimport { loadUserConfig, type AgentOverride, type UserConfig } from \"../config/load-user-config\";\nimport { buildConfigPath, resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\nimport { writeUserConfig } from \"../config/write-user-config\";\nimport { printJson } from \"../output/print-json\";\nimport { printTable } from \"../output/print-table\";\n\nexport type RunConfigAddAgentOptions = {\n homeDir?: string;\n skillmuxHome?: string;\n id: string;\n root: string;\n skills?: string;\n name?: string;\n platforms?: string[];\n disabledByDefault?: boolean;\n json?: boolean;\n};\n\nexport type RunConfigAddAgentResult = {\n skillmuxHome: string;\n configPath: string;\n agentId: string;\n changed: boolean;\n agent: AgentOverride;\n config: UserConfig;\n output: string;\n};\n\nfunction buildAgentOverride(options: RunConfigAddAgentOptions): {\n agentId: string;\n agent: AgentOverride;\n} {\n const agentId = normalizeAgentId(options.id);\n const agent: AgentOverride = {\n supportedPlatforms: normalizePlatforms(options.platforms),\n homeRelativeRootPath: normalizeRelativePath(options.root, \"root\"),\n skillsDirectoryPath: normalizeRelativePath(options.skills ?? \"skills\", \"skills\")\n };\n\n if (options.name !== undefined && options.name.trim().length > 0) {\n agent.stableName = options.name.trim();\n }\n\n if (options.disabledByDefault === true) {\n agent.enabledByDefault = false;\n }\n\n return { agentId, agent };\n}\n\nfunction buildTableOutput(result: Omit<RunConfigAddAgentResult, \"output\">): string {\n const summary = printTable(\n [\n {\n agentId: result.agentId,\n configPath: result.configPath,\n changed: String(result.changed)\n }\n ],\n [\n { key: \"agentId\", label: \"Agent\" },\n { key: \"configPath\", label: \"Config Path\" },\n { key: \"changed\", label: \"Changed\" }\n ]\n );\n\n const detail = printTable(\n [\n {\n stableName: result.agent.stableName ?? \"\",\n platforms: (result.agent.supportedPlatforms ?? []).join(\",\"),\n root: result.agent.homeRelativeRootPath ?? \"\",\n skills: result.agent.skillsDirectoryPath ?? \"\",\n enabledByDefault:\n result.agent.enabledByDefault === undefined\n ? \"\"\n : String(result.agent.enabledByDefault)\n }\n ],\n [\n { key: \"stableName\", label: \"Name\" },\n { key: \"platforms\", label: \"Platforms\" },\n { key: \"root\", label: \"Root\" },\n { key: \"skills\", label: \"Skills Dir\" },\n { key: \"enabledByDefault\", label: \"Enabled By Default\" }\n ]\n );\n\n return `${summary}${detail}`;\n}\n\nexport async function runConfigAddAgent(\n options: RunConfigAddAgentOptions\n): Promise<RunConfigAddAgentResult> {\n const homeDir = options.homeDir ?? homedir();\n const resolvedPaths = resolveSkillmuxHome(homeDir);\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\n const configPath = buildConfigPath(skillmuxHome);\n const config = await loadUserConfig(skillmuxHome);\n const { agentId, agent } = buildAgentOverride(options);\n const previous = config.agents[agentId];\n const changed = JSON.stringify(previous ?? null) !== JSON.stringify(agent);\n\n const nextConfig: UserConfig = {\n ...config,\n agents: {\n ...config.agents,\n [agentId]: agent\n }\n };\n\n await writeUserConfig(skillmuxHome, nextConfig);\n\n const resultWithoutOutput = {\n skillmuxHome,\n configPath,\n agentId,\n changed,\n agent,\n config: nextConfig\n };\n\n return {\n ...resultWithoutOutput,\n output:\n options.json === true\n ? printJson(resultWithoutOutput)\n : buildTableOutput(resultWithoutOutput)\n };\n}\n","import { isAbsolute } from \"node:path\";\r\nimport { InvalidIdentifierError, UserConfigValidationError } from \"../core/errors\";\r\nimport { normalizeId } from \"../core/ids\";\r\nimport { supportedPlatforms, type SupportedPlatform } from \"./default-agent-rules\";\r\n\r\nexport function normalizeRelativePath(value: string, field: string): string {\r\n const trimmed = value.trim();\r\n\r\n if (trimmed.length === 0) {\r\n throw new UserConfigValidationError(`${field} must not be empty`);\r\n }\r\n\r\n if (isAbsolute(trimmed)) {\r\n throw new UserConfigValidationError(`${field} must be a relative path`);\r\n }\r\n\r\n const normalized = trimmed.replaceAll(\"\\\\\", \"/\");\r\n\r\n if (normalized === \".\" || normalized === \"..\" || normalized.startsWith(\"../\") || normalized.includes(\"/../\")) {\r\n throw new UserConfigValidationError(`${field} must stay within the configured home-relative tree`);\r\n }\r\n\r\n return normalized.replace(/^\\.\\/+/, \"\");\r\n}\r\n\r\nexport function normalizeAgentId(value: string): string {\r\n const trimmed = value.trim();\r\n\r\n if (trimmed.length === 0 || /[a-z0-9]/i.test(trimmed) === false) {\r\n throw new InvalidIdentifierError(\"agent id\", value);\r\n }\r\n\r\n return normalizeId(trimmed);\r\n}\r\n\r\nexport function normalizePlatforms(value: string[] | undefined): SupportedPlatform[] {\r\n if (value === undefined || value.length === 0) {\r\n return [process.platform as SupportedPlatform];\r\n }\r\n\r\n const normalized = [...new Set(value.map((entry) => entry.trim().toLowerCase()))];\r\n const invalid = normalized.filter(\r\n (entry): entry is string => supportedPlatforms.includes(entry as SupportedPlatform) === false\r\n );\r\n\r\n if (invalid.length > 0) {\r\n throw new UserConfigValidationError(\r\n `platform must be one of: ${supportedPlatforms.join(\", \")}`\r\n );\r\n }\r\n\r\n return normalized as SupportedPlatform[];\r\n}\r\n","import * as fs from \"node:fs/promises\";\nimport { buildConfigPath, type SkillmuxHomeResolution } from \"./resolve-skillmux-home\";\nimport type { UserConfig } from \"./load-user-config\";\n\nexport async function writeUserConfig(\n skillmuxHome: string,\n config: UserConfig\n): Promise<SkillmuxHomeResolution> {\n const configPath = buildConfigPath(skillmuxHome);\n await fs.mkdir(skillmuxHome, { recursive: true });\n await fs.writeFile(configPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n\n return {\n skillmuxHome,\n configPath\n };\n}\n","import { homedir } from \"node:os\";\nimport { InvalidIdentifierError } from \"../core/errors\";\nimport { normalizeId } from \"../core/ids\";\nimport { loadUserConfig, type UserConfig } from \"../config/load-user-config\";\nimport { buildConfigPath, resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\nimport { writeUserConfig } from \"../config/write-user-config\";\nimport { printJson } from \"../output/print-json\";\nimport { printTable } from \"../output/print-table\";\n\nexport type RunConfigRemoveAgentOptions = {\n homeDir?: string;\n skillmuxHome?: string;\n id: string;\n json?: boolean;\n};\n\nexport type RunConfigRemoveAgentResult = {\n skillmuxHome: string;\n configPath: string;\n agentId: string;\n changed: boolean;\n removed: boolean;\n config: UserConfig;\n output: string;\n};\n\nfunction normalizeAgentId(value: string): string {\n const trimmed = value.trim();\n\n if (trimmed.length === 0 || /[a-z0-9]/i.test(trimmed) === false) {\n throw new InvalidIdentifierError(\"agent id\", value);\n }\n\n return normalizeId(trimmed);\n}\n\nfunction buildTableOutput(result: Omit<RunConfigRemoveAgentResult, \"output\">): string {\n return printTable(\n [\n {\n agentId: result.agentId,\n configPath: result.configPath,\n changed: String(result.changed),\n removed: String(result.removed)\n }\n ],\n [\n { key: \"agentId\", label: \"Agent\" },\n { key: \"configPath\", label: \"Config Path\" },\n { key: \"changed\", label: \"Changed\" },\n { key: \"removed\", label: \"Removed\" }\n ]\n );\n}\n\nexport async function runConfigRemoveAgent(\n options: RunConfigRemoveAgentOptions\n): Promise<RunConfigRemoveAgentResult> {\n const homeDir = options.homeDir ?? homedir();\n const resolvedPaths = resolveSkillmuxHome(homeDir);\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\n const configPath = buildConfigPath(skillmuxHome);\n const config = await loadUserConfig(skillmuxHome);\n const agentId = normalizeAgentId(options.id);\n const removed = agentId in config.agents;\n\n const nextConfig: UserConfig = {\n ...config,\n agents: Object.fromEntries(\n Object.entries(config.agents).filter(([currentAgentId]) => currentAgentId !== agentId)\n )\n };\n\n if (removed) {\n await writeUserConfig(skillmuxHome, nextConfig);\n }\n\n const resultWithoutOutput = {\n skillmuxHome,\n configPath,\n agentId,\n changed: removed,\n removed,\n config: nextConfig\n };\n\n return {\n ...resultWithoutOutput,\n output:\n options.json === true\n ? printJson(resultWithoutOutput)\n : buildTableOutput(resultWithoutOutput)\n };\n}\n","import { homedir } from \"node:os\";\r\nimport {\r\n normalizeAgentId,\r\n normalizePlatforms,\r\n normalizeRelativePath\r\n} from \"../config/agent-override-validation\";\r\nimport { UserConfigValidationError } from \"../core/errors\";\r\nimport { loadUserConfig, type AgentOverride, type UserConfig } from \"../config/load-user-config\";\r\nimport { buildConfigPath, resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\r\nimport { writeUserConfig } from \"../config/write-user-config\";\r\nimport { printJson } from \"../output/print-json\";\r\nimport { printTable } from \"../output/print-table\";\r\n\r\nexport type RunConfigUpdateAgentOptions = {\r\n homeDir?: string;\r\n skillmuxHome?: string;\r\n id: string;\r\n root?: string;\r\n skills?: string;\r\n name?: string;\r\n platforms?: string[];\r\n enabledByDefault?: boolean;\r\n disabledByDefault?: boolean;\r\n json?: boolean;\r\n};\r\n\r\nexport type RunConfigUpdateAgentResult = {\r\n skillmuxHome: string;\r\n configPath: string;\r\n agentId: string;\r\n changed: boolean;\r\n agent: AgentOverride;\r\n config: UserConfig;\r\n output: string;\r\n};\r\n\r\nfunction buildAgentPatch(options: RunConfigUpdateAgentOptions): AgentOverride {\r\n const patch: AgentOverride = {};\r\n\r\n if (options.root !== undefined) {\r\n patch.homeRelativeRootPath = normalizeRelativePath(options.root, \"root\");\r\n }\r\n\r\n if (options.skills !== undefined) {\r\n patch.skillsDirectoryPath = normalizeRelativePath(options.skills, \"skills\");\r\n }\r\n\r\n if (options.name !== undefined && options.name.trim().length > 0) {\r\n patch.stableName = options.name.trim();\r\n }\r\n\r\n if (options.platforms !== undefined) {\r\n patch.supportedPlatforms = normalizePlatforms(options.platforms);\r\n }\r\n\r\n if (options.enabledByDefault !== undefined && options.disabledByDefault === true) {\r\n throw new UserConfigValidationError(\r\n \"enabled-by-default and disabled-by-default cannot both be set\"\r\n );\r\n }\r\n\r\n if (options.enabledByDefault !== undefined) {\r\n patch.enabledByDefault = options.enabledByDefault;\r\n }\r\n\r\n if (options.disabledByDefault === true) {\r\n patch.enabledByDefault = false;\r\n }\r\n\r\n return patch;\r\n}\r\n\r\nfunction buildTableOutput(result: Omit<RunConfigUpdateAgentResult, \"output\">): string {\r\n const summary = printTable(\r\n [\r\n {\r\n agentId: result.agentId,\r\n configPath: result.configPath,\r\n changed: String(result.changed)\r\n }\r\n ],\r\n [\r\n { key: \"agentId\", label: \"Agent\" },\r\n { key: \"configPath\", label: \"Config Path\" },\r\n { key: \"changed\", label: \"Changed\" }\r\n ]\r\n );\r\n\r\n const detail = printTable(\r\n [\r\n {\r\n stableName: result.agent.stableName ?? \"\",\r\n platforms: (result.agent.supportedPlatforms ?? []).join(\",\"),\r\n root: result.agent.homeRelativeRootPath ?? \"\",\r\n skills: result.agent.skillsDirectoryPath ?? \"\",\r\n enabledByDefault:\r\n result.agent.enabledByDefault === undefined\r\n ? \"\"\r\n : String(result.agent.enabledByDefault)\r\n }\r\n ],\r\n [\r\n { key: \"stableName\", label: \"Name\" },\r\n { key: \"platforms\", label: \"Platforms\" },\r\n { key: \"root\", label: \"Root\" },\r\n { key: \"skills\", label: \"Skills Dir\" },\r\n { key: \"enabledByDefault\", label: \"Enabled By Default\" }\r\n ]\r\n );\r\n\r\n return `${summary}${detail}`;\r\n}\r\n\r\nexport async function runConfigUpdateAgent(\r\n options: RunConfigUpdateAgentOptions\r\n): Promise<RunConfigUpdateAgentResult> {\r\n const homeDir = options.homeDir ?? homedir();\r\n const resolvedPaths = resolveSkillmuxHome(homeDir);\r\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\r\n const configPath = buildConfigPath(skillmuxHome);\r\n const config = await loadUserConfig(skillmuxHome);\r\n const agentId = normalizeAgentId(options.id);\r\n const previous = config.agents[agentId];\r\n\r\n if (previous === undefined) {\r\n throw new UserConfigValidationError(`Agent override does not exist: ${agentId}`);\r\n }\r\n\r\n const agent: AgentOverride = {\r\n ...previous,\r\n ...buildAgentPatch(options)\r\n };\r\n const changed = JSON.stringify(previous) !== JSON.stringify(agent);\r\n\r\n const nextConfig: UserConfig = {\r\n ...config,\r\n agents: {\r\n ...config.agents,\r\n [agentId]: agent\r\n }\r\n };\r\n\r\n if (changed) {\r\n await writeUserConfig(skillmuxHome, nextConfig);\r\n }\r\n\r\n const resultWithoutOutput = {\r\n skillmuxHome,\r\n configPath,\r\n agentId,\r\n changed,\r\n agent,\r\n config: nextConfig\r\n };\r\n\r\n return {\r\n ...resultWithoutOutput,\r\n output:\r\n options.json === true\r\n ? printJson(resultWithoutOutput)\r\n : buildTableOutput(resultWithoutOutput)\r\n };\r\n}\r\n","import { homedir } from \"node:os\";\nimport { buildConfigPath } from \"../config/resolve-skillmux-home\";\nimport { loadUserConfig, type UserConfig } from \"../config/load-user-config\";\nimport { resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\nimport { printJson } from \"../output/print-json\";\r\nimport { printTable } from \"../output/print-table\";\r\n\r\nexport type RunConfigOptions = {\r\n homeDir?: string;\r\n skillmuxHome?: string;\r\n json?: boolean;\r\n};\r\n\r\nexport type RunConfigResult = {\r\n skillmuxHome: string;\r\n configPath: string;\r\n config: UserConfig;\r\n output: string;\r\n};\r\n\r\nfunction buildTableOutput(result: Omit<RunConfigResult, \"output\">): string {\r\n const summary = printTable(\r\n [\r\n {\r\n skillmuxHome: result.skillmuxHome,\r\n configPath: result.configPath,\r\n overrides: String(Object.keys(result.config.agents).length)\r\n }\r\n ],\r\n [\r\n { key: \"skillmuxHome\", label: \"SkillMux Home\" },\r\n { key: \"configPath\", label: \"Config Path\" },\r\n { key: \"overrides\", label: \"Overrides\" }\r\n ]\r\n );\r\n\r\n const agentRows = Object.entries(result.config.agents)\r\n .sort(([left], [right]) => left.localeCompare(right))\r\n .map(([agentId, agent]) => ({\r\n agentId,\r\n stableName: agent.stableName ?? \"\",\r\n root: agent.homeRelativeRootPath ?? \"\",\r\n skills: agent.skillsDirectoryPath ?? \"\"\r\n }));\r\n\r\n if (agentRows.length === 0) {\r\n return `${summary}\\nNo user overrides configured.\\n`;\r\n }\r\n\r\n return `${summary}\\n${printTable(agentRows, [\r\n { key: \"agentId\", label: \"Agent\" },\r\n { key: \"stableName\", label: \"Name\" },\r\n { key: \"root\", label: \"Root\" },\r\n { key: \"skills\", label: \"Skills Dir\" }\r\n ])}`;\r\n}\r\n\r\nexport async function runConfig(\r\n options: RunConfigOptions = {}\r\n): Promise<RunConfigResult> {\r\n const homeDir = options.homeDir ?? homedir();\n const resolvedPaths = resolveSkillmuxHome(homeDir);\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\n const config = await loadUserConfig(skillmuxHome);\n\r\n const resultWithoutOutput = {\r\n skillmuxHome,\n configPath: buildConfigPath(skillmuxHome),\n config\n };\n\r\n return {\r\n ...resultWithoutOutput,\r\n output:\r\n options.json === true\r\n ? printJson(resultWithoutOutput)\r\n : buildTableOutput(resultWithoutOutput)\r\n };\r\n}\r\n","import { homedir } from \"node:os\";\r\nimport type { Manifest, ScanIssue } from \"../core/types\";\r\nimport { loadUserConfig, type UserConfig } from \"../config/load-user-config\";\r\nimport { resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\r\nimport {\r\n collectDoctorIssues,\r\n dedupeAndSortIssues\r\n} from \"../diagnostics/collect-doctor-issues\";\r\nimport {\r\n discoverAgents,\r\n type DiscoveredAgent\r\n} from \"../discovery/discover-agents\";\r\nimport {\r\n scanAgentSkills,\r\n type ScanAgentSkillsResult\r\n} from \"../discovery/scan-agent-skills\";\r\nimport { type ScannedSkillEntry } from \"../discovery/infer-skill-entry\";\r\nimport { readManifest } from \"../manifest/read-manifest\";\r\nimport { formatIssue } from \"../output/format-issue\";\r\nimport { printJson } from \"../output/print-json\";\r\nimport { printTable } from \"../output/print-table\";\r\n\r\nexport type RunDoctorOptions = {\r\n homeDir?: string;\r\n skillmuxHome?: string;\r\n platform?: NodeJS.Platform;\r\n json?: boolean;\r\n};\r\n\r\nexport type RunDoctorResult = {\r\n skillmuxHome: string;\r\n manifest: Manifest;\r\n config: UserConfig;\r\n agents: DiscoveredAgent[];\r\n entries: ScannedSkillEntry[];\r\n issues: ScanIssue[];\r\n output: string;\r\n};\r\n\r\nfunction buildTableOutput(issues: ScanIssue[]): string {\r\n if (issues.length === 0) {\r\n return \"No doctor issues found.\\n\";\r\n }\r\n\r\n return printTable(\r\n issues.map((issue) => ({\r\n severity: issue.severity,\r\n code: issue.code,\r\n path: issue.path ?? \"\",\r\n message: issue.message\r\n })),\r\n [\r\n { key: \"severity\", label: \"Severity\" },\r\n { key: \"code\", label: \"Code\" },\r\n { key: \"path\", label: \"Path\" },\r\n { key: \"message\", label: \"Message\" }\r\n ]\r\n );\r\n}\r\n\r\nfunction buildJsonOutput(result: Omit<RunDoctorResult, \"output\">): string {\r\n return printJson({\r\n skillmuxHome: result.skillmuxHome,\r\n issues: result.issues,\r\n agents: result.agents.map((agent) => ({\r\n id: agent.id,\r\n path: agent.absoluteSkillsDirectoryPath,\r\n supportedOnPlatform: agent.supportedOnPlatform\r\n })),\r\n entries: result.entries\r\n });\r\n}\r\n\r\nexport async function runDoctor(\r\n options: RunDoctorOptions = {}\r\n): Promise<RunDoctorResult> {\r\n const homeDir = options.homeDir ?? homedir();\r\n const resolvedPaths = resolveSkillmuxHome(homeDir);\r\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\r\n const [manifest, config, agents] = await Promise.all([\r\n readManifest(skillmuxHome),\r\n loadUserConfig(skillmuxHome),\r\n discoverAgents({\r\n homeDir,\r\n skillmuxHome,\r\n platform: options.platform\r\n })\r\n ]);\r\n\r\n const entries: ScannedSkillEntry[] = [];\r\n const issues: ScanIssue[] = [];\r\n\r\n for (const agent of agents) {\r\n const scannedAgent: ScanAgentSkillsResult = await scanAgentSkills(agent, skillmuxHome);\r\n entries.push(...scannedAgent.entries);\r\n issues.push(...scannedAgent.issues);\r\n }\r\n\r\n const doctorIssues = await collectDoctorIssues({\r\n manifest,\r\n agents,\r\n entries\r\n });\r\n const dedupedIssues = dedupeAndSortIssues([...issues, ...doctorIssues]);\r\n\r\n const resultWithoutOutput = {\r\n skillmuxHome,\r\n manifest,\r\n config,\r\n agents,\r\n entries,\r\n issues: dedupedIssues\r\n };\r\n\r\n return {\r\n ...resultWithoutOutput,\r\n output:\r\n options.json === true\r\n ? buildJsonOutput(resultWithoutOutput)\r\n : buildTableOutput(dedupedIssues)\r\n };\r\n}\r\n","import { resolve } from \"node:path\";\r\nimport { homedir } from \"node:os\";\r\nimport type { ManagedSkill, Manifest } from \"../core/types\";\r\nimport { normalizeId } from \"../core/ids\";\r\nimport { resolveSkillmuxHome } from \"../config/resolve-skillmux-home\";\r\nimport {\r\n assertSkillSourceLayout,\r\n copySkillContentsToManagedStore\r\n} from \"../fs/safe-copy\";\r\nimport { readManifest } from \"../manifest/read-manifest\";\r\nimport { writeManifest } from \"../manifest/write-manifest\";\r\n\r\nexport type RunImportOptions = {\r\n homeDir?: string;\r\n skillmuxHome?: string;\r\n sourcePath: string;\r\n skillName: string;\r\n now?: Date;\r\n};\r\n\r\nexport type RunImportResult = {\r\n skill: ManagedSkill;\r\n manifest: Manifest;\r\n output: string;\r\n};\r\n\r\nfunction buildManagedSkillPath(skillmuxHome: string, skillId: string): string {\r\n return resolve(skillmuxHome, \"skills\", skillId);\r\n}\r\n\r\nexport async function runImport(\r\n options: RunImportOptions\r\n): Promise<RunImportResult> {\r\n const homeDir = options.homeDir ?? homedir();\r\n const resolvedPaths = resolveSkillmuxHome(homeDir);\r\n const skillmuxHome = options.skillmuxHome ?? resolvedPaths.skillmuxHome;\r\n const sourcePath = resolve(options.sourcePath);\r\n const skillId = normalizeId(options.skillName);\r\n const importedAt = (options.now ?? new Date()).toISOString();\r\n const manifest = await readManifest(skillmuxHome);\r\n const managedSkillPath = buildManagedSkillPath(skillmuxHome, skillId);\r\n\r\n await assertSkillSourceLayout(sourcePath);\r\n\r\n if (manifest.skills[skillId] !== undefined) {\r\n throw new Error(`Managed skill already exists for ${skillId}`);\r\n }\r\n\r\n await copySkillContentsToManagedStore(sourcePath, managedSkillPath);\r\n\r\n const skill: ManagedSkill = {\r\n id: skillId,\r\n name: options.skillName,\r\n path: managedSkillPath,\r\n source: {\r\n kind: \"local\",\r\n path: sourcePath\r\n },\r\n importedAt\r\n };\r\n\r\n manifest.skills[skillId] = skill;\r\n await writeManifest(skillmuxHome, manifest);\r\n\r\n return {\r\n skill,\r\n manifest,\r\n output: `Imported ${skillId} to ${managedSkillPath}\\n`\r\n };\r\n}\r\n","import { printJson } from \"../output/print-json\";\r\nimport { printTable } from \"../output/print-table\";\r\nimport { runScan, type RunScanOptions, type RunScanResult } from \"./scan\";\r\n\r\nexport type ListView = \"records\" | \"agents\" | \"skills\";\r\nexport type ListFormat = \"table\" | \"json\";\r\n\r\nexport type RunListOptions = Omit<RunScanOptions, \"json\"> & {\r\n view?: ListView;\r\n format?: ListFormat;\r\n};\r\n\r\nexport type RunListResult = {\r\n output: string;\r\n data: unknown;\r\n};\r\n\r\nfunction buildRecordsView(scanResult: RunScanResult) {\r\n return {\r\n view: \"records\" as const,\r\n records: scanResult.entries,\r\n issues: scanResult.issues\r\n };\r\n}\r\n\r\nfunction buildAgentsView(scanResult: RunScanResult) {\n const groups = new Map<\n string,\n {\r\n agentId: string;\r\n agentName: string;\r\n entries: RunScanResult[\"entries\"];\r\n }\n >();\n\n for (const agent of scanResult.agents) {\n groups.set(agent.id, {\n agentId: agent.id,\n agentName: agent.stableName,\n entries: []\n });\n }\n\n for (const entry of scanResult.entries) {\n const current = groups.get(entry.agentId) ?? {\n agentId: entry.agentId,\n agentName: entry.agentName,\r\n entries: []\r\n };\r\n current.entries.push(entry);\r\n groups.set(entry.agentId, current);\r\n }\r\n\r\n return {\r\n view: \"agents\" as const,\r\n agents: [...groups.values()].sort((left, right) =>\r\n left.agentId.localeCompare(right.agentId)\r\n ),\r\n issues: scanResult.issues\r\n };\r\n}\r\n\r\nfunction buildSkillsView(scanResult: RunScanResult) {\n const groups = new Map<\n string,\n {\r\n skillName: string;\r\n entries: RunScanResult[\"entries\"];\r\n }\n >();\n\n for (const skill of Object.values(scanResult.manifest.skills)) {\n groups.set(skill.id, {\n skillName: skill.id,\n entries: []\n });\n }\n\n for (const entry of scanResult.entries) {\n const current = groups.get(entry.skillName) ?? {\n skillName: entry.skillName,\n entries: []\r\n };\r\n current.entries.push(entry);\r\n groups.set(entry.skillName, current);\r\n }\r\n\r\n return {\r\n view: \"skills\" as const,\r\n skills: [...groups.values()].sort((left, right) =>\r\n left.skillName.localeCompare(right.skillName)\r\n ),\r\n issues: scanResult.issues\r\n };\r\n}\r\n\r\nfunction buildListData(scanResult: RunScanResult, view: ListView): unknown {\r\n if (view === \"agents\") {\r\n return buildAgentsView(scanResult);\r\n }\r\n\r\n if (view === \"skills\") {\r\n return buildSkillsView(scanResult);\r\n }\r\n\r\n return buildRecordsView(scanResult);\r\n}\r\n\r\nfunction buildTableOutput(data: unknown, view: ListView): string {\r\n if (view === \"agents\") {\r\n const agentRows = (data as { agents: Array<{ agentId: string; agentName: string; entries: unknown[] }> }).agents;\r\n return printTable(\r\n agentRows.map((agent) => ({\r\n agent: agent.agentId,\r\n name: agent.agentName,\r\n entries: String(agent.entries.length)\r\n })),\r\n [\r\n { key: \"agent\", label: \"Agent\" },\r\n { key: \"name\", label: \"Name\" },\r\n { key: \"entries\", label: \"Entries\" }\r\n ]\r\n );\r\n }\r\n\r\n if (view === \"skills\") {\r\n const skillRows = (data as { skills: Array<{ skillName: string; entries: unknown[] }> }).skills;\r\n return printTable(\r\n skillRows.map((skill) => ({\r\n skill: skill.skillName,\r\n entries: String(skill.entries.length)\r\n })),\r\n [\r\n { key: \"skill\", label: \"Skill\" },\r\n { key: \"entries\", label: \"Entries\" }\r\n ]\r\n );\r\n }\r\n\r\n const records = (data as { records: Array<{ agentId: string; skillName: string; kind: string }> }).records;\r\n return printTable(\r\n records.map((record) => ({\r\n agent: record.agentId,\r\n skill: record.skillName,\r\n kind: record.kind\r\n })),\r\n [\r\n { key: \"agent\", label: \"Agent\" },\r\n { key: \"skill\", label: \"Skill\" },\r\n { key: \"kind\", label: \"Kind\" }\r\n ]\r\n );\r\n}\r\n\r\nexport async function runList(options: RunListOptions = {}): Promise<RunListResult> {\r\n const view = options.view ?? \"records\";\r\n const format = options.format ?? \"table\";\r\n const scanResult = await runScan(options);\r\n const data = buildListData(scanResult, view);\r\n\r\n return {\r\n data,\r\n output: format === \"json\" ? printJson(data) : buildTableOutput(data, view)\r\n };\r\n}\r\n","export type TtyLike = {\r\n isTTY?: boolean;\r\n};\r\n\r\nexport function isInteractiveTerminal(stdin: TtyLike, stdout: TtyLike): boolean {\r\n return stdin.isTTY === true && stdout.isTTY === true;\r\n}\r\n","import type { LaunchTuiOptions } from \"../tui/launch-tui\";\r\nimport { isInteractiveTerminal, type TtyLike } from \"../tui/tty\";\r\n\r\nexport type RunTuiOptions = LaunchTuiOptions & {\n stdin?: TtyLike;\n stdout?: TtyLike;\n stderr?: { write(message: string): unknown };\n launch?: (options: LaunchTuiOptions) => Promise<void>;\n};\n\nexport class TuiNonInteractiveTerminalError extends Error {\n constructor() {\n super(\"skillmux tui requires an interactive terminal\");\n this.name = \"TuiNonInteractiveTerminalError\";\n }\n}\n\nasync function launchDefaultTui(options: LaunchTuiOptions): Promise<void> {\n const { launchTui } = await import(\"../tui/launch-tui\");\n\r\n await launchTui(options);\r\n}\r\n\r\nexport async function runTui(options: RunTuiOptions = {}): Promise<void> {\r\n const stdin = options.stdin ?? process.stdin;\r\n const stdout = options.stdout ?? process.stdout;\r\n const stderr = options.stderr ?? process.stderr;\r\n\r\n if (!isInteractiveTerminal(stdin, stdout)) {\r\n stderr.write(\n \"skillmux tui requires an interactive terminal. Use skillmux list, skillmux scan, or skillmux doctor for non-interactive output.\\n\"\n );\n throw new TuiNonInteractiveTerminalError();\n }\n\r\n await (options.launch ?? launchDefaultTui)({\r\n homeDir: options.homeDir,\r\n skillmuxHome: options.skillmuxHome\r\n });\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAe;;;ACAxB,SAAS,eAAe;AAqBxB,SAAS,iBAAiB,QAAmC;AAC3D,SAAO;AAAA,IACL,OAAO,IAAI,CAAC,WAAW;AAAA,MACrB,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,QAAQ,OAAO,MAAM,MAAM;AAAA,MAC3B,WAAW,OAAO,MAAM,mBAAmB;AAAA,MAC3C,WAAW,MAAM;AAAA,IACnB,EAAE;AAAA,IACF;AAAA,MACE,EAAE,KAAK,MAAM,OAAO,QAAQ;AAAA,MAC5B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,MACjC,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,MACvC,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,IACzC;AAAA,EACF;AACF;AAEA,eAAsB,UACpB,UAA4B,CAAC,GACH;AAC1B,QAAM,UAAU,QAAQ,WAAW,QAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,SAAS,MAAM,eAAe;AAAA,IAClC;AAAA,IACA;AAAA,IACA,UAAU,QAAQ;AAAA,EACpB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,QACE,QAAQ,SAAS,OACb,UAAU,MAAM,IAChB,iBAAiB,MAAM;AAAA,EAC/B;AACF;;;AC7DA,SAAS,WAAAA,gBAAe;;;ACAxB,SAAS,kBAAkB;AAKpB,SAAS,sBAAsB,OAAe,OAAuB;AAC1E,QAAM,UAAU,MAAM,KAAK;AAE3B,MAAI,QAAQ,WAAW,GAAG;AACxB,UAAM,IAAI,0BAA0B,GAAG,KAAK,oBAAoB;AAAA,EAClE;AAEA,MAAI,WAAW,OAAO,GAAG;AACvB,UAAM,IAAI,0BAA0B,GAAG,KAAK,0BAA0B;AAAA,EACxE;AAEA,QAAM,aAAa,QAAQ,WAAW,MAAM,GAAG;AAE/C,MAAI,eAAe,OAAO,eAAe,QAAQ,WAAW,WAAW,KAAK,KAAK,WAAW,SAAS,MAAM,GAAG;AAC5G,UAAM,IAAI,0BAA0B,GAAG,KAAK,qDAAqD;AAAA,EACnG;AAEA,SAAO,WAAW,QAAQ,UAAU,EAAE;AACxC;AAEO,SAAS,iBAAiB,OAAuB;AACtD,QAAM,UAAU,MAAM,KAAK;AAE3B,MAAI,QAAQ,WAAW,KAAK,YAAY,KAAK,OAAO,MAAM,OAAO;AAC/D,UAAM,IAAI,uBAAuB,YAAY,KAAK;AAAA,EACpD;AAEA,SAAO,YAAY,OAAO;AAC5B;AAEO,SAAS,mBAAmB,OAAkD;AACnF,MAAI,UAAU,UAAa,MAAM,WAAW,GAAG;AAC7C,WAAO,CAAC,QAAQ,QAA6B;AAAA,EAC/C;AAEA,QAAM,aAAa,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,UAAU,MAAM,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AAChF,QAAM,UAAU,WAAW;AAAA,IACzB,CAAC,UAA2B,mBAAmB,SAAS,KAA0B,MAAM;AAAA,EAC1F;AAEA,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,IAAI;AAAA,MACR,4BAA4B,mBAAmB,KAAK,IAAI,CAAC;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AACT;;;ACpDA,YAAY,QAAQ;AAIpB,eAAsB,gBACpB,cACA,QACiC;AACjC,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAS,SAAM,cAAc,EAAE,WAAW,KAAK,CAAC;AAChD,QAAS,aAAU,YAAY,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAE7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AFkBA,SAAS,mBAAmB,SAG1B;AACA,QAAM,UAAU,iBAAiB,QAAQ,EAAE;AAC3C,QAAM,QAAuB;AAAA,IAC3B,oBAAoB,mBAAmB,QAAQ,SAAS;AAAA,IACxD,sBAAsB,sBAAsB,QAAQ,MAAM,MAAM;AAAA,IAChE,qBAAqB,sBAAsB,QAAQ,UAAU,UAAU,QAAQ;AAAA,EACjF;AAEA,MAAI,QAAQ,SAAS,UAAa,QAAQ,KAAK,KAAK,EAAE,SAAS,GAAG;AAChE,UAAM,aAAa,QAAQ,KAAK,KAAK;AAAA,EACvC;AAEA,MAAI,QAAQ,sBAAsB,MAAM;AACtC,UAAM,mBAAmB;AAAA,EAC3B;AAEA,SAAO,EAAE,SAAS,MAAM;AAC1B;AAEA,SAASC,kBAAiB,QAAyD;AACjF,QAAM,UAAU;AAAA,IACd;AAAA,MACE;AAAA,QACE,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,WAAW,OAAO,QAAQ;AAAA,MACjC,EAAE,KAAK,cAAc,OAAO,cAAc;AAAA,MAC1C,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,SAAS;AAAA,IACb;AAAA,MACE;AAAA,QACE,YAAY,OAAO,MAAM,cAAc;AAAA,QACvC,YAAY,OAAO,MAAM,sBAAsB,CAAC,GAAG,KAAK,GAAG;AAAA,QAC3D,MAAM,OAAO,MAAM,wBAAwB;AAAA,QAC3C,QAAQ,OAAO,MAAM,uBAAuB;AAAA,QAC5C,kBACE,OAAO,MAAM,qBAAqB,SAC9B,KACA,OAAO,OAAO,MAAM,gBAAgB;AAAA,MAC5C;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,cAAc,OAAO,OAAO;AAAA,MACnC,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,MACvC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,UAAU,OAAO,aAAa;AAAA,MACrC,EAAE,KAAK,oBAAoB,OAAO,qBAAqB;AAAA,IACzD;AAAA,EACF;AAEA,SAAO,GAAG,OAAO,GAAG,MAAM;AAC5B;AAEA,eAAsB,kBACpB,SACkC;AAClC,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,SAAS,MAAM,eAAe,YAAY;AAChD,QAAM,EAAE,SAAS,MAAM,IAAI,mBAAmB,OAAO;AACrD,QAAM,WAAW,OAAO,OAAO,OAAO;AACtC,QAAM,UAAU,KAAK,UAAU,YAAY,IAAI,MAAM,KAAK,UAAU,KAAK;AAEzE,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,IACb;AAAA,EACF;AAEA,QAAM,gBAAgB,cAAc,UAAU;AAE9C,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,QAAQ,SAAS,OACb,UAAU,mBAAmB,IAC7BD,kBAAiB,mBAAmB;AAAA,EAC5C;AACF;;;AGvIA,SAAS,WAAAE,gBAAe;AA0BxB,SAASC,kBAAiB,OAAuB;AAC/C,QAAM,UAAU,MAAM,KAAK;AAE3B,MAAI,QAAQ,WAAW,KAAK,YAAY,KAAK,OAAO,MAAM,OAAO;AAC/D,UAAM,IAAI,uBAAuB,YAAY,KAAK;AAAA,EACpD;AAEA,SAAO,YAAY,OAAO;AAC5B;AAEA,SAASC,kBAAiB,QAA4D;AACpF,SAAO;AAAA,IACL;AAAA,MACE;AAAA,QACE,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO,OAAO,OAAO;AAAA,QAC9B,SAAS,OAAO,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,WAAW,OAAO,QAAQ;AAAA,MACjC,EAAE,KAAK,cAAc,OAAO,cAAc;AAAA,MAC1C,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,MACnC,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AACF;AAEA,eAAsB,qBACpB,SACqC;AACrC,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,SAAS,MAAM,eAAe,YAAY;AAChD,QAAM,UAAUF,kBAAiB,QAAQ,EAAE;AAC3C,QAAM,UAAU,WAAW,OAAO;AAElC,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,QAAQ,OAAO;AAAA,MACb,OAAO,QAAQ,OAAO,MAAM,EAAE,OAAO,CAAC,CAAC,cAAc,MAAM,mBAAmB,OAAO;AAAA,IACvF;AAAA,EACF;AAEA,MAAI,SAAS;AACX,UAAM,gBAAgB,cAAc,UAAU;AAAA,EAChD;AAEA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,QAAQ,SAAS,OACb,UAAU,mBAAmB,IAC7BC,kBAAiB,mBAAmB;AAAA,EAC5C;AACF;;;AC7FA,SAAS,WAAAE,gBAAe;AAoCxB,SAAS,gBAAgB,SAAqD;AAC5E,QAAM,QAAuB,CAAC;AAE9B,MAAI,QAAQ,SAAS,QAAW;AAC9B,UAAM,uBAAuB,sBAAsB,QAAQ,MAAM,MAAM;AAAA,EACzE;AAEA,MAAI,QAAQ,WAAW,QAAW;AAChC,UAAM,sBAAsB,sBAAsB,QAAQ,QAAQ,QAAQ;AAAA,EAC5E;AAEA,MAAI,QAAQ,SAAS,UAAa,QAAQ,KAAK,KAAK,EAAE,SAAS,GAAG;AAChE,UAAM,aAAa,QAAQ,KAAK,KAAK;AAAA,EACvC;AAEA,MAAI,QAAQ,cAAc,QAAW;AACnC,UAAM,qBAAqB,mBAAmB,QAAQ,SAAS;AAAA,EACjE;AAEA,MAAI,QAAQ,qBAAqB,UAAa,QAAQ,sBAAsB,MAAM;AAChF,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,qBAAqB,QAAW;AAC1C,UAAM,mBAAmB,QAAQ;AAAA,EACnC;AAEA,MAAI,QAAQ,sBAAsB,MAAM;AACtC,UAAM,mBAAmB;AAAA,EAC3B;AAEA,SAAO;AACT;AAEA,SAASC,kBAAiB,QAA4D;AACpF,QAAM,UAAU;AAAA,IACd;AAAA,MACE;AAAA,QACE,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,WAAW,OAAO,QAAQ;AAAA,MACjC,EAAE,KAAK,cAAc,OAAO,cAAc;AAAA,MAC1C,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,SAAS;AAAA,IACb;AAAA,MACE;AAAA,QACE,YAAY,OAAO,MAAM,cAAc;AAAA,QACvC,YAAY,OAAO,MAAM,sBAAsB,CAAC,GAAG,KAAK,GAAG;AAAA,QAC3D,MAAM,OAAO,MAAM,wBAAwB;AAAA,QAC3C,QAAQ,OAAO,MAAM,uBAAuB;AAAA,QAC5C,kBACE,OAAO,MAAM,qBAAqB,SAC9B,KACA,OAAO,OAAO,MAAM,gBAAgB;AAAA,MAC5C;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,cAAc,OAAO,OAAO;AAAA,MACnC,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,MACvC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,UAAU,OAAO,aAAa;AAAA,MACrC,EAAE,KAAK,oBAAoB,OAAO,qBAAqB;AAAA,IACzD;AAAA,EACF;AAEA,SAAO,GAAG,OAAO,GAAG,MAAM;AAC5B;AAEA,eAAsB,qBACpB,SACqC;AACrC,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,SAAS,MAAM,eAAe,YAAY;AAChD,QAAM,UAAU,iBAAiB,QAAQ,EAAE;AAC3C,QAAM,WAAW,OAAO,OAAO,OAAO;AAEtC,MAAI,aAAa,QAAW;AAC1B,UAAM,IAAI,0BAA0B,kCAAkC,OAAO,EAAE;AAAA,EACjF;AAEA,QAAM,QAAuB;AAAA,IAC3B,GAAG;AAAA,IACH,GAAG,gBAAgB,OAAO;AAAA,EAC5B;AACA,QAAM,UAAU,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,KAAK;AAEjE,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,IACb;AAAA,EACF;AAEA,MAAI,SAAS;AACX,UAAM,gBAAgB,cAAc,UAAU;AAAA,EAChD;AAEA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,QAAQ,SAAS,OACb,UAAU,mBAAmB,IAC7BD,kBAAiB,mBAAmB;AAAA,EAC5C;AACF;;;AClKA,SAAS,WAAAE,gBAAe;AAoBxB,SAASC,kBAAiB,QAAiD;AACzE,QAAM,UAAU;AAAA,IACd;AAAA,MACE;AAAA,QACE,cAAc,OAAO;AAAA,QACrB,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO,OAAO,KAAK,OAAO,OAAO,MAAM,EAAE,MAAM;AAAA,MAC5D;AAAA,IACF;AAAA,IACA;AAAA,MACE,EAAE,KAAK,gBAAgB,OAAO,gBAAgB;AAAA,MAC9C,EAAE,KAAK,cAAc,OAAO,cAAc;AAAA,MAC1C,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,YAAY,OAAO,QAAQ,OAAO,OAAO,MAAM,EAClD,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO;AAAA,IAC1B;AAAA,IACA,YAAY,MAAM,cAAc;AAAA,IAChC,MAAM,MAAM,wBAAwB;AAAA,IACpC,QAAQ,MAAM,uBAAuB;AAAA,EACvC,EAAE;AAEJ,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO,GAAG,OAAO;AAAA;AAAA;AAAA,EACnB;AAEA,SAAO,GAAG,OAAO;AAAA,EAAK,WAAW,WAAW;AAAA,IAC1C,EAAE,KAAK,WAAW,OAAO,QAAQ;AAAA,IACjC,EAAE,KAAK,cAAc,OAAO,OAAO;AAAA,IACnC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,UAAU,OAAO,aAAa;AAAA,EACvC,CAAC,CAAC;AACJ;AAEA,eAAsB,UACpB,UAA4B,CAAC,GACH;AAC1B,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,SAAS,MAAM,eAAe,YAAY;AAEhD,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA,YAAY,gBAAgB,YAAY;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,QAAQ,SAAS,OACb,UAAU,mBAAmB,IAC7BD,kBAAiB,mBAAmB;AAAA,EAC5C;AACF;;;AC9EA,SAAS,WAAAE,gBAAe;AAuCxB,SAASC,kBAAiB,QAA6B;AACrD,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO,IAAI,CAAC,WAAW;AAAA,MACrB,UAAU,MAAM;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM,QAAQ;AAAA,MACpB,SAAS,MAAM;AAAA,IACjB,EAAE;AAAA,IACF;AAAA,MACE,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,MACrC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,MAC7B,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,QAAiD;AACxE,SAAO,UAAU;AAAA,IACf,cAAc,OAAO;AAAA,IACrB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,qBAAqB,MAAM;AAAA,IAC7B,EAAE;AAAA,IACF,SAAS,OAAO;AAAA,EAClB,CAAC;AACH;AAEA,eAAsB,UACpB,UAA4B,CAAC,GACH;AAC1B,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,CAAC,UAAU,QAAQ,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnD,aAAa,YAAY;AAAA,IACzB,eAAe,YAAY;AAAA,IAC3B,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA,UAAU,QAAQ;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AAED,QAAM,UAA+B,CAAC;AACtC,QAAM,SAAsB,CAAC;AAE7B,aAAW,SAAS,QAAQ;AAC1B,UAAM,eAAsC,MAAM,gBAAgB,OAAO,YAAY;AACrF,YAAQ,KAAK,GAAG,aAAa,OAAO;AACpC,WAAO,KAAK,GAAG,aAAa,MAAM;AAAA,EACpC;AAEA,QAAM,eAAe,MAAM,oBAAoB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,oBAAoB,CAAC,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtE,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,QAAQ,SAAS,OACb,gBAAgB,mBAAmB,IACnCD,kBAAiB,aAAa;AAAA,EACtC;AACF;;;ACzHA,SAAS,eAAe;AACxB,SAAS,WAAAE,gBAAe;AAyBxB,SAAS,sBAAsB,cAAsB,SAAyB;AAC5E,SAAO,QAAQ,cAAc,UAAU,OAAO;AAChD;AAEA,eAAsB,UACpB,SAC0B;AAC1B,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAC3C,QAAM,gBAAgB,oBAAoB,OAAO;AACjD,QAAM,eAAe,QAAQ,gBAAgB,cAAc;AAC3D,QAAM,aAAa,QAAQ,QAAQ,UAAU;AAC7C,QAAM,UAAU,YAAY,QAAQ,SAAS;AAC7C,QAAM,cAAc,QAAQ,OAAO,oBAAI,KAAK,GAAG,YAAY;AAC3D,QAAM,WAAW,MAAM,aAAa,YAAY;AAChD,QAAM,mBAAmB,sBAAsB,cAAc,OAAO;AAEpE,QAAM,wBAAwB,UAAU;AAExC,MAAI,SAAS,OAAO,OAAO,MAAM,QAAW;AAC1C,UAAM,IAAI,MAAM,oCAAoC,OAAO,EAAE;AAAA,EAC/D;AAEA,QAAM,gCAAgC,YAAY,gBAAgB;AAElE,QAAM,QAAsB;AAAA,IAC1B,IAAI;AAAA,IACJ,MAAM,QAAQ;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AAEA,WAAS,OAAO,OAAO,IAAI;AAC3B,QAAM,cAAc,cAAc,QAAQ;AAE1C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,YAAY,OAAO,OAAO,gBAAgB;AAAA;AAAA,EACpD;AACF;;;ACpDA,SAAS,iBAAiB,YAA2B;AACnD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,WAAW;AAAA,IACpB,QAAQ,WAAW;AAAA,EACrB;AACF;AAEA,SAAS,gBAAgB,YAA2B;AAClD,QAAM,SAAS,oBAAI,IAOjB;AAEF,aAAW,SAAS,WAAW,QAAQ;AACrC,WAAO,IAAI,MAAM,IAAI;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,SAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,aAAW,SAAS,WAAW,SAAS;AACtC,UAAM,UAAU,OAAO,IAAI,MAAM,OAAO,KAAK;AAAA,MAC3C,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,SAAS,CAAC;AAAA,IACZ;AACA,YAAQ,QAAQ,KAAK,KAAK;AAC1B,WAAO,IAAI,MAAM,SAAS,OAAO;AAAA,EACnC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE;AAAA,MAAK,CAAC,MAAM,UACvC,KAAK,QAAQ,cAAc,MAAM,OAAO;AAAA,IAC1C;AAAA,IACA,QAAQ,WAAW;AAAA,EACrB;AACF;AAEA,SAAS,gBAAgB,YAA2B;AAClD,QAAM,SAAS,oBAAI,IAMjB;AAEF,aAAW,SAAS,OAAO,OAAO,WAAW,SAAS,MAAM,GAAG;AAC7D,WAAO,IAAI,MAAM,IAAI;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,SAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,aAAW,SAAS,WAAW,SAAS;AACtC,UAAM,UAAU,OAAO,IAAI,MAAM,SAAS,KAAK;AAAA,MAC7C,WAAW,MAAM;AAAA,MACjB,SAAS,CAAC;AAAA,IACZ;AACA,YAAQ,QAAQ,KAAK,KAAK;AAC1B,WAAO,IAAI,MAAM,WAAW,OAAO;AAAA,EACrC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE;AAAA,MAAK,CAAC,MAAM,UACvC,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA,IAC9C;AAAA,IACA,QAAQ,WAAW;AAAA,EACrB;AACF;AAEA,SAAS,cAAc,YAA2B,MAAyB;AACzE,MAAI,SAAS,UAAU;AACrB,WAAO,gBAAgB,UAAU;AAAA,EACnC;AAEA,MAAI,SAAS,UAAU;AACrB,WAAO,gBAAgB,UAAU;AAAA,EACnC;AAEA,SAAO,iBAAiB,UAAU;AACpC;AAEA,SAASC,kBAAiB,MAAe,MAAwB;AAC/D,MAAI,SAAS,UAAU;AACrB,UAAM,YAAa,KAAuF;AAC1G,WAAO;AAAA,MACL,UAAU,IAAI,CAAC,WAAW;AAAA,QACxB,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,SAAS,OAAO,MAAM,QAAQ,MAAM;AAAA,MACtC,EAAE;AAAA,MACF;AAAA,QACE,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,QAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,QAC7B,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,UAAU;AACrB,UAAM,YAAa,KAAsE;AACzF,WAAO;AAAA,MACL,UAAU,IAAI,CAAC,WAAW;AAAA,QACxB,OAAO,MAAM;AAAA,QACb,SAAS,OAAO,MAAM,QAAQ,MAAM;AAAA,MACtC,EAAE;AAAA,MACF;AAAA,QACE,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,QAC/B,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAW,KAAkF;AACnG,SAAO;AAAA,IACL,QAAQ,IAAI,CAAC,YAAY;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,IACf,EAAE;AAAA,IACF;AAAA,MACE,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,MAC/B,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,MAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,eAAsB,QAAQ,UAA0B,CAAC,GAA2B;AAClF,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,aAAa,MAAM,QAAQ,OAAO;AACxC,QAAM,OAAO,cAAc,YAAY,IAAI;AAE3C,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,WAAW,SAAS,UAAU,IAAI,IAAIA,kBAAiB,MAAM,IAAI;AAAA,EAC3E;AACF;;;AChKO,SAAS,sBAAsB,OAAgB,QAA0B;AAC9E,SAAO,MAAM,UAAU,QAAQ,OAAO,UAAU;AAClD;;;ACIO,IAAM,iCAAN,cAA6C,MAAM;AAAA,EACxD,cAAc;AACZ,UAAM,+CAA+C;AACrD,SAAK,OAAO;AAAA,EACd;AACF;AAEA,eAAe,iBAAiB,SAA0C;AACxE,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,0BAAmB;AAEtD,QAAM,UAAU,OAAO;AACzB;AAEA,eAAsB,OAAO,UAAyB,CAAC,GAAkB;AACvE,QAAM,QAAQ,QAAQ,SAAS,QAAQ;AACvC,QAAM,SAAS,QAAQ,UAAU,QAAQ;AACzC,QAAM,SAAS,QAAQ,UAAU,QAAQ;AAEzC,MAAI,CAAC,sBAAsB,OAAO,MAAM,GAAG;AACzC,WAAO;AAAA,MACL;AAAA,IACF;AACA,UAAM,IAAI,+BAA+B;AAAA,EAC3C;AAEA,SAAO,QAAQ,UAAU,kBAAkB;AAAA,IACzC,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,EACxB,CAAC;AACH;;;AZtBA,SAAS,cAAc,OAAe,WAAqB,CAAC,GAAa;AACvE,SAAO,CAAC,GAAG,UAAU,KAAK;AAC5B;AAEA,SAAS,mBAAmB,QAAkB,OAAuB;AACnE,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,EACjD;AAEA,SAAO,OAAO,CAAC;AACjB;AAEA,SAAS,uBAAuB,QAAkB,OAAyB;AACzE,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,EAClD;AAEA,SAAO;AACT;AAEO,SAAS,WAAoB;AAClC,QAAM,UAAU,IAAI,QAAQ;AAC5B,UAAQ,KAAK,UAAU;AAEvB,UACG,QAAQ,OAAO,EACf,eAAe,mBAAmB,iBAAiB,EACnD,OAAO,mBAAmB,uCAAuC,eAAe,CAAC,CAAC,EAClF,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAgE;AAC7E,UAAM,SAAS,QAAQ,MAAM,WAAW,IACpC,MAAM,SAAS;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC,IACD,QAAQ,MAAM,WAAW,IACvB,MAAM,SAAS;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ,MAAM,CAAC;AAAA,MACtB,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC,IACD,MAAM,SAAS;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC;AACP,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,MAAM,EACd,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAgC;AAC7C,UAAM,SAAS,MAAM,QAAQ,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC5D,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,QAAQ,EAChB,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAgC;AAC7C,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,MAAM,EACd,OAAO,iBAAiB,0CAA0C,SAAS,EAC3E,OAAO,qBAAqB,+BAA+B,OAAO,EAClE,OAAO,OAAO,YAAmF;AAChG,UAAM,SAAS,MAAM,QAAQ;AAAA,MAC3B,MAAM,QAAQ;AAAA,MACd,QAAQ,QAAQ;AAAA,IAClB,CAAC;AACD,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,QAAQ,EAChB,eAAe,mBAAmB,8BAA8B,EAChE,eAAe,iBAAiB,oBAAoB,EACpD,OAAO,OAAO,YAA8C;AAC3D,UAAM,SAAS,MAAM,UAAU;AAAA,MAC7B,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB,CAAC;AACD,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,QAAQ,EAChB,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAgC;AAC7C,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,KAAK,EACb,YAAY,yCAAyC,EACrD,OAAO,YAAY;AAClB,QAAI;AACF,YAAM,OAAO;AAAA,IACf,SAAS,OAAO;AACd,UAAI,iBAAiB,gCAAgC;AACnD,gBAAQ,WAAW;AACnB;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF,CAAC;AAEH,QAAM,gBAAgB,QAAQ,QAAQ,QAAQ;AAE9C,gBACG,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAgC;AAC7C,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,gBACG,QAAQ,WAAW,EACnB,eAAe,aAAa,UAAU,EACtC,eAAe,iBAAiB,yBAAyB,EACzD,OAAO,mBAAmB,oDAAoD,QAAQ,EACtF,OAAO,iBAAiB,qBAAqB,EAC7C;AAAA,IACC;AAAA,IACA,uBAAuB,mBAAmB,KAAK,IAAI,CAAC;AAAA,IACpD,CAAC,OAAe,WAAqB,CAAC,MAAM,CAAC,GAAG,UAAU,KAAK;AAAA,IAC/D,CAAC;AAAA,EACH,EACC,OAAO,yBAAyB,+CAA+C,EAC/E,OAAO,UAAU,6BAA6B,EAC9C;AAAA,IACC,OAAO,YAQD;AACJ,YAAM,SAAS,MAAM,kBAAkB;AAAA,QACrC,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,QACd,WAAW,QAAQ;AAAA,QACnB,mBAAmB,QAAQ,sBAAsB;AAAA,QACjD,MAAM,QAAQ,SAAS;AAAA,MACzB,CAAC;AACD,cAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,IACpC;AAAA,EACF;AAEF,gBACG,QAAQ,cAAc,EACtB,eAAe,aAAa,UAAU,EACtC,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAA4C;AACzD,UAAM,SAAS,MAAM,qBAAqB;AAAA,MACxC,IAAI,QAAQ;AAAA,MACZ,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC;AACD,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,gBACG,QAAQ,cAAc,EACtB,eAAe,aAAa,UAAU,EACtC,OAAO,iBAAiB,yBAAyB,EACjD,OAAO,mBAAmB,kDAAkD,EAC5E,OAAO,iBAAiB,qBAAqB,EAC7C;AAAA,IACC;AAAA,IACA,uBAAuB,mBAAmB,KAAK,IAAI,CAAC;AAAA,IACpD,CAAC,OAAe,WAAqB,CAAC,MAAM,CAAC,GAAG,UAAU,KAAK;AAAA,IAC/D,CAAC;AAAA,EACH,EACC,OAAO,wBAAwB,8CAA8C,EAC7E,OAAO,yBAAyB,+CAA+C,EAC/E,OAAO,UAAU,6BAA6B,EAC9C;AAAA,IACC,OAAO,YASD;AACJ,YAAM,SAAS,MAAM,qBAAqB;AAAA,QACxC,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,QACd,WACE,QAAQ,aAAa,UAAa,QAAQ,SAAS,SAAS,IACxD,QAAQ,WACR;AAAA,QACN,kBACE,QAAQ,qBAAqB,OAAO,OAAO;AAAA,QAC7C,mBAAmB,QAAQ,sBAAsB;AAAA,QACjD,MAAM,QAAQ,SAAS;AAAA,MACzB,CAAC;AACD,cAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,IACpC;AAAA,EACF;AAEF,UACG,QAAQ,QAAQ,EAChB,eAAe,mBAAmB,4BAA4B,eAAe,CAAC,CAAC,EAC/E,eAAe,mBAAmB,2BAA2B,eAAe,CAAC,CAAC,EAC9E,OAAO,OAAO,YAAkD;AAC/D,UAAM,SAAS,MAAM,UAAU;AAAA,MAC7B,OAAO,mBAAmB,QAAQ,OAAO,OAAO;AAAA,MAChD,QAAQ,uBAAuB,QAAQ,OAAO,OAAO;AAAA,IACvD,CAAC;AACD,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,SAAS,EACjB,eAAe,mBAAmB,4BAA4B,eAAe,CAAC,CAAC,EAC/E,eAAe,mBAAmB,2BAA2B,eAAe,CAAC,CAAC,EAC9E,OAAO,OAAO,YAAkD;AAC/D,UAAM,SAAS,MAAM,WAAW;AAAA,MAC9B,OAAO,mBAAmB,QAAQ,OAAO,OAAO;AAAA,MAChD,QAAQ,uBAAuB,QAAQ,OAAO,OAAO;AAAA,IACvD,CAAC;AACD,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,UACG,QAAQ,QAAQ,EAChB,eAAe,mBAAmB,uCAAuC,eAAe,CAAC,CAAC,EAC1F,OAAO,UAAU,6BAA6B,EAC9C,OAAO,OAAO,YAAiD;AAC9D,UAAM,SAAS,uBAAuB,QAAQ,OAAO,OAAO;AAC5D,UAAM,SAAS,OAAO,WAAW,IAC7B,MAAM,UAAU;AAAA,MACd,OAAO,OAAO,CAAC;AAAA,MACf,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC,IACD,MAAM,UAAU;AAAA,MACd;AAAA,MACA,MAAM,QAAQ,SAAS;AAAA,IACzB,CAAC;AACL,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC,CAAC;AAEH,SAAO;AACT;","names":["homedir","buildTableOutput","homedir","homedir","normalizeAgentId","buildTableOutput","homedir","homedir","buildTableOutput","homedir","homedir","buildTableOutput","homedir","homedir","buildTableOutput","homedir","homedir","homedir","buildTableOutput"]}
|