unicommand 0.0.2 → 0.0.4
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/dist/index.d.ts +99 -93
- package/dist/index.js +27 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -106,91 +106,6 @@ declare const setProgramHelpData: (program: Program, data: ProgramHelpData) => v
|
|
|
106
106
|
declare const isGlobalHelpRequest: (args: readonly string[]) => boolean;
|
|
107
107
|
declare const printProgramHelp: (program: Program) => Promise<void>;
|
|
108
108
|
|
|
109
|
-
type CommandRegistrarContext$1<TContext> = {
|
|
110
|
-
binName: string;
|
|
111
|
-
getContext?: () => Promise<TContext> | TContext;
|
|
112
|
-
};
|
|
113
|
-
type CommandRegistrar<TContext> = (program: Program, context: CommandRegistrarContext$1<TContext>) => void;
|
|
114
|
-
type RegisterCliCommandsFromDirectoryOptions<TContext> = {
|
|
115
|
-
binName: string;
|
|
116
|
-
commandsDir: string;
|
|
117
|
-
getContext?: () => Promise<TContext> | TContext;
|
|
118
|
-
program: Program;
|
|
119
|
-
};
|
|
120
|
-
type CreateCommandProgramOptions<TContext> = {
|
|
121
|
-
binName: string;
|
|
122
|
-
binNames?: readonly string[];
|
|
123
|
-
commandsDir?: string;
|
|
124
|
-
description: string;
|
|
125
|
-
getContext?: () => Promise<TContext> | TContext;
|
|
126
|
-
importMetaUrl: string;
|
|
127
|
-
isDevRun?: boolean;
|
|
128
|
-
packageName?: string;
|
|
129
|
-
printVersion?: (version: string) => void;
|
|
130
|
-
version?: string;
|
|
131
|
-
};
|
|
132
|
-
type RegisterParentCommandsFromDefinitionsOptions = {
|
|
133
|
-
description?: (name: string) => string;
|
|
134
|
-
print?: (message: string) => void;
|
|
135
|
-
};
|
|
136
|
-
declare const createCommandProgram: <TContext>({ binName, binNames, commandsDir, description, getContext, importMetaUrl, isDevRun, packageName, printVersion, version, }: CreateCommandProgramOptions<TContext>) => Promise<Program>;
|
|
137
|
-
declare const registerParentCommandsFromDefinitions: (program: Program, definitions: readonly CommandDefinition[], options?: RegisterParentCommandsFromDefinitionsOptions) => void;
|
|
138
|
-
declare const registerCliCommandsFromDirectory: <TContext>({ binName, commandsDir, getContext, program, }: RegisterCliCommandsFromDirectoryOptions<TContext>) => Promise<CommandDefinition[]>;
|
|
139
|
-
declare const getProgramConstructor: () => new () => Program;
|
|
140
|
-
|
|
141
|
-
type CliConfig<TProgram> = {
|
|
142
|
-
createProgram: (binName: string) => TProgram | Promise<TProgram>;
|
|
143
|
-
defaultBinName: string;
|
|
144
|
-
envBinName: string;
|
|
145
|
-
importMetaUrl: string;
|
|
146
|
-
};
|
|
147
|
-
declare const getProgramBin: (config: Pick<CliConfig<unknown>, "defaultBinName" | "envBinName" | "importMetaUrl">) => string;
|
|
148
|
-
declare const isDirectRun: (importMetaUrl: string) => boolean;
|
|
149
|
-
|
|
150
|
-
type CreateCommandCliRunnerOptions<TContext> = {
|
|
151
|
-
binNames?: readonly string[];
|
|
152
|
-
commandsDir?: string;
|
|
153
|
-
defaultBinName: string;
|
|
154
|
-
description: string;
|
|
155
|
-
envBinName: string;
|
|
156
|
-
getContext?: () => Promise<TContext> | TContext;
|
|
157
|
-
importMetaUrl: string;
|
|
158
|
-
isDevRun?: boolean;
|
|
159
|
-
packageName?: string;
|
|
160
|
-
printVersion?: (version: string) => void;
|
|
161
|
-
version?: string;
|
|
162
|
-
};
|
|
163
|
-
type CreatePackageCommandCliRunnerOptions<TContext> = Omit<CreateCommandCliRunnerOptions<TContext>, 'defaultBinName' | 'description' | 'envBinName'> & {
|
|
164
|
-
defaultBinName?: string;
|
|
165
|
-
description?: string;
|
|
166
|
-
envBinName?: string;
|
|
167
|
-
};
|
|
168
|
-
declare const createCliRunner: (config: CliConfig<Program>) => {
|
|
169
|
-
isDirectRun: () => boolean;
|
|
170
|
-
runCli: (args?: string[]) => Promise<number>;
|
|
171
|
-
};
|
|
172
|
-
declare const createPackageCommandCliRunner: <TContext>({ defaultBinName, envBinName, importMetaUrl, ...options }: CreatePackageCommandCliRunnerOptions<TContext>) => {
|
|
173
|
-
isDirectRun: () => boolean;
|
|
174
|
-
runCli: (args?: string[]) => Promise<number>;
|
|
175
|
-
};
|
|
176
|
-
declare const createCommandCliRunner: <TContext>({ binNames, commandsDir, defaultBinName, description, envBinName, getContext, importMetaUrl, isDevRun, packageName, printVersion, version, }: CreateCommandCliRunnerOptions<TContext>) => {
|
|
177
|
-
isDirectRun: () => boolean;
|
|
178
|
-
runCli: (args?: string[]) => Promise<number>;
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
declare enum PackageManager {
|
|
182
|
-
Npm = "npm",
|
|
183
|
-
Pnpm = "pnpm",
|
|
184
|
-
Yarn = "yarn"
|
|
185
|
-
}
|
|
186
|
-
type RegisterUpdateCommandOptions = {
|
|
187
|
-
isDevRun: boolean;
|
|
188
|
-
packageName: string;
|
|
189
|
-
version?: string;
|
|
190
|
-
};
|
|
191
|
-
declare const registerUpdateCommand: (program: Program, options: RegisterUpdateCommandOptions) => void;
|
|
192
|
-
declare function getPackageManagerFromPath(globalBinPath: string): PackageManager | null;
|
|
193
|
-
|
|
194
109
|
type McpToolDefinition = {
|
|
195
110
|
name: string;
|
|
196
111
|
description: string;
|
|
@@ -258,6 +173,7 @@ type CreateSingleToolMcpServerOptions = {
|
|
|
258
173
|
type CreateCommandMcpServerOptions<TContext> = {
|
|
259
174
|
commandsDir?: string;
|
|
260
175
|
getContext?: () => Promise<TContext> | TContext;
|
|
176
|
+
importCommandModule?: CommandModuleImporter;
|
|
261
177
|
importMetaUrl: string;
|
|
262
178
|
name: string;
|
|
263
179
|
prefix?: string;
|
|
@@ -286,12 +202,12 @@ type Handler<TInput, TResult> = {
|
|
|
286
202
|
type ContextHandler<TContext, TInput, TResult> = {
|
|
287
203
|
handle(context: TContext, input: TInput): Promise<TResult> | TResult;
|
|
288
204
|
}['handle'];
|
|
289
|
-
type CommandRegistrarContext<TContext> = {
|
|
205
|
+
type CommandRegistrarContext$1<TContext> = {
|
|
290
206
|
binName?: string;
|
|
291
207
|
getContext?: ContextFactory<TContext>;
|
|
292
208
|
};
|
|
293
209
|
type CommandAdaptersReturn<TContext, THandler> = {
|
|
294
|
-
cli: (program: Program, context?: CommandRegistrarContext<TContext>) => void;
|
|
210
|
+
cli: (program: Program, context?: CommandRegistrarContext$1<TContext>) => void;
|
|
295
211
|
handler: THandler;
|
|
296
212
|
mcp: (getContext?: ContextFactory<TContext>) => CommandMcpRoute;
|
|
297
213
|
metadata: CommandDefinition;
|
|
@@ -312,13 +228,102 @@ declare function createCommandAdapters<TInputSchema extends ZodType = ZodType<Re
|
|
|
312
228
|
declare function createCommandAdapters<TContext, TInputSchema extends ZodType = ZodType<Record<string, unknown>>, TOutputSchema extends ZodType = ZodType, TResult = unknown>(options: ContextCommandAdaptersOptions<TContext, TInputSchema, TOutputSchema, TResult>): CommandAdaptersReturn<TContext, ContextHandler<TContext, z.infer<TInputSchema>, TResult>>;
|
|
313
229
|
|
|
314
230
|
type CommandModule = Record<string, unknown>;
|
|
231
|
+
type CommandModuleImporter = (file: string) => Promise<CommandModule>;
|
|
315
232
|
type CommandAdapterExport = Pick<CommandAdaptersReturn<unknown, unknown>, 'cli'> & Partial<Pick<CommandAdaptersReturn<unknown, unknown>, 'mcp' | 'metadata'>>;
|
|
316
|
-
declare const loadCommandModules: (commandsDir: string) => Promise<CommandModule[]>;
|
|
317
|
-
declare const loadCommandModulesFromFiles: (files: readonly string[]) => Promise<CommandModule[]>;
|
|
233
|
+
declare const loadCommandModules: (commandsDir: string, importModule?: CommandModuleImporter) => Promise<CommandModule[]>;
|
|
234
|
+
declare const loadCommandModulesFromFiles: (files: readonly string[], importModule?: CommandModuleImporter) => Promise<CommandModule[]>;
|
|
318
235
|
declare const commandDefinitionsFromModules: (modules: readonly CommandModule[]) => CommandDefinition[];
|
|
319
236
|
declare const commandExportsFromModules: <TExport>(modules: readonly CommandModule[], isExport: (name: string, value: unknown) => boolean) => TExport[];
|
|
320
237
|
declare const isCommandAdapterExport: (value: unknown) => value is CommandAdapterExport;
|
|
321
238
|
|
|
239
|
+
type CommandRegistrarContext<TContext> = {
|
|
240
|
+
binName: string;
|
|
241
|
+
getContext?: () => Promise<TContext> | TContext;
|
|
242
|
+
};
|
|
243
|
+
type CommandRegistrar<TContext> = (program: Program, context: CommandRegistrarContext<TContext>) => void;
|
|
244
|
+
type RegisterCliCommandsFromDirectoryOptions<TContext> = {
|
|
245
|
+
binName: string;
|
|
246
|
+
commandsDir: string;
|
|
247
|
+
getContext?: () => Promise<TContext> | TContext;
|
|
248
|
+
importCommandModule?: CommandModuleImporter;
|
|
249
|
+
program: Program;
|
|
250
|
+
};
|
|
251
|
+
type CreateCommandProgramOptions<TContext> = {
|
|
252
|
+
binName: string;
|
|
253
|
+
binNames?: readonly string[];
|
|
254
|
+
commandsDir?: string;
|
|
255
|
+
description: string;
|
|
256
|
+
getContext?: () => Promise<TContext> | TContext;
|
|
257
|
+
importCommandModule?: CommandModuleImporter;
|
|
258
|
+
importMetaUrl: string;
|
|
259
|
+
isDevRun?: boolean;
|
|
260
|
+
packageName?: string;
|
|
261
|
+
printVersion?: (version: string) => void;
|
|
262
|
+
version?: string;
|
|
263
|
+
};
|
|
264
|
+
type RegisterParentCommandsFromDefinitionsOptions = {
|
|
265
|
+
description?: (name: string) => string;
|
|
266
|
+
print?: (message: string) => void;
|
|
267
|
+
};
|
|
268
|
+
declare const createCommandProgram: <TContext>({ binName, binNames, commandsDir, description, getContext, importCommandModule, importMetaUrl, isDevRun, packageName, printVersion, version, }: CreateCommandProgramOptions<TContext>) => Promise<Program>;
|
|
269
|
+
declare const registerParentCommandsFromDefinitions: (program: Program, definitions: readonly CommandDefinition[], options?: RegisterParentCommandsFromDefinitionsOptions) => void;
|
|
270
|
+
declare const registerCliCommandsFromDirectory: <TContext>({ binName, commandsDir, getContext, importCommandModule, program, }: RegisterCliCommandsFromDirectoryOptions<TContext>) => Promise<CommandDefinition[]>;
|
|
271
|
+
declare const getProgramConstructor: () => new () => Program;
|
|
272
|
+
|
|
273
|
+
type CliConfig<TProgram> = {
|
|
274
|
+
createProgram: (binName: string) => TProgram | Promise<TProgram>;
|
|
275
|
+
defaultBinName: string;
|
|
276
|
+
envBinName: string;
|
|
277
|
+
importMetaUrl: string;
|
|
278
|
+
};
|
|
279
|
+
declare const getProgramBin: (config: Pick<CliConfig<unknown>, "defaultBinName" | "envBinName" | "importMetaUrl">) => string;
|
|
280
|
+
declare const isDirectRun: (importMetaUrl: string) => boolean;
|
|
281
|
+
|
|
282
|
+
type CreateCommandCliRunnerOptions<TContext> = {
|
|
283
|
+
binNames?: readonly string[];
|
|
284
|
+
commandsDir?: string;
|
|
285
|
+
defaultBinName: string;
|
|
286
|
+
description: string;
|
|
287
|
+
envBinName: string;
|
|
288
|
+
getContext?: () => Promise<TContext> | TContext;
|
|
289
|
+
importCommandModule?: CommandModuleImporter;
|
|
290
|
+
importMetaUrl: string;
|
|
291
|
+
isDevRun?: boolean;
|
|
292
|
+
packageName?: string;
|
|
293
|
+
printVersion?: (version: string) => void;
|
|
294
|
+
version?: string;
|
|
295
|
+
};
|
|
296
|
+
type CreatePackageCommandCliRunnerOptions<TContext> = Omit<CreateCommandCliRunnerOptions<TContext>, 'defaultBinName' | 'description' | 'envBinName'> & {
|
|
297
|
+
defaultBinName?: string;
|
|
298
|
+
description?: string;
|
|
299
|
+
envBinName?: string;
|
|
300
|
+
};
|
|
301
|
+
declare const createCliRunner: (config: CliConfig<Program>) => {
|
|
302
|
+
isDirectRun: () => boolean;
|
|
303
|
+
runCli: (args?: string[]) => Promise<number>;
|
|
304
|
+
};
|
|
305
|
+
declare const createPackageCommandCliRunner: <TContext>({ defaultBinName, envBinName, importMetaUrl, ...options }: CreatePackageCommandCliRunnerOptions<TContext>) => {
|
|
306
|
+
isDirectRun: () => boolean;
|
|
307
|
+
runCli: (args?: string[]) => Promise<number>;
|
|
308
|
+
};
|
|
309
|
+
declare const createCommandCliRunner: <TContext>({ binNames, commandsDir, defaultBinName, description, envBinName, getContext, importCommandModule, importMetaUrl, isDevRun, packageName, printVersion, version, }: CreateCommandCliRunnerOptions<TContext>) => {
|
|
310
|
+
isDirectRun: () => boolean;
|
|
311
|
+
runCli: (args?: string[]) => Promise<number>;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
declare enum PackageManager {
|
|
315
|
+
Npm = "npm",
|
|
316
|
+
Pnpm = "pnpm",
|
|
317
|
+
Yarn = "yarn"
|
|
318
|
+
}
|
|
319
|
+
type RegisterUpdateCommandOptions = {
|
|
320
|
+
isDevRun: boolean;
|
|
321
|
+
packageName: string;
|
|
322
|
+
version?: string;
|
|
323
|
+
};
|
|
324
|
+
declare const registerUpdateCommand: (program: Program, options: RegisterUpdateCommandOptions) => void;
|
|
325
|
+
declare function getPackageManagerFromPath(globalBinPath: string): PackageManager | null;
|
|
326
|
+
|
|
322
327
|
declare const DEFAULT_COMMANDS_DIR = "commands";
|
|
323
328
|
declare const PROGRAM_NAME_ENV_SUFFIX = "_PROG_NAME";
|
|
324
329
|
|
|
@@ -326,14 +331,15 @@ type GenerateReadmeCommandDocsOptions = {
|
|
|
326
331
|
binName: string;
|
|
327
332
|
commandDefinitions?: readonly CommandDefinition[];
|
|
328
333
|
commandsDir?: string;
|
|
334
|
+
importCommandModule?: CommandModuleImporter;
|
|
329
335
|
markerName?: string;
|
|
330
336
|
readmePath?: string;
|
|
331
337
|
};
|
|
332
|
-
declare const generateReadmeCommandDocs: ({ binName, commandDefinitions, commandsDir, markerName, readmePath, }: GenerateReadmeCommandDocsOptions) => Promise<void>;
|
|
338
|
+
declare const generateReadmeCommandDocs: ({ binName, commandDefinitions, commandsDir, importCommandModule, markerName, readmePath, }: GenerateReadmeCommandDocsOptions) => Promise<void>;
|
|
333
339
|
declare const formatCommandDocs: (commands: readonly CommandDefinition[], binName: string) => string;
|
|
334
340
|
|
|
335
|
-
declare const loadCommandMcpRoutes: <TContext>(commandsDir: string, getContext?: () => Promise<TContext> | TContext) => Promise<CommandMcpRoute[]>;
|
|
336
|
-
declare const createCommandMcpServer: <TContext>({ commandsDir, getContext, importMetaUrl, name, prefix, }: CreateCommandMcpServerOptions<TContext>) => Promise<{
|
|
341
|
+
declare const loadCommandMcpRoutes: <TContext>(commandsDir: string, getContext?: () => Promise<TContext> | TContext, importCommandModule?: CommandModuleImporter) => Promise<CommandMcpRoute[]>;
|
|
342
|
+
declare const createCommandMcpServer: <TContext>({ commandsDir, getContext, importCommandModule, importMetaUrl, name, prefix, }: CreateCommandMcpServerOptions<TContext>) => Promise<{
|
|
337
343
|
start: () => Promise<void>;
|
|
338
344
|
}>;
|
|
339
345
|
declare const startCommandMcpServer: <TContext>(options: CreateCommandMcpServerOptions<TContext>) => Promise<void>;
|
|
@@ -613,4 +619,4 @@ type DevCommandShimConfig = {
|
|
|
613
619
|
declare const installCommandShim: (binDir: string, config: DevCommandShimConfig) => void;
|
|
614
620
|
declare const getBinDir: (envName: string) => string;
|
|
615
621
|
|
|
616
|
-
export { type CliConfig, type CommandAdapterExport, type CommandAdaptersReturn, type CommandArgumentDefinition, type CommandCompletionDefinition, type CommandDefinition, type CommandExamplesDefinition, type CommandMcpMetadata, type CommandMcpResourceMetadata, type CommandMcpRoute, type CommandMcpRouteFactory, type CommandMcpToolMetadata, type CommandModule, type CommandOptionDefinition, type CommandRegistrar, type CommandRegistrarContext
|
|
622
|
+
export { type CliConfig, type CommandAdapterExport, type CommandAdaptersReturn, type CommandArgumentDefinition, type CommandCompletionDefinition, type CommandDefinition, type CommandExamplesDefinition, type CommandMcpMetadata, type CommandMcpResourceMetadata, type CommandMcpRoute, type CommandMcpRouteFactory, type CommandMcpToolMetadata, type CommandModule, type CommandModuleImporter, type CommandOptionDefinition, type CommandRegistrar, type CommandRegistrarContext, type CommandResourceRoute, type CompletionConfig, type CreateCommandMcpRouterOptions, type CreateCommandMcpServerOptions, type CreateCommandProgramOptions, type CreateMcpServerOptions, type CreatePackageCommandMcpServerOptions, type CreateSingleToolMcpServerOptions, DEFAULT_COMMANDS_DIR, type DefineCommandDefinition, type DevCommandShimConfig, type GenerateReadmeCommandDocsOptions, type JsonRpcRequest, type JsonSchemaProperty, type McpResourceDefinition, type McpResourceTemplateDefinition, type McpResultEnvelope, type McpToolDefinition, PROGRAM_NAME_ENV_SUFFIX, type PackageBinEntry, type PackageCommandMetadata, type PackageJson, PackageManager, type RegisterCliCommandsFromDirectoryOptions, type RegisterParentCommandsFromDefinitionsOptions, type RegisterUpdateCommandOptions, type ResourceReadParams, type ShellCompletionSnippet, type ToolCallParams, assertToolName, commandActionInput, commandDefinitionToInputSchema, commandDefinitionToZodInputSchema, commandDefinitionsFromModules, commandExportsFromModules, commandInputString, commandInputValue, commandMcpRouteToResourceRoute, commandMcpRouteToTool, commandNameToMcpToolName, commandOptionSynopsis, commandResourceInput, commandResourceRouteToResource, commandResourceRouteToResourceTemplate, createCliRunner, createCommandAdapters, createCommandCliRunner, createCommandMcpRoute, createCommandMcpRouter, createCommandMcpServer, createCommandProgram, createMcpServer, createPackageCommandCliRunner, createSingleToolMcpServer, defineCommand, emptyMcpInputSchema, formatCommandDocs, generateReadmeCommandDocs, getBinDir, getPackageManagerFromPath, getProgramBin, getProgramConstructor, installCommandShim, installDevCommand, installPackageDevCommand, installPackageDevCommands, isCommandAdapterExport, isCommandMcpResourceMetadata, isCommandMcpToolMetadata, isDirectRun, isGlobalHelpRequest, isResourceTemplate, loadCommandMcpRoutes, loadCommandModules, loadCommandModulesFromFiles, mcpToolOutputSchema, normalizeCommandInputAliases, packageBinEntry, packageCommandMetadata, packageEnvPrefix, packageRoot, printProgramHelp, readPackageJson, registerCliCommandsFromDirectory, registerCommand, registerCompletionCommand, registerParentCommandsFromDefinitions, registerUpdateCommand, resourceResult, setProgramHelpData, shortPackageName, startCommandMcpServer, startPackageCommandMcpServer, throwUnknownTool, uninstallDevCommand, uninstallPackageDevCommand, uninstallPackageDevCommands };
|
package/dist/index.js
CHANGED
|
@@ -510,18 +510,17 @@ import { fileURLToPath } from "url";
|
|
|
510
510
|
|
|
511
511
|
// src/command/loader.ts
|
|
512
512
|
import { readdir } from "fs/promises";
|
|
513
|
-
import { basename, join } from "path";
|
|
513
|
+
import { basename, extname, join } from "path";
|
|
514
514
|
import { pathToFileURL } from "url";
|
|
515
|
-
var
|
|
516
|
-
var
|
|
517
|
-
var loadCommandModules = async (commandsDir) => {
|
|
518
|
-
return loadCommandModulesFromFiles(await commandFiles(commandsDir));
|
|
519
|
-
};
|
|
520
|
-
var loadCommandModulesFromFiles = async (files) => {
|
|
521
|
-
return Promise.all(
|
|
522
|
-
files.map((file) => import(pathToFileURL(file).href))
|
|
523
|
-
);
|
|
515
|
+
var COMMAND_FILE_EXTENSIONS = /* @__PURE__ */ new Set([".js", ".mjs", ".ts"]);
|
|
516
|
+
var IGNORED_COMMAND_FILE_NAMES = /* @__PURE__ */ new Set(["index", "options"]);
|
|
517
|
+
var loadCommandModules = async (commandsDir, importModule = importCommandModule) => {
|
|
518
|
+
return loadCommandModulesFromFiles(await commandFiles(commandsDir), importModule);
|
|
519
|
+
};
|
|
520
|
+
var loadCommandModulesFromFiles = async (files, importModule = importCommandModule) => {
|
|
521
|
+
return Promise.all(files.map(importModule));
|
|
524
522
|
};
|
|
523
|
+
var importCommandModule = (file) => import(pathToFileURL(file).href);
|
|
525
524
|
var commandDefinitionsFromModules = (modules) => {
|
|
526
525
|
return modules.flatMap(
|
|
527
526
|
(module) => Object.values(module).flatMap(
|
|
@@ -547,8 +546,12 @@ var commandFiles = async (dir) => {
|
|
|
547
546
|
return nestedFiles.flat().sort();
|
|
548
547
|
};
|
|
549
548
|
var isCommandFile = (path) => {
|
|
550
|
-
const
|
|
551
|
-
|
|
549
|
+
const extension = extname(path);
|
|
550
|
+
const fileName = basename(path, extension);
|
|
551
|
+
const isDeclarationFile = path.endsWith(".d.ts");
|
|
552
|
+
const isSupportedCommandFile = COMMAND_FILE_EXTENSIONS.has(extension);
|
|
553
|
+
const isIgnoredCommandFile = IGNORED_COMMAND_FILE_NAMES.has(fileName);
|
|
554
|
+
return !isDeclarationFile && isSupportedCommandFile && !isIgnoredCommandFile;
|
|
552
555
|
};
|
|
553
556
|
var isCommandAdapterExport = (value) => {
|
|
554
557
|
if (!value || typeof value !== "object") return false;
|
|
@@ -808,6 +811,7 @@ var createCommandProgram = async ({
|
|
|
808
811
|
commandsDir,
|
|
809
812
|
description,
|
|
810
813
|
getContext,
|
|
814
|
+
importCommandModule: importCommandModule2,
|
|
811
815
|
importMetaUrl,
|
|
812
816
|
isDevRun = false,
|
|
813
817
|
packageName,
|
|
@@ -821,6 +825,7 @@ var createCommandProgram = async ({
|
|
|
821
825
|
binName,
|
|
822
826
|
commandsDir: commandsDir ?? defaultCommandsDir(importMetaUrl),
|
|
823
827
|
getContext,
|
|
828
|
+
importCommandModule: importCommandModule2,
|
|
824
829
|
program
|
|
825
830
|
});
|
|
826
831
|
registerUpdateCommand(program, { isDevRun, packageName: packageName ?? binName, version });
|
|
@@ -859,9 +864,10 @@ var registerCliCommandsFromDirectory = async ({
|
|
|
859
864
|
binName,
|
|
860
865
|
commandsDir,
|
|
861
866
|
getContext,
|
|
867
|
+
importCommandModule: importCommandModule2,
|
|
862
868
|
program
|
|
863
869
|
}) => {
|
|
864
|
-
const modules = await loadCommandModules(commandsDir);
|
|
870
|
+
const modules = await loadCommandModules(commandsDir, importCommandModule2);
|
|
865
871
|
const definitions = commandDefinitionsFromModules(modules);
|
|
866
872
|
registerParentCommandsFromDefinitions(program, definitions);
|
|
867
873
|
const commands = commandExportsFromModules(
|
|
@@ -1053,6 +1059,7 @@ var createCommandCliRunner = ({
|
|
|
1053
1059
|
description,
|
|
1054
1060
|
envBinName,
|
|
1055
1061
|
getContext,
|
|
1062
|
+
importCommandModule: importCommandModule2,
|
|
1056
1063
|
importMetaUrl,
|
|
1057
1064
|
isDevRun,
|
|
1058
1065
|
packageName,
|
|
@@ -1066,6 +1073,7 @@ var createCommandCliRunner = ({
|
|
|
1066
1073
|
commandsDir,
|
|
1067
1074
|
description,
|
|
1068
1075
|
getContext,
|
|
1076
|
+
importCommandModule: importCommandModule2,
|
|
1069
1077
|
importMetaUrl,
|
|
1070
1078
|
isDevRun,
|
|
1071
1079
|
packageName,
|
|
@@ -1387,12 +1395,13 @@ var generateReadmeCommandDocs = async ({
|
|
|
1387
1395
|
binName,
|
|
1388
1396
|
commandDefinitions = [],
|
|
1389
1397
|
commandsDir = join4(process.cwd(), "src", "commands"),
|
|
1398
|
+
importCommandModule: importCommandModule2,
|
|
1390
1399
|
markerName = "COMMANDS",
|
|
1391
1400
|
readmePath = "README.md"
|
|
1392
1401
|
}) => {
|
|
1393
1402
|
const readme = readFileSync2(readmePath, "utf8");
|
|
1394
1403
|
const loadedCommandDefinitions = commandDefinitionsFromModules(
|
|
1395
|
-
await loadCommandModules(commandsDir)
|
|
1404
|
+
await loadCommandModules(commandsDir, importCommandModule2)
|
|
1396
1405
|
);
|
|
1397
1406
|
const generated = formatCommandDocs(
|
|
1398
1407
|
[...commandDefinitions, ...loadedCommandDefinitions],
|
|
@@ -1569,8 +1578,8 @@ var createMcpServer = ({
|
|
|
1569
1578
|
};
|
|
1570
1579
|
|
|
1571
1580
|
// src/mcp/command-server.ts
|
|
1572
|
-
var loadCommandMcpRoutes = async (commandsDir, getContext = () => void 0) => {
|
|
1573
|
-
const modules = await loadCommandModules(commandsDir);
|
|
1581
|
+
var loadCommandMcpRoutes = async (commandsDir, getContext = () => void 0, importCommandModule2) => {
|
|
1582
|
+
const modules = await loadCommandModules(commandsDir, importCommandModule2);
|
|
1574
1583
|
const factories = commandExportsFromModules(
|
|
1575
1584
|
modules,
|
|
1576
1585
|
(_name, value) => isCommandAdapterExport(value)
|
|
@@ -1580,6 +1589,7 @@ var loadCommandMcpRoutes = async (commandsDir, getContext = () => void 0) => {
|
|
|
1580
1589
|
var createCommandMcpServer = async ({
|
|
1581
1590
|
commandsDir,
|
|
1582
1591
|
getContext,
|
|
1592
|
+
importCommandModule: importCommandModule2,
|
|
1583
1593
|
importMetaUrl,
|
|
1584
1594
|
name,
|
|
1585
1595
|
prefix
|
|
@@ -1587,7 +1597,7 @@ var createCommandMcpServer = async ({
|
|
|
1587
1597
|
const commandDirectory = commandsDir ?? join5(dirname3(fileURLToPath4(importMetaUrl)), DEFAULT_COMMANDS_DIR);
|
|
1588
1598
|
const { tools, resources, resourceTemplates, callTool, readResource } = createCommandMcpRouter({
|
|
1589
1599
|
prefix,
|
|
1590
|
-
routes: await loadCommandMcpRoutes(commandDirectory, getContext)
|
|
1600
|
+
routes: await loadCommandMcpRoutes(commandDirectory, getContext, importCommandModule2)
|
|
1591
1601
|
});
|
|
1592
1602
|
return createMcpServer({ name, tools, resources, resourceTemplates, callTool, readResource });
|
|
1593
1603
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/command/runtime-metadata.ts","../src/cli/completion.ts","../src/cli/help.ts","../src/cli/program.ts","../src/command/loader.ts","../src/command/metadata.ts","../src/constants.ts","../src/cli/update.ts","../src/package/json.ts","../src/package/metadata.ts","../src/cli/runtime.ts","../src/cli/runner.ts","../src/mcp/router.ts","../src/mcp/constants.ts","../src/mcp/errors.ts","../src/mcp/progress.ts","../src/mcp/resources.ts","../src/mcp/schema.ts","../src/command/adapters.ts","../src/docs/readme.ts","../src/mcp/command-server.ts","../src/mcp/server.ts","../src/scripts/dev-command.ts","../src/scripts/shims.ts"],"sourcesContent":["export { z } from 'zod';\nexport * from './cli/completion';\nexport * from './cli/help';\nexport * from './cli/program';\nexport * from './cli/runner';\nexport * from './cli/runtime';\nexport * from './cli/update';\nexport * from './command/adapters';\nexport * from './command/loader';\nexport * from './command/metadata';\nexport * from './constants';\nexport * from './docs/readme';\nexport * from './mcp/command-server';\nexport * from './mcp/errors';\nexport * from './mcp/resources';\nexport * from './mcp/router';\nexport * from './mcp/schema';\nexport * from './mcp/server';\nexport * from './mcp/types';\nexport * from './package/json';\nexport * from './package/metadata';\nexport * from './scripts/dev-command';\nexport * from './scripts/shims';\n","import type { Command } from '@caporal/core';\nimport type { CommandDefinition } from './metadata';\n\nconst commandMetadata = new WeakMap<object, CommandDefinition>();\n\nexport const setCommandMetadata = (command: Command, metadata: CommandDefinition) => {\n commandMetadata.set(command as object, metadata);\n};\n\nexport const getCommandMetadata = (command: Command) => commandMetadata.get(command as object);\n","import type { Command, Program } from '@caporal/core';\nimport { getCommandMetadata } from '../command/runtime-metadata';\n\ntype CompletionGroup = {\n description?: string;\n name: string;\n};\n\nenum CompletionShell {\n Bash = 'bash',\n Fish = 'fish',\n Zsh = 'zsh',\n}\n\nconst COMPLETION_COMMAND_NAME = 'completion';\nconst COMPLETION_COMMAND_DESCRIPTION = 'Generate shell completion scripts';\nconst COMPLETION_SHELL_ARGUMENT = '[shell]';\nconst COMPLETION_SHELL_DESCRIPTION = 'Shell to generate completion for';\nconst EMPTY_DISPLAY_VALUE = '<empty>';\nexport type CompletionConfig = {\n binNames?: readonly string[];\n};\n\nconst completionShells = Object.values(CompletionShell);\nconst completionScriptGenerators = {\n [CompletionShell.Bash]: getBashCompletionScript,\n [CompletionShell.Fish]: getFishCompletionScript,\n [CompletionShell.Zsh]: getZshCompletionScript,\n} as const satisfies Record<\n CompletionShell,\n (\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n ) => string\n>;\n\nexport const registerCompletionCommand = (program: Program, config: CompletionConfig = {}) => {\n program\n .command(COMPLETION_COMMAND_NAME, COMPLETION_COMMAND_DESCRIPTION)\n .argument(COMPLETION_SHELL_ARGUMENT, COMPLETION_SHELL_DESCRIPTION)\n .strict(false)\n .action(async ({ args, program }) => {\n const shell = args.shell ? String(args.shell) : '';\n\n if (isCompletionShell(shell)) {\n console.log(await getCompletionScript(program, shell, config));\n return 0;\n }\n\n console.log(`error: unsupported shell '${shell || EMPTY_DISPLAY_VALUE}'`);\n console.log(`supported: ${completionShells.join(', ')}`);\n return 1;\n });\n};\n\nconst isCompletionShell = (value: string): value is CompletionShell => {\n return (completionShells as readonly string[]).includes(value);\n};\n\nconst getCompletionScript = async (\n program: Program,\n shell: CompletionShell,\n config: CompletionConfig,\n) => {\n const binName = program.getBin();\n const binNames = uniqueBinNames([binName, ...(config.binNames ?? [])]);\n const commands = sortCommands(\n (await program.getAllCommands()).filter(\n (command) => command.visible && command.name !== COMPLETION_COMMAND_NAME,\n ),\n );\n const roots = getRootCommands(commands);\n const subcommands = getSubcommandGroups(commands);\n const options = getCommandOptions(commands);\n\n return completionScriptGenerators[shell](binNames, roots, subcommands, options, commands);\n};\n\nfunction getZshCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n return binNames\n .map((binName) => formatZshCompletionScript(binName, roots, subcommands, options, commands))\n .join('\\n\\n');\n}\n\nfunction getBashCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n return binNames\n .map((binName) => formatBashCompletionScript(binName, roots, subcommands, options, commands))\n .join('\\n\\n');\n}\n\nfunction formatZshCompletionScript(\n binName: string,\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const functionName = completionFunctionName(binName);\n\n return `#compdef ${binName}\n\n_${functionName}() {\n local -a commands\n commands=(\n${formatZshItems(roots)}\n )\n${formatSubcommandArrays(subcommands)}\n${formatOptionArrays(options)}\n${formatZshCustomCompletions(binName, commands)}\n\n if [[ \"$words[$CURRENT]\" == -* ]]; then\n local command_key=\"$words[2]\"\n if [[ -n \"$words[3]\" && \"$words[3]\" != -* ]]; then\n command_key=\"$command_key $words[3]\"\n fi\n case \"$command_key\" in\n${formatOptionCases(binName, options)}\n esac\n fi\n\n _arguments -C \\\\\n '1:command:->command' \\\\\n '2:subcommand:->subcommand'\n\n case $state in\n command)\n _describe '${binName} commands' commands\n ;;\n subcommand)\n case $words[2] in\n${formatZshCustomCases(binName, commands)}\n${formatSubcommandCases(binName, subcommands)}\n esac\n ;;\n esac\n}\n\ncompdef _${functionName} ${binName}`;\n}\n\nfunction formatBashCompletionScript(\n binName: string,\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const functionName = `${completionFunctionName(binName)}_completion`;\n\n return `_${functionName}() {\n local cur command_key\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n command_key=\"\\${COMP_WORDS[1]}\"\n if [[ -n \"\\${COMP_WORDS[2]}\" && \"\\${COMP_WORDS[2]}\" != -* ]]; then\n command_key=\"\\${command_key} \\${COMP_WORDS[2]}\"\n fi\n COMPREPLY=()\n\n if [[ \"$cur\" == -* ]]; then\n case \"$command_key\" in\n${formatBashOptionCases(options)}\n esac\n return 0\n fi\n\n case \"$COMP_CWORD\" in\n 1)\n COMPREPLY=($(compgen -W \"${roots.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;\n 2)\n case \"\\${COMP_WORDS[1]}\" in\n${formatBashCustomCases(binName, commands)}\n${formatBashSubcommandCases(subcommands)}\n esac\n ;;\n esac\n}\n\ncomplete -F _${functionName} ${binName}`;\n}\n\nfunction getFishCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const rootNames = roots.map((item) => item.name).join(' ');\n\n return `${binNames.map((name) => formatFishFunctions(name, rootNames)).join('\\n')}\n${binNames.map((name) => formatFishCustomFunctions(name, commands)).join('\\n')}\n${binNames.map((name) => `complete -c ${name} -f`).join('\\n')}\n${binNames.map((name) => formatFishRootCompletions(name, roots)).join('\\n')}\n${binNames.map((name) => formatFishSubcommandCompletions(name, subcommands)).join('\\n')}\n${binNames.map((name) => formatFishOptionCompletions(name, options)).join('\\n')}\n${binNames.map((name) => formatFishCustomCompletions(name, commands)).join('\\n')}`;\n}\n\nconst uniqueBinNames = (binNames: readonly string[]) => [...new Set(binNames)];\n\nconst sortCommands = (commands: Command[]) => {\n return [...commands].sort((left, right) => {\n const leftOrder = getCommandMetadata(left)?.order;\n const rightOrder = getCommandMetadata(right)?.order;\n if (leftOrder !== undefined || rightOrder !== undefined) {\n return (leftOrder ?? Number.MAX_SAFE_INTEGER) - (rightOrder ?? Number.MAX_SAFE_INTEGER);\n }\n return left.name.localeCompare(right.name);\n });\n};\n\nconst getRootCommands = (commands: Command[]) => {\n const roots = new Map<string, CompletionGroup>();\n\n for (const command of commands) {\n const parts = command.name.split(' ');\n const root = parts[0];\n\n if (!root || roots.has(root)) {\n continue;\n }\n\n roots.set(root, {\n name: root,\n description: parts.length === 1 ? command.description : `${root} commands`,\n });\n }\n\n return [...roots.values()];\n};\n\nconst getSubcommandGroups = (commands: Command[]) => {\n const groups = new Map<string, CompletionGroup[]>();\n\n for (const command of commands) {\n const [root, subcommand] = command.name.split(' ');\n\n if (!root || !subcommand) {\n continue;\n }\n\n const group = groups.get(root) ?? [];\n\n if (!group.some((item) => item.name === subcommand)) {\n group.push({ name: subcommand, description: command.description });\n }\n\n groups.set(root, group);\n }\n\n return groups;\n};\n\nconst getCommandOptions = (commands: Command[]) => {\n const commandOptions = new Map<string, CompletionGroup[]>();\n\n for (const command of commands) {\n const options = command.options\n .filter((option) => option.visible)\n .flatMap((option) =>\n option.allNotations.map((notation) => ({\n name: notation,\n description: option.description,\n })),\n );\n\n if (options.length > 0) {\n commandOptions.set(command.name, options);\n }\n }\n\n return commandOptions;\n};\n\nconst formatZshItems = (items: CompletionGroup[]) => {\n return items.map((item) => ` '${escapeZshItem(item)}'`).join('\\n');\n};\n\nconst formatSubcommandArrays = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([root, items]) => `\n local -a ${root}_commands\n ${root}_commands=(\n${formatZshItems(items)}\n )`,\n )\n .join('\\n');\n};\n\nconst formatZshCustomCompletions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const functions = getCommandMetadata(command)?.completion?.zsh?.(binName).functions;\n return functions ? [functions] : [];\n })\n .join('\\n');\n};\n\nconst formatZshCustomCases = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.zsh?.(binName).complete;\n return complete\n ? [\n ` ${command.name})\n${complete}\n ;;`,\n ]\n : [];\n })\n .join('\\n');\n};\n\nconst formatSubcommandCases = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.keys()]\n .map(\n (root) => ` ${root})\n _describe '${binName} ${root} commands' ${root}_commands\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatOptionArrays = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([command, items]) => `\n local -a ${optionVariable(command)}\n ${optionVariable(command)}=(\n${formatZshItems(items)}\n )`,\n )\n .join('\\n');\n};\n\nconst formatOptionCases = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.keys()]\n .map(\n (command) => ` ${JSON.stringify(command)})\n _describe '${binName} ${command} options' ${optionVariable(command)}\n return\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatBashCustomCases = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.bash?.(binName);\n return complete\n ? [\n ` ${command.name})\n${complete}\n ;;`,\n ]\n : [];\n })\n .join('\\n');\n};\n\nconst formatBashSubcommandCases = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([root, items]) => ` ${root})\n COMPREPLY=($(compgen -W \"${items.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatFishFunctions = (binName: string, rootNames: string) => {\n return `function __${binName}_seen_command\n set -l tokens (commandline -opc)\n for token in $tokens[2..-1]\n switch $token\n case ${rootNames}\n return 0\n end\n end\n return 1\nend\n\nfunction __${binName}_using_command\n set -l tokens (commandline -opc)\n test (count $tokens) -ge 2; and test \"$tokens[2]\" = \"$argv[1]\"\nend`;\n};\n\nconst formatFishCustomFunctions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const functions = getCommandMetadata(command)?.completion?.fish?.(binName).functions;\n return functions ? [functions] : [];\n })\n .join('\\n');\n};\n\nconst formatFishCustomCompletions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.fish?.(binName).complete;\n return complete ? [complete] : [];\n })\n .join('\\n');\n};\n\nconst formatFishRootCompletions = (binName: string, roots: CompletionGroup[]) => {\n return roots\n .map(\n (item) =>\n `complete -c ${binName} -f -n \"not __${binName}_seen_command\" -a ${quoteFish(item.name)} -d ${quoteFish(item.description ?? '')}`,\n )\n .join('\\n');\n};\n\nconst formatFishSubcommandCompletions = (\n binName: string,\n groups: Map<string, CompletionGroup[]>,\n) => {\n return [...groups.entries()]\n .flatMap(([root, items]) =>\n items.map(\n (item) =>\n `complete -c ${binName} -f -n \"__${binName}_using_command ${quoteFish(root)}\" -a ${quoteFish(item.name)} -d ${quoteFish(item.description ?? '')}`,\n ),\n )\n .join('\\n');\n};\n\nconst formatBashOptionCases = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([command, items]) => ` ${JSON.stringify(command)})\n COMPREPLY=($(compgen -W \"${items.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatFishOptionCompletions = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .flatMap(([command, items]) =>\n items.map((item) => {\n const nameOption = fishOptionName(item.name);\n return `complete -c ${binName} -f -n \"__${binName}_using_command ${quoteFish(command)}\" ${nameOption} -d ${quoteFish(item.description ?? '')}`;\n }),\n )\n .join('\\n');\n};\n\nconst fishOptionName = (name: string) => {\n if (name.startsWith('--')) return `-l ${quoteFish(name.slice(2))}`;\n if (name.startsWith('-')) return `-s ${quoteFish(name.slice(1))}`;\n return `-a ${quoteFish(name)}`;\n};\n\nconst completionFunctionName = (binName: string) => {\n return binName.replace(/\\W/g, '_');\n};\n\nconst optionVariable = (command: string) => {\n return `${command.replace(/\\W/g, '_')}_options`;\n};\n\nconst escapeZshItem = (item: CompletionGroup) => {\n const text = item.description ? `${item.name}:${item.description}` : item.name;\n\n return text.replace(/'/g, \"'\\\\''\");\n};\n\nconst quoteFish = (value: string) => {\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\n};\n","import type { Program } from '@caporal/core';\nimport type { CommandDefinition } from '../command/metadata';\n\nconst COMMAND_COLUMN_WIDTH = 36;\nconst ANSI_CYAN = '\\u001b[36m';\nconst ANSI_GRAY = '\\u001b[90m';\nconst ANSI_RESET = '\\u001b[0m';\nconst programHelpData = new WeakMap<Program, ProgramHelpData>();\n\ntype ProgramHelpData = {\n binName: string;\n commands: readonly CommandDefinition[];\n description: string;\n examples: readonly string[];\n version: string;\n};\n\ntype CommandHelpRow = {\n name: string;\n description: string;\n};\n\nexport const setProgramHelpData = (program: Program, data: ProgramHelpData) => {\n programHelpData.set(program, data);\n};\n\nexport const isGlobalHelpRequest = (args: readonly string[]) =>\n args.length === 0 || (args.length === 1 && ['--help', '-h'].includes(args[0] ?? ''));\n\nexport const printProgramHelp = async (program: Program) => {\n const data = programHelpData.get(program);\n if (!data) throw new Error('Program help data was not registered');\n\n const capturedHelp = cleanHelp(await captureHelp(() => program.run(['--help'])));\n const capturedRows = parseCapturedCommandRows(capturedHelp);\n const output = [formatHelp(data, capturedRows), formatExamples(data.examples)]\n .filter(Boolean)\n .join('\\n');\n console.log(`${output}\\n`);\n};\n\nasync function captureHelp(callback: () => Promise<unknown>) {\n const originalLog = console.log;\n const lines: string[] = [];\n console.log = (...args: unknown[]) => {\n lines.push(args.map(String).join(' '));\n };\n\n try {\n await callback();\n } finally {\n console.log = originalLog;\n }\n\n return lines.join('\\n');\n}\n\nfunction formatHelp(data: ProgramHelpData, capturedRows: readonly CommandHelpRow[]) {\n return [\n '',\n ` ${data.binName} ${data.version} — ${data.description}`,\n '',\n heading('USAGE'),\n ' ',\n ` ▸ ${data.binName} <command> [ARGUMENTS...] [OPTIONS...]`,\n '',\n heading('COMMANDS'),\n '',\n ...formatCommandRows(\n mergeCommandRows(data.commands.filter(isVisibleCommand).map(commandHelpRow), capturedRows),\n ),\n '',\n heading('GLOBAL OPTIONS'),\n '',\n ' -h, --help Display global help or command-related help. ',\n ' -v, --version Show version',\n ].join('\\n');\n}\n\nfunction mergeCommandRows(\n primaryRows: readonly CommandHelpRow[],\n fallbackRows: readonly CommandHelpRow[],\n) {\n const primaryNames = new Set(primaryRows.map((row) => row.name));\n return [...primaryRows, ...fallbackRows.filter((row) => !primaryNames.has(row.name))];\n}\n\nfunction parseCapturedCommandRows(help: string) {\n const lines = help.split('\\n');\n const commandsIndex = lines.findIndex((line) => line.trim() === 'COMMANDS');\n const globalOptionsIndex = lines.findIndex((line) => line.trim() === 'GLOBAL OPTIONS');\n const hasCommandSection = commandsIndex >= 0 && globalOptionsIndex > commandsIndex;\n if (!hasCommandSection) return [];\n\n return parseCommandRows(lines.slice(commandsIndex + 1, globalOptionsIndex));\n}\n\nfunction parseCommandRows(lines: readonly string[]) {\n return lines.reduce<CommandHelpRow[]>((rows, line) => {\n const row = parseCommandRow(line);\n if (row) {\n rows.push(row);\n return rows;\n }\n\n const previous = rows.at(-1);\n const continuation = line.trim();\n if (!previous || !continuation) return rows;\n\n previous.description = `${previous.description} ${continuation}`;\n return rows;\n }, []);\n}\n\nfunction parseCommandRow(line: string): CommandHelpRow | undefined {\n const match = line.match(/^ {4}(.+?) {2,}(.+?)\\s*$/);\n if (!match?.[1] || !match[2]) return undefined;\n return { name: match[1].trim(), description: match[2].trim() };\n}\n\nfunction cleanHelp(help: string) {\n return help.replace(\n /COMMANDS\\s+—\\s+Type '[^']+ help <command>' to get some help about a command/g,\n 'COMMANDS',\n );\n}\n\nfunction commandHelpRow(command: CommandDefinition): CommandHelpRow {\n return { name: command.name, description: command.description };\n}\n\nfunction isVisibleCommand(command: CommandDefinition) {\n return command.config?.visible !== false;\n}\n\nfunction formatCommandRows(rows: readonly CommandHelpRow[]) {\n const groups = commandGroups(rows);\n return groups.flatMap((group) => formatCommandGroup(group));\n}\n\nfunction commandGroups(rows: readonly CommandHelpRow[]) {\n const visibleRows = rows.filter((row) => !isHiddenCommand(row));\n const parentRows = new Map(\n visibleRows.filter((row) => !row.name.includes(' ')).map((row) => [row.name, row]),\n );\n const childRows = visibleRows.filter((row) => row.name.includes(' '));\n const childParents = new Set(childRows.map((row) => row.name.split(' ')[0]).filter(Boolean));\n const groupedParents = [...childParents].map((parent) => ({\n children: childRows.filter((row) => row.name.startsWith(`${parent} `)),\n parent: parentRows.get(parent) ?? { name: parent, description: `${parent} commands` },\n }));\n const standaloneRows = visibleRows.filter(\n (row) => !childParents.has(row.name.split(' ')[0] ?? row.name),\n );\n\n return [...groupedParents, ...standaloneRows.map((parent) => ({ children: [], parent }))];\n}\n\nfunction isHiddenCommand(row: CommandHelpRow) {\n return row.name === 'on-checkout' || row.name === 'on-commit';\n}\n\nfunction formatCommandGroup({\n children,\n parent,\n}: {\n children: readonly CommandHelpRow[];\n parent: CommandHelpRow;\n}) {\n if (children.length === 0) return [formatCommandLine(parent.name, parent.description)];\n\n return [\n formatCommandLine(parent.name, parentDescription(parent), 4, isSyntheticParent(parent)),\n ...children.map((child) =>\n formatCommandLine(child.name.split(' ').slice(1).join(' '), child.description, 6),\n ),\n ];\n}\n\nfunction parentDescription(parent: CommandHelpRow) {\n return isSyntheticParent(parent) ? '' : parent.description;\n}\n\nfunction isSyntheticParent(parent: CommandHelpRow) {\n return parent.description === `${parent.name} commands`;\n}\n\nfunction formatCommandLine(name: string, description: string, indent = 4, muted = false) {\n const paddedName = name.padEnd(COMMAND_COLUMN_WIDTH - indent);\n const displayName = muted ? gray(paddedName) : paddedName;\n return `${' '.repeat(indent)}${displayName}${description}`.trimEnd();\n}\n\nfunction heading(text: string) {\n return ` ${color(text)}`;\n}\n\nfunction color(text: string) {\n if (!process.stdout.isTTY || process.env.NO_COLOR) return text;\n return `${ANSI_CYAN}${text}${ANSI_RESET}`;\n}\n\nfunction gray(text: string) {\n if (!process.stdout.isTTY || process.env.NO_COLOR) return text;\n return `${ANSI_GRAY}${text}${ANSI_RESET}`;\n}\n\nfunction formatExamples(examples: readonly string[]) {\n if (examples.length === 0) return '';\n\n return [heading('EXAMPLES'), '', ...examples.map((example) => ` ${example}`), ''].join('\\n');\n}\n","import { createRequire } from 'node:module';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { Program as CaporalProgram } from '@caporal/core';\nimport {\n type CommandAdapterExport,\n commandDefinitionsFromModules,\n commandExportsFromModules,\n isCommandAdapterExport,\n loadCommandModules,\n} from '../command/loader';\nimport { type CommandDefinition, defineCommand } from '../command/metadata';\nimport { DEFAULT_COMMANDS_DIR } from '../constants';\nimport { registerCompletionCommand } from './completion';\nimport { setProgramHelpData } from './help';\nimport { registerUpdateCommand } from './update';\n\nconst VERSION_OPTION = '-v, --version';\nconst DISABLED_GLOBAL_OPTIONS = ['--no-color', '--quiet', '--silent', '-v', '-V'];\nconst DEFAULT_CLI_VERSION = '0.0.0';\n\nexport type CommandRegistrarContext<TContext> = {\n binName: string;\n getContext?: () => Promise<TContext> | TContext;\n};\n\nexport type CommandRegistrar<TContext> = (\n program: CaporalProgram,\n context: CommandRegistrarContext<TContext>,\n) => void;\n\nexport type RegisterCliCommandsFromDirectoryOptions<TContext> = {\n binName: string;\n commandsDir: string;\n getContext?: () => Promise<TContext> | TContext;\n program: CaporalProgram;\n};\n\nexport type CreateCommandProgramOptions<TContext> = {\n binName: string;\n binNames?: readonly string[];\n commandsDir?: string;\n description: string;\n getContext?: () => Promise<TContext> | TContext;\n importMetaUrl: string;\n isDevRun?: boolean;\n packageName?: string;\n printVersion?: (version: string) => void;\n version?: string;\n};\n\nexport type RegisterParentCommandsFromDefinitionsOptions = {\n description?: (name: string) => string;\n print?: (message: string) => void;\n};\n\nexport const createCommandProgram = async <TContext>({\n binName,\n binNames,\n commandsDir,\n description,\n getContext,\n importMetaUrl,\n isDevRun = false,\n packageName,\n printVersion = console.log,\n version = DEFAULT_CLI_VERSION,\n}: CreateCommandProgramOptions<TContext>) => {\n const program = new (getProgramConstructor())()\n .bin(binName)\n .name(binName)\n .description(description)\n .version(version);\n\n disableDefaultGlobalOptions(program);\n registerVersionOption(program, version, printVersion);\n\n const commandDefinitions = await registerCliCommandsFromDirectory<TContext>({\n binName,\n commandsDir: commandsDir ?? defaultCommandsDir(importMetaUrl),\n getContext,\n program,\n });\n registerUpdateCommand(program, { isDevRun, packageName: packageName ?? binName, version });\n registerCompletionCommand(program, { binNames });\n setProgramHelpData(program, {\n binName,\n commands: [\n ...commandDefinitions,\n defineCommand({\n name: 'update',\n description: `Update ${packageName ?? binName} to latest version`,\n }),\n defineCommand({\n name: 'completion',\n description: 'Generate shell completion scripts',\n }),\n ],\n description,\n examples: commandDefinitions.flatMap((command) => command.examples?.(binName) ?? []),\n version,\n });\n\n return program;\n};\n\nexport const registerParentCommandsFromDefinitions = (\n program: CaporalProgram,\n definitions: readonly CommandDefinition[],\n options: RegisterParentCommandsFromDefinitionsOptions = {},\n) => {\n const description = options.description ?? parentCommandDescription;\n const print = options.print ?? console.log;\n\n for (const [name, subcommands] of parentCommands(definitions)) {\n program.command(name, description(name)).action(() => {\n print(`Usage: ${program.getBin()} ${name} <command>`);\n print('');\n print(`Available commands: ${subcommands.join(', ')}`);\n });\n }\n};\n\nexport const registerCliCommandsFromDirectory = async <TContext>({\n binName,\n commandsDir,\n getContext,\n program,\n}: RegisterCliCommandsFromDirectoryOptions<TContext>) => {\n const modules = await loadCommandModules(commandsDir);\n const definitions = commandDefinitionsFromModules(modules);\n registerParentCommandsFromDefinitions(program, definitions);\n\n const commands = commandExportsFromModules<CommandAdapterExport>(modules, (_name, value) =>\n isCommandAdapterExport(value),\n );\n\n for (const command of commands.sort(compareCommands)) {\n command.cli(program, { binName, getContext });\n }\n\n return definitions;\n};\n\nexport const getProgramConstructor = () => {\n const require = createRequire(import.meta.url);\n const module = require('@caporal/core') as { Program: new () => CaporalProgram };\n return module.Program;\n};\n\nconst disableDefaultGlobalOptions = (program: CaporalProgram) => {\n for (const option of DISABLED_GLOBAL_OPTIONS) {\n program.disableGlobalOption(option);\n }\n};\n\nconst registerVersionOption = (\n program: CaporalProgram,\n version: string,\n printVersion: (version: string) => void,\n) => {\n program.option(VERSION_OPTION, 'Show version', {\n global: true,\n action: () => {\n printVersion(version);\n return false;\n },\n });\n};\n\nconst defaultCommandsDir = (importMetaUrl: string) =>\n join(dirname(fileURLToPath(importMetaUrl)), DEFAULT_COMMANDS_DIR);\n\nconst compareCommands = (left: CommandAdapterExport, right: CommandAdapterExport) => {\n const leftName = left.metadata?.name ?? '';\n const rightName = right.metadata?.name ?? '';\n const leftOrder = left.metadata?.order;\n const rightOrder = right.metadata?.order;\n if (leftOrder !== undefined || rightOrder !== undefined) {\n return (leftOrder ?? Number.MAX_SAFE_INTEGER) - (rightOrder ?? Number.MAX_SAFE_INTEGER);\n }\n return leftName.localeCompare(rightName);\n};\n\nconst parentCommandDescription = (name: string) => `${name} commands`;\n\nconst parentCommands = (definitions: readonly CommandDefinition[]) => {\n const groups = new Map<string, string[]>();\n const commandNames = new Set(definitions.map((definition) => definition.name));\n\n for (const definition of definitions) {\n const [parent, subcommand] = definition.name.split(' ');\n const hasGeneratedParentCommand = parent && subcommand && !commandNames.has(parent);\n if (!hasGeneratedParentCommand) continue;\n groups.set(parent, [...(groups.get(parent) ?? []), subcommand]);\n }\n\n return [...groups.entries()].sort(([left], [right]) => left.localeCompare(right));\n};\n","import { readdir } from 'node:fs/promises';\nimport { basename, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { CommandAdaptersReturn } from './adapters';\n\nconst COMMAND_FILE_EXTENSION = '.ts';\nconst IGNORED_COMMAND_FILES = new Set(['index.ts', 'options.ts']);\n\nexport type CommandModule = Record<string, unknown>;\nexport type CommandAdapterExport = Pick<CommandAdaptersReturn<unknown, unknown>, 'cli'> &\n Partial<Pick<CommandAdaptersReturn<unknown, unknown>, 'mcp' | 'metadata'>>;\n\nexport const loadCommandModules = async (commandsDir: string) => {\n return loadCommandModulesFromFiles(await commandFiles(commandsDir));\n};\n\nexport const loadCommandModulesFromFiles = async (files: readonly string[]) => {\n return Promise.all(\n files.map((file) => import(pathToFileURL(file).href) as Promise<CommandModule>),\n );\n};\n\nexport const commandDefinitionsFromModules = (modules: readonly CommandModule[]) => {\n return modules.flatMap((module) =>\n Object.values(module).flatMap((value) =>\n isCommandAdapterExport(value) && value.metadata ? [value.metadata] : [],\n ),\n );\n};\n\nexport const commandExportsFromModules = <TExport>(\n modules: readonly CommandModule[],\n isExport: (name: string, value: unknown) => boolean,\n) => {\n return modules.flatMap((module) =>\n Object.entries(module)\n .filter(([name, value]) => isExport(name, value))\n .map(([, value]) => value as TExport),\n );\n};\n\nconst commandFiles = async (dir: string): Promise<string[]> => {\n const entries = await readdir(dir, { withFileTypes: true });\n const nestedFiles = await Promise.all(\n entries.map((entry) => {\n const path = join(dir, entry.name);\n if (entry.isDirectory()) return commandFiles(path);\n if (entry.isFile() && isCommandFile(path)) return [path];\n return [];\n }),\n );\n\n return nestedFiles.flat().sort();\n};\n\nconst isCommandFile = (path: string) => {\n const fileName = basename(path);\n return path.endsWith(COMMAND_FILE_EXTENSION) && !IGNORED_COMMAND_FILES.has(fileName);\n};\n\nexport const isCommandAdapterExport = (value: unknown): value is CommandAdapterExport => {\n if (!value || typeof value !== 'object') return false;\n const command = value as Partial<CommandAdapterExport>;\n return typeof command.cli === 'function';\n};\n","import type { Command, CreateOptionCommandOpts, Program } from '@caporal/core';\nimport { type ZodType, z } from 'zod';\nimport { setCommandMetadata } from './runtime-metadata';\n\nexport type JsonSchemaProperty = {\n type: 'array' | 'boolean' | 'number' | 'string';\n description?: string;\n items?: { type: 'string' };\n};\n\nexport type CommandArgumentDefinition = {\n synopsis: string;\n description: string;\n};\n\nexport type CommandOptionDefinition = {\n name: string;\n description: string;\n aliases?: readonly string[];\n config?: CreateOptionCommandOpts;\n negated?: boolean;\n schema?: JsonSchemaProperty;\n value?: string;\n};\n\nexport type CommandMcpToolMetadata = {\n kind: 'tool';\n readOnly: boolean;\n destructive: boolean;\n idempotent: boolean;\n openWorld: boolean;\n requiresConfirmation: boolean;\n sideEffects?: string[];\n};\n\nexport type CommandMcpResourceMetadata = {\n kind: 'resource';\n uriTemplate: string;\n mimeType?: string;\n};\n\nexport type CommandMcpMetadata = false | CommandMcpToolMetadata | CommandMcpResourceMetadata;\n\nexport const isCommandMcpToolMetadata = (\n metadata: CommandMcpMetadata | undefined,\n): metadata is CommandMcpToolMetadata =>\n metadata !== undefined && metadata !== false && metadata.kind === 'tool';\n\nexport const isCommandMcpResourceMetadata = (\n metadata: CommandMcpMetadata | undefined,\n): metadata is CommandMcpResourceMetadata =>\n metadata !== undefined && metadata !== false && metadata.kind === 'resource';\n\nexport type ShellCompletionSnippet = {\n complete: string;\n functions?: string;\n};\n\nexport type CommandCompletionDefinition = {\n bash?: (binName: string) => string;\n fish?: (binName: string) => ShellCompletionSnippet;\n zsh?: (binName: string) => ShellCompletionSnippet;\n};\n\nexport type CommandExamplesDefinition = (binName: string) => readonly string[];\n\nexport type CommandDefinition<\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n> = {\n name: string;\n description: string;\n aliases?: readonly string[];\n arguments?: readonly CommandArgumentDefinition[];\n completion?: CommandCompletionDefinition;\n config?: Parameters<Program['command']>[2];\n examples?: CommandExamplesDefinition;\n inputSchema: TInputSchema;\n mcp?: CommandMcpMetadata;\n options?: readonly CommandOptionDefinition[];\n order?: number;\n outputSchema: TOutputSchema;\n};\n\nexport type DefineCommandDefinition<\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n> = Omit<CommandDefinition<TInputSchema, TOutputSchema>, 'inputSchema' | 'outputSchema'> & {\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n};\n\nexport const defineCommand = <\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n>(\n definition: DefineCommandDefinition<TInputSchema, TOutputSchema>,\n): CommandDefinition<TInputSchema, TOutputSchema> => {\n const command = {\n outputSchema: z.unknown(),\n ...definition,\n } as CommandDefinition<TInputSchema, TOutputSchema>;\n\n return {\n ...command,\n inputSchema: definition.inputSchema ?? commandDefinitionToZodInputSchema(command),\n } as CommandDefinition<TInputSchema, TOutputSchema>;\n};\n\nexport const registerCommand = (program: Program, definition: CommandDefinition): Command => {\n const command =\n definition.arguments?.reduce<Command>(\n (currentCommand, argument) =>\n currentCommand.argument(argument.synopsis, argument.description),\n program.command(definition.name, definition.description, definition.config),\n ) ?? program.command(definition.name, definition.description, definition.config);\n\n const commandWithOptions =\n definition.options?.reduce<Command>(\n (currentCommand, option) =>\n currentCommand.option(commandOptionSynopsis(option), option.description, option.config),\n command,\n ) ?? command;\n\n const registeredCommand =\n definition.aliases?.reduce<Command>(\n (currentCommand, alias) => currentCommand.alias(alias),\n commandWithOptions,\n ) ?? commandWithOptions;\n\n setCommandMetadata(registeredCommand, definition);\n return registeredCommand;\n};\n\nexport const commandInputValue = (args: Record<string, unknown>, name: string) => args[name];\n\nexport const commandInputString = (args: Record<string, unknown>, name: string) => {\n const value = commandInputValue(args, name);\n return value === undefined ? '' : String(value);\n};\n\nexport const commandActionInput = (\n definition: CommandDefinition,\n args: Record<string, unknown>,\n options: Record<string, unknown>,\n) =>\n normalizeCommandInputAliases(definition, {\n ...normalizeArgumentInput(definition, args),\n ...options,\n });\n\nexport const normalizeCommandInputAliases = <TInput extends Record<string, unknown>>(\n definition: CommandDefinition,\n input: TInput,\n) => ({\n ...input,\n ...Object.fromEntries(\n (definition.options ?? []).flatMap((option) => {\n const name = optionInputName(option);\n if (input[name] !== undefined) return [];\n\n const alias = optionAliasInputNames(option).find(\n (candidate) => input[candidate] !== undefined,\n );\n return alias ? [[name, input[alias]]] : [];\n }),\n ),\n});\n\nconst normalizeArgumentInput = (definition: CommandDefinition, args: Record<string, unknown>) => ({\n ...args,\n ...Object.fromEntries(\n (definition.arguments ?? [])\n .map((argument): [string, unknown] | undefined => {\n const name = argumentName(argument.synopsis);\n const value = commandInputValue(args, name);\n return value === undefined ? undefined : [name, value];\n })\n .filter((entry): entry is [string, unknown] => entry !== undefined),\n ),\n});\n\nexport const commandDefinitionToZodInputSchema = (definition: CommandDefinition) => {\n const jsonSchema = commandDefinitionToInputSchema(definition);\n const shape = Object.fromEntries(\n Object.entries(jsonSchema.properties).map(([name, property]) => [\n name,\n zodInputProperty(property as JsonSchemaProperty, jsonSchema.required.includes(name)),\n ]),\n );\n\n return z.object(shape);\n};\n\nexport const commandDefinitionToInputSchema = (definition: CommandDefinition) => ({\n type: 'object',\n properties: Object.fromEntries([\n ...(definition.arguments ?? []).map((argument) => [\n argumentName(argument.synopsis),\n argumentSchema(argument),\n ]),\n ...(definition.options ?? []).map((option) => [\n optionInputName(option),\n option.schema ?? optionSchema(option),\n ]),\n ]),\n required: [\n ...(definition.arguments ?? [])\n .filter((argument) => isRequiredSynopsis(argument.synopsis))\n .map((argument) => argumentName(argument.synopsis)),\n ...(definition.options ?? []).filter((option) => option.config?.required).map(optionInputName),\n ],\n additionalProperties: false,\n});\n\nconst zodInputProperty = (property: JsonSchemaProperty, required: boolean) => {\n const schema = zodProperty(property);\n const describedSchema = property.description ? schema.describe(property.description) : schema;\n\n return required ? describedSchema : describedSchema.optional();\n};\n\nconst zodProperty = (property: JsonSchemaProperty): ZodType => {\n if (property.type === 'array') return z.array(z.string());\n if (property.type === 'boolean') return z.boolean();\n if (property.type === 'number') return z.number();\n return z.string();\n};\n\nconst argumentSchema = (argument: CommandArgumentDefinition): JsonSchemaProperty => ({\n type: isVariadicSynopsis(argument.synopsis) ? 'array' : 'string',\n description: argument.description,\n ...(isVariadicSynopsis(argument.synopsis) ? { items: { type: 'string' as const } } : {}),\n});\n\nconst optionSchema = (option: CommandOptionDefinition): JsonSchemaProperty => ({\n type: option.value ? 'string' : 'boolean',\n description: option.description,\n});\n\nconst argumentName = (synopsis: string) => {\n return kebabToCamel(\n synopsis\n .replace(/[<>[\\].]/g, '')\n .replace(/_([a-z])/g, (_match, letter: string) => letter.toUpperCase()),\n );\n};\n\nexport const commandOptionSynopsis = (option: CommandOptionDefinition) => {\n const longName = `${option.negated ? '--no-' : '--'}${option.name}`;\n const aliases = (option.aliases ?? []).map((alias) =>\n alias.length === 1 ? `-${alias}` : `--${alias}`,\n );\n return [...aliases, `${longName}${option.value ? ` ${option.value}` : ''}`].join(', ');\n};\n\nconst optionInputName = (option: CommandOptionDefinition) => kebabToCamel(option.name);\n\nconst optionAliasInputNames = (option: CommandOptionDefinition) =>\n (option.aliases ?? []).map(kebabToCamel);\n\nconst kebabToCamel = (value: string) =>\n value.replace(/-([a-z])/g, (_match, letter: string) => letter.toUpperCase());\n\nconst isRequiredSynopsis = (synopsis: string) => synopsis.trim().startsWith('<');\n\nconst isVariadicSynopsis = (synopsis: string) => synopsis.includes('...');\n","export const DEFAULT_COMMANDS_DIR = 'commands';\nexport const PROGRAM_NAME_ENV_SUFFIX = '_PROG_NAME';\n","import { exec } from 'node:child_process';\nimport { platform } from 'node:os';\nimport { promisify } from 'node:util';\nimport type { Program } from '@caporal/core';\n\nconst execAsync = promisify(exec);\n\nexport enum PackageManager {\n Npm = 'npm',\n Pnpm = 'pnpm',\n Yarn = 'yarn',\n}\n\nexport type RegisterUpdateCommandOptions = {\n isDevRun: boolean;\n packageName: string;\n version?: string;\n};\n\nexport const registerUpdateCommand = (program: Program, options: RegisterUpdateCommandOptions) => {\n program.command('update', `Update ${options.packageName} to latest version`).action(async () => {\n if (options.isDevRun) {\n console.log('Skipping update because this is a dev command');\n return 0;\n }\n\n console.log('Checking current version...');\n const currentVersion = options.version ?? '0.0.0';\n\n console.log('Checking latest version...');\n const latestVersion = await getLatestVersion(options.packageName);\n if (!latestVersion) {\n console.log('error: could not fetch latest version from npm');\n return 1;\n }\n\n console.log(`Current version: ${currentVersion}`);\n console.log(`Latest version: ${latestVersion}`);\n\n if (currentVersion === latestVersion) {\n console.log(`${options.packageName} is already up to date`);\n return 0;\n }\n\n console.log('Detecting package manager...');\n const packageManager = await detectPackageManager(options.packageName);\n\n if (!packageManager) {\n console.log(`error: could not detect how ${options.packageName} was installed`);\n console.log('Please update manually using your package manager');\n return 1;\n }\n\n console.log(`Detected package manager: ${packageManager}`);\n console.log(`Updating ${options.packageName} from ${currentVersion} to ${latestVersion}...`);\n\n const { stdout, stderr } = await execAsync(updateCommand(packageManager, options.packageName));\n\n console.log(\n `${options.packageName} updated successfully from ${currentVersion} to ${latestVersion}`,\n );\n if (stdout) console.log(stdout.trim());\n if (stderr) console.log(stderr.trim());\n return 0;\n });\n};\n\nasync function detectPackageManager(packageName: string): Promise<PackageManager | null> {\n const globalBinPath = await getGlobalBinPath(packageName);\n if (!globalBinPath) return (await isInstalledWithNpm(packageName)) ? PackageManager.Npm : null;\n\n return getPackageManagerFromPath(globalBinPath) ?? PackageManager.Npm;\n}\n\nexport function getPackageManagerFromPath(globalBinPath: string): PackageManager | null {\n const possiblePaths = [\n { manager: PackageManager.Yarn, patterns: ['/yarn/', '\\\\yarn\\\\', '/.yarn/', '\\\\.yarn\\\\'] },\n { manager: PackageManager.Pnpm, patterns: ['/pnpm/', '\\\\pnpm\\\\', '/.pnpm/', '\\\\.pnpm\\\\'] },\n {\n manager: PackageManager.Npm,\n patterns: ['/npm/', '\\\\npm\\\\', '/node/', '\\\\node\\\\', '/node_modules/'],\n },\n ] as const;\n\n for (const { manager, patterns } of possiblePaths) {\n if (patterns.some((pattern) => globalBinPath.includes(pattern))) return manager;\n }\n\n return null;\n}\n\nasync function getGlobalBinPath(binName: string): Promise<string | null> {\n const isWindows = platform() === 'win32';\n\n try {\n const whereCommand = isWindows ? 'where' : 'which';\n const { stdout } = await execAsync(`${whereCommand} ${binName}`);\n const execPath = stdout.trim();\n if (!execPath) return null;\n\n if (isWindows) return execPath;\n\n try {\n const { stdout: realPath } = await execAsync(`readlink -f \"${execPath}\"`);\n return realPath.trim() || execPath;\n } catch {\n return execPath;\n }\n } catch {\n return null;\n }\n}\n\nasync function isInstalledWithNpm(packageName: string) {\n try {\n const { stdout } = await execAsync(`npm list -g --depth=0 ${packageName}`);\n return stdout.includes(packageName);\n } catch {\n return false;\n }\n}\n\nasync function getLatestVersion(packageName: string): Promise<string | null> {\n try {\n const { stdout } = await execAsync(`npm view ${packageName} version`);\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\nfunction updateCommand(packageManager: PackageManager, packageName: string) {\n return {\n [PackageManager.Npm]: `npm update -g ${packageName}`,\n [PackageManager.Pnpm]: `pnpm update -g ${packageName}`,\n [PackageManager.Yarn]: `yarn global upgrade ${packageName}`,\n }[packageManager];\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst PACKAGE_JSON_FILE = 'package.json';\nconst PACKAGE_JSON_ENCODING = 'utf8';\n\nexport type PackageJson = {\n bin?: Record<string, string>;\n description?: string;\n name?: string;\n version?: string;\n};\n\nexport type PackageBinEntry = {\n binPath: string;\n commandName: string;\n};\n\nexport const packageRoot = (importMetaUrl: string) => {\n const startDir = dirname(fileURLToPath(importMetaUrl));\n\n return findPackageRoot(startDir);\n};\n\nexport const readPackageJson = (packageDir: string): PackageJson => {\n return JSON.parse(\n readFileSync(join(packageDir, PACKAGE_JSON_FILE), PACKAGE_JSON_ENCODING),\n ) as PackageJson;\n};\n\nexport const shortPackageName = (name?: string) => {\n const packageName = name?.split('/').at(-1);\n\n if (!packageName) {\n throw new Error('Missing package name');\n }\n\n return packageName;\n};\n\nexport const packageEnvPrefix = (name?: string) =>\n shortPackageName(name).replaceAll('-', '_').toUpperCase();\n\nexport const packageBinEntry = (packageDir: string, packageJson: PackageJson): PackageBinEntry => {\n const [commandName, binPath] = Object.entries(packageJson.bin ?? {})[0] ?? [];\n\n if (!commandName || !binPath) {\n throw new Error(`Missing bin in ${join(packageDir, PACKAGE_JSON_FILE)}`);\n }\n\n return { binPath, commandName };\n};\n\nfunction findPackageRoot(startDir: string): string {\n const packageJsonPath = join(startDir, PACKAGE_JSON_FILE);\n if (existsSync(packageJsonPath)) return startDir;\n\n const parentDir = dirname(startDir);\n if (parentDir === startDir) throw new Error(`Missing ${PACKAGE_JSON_FILE}`);\n\n return findPackageRoot(parentDir);\n}\n","import { PROGRAM_NAME_ENV_SUFFIX } from '../constants';\nimport {\n packageBinEntry,\n packageEnvPrefix,\n packageRoot,\n readPackageJson,\n shortPackageName,\n} from './json';\n\nexport type PackageCommandMetadata = {\n binName: string;\n binNames: string[];\n description?: string;\n envBinName: string;\n mcpPrefix: string;\n mcpServerName: string;\n packageDir: string;\n packageName: string;\n version?: string;\n};\n\ntype PackageCommandMetadataOptions = {\n mcpServerPrefix?: string;\n};\n\nexport const packageCommandMetadata = (\n importMetaUrl: string,\n options: PackageCommandMetadataOptions = {},\n): PackageCommandMetadata => {\n const packageDir = packageRoot(importMetaUrl);\n const packageJson = readPackageJson(packageDir);\n const packageName = shortPackageName(packageJson.name);\n const { commandName } = packageBinEntry(packageDir, packageJson);\n\n return {\n binName: commandName,\n binNames: Object.keys(packageJson.bin ?? {}),\n description: packageJson.description,\n envBinName: `${packageEnvPrefix(packageName)}${PROGRAM_NAME_ENV_SUFFIX}`,\n mcpPrefix: packageName,\n mcpServerName: mcpServerName(packageName, options.mcpServerPrefix),\n packageDir,\n packageName,\n version: packageJson.version,\n };\n};\n\nconst mcpServerName = (packageName: string, prefix: string | undefined) =>\n prefix ? `${prefix}-${packageName}` : packageName;\n","import { realpathSync } from 'node:fs';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nexport type CliConfig<TProgram> = {\n createProgram: (binName: string) => TProgram | Promise<TProgram>;\n defaultBinName: string;\n envBinName: string;\n importMetaUrl: string;\n};\n\nexport const getProgramBin = (\n config: Pick<CliConfig<unknown>, 'defaultBinName' | 'envBinName' | 'importMetaUrl'>,\n) => {\n const envBinName = process.env[config.envBinName];\n\n if (envBinName) {\n return envBinName;\n }\n\n return config.defaultBinName;\n};\n\nexport const isDirectRun = (importMetaUrl: string) => {\n if (!process.argv[1]) {\n return false;\n }\n\n try {\n return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(importMetaUrl));\n } catch {\n return importMetaUrl === pathToFileURL(process.argv[1]).href;\n }\n};\n","import type { Program as CaporalProgram } from '@caporal/core';\nimport { packageCommandMetadata } from '../package/metadata';\nimport { isGlobalHelpRequest, printProgramHelp } from './help';\nimport { createCommandProgram } from './program';\nimport { type CliConfig, getProgramBin, isDirectRun } from './runtime';\n\ntype CreateCommandCliRunnerOptions<TContext> = {\n binNames?: readonly string[];\n commandsDir?: string;\n defaultBinName: string;\n description: string;\n envBinName: string;\n getContext?: () => Promise<TContext> | TContext;\n importMetaUrl: string;\n isDevRun?: boolean;\n packageName?: string;\n printVersion?: (version: string) => void;\n version?: string;\n};\n\ntype CreatePackageCommandCliRunnerOptions<TContext> = Omit<\n CreateCommandCliRunnerOptions<TContext>,\n 'defaultBinName' | 'description' | 'envBinName'\n> & {\n defaultBinName?: string;\n description?: string;\n envBinName?: string;\n};\n\nexport const createCliRunner = (config: CliConfig<CaporalProgram>) => {\n let programInstance: CaporalProgram | undefined;\n let programInstanceBin: string | undefined;\n\n const getProgram = async (): Promise<CaporalProgram> => {\n const binName = getProgramBin(config);\n const shouldCreateProgram = !programInstance || programInstanceBin !== binName;\n\n if (shouldCreateProgram) {\n const program = await config.createProgram(binName);\n programInstance = program;\n programInstanceBin = binName;\n\n return program;\n }\n\n return programInstance as CaporalProgram;\n };\n\n const runCli = async (args = process.argv.slice(2)) => {\n try {\n const program = await getProgram();\n if (isGlobalHelpRequest(args)) {\n await printProgramHelp(program);\n return 0;\n }\n\n const result = await program.run(args);\n return typeof result === 'number' && result > 0 ? result : 0;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(`error: ${message}`);\n return 1;\n }\n };\n\n return { isDirectRun: () => isDirectRun(config.importMetaUrl), runCli };\n};\n\nexport const createPackageCommandCliRunner = <TContext>({\n defaultBinName,\n envBinName,\n importMetaUrl,\n ...options\n}: CreatePackageCommandCliRunnerOptions<TContext>) => {\n const metadata = packageCommandMetadata(importMetaUrl);\n\n return createCommandCliRunner({\n ...options,\n binNames: options.binNames ?? metadata.binNames,\n defaultBinName: defaultBinName ?? metadata.binName,\n description: options.description ?? metadata.description ?? metadata.packageName,\n envBinName: envBinName ?? metadata.envBinName,\n importMetaUrl,\n isDevRun: process.env[envBinName ?? metadata.envBinName] !== undefined,\n packageName: metadata.packageName,\n version: options.version ?? metadata.version,\n });\n};\n\nexport const createCommandCliRunner = <TContext>({\n binNames,\n commandsDir,\n defaultBinName,\n description,\n envBinName,\n getContext,\n importMetaUrl,\n isDevRun,\n packageName,\n printVersion,\n version,\n}: CreateCommandCliRunnerOptions<TContext>) => {\n return createCliRunner({\n createProgram: (binName) =>\n createCommandProgram({\n binName,\n binNames,\n commandsDir,\n description,\n getContext,\n importMetaUrl,\n isDevRun,\n packageName,\n printVersion,\n version,\n }),\n defaultBinName,\n envBinName,\n importMetaUrl,\n });\n};\n","import { z } from 'zod';\nimport { type CommandDefinition, isCommandMcpToolMetadata } from '../command/metadata';\nimport { COMMAND_NAME_SEPARATOR, EMPTY_DISPLAY_VALUE, TOOL_NAME_SEPARATOR } from './constants';\nimport { throwUnknownTool } from './errors';\nimport { commandProgressSummary } from './progress';\nimport {\n commandMcpRouteToResourceRoute,\n commandResourceInput,\n commandResourceRouteToResource,\n commandResourceRouteToResourceTemplate,\n isResourceTemplate,\n} from './resources';\nimport { mcpToolOutputSchema } from './schema';\nimport type { CommandMcpRoute, CreateCommandMcpRouterOptions, ToolCallParams } from './types';\n\nexport const createCommandMcpRoute = ({\n command,\n handler,\n inputSchema,\n outputSchema,\n}: CommandMcpRoute): CommandMcpRoute => ({\n command,\n handler,\n inputSchema,\n outputSchema,\n});\n\nexport const commandMcpRouteToTool = (route: CommandMcpRoute, prefix?: string) => ({\n name: commandNameToMcpToolName(route.command.name, prefix),\n description: route.command.description,\n inputSchema: z.toJSONSchema(route.inputSchema),\n outputSchema: mcpToolOutputSchema(route.outputSchema),\n annotations: commandMcpAnnotations(route.command),\n});\n\nexport const commandNameToMcpToolName = (name: string, prefix?: string) => {\n const baseName = name.replaceAll(COMMAND_NAME_SEPARATOR, TOOL_NAME_SEPARATOR);\n return prefix ? `${prefix}_${baseName}` : baseName;\n};\n\nexport const createCommandMcpRouter = ({ prefix, routes }: CreateCommandMcpRouterOptions) => {\n const mcpRoutes = routes.filter((route) => route.command.mcp);\n const toolRoutes = mcpRoutes.filter((route) => isCommandMcpToolMetadata(route.command.mcp));\n const resourceRoutes = mcpRoutes.flatMap(commandMcpRouteToResourceRoute);\n\n return {\n tools: toolRoutes.map((route) => commandMcpRouteToTool(route, prefix)),\n resources: resourceRoutes\n .filter((route) => !isResourceTemplate(route.uriTemplate))\n .map(commandResourceRouteToResource),\n resourceTemplates: resourceRoutes\n .filter((route) => isResourceTemplate(route.uriTemplate))\n .map(commandResourceRouteToResourceTemplate),\n callTool: async (params: unknown) => {\n const toolCall = params as ToolCallParams;\n const route = toolRoutes.find(\n (candidate) => toolCall.name === commandNameToMcpToolName(candidate.command.name, prefix),\n );\n\n if (!route) {\n return throwUnknownTool(toolCall.name);\n }\n\n const input = route.inputSchema.parse(toolCall.arguments ?? {});\n const data = route.outputSchema.parse(await route.handler(input as Record<string, unknown>));\n\n return { data, progress: commandProgressSummary(data, route.command) };\n },\n readResource: async (params: unknown) => {\n const resourceRead = params as { uri?: string };\n const routeMatch = resourceRoutes\n .map((route) => ({ input: commandResourceInput(route, resourceRead.uri), route }))\n .find((candidate) => candidate.input !== undefined);\n\n if (!routeMatch?.input) {\n throw new Error(`Unknown resource: ${resourceRead.uri ?? EMPTY_DISPLAY_VALUE}`);\n }\n\n return routeMatch.route.command.outputSchema.parse(\n await routeMatch.route.handler(routeMatch.input),\n );\n },\n };\n};\n\nconst commandMcpAnnotations = (command: CommandDefinition) => {\n const mcp = command.mcp;\n if (!isCommandMcpToolMetadata(mcp)) return undefined;\n\n return {\n readOnlyHint: mcp.readOnly,\n destructiveHint: mcp.destructive,\n idempotentHint: mcp.idempotent,\n openWorldHint: mcp.openWorld,\n requiresConfirmation: mcp.requiresConfirmation,\n sideEffects: mcp.sideEffects,\n };\n};\n","export const DEFAULT_MCP_SERVER_VERSION = '0.0.0';\nexport const DEFAULT_RESOURCE_MIME_TYPE = 'application/json';\nexport const MCP_PROTOCOL_VERSION = '2024-11-05';\nexport const JSON_RPC_METHOD_NOT_FOUND = -32601;\nexport const JSON_RPC_INTERNAL_ERROR = -32603;\nexport const JSON_RPC_VERSION = '2.0';\nexport const MCP_STATUS_COMPLETED = 'completed';\nexport const MCP_STATUS_ERROR = 'error';\nexport const MCP_TEXT_CONTENT_TYPE = 'text';\nexport const TOOL_NAME_SEPARATOR = '_';\nexport const COMMAND_NAME_SEPARATOR = ' ';\nexport const EMPTY_DISPLAY_VALUE = '<empty>';\nexport const RESULT_ENVELOPE_DATA_KEY = 'data';\nexport const RESULT_ENVELOPE_PROGRESS_KEY = 'progress';\nexport const PROGRESS_LIST_KEYS = ['items', 'threads', 'files', 'events', 'messages'];\nexport const CURSOR_KEYS = ['nextCursor', 'nextPageToken'];\nexport const MCP_METHOD_INITIALIZE = 'initialize';\nexport const MCP_METHOD_TOOLS_LIST = 'tools/list';\nexport const MCP_METHOD_TOOLS_CALL = 'tools/call';\nexport const MCP_METHOD_RESOURCES_LIST = 'resources/list';\nexport const MCP_METHOD_RESOURCES_TEMPLATES_LIST = 'resources/templates/list';\nexport const MCP_METHOD_RESOURCES_READ = 'resources/read';\n","import { EMPTY_DISPLAY_VALUE } from './constants';\n\nexport const assertToolName = (expectedName: string, actualName: string | undefined) => {\n if (actualName !== expectedName) {\n throwUnknownTool(actualName);\n }\n};\n\nexport const throwUnknownTool = (name: string | undefined): never => {\n throw new Error(`Unknown tool: ${name ?? EMPTY_DISPLAY_VALUE}`);\n};\n","import { type CommandDefinition, isCommandMcpToolMetadata } from '../command/metadata';\nimport {\n CURSOR_KEYS,\n MCP_STATUS_COMPLETED,\n MCP_STATUS_ERROR,\n MCP_TEXT_CONTENT_TYPE,\n PROGRESS_LIST_KEYS,\n RESULT_ENVELOPE_DATA_KEY,\n RESULT_ENVELOPE_PROGRESS_KEY,\n} from './constants';\nimport type { McpResultEnvelope } from './types';\n\nexport const toolResult = (result: unknown, startedAt: number) => {\n const envelope = resultEnvelope(result);\n const data = envelope.data;\n const structuredContent = {\n status: MCP_STATUS_COMPLETED,\n progress: progressSummary(data, startedAt, envelope.progress),\n data,\n };\n return {\n structuredContent,\n content: [{ type: MCP_TEXT_CONTENT_TYPE, text: JSON.stringify(structuredContent, null, 2) }],\n };\n};\n\nexport const toolErrorResult = (caught: unknown, startedAt = Date.now()) => {\n const message = caught instanceof Error ? caught.message : String(caught);\n const structuredContent = {\n status: MCP_STATUS_ERROR,\n progress: { elapsedMs: elapsedMs(startedAt), errors: [message] },\n error: { message },\n };\n return {\n structuredContent,\n content: [{ type: MCP_TEXT_CONTENT_TYPE, text: JSON.stringify(structuredContent, null, 2) }],\n };\n};\n\nexport const commandProgressSummary = (data: unknown, command: CommandDefinition) => {\n const mcp = command.mcp;\n if (!isCommandMcpToolMetadata(mcp) || mcp.readOnly) {\n return undefined;\n }\n\n const processed = processedOf(data) ?? countOf(data) ?? 1;\n return { changed: processed, matched: processed, processed, skipped: 0 };\n};\n\nconst progressSummary = (\n data: unknown,\n startedAt: number,\n progress: Record<string, unknown> | undefined,\n) => {\n const summary = {\n count: countOf(data),\n elapsedMs: elapsedMs(startedAt),\n errors: [] as string[],\n nextCursor: cursorOf(data),\n processed: processedOf(data),\n ...progress,\n };\n\n return Object.fromEntries(Object.entries(summary).filter(([, value]) => value !== undefined));\n};\n\nconst resultEnvelope = (result: unknown): McpResultEnvelope => {\n if (\n isRecord(result) &&\n RESULT_ENVELOPE_DATA_KEY in result &&\n RESULT_ENVELOPE_PROGRESS_KEY in result\n ) {\n return {\n data: result[RESULT_ENVELOPE_DATA_KEY],\n progress: recordOf(result[RESULT_ENVELOPE_PROGRESS_KEY]),\n };\n }\n\n return { data: result };\n};\n\nconst recordOf = (value: unknown) => (isRecord(value) ? value : undefined);\n\nconst elapsedMs = (startedAt: number) => Date.now() - startedAt;\n\nconst countOf = (data: unknown) => {\n if (!isRecord(data)) return undefined;\n return typeof data.count === 'number' ? data.count : processedOf(data);\n};\n\nconst processedOf = (data: unknown) => {\n if (Array.isArray(data)) return data.length;\n if (!isRecord(data)) return undefined;\n\n const list = PROGRESS_LIST_KEYS.map((key) => data[key]).find(Array.isArray);\n return list ? list.length : undefined;\n};\n\nconst cursorOf = (data: unknown) => {\n if (!isRecord(data)) return undefined;\n const cursor = CURSOR_KEYS.map((key) => data[key]).find((value) => typeof value === 'string');\n return typeof cursor === 'string' ? cursor : undefined;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n","import { isCommandMcpResourceMetadata } from '../command/metadata';\nimport { DEFAULT_RESOURCE_MIME_TYPE } from './constants';\nimport type {\n CommandMcpRoute,\n CommandResourceRoute,\n McpResourceDefinition,\n McpResourceTemplateDefinition,\n ResourceReadParams,\n} from './types';\n\nexport const commandMcpRouteToResourceRoute = (route: CommandMcpRoute): CommandResourceRoute[] => {\n const mcp = route.command.mcp;\n if (!isCommandMcpResourceMetadata(mcp)) return [];\n\n const inputNames = resourceInputNames(mcp.uriTemplate);\n\n return [\n {\n command: route.command,\n handler: route.handler,\n inputNames,\n mimeType: mcp.mimeType ?? DEFAULT_RESOURCE_MIME_TYPE,\n name: route.command.name,\n uriTemplate: mcp.uriTemplate,\n },\n ];\n};\n\nexport const commandResourceRouteToResource = (\n route: CommandResourceRoute,\n): McpResourceDefinition => ({\n uri: route.uriTemplate,\n name: route.name,\n description: route.command.description,\n mimeType: route.mimeType,\n});\n\nexport const commandResourceRouteToResourceTemplate = (\n route: CommandResourceRoute,\n): McpResourceTemplateDefinition => ({\n uriTemplate: route.uriTemplate,\n name: route.name,\n description: route.command.description,\n mimeType: route.mimeType,\n});\n\nexport const commandResourceInput = (route: CommandResourceRoute, uri: string | undefined) => {\n if (!uri) return undefined;\n\n const prefix = route.uriTemplate.split('{')[0] ?? '';\n if (!uri.startsWith(prefix)) return undefined;\n\n const values = uri.slice(prefix.length).split('/').filter(Boolean).map(decodeURIComponent);\n if (values.length !== route.inputNames.length) return undefined;\n\n return Object.fromEntries(\n route.inputNames.map((inputName, index) => [inputName, values[index] ?? '']),\n );\n};\n\nexport const isResourceTemplate = (uri: string) => resourceInputNames(uri).length > 0;\n\nexport const resourceResult = (params: unknown, data: unknown) => {\n const resourceRead = params as ResourceReadParams;\n return {\n contents: [\n {\n uri: resourceRead.uri ?? '',\n mimeType: DEFAULT_RESOURCE_MIME_TYPE,\n text: JSON.stringify({ data }, null, 2),\n },\n ],\n };\n};\n\nconst resourceInputNames = (uriTemplate: string) =>\n [...uriTemplate.matchAll(/\\{([^}]+)\\}/g)].flatMap((match) => {\n const inputName = match[1];\n return inputName ? [inputName] : [];\n });\n","import { type ZodType, z } from 'zod';\nimport { MCP_STATUS_COMPLETED, MCP_STATUS_ERROR } from './constants';\n\nexport const mcpToolOutputSchema = (dataSchema: ZodType) => ({\n type: 'object',\n properties: {\n data: z.toJSONSchema(dataSchema),\n progress: {\n type: 'object',\n properties: {\n count: { type: 'number' },\n elapsedMs: { type: 'number' },\n changed: { type: 'number' },\n errors: { type: 'array', items: { type: 'string' } },\n matched: { type: 'number' },\n nextCursor: { type: 'string' },\n processed: { type: 'number' },\n skipped: { type: 'number' },\n },\n required: ['elapsedMs', 'errors'],\n additionalProperties: false,\n },\n status: { type: 'string', enum: [MCP_STATUS_COMPLETED, MCP_STATUS_ERROR] },\n },\n required: ['data', 'progress', 'status'],\n additionalProperties: false,\n});\n\nexport const emptyMcpInputSchema = {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n} as const;\n","import type { Program } from '@caporal/core';\nimport type { ZodType, z } from 'zod';\nimport { createCommandMcpRoute } from '../mcp/router';\nimport type { CommandMcpRoute } from '../mcp/types';\nimport { type CommandDefinition, commandActionInput, registerCommand } from './metadata';\n\ntype CommandActionContext = {\n args: Record<string, unknown>;\n options: Record<string, unknown>;\n};\n\ntype ContextFactory<TContext> = () => Promise<TContext> | TContext;\n\ntype Handler<TInput, TResult> = {\n handle(input: TInput): Promise<TResult> | TResult;\n}['handle'];\n\ntype ContextHandler<TContext, TInput, TResult> = {\n handle(context: TContext, input: TInput): Promise<TResult> | TResult;\n}['handle'];\n\ntype CommandRegistrarContext<TContext> = {\n binName?: string;\n getContext?: ContextFactory<TContext>;\n};\n\nexport type CommandAdaptersReturn<TContext, THandler> = {\n cli: (program: Program, context?: CommandRegistrarContext<TContext>) => void;\n handler: THandler;\n mcp: (getContext?: ContextFactory<TContext>) => CommandMcpRoute;\n metadata: CommandDefinition;\n};\n\ntype CommandPrint<TContext, TInputSchema extends ZodType, TResult> = (\n output: TResult,\n input: z.infer<TInputSchema>,\n context?: TContext,\n) => Promise<void> | void;\n\ntype BaseCommandAdaptersOptions<\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = {\n metadata: CommandDefinition<TInputSchema, TOutputSchema>;\n print?: CommandPrint<unknown, TInputSchema, TResult>;\n};\n\ntype CommandAdaptersOptions<\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = BaseCommandAdaptersOptions<TInputSchema, TOutputSchema, TResult> & {\n handler: Handler<z.infer<TInputSchema>, TResult>;\n};\n\ntype ContextCommandAdaptersOptions<\n TContext,\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = Omit<BaseCommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>, 'print'> & {\n handler: ContextHandler<TContext, z.infer<TInputSchema>, TResult>;\n print?: CommandPrint<TContext, TInputSchema, TResult>;\n};\n\nexport function createCommandAdapters<\n TInputSchema extends ZodType = ZodType<Record<string, unknown>>,\n TOutputSchema extends ZodType = ZodType,\n TResult = unknown,\n>(\n options: CommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>,\n): CommandAdaptersReturn<unknown, Handler<z.infer<TInputSchema>, TResult>>;\nexport function createCommandAdapters<\n TContext,\n TInputSchema extends ZodType = ZodType<Record<string, unknown>>,\n TOutputSchema extends ZodType = ZodType,\n TResult = unknown,\n>(\n options: ContextCommandAdaptersOptions<TContext, TInputSchema, TOutputSchema, TResult>,\n): CommandAdaptersReturn<TContext, ContextHandler<TContext, z.infer<TInputSchema>, TResult>>;\nexport function createCommandAdapters<\n TContext,\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n>({\n handler,\n metadata,\n print,\n}:\n | CommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>\n | ContextCommandAdaptersOptions<TContext, TInputSchema, TOutputSchema, TResult>) {\n const parseInput = ({ args, options }: CommandActionContext) =>\n metadata.inputSchema.parse(commandActionInput(metadata, args, options));\n\n const run = async (input: z.infer<TInputSchema>, context?: TContext) => {\n if (context === undefined) {\n return (handler as (input: z.infer<TInputSchema>) => Promise<TResult> | TResult)(input);\n }\n\n return (\n handler as (context: TContext, input: z.infer<TInputSchema>) => Promise<TResult> | TResult\n )(context, input);\n };\n\n return {\n metadata,\n cli: (program: Program, context?: CommandRegistrarContext<TContext>) => {\n registerCommand(program, metadata).action(async ({ args, options }) => {\n const input = parseInput({ args, options });\n const getContext = context?.getContext;\n const resolvedContext = getContext ? await getContext() : undefined;\n const output = await run(input, resolvedContext);\n\n await print?.(output, input, resolvedContext);\n return typeof output === 'number' ? output : undefined;\n });\n },\n handler,\n mcp: (getContext?: ContextFactory<TContext>): CommandMcpRoute =>\n createCommandMcpRoute({\n command: metadata,\n inputSchema: metadata.inputSchema,\n outputSchema: metadata.outputSchema,\n handler: async (args) =>\n run(args as z.infer<TInputSchema>, getContext ? await getContext() : undefined),\n }),\n };\n}\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { commandDefinitionsFromModules, loadCommandModules } from '../command/loader';\nimport type { CommandDefinition } from '../command/metadata';\nimport { commandOptionSynopsis } from '../command/metadata';\n\nexport type GenerateReadmeCommandDocsOptions = {\n binName: string;\n commandDefinitions?: readonly CommandDefinition[];\n commandsDir?: string;\n markerName?: string;\n readmePath?: string;\n};\n\nexport const generateReadmeCommandDocs = async ({\n binName,\n commandDefinitions = [],\n commandsDir = join(process.cwd(), 'src', 'commands'),\n markerName = 'COMMANDS',\n readmePath = 'README.md',\n}: GenerateReadmeCommandDocsOptions) => {\n const readme = readFileSync(readmePath, 'utf8');\n const loadedCommandDefinitions = commandDefinitionsFromModules(\n await loadCommandModules(commandsDir),\n );\n const generated = formatCommandDocs(\n [...commandDefinitions, ...loadedCommandDefinitions],\n binName,\n );\n writeFileSync(readmePath, replaceMarker(readme, markerName, generated), 'utf8');\n};\n\nexport const formatCommandDocs = (commands: readonly CommandDefinition[], binName: string) => {\n const visibleCommands = commands.filter(isVisibleCommand).sort(commandSort);\n const groups = [...parentCommands(visibleCommands)].map(([parent, subcommands]) =>\n parentCommandDocs(parent, subcommands, binName),\n );\n const standaloneCommands = visibleCommands.filter((command) => !command.name.includes(' '));\n if (standaloneCommands.length > 0) groups.push(otherCommandDocs(standaloneCommands, binName));\n\n const lines = groups.flatMap((commandLines, index) =>\n index === 0 ? commandLines : ['', ...commandLines],\n );\n return ['```sh', ...lines, '```'].join('\\n');\n};\n\nconst isVisibleCommand = (command: CommandDefinition) => command.config?.visible !== false;\n\nconst commandSort = (left: CommandDefinition, right: CommandDefinition) =>\n (left.order ?? 0) - (right.order ?? 0) || left.name.localeCompare(right.name);\n\nconst parentCommands = (commands: readonly CommandDefinition[]) => {\n const groups = new Map<string, CommandDefinition[]>();\n for (const command of commands) {\n const [parent, subcommand] = command.name.split(' ');\n if (!parent || !subcommand) continue;\n groups.set(parent, [...(groups.get(parent) ?? []), command]);\n }\n return [...groups.entries()].sort(([left], [right]) => left.localeCompare(right));\n};\n\nconst parentCommandDocs = (\n parent: string,\n commands: readonly CommandDefinition[],\n binName: string,\n) => [`# ${parent} commands`, ...commands.flatMap((command) => commandDocs(command, binName))];\n\nconst otherCommandDocs = (commands: readonly CommandDefinition[], binName: string) => [\n '# other commands',\n ...commands.flatMap((command) => commandDocs(command, binName)),\n];\n\nconst commandDocs = (command: CommandDefinition, binName: string) => [\n `${binName} ${command.name}${usageSuffix(command)}`,\n];\n\nconst usageSuffix = (command: CommandDefinition) => {\n const args = command.arguments?.map((arg) => arg.synopsis) ?? [];\n const options = command.options?.map((option) => optionUsage(option)) ?? [];\n const usage = [...args, ...options];\n return usage.length > 0 ? ` ${usage.join(' ')}` : '';\n};\n\nconst optionUsage = (option: NonNullable<CommandDefinition['options']>[number]) => {\n const synopsis = option.value ? commandOptionSynopsis(option) : `--${option.name}`;\n return option.config?.required ? synopsis : `[${synopsis}]`;\n};\n\nconst replaceMarker = (source: string, markerName: string, replacement: string) => {\n const startMarker = `<!-- <DYNFIELD:${markerName}> -->`;\n const endMarker = `<!-- </DYNFIELD:${markerName}> -->`;\n const hasOneMarkerPair =\n countOccurrences(source, startMarker) === 1 && countOccurrences(source, endMarker) === 1;\n if (!hasOneMarkerPair) throw new Error(`${readmeMarkerError(startMarker, endMarker)}`);\n\n const before = source.slice(0, source.indexOf(startMarker) + startMarker.length);\n const after = source.slice(source.indexOf(endMarker));\n return `${before}\\n${replacement}\\n${after}`;\n};\n\nconst readmeMarkerError = (startMarker: string, endMarker: string) =>\n `README must contain one ${startMarker} and one ${endMarker}`;\n\nconst countOccurrences = (source: string, value: string) => source.split(value).length - 1;\n","import { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport {\n type CommandAdapterExport,\n commandExportsFromModules,\n isCommandAdapterExport,\n loadCommandModules,\n} from '../command/loader';\nimport { DEFAULT_COMMANDS_DIR } from '../constants';\nimport { packageCommandMetadata } from '../package/metadata';\nimport { createCommandMcpRouter } from './router';\nimport { createMcpServer } from './server';\nimport type {\n CommandMcpRoute,\n CommandMcpRouteFactory,\n CreateCommandMcpServerOptions,\n CreatePackageCommandMcpServerOptions,\n} from './types';\n\nexport const loadCommandMcpRoutes = async <TContext>(\n commandsDir: string,\n getContext: () => Promise<TContext> | TContext = () => undefined as TContext,\n): Promise<CommandMcpRoute[]> => {\n const modules = await loadCommandModules(commandsDir);\n const factories = commandExportsFromModules<CommandAdapterExport>(modules, (_name, value) =>\n isCommandAdapterExport(value),\n ).flatMap((command) => (command.mcp ? [command.mcp as CommandMcpRouteFactory<TContext>] : []));\n\n return factories.map((factory) => factory(getContext)).filter((route) => route.command.mcp);\n};\n\nexport const createCommandMcpServer = async <TContext>({\n commandsDir,\n getContext,\n importMetaUrl,\n name,\n prefix,\n}: CreateCommandMcpServerOptions<TContext>) => {\n const commandDirectory =\n commandsDir ?? join(dirname(fileURLToPath(importMetaUrl)), DEFAULT_COMMANDS_DIR);\n const { tools, resources, resourceTemplates, callTool, readResource } = createCommandMcpRouter({\n prefix,\n routes: await loadCommandMcpRoutes(commandDirectory, getContext),\n });\n\n return createMcpServer({ name, tools, resources, resourceTemplates, callTool, readResource });\n};\n\nexport const startCommandMcpServer = async <TContext>(\n options: CreateCommandMcpServerOptions<TContext>,\n) => {\n await (await createCommandMcpServer(options)).start();\n};\n\nexport const startPackageCommandMcpServer = async <TContext>({\n importMetaUrl,\n mcpServerPrefix,\n name,\n prefix,\n ...options\n}: CreatePackageCommandMcpServerOptions<TContext>) => {\n const metadata = packageCommandMetadata(importMetaUrl, { mcpServerPrefix });\n\n await startCommandMcpServer({\n ...options,\n importMetaUrl,\n name: name ?? metadata.mcpServerName,\n prefix: prefix ?? metadata.mcpPrefix,\n });\n};\n","import { createInterface } from 'node:readline';\nimport {\n DEFAULT_MCP_SERVER_VERSION,\n EMPTY_DISPLAY_VALUE,\n JSON_RPC_INTERNAL_ERROR,\n JSON_RPC_METHOD_NOT_FOUND,\n JSON_RPC_VERSION,\n MCP_METHOD_INITIALIZE,\n MCP_METHOD_RESOURCES_LIST,\n MCP_METHOD_RESOURCES_READ,\n MCP_METHOD_RESOURCES_TEMPLATES_LIST,\n MCP_METHOD_TOOLS_CALL,\n MCP_METHOD_TOOLS_LIST,\n MCP_PROTOCOL_VERSION,\n} from './constants';\nimport { assertToolName } from './errors';\nimport { toolErrorResult, toolResult } from './progress';\nimport { resourceResult } from './resources';\nimport type {\n CreateMcpServerOptions,\n CreateSingleToolMcpServerOptions,\n JsonRpcRequest,\n ToolCallParams,\n} from './types';\n\nexport const createSingleToolMcpServer = ({\n serverName,\n tool,\n callTool,\n}: CreateSingleToolMcpServerOptions) => {\n return createMcpServer({\n name: serverName,\n tools: [tool],\n callTool: (params) => {\n const toolCall = params as ToolCallParams;\n assertToolName(tool.name, toolCall.name);\n return callTool(toolCall.arguments ?? {});\n },\n });\n};\n\nexport const createMcpServer = ({\n name,\n tools,\n resources = [],\n resourceTemplates = [],\n callTool,\n readResource,\n}: CreateMcpServerOptions) => {\n const send = (message: unknown) => {\n process.stdout.write(`${JSON.stringify(message)}\\n`);\n };\n\n const result = (id: JsonRpcRequest['id'], value: unknown) => {\n send({ jsonrpc: JSON_RPC_VERSION, id, result: value });\n };\n\n const error = (id: JsonRpcRequest['id'], code: number, message: string) => {\n send({ jsonrpc: JSON_RPC_VERSION, id, error: { code, message } });\n };\n\n const handleRequest = async (request: JsonRpcRequest) => {\n if (request.method === MCP_METHOD_INITIALIZE) {\n result(request.id, {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: { resources: {}, tools: {} },\n serverInfo: { name, version: DEFAULT_MCP_SERVER_VERSION },\n });\n return;\n }\n\n if (request.method === MCP_METHOD_TOOLS_LIST) {\n result(request.id, { tools });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_LIST) {\n result(request.id, { resources });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_TEMPLATES_LIST) {\n result(request.id, { resourceTemplates });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_READ) {\n if (!readResource) {\n error(\n request.id,\n JSON_RPC_METHOD_NOT_FOUND,\n `Method not found: ${MCP_METHOD_RESOURCES_READ}`,\n );\n return;\n }\n\n const startedAt = Date.now();\n try {\n result(request.id, resourceResult(request.params, await readResource(request.params)));\n } catch (caught) {\n result(request.id, toolErrorResult(caught, startedAt));\n }\n return;\n }\n\n if (request.method === MCP_METHOD_TOOLS_CALL) {\n const startedAt = Date.now();\n try {\n result(request.id, toolResult(await callTool(request.params), startedAt));\n } catch (caught) {\n result(request.id, toolErrorResult(caught, startedAt));\n }\n return;\n }\n\n if (request.id !== undefined) {\n error(\n request.id,\n JSON_RPC_METHOD_NOT_FOUND,\n `Method not found: ${request.method ?? EMPTY_DISPLAY_VALUE}`,\n );\n }\n };\n\n return {\n start: async () => {\n const input = createInterface({ input: process.stdin });\n\n for await (const line of input) {\n if (!line.trim()) continue;\n\n try {\n await handleRequest(JSON.parse(line) as JsonRpcRequest);\n } catch (caught) {\n error(\n undefined,\n JSON_RPC_INTERNAL_ERROR,\n caught instanceof Error ? caught.message : String(caught),\n );\n }\n }\n },\n };\n};\n","import { mkdirSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { PROGRAM_NAME_ENV_SUFFIX } from '../constants';\nimport { packageEnvPrefix, packageRoot, readPackageJson } from '../package/json';\nimport { getBinDir, installCommandShim } from './shims';\n\nconst DEV_BIN_DIR_ENV_SUFFIX = '_DEV_BIN_DIR';\nconst SOURCE_CLI_PATH = 'src/cli.ts';\n\ntype DevCommandConfig = {\n binDirEnvName: string;\n cliPath: string;\n commandName: string;\n packageDir: string;\n programNameEnvName: string;\n};\n\ntype PackageDevCommandOptions = {\n commandName: string;\n};\n\ntype PackageDevCommandsOptions = {\n commandNames: readonly string[];\n};\n\nexport const installDevCommand = (config: DevCommandConfig) => {\n const binDir = getBinDir(config.binDirEnvName);\n mkdirSync(binDir, { recursive: true });\n installCommandShim(binDir, config);\n};\n\nexport const installPackageDevCommand = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n) => {\n installDevCommand(packageDevCommandConfig(importMetaUrl, options));\n};\n\nexport const installPackageDevCommands = (\n importMetaUrl: string,\n options: PackageDevCommandsOptions,\n) => {\n for (const commandName of options.commandNames) {\n installPackageDevCommand(importMetaUrl, { commandName });\n }\n};\n\nexport const uninstallDevCommand = (\n config: Pick<DevCommandConfig, 'binDirEnvName' | 'commandName'>,\n) => {\n const binDir = getBinDir(config.binDirEnvName);\n\n rmSync(join(binDir, config.commandName), { force: true });\n rmSync(join(binDir, `${config.commandName}.cmd`), { force: true });\n};\n\nexport const uninstallPackageDevCommand = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n) => {\n const { binDirEnvName, commandName } = packageDevCommandConfig(importMetaUrl, options);\n uninstallDevCommand({ binDirEnvName, commandName });\n};\n\nexport const uninstallPackageDevCommands = (\n importMetaUrl: string,\n options: PackageDevCommandsOptions,\n) => {\n for (const commandName of options.commandNames) {\n uninstallPackageDevCommand(importMetaUrl, { commandName });\n }\n};\n\nconst packageDevCommandConfig = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n): DevCommandConfig => {\n const packageDir = packageRoot(importMetaUrl);\n const packageJson = readPackageJson(packageDir);\n const appEnvPrefix = packageEnvPrefix(packageJson.name);\n\n return {\n binDirEnvName: `${appEnvPrefix}${DEV_BIN_DIR_ENV_SUFFIX}`,\n cliPath: join(packageDir, SOURCE_CLI_PATH),\n commandName: options.commandName,\n packageDir,\n programNameEnvName: `${appEnvPrefix}${PROGRAM_NAME_ENV_SUFFIX}`,\n };\n};\n","import { execFileSync } from 'node:child_process';\nimport { chmodSync, rmSync, writeFileSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nconst POSIX_SHIM_MODE = 0o755;\nconst WINDOWS_PLATFORM = 'win32';\nconst NPM_COMMAND = 'npm';\nconst NPM_WINDOWS_COMMAND = 'npm.cmd';\nconst NPM_PREFIX_ARGS = ['config', 'get', 'prefix'];\nconst COMMAND_OUTPUT_ENCODING = 'utf8';\nconst WINDOWS_NPM_DIR = ['AppData', 'Roaming', 'npm'];\nconst NODE_MODULES_BIN = ['node_modules', '.bin'];\nconst TSX_BIN = 'tsx';\nconst TSX_WINDOWS_BIN = 'tsx.cmd';\n\nexport type DevCommandShimConfig = {\n cliPath: string;\n commandName: string;\n packageDir: string;\n programNameEnvName: string;\n};\n\nexport const installCommandShim = (binDir: string, config: DevCommandShimConfig) => {\n if (process.platform === WINDOWS_PLATFORM) {\n installWindowsShim(binDir, config);\n return;\n }\n\n installPosixShim(binDir, config);\n};\n\nexport const getBinDir = (envName: string) => {\n const envValue = process.env[envName];\n\n if (envValue) {\n return envValue;\n }\n\n if (process.platform === WINDOWS_PLATFORM) {\n return getNpmPrefix() ?? join(homedir(), ...WINDOWS_NPM_DIR);\n }\n\n return join(homedir(), '.local', 'bin');\n};\n\nconst installPosixShim = (binDir: string, config: DevCommandShimConfig) => {\n const target = join(binDir, config.commandName);\n rmSync(target, { force: true });\n writeFileSync(target, getPosixShim(config));\n chmodSync(target, POSIX_SHIM_MODE);\n};\n\nconst installWindowsShim = (binDir: string, config: DevCommandShimConfig) => {\n const target = join(binDir, `${config.commandName}.cmd`);\n rmSync(target, { force: true });\n writeFileSync(target, getWindowsShim(config));\n};\n\nconst getNpmPrefix = () => {\n try {\n return execFileSync(\n process.platform === WINDOWS_PLATFORM ? NPM_WINDOWS_COMMAND : NPM_COMMAND,\n NPM_PREFIX_ARGS,\n {\n encoding: COMMAND_OUTPUT_ENCODING,\n stdio: ['ignore', 'pipe', 'ignore'],\n },\n ).trim();\n } catch {\n return null;\n }\n};\n\nconst getPosixShim = (config: DevCommandShimConfig) => {\n return `#!/usr/bin/env sh\nset -eu\nexport ${config.programNameEnvName}=${config.commandName}\nexec ${shellQuote(join(config.packageDir, ...NODE_MODULES_BIN, TSX_BIN))} ${shellQuote(config.cliPath)} \"$@\"\n`;\n};\n\nconst getWindowsShim = (config: DevCommandShimConfig) => {\n return `@echo off\nset \"${config.programNameEnvName}=${config.commandName}\"\n\"${join(config.packageDir, ...NODE_MODULES_BIN, TSX_WINDOWS_BIN)}\" \"${config.cliPath}\" %*\n`;\n};\n\nconst shellQuote = (value: string) => {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n};\n"],"mappings":";AAAA,SAAS,KAAAA,UAAS;;;ACGlB,IAAM,kBAAkB,oBAAI,QAAmC;AAExD,IAAM,qBAAqB,CAAC,SAAkB,aAAgC;AACnF,kBAAgB,IAAI,SAAmB,QAAQ;AACjD;AAEO,IAAM,qBAAqB,CAAC,YAAqB,gBAAgB,IAAI,OAAiB;;;ACD7F,IAAK,kBAAL,kBAAKC,qBAAL;AACE,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,SAAM;AAHH,SAAAA;AAAA,GAAA;AAML,IAAM,0BAA0B;AAChC,IAAM,iCAAiC;AACvC,IAAM,4BAA4B;AAClC,IAAM,+BAA+B;AACrC,IAAM,sBAAsB;AAK5B,IAAM,mBAAmB,OAAO,OAAO,eAAe;AACtD,IAAM,6BAA6B;AAAA,EACjC,CAAC,iBAAoB,GAAG;AAAA,EACxB,CAAC,iBAAoB,GAAG;AAAA,EACxB,CAAC,eAAmB,GAAG;AACzB;AAWO,IAAM,4BAA4B,CAAC,SAAkB,SAA2B,CAAC,MAAM;AAC5F,UACG,QAAQ,yBAAyB,8BAA8B,EAC/D,SAAS,2BAA2B,4BAA4B,EAChE,OAAO,KAAK,EACZ,OAAO,OAAO,EAAE,MAAM,SAAAC,SAAQ,MAAM;AACnC,UAAM,QAAQ,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI;AAEhD,QAAI,kBAAkB,KAAK,GAAG;AAC5B,cAAQ,IAAI,MAAM,oBAAoBA,UAAS,OAAO,MAAM,CAAC;AAC7D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,6BAA6B,SAAS,mBAAmB,GAAG;AACxE,YAAQ,IAAI,cAAc,iBAAiB,KAAK,IAAI,CAAC,EAAE;AACvD,WAAO;AAAA,EACT,CAAC;AACL;AAEA,IAAM,oBAAoB,CAAC,UAA4C;AACrE,SAAQ,iBAAuC,SAAS,KAAK;AAC/D;AAEA,IAAM,sBAAsB,OAC1B,SACA,OACA,WACG;AACH,QAAM,UAAU,QAAQ,OAAO;AAC/B,QAAM,WAAW,eAAe,CAAC,SAAS,GAAI,OAAO,YAAY,CAAC,CAAE,CAAC;AACrE,QAAM,WAAW;AAAA,KACd,MAAM,QAAQ,eAAe,GAAG;AAAA,MAC/B,CAAC,YAAY,QAAQ,WAAW,QAAQ,SAAS;AAAA,IACnD;AAAA,EACF;AACA,QAAM,QAAQ,gBAAgB,QAAQ;AACtC,QAAM,cAAc,oBAAoB,QAAQ;AAChD,QAAM,UAAU,kBAAkB,QAAQ;AAE1C,SAAO,2BAA2B,KAAK,EAAE,UAAU,OAAO,aAAa,SAAS,QAAQ;AAC1F;AAEA,SAAS,uBACP,UACA,OACA,aACA,SACA,UACA;AACA,SAAO,SACJ,IAAI,CAAC,YAAY,0BAA0B,SAAS,OAAO,aAAa,SAAS,QAAQ,CAAC,EAC1F,KAAK,MAAM;AAChB;AAEA,SAAS,wBACP,UACA,OACA,aACA,SACA,UACA;AACA,SAAO,SACJ,IAAI,CAAC,YAAY,2BAA2B,SAAS,OAAO,aAAa,SAAS,QAAQ,CAAC,EAC3F,KAAK,MAAM;AAChB;AAEA,SAAS,0BACP,SACA,OACA,aACA,SACA,UACA;AACA,QAAM,eAAe,uBAAuB,OAAO;AAEnD,SAAO,YAAY,OAAO;AAAA;AAAA,GAEzB,YAAY;AAAA;AAAA;AAAA,EAGb,eAAe,KAAK,CAAC;AAAA;AAAA,EAErB,uBAAuB,WAAW,CAAC;AAAA,EACnC,mBAAmB,OAAO,CAAC;AAAA,EAC3B,2BAA2B,SAAS,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7C,kBAAkB,SAAS,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUlB,OAAO;AAAA;AAAA;AAAA;AAAA,EAIxB,qBAAqB,SAAS,QAAQ,CAAC;AAAA,EACvC,sBAAsB,SAAS,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMlC,YAAY,IAAI,OAAO;AAClC;AAEA,SAAS,2BACP,SACA,OACA,aACA,SACA,UACA;AACA,QAAM,eAAe,GAAG,uBAAuB,OAAO,CAAC;AAEvD,SAAO,IAAI,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWvB,sBAAsB,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAOC,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,EAIvE,sBAAsB,SAAS,QAAQ,CAAC;AAAA,EACxC,0BAA0B,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMzB,YAAY,IAAI,OAAO;AACtC;AAEA,SAAS,wBACP,UACA,OACA,aACA,SACA,UACA;AACA,QAAM,YAAY,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,GAAG;AAEzD,SAAO,GAAG,SAAS,IAAI,CAAC,SAAS,oBAAoB,MAAM,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACjF,SAAS,IAAI,CAAC,SAAS,0BAA0B,MAAM,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EAC5E,SAAS,IAAI,CAAC,SAAS,eAAe,IAAI,KAAK,EAAE,KAAK,IAAI,CAAC;AAAA,EAC3D,SAAS,IAAI,CAAC,SAAS,0BAA0B,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACzE,SAAS,IAAI,CAAC,SAAS,gCAAgC,MAAM,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACrF,SAAS,IAAI,CAAC,SAAS,4BAA4B,MAAM,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7E,SAAS,IAAI,CAAC,SAAS,4BAA4B,MAAM,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC;AAChF;AAEA,IAAM,iBAAiB,CAAC,aAAgC,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;AAE7E,IAAM,eAAe,CAAC,aAAwB;AAC5C,SAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,MAAM,UAAU;AACzC,UAAM,YAAY,mBAAmB,IAAI,GAAG;AAC5C,UAAM,aAAa,mBAAmB,KAAK,GAAG;AAC9C,QAAI,cAAc,UAAa,eAAe,QAAW;AACvD,cAAQ,aAAa,OAAO,qBAAqB,cAAc,OAAO;AAAA,IACxE;AACA,WAAO,KAAK,KAAK,cAAc,MAAM,IAAI;AAAA,EAC3C,CAAC;AACH;AAEA,IAAM,kBAAkB,CAAC,aAAwB;AAC/C,QAAM,QAAQ,oBAAI,IAA6B;AAE/C,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,QAAQ,KAAK,MAAM,GAAG;AACpC,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,CAAC,QAAQ,MAAM,IAAI,IAAI,GAAG;AAC5B;AAAA,IACF;AAEA,UAAM,IAAI,MAAM;AAAA,MACd,MAAM;AAAA,MACN,aAAa,MAAM,WAAW,IAAI,QAAQ,cAAc,GAAG,IAAI;AAAA,IACjE,CAAC;AAAA,EACH;AAEA,SAAO,CAAC,GAAG,MAAM,OAAO,CAAC;AAC3B;AAEA,IAAM,sBAAsB,CAAC,aAAwB;AACnD,QAAM,SAAS,oBAAI,IAA+B;AAElD,aAAW,WAAW,UAAU;AAC9B,UAAM,CAAC,MAAM,UAAU,IAAI,QAAQ,KAAK,MAAM,GAAG;AAEjD,QAAI,CAAC,QAAQ,CAAC,YAAY;AACxB;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,IAAI,IAAI,KAAK,CAAC;AAEnC,QAAI,CAAC,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,UAAU,GAAG;AACnD,YAAM,KAAK,EAAE,MAAM,YAAY,aAAa,QAAQ,YAAY,CAAC;AAAA,IACnE;AAEA,WAAO,IAAI,MAAM,KAAK;AAAA,EACxB;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,aAAwB;AACjD,QAAM,iBAAiB,oBAAI,IAA+B;AAE1D,aAAW,WAAW,UAAU;AAC9B,UAAM,UAAU,QAAQ,QACrB,OAAO,CAAC,WAAW,OAAO,OAAO,EACjC;AAAA,MAAQ,CAAC,WACR,OAAO,aAAa,IAAI,CAAC,cAAc;AAAA,QACrC,MAAM;AAAA,QACN,aAAa,OAAO;AAAA,MACtB,EAAE;AAAA,IACJ;AAEF,QAAI,QAAQ,SAAS,GAAG;AACtB,qBAAe,IAAI,QAAQ,MAAM,OAAO;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,iBAAiB,CAAC,UAA6B;AACnD,SAAO,MAAM,IAAI,CAAC,SAAS,QAAQ,cAAc,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI;AACtE;AAEA,IAAM,yBAAyB,CAAC,WAA2C;AACzE,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IACC,CAAC,CAAC,MAAM,KAAK,MAAM;AAAA,aACZ,IAAI;AAAA,IACb,IAAI;AAAA,EACN,eAAe,KAAK,CAAC;AAAA;AAAA,EAEnB,EACC,KAAK,IAAI;AACd;AAEA,IAAM,6BAA6B,CAAC,SAAiB,aAAwB;AAC3E,SAAO,SACJ,QAAQ,CAAC,YAAY;AACpB,UAAM,YAAY,mBAAmB,OAAO,GAAG,YAAY,MAAM,OAAO,EAAE;AAC1E,WAAO,YAAY,CAAC,SAAS,IAAI,CAAC;AAAA,EACpC,CAAC,EACA,KAAK,IAAI;AACd;AAEA,IAAM,uBAAuB,CAAC,SAAiB,aAAwB;AACrE,SAAO,SACJ,QAAQ,CAAC,YAAY;AACpB,UAAM,WAAW,mBAAmB,OAAO,GAAG,YAAY,MAAM,OAAO,EAAE;AACzE,WAAO,WACH;AAAA,MACE,WAAW,QAAQ,IAAI;AAAA,EACjC,QAAQ;AAAA;AAAA,IAEA,IACA,CAAC;AAAA,EACP,CAAC,EACA,KAAK,IAAI;AACd;AAEA,IAAM,wBAAwB,CAAC,SAAiB,WAA2C;AACzF,SAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EACrB;AAAA,IACC,CAAC,SAAS,WAAW,IAAI;AAAA,uBACR,OAAO,IAAI,IAAI,cAAc,IAAI;AAAA;AAAA,EAEpD,EACC,KAAK,IAAI;AACd;AAEA,IAAM,qBAAqB,CAAC,WAA2C;AACrE,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IACC,CAAC,CAAC,SAAS,KAAK,MAAM;AAAA,aACf,eAAe,OAAO,CAAC;AAAA,IAChC,eAAe,OAAO,CAAC;AAAA,EACzB,eAAe,KAAK,CAAC;AAAA;AAAA,EAEnB,EACC,KAAK,IAAI;AACd;AAEA,IAAM,oBAAoB,CAAC,SAAiB,WAA2C;AACrF,SAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EACrB;AAAA,IACC,CAAC,YAAY,SAAS,KAAK,UAAU,OAAO,CAAC;AAAA,qBAC9B,OAAO,IAAI,OAAO,aAAa,eAAe,OAAO,CAAC;AAAA;AAAA;AAAA,EAGvE,EACC,KAAK,IAAI;AACd;AAEA,IAAM,wBAAwB,CAAC,SAAiB,aAAwB;AACtE,SAAO,SACJ,QAAQ,CAAC,YAAY;AACpB,UAAM,WAAW,mBAAmB,OAAO,GAAG,YAAY,OAAO,OAAO;AACxE,WAAO,WACH;AAAA,MACE,WAAW,QAAQ,IAAI;AAAA,EACjC,QAAQ;AAAA;AAAA,IAEA,IACA,CAAC;AAAA,EACP,CAAC,EACA,KAAK,IAAI;AACd;AAEA,IAAM,4BAA4B,CAAC,WAA2C;AAC5E,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IACC,CAAC,CAAC,MAAM,KAAK,MAAM,WAAW,IAAI;AAAA,qCACH,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,EAEzE,EACC,KAAK,IAAI;AACd;AAEA,IAAM,sBAAsB,CAAC,SAAiB,cAAsB;AAClE,SAAO,cAAc,OAAO;AAAA;AAAA;AAAA;AAAA,aAIjB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOT,OAAO;AAAA;AAAA;AAAA;AAIpB;AAEA,IAAM,4BAA4B,CAAC,SAAiB,aAAwB;AAC1E,SAAO,SACJ,QAAQ,CAAC,YAAY;AACpB,UAAM,YAAY,mBAAmB,OAAO,GAAG,YAAY,OAAO,OAAO,EAAE;AAC3E,WAAO,YAAY,CAAC,SAAS,IAAI,CAAC;AAAA,EACpC,CAAC,EACA,KAAK,IAAI;AACd;AAEA,IAAM,8BAA8B,CAAC,SAAiB,aAAwB;AAC5E,SAAO,SACJ,QAAQ,CAAC,YAAY;AACpB,UAAM,WAAW,mBAAmB,OAAO,GAAG,YAAY,OAAO,OAAO,EAAE;AAC1E,WAAO,WAAW,CAAC,QAAQ,IAAI,CAAC;AAAA,EAClC,CAAC,EACA,KAAK,IAAI;AACd;AAEA,IAAM,4BAA4B,CAAC,SAAiB,UAA6B;AAC/E,SAAO,MACJ;AAAA,IACC,CAAC,SACC,eAAe,OAAO,iBAAiB,OAAO,qBAAqB,UAAU,KAAK,IAAI,CAAC,OAAO,UAAU,KAAK,eAAe,EAAE,CAAC;AAAA,EACnI,EACC,KAAK,IAAI;AACd;AAEA,IAAM,kCAAkC,CACtC,SACA,WACG;AACH,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IAAQ,CAAC,CAAC,MAAM,KAAK,MACpB,MAAM;AAAA,MACJ,CAAC,SACC,eAAe,OAAO,aAAa,OAAO,kBAAkB,UAAU,IAAI,CAAC,QAAQ,UAAU,KAAK,IAAI,CAAC,OAAO,UAAU,KAAK,eAAe,EAAE,CAAC;AAAA,IACnJ;AAAA,EACF,EACC,KAAK,IAAI;AACd;AAEA,IAAM,wBAAwB,CAAC,WAA2C;AACxE,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IACC,CAAC,CAAC,SAAS,KAAK,MAAM,SAAS,KAAK,UAAU,OAAO,CAAC;AAAA,mCACzB,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,EAEvE,EACC,KAAK,IAAI;AACd;AAEA,IAAM,8BAA8B,CAAC,SAAiB,WAA2C;AAC/F,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB;AAAA,IAAQ,CAAC,CAAC,SAAS,KAAK,MACvB,MAAM,IAAI,CAAC,SAAS;AAClB,YAAM,aAAa,eAAe,KAAK,IAAI;AAC3C,aAAO,eAAe,OAAO,aAAa,OAAO,kBAAkB,UAAU,OAAO,CAAC,KAAK,UAAU,OAAO,UAAU,KAAK,eAAe,EAAE,CAAC;AAAA,IAC9I,CAAC;AAAA,EACH,EACC,KAAK,IAAI;AACd;AAEA,IAAM,iBAAiB,CAAC,SAAiB;AACvC,MAAI,KAAK,WAAW,IAAI,EAAG,QAAO,MAAM,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC;AAChE,MAAI,KAAK,WAAW,GAAG,EAAG,QAAO,MAAM,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC;AAC/D,SAAO,MAAM,UAAU,IAAI,CAAC;AAC9B;AAEA,IAAM,yBAAyB,CAAC,YAAoB;AAClD,SAAO,QAAQ,QAAQ,OAAO,GAAG;AACnC;AAEA,IAAM,iBAAiB,CAAC,YAAoB;AAC1C,SAAO,GAAG,QAAQ,QAAQ,OAAO,GAAG,CAAC;AACvC;AAEA,IAAM,gBAAgB,CAAC,SAA0B;AAC/C,QAAM,OAAO,KAAK,cAAc,GAAG,KAAK,IAAI,IAAI,KAAK,WAAW,KAAK,KAAK;AAE1E,SAAO,KAAK,QAAQ,MAAM,OAAO;AACnC;AAEA,IAAM,YAAY,CAAC,UAAkB;AACnC,SAAO,IAAI,MAAM,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK,CAAC;AAC9D;;;ACveA,IAAM,uBAAuB;AAC7B,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,kBAAkB,oBAAI,QAAkC;AAevD,IAAM,qBAAqB,CAAC,SAAkB,SAA0B;AAC7E,kBAAgB,IAAI,SAAS,IAAI;AACnC;AAEO,IAAM,sBAAsB,CAAC,SAClC,KAAK,WAAW,KAAM,KAAK,WAAW,KAAK,CAAC,UAAU,IAAI,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE;AAE7E,IAAM,mBAAmB,OAAO,YAAqB;AAC1D,QAAM,OAAO,gBAAgB,IAAI,OAAO;AACxC,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sCAAsC;AAEjE,QAAM,eAAe,UAAU,MAAM,YAAY,MAAM,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,QAAM,eAAe,yBAAyB,YAAY;AAC1D,QAAM,SAAS,CAAC,WAAW,MAAM,YAAY,GAAG,eAAe,KAAK,QAAQ,CAAC,EAC1E,OAAO,OAAO,EACd,KAAK,IAAI;AACZ,UAAQ,IAAI,GAAG,MAAM;AAAA,CAAI;AAC3B;AAEA,eAAe,YAAY,UAAkC;AAC3D,QAAM,cAAc,QAAQ;AAC5B,QAAM,QAAkB,CAAC;AACzB,UAAQ,MAAM,IAAI,SAAoB;AACpC,UAAM,KAAK,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG,CAAC;AAAA,EACvC;AAEA,MAAI;AACF,UAAM,SAAS;AAAA,EACjB,UAAE;AACA,YAAQ,MAAM;AAAA,EAChB;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,WAAW,MAAuB,cAAyC;AAClF,SAAO;AAAA,IACL;AAAA,IACA,KAAK,KAAK,OAAO,IAAI,KAAK,OAAO,WAAM,KAAK,WAAW;AAAA,IACvD;AAAA,IACA,QAAQ,OAAO;AAAA,IACf;AAAA,IACA,cAAS,KAAK,OAAO;AAAA,IACrB;AAAA,IACA,QAAQ,UAAU;AAAA,IAClB;AAAA,IACA,GAAG;AAAA,MACD,iBAAiB,KAAK,SAAS,OAAO,gBAAgB,EAAE,IAAI,cAAc,GAAG,YAAY;AAAA,IAC3F;AAAA,IACA;AAAA,IACA,QAAQ,gBAAgB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,iBACP,aACA,cACA;AACA,QAAM,eAAe,IAAI,IAAI,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AAC/D,SAAO,CAAC,GAAG,aAAa,GAAG,aAAa,OAAO,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,IAAI,CAAC,CAAC;AACtF;AAEA,SAAS,yBAAyB,MAAc;AAC9C,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,gBAAgB,MAAM,UAAU,CAAC,SAAS,KAAK,KAAK,MAAM,UAAU;AAC1E,QAAM,qBAAqB,MAAM,UAAU,CAAC,SAAS,KAAK,KAAK,MAAM,gBAAgB;AACrF,QAAM,oBAAoB,iBAAiB,KAAK,qBAAqB;AACrE,MAAI,CAAC,kBAAmB,QAAO,CAAC;AAEhC,SAAO,iBAAiB,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAC5E;AAEA,SAAS,iBAAiB,OAA0B;AAClD,SAAO,MAAM,OAAyB,CAAC,MAAM,SAAS;AACpD,UAAM,MAAM,gBAAgB,IAAI;AAChC,QAAI,KAAK;AACP,WAAK,KAAK,GAAG;AACb,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,KAAK,GAAG,EAAE;AAC3B,UAAM,eAAe,KAAK,KAAK;AAC/B,QAAI,CAAC,YAAY,CAAC,aAAc,QAAO;AAEvC,aAAS,cAAc,GAAG,SAAS,WAAW,IAAI,YAAY;AAC9D,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAEA,SAAS,gBAAgB,MAA0C;AACjE,QAAM,QAAQ,KAAK,MAAM,0BAA0B;AACnD,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAG,QAAO;AACrC,SAAO,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,aAAa,MAAM,CAAC,EAAE,KAAK,EAAE;AAC/D;AAEA,SAAS,UAAU,MAAc;AAC/B,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,eAAe,SAA4C;AAClE,SAAO,EAAE,MAAM,QAAQ,MAAM,aAAa,QAAQ,YAAY;AAChE;AAEA,SAAS,iBAAiB,SAA4B;AACpD,SAAO,QAAQ,QAAQ,YAAY;AACrC;AAEA,SAAS,kBAAkB,MAAiC;AAC1D,QAAM,SAAS,cAAc,IAAI;AACjC,SAAO,OAAO,QAAQ,CAAC,UAAU,mBAAmB,KAAK,CAAC;AAC5D;AAEA,SAAS,cAAc,MAAiC;AACtD,QAAM,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,gBAAgB,GAAG,CAAC;AAC9D,QAAM,aAAa,IAAI;AAAA,IACrB,YAAY,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC;AAAA,EACnF;AACA,QAAM,YAAY,YAAY,OAAO,CAAC,QAAQ,IAAI,KAAK,SAAS,GAAG,CAAC;AACpE,QAAM,eAAe,IAAI,IAAI,UAAU,IAAI,CAAC,QAAQ,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,OAAO,CAAC;AAC3F,QAAM,iBAAiB,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,YAAY;AAAA,IACxD,UAAU,UAAU,OAAO,CAAC,QAAQ,IAAI,KAAK,WAAW,GAAG,MAAM,GAAG,CAAC;AAAA,IACrE,QAAQ,WAAW,IAAI,MAAM,KAAK,EAAE,MAAM,QAAQ,aAAa,GAAG,MAAM,YAAY;AAAA,EACtF,EAAE;AACF,QAAM,iBAAiB,YAAY;AAAA,IACjC,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI;AAAA,EAC/D;AAEA,SAAO,CAAC,GAAG,gBAAgB,GAAG,eAAe,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,OAAO,EAAE,CAAC;AAC1F;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,IAAI,SAAS,iBAAiB,IAAI,SAAS;AACpD;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AACF,GAGG;AACD,MAAI,SAAS,WAAW,EAAG,QAAO,CAAC,kBAAkB,OAAO,MAAM,OAAO,WAAW,CAAC;AAErF,SAAO;AAAA,IACL,kBAAkB,OAAO,MAAM,kBAAkB,MAAM,GAAG,GAAG,kBAAkB,MAAM,CAAC;AAAA,IACtF,GAAG,SAAS;AAAA,MAAI,CAAC,UACf,kBAAkB,MAAM,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,GAAG,MAAM,aAAa,CAAC;AAAA,IAClF;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,QAAwB;AACjD,SAAO,kBAAkB,MAAM,IAAI,KAAK,OAAO;AACjD;AAEA,SAAS,kBAAkB,QAAwB;AACjD,SAAO,OAAO,gBAAgB,GAAG,OAAO,IAAI;AAC9C;AAEA,SAAS,kBAAkB,MAAc,aAAqB,SAAS,GAAG,QAAQ,OAAO;AACvF,QAAM,aAAa,KAAK,OAAO,uBAAuB,MAAM;AAC5D,QAAM,cAAc,QAAQ,KAAK,UAAU,IAAI;AAC/C,SAAO,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ;AACrE;AAEA,SAAS,QAAQ,MAAc;AAC7B,SAAO,KAAK,MAAM,IAAI,CAAC;AACzB;AAEA,SAAS,MAAM,MAAc;AAC3B,MAAI,CAAC,QAAQ,OAAO,SAAS,QAAQ,IAAI,SAAU,QAAO;AAC1D,SAAO,GAAG,SAAS,GAAG,IAAI,GAAG,UAAU;AACzC;AAEA,SAAS,KAAK,MAAc;AAC1B,MAAI,CAAC,QAAQ,OAAO,SAAS,QAAQ,IAAI,SAAU,QAAO;AAC1D,SAAO,GAAG,SAAS,GAAG,IAAI,GAAG,UAAU;AACzC;AAEA,SAAS,eAAe,UAA6B;AACnD,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,SAAO,CAAC,QAAQ,UAAU,GAAG,IAAI,GAAG,SAAS,IAAI,CAAC,YAAY,OAAO,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,IAAI;AAChG;;;ACnNA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,QAAAC,aAAY;AAC9B,SAAS,qBAAqB;;;ACF9B,SAAS,eAAe;AACxB,SAAS,UAAU,YAAY;AAC/B,SAAS,qBAAqB;AAG9B,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB,oBAAI,IAAI,CAAC,YAAY,YAAY,CAAC;AAMzD,IAAM,qBAAqB,OAAO,gBAAwB;AAC/D,SAAO,4BAA4B,MAAM,aAAa,WAAW,CAAC;AACpE;AAEO,IAAM,8BAA8B,OAAO,UAA6B;AAC7E,SAAO,QAAQ;AAAA,IACb,MAAM,IAAI,CAAC,SAAS,OAAO,cAAc,IAAI,EAAE,KAA+B;AAAA,EAChF;AACF;AAEO,IAAM,gCAAgC,CAAC,YAAsC;AAClF,SAAO,QAAQ;AAAA,IAAQ,CAAC,WACtB,OAAO,OAAO,MAAM,EAAE;AAAA,MAAQ,CAAC,UAC7B,uBAAuB,KAAK,KAAK,MAAM,WAAW,CAAC,MAAM,QAAQ,IAAI,CAAC;AAAA,IACxE;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,CACvC,SACA,aACG;AACH,SAAO,QAAQ;AAAA,IAAQ,CAAC,WACtB,OAAO,QAAQ,MAAM,EAClB,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,SAAS,MAAM,KAAK,CAAC,EAC/C,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,KAAgB;AAAA,EACxC;AACF;AAEA,IAAM,eAAe,OAAO,QAAmC;AAC7D,QAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAC1D,QAAM,cAAc,MAAM,QAAQ;AAAA,IAChC,QAAQ,IAAI,CAAC,UAAU;AACrB,YAAM,OAAO,KAAK,KAAK,MAAM,IAAI;AACjC,UAAI,MAAM,YAAY,EAAG,QAAO,aAAa,IAAI;AACjD,UAAI,MAAM,OAAO,KAAK,cAAc,IAAI,EAAG,QAAO,CAAC,IAAI;AACvD,aAAO,CAAC;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO,YAAY,KAAK,EAAE,KAAK;AACjC;AAEA,IAAM,gBAAgB,CAAC,SAAiB;AACtC,QAAM,WAAW,SAAS,IAAI;AAC9B,SAAO,KAAK,SAAS,sBAAsB,KAAK,CAAC,sBAAsB,IAAI,QAAQ;AACrF;AAEO,IAAM,yBAAyB,CAAC,UAAkD;AACvF,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,UAAU;AAChB,SAAO,OAAO,QAAQ,QAAQ;AAChC;;;AC/DA,SAAuB,SAAS;AA0CzB,IAAM,2BAA2B,CACtC,aAEA,aAAa,UAAa,aAAa,SAAS,SAAS,SAAS;AAE7D,IAAM,+BAA+B,CAC1C,aAEA,aAAa,UAAa,aAAa,SAAS,SAAS,SAAS;AAyC7D,IAAM,gBAAgB,CAI3B,eACmD;AACnD,QAAM,UAAU;AAAA,IACd,cAAc,EAAE,QAAQ;AAAA,IACxB,GAAG;AAAA,EACL;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa,WAAW,eAAe,kCAAkC,OAAO;AAAA,EAClF;AACF;AAEO,IAAM,kBAAkB,CAAC,SAAkB,eAA2C;AAC3F,QAAM,UACJ,WAAW,WAAW;AAAA,IACpB,CAAC,gBAAgB,aACf,eAAe,SAAS,SAAS,UAAU,SAAS,WAAW;AAAA,IACjE,QAAQ,QAAQ,WAAW,MAAM,WAAW,aAAa,WAAW,MAAM;AAAA,EAC5E,KAAK,QAAQ,QAAQ,WAAW,MAAM,WAAW,aAAa,WAAW,MAAM;AAEjF,QAAM,qBACJ,WAAW,SAAS;AAAA,IAClB,CAAC,gBAAgB,WACf,eAAe,OAAO,sBAAsB,MAAM,GAAG,OAAO,aAAa,OAAO,MAAM;AAAA,IACxF;AAAA,EACF,KAAK;AAEP,QAAM,oBACJ,WAAW,SAAS;AAAA,IAClB,CAAC,gBAAgB,UAAU,eAAe,MAAM,KAAK;AAAA,IACrD;AAAA,EACF,KAAK;AAEP,qBAAmB,mBAAmB,UAAU;AAChD,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,MAA+B,SAAiB,KAAK,IAAI;AAEpF,IAAM,qBAAqB,CAAC,MAA+B,SAAiB;AACjF,QAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,SAAO,UAAU,SAAY,KAAK,OAAO,KAAK;AAChD;AAEO,IAAM,qBAAqB,CAChC,YACA,MACA,YAEA,6BAA6B,YAAY;AAAA,EACvC,GAAG,uBAAuB,YAAY,IAAI;AAAA,EAC1C,GAAG;AACL,CAAC;AAEI,IAAM,+BAA+B,CAC1C,YACA,WACI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG,OAAO;AAAA,KACP,WAAW,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW;AAC7C,YAAM,OAAO,gBAAgB,MAAM;AACnC,UAAI,MAAM,IAAI,MAAM,OAAW,QAAO,CAAC;AAEvC,YAAM,QAAQ,sBAAsB,MAAM,EAAE;AAAA,QAC1C,CAAC,cAAc,MAAM,SAAS,MAAM;AAAA,MACtC;AACA,aAAO,QAAQ,CAAC,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAEA,IAAM,yBAAyB,CAAC,YAA+B,UAAmC;AAAA,EAChG,GAAG;AAAA,EACH,GAAG,OAAO;AAAA,KACP,WAAW,aAAa,CAAC,GACvB,IAAI,CAAC,aAA4C;AAChD,YAAM,OAAO,aAAa,SAAS,QAAQ;AAC3C,YAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,aAAO,UAAU,SAAY,SAAY,CAAC,MAAM,KAAK;AAAA,IACvD,CAAC,EACA,OAAO,CAAC,UAAsC,UAAU,MAAS;AAAA,EACtE;AACF;AAEO,IAAM,oCAAoC,CAAC,eAAkC;AAClF,QAAM,aAAa,+BAA+B,UAAU;AAC5D,QAAM,QAAQ,OAAO;AAAA,IACnB,OAAO,QAAQ,WAAW,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,QAAQ,MAAM;AAAA,MAC9D;AAAA,MACA,iBAAiB,UAAgC,WAAW,SAAS,SAAS,IAAI,CAAC;AAAA,IACrF,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,OAAO,KAAK;AACvB;AAEO,IAAM,iCAAiC,CAAC,gBAAmC;AAAA,EAChF,MAAM;AAAA,EACN,YAAY,OAAO,YAAY;AAAA,IAC7B,IAAI,WAAW,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,MAChD,aAAa,SAAS,QAAQ;AAAA,MAC9B,eAAe,QAAQ;AAAA,IACzB,CAAC;AAAA,IACD,IAAI,WAAW,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW;AAAA,MAC5C,gBAAgB,MAAM;AAAA,MACtB,OAAO,UAAU,aAAa,MAAM;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,UAAU;AAAA,IACR,IAAI,WAAW,aAAa,CAAC,GAC1B,OAAO,CAAC,aAAa,mBAAmB,SAAS,QAAQ,CAAC,EAC1D,IAAI,CAAC,aAAa,aAAa,SAAS,QAAQ,CAAC;AAAA,IACpD,IAAI,WAAW,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,OAAO,QAAQ,QAAQ,EAAE,IAAI,eAAe;AAAA,EAC/F;AAAA,EACA,sBAAsB;AACxB;AAEA,IAAM,mBAAmB,CAAC,UAA8B,aAAsB;AAC5E,QAAM,SAAS,YAAY,QAAQ;AACnC,QAAM,kBAAkB,SAAS,cAAc,OAAO,SAAS,SAAS,WAAW,IAAI;AAEvF,SAAO,WAAW,kBAAkB,gBAAgB,SAAS;AAC/D;AAEA,IAAM,cAAc,CAAC,aAA0C;AAC7D,MAAI,SAAS,SAAS,QAAS,QAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AACxD,MAAI,SAAS,SAAS,UAAW,QAAO,EAAE,QAAQ;AAClD,MAAI,SAAS,SAAS,SAAU,QAAO,EAAE,OAAO;AAChD,SAAO,EAAE,OAAO;AAClB;AAEA,IAAM,iBAAiB,CAAC,cAA6D;AAAA,EACnF,MAAM,mBAAmB,SAAS,QAAQ,IAAI,UAAU;AAAA,EACxD,aAAa,SAAS;AAAA,EACtB,GAAI,mBAAmB,SAAS,QAAQ,IAAI,EAAE,OAAO,EAAE,MAAM,SAAkB,EAAE,IAAI,CAAC;AACxF;AAEA,IAAM,eAAe,CAAC,YAAyD;AAAA,EAC7E,MAAM,OAAO,QAAQ,WAAW;AAAA,EAChC,aAAa,OAAO;AACtB;AAEA,IAAM,eAAe,CAAC,aAAqB;AACzC,SAAO;AAAA,IACL,SACG,QAAQ,aAAa,EAAE,EACvB,QAAQ,aAAa,CAAC,QAAQ,WAAmB,OAAO,YAAY,CAAC;AAAA,EAC1E;AACF;AAEO,IAAM,wBAAwB,CAAC,WAAoC;AACxE,QAAM,WAAW,GAAG,OAAO,UAAU,UAAU,IAAI,GAAG,OAAO,IAAI;AACjE,QAAM,WAAW,OAAO,WAAW,CAAC,GAAG;AAAA,IAAI,CAAC,UAC1C,MAAM,WAAW,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK;AAAA,EAC/C;AACA,SAAO,CAAC,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,QAAQ,IAAI,OAAO,KAAK,KAAK,EAAE,EAAE,EAAE,KAAK,IAAI;AACvF;AAEA,IAAM,kBAAkB,CAAC,WAAoC,aAAa,OAAO,IAAI;AAErF,IAAM,wBAAwB,CAAC,YAC5B,OAAO,WAAW,CAAC,GAAG,IAAI,YAAY;AAEzC,IAAM,eAAe,CAAC,UACpB,MAAM,QAAQ,aAAa,CAAC,QAAQ,WAAmB,OAAO,YAAY,CAAC;AAE7E,IAAM,qBAAqB,CAAC,aAAqB,SAAS,KAAK,EAAE,WAAW,GAAG;AAE/E,IAAM,qBAAqB,CAAC,aAAqB,SAAS,SAAS,KAAK;;;AC1QjE,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;;;ACDvC,SAAS,YAAY;AACrB,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAG1B,IAAM,YAAY,UAAU,IAAI;AAEzB,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAYL,IAAM,wBAAwB,CAAC,SAAkB,YAA0C;AAChG,UAAQ,QAAQ,UAAU,UAAU,QAAQ,WAAW,oBAAoB,EAAE,OAAO,YAAY;AAC9F,QAAI,QAAQ,UAAU;AACpB,cAAQ,IAAI,+CAA+C;AAC3D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,6BAA6B;AACzC,UAAM,iBAAiB,QAAQ,WAAW;AAE1C,YAAQ,IAAI,4BAA4B;AACxC,UAAM,gBAAgB,MAAM,iBAAiB,QAAQ,WAAW;AAChE,QAAI,CAAC,eAAe;AAClB,cAAQ,IAAI,gDAAgD;AAC5D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,oBAAoB,cAAc,EAAE;AAChD,YAAQ,IAAI,mBAAmB,aAAa,EAAE;AAE9C,QAAI,mBAAmB,eAAe;AACpC,cAAQ,IAAI,GAAG,QAAQ,WAAW,wBAAwB;AAC1D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,8BAA8B;AAC1C,UAAM,iBAAiB,MAAM,qBAAqB,QAAQ,WAAW;AAErE,QAAI,CAAC,gBAAgB;AACnB,cAAQ,IAAI,+BAA+B,QAAQ,WAAW,gBAAgB;AAC9E,cAAQ,IAAI,mDAAmD;AAC/D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,6BAA6B,cAAc,EAAE;AACzD,YAAQ,IAAI,YAAY,QAAQ,WAAW,SAAS,cAAc,OAAO,aAAa,KAAK;AAE3F,UAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,UAAU,cAAc,gBAAgB,QAAQ,WAAW,CAAC;AAE7F,YAAQ;AAAA,MACN,GAAG,QAAQ,WAAW,8BAA8B,cAAc,OAAO,aAAa;AAAA,IACxF;AACA,QAAI,OAAQ,SAAQ,IAAI,OAAO,KAAK,CAAC;AACrC,QAAI,OAAQ,SAAQ,IAAI,OAAO,KAAK,CAAC;AACrC,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAe,qBAAqB,aAAqD;AACvF,QAAM,gBAAgB,MAAM,iBAAiB,WAAW;AACxD,MAAI,CAAC,cAAe,QAAQ,MAAM,mBAAmB,WAAW,IAAK,kBAAqB;AAE1F,SAAO,0BAA0B,aAAa,KAAK;AACrD;AAEO,SAAS,0BAA0B,eAA8C;AACtF,QAAM,gBAAgB;AAAA,IACpB,EAAE,SAAS,mBAAqB,UAAU,CAAC,UAAU,YAAY,WAAW,WAAW,EAAE;AAAA,IACzF,EAAE,SAAS,mBAAqB,UAAU,CAAC,UAAU,YAAY,WAAW,WAAW,EAAE;AAAA,IACzF;AAAA,MACE,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,WAAW,UAAU,YAAY,gBAAgB;AAAA,IACvE;AAAA,EACF;AAEA,aAAW,EAAE,SAAS,SAAS,KAAK,eAAe;AACjD,QAAI,SAAS,KAAK,CAAC,YAAY,cAAc,SAAS,OAAO,CAAC,EAAG,QAAO;AAAA,EAC1E;AAEA,SAAO;AACT;AAEA,eAAe,iBAAiB,SAAyC;AACvE,QAAM,YAAY,SAAS,MAAM;AAEjC,MAAI;AACF,UAAM,eAAe,YAAY,UAAU;AAC3C,UAAM,EAAE,OAAO,IAAI,MAAM,UAAU,GAAG,YAAY,IAAI,OAAO,EAAE;AAC/D,UAAM,WAAW,OAAO,KAAK;AAC7B,QAAI,CAAC,SAAU,QAAO;AAEtB,QAAI,UAAW,QAAO;AAEtB,QAAI;AACF,YAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,UAAU,gBAAgB,QAAQ,GAAG;AACxE,aAAO,SAAS,KAAK,KAAK;AAAA,IAC5B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,mBAAmB,aAAqB;AACrD,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,MAAM,UAAU,yBAAyB,WAAW,EAAE;AACzE,WAAO,OAAO,SAAS,WAAW;AAAA,EACpC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,iBAAiB,aAA6C;AAC3E,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,MAAM,UAAU,YAAY,WAAW,UAAU;AACpE,WAAO,OAAO,KAAK;AAAA,EACrB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,gBAAgC,aAAqB;AAC1E,SAAO;AAAA,IACL,CAAC,eAAkB,GAAG,iBAAiB,WAAW;AAAA,IAClD,CAAC,iBAAmB,GAAG,kBAAkB,WAAW;AAAA,IACpD,CAAC,iBAAmB,GAAG,uBAAuB,WAAW;AAAA,EAC3D,EAAE,cAAc;AAClB;;;AJxHA,IAAM,iBAAiB;AACvB,IAAM,0BAA0B,CAAC,cAAc,WAAW,YAAY,MAAM,IAAI;AAChF,IAAM,sBAAsB;AAqCrB,IAAM,uBAAuB,OAAiB;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,eAAe,QAAQ;AAAA,EACvB,UAAU;AACZ,MAA6C;AAC3C,QAAM,UAAU,KAAK,sBAAsB,GAAG,EAC3C,IAAI,OAAO,EACX,KAAK,OAAO,EACZ,YAAY,WAAW,EACvB,QAAQ,OAAO;AAElB,8BAA4B,OAAO;AACnC,wBAAsB,SAAS,SAAS,YAAY;AAEpD,QAAM,qBAAqB,MAAM,iCAA2C;AAAA,IAC1E;AAAA,IACA,aAAa,eAAe,mBAAmB,aAAa;AAAA,IAC5D;AAAA,IACA;AAAA,EACF,CAAC;AACD,wBAAsB,SAAS,EAAE,UAAU,aAAa,eAAe,SAAS,QAAQ,CAAC;AACzF,4BAA0B,SAAS,EAAE,SAAS,CAAC;AAC/C,qBAAmB,SAAS;AAAA,IAC1B;AAAA,IACA,UAAU;AAAA,MACR,GAAG;AAAA,MACH,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aAAa,UAAU,eAAe,OAAO;AAAA,MAC/C,CAAC;AAAA,MACD,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IACA;AAAA,IACA,UAAU,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,WAAW,OAAO,KAAK,CAAC,CAAC;AAAA,IACnF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,wCAAwC,CACnD,SACA,aACA,UAAwD,CAAC,MACtD;AACH,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,QAAQ,QAAQ,SAAS,QAAQ;AAEvC,aAAW,CAAC,MAAM,WAAW,KAAK,eAAe,WAAW,GAAG;AAC7D,YAAQ,QAAQ,MAAM,YAAY,IAAI,CAAC,EAAE,OAAO,MAAM;AACpD,YAAM,UAAU,QAAQ,OAAO,CAAC,IAAI,IAAI,YAAY;AACpD,YAAM,EAAE;AACR,YAAM,uBAAuB,YAAY,KAAK,IAAI,CAAC,EAAE;AAAA,IACvD,CAAC;AAAA,EACH;AACF;AAEO,IAAM,mCAAmC,OAAiB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyD;AACvD,QAAM,UAAU,MAAM,mBAAmB,WAAW;AACpD,QAAM,cAAc,8BAA8B,OAAO;AACzD,wCAAsC,SAAS,WAAW;AAE1D,QAAM,WAAW;AAAA,IAAgD;AAAA,IAAS,CAAC,OAAO,UAChF,uBAAuB,KAAK;AAAA,EAC9B;AAEA,aAAW,WAAW,SAAS,KAAK,eAAe,GAAG;AACpD,YAAQ,IAAI,SAAS,EAAE,SAAS,WAAW,CAAC;AAAA,EAC9C;AAEA,SAAO;AACT;AAEO,IAAM,wBAAwB,MAAM;AACzC,QAAMC,WAAU,cAAc,YAAY,GAAG;AAC7C,QAAM,SAASA,SAAQ,eAAe;AACtC,SAAO,OAAO;AAChB;AAEA,IAAM,8BAA8B,CAAC,YAA4B;AAC/D,aAAW,UAAU,yBAAyB;AAC5C,YAAQ,oBAAoB,MAAM;AAAA,EACpC;AACF;AAEA,IAAM,wBAAwB,CAC5B,SACA,SACA,iBACG;AACH,UAAQ,OAAO,gBAAgB,gBAAgB;AAAA,IAC7C,QAAQ;AAAA,IACR,QAAQ,MAAM;AACZ,mBAAa,OAAO;AACpB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,IAAM,qBAAqB,CAAC,kBAC1BC,MAAK,QAAQ,cAAc,aAAa,CAAC,GAAG,oBAAoB;AAElE,IAAM,kBAAkB,CAAC,MAA4B,UAAgC;AACnF,QAAM,WAAW,KAAK,UAAU,QAAQ;AACxC,QAAM,YAAY,MAAM,UAAU,QAAQ;AAC1C,QAAM,YAAY,KAAK,UAAU;AACjC,QAAM,aAAa,MAAM,UAAU;AACnC,MAAI,cAAc,UAAa,eAAe,QAAW;AACvD,YAAQ,aAAa,OAAO,qBAAqB,cAAc,OAAO;AAAA,EACxE;AACA,SAAO,SAAS,cAAc,SAAS;AACzC;AAEA,IAAM,2BAA2B,CAAC,SAAiB,GAAG,IAAI;AAE1D,IAAM,iBAAiB,CAAC,gBAA8C;AACpE,QAAM,SAAS,oBAAI,IAAsB;AACzC,QAAM,eAAe,IAAI,IAAI,YAAY,IAAI,CAAC,eAAe,WAAW,IAAI,CAAC;AAE7E,aAAW,cAAc,aAAa;AACpC,UAAM,CAAC,QAAQ,UAAU,IAAI,WAAW,KAAK,MAAM,GAAG;AACtD,UAAM,4BAA4B,UAAU,cAAc,CAAC,aAAa,IAAI,MAAM;AAClF,QAAI,CAAC,0BAA2B;AAChC,WAAO,IAAI,QAAQ,CAAC,GAAI,OAAO,IAAI,MAAM,KAAK,CAAC,GAAI,UAAU,CAAC;AAAA,EAChE;AAEA,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAClF;;;AKtMA,SAAS,YAAY,oBAAoB;AACzC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,iBAAAC,sBAAqB;AAE9B,IAAM,oBAAoB;AAC1B,IAAM,wBAAwB;AAcvB,IAAM,cAAc,CAAC,kBAA0B;AACpD,QAAM,WAAWF,SAAQE,eAAc,aAAa,CAAC;AAErD,SAAO,gBAAgB,QAAQ;AACjC;AAEO,IAAM,kBAAkB,CAAC,eAAoC;AAClE,SAAO,KAAK;AAAA,IACV,aAAaD,MAAK,YAAY,iBAAiB,GAAG,qBAAqB;AAAA,EACzE;AACF;AAEO,IAAM,mBAAmB,CAAC,SAAkB;AACjD,QAAM,cAAc,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE;AAE1C,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAC,SAC/B,iBAAiB,IAAI,EAAE,WAAW,KAAK,GAAG,EAAE,YAAY;AAEnD,IAAM,kBAAkB,CAAC,YAAoB,gBAA8C;AAChG,QAAM,CAAC,aAAa,OAAO,IAAI,OAAO,QAAQ,YAAY,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAE5E,MAAI,CAAC,eAAe,CAAC,SAAS;AAC5B,UAAM,IAAI,MAAM,kBAAkBA,MAAK,YAAY,iBAAiB,CAAC,EAAE;AAAA,EACzE;AAEA,SAAO,EAAE,SAAS,YAAY;AAChC;AAEA,SAAS,gBAAgB,UAA0B;AACjD,QAAM,kBAAkBA,MAAK,UAAU,iBAAiB;AACxD,MAAI,WAAW,eAAe,EAAG,QAAO;AAExC,QAAM,YAAYD,SAAQ,QAAQ;AAClC,MAAI,cAAc,SAAU,OAAM,IAAI,MAAM,WAAW,iBAAiB,EAAE;AAE1E,SAAO,gBAAgB,SAAS;AAClC;;;ACrCO,IAAM,yBAAyB,CACpC,eACA,UAAyC,CAAC,MACf;AAC3B,QAAM,aAAa,YAAY,aAAa;AAC5C,QAAM,cAAc,gBAAgB,UAAU;AAC9C,QAAM,cAAc,iBAAiB,YAAY,IAAI;AACrD,QAAM,EAAE,YAAY,IAAI,gBAAgB,YAAY,WAAW;AAE/D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU,OAAO,KAAK,YAAY,OAAO,CAAC,CAAC;AAAA,IAC3C,aAAa,YAAY;AAAA,IACzB,YAAY,GAAG,iBAAiB,WAAW,CAAC,GAAG,uBAAuB;AAAA,IACtE,WAAW;AAAA,IACX,eAAe,cAAc,aAAa,QAAQ,eAAe;AAAA,IACjE;AAAA,IACA;AAAA,IACA,SAAS,YAAY;AAAA,EACvB;AACF;AAEA,IAAM,gBAAgB,CAAC,aAAqB,WAC1C,SAAS,GAAG,MAAM,IAAI,WAAW,KAAK;;;AChDxC,SAAS,oBAAoB;AAC7B,SAAS,iBAAAG,gBAAe,iBAAAC,sBAAqB;AAStC,IAAM,gBAAgB,CAC3B,WACG;AACH,QAAM,aAAa,QAAQ,IAAI,OAAO,UAAU;AAEhD,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAEA,SAAO,OAAO;AAChB;AAEO,IAAM,cAAc,CAAC,kBAA0B;AACpD,MAAI,CAAC,QAAQ,KAAK,CAAC,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,aAAa,QAAQ,KAAK,CAAC,CAAC,MAAM,aAAaD,eAAc,aAAa,CAAC;AAAA,EACpF,QAAQ;AACN,WAAO,kBAAkBC,eAAc,QAAQ,KAAK,CAAC,CAAC,EAAE;AAAA,EAC1D;AACF;;;ACHO,IAAM,kBAAkB,CAAC,WAAsC;AACpE,MAAI;AACJ,MAAI;AAEJ,QAAM,aAAa,YAAqC;AACtD,UAAM,UAAU,cAAc,MAAM;AACpC,UAAM,sBAAsB,CAAC,mBAAmB,uBAAuB;AAEvE,QAAI,qBAAqB;AACvB,YAAM,UAAU,MAAM,OAAO,cAAc,OAAO;AAClD,wBAAkB;AAClB,2BAAqB;AAErB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM;AACrD,QAAI;AACF,YAAM,UAAU,MAAM,WAAW;AACjC,UAAI,oBAAoB,IAAI,GAAG;AAC7B,cAAM,iBAAiB,OAAO;AAC9B,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,MAAM,QAAQ,IAAI,IAAI;AACrC,aAAO,OAAO,WAAW,YAAY,SAAS,IAAI,SAAS;AAAA,IAC7D,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,cAAQ,IAAI,UAAU,OAAO,EAAE;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,EAAE,aAAa,MAAM,YAAY,OAAO,aAAa,GAAG,OAAO;AACxE;AAEO,IAAM,gCAAgC,CAAW;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsD;AACpD,QAAM,WAAW,uBAAuB,aAAa;AAErD,SAAO,uBAAuB;AAAA,IAC5B,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,SAAS;AAAA,IACvC,gBAAgB,kBAAkB,SAAS;AAAA,IAC3C,aAAa,QAAQ,eAAe,SAAS,eAAe,SAAS;AAAA,IACrE,YAAY,cAAc,SAAS;AAAA,IACnC;AAAA,IACA,UAAU,QAAQ,IAAI,cAAc,SAAS,UAAU,MAAM;AAAA,IAC7D,aAAa,SAAS;AAAA,IACtB,SAAS,QAAQ,WAAW,SAAS;AAAA,EACvC,CAAC;AACH;AAEO,IAAM,yBAAyB,CAAW;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,SAAO,gBAAgB;AAAA,IACrB,eAAe,CAAC,YACd,qBAAqB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACxHA,SAAS,KAAAC,UAAS;;;ACAX,IAAM,6BAA6B;AACnC,IAAM,6BAA6B;AACnC,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAClC,IAAM,0BAA0B;AAChC,IAAM,mBAAmB;AACzB,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB;AACzB,IAAM,wBAAwB;AAC9B,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAC/B,IAAMC,uBAAsB;AAC5B,IAAM,2BAA2B;AACjC,IAAM,+BAA+B;AACrC,IAAM,qBAAqB,CAAC,SAAS,WAAW,SAAS,UAAU,UAAU;AAC7E,IAAM,cAAc,CAAC,cAAc,eAAe;AAClD,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,4BAA4B;AAClC,IAAM,sCAAsC;AAC5C,IAAM,4BAA4B;;;ACnBlC,IAAM,iBAAiB,CAAC,cAAsB,eAAmC;AACtF,MAAI,eAAe,cAAc;AAC/B,qBAAiB,UAAU;AAAA,EAC7B;AACF;AAEO,IAAM,mBAAmB,CAAC,SAAoC;AACnE,QAAM,IAAI,MAAM,iBAAiB,QAAQC,oBAAmB,EAAE;AAChE;;;ACEO,IAAM,aAAa,CAAC,QAAiB,cAAsB;AAChE,QAAM,WAAW,eAAe,MAAM;AACtC,QAAM,OAAO,SAAS;AACtB,QAAM,oBAAoB;AAAA,IACxB,QAAQ;AAAA,IACR,UAAU,gBAAgB,MAAM,WAAW,SAAS,QAAQ;AAAA,IAC5D;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,uBAAuB,MAAM,KAAK,UAAU,mBAAmB,MAAM,CAAC,EAAE,CAAC;AAAA,EAC7F;AACF;AAEO,IAAM,kBAAkB,CAAC,QAAiB,YAAY,KAAK,IAAI,MAAM;AAC1E,QAAM,UAAU,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM;AACxE,QAAM,oBAAoB;AAAA,IACxB,QAAQ;AAAA,IACR,UAAU,EAAE,WAAW,UAAU,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE;AAAA,IAC/D,OAAO,EAAE,QAAQ;AAAA,EACnB;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,uBAAuB,MAAM,KAAK,UAAU,mBAAmB,MAAM,CAAC,EAAE,CAAC;AAAA,EAC7F;AACF;AAEO,IAAM,yBAAyB,CAAC,MAAe,YAA+B;AACnF,QAAM,MAAM,QAAQ;AACpB,MAAI,CAAC,yBAAyB,GAAG,KAAK,IAAI,UAAU;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,YAAY,IAAI,KAAK,QAAQ,IAAI,KAAK;AACxD,SAAO,EAAE,SAAS,WAAW,SAAS,WAAW,WAAW,SAAS,EAAE;AACzE;AAEA,IAAM,kBAAkB,CACtB,MACA,WACA,aACG;AACH,QAAM,UAAU;AAAA,IACd,OAAO,QAAQ,IAAI;AAAA,IACnB,WAAW,UAAU,SAAS;AAAA,IAC9B,QAAQ,CAAC;AAAA,IACT,YAAY,SAAS,IAAI;AAAA,IACzB,WAAW,YAAY,IAAI;AAAA,IAC3B,GAAG;AAAA,EACL;AAEA,SAAO,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,CAAC;AAC9F;AAEA,IAAM,iBAAiB,CAAC,WAAuC;AAC7D,MACE,SAAS,MAAM,KACf,4BAA4B,UAC5B,gCAAgC,QAChC;AACA,WAAO;AAAA,MACL,MAAM,OAAO,wBAAwB;AAAA,MACrC,UAAU,SAAS,OAAO,4BAA4B,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,OAAO;AACxB;AAEA,IAAM,WAAW,CAAC,UAAoB,SAAS,KAAK,IAAI,QAAQ;AAEhE,IAAM,YAAY,CAAC,cAAsB,KAAK,IAAI,IAAI;AAEtD,IAAM,UAAU,CAAC,SAAkB;AACjC,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO;AAC5B,SAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,YAAY,IAAI;AACvE;AAEA,IAAM,cAAc,CAAC,SAAkB;AACrC,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO,KAAK;AACrC,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO;AAE5B,QAAM,OAAO,mBAAmB,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,KAAK,MAAM,OAAO;AAC1E,SAAO,OAAO,KAAK,SAAS;AAC9B;AAEA,IAAM,WAAW,CAAC,SAAkB;AAClC,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO;AAC5B,QAAM,SAAS,YAAY,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ;AAC5F,SAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAEA,IAAM,WAAW,CAAC,UAChB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;;;AC/F9D,IAAM,iCAAiC,CAAC,UAAmD;AAChG,QAAM,MAAM,MAAM,QAAQ;AAC1B,MAAI,CAAC,6BAA6B,GAAG,EAAG,QAAO,CAAC;AAEhD,QAAM,aAAa,mBAAmB,IAAI,WAAW;AAErD,SAAO;AAAA,IACL;AAAA,MACE,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf;AAAA,MACA,UAAU,IAAI,YAAY;AAAA,MAC1B,MAAM,MAAM,QAAQ;AAAA,MACpB,aAAa,IAAI;AAAA,IACnB;AAAA,EACF;AACF;AAEO,IAAM,iCAAiC,CAC5C,WAC2B;AAAA,EAC3B,KAAK,MAAM;AAAA,EACX,MAAM,MAAM;AAAA,EACZ,aAAa,MAAM,QAAQ;AAAA,EAC3B,UAAU,MAAM;AAClB;AAEO,IAAM,yCAAyC,CACpD,WACmC;AAAA,EACnC,aAAa,MAAM;AAAA,EACnB,MAAM,MAAM;AAAA,EACZ,aAAa,MAAM,QAAQ;AAAA,EAC3B,UAAU,MAAM;AAClB;AAEO,IAAM,uBAAuB,CAAC,OAA6B,QAA4B;AAC5F,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,SAAS,MAAM,YAAY,MAAM,GAAG,EAAE,CAAC,KAAK;AAClD,MAAI,CAAC,IAAI,WAAW,MAAM,EAAG,QAAO;AAEpC,QAAM,SAAS,IAAI,MAAM,OAAO,MAAM,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,kBAAkB;AACzF,MAAI,OAAO,WAAW,MAAM,WAAW,OAAQ,QAAO;AAEtD,SAAO,OAAO;AAAA,IACZ,MAAM,WAAW,IAAI,CAAC,WAAW,UAAU,CAAC,WAAW,OAAO,KAAK,KAAK,EAAE,CAAC;AAAA,EAC7E;AACF;AAEO,IAAM,qBAAqB,CAAC,QAAgB,mBAAmB,GAAG,EAAE,SAAS;AAE7E,IAAM,iBAAiB,CAAC,QAAiB,SAAkB;AAChE,QAAM,eAAe;AACrB,SAAO;AAAA,IACL,UAAU;AAAA,MACR;AAAA,QACE,KAAK,aAAa,OAAO;AAAA,QACzB,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,qBAAqB,CAAC,gBAC1B,CAAC,GAAG,YAAY,SAAS,cAAc,CAAC,EAAE,QAAQ,CAAC,UAAU;AAC3D,QAAM,YAAY,MAAM,CAAC;AACzB,SAAO,YAAY,CAAC,SAAS,IAAI,CAAC;AACpC,CAAC;;;AC/EH,SAAuB,KAAAC,UAAS;AAGzB,IAAM,sBAAsB,CAAC,gBAAyB;AAAA,EAC3D,MAAM;AAAA,EACN,YAAY;AAAA,IACV,MAAMC,GAAE,aAAa,UAAU;AAAA,IAC/B,UAAU;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,SAAS;AAAA,QACxB,WAAW,EAAE,MAAM,SAAS;AAAA,QAC5B,SAAS,EAAE,MAAM,SAAS;AAAA,QAC1B,QAAQ,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,QACnD,SAAS,EAAE,MAAM,SAAS;AAAA,QAC1B,YAAY,EAAE,MAAM,SAAS;AAAA,QAC7B,WAAW,EAAE,MAAM,SAAS;AAAA,QAC5B,SAAS,EAAE,MAAM,SAAS;AAAA,MAC5B;AAAA,MACA,UAAU,CAAC,aAAa,QAAQ;AAAA,MAChC,sBAAsB;AAAA,IACxB;AAAA,IACA,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,sBAAsB,gBAAgB,EAAE;AAAA,EAC3E;AAAA,EACA,UAAU,CAAC,QAAQ,YAAY,QAAQ;AAAA,EACvC,sBAAsB;AACxB;AAEO,IAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,YAAY,CAAC;AAAA,EACb,UAAU,CAAC;AAAA,EACX,sBAAsB;AACxB;;;ALlBO,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAAyC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,wBAAwB,CAAC,OAAwB,YAAqB;AAAA,EACjF,MAAM,yBAAyB,MAAM,QAAQ,MAAM,MAAM;AAAA,EACzD,aAAa,MAAM,QAAQ;AAAA,EAC3B,aAAaC,GAAE,aAAa,MAAM,WAAW;AAAA,EAC7C,cAAc,oBAAoB,MAAM,YAAY;AAAA,EACpD,aAAa,sBAAsB,MAAM,OAAO;AAClD;AAEO,IAAM,2BAA2B,CAAC,MAAc,WAAoB;AACzE,QAAM,WAAW,KAAK,WAAW,wBAAwB,mBAAmB;AAC5E,SAAO,SAAS,GAAG,MAAM,IAAI,QAAQ,KAAK;AAC5C;AAEO,IAAM,yBAAyB,CAAC,EAAE,QAAQ,OAAO,MAAqC;AAC3F,QAAM,YAAY,OAAO,OAAO,CAAC,UAAU,MAAM,QAAQ,GAAG;AAC5D,QAAM,aAAa,UAAU,OAAO,CAAC,UAAU,yBAAyB,MAAM,QAAQ,GAAG,CAAC;AAC1F,QAAM,iBAAiB,UAAU,QAAQ,8BAA8B;AAEvE,SAAO;AAAA,IACL,OAAO,WAAW,IAAI,CAAC,UAAU,sBAAsB,OAAO,MAAM,CAAC;AAAA,IACrE,WAAW,eACR,OAAO,CAAC,UAAU,CAAC,mBAAmB,MAAM,WAAW,CAAC,EACxD,IAAI,8BAA8B;AAAA,IACrC,mBAAmB,eAChB,OAAO,CAAC,UAAU,mBAAmB,MAAM,WAAW,CAAC,EACvD,IAAI,sCAAsC;AAAA,IAC7C,UAAU,OAAO,WAAoB;AACnC,YAAM,WAAW;AACjB,YAAM,QAAQ,WAAW;AAAA,QACvB,CAAC,cAAc,SAAS,SAAS,yBAAyB,UAAU,QAAQ,MAAM,MAAM;AAAA,MAC1F;AAEA,UAAI,CAAC,OAAO;AACV,eAAO,iBAAiB,SAAS,IAAI;AAAA,MACvC;AAEA,YAAM,QAAQ,MAAM,YAAY,MAAM,SAAS,aAAa,CAAC,CAAC;AAC9D,YAAM,OAAO,MAAM,aAAa,MAAM,MAAM,MAAM,QAAQ,KAAgC,CAAC;AAE3F,aAAO,EAAE,MAAM,UAAU,uBAAuB,MAAM,MAAM,OAAO,EAAE;AAAA,IACvE;AAAA,IACA,cAAc,OAAO,WAAoB;AACvC,YAAM,eAAe;AACrB,YAAM,aAAa,eAChB,IAAI,CAAC,WAAW,EAAE,OAAO,qBAAqB,OAAO,aAAa,GAAG,GAAG,MAAM,EAAE,EAChF,KAAK,CAAC,cAAc,UAAU,UAAU,MAAS;AAEpD,UAAI,CAAC,YAAY,OAAO;AACtB,cAAM,IAAI,MAAM,qBAAqB,aAAa,OAAOC,oBAAmB,EAAE;AAAA,MAChF;AAEA,aAAO,WAAW,MAAM,QAAQ,aAAa;AAAA,QAC3C,MAAM,WAAW,MAAM,QAAQ,WAAW,KAAK;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,wBAAwB,CAAC,YAA+B;AAC5D,QAAM,MAAM,QAAQ;AACpB,MAAI,CAAC,yBAAyB,GAAG,EAAG,QAAO;AAE3C,SAAO;AAAA,IACL,cAAc,IAAI;AAAA,IAClB,iBAAiB,IAAI;AAAA,IACrB,gBAAgB,IAAI;AAAA,IACpB,eAAe,IAAI;AAAA,IACnB,sBAAsB,IAAI;AAAA,IAC1B,aAAa,IAAI;AAAA,EACnB;AACF;;;AMhBO,SAAS,sBAKd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEmF;AACjF,QAAM,aAAa,CAAC,EAAE,MAAM,QAAQ,MAClC,SAAS,YAAY,MAAM,mBAAmB,UAAU,MAAM,OAAO,CAAC;AAExE,QAAM,MAAM,OAAO,OAA8B,YAAuB;AACtE,QAAI,YAAY,QAAW;AACzB,aAAQ,QAAyE,KAAK;AAAA,IACxF;AAEA,WACE,QACA,SAAS,KAAK;AAAA,EAClB;AAEA,SAAO;AAAA,IACL;AAAA,IACA,KAAK,CAAC,SAAkB,YAAgD;AACtE,sBAAgB,SAAS,QAAQ,EAAE,OAAO,OAAO,EAAE,MAAM,QAAQ,MAAM;AACrE,cAAM,QAAQ,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,cAAM,aAAa,SAAS;AAC5B,cAAM,kBAAkB,aAAa,MAAM,WAAW,IAAI;AAC1D,cAAM,SAAS,MAAM,IAAI,OAAO,eAAe;AAE/C,cAAM,QAAQ,QAAQ,OAAO,eAAe;AAC5C,eAAO,OAAO,WAAW,WAAW,SAAS;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,IACA;AAAA,IACA,KAAK,CAAC,eACJ,sBAAsB;AAAA,MACpB,SAAS;AAAA,MACT,aAAa,SAAS;AAAA,MACtB,cAAc,SAAS;AAAA,MACvB,SAAS,OAAO,SACd,IAAI,MAA+B,aAAa,MAAM,WAAW,IAAI,MAAS;AAAA,IAClF,CAAC;AAAA,EACL;AACF;;;ACjIA,SAAS,gBAAAC,eAAc,qBAAqB;AAC5C,SAAS,QAAAC,aAAY;AAad,IAAM,4BAA4B,OAAO;AAAA,EAC9C;AAAA,EACA,qBAAqB,CAAC;AAAA,EACtB,cAAcC,MAAK,QAAQ,IAAI,GAAG,OAAO,UAAU;AAAA,EACnD,aAAa;AAAA,EACb,aAAa;AACf,MAAwC;AACtC,QAAM,SAASC,cAAa,YAAY,MAAM;AAC9C,QAAM,2BAA2B;AAAA,IAC/B,MAAM,mBAAmB,WAAW;AAAA,EACtC;AACA,QAAM,YAAY;AAAA,IAChB,CAAC,GAAG,oBAAoB,GAAG,wBAAwB;AAAA,IACnD;AAAA,EACF;AACA,gBAAc,YAAY,cAAc,QAAQ,YAAY,SAAS,GAAG,MAAM;AAChF;AAEO,IAAM,oBAAoB,CAAC,UAAwC,YAAoB;AAC5F,QAAM,kBAAkB,SAAS,OAAOC,iBAAgB,EAAE,KAAK,WAAW;AAC1E,QAAM,SAAS,CAAC,GAAGC,gBAAe,eAAe,CAAC,EAAE;AAAA,IAAI,CAAC,CAAC,QAAQ,WAAW,MAC3E,kBAAkB,QAAQ,aAAa,OAAO;AAAA,EAChD;AACA,QAAM,qBAAqB,gBAAgB,OAAO,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,GAAG,CAAC;AAC1F,MAAI,mBAAmB,SAAS,EAAG,QAAO,KAAK,iBAAiB,oBAAoB,OAAO,CAAC;AAE5F,QAAM,QAAQ,OAAO;AAAA,IAAQ,CAAC,cAAc,UAC1C,UAAU,IAAI,eAAe,CAAC,IAAI,GAAG,YAAY;AAAA,EACnD;AACA,SAAO,CAAC,SAAS,GAAG,OAAO,KAAK,EAAE,KAAK,IAAI;AAC7C;AAEA,IAAMD,oBAAmB,CAAC,YAA+B,QAAQ,QAAQ,YAAY;AAErF,IAAM,cAAc,CAAC,MAAyB,WAC3C,KAAK,SAAS,MAAM,MAAM,SAAS,MAAM,KAAK,KAAK,cAAc,MAAM,IAAI;AAE9E,IAAMC,kBAAiB,CAAC,aAA2C;AACjE,QAAM,SAAS,oBAAI,IAAiC;AACpD,aAAW,WAAW,UAAU;AAC9B,UAAM,CAAC,QAAQ,UAAU,IAAI,QAAQ,KAAK,MAAM,GAAG;AACnD,QAAI,CAAC,UAAU,CAAC,WAAY;AAC5B,WAAO,IAAI,QAAQ,CAAC,GAAI,OAAO,IAAI,MAAM,KAAK,CAAC,GAAI,OAAO,CAAC;AAAA,EAC7D;AACA,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAClF;AAEA,IAAM,oBAAoB,CACxB,QACA,UACA,YACG,CAAC,KAAK,MAAM,aAAa,GAAG,SAAS,QAAQ,CAAC,YAAY,YAAY,SAAS,OAAO,CAAC,CAAC;AAE7F,IAAM,mBAAmB,CAAC,UAAwC,YAAoB;AAAA,EACpF;AAAA,EACA,GAAG,SAAS,QAAQ,CAAC,YAAY,YAAY,SAAS,OAAO,CAAC;AAChE;AAEA,IAAM,cAAc,CAAC,SAA4B,YAAoB;AAAA,EACnE,GAAG,OAAO,IAAI,QAAQ,IAAI,GAAG,YAAY,OAAO,CAAC;AACnD;AAEA,IAAM,cAAc,CAAC,YAA+B;AAClD,QAAM,OAAO,QAAQ,WAAW,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC;AAC/D,QAAM,UAAU,QAAQ,SAAS,IAAI,CAAC,WAAW,YAAY,MAAM,CAAC,KAAK,CAAC;AAC1E,QAAM,QAAQ,CAAC,GAAG,MAAM,GAAG,OAAO;AAClC,SAAO,MAAM,SAAS,IAAI,IAAI,MAAM,KAAK,GAAG,CAAC,KAAK;AACpD;AAEA,IAAM,cAAc,CAAC,WAA8D;AACjF,QAAM,WAAW,OAAO,QAAQ,sBAAsB,MAAM,IAAI,KAAK,OAAO,IAAI;AAChF,SAAO,OAAO,QAAQ,WAAW,WAAW,IAAI,QAAQ;AAC1D;AAEA,IAAM,gBAAgB,CAAC,QAAgB,YAAoB,gBAAwB;AACjF,QAAM,cAAc,kBAAkB,UAAU;AAChD,QAAM,YAAY,mBAAmB,UAAU;AAC/C,QAAM,mBACJ,iBAAiB,QAAQ,WAAW,MAAM,KAAK,iBAAiB,QAAQ,SAAS,MAAM;AACzF,MAAI,CAAC,iBAAkB,OAAM,IAAI,MAAM,GAAG,kBAAkB,aAAa,SAAS,CAAC,EAAE;AAErF,QAAM,SAAS,OAAO,MAAM,GAAG,OAAO,QAAQ,WAAW,IAAI,YAAY,MAAM;AAC/E,QAAM,QAAQ,OAAO,MAAM,OAAO,QAAQ,SAAS,CAAC;AACpD,SAAO,GAAG,MAAM;AAAA,EAAK,WAAW;AAAA,EAAK,KAAK;AAC5C;AAEA,IAAM,oBAAoB,CAAC,aAAqB,cAC9C,2BAA2B,WAAW,YAAY,SAAS;AAE7D,IAAM,mBAAmB,CAAC,QAAgB,UAAkB,OAAO,MAAM,KAAK,EAAE,SAAS;;;ACvGzF,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,iBAAAC,sBAAqB;;;ACD9B,SAAS,uBAAuB;AAyBzB,IAAM,4BAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,MAAwC;AACtC,SAAO,gBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,OAAO,CAAC,IAAI;AAAA,IACZ,UAAU,CAAC,WAAW;AACpB,YAAM,WAAW;AACjB,qBAAe,KAAK,MAAM,SAAS,IAAI;AACvC,aAAO,SAAS,SAAS,aAAa,CAAC,CAAC;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;AAEO,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,YAAY,CAAC;AAAA,EACb,oBAAoB,CAAC;AAAA,EACrB;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,OAAO,CAAC,YAAqB;AACjC,YAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AAAA,EACrD;AAEA,QAAM,SAAS,CAAC,IAA0B,UAAmB;AAC3D,SAAK,EAAE,SAAS,kBAAkB,IAAI,QAAQ,MAAM,CAAC;AAAA,EACvD;AAEA,QAAM,QAAQ,CAAC,IAA0B,MAAc,YAAoB;AACzE,SAAK,EAAE,SAAS,kBAAkB,IAAI,OAAO,EAAE,MAAM,QAAQ,EAAE,CAAC;AAAA,EAClE;AAEA,QAAM,gBAAgB,OAAO,YAA4B;AACvD,QAAI,QAAQ,WAAW,uBAAuB;AAC5C,aAAO,QAAQ,IAAI;AAAA,QACjB,iBAAiB;AAAA,QACjB,cAAc,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,QACzC,YAAY,EAAE,MAAM,SAAS,2BAA2B;AAAA,MAC1D,CAAC;AACD;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,uBAAuB;AAC5C,aAAO,QAAQ,IAAI,EAAE,MAAM,CAAC;AAC5B;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,2BAA2B;AAChD,aAAO,QAAQ,IAAI,EAAE,UAAU,CAAC;AAChC;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,qCAAqC;AAC1D,aAAO,QAAQ,IAAI,EAAE,kBAAkB,CAAC;AACxC;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,2BAA2B;AAChD,UAAI,CAAC,cAAc;AACjB;AAAA,UACE,QAAQ;AAAA,UACR;AAAA,UACA,qBAAqB,yBAAyB;AAAA,QAChD;AACA;AAAA,MACF;AAEA,YAAM,YAAY,KAAK,IAAI;AAC3B,UAAI;AACF,eAAO,QAAQ,IAAI,eAAe,QAAQ,QAAQ,MAAM,aAAa,QAAQ,MAAM,CAAC,CAAC;AAAA,MACvF,SAAS,QAAQ;AACf,eAAO,QAAQ,IAAI,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACvD;AACA;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,uBAAuB;AAC5C,YAAM,YAAY,KAAK,IAAI;AAC3B,UAAI;AACF,eAAO,QAAQ,IAAI,WAAW,MAAM,SAAS,QAAQ,MAAM,GAAG,SAAS,CAAC;AAAA,MAC1E,SAAS,QAAQ;AACf,eAAO,QAAQ,IAAI,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACvD;AACA;AAAA,IACF;AAEA,QAAI,QAAQ,OAAO,QAAW;AAC5B;AAAA,QACE,QAAQ;AAAA,QACR;AAAA,QACA,qBAAqB,QAAQ,UAAUC,oBAAmB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,YAAY;AACjB,YAAM,QAAQ,gBAAgB,EAAE,OAAO,QAAQ,MAAM,CAAC;AAEtD,uBAAiB,QAAQ,OAAO;AAC9B,YAAI,CAAC,KAAK,KAAK,EAAG;AAElB,YAAI;AACF,gBAAM,cAAc,KAAK,MAAM,IAAI,CAAmB;AAAA,QACxD,SAAS,QAAQ;AACf;AAAA,YACE;AAAA,YACA;AAAA,YACA,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AD5HO,IAAM,uBAAuB,OAClC,aACA,aAAiD,MAAM,WACxB;AAC/B,QAAM,UAAU,MAAM,mBAAmB,WAAW;AACpD,QAAM,YAAY;AAAA,IAAgD;AAAA,IAAS,CAAC,OAAO,UACjF,uBAAuB,KAAK;AAAA,EAC9B,EAAE,QAAQ,CAAC,YAAa,QAAQ,MAAM,CAAC,QAAQ,GAAuC,IAAI,CAAC,CAAE;AAE7F,SAAO,UAAU,IAAI,CAAC,YAAY,QAAQ,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,MAAM,QAAQ,GAAG;AAC5F;AAEO,IAAM,yBAAyB,OAAiB;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+C;AAC7C,QAAM,mBACJ,eAAeC,MAAKC,SAAQC,eAAc,aAAa,CAAC,GAAG,oBAAoB;AACjF,QAAM,EAAE,OAAO,WAAW,mBAAmB,UAAU,aAAa,IAAI,uBAAuB;AAAA,IAC7F;AAAA,IACA,QAAQ,MAAM,qBAAqB,kBAAkB,UAAU;AAAA,EACjE,CAAC;AAED,SAAO,gBAAgB,EAAE,MAAM,OAAO,WAAW,mBAAmB,UAAU,aAAa,CAAC;AAC9F;AAEO,IAAM,wBAAwB,OACnC,YACG;AACH,SAAO,MAAM,uBAAuB,OAAO,GAAG,MAAM;AACtD;AAEO,IAAM,+BAA+B,OAAiB;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsD;AACpD,QAAM,WAAW,uBAAuB,eAAe,EAAE,gBAAgB,CAAC;AAE1E,QAAM,sBAAsB;AAAA,IAC1B,GAAG;AAAA,IACH;AAAA,IACA,MAAM,QAAQ,SAAS;AAAA,IACvB,QAAQ,UAAU,SAAS;AAAA,EAC7B,CAAC;AACH;;;AErEA,SAAS,WAAW,UAAAC,eAAc;AAClC,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,oBAAoB;AAC7B,SAAS,WAAW,QAAQ,iBAAAC,sBAAqB;AACjD,SAAS,eAAe;AACxB,SAAS,QAAAC,aAAY;AAErB,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,cAAc;AACpB,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB,CAAC,UAAU,OAAO,QAAQ;AAClD,IAAM,0BAA0B;AAChC,IAAM,kBAAkB,CAAC,WAAW,WAAW,KAAK;AACpD,IAAM,mBAAmB,CAAC,gBAAgB,MAAM;AAChD,IAAM,UAAU;AAChB,IAAM,kBAAkB;AASjB,IAAM,qBAAqB,CAAC,QAAgB,WAAiC;AAClF,MAAI,QAAQ,aAAa,kBAAkB;AACzC,uBAAmB,QAAQ,MAAM;AACjC;AAAA,EACF;AAEA,mBAAiB,QAAQ,MAAM;AACjC;AAEO,IAAM,YAAY,CAAC,YAAoB;AAC5C,QAAM,WAAW,QAAQ,IAAI,OAAO;AAEpC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,aAAa,kBAAkB;AACzC,WAAO,aAAa,KAAKA,MAAK,QAAQ,GAAG,GAAG,eAAe;AAAA,EAC7D;AAEA,SAAOA,MAAK,QAAQ,GAAG,UAAU,KAAK;AACxC;AAEA,IAAM,mBAAmB,CAAC,QAAgB,WAAiC;AACzE,QAAM,SAASA,MAAK,QAAQ,OAAO,WAAW;AAC9C,SAAO,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC9B,EAAAD,eAAc,QAAQ,aAAa,MAAM,CAAC;AAC1C,YAAU,QAAQ,eAAe;AACnC;AAEA,IAAM,qBAAqB,CAAC,QAAgB,WAAiC;AAC3E,QAAM,SAASC,MAAK,QAAQ,GAAG,OAAO,WAAW,MAAM;AACvD,SAAO,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC9B,EAAAD,eAAc,QAAQ,eAAe,MAAM,CAAC;AAC9C;AAEA,IAAM,eAAe,MAAM;AACzB,MAAI;AACF,WAAO;AAAA,MACL,QAAQ,aAAa,mBAAmB,sBAAsB;AAAA,MAC9D;AAAA,MACA;AAAA,QACE,UAAU;AAAA,QACV,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,MACpC;AAAA,IACF,EAAE,KAAK;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,eAAe,CAAC,WAAiC;AACrD,SAAO;AAAA;AAAA,SAEA,OAAO,kBAAkB,IAAI,OAAO,WAAW;AAAA,OACjD,WAAWC,MAAK,OAAO,YAAY,GAAG,kBAAkB,OAAO,CAAC,CAAC,IAAI,WAAW,OAAO,OAAO,CAAC;AAAA;AAEtG;AAEA,IAAM,iBAAiB,CAAC,WAAiC;AACvD,SAAO;AAAA,OACF,OAAO,kBAAkB,IAAI,OAAO,WAAW;AAAA,GACnDA,MAAK,OAAO,YAAY,GAAG,kBAAkB,eAAe,CAAC,MAAM,OAAO,OAAO;AAAA;AAEpF;AAEA,IAAM,aAAa,CAAC,UAAkB;AACpC,SAAO,IAAI,MAAM,WAAW,KAAK,OAAO,CAAC;AAC3C;;;ADrFA,IAAM,yBAAyB;AAC/B,IAAM,kBAAkB;AAkBjB,IAAM,oBAAoB,CAAC,WAA6B;AAC7D,QAAM,SAAS,UAAU,OAAO,aAAa;AAC7C,YAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AACrC,qBAAmB,QAAQ,MAAM;AACnC;AAEO,IAAM,2BAA2B,CACtC,eACA,YACG;AACH,oBAAkB,wBAAwB,eAAe,OAAO,CAAC;AACnE;AAEO,IAAM,4BAA4B,CACvC,eACA,YACG;AACH,aAAW,eAAe,QAAQ,cAAc;AAC9C,6BAAyB,eAAe,EAAE,YAAY,CAAC;AAAA,EACzD;AACF;AAEO,IAAM,sBAAsB,CACjC,WACG;AACH,QAAM,SAAS,UAAU,OAAO,aAAa;AAE7C,EAAAC,QAAOC,MAAK,QAAQ,OAAO,WAAW,GAAG,EAAE,OAAO,KAAK,CAAC;AACxD,EAAAD,QAAOC,MAAK,QAAQ,GAAG,OAAO,WAAW,MAAM,GAAG,EAAE,OAAO,KAAK,CAAC;AACnE;AAEO,IAAM,6BAA6B,CACxC,eACA,YACG;AACH,QAAM,EAAE,eAAe,YAAY,IAAI,wBAAwB,eAAe,OAAO;AACrF,sBAAoB,EAAE,eAAe,YAAY,CAAC;AACpD;AAEO,IAAM,8BAA8B,CACzC,eACA,YACG;AACH,aAAW,eAAe,QAAQ,cAAc;AAC9C,+BAA2B,eAAe,EAAE,YAAY,CAAC;AAAA,EAC3D;AACF;AAEA,IAAM,0BAA0B,CAC9B,eACA,YACqB;AACrB,QAAM,aAAa,YAAY,aAAa;AAC5C,QAAM,cAAc,gBAAgB,UAAU;AAC9C,QAAM,eAAe,iBAAiB,YAAY,IAAI;AAEtD,SAAO;AAAA,IACL,eAAe,GAAG,YAAY,GAAG,sBAAsB;AAAA,IACvD,SAASA,MAAK,YAAY,eAAe;AAAA,IACzC,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA,oBAAoB,GAAG,YAAY,GAAG,uBAAuB;AAAA,EAC/D;AACF;","names":["z","CompletionShell","program","join","PackageManager","require","join","dirname","join","fileURLToPath","fileURLToPath","pathToFileURL","z","EMPTY_DISPLAY_VALUE","EMPTY_DISPLAY_VALUE","z","z","z","EMPTY_DISPLAY_VALUE","readFileSync","join","join","readFileSync","isVisibleCommand","parentCommands","dirname","join","fileURLToPath","EMPTY_DISPLAY_VALUE","join","dirname","fileURLToPath","rmSync","join","writeFileSync","join","rmSync","join"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/command/runtime-metadata.ts","../src/cli/completion.ts","../src/cli/help.ts","../src/cli/program.ts","../src/command/loader.ts","../src/command/metadata.ts","../src/constants.ts","../src/cli/update.ts","../src/package/json.ts","../src/package/metadata.ts","../src/cli/runtime.ts","../src/cli/runner.ts","../src/mcp/router.ts","../src/mcp/constants.ts","../src/mcp/errors.ts","../src/mcp/progress.ts","../src/mcp/resources.ts","../src/mcp/schema.ts","../src/command/adapters.ts","../src/docs/readme.ts","../src/mcp/command-server.ts","../src/mcp/server.ts","../src/scripts/dev-command.ts","../src/scripts/shims.ts"],"sourcesContent":["export { z } from 'zod';\nexport * from './cli/completion';\nexport * from './cli/help';\nexport * from './cli/program';\nexport * from './cli/runner';\nexport * from './cli/runtime';\nexport * from './cli/update';\nexport * from './command/adapters';\nexport * from './command/loader';\nexport * from './command/metadata';\nexport * from './constants';\nexport * from './docs/readme';\nexport * from './mcp/command-server';\nexport * from './mcp/errors';\nexport * from './mcp/resources';\nexport * from './mcp/router';\nexport * from './mcp/schema';\nexport * from './mcp/server';\nexport * from './mcp/types';\nexport * from './package/json';\nexport * from './package/metadata';\nexport * from './scripts/dev-command';\nexport * from './scripts/shims';\n","import type { Command } from '@caporal/core';\nimport type { CommandDefinition } from './metadata';\n\nconst commandMetadata = new WeakMap<object, CommandDefinition>();\n\nexport const setCommandMetadata = (command: Command, metadata: CommandDefinition) => {\n commandMetadata.set(command as object, metadata);\n};\n\nexport const getCommandMetadata = (command: Command) => commandMetadata.get(command as object);\n","import type { Command, Program } from '@caporal/core';\nimport { getCommandMetadata } from '../command/runtime-metadata';\n\ntype CompletionGroup = {\n description?: string;\n name: string;\n};\n\nenum CompletionShell {\n Bash = 'bash',\n Fish = 'fish',\n Zsh = 'zsh',\n}\n\nconst COMPLETION_COMMAND_NAME = 'completion';\nconst COMPLETION_COMMAND_DESCRIPTION = 'Generate shell completion scripts';\nconst COMPLETION_SHELL_ARGUMENT = '[shell]';\nconst COMPLETION_SHELL_DESCRIPTION = 'Shell to generate completion for';\nconst EMPTY_DISPLAY_VALUE = '<empty>';\nexport type CompletionConfig = {\n binNames?: readonly string[];\n};\n\nconst completionShells = Object.values(CompletionShell);\nconst completionScriptGenerators = {\n [CompletionShell.Bash]: getBashCompletionScript,\n [CompletionShell.Fish]: getFishCompletionScript,\n [CompletionShell.Zsh]: getZshCompletionScript,\n} as const satisfies Record<\n CompletionShell,\n (\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n ) => string\n>;\n\nexport const registerCompletionCommand = (program: Program, config: CompletionConfig = {}) => {\n program\n .command(COMPLETION_COMMAND_NAME, COMPLETION_COMMAND_DESCRIPTION)\n .argument(COMPLETION_SHELL_ARGUMENT, COMPLETION_SHELL_DESCRIPTION)\n .strict(false)\n .action(async ({ args, program }) => {\n const shell = args.shell ? String(args.shell) : '';\n\n if (isCompletionShell(shell)) {\n console.log(await getCompletionScript(program, shell, config));\n return 0;\n }\n\n console.log(`error: unsupported shell '${shell || EMPTY_DISPLAY_VALUE}'`);\n console.log(`supported: ${completionShells.join(', ')}`);\n return 1;\n });\n};\n\nconst isCompletionShell = (value: string): value is CompletionShell => {\n return (completionShells as readonly string[]).includes(value);\n};\n\nconst getCompletionScript = async (\n program: Program,\n shell: CompletionShell,\n config: CompletionConfig,\n) => {\n const binName = program.getBin();\n const binNames = uniqueBinNames([binName, ...(config.binNames ?? [])]);\n const commands = sortCommands(\n (await program.getAllCommands()).filter(\n (command) => command.visible && command.name !== COMPLETION_COMMAND_NAME,\n ),\n );\n const roots = getRootCommands(commands);\n const subcommands = getSubcommandGroups(commands);\n const options = getCommandOptions(commands);\n\n return completionScriptGenerators[shell](binNames, roots, subcommands, options, commands);\n};\n\nfunction getZshCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n return binNames\n .map((binName) => formatZshCompletionScript(binName, roots, subcommands, options, commands))\n .join('\\n\\n');\n}\n\nfunction getBashCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n return binNames\n .map((binName) => formatBashCompletionScript(binName, roots, subcommands, options, commands))\n .join('\\n\\n');\n}\n\nfunction formatZshCompletionScript(\n binName: string,\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const functionName = completionFunctionName(binName);\n\n return `#compdef ${binName}\n\n_${functionName}() {\n local -a commands\n commands=(\n${formatZshItems(roots)}\n )\n${formatSubcommandArrays(subcommands)}\n${formatOptionArrays(options)}\n${formatZshCustomCompletions(binName, commands)}\n\n if [[ \"$words[$CURRENT]\" == -* ]]; then\n local command_key=\"$words[2]\"\n if [[ -n \"$words[3]\" && \"$words[3]\" != -* ]]; then\n command_key=\"$command_key $words[3]\"\n fi\n case \"$command_key\" in\n${formatOptionCases(binName, options)}\n esac\n fi\n\n _arguments -C \\\\\n '1:command:->command' \\\\\n '2:subcommand:->subcommand'\n\n case $state in\n command)\n _describe '${binName} commands' commands\n ;;\n subcommand)\n case $words[2] in\n${formatZshCustomCases(binName, commands)}\n${formatSubcommandCases(binName, subcommands)}\n esac\n ;;\n esac\n}\n\ncompdef _${functionName} ${binName}`;\n}\n\nfunction formatBashCompletionScript(\n binName: string,\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const functionName = `${completionFunctionName(binName)}_completion`;\n\n return `_${functionName}() {\n local cur command_key\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n command_key=\"\\${COMP_WORDS[1]}\"\n if [[ -n \"\\${COMP_WORDS[2]}\" && \"\\${COMP_WORDS[2]}\" != -* ]]; then\n command_key=\"\\${command_key} \\${COMP_WORDS[2]}\"\n fi\n COMPREPLY=()\n\n if [[ \"$cur\" == -* ]]; then\n case \"$command_key\" in\n${formatBashOptionCases(options)}\n esac\n return 0\n fi\n\n case \"$COMP_CWORD\" in\n 1)\n COMPREPLY=($(compgen -W \"${roots.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;\n 2)\n case \"\\${COMP_WORDS[1]}\" in\n${formatBashCustomCases(binName, commands)}\n${formatBashSubcommandCases(subcommands)}\n esac\n ;;\n esac\n}\n\ncomplete -F _${functionName} ${binName}`;\n}\n\nfunction getFishCompletionScript(\n binNames: readonly string[],\n roots: CompletionGroup[],\n subcommands: Map<string, CompletionGroup[]>,\n options: Map<string, CompletionGroup[]>,\n commands: Command[],\n) {\n const rootNames = roots.map((item) => item.name).join(' ');\n\n return `${binNames.map((name) => formatFishFunctions(name, rootNames)).join('\\n')}\n${binNames.map((name) => formatFishCustomFunctions(name, commands)).join('\\n')}\n${binNames.map((name) => `complete -c ${name} -f`).join('\\n')}\n${binNames.map((name) => formatFishRootCompletions(name, roots)).join('\\n')}\n${binNames.map((name) => formatFishSubcommandCompletions(name, subcommands)).join('\\n')}\n${binNames.map((name) => formatFishOptionCompletions(name, options)).join('\\n')}\n${binNames.map((name) => formatFishCustomCompletions(name, commands)).join('\\n')}`;\n}\n\nconst uniqueBinNames = (binNames: readonly string[]) => [...new Set(binNames)];\n\nconst sortCommands = (commands: Command[]) => {\n return [...commands].sort((left, right) => {\n const leftOrder = getCommandMetadata(left)?.order;\n const rightOrder = getCommandMetadata(right)?.order;\n if (leftOrder !== undefined || rightOrder !== undefined) {\n return (leftOrder ?? Number.MAX_SAFE_INTEGER) - (rightOrder ?? Number.MAX_SAFE_INTEGER);\n }\n return left.name.localeCompare(right.name);\n });\n};\n\nconst getRootCommands = (commands: Command[]) => {\n const roots = new Map<string, CompletionGroup>();\n\n for (const command of commands) {\n const parts = command.name.split(' ');\n const root = parts[0];\n\n if (!root || roots.has(root)) {\n continue;\n }\n\n roots.set(root, {\n name: root,\n description: parts.length === 1 ? command.description : `${root} commands`,\n });\n }\n\n return [...roots.values()];\n};\n\nconst getSubcommandGroups = (commands: Command[]) => {\n const groups = new Map<string, CompletionGroup[]>();\n\n for (const command of commands) {\n const [root, subcommand] = command.name.split(' ');\n\n if (!root || !subcommand) {\n continue;\n }\n\n const group = groups.get(root) ?? [];\n\n if (!group.some((item) => item.name === subcommand)) {\n group.push({ name: subcommand, description: command.description });\n }\n\n groups.set(root, group);\n }\n\n return groups;\n};\n\nconst getCommandOptions = (commands: Command[]) => {\n const commandOptions = new Map<string, CompletionGroup[]>();\n\n for (const command of commands) {\n const options = command.options\n .filter((option) => option.visible)\n .flatMap((option) =>\n option.allNotations.map((notation) => ({\n name: notation,\n description: option.description,\n })),\n );\n\n if (options.length > 0) {\n commandOptions.set(command.name, options);\n }\n }\n\n return commandOptions;\n};\n\nconst formatZshItems = (items: CompletionGroup[]) => {\n return items.map((item) => ` '${escapeZshItem(item)}'`).join('\\n');\n};\n\nconst formatSubcommandArrays = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([root, items]) => `\n local -a ${root}_commands\n ${root}_commands=(\n${formatZshItems(items)}\n )`,\n )\n .join('\\n');\n};\n\nconst formatZshCustomCompletions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const functions = getCommandMetadata(command)?.completion?.zsh?.(binName).functions;\n return functions ? [functions] : [];\n })\n .join('\\n');\n};\n\nconst formatZshCustomCases = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.zsh?.(binName).complete;\n return complete\n ? [\n ` ${command.name})\n${complete}\n ;;`,\n ]\n : [];\n })\n .join('\\n');\n};\n\nconst formatSubcommandCases = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.keys()]\n .map(\n (root) => ` ${root})\n _describe '${binName} ${root} commands' ${root}_commands\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatOptionArrays = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([command, items]) => `\n local -a ${optionVariable(command)}\n ${optionVariable(command)}=(\n${formatZshItems(items)}\n )`,\n )\n .join('\\n');\n};\n\nconst formatOptionCases = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.keys()]\n .map(\n (command) => ` ${JSON.stringify(command)})\n _describe '${binName} ${command} options' ${optionVariable(command)}\n return\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatBashCustomCases = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.bash?.(binName);\n return complete\n ? [\n ` ${command.name})\n${complete}\n ;;`,\n ]\n : [];\n })\n .join('\\n');\n};\n\nconst formatBashSubcommandCases = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([root, items]) => ` ${root})\n COMPREPLY=($(compgen -W \"${items.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatFishFunctions = (binName: string, rootNames: string) => {\n return `function __${binName}_seen_command\n set -l tokens (commandline -opc)\n for token in $tokens[2..-1]\n switch $token\n case ${rootNames}\n return 0\n end\n end\n return 1\nend\n\nfunction __${binName}_using_command\n set -l tokens (commandline -opc)\n test (count $tokens) -ge 2; and test \"$tokens[2]\" = \"$argv[1]\"\nend`;\n};\n\nconst formatFishCustomFunctions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const functions = getCommandMetadata(command)?.completion?.fish?.(binName).functions;\n return functions ? [functions] : [];\n })\n .join('\\n');\n};\n\nconst formatFishCustomCompletions = (binName: string, commands: Command[]) => {\n return commands\n .flatMap((command) => {\n const complete = getCommandMetadata(command)?.completion?.fish?.(binName).complete;\n return complete ? [complete] : [];\n })\n .join('\\n');\n};\n\nconst formatFishRootCompletions = (binName: string, roots: CompletionGroup[]) => {\n return roots\n .map(\n (item) =>\n `complete -c ${binName} -f -n \"not __${binName}_seen_command\" -a ${quoteFish(item.name)} -d ${quoteFish(item.description ?? '')}`,\n )\n .join('\\n');\n};\n\nconst formatFishSubcommandCompletions = (\n binName: string,\n groups: Map<string, CompletionGroup[]>,\n) => {\n return [...groups.entries()]\n .flatMap(([root, items]) =>\n items.map(\n (item) =>\n `complete -c ${binName} -f -n \"__${binName}_using_command ${quoteFish(root)}\" -a ${quoteFish(item.name)} -d ${quoteFish(item.description ?? '')}`,\n ),\n )\n .join('\\n');\n};\n\nconst formatBashOptionCases = (groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .map(\n ([command, items]) => ` ${JSON.stringify(command)})\n COMPREPLY=($(compgen -W \"${items.map((item) => item.name).join(' ')}\" -- \"$cur\"))\n ;;`,\n )\n .join('\\n');\n};\n\nconst formatFishOptionCompletions = (binName: string, groups: Map<string, CompletionGroup[]>) => {\n return [...groups.entries()]\n .flatMap(([command, items]) =>\n items.map((item) => {\n const nameOption = fishOptionName(item.name);\n return `complete -c ${binName} -f -n \"__${binName}_using_command ${quoteFish(command)}\" ${nameOption} -d ${quoteFish(item.description ?? '')}`;\n }),\n )\n .join('\\n');\n};\n\nconst fishOptionName = (name: string) => {\n if (name.startsWith('--')) return `-l ${quoteFish(name.slice(2))}`;\n if (name.startsWith('-')) return `-s ${quoteFish(name.slice(1))}`;\n return `-a ${quoteFish(name)}`;\n};\n\nconst completionFunctionName = (binName: string) => {\n return binName.replace(/\\W/g, '_');\n};\n\nconst optionVariable = (command: string) => {\n return `${command.replace(/\\W/g, '_')}_options`;\n};\n\nconst escapeZshItem = (item: CompletionGroup) => {\n const text = item.description ? `${item.name}:${item.description}` : item.name;\n\n return text.replace(/'/g, \"'\\\\''\");\n};\n\nconst quoteFish = (value: string) => {\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\n};\n","import type { Program } from '@caporal/core';\nimport type { CommandDefinition } from '../command/metadata';\n\nconst COMMAND_COLUMN_WIDTH = 36;\nconst ANSI_CYAN = '\\u001b[36m';\nconst ANSI_GRAY = '\\u001b[90m';\nconst ANSI_RESET = '\\u001b[0m';\nconst programHelpData = new WeakMap<Program, ProgramHelpData>();\n\ntype ProgramHelpData = {\n binName: string;\n commands: readonly CommandDefinition[];\n description: string;\n examples: readonly string[];\n version: string;\n};\n\ntype CommandHelpRow = {\n name: string;\n description: string;\n};\n\nexport const setProgramHelpData = (program: Program, data: ProgramHelpData) => {\n programHelpData.set(program, data);\n};\n\nexport const isGlobalHelpRequest = (args: readonly string[]) =>\n args.length === 0 || (args.length === 1 && ['--help', '-h'].includes(args[0] ?? ''));\n\nexport const printProgramHelp = async (program: Program) => {\n const data = programHelpData.get(program);\n if (!data) throw new Error('Program help data was not registered');\n\n const capturedHelp = cleanHelp(await captureHelp(() => program.run(['--help'])));\n const capturedRows = parseCapturedCommandRows(capturedHelp);\n const output = [formatHelp(data, capturedRows), formatExamples(data.examples)]\n .filter(Boolean)\n .join('\\n');\n console.log(`${output}\\n`);\n};\n\nasync function captureHelp(callback: () => Promise<unknown>) {\n const originalLog = console.log;\n const lines: string[] = [];\n console.log = (...args: unknown[]) => {\n lines.push(args.map(String).join(' '));\n };\n\n try {\n await callback();\n } finally {\n console.log = originalLog;\n }\n\n return lines.join('\\n');\n}\n\nfunction formatHelp(data: ProgramHelpData, capturedRows: readonly CommandHelpRow[]) {\n return [\n '',\n ` ${data.binName} ${data.version} — ${data.description}`,\n '',\n heading('USAGE'),\n ' ',\n ` ▸ ${data.binName} <command> [ARGUMENTS...] [OPTIONS...]`,\n '',\n heading('COMMANDS'),\n '',\n ...formatCommandRows(\n mergeCommandRows(data.commands.filter(isVisibleCommand).map(commandHelpRow), capturedRows),\n ),\n '',\n heading('GLOBAL OPTIONS'),\n '',\n ' -h, --help Display global help or command-related help. ',\n ' -v, --version Show version',\n ].join('\\n');\n}\n\nfunction mergeCommandRows(\n primaryRows: readonly CommandHelpRow[],\n fallbackRows: readonly CommandHelpRow[],\n) {\n const primaryNames = new Set(primaryRows.map((row) => row.name));\n return [...primaryRows, ...fallbackRows.filter((row) => !primaryNames.has(row.name))];\n}\n\nfunction parseCapturedCommandRows(help: string) {\n const lines = help.split('\\n');\n const commandsIndex = lines.findIndex((line) => line.trim() === 'COMMANDS');\n const globalOptionsIndex = lines.findIndex((line) => line.trim() === 'GLOBAL OPTIONS');\n const hasCommandSection = commandsIndex >= 0 && globalOptionsIndex > commandsIndex;\n if (!hasCommandSection) return [];\n\n return parseCommandRows(lines.slice(commandsIndex + 1, globalOptionsIndex));\n}\n\nfunction parseCommandRows(lines: readonly string[]) {\n return lines.reduce<CommandHelpRow[]>((rows, line) => {\n const row = parseCommandRow(line);\n if (row) {\n rows.push(row);\n return rows;\n }\n\n const previous = rows.at(-1);\n const continuation = line.trim();\n if (!previous || !continuation) return rows;\n\n previous.description = `${previous.description} ${continuation}`;\n return rows;\n }, []);\n}\n\nfunction parseCommandRow(line: string): CommandHelpRow | undefined {\n const match = line.match(/^ {4}(.+?) {2,}(.+?)\\s*$/);\n if (!match?.[1] || !match[2]) return undefined;\n return { name: match[1].trim(), description: match[2].trim() };\n}\n\nfunction cleanHelp(help: string) {\n return help.replace(\n /COMMANDS\\s+—\\s+Type '[^']+ help <command>' to get some help about a command/g,\n 'COMMANDS',\n );\n}\n\nfunction commandHelpRow(command: CommandDefinition): CommandHelpRow {\n return { name: command.name, description: command.description };\n}\n\nfunction isVisibleCommand(command: CommandDefinition) {\n return command.config?.visible !== false;\n}\n\nfunction formatCommandRows(rows: readonly CommandHelpRow[]) {\n const groups = commandGroups(rows);\n return groups.flatMap((group) => formatCommandGroup(group));\n}\n\nfunction commandGroups(rows: readonly CommandHelpRow[]) {\n const visibleRows = rows.filter((row) => !isHiddenCommand(row));\n const parentRows = new Map(\n visibleRows.filter((row) => !row.name.includes(' ')).map((row) => [row.name, row]),\n );\n const childRows = visibleRows.filter((row) => row.name.includes(' '));\n const childParents = new Set(childRows.map((row) => row.name.split(' ')[0]).filter(Boolean));\n const groupedParents = [...childParents].map((parent) => ({\n children: childRows.filter((row) => row.name.startsWith(`${parent} `)),\n parent: parentRows.get(parent) ?? { name: parent, description: `${parent} commands` },\n }));\n const standaloneRows = visibleRows.filter(\n (row) => !childParents.has(row.name.split(' ')[0] ?? row.name),\n );\n\n return [...groupedParents, ...standaloneRows.map((parent) => ({ children: [], parent }))];\n}\n\nfunction isHiddenCommand(row: CommandHelpRow) {\n return row.name === 'on-checkout' || row.name === 'on-commit';\n}\n\nfunction formatCommandGroup({\n children,\n parent,\n}: {\n children: readonly CommandHelpRow[];\n parent: CommandHelpRow;\n}) {\n if (children.length === 0) return [formatCommandLine(parent.name, parent.description)];\n\n return [\n formatCommandLine(parent.name, parentDescription(parent), 4, isSyntheticParent(parent)),\n ...children.map((child) =>\n formatCommandLine(child.name.split(' ').slice(1).join(' '), child.description, 6),\n ),\n ];\n}\n\nfunction parentDescription(parent: CommandHelpRow) {\n return isSyntheticParent(parent) ? '' : parent.description;\n}\n\nfunction isSyntheticParent(parent: CommandHelpRow) {\n return parent.description === `${parent.name} commands`;\n}\n\nfunction formatCommandLine(name: string, description: string, indent = 4, muted = false) {\n const paddedName = name.padEnd(COMMAND_COLUMN_WIDTH - indent);\n const displayName = muted ? gray(paddedName) : paddedName;\n return `${' '.repeat(indent)}${displayName}${description}`.trimEnd();\n}\n\nfunction heading(text: string) {\n return ` ${color(text)}`;\n}\n\nfunction color(text: string) {\n if (!process.stdout.isTTY || process.env.NO_COLOR) return text;\n return `${ANSI_CYAN}${text}${ANSI_RESET}`;\n}\n\nfunction gray(text: string) {\n if (!process.stdout.isTTY || process.env.NO_COLOR) return text;\n return `${ANSI_GRAY}${text}${ANSI_RESET}`;\n}\n\nfunction formatExamples(examples: readonly string[]) {\n if (examples.length === 0) return '';\n\n return [heading('EXAMPLES'), '', ...examples.map((example) => ` ${example}`), ''].join('\\n');\n}\n","import { createRequire } from 'node:module';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { Program as CaporalProgram } from '@caporal/core';\nimport {\n type CommandAdapterExport,\n type CommandModuleImporter,\n commandDefinitionsFromModules,\n commandExportsFromModules,\n isCommandAdapterExport,\n loadCommandModules,\n} from '../command/loader';\nimport { type CommandDefinition, defineCommand } from '../command/metadata';\nimport { DEFAULT_COMMANDS_DIR } from '../constants';\nimport { registerCompletionCommand } from './completion';\nimport { setProgramHelpData } from './help';\nimport { registerUpdateCommand } from './update';\n\nconst VERSION_OPTION = '-v, --version';\nconst DISABLED_GLOBAL_OPTIONS = ['--no-color', '--quiet', '--silent', '-v', '-V'];\nconst DEFAULT_CLI_VERSION = '0.0.0';\n\nexport type CommandRegistrarContext<TContext> = {\n binName: string;\n getContext?: () => Promise<TContext> | TContext;\n};\n\nexport type CommandRegistrar<TContext> = (\n program: CaporalProgram,\n context: CommandRegistrarContext<TContext>,\n) => void;\n\nexport type RegisterCliCommandsFromDirectoryOptions<TContext> = {\n binName: string;\n commandsDir: string;\n getContext?: () => Promise<TContext> | TContext;\n importCommandModule?: CommandModuleImporter;\n program: CaporalProgram;\n};\n\nexport type CreateCommandProgramOptions<TContext> = {\n binName: string;\n binNames?: readonly string[];\n commandsDir?: string;\n description: string;\n getContext?: () => Promise<TContext> | TContext;\n importCommandModule?: CommandModuleImporter;\n importMetaUrl: string;\n isDevRun?: boolean;\n packageName?: string;\n printVersion?: (version: string) => void;\n version?: string;\n};\n\nexport type RegisterParentCommandsFromDefinitionsOptions = {\n description?: (name: string) => string;\n print?: (message: string) => void;\n};\n\nexport const createCommandProgram = async <TContext>({\n binName,\n binNames,\n commandsDir,\n description,\n getContext,\n importCommandModule,\n importMetaUrl,\n isDevRun = false,\n packageName,\n printVersion = console.log,\n version = DEFAULT_CLI_VERSION,\n}: CreateCommandProgramOptions<TContext>) => {\n const program = new (getProgramConstructor())()\n .bin(binName)\n .name(binName)\n .description(description)\n .version(version);\n\n disableDefaultGlobalOptions(program);\n registerVersionOption(program, version, printVersion);\n\n const commandDefinitions = await registerCliCommandsFromDirectory<TContext>({\n binName,\n commandsDir: commandsDir ?? defaultCommandsDir(importMetaUrl),\n getContext,\n importCommandModule,\n program,\n });\n registerUpdateCommand(program, { isDevRun, packageName: packageName ?? binName, version });\n registerCompletionCommand(program, { binNames });\n setProgramHelpData(program, {\n binName,\n commands: [\n ...commandDefinitions,\n defineCommand({\n name: 'update',\n description: `Update ${packageName ?? binName} to latest version`,\n }),\n defineCommand({\n name: 'completion',\n description: 'Generate shell completion scripts',\n }),\n ],\n description,\n examples: commandDefinitions.flatMap((command) => command.examples?.(binName) ?? []),\n version,\n });\n\n return program;\n};\n\nexport const registerParentCommandsFromDefinitions = (\n program: CaporalProgram,\n definitions: readonly CommandDefinition[],\n options: RegisterParentCommandsFromDefinitionsOptions = {},\n) => {\n const description = options.description ?? parentCommandDescription;\n const print = options.print ?? console.log;\n\n for (const [name, subcommands] of parentCommands(definitions)) {\n program.command(name, description(name)).action(() => {\n print(`Usage: ${program.getBin()} ${name} <command>`);\n print('');\n print(`Available commands: ${subcommands.join(', ')}`);\n });\n }\n};\n\nexport const registerCliCommandsFromDirectory = async <TContext>({\n binName,\n commandsDir,\n getContext,\n importCommandModule,\n program,\n}: RegisterCliCommandsFromDirectoryOptions<TContext>) => {\n const modules = await loadCommandModules(commandsDir, importCommandModule);\n const definitions = commandDefinitionsFromModules(modules);\n registerParentCommandsFromDefinitions(program, definitions);\n\n const commands = commandExportsFromModules<CommandAdapterExport>(modules, (_name, value) =>\n isCommandAdapterExport(value),\n );\n\n for (const command of commands.sort(compareCommands)) {\n command.cli(program, { binName, getContext });\n }\n\n return definitions;\n};\n\nexport const getProgramConstructor = () => {\n const require = createRequire(import.meta.url);\n const module = require('@caporal/core') as { Program: new () => CaporalProgram };\n return module.Program;\n};\n\nconst disableDefaultGlobalOptions = (program: CaporalProgram) => {\n for (const option of DISABLED_GLOBAL_OPTIONS) {\n program.disableGlobalOption(option);\n }\n};\n\nconst registerVersionOption = (\n program: CaporalProgram,\n version: string,\n printVersion: (version: string) => void,\n) => {\n program.option(VERSION_OPTION, 'Show version', {\n global: true,\n action: () => {\n printVersion(version);\n return false;\n },\n });\n};\n\nconst defaultCommandsDir = (importMetaUrl: string) =>\n join(dirname(fileURLToPath(importMetaUrl)), DEFAULT_COMMANDS_DIR);\n\nconst compareCommands = (left: CommandAdapterExport, right: CommandAdapterExport) => {\n const leftName = left.metadata?.name ?? '';\n const rightName = right.metadata?.name ?? '';\n const leftOrder = left.metadata?.order;\n const rightOrder = right.metadata?.order;\n if (leftOrder !== undefined || rightOrder !== undefined) {\n return (leftOrder ?? Number.MAX_SAFE_INTEGER) - (rightOrder ?? Number.MAX_SAFE_INTEGER);\n }\n return leftName.localeCompare(rightName);\n};\n\nconst parentCommandDescription = (name: string) => `${name} commands`;\n\nconst parentCommands = (definitions: readonly CommandDefinition[]) => {\n const groups = new Map<string, string[]>();\n const commandNames = new Set(definitions.map((definition) => definition.name));\n\n for (const definition of definitions) {\n const [parent, subcommand] = definition.name.split(' ');\n const hasGeneratedParentCommand = parent && subcommand && !commandNames.has(parent);\n if (!hasGeneratedParentCommand) continue;\n groups.set(parent, [...(groups.get(parent) ?? []), subcommand]);\n }\n\n return [...groups.entries()].sort(([left], [right]) => left.localeCompare(right));\n};\n","import { readdir } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { CommandAdaptersReturn } from './adapters';\n\nconst COMMAND_FILE_EXTENSIONS = new Set(['.js', '.mjs', '.ts']);\nconst IGNORED_COMMAND_FILE_NAMES = new Set(['index', 'options']);\n\nexport type CommandModule = Record<string, unknown>;\nexport type CommandModuleImporter = (file: string) => Promise<CommandModule>;\nexport type CommandAdapterExport = Pick<CommandAdaptersReturn<unknown, unknown>, 'cli'> &\n Partial<Pick<CommandAdaptersReturn<unknown, unknown>, 'mcp' | 'metadata'>>;\n\nexport const loadCommandModules = async (\n commandsDir: string,\n importModule: CommandModuleImporter = importCommandModule,\n) => {\n return loadCommandModulesFromFiles(await commandFiles(commandsDir), importModule);\n};\n\nexport const loadCommandModulesFromFiles = async (\n files: readonly string[],\n importModule: CommandModuleImporter = importCommandModule,\n) => {\n return Promise.all(files.map(importModule));\n};\n\nconst importCommandModule: CommandModuleImporter = (file) =>\n import(pathToFileURL(file).href) as Promise<CommandModule>;\n\nexport const commandDefinitionsFromModules = (modules: readonly CommandModule[]) => {\n return modules.flatMap((module) =>\n Object.values(module).flatMap((value) =>\n isCommandAdapterExport(value) && value.metadata ? [value.metadata] : [],\n ),\n );\n};\n\nexport const commandExportsFromModules = <TExport>(\n modules: readonly CommandModule[],\n isExport: (name: string, value: unknown) => boolean,\n) => {\n return modules.flatMap((module) =>\n Object.entries(module)\n .filter(([name, value]) => isExport(name, value))\n .map(([, value]) => value as TExport),\n );\n};\n\nconst commandFiles = async (dir: string): Promise<string[]> => {\n const entries = await readdir(dir, { withFileTypes: true });\n const nestedFiles = await Promise.all(\n entries.map((entry) => {\n const path = join(dir, entry.name);\n if (entry.isDirectory()) return commandFiles(path);\n if (entry.isFile() && isCommandFile(path)) return [path];\n return [];\n }),\n );\n\n return nestedFiles.flat().sort();\n};\n\nconst isCommandFile = (path: string) => {\n const extension = extname(path);\n const fileName = basename(path, extension);\n const isDeclarationFile = path.endsWith('.d.ts');\n const isSupportedCommandFile = COMMAND_FILE_EXTENSIONS.has(extension);\n const isIgnoredCommandFile = IGNORED_COMMAND_FILE_NAMES.has(fileName);\n return !isDeclarationFile && isSupportedCommandFile && !isIgnoredCommandFile;\n};\n\nexport const isCommandAdapterExport = (value: unknown): value is CommandAdapterExport => {\n if (!value || typeof value !== 'object') return false;\n const command = value as Partial<CommandAdapterExport>;\n return typeof command.cli === 'function';\n};\n","import type { Command, CreateOptionCommandOpts, Program } from '@caporal/core';\nimport { type ZodType, z } from 'zod';\nimport { setCommandMetadata } from './runtime-metadata';\n\nexport type JsonSchemaProperty = {\n type: 'array' | 'boolean' | 'number' | 'string';\n description?: string;\n items?: { type: 'string' };\n};\n\nexport type CommandArgumentDefinition = {\n synopsis: string;\n description: string;\n};\n\nexport type CommandOptionDefinition = {\n name: string;\n description: string;\n aliases?: readonly string[];\n config?: CreateOptionCommandOpts;\n negated?: boolean;\n schema?: JsonSchemaProperty;\n value?: string;\n};\n\nexport type CommandMcpToolMetadata = {\n kind: 'tool';\n readOnly: boolean;\n destructive: boolean;\n idempotent: boolean;\n openWorld: boolean;\n requiresConfirmation: boolean;\n sideEffects?: string[];\n};\n\nexport type CommandMcpResourceMetadata = {\n kind: 'resource';\n uriTemplate: string;\n mimeType?: string;\n};\n\nexport type CommandMcpMetadata = false | CommandMcpToolMetadata | CommandMcpResourceMetadata;\n\nexport const isCommandMcpToolMetadata = (\n metadata: CommandMcpMetadata | undefined,\n): metadata is CommandMcpToolMetadata =>\n metadata !== undefined && metadata !== false && metadata.kind === 'tool';\n\nexport const isCommandMcpResourceMetadata = (\n metadata: CommandMcpMetadata | undefined,\n): metadata is CommandMcpResourceMetadata =>\n metadata !== undefined && metadata !== false && metadata.kind === 'resource';\n\nexport type ShellCompletionSnippet = {\n complete: string;\n functions?: string;\n};\n\nexport type CommandCompletionDefinition = {\n bash?: (binName: string) => string;\n fish?: (binName: string) => ShellCompletionSnippet;\n zsh?: (binName: string) => ShellCompletionSnippet;\n};\n\nexport type CommandExamplesDefinition = (binName: string) => readonly string[];\n\nexport type CommandDefinition<\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n> = {\n name: string;\n description: string;\n aliases?: readonly string[];\n arguments?: readonly CommandArgumentDefinition[];\n completion?: CommandCompletionDefinition;\n config?: Parameters<Program['command']>[2];\n examples?: CommandExamplesDefinition;\n inputSchema: TInputSchema;\n mcp?: CommandMcpMetadata;\n options?: readonly CommandOptionDefinition[];\n order?: number;\n outputSchema: TOutputSchema;\n};\n\nexport type DefineCommandDefinition<\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n> = Omit<CommandDefinition<TInputSchema, TOutputSchema>, 'inputSchema' | 'outputSchema'> & {\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n};\n\nexport const defineCommand = <\n TInputSchema extends ZodType = ZodType,\n TOutputSchema extends ZodType = ZodType,\n>(\n definition: DefineCommandDefinition<TInputSchema, TOutputSchema>,\n): CommandDefinition<TInputSchema, TOutputSchema> => {\n const command = {\n outputSchema: z.unknown(),\n ...definition,\n } as CommandDefinition<TInputSchema, TOutputSchema>;\n\n return {\n ...command,\n inputSchema: definition.inputSchema ?? commandDefinitionToZodInputSchema(command),\n } as CommandDefinition<TInputSchema, TOutputSchema>;\n};\n\nexport const registerCommand = (program: Program, definition: CommandDefinition): Command => {\n const command =\n definition.arguments?.reduce<Command>(\n (currentCommand, argument) =>\n currentCommand.argument(argument.synopsis, argument.description),\n program.command(definition.name, definition.description, definition.config),\n ) ?? program.command(definition.name, definition.description, definition.config);\n\n const commandWithOptions =\n definition.options?.reduce<Command>(\n (currentCommand, option) =>\n currentCommand.option(commandOptionSynopsis(option), option.description, option.config),\n command,\n ) ?? command;\n\n const registeredCommand =\n definition.aliases?.reduce<Command>(\n (currentCommand, alias) => currentCommand.alias(alias),\n commandWithOptions,\n ) ?? commandWithOptions;\n\n setCommandMetadata(registeredCommand, definition);\n return registeredCommand;\n};\n\nexport const commandInputValue = (args: Record<string, unknown>, name: string) => args[name];\n\nexport const commandInputString = (args: Record<string, unknown>, name: string) => {\n const value = commandInputValue(args, name);\n return value === undefined ? '' : String(value);\n};\n\nexport const commandActionInput = (\n definition: CommandDefinition,\n args: Record<string, unknown>,\n options: Record<string, unknown>,\n) =>\n normalizeCommandInputAliases(definition, {\n ...normalizeArgumentInput(definition, args),\n ...options,\n });\n\nexport const normalizeCommandInputAliases = <TInput extends Record<string, unknown>>(\n definition: CommandDefinition,\n input: TInput,\n) => ({\n ...input,\n ...Object.fromEntries(\n (definition.options ?? []).flatMap((option) => {\n const name = optionInputName(option);\n if (input[name] !== undefined) return [];\n\n const alias = optionAliasInputNames(option).find(\n (candidate) => input[candidate] !== undefined,\n );\n return alias ? [[name, input[alias]]] : [];\n }),\n ),\n});\n\nconst normalizeArgumentInput = (definition: CommandDefinition, args: Record<string, unknown>) => ({\n ...args,\n ...Object.fromEntries(\n (definition.arguments ?? [])\n .map((argument): [string, unknown] | undefined => {\n const name = argumentName(argument.synopsis);\n const value = commandInputValue(args, name);\n return value === undefined ? undefined : [name, value];\n })\n .filter((entry): entry is [string, unknown] => entry !== undefined),\n ),\n});\n\nexport const commandDefinitionToZodInputSchema = (definition: CommandDefinition) => {\n const jsonSchema = commandDefinitionToInputSchema(definition);\n const shape = Object.fromEntries(\n Object.entries(jsonSchema.properties).map(([name, property]) => [\n name,\n zodInputProperty(property as JsonSchemaProperty, jsonSchema.required.includes(name)),\n ]),\n );\n\n return z.object(shape);\n};\n\nexport const commandDefinitionToInputSchema = (definition: CommandDefinition) => ({\n type: 'object',\n properties: Object.fromEntries([\n ...(definition.arguments ?? []).map((argument) => [\n argumentName(argument.synopsis),\n argumentSchema(argument),\n ]),\n ...(definition.options ?? []).map((option) => [\n optionInputName(option),\n option.schema ?? optionSchema(option),\n ]),\n ]),\n required: [\n ...(definition.arguments ?? [])\n .filter((argument) => isRequiredSynopsis(argument.synopsis))\n .map((argument) => argumentName(argument.synopsis)),\n ...(definition.options ?? []).filter((option) => option.config?.required).map(optionInputName),\n ],\n additionalProperties: false,\n});\n\nconst zodInputProperty = (property: JsonSchemaProperty, required: boolean) => {\n const schema = zodProperty(property);\n const describedSchema = property.description ? schema.describe(property.description) : schema;\n\n return required ? describedSchema : describedSchema.optional();\n};\n\nconst zodProperty = (property: JsonSchemaProperty): ZodType => {\n if (property.type === 'array') return z.array(z.string());\n if (property.type === 'boolean') return z.boolean();\n if (property.type === 'number') return z.number();\n return z.string();\n};\n\nconst argumentSchema = (argument: CommandArgumentDefinition): JsonSchemaProperty => ({\n type: isVariadicSynopsis(argument.synopsis) ? 'array' : 'string',\n description: argument.description,\n ...(isVariadicSynopsis(argument.synopsis) ? { items: { type: 'string' as const } } : {}),\n});\n\nconst optionSchema = (option: CommandOptionDefinition): JsonSchemaProperty => ({\n type: option.value ? 'string' : 'boolean',\n description: option.description,\n});\n\nconst argumentName = (synopsis: string) => {\n return kebabToCamel(\n synopsis\n .replace(/[<>[\\].]/g, '')\n .replace(/_([a-z])/g, (_match, letter: string) => letter.toUpperCase()),\n );\n};\n\nexport const commandOptionSynopsis = (option: CommandOptionDefinition) => {\n const longName = `${option.negated ? '--no-' : '--'}${option.name}`;\n const aliases = (option.aliases ?? []).map((alias) =>\n alias.length === 1 ? `-${alias}` : `--${alias}`,\n );\n return [...aliases, `${longName}${option.value ? ` ${option.value}` : ''}`].join(', ');\n};\n\nconst optionInputName = (option: CommandOptionDefinition) => kebabToCamel(option.name);\n\nconst optionAliasInputNames = (option: CommandOptionDefinition) =>\n (option.aliases ?? []).map(kebabToCamel);\n\nconst kebabToCamel = (value: string) =>\n value.replace(/-([a-z])/g, (_match, letter: string) => letter.toUpperCase());\n\nconst isRequiredSynopsis = (synopsis: string) => synopsis.trim().startsWith('<');\n\nconst isVariadicSynopsis = (synopsis: string) => synopsis.includes('...');\n","export const DEFAULT_COMMANDS_DIR = 'commands';\nexport const PROGRAM_NAME_ENV_SUFFIX = '_PROG_NAME';\n","import { exec } from 'node:child_process';\nimport { platform } from 'node:os';\nimport { promisify } from 'node:util';\nimport type { Program } from '@caporal/core';\n\nconst execAsync = promisify(exec);\n\nexport enum PackageManager {\n Npm = 'npm',\n Pnpm = 'pnpm',\n Yarn = 'yarn',\n}\n\nexport type RegisterUpdateCommandOptions = {\n isDevRun: boolean;\n packageName: string;\n version?: string;\n};\n\nexport const registerUpdateCommand = (program: Program, options: RegisterUpdateCommandOptions) => {\n program.command('update', `Update ${options.packageName} to latest version`).action(async () => {\n if (options.isDevRun) {\n console.log('Skipping update because this is a dev command');\n return 0;\n }\n\n console.log('Checking current version...');\n const currentVersion = options.version ?? '0.0.0';\n\n console.log('Checking latest version...');\n const latestVersion = await getLatestVersion(options.packageName);\n if (!latestVersion) {\n console.log('error: could not fetch latest version from npm');\n return 1;\n }\n\n console.log(`Current version: ${currentVersion}`);\n console.log(`Latest version: ${latestVersion}`);\n\n if (currentVersion === latestVersion) {\n console.log(`${options.packageName} is already up to date`);\n return 0;\n }\n\n console.log('Detecting package manager...');\n const packageManager = await detectPackageManager(options.packageName);\n\n if (!packageManager) {\n console.log(`error: could not detect how ${options.packageName} was installed`);\n console.log('Please update manually using your package manager');\n return 1;\n }\n\n console.log(`Detected package manager: ${packageManager}`);\n console.log(`Updating ${options.packageName} from ${currentVersion} to ${latestVersion}...`);\n\n const { stdout, stderr } = await execAsync(updateCommand(packageManager, options.packageName));\n\n console.log(\n `${options.packageName} updated successfully from ${currentVersion} to ${latestVersion}`,\n );\n if (stdout) console.log(stdout.trim());\n if (stderr) console.log(stderr.trim());\n return 0;\n });\n};\n\nasync function detectPackageManager(packageName: string): Promise<PackageManager | null> {\n const globalBinPath = await getGlobalBinPath(packageName);\n if (!globalBinPath) return (await isInstalledWithNpm(packageName)) ? PackageManager.Npm : null;\n\n return getPackageManagerFromPath(globalBinPath) ?? PackageManager.Npm;\n}\n\nexport function getPackageManagerFromPath(globalBinPath: string): PackageManager | null {\n const possiblePaths = [\n { manager: PackageManager.Yarn, patterns: ['/yarn/', '\\\\yarn\\\\', '/.yarn/', '\\\\.yarn\\\\'] },\n { manager: PackageManager.Pnpm, patterns: ['/pnpm/', '\\\\pnpm\\\\', '/.pnpm/', '\\\\.pnpm\\\\'] },\n {\n manager: PackageManager.Npm,\n patterns: ['/npm/', '\\\\npm\\\\', '/node/', '\\\\node\\\\', '/node_modules/'],\n },\n ] as const;\n\n for (const { manager, patterns } of possiblePaths) {\n if (patterns.some((pattern) => globalBinPath.includes(pattern))) return manager;\n }\n\n return null;\n}\n\nasync function getGlobalBinPath(binName: string): Promise<string | null> {\n const isWindows = platform() === 'win32';\n\n try {\n const whereCommand = isWindows ? 'where' : 'which';\n const { stdout } = await execAsync(`${whereCommand} ${binName}`);\n const execPath = stdout.trim();\n if (!execPath) return null;\n\n if (isWindows) return execPath;\n\n try {\n const { stdout: realPath } = await execAsync(`readlink -f \"${execPath}\"`);\n return realPath.trim() || execPath;\n } catch {\n return execPath;\n }\n } catch {\n return null;\n }\n}\n\nasync function isInstalledWithNpm(packageName: string) {\n try {\n const { stdout } = await execAsync(`npm list -g --depth=0 ${packageName}`);\n return stdout.includes(packageName);\n } catch {\n return false;\n }\n}\n\nasync function getLatestVersion(packageName: string): Promise<string | null> {\n try {\n const { stdout } = await execAsync(`npm view ${packageName} version`);\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\nfunction updateCommand(packageManager: PackageManager, packageName: string) {\n return {\n [PackageManager.Npm]: `npm update -g ${packageName}`,\n [PackageManager.Pnpm]: `pnpm update -g ${packageName}`,\n [PackageManager.Yarn]: `yarn global upgrade ${packageName}`,\n }[packageManager];\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst PACKAGE_JSON_FILE = 'package.json';\nconst PACKAGE_JSON_ENCODING = 'utf8';\n\nexport type PackageJson = {\n bin?: Record<string, string>;\n description?: string;\n name?: string;\n version?: string;\n};\n\nexport type PackageBinEntry = {\n binPath: string;\n commandName: string;\n};\n\nexport const packageRoot = (importMetaUrl: string) => {\n const startDir = dirname(fileURLToPath(importMetaUrl));\n\n return findPackageRoot(startDir);\n};\n\nexport const readPackageJson = (packageDir: string): PackageJson => {\n return JSON.parse(\n readFileSync(join(packageDir, PACKAGE_JSON_FILE), PACKAGE_JSON_ENCODING),\n ) as PackageJson;\n};\n\nexport const shortPackageName = (name?: string) => {\n const packageName = name?.split('/').at(-1);\n\n if (!packageName) {\n throw new Error('Missing package name');\n }\n\n return packageName;\n};\n\nexport const packageEnvPrefix = (name?: string) =>\n shortPackageName(name).replaceAll('-', '_').toUpperCase();\n\nexport const packageBinEntry = (packageDir: string, packageJson: PackageJson): PackageBinEntry => {\n const [commandName, binPath] = Object.entries(packageJson.bin ?? {})[0] ?? [];\n\n if (!commandName || !binPath) {\n throw new Error(`Missing bin in ${join(packageDir, PACKAGE_JSON_FILE)}`);\n }\n\n return { binPath, commandName };\n};\n\nfunction findPackageRoot(startDir: string): string {\n const packageJsonPath = join(startDir, PACKAGE_JSON_FILE);\n if (existsSync(packageJsonPath)) return startDir;\n\n const parentDir = dirname(startDir);\n if (parentDir === startDir) throw new Error(`Missing ${PACKAGE_JSON_FILE}`);\n\n return findPackageRoot(parentDir);\n}\n","import { PROGRAM_NAME_ENV_SUFFIX } from '../constants';\nimport {\n packageBinEntry,\n packageEnvPrefix,\n packageRoot,\n readPackageJson,\n shortPackageName,\n} from './json';\n\nexport type PackageCommandMetadata = {\n binName: string;\n binNames: string[];\n description?: string;\n envBinName: string;\n mcpPrefix: string;\n mcpServerName: string;\n packageDir: string;\n packageName: string;\n version?: string;\n};\n\ntype PackageCommandMetadataOptions = {\n mcpServerPrefix?: string;\n};\n\nexport const packageCommandMetadata = (\n importMetaUrl: string,\n options: PackageCommandMetadataOptions = {},\n): PackageCommandMetadata => {\n const packageDir = packageRoot(importMetaUrl);\n const packageJson = readPackageJson(packageDir);\n const packageName = shortPackageName(packageJson.name);\n const { commandName } = packageBinEntry(packageDir, packageJson);\n\n return {\n binName: commandName,\n binNames: Object.keys(packageJson.bin ?? {}),\n description: packageJson.description,\n envBinName: `${packageEnvPrefix(packageName)}${PROGRAM_NAME_ENV_SUFFIX}`,\n mcpPrefix: packageName,\n mcpServerName: mcpServerName(packageName, options.mcpServerPrefix),\n packageDir,\n packageName,\n version: packageJson.version,\n };\n};\n\nconst mcpServerName = (packageName: string, prefix: string | undefined) =>\n prefix ? `${prefix}-${packageName}` : packageName;\n","import { realpathSync } from 'node:fs';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nexport type CliConfig<TProgram> = {\n createProgram: (binName: string) => TProgram | Promise<TProgram>;\n defaultBinName: string;\n envBinName: string;\n importMetaUrl: string;\n};\n\nexport const getProgramBin = (\n config: Pick<CliConfig<unknown>, 'defaultBinName' | 'envBinName' | 'importMetaUrl'>,\n) => {\n const envBinName = process.env[config.envBinName];\n\n if (envBinName) {\n return envBinName;\n }\n\n return config.defaultBinName;\n};\n\nexport const isDirectRun = (importMetaUrl: string) => {\n if (!process.argv[1]) {\n return false;\n }\n\n try {\n return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(importMetaUrl));\n } catch {\n return importMetaUrl === pathToFileURL(process.argv[1]).href;\n }\n};\n","import type { Program as CaporalProgram } from '@caporal/core';\nimport type { CommandModuleImporter } from '../command/loader';\nimport { packageCommandMetadata } from '../package/metadata';\nimport { isGlobalHelpRequest, printProgramHelp } from './help';\nimport { createCommandProgram } from './program';\nimport { type CliConfig, getProgramBin, isDirectRun } from './runtime';\n\ntype CreateCommandCliRunnerOptions<TContext> = {\n binNames?: readonly string[];\n commandsDir?: string;\n defaultBinName: string;\n description: string;\n envBinName: string;\n getContext?: () => Promise<TContext> | TContext;\n importCommandModule?: CommandModuleImporter;\n importMetaUrl: string;\n isDevRun?: boolean;\n packageName?: string;\n printVersion?: (version: string) => void;\n version?: string;\n};\n\ntype CreatePackageCommandCliRunnerOptions<TContext> = Omit<\n CreateCommandCliRunnerOptions<TContext>,\n 'defaultBinName' | 'description' | 'envBinName'\n> & {\n defaultBinName?: string;\n description?: string;\n envBinName?: string;\n};\n\nexport const createCliRunner = (config: CliConfig<CaporalProgram>) => {\n let programInstance: CaporalProgram | undefined;\n let programInstanceBin: string | undefined;\n\n const getProgram = async (): Promise<CaporalProgram> => {\n const binName = getProgramBin(config);\n const shouldCreateProgram = !programInstance || programInstanceBin !== binName;\n\n if (shouldCreateProgram) {\n const program = await config.createProgram(binName);\n programInstance = program;\n programInstanceBin = binName;\n\n return program;\n }\n\n return programInstance as CaporalProgram;\n };\n\n const runCli = async (args = process.argv.slice(2)) => {\n try {\n const program = await getProgram();\n if (isGlobalHelpRequest(args)) {\n await printProgramHelp(program);\n return 0;\n }\n\n const result = await program.run(args);\n return typeof result === 'number' && result > 0 ? result : 0;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(`error: ${message}`);\n return 1;\n }\n };\n\n return { isDirectRun: () => isDirectRun(config.importMetaUrl), runCli };\n};\n\nexport const createPackageCommandCliRunner = <TContext>({\n defaultBinName,\n envBinName,\n importMetaUrl,\n ...options\n}: CreatePackageCommandCliRunnerOptions<TContext>) => {\n const metadata = packageCommandMetadata(importMetaUrl);\n\n return createCommandCliRunner({\n ...options,\n binNames: options.binNames ?? metadata.binNames,\n defaultBinName: defaultBinName ?? metadata.binName,\n description: options.description ?? metadata.description ?? metadata.packageName,\n envBinName: envBinName ?? metadata.envBinName,\n importMetaUrl,\n isDevRun: process.env[envBinName ?? metadata.envBinName] !== undefined,\n packageName: metadata.packageName,\n version: options.version ?? metadata.version,\n });\n};\n\nexport const createCommandCliRunner = <TContext>({\n binNames,\n commandsDir,\n defaultBinName,\n description,\n envBinName,\n getContext,\n importCommandModule,\n importMetaUrl,\n isDevRun,\n packageName,\n printVersion,\n version,\n}: CreateCommandCliRunnerOptions<TContext>) => {\n return createCliRunner({\n createProgram: (binName) =>\n createCommandProgram({\n binName,\n binNames,\n commandsDir,\n description,\n getContext,\n importCommandModule,\n importMetaUrl,\n isDevRun,\n packageName,\n printVersion,\n version,\n }),\n defaultBinName,\n envBinName,\n importMetaUrl,\n });\n};\n","import { z } from 'zod';\nimport { type CommandDefinition, isCommandMcpToolMetadata } from '../command/metadata';\nimport { COMMAND_NAME_SEPARATOR, EMPTY_DISPLAY_VALUE, TOOL_NAME_SEPARATOR } from './constants';\nimport { throwUnknownTool } from './errors';\nimport { commandProgressSummary } from './progress';\nimport {\n commandMcpRouteToResourceRoute,\n commandResourceInput,\n commandResourceRouteToResource,\n commandResourceRouteToResourceTemplate,\n isResourceTemplate,\n} from './resources';\nimport { mcpToolOutputSchema } from './schema';\nimport type { CommandMcpRoute, CreateCommandMcpRouterOptions, ToolCallParams } from './types';\n\nexport const createCommandMcpRoute = ({\n command,\n handler,\n inputSchema,\n outputSchema,\n}: CommandMcpRoute): CommandMcpRoute => ({\n command,\n handler,\n inputSchema,\n outputSchema,\n});\n\nexport const commandMcpRouteToTool = (route: CommandMcpRoute, prefix?: string) => ({\n name: commandNameToMcpToolName(route.command.name, prefix),\n description: route.command.description,\n inputSchema: z.toJSONSchema(route.inputSchema),\n outputSchema: mcpToolOutputSchema(route.outputSchema),\n annotations: commandMcpAnnotations(route.command),\n});\n\nexport const commandNameToMcpToolName = (name: string, prefix?: string) => {\n const baseName = name.replaceAll(COMMAND_NAME_SEPARATOR, TOOL_NAME_SEPARATOR);\n return prefix ? `${prefix}_${baseName}` : baseName;\n};\n\nexport const createCommandMcpRouter = ({ prefix, routes }: CreateCommandMcpRouterOptions) => {\n const mcpRoutes = routes.filter((route) => route.command.mcp);\n const toolRoutes = mcpRoutes.filter((route) => isCommandMcpToolMetadata(route.command.mcp));\n const resourceRoutes = mcpRoutes.flatMap(commandMcpRouteToResourceRoute);\n\n return {\n tools: toolRoutes.map((route) => commandMcpRouteToTool(route, prefix)),\n resources: resourceRoutes\n .filter((route) => !isResourceTemplate(route.uriTemplate))\n .map(commandResourceRouteToResource),\n resourceTemplates: resourceRoutes\n .filter((route) => isResourceTemplate(route.uriTemplate))\n .map(commandResourceRouteToResourceTemplate),\n callTool: async (params: unknown) => {\n const toolCall = params as ToolCallParams;\n const route = toolRoutes.find(\n (candidate) => toolCall.name === commandNameToMcpToolName(candidate.command.name, prefix),\n );\n\n if (!route) {\n return throwUnknownTool(toolCall.name);\n }\n\n const input = route.inputSchema.parse(toolCall.arguments ?? {});\n const data = route.outputSchema.parse(await route.handler(input as Record<string, unknown>));\n\n return { data, progress: commandProgressSummary(data, route.command) };\n },\n readResource: async (params: unknown) => {\n const resourceRead = params as { uri?: string };\n const routeMatch = resourceRoutes\n .map((route) => ({ input: commandResourceInput(route, resourceRead.uri), route }))\n .find((candidate) => candidate.input !== undefined);\n\n if (!routeMatch?.input) {\n throw new Error(`Unknown resource: ${resourceRead.uri ?? EMPTY_DISPLAY_VALUE}`);\n }\n\n return routeMatch.route.command.outputSchema.parse(\n await routeMatch.route.handler(routeMatch.input),\n );\n },\n };\n};\n\nconst commandMcpAnnotations = (command: CommandDefinition) => {\n const mcp = command.mcp;\n if (!isCommandMcpToolMetadata(mcp)) return undefined;\n\n return {\n readOnlyHint: mcp.readOnly,\n destructiveHint: mcp.destructive,\n idempotentHint: mcp.idempotent,\n openWorldHint: mcp.openWorld,\n requiresConfirmation: mcp.requiresConfirmation,\n sideEffects: mcp.sideEffects,\n };\n};\n","export const DEFAULT_MCP_SERVER_VERSION = '0.0.0';\nexport const DEFAULT_RESOURCE_MIME_TYPE = 'application/json';\nexport const MCP_PROTOCOL_VERSION = '2024-11-05';\nexport const JSON_RPC_METHOD_NOT_FOUND = -32601;\nexport const JSON_RPC_INTERNAL_ERROR = -32603;\nexport const JSON_RPC_VERSION = '2.0';\nexport const MCP_STATUS_COMPLETED = 'completed';\nexport const MCP_STATUS_ERROR = 'error';\nexport const MCP_TEXT_CONTENT_TYPE = 'text';\nexport const TOOL_NAME_SEPARATOR = '_';\nexport const COMMAND_NAME_SEPARATOR = ' ';\nexport const EMPTY_DISPLAY_VALUE = '<empty>';\nexport const RESULT_ENVELOPE_DATA_KEY = 'data';\nexport const RESULT_ENVELOPE_PROGRESS_KEY = 'progress';\nexport const PROGRESS_LIST_KEYS = ['items', 'threads', 'files', 'events', 'messages'];\nexport const CURSOR_KEYS = ['nextCursor', 'nextPageToken'];\nexport const MCP_METHOD_INITIALIZE = 'initialize';\nexport const MCP_METHOD_TOOLS_LIST = 'tools/list';\nexport const MCP_METHOD_TOOLS_CALL = 'tools/call';\nexport const MCP_METHOD_RESOURCES_LIST = 'resources/list';\nexport const MCP_METHOD_RESOURCES_TEMPLATES_LIST = 'resources/templates/list';\nexport const MCP_METHOD_RESOURCES_READ = 'resources/read';\n","import { EMPTY_DISPLAY_VALUE } from './constants';\n\nexport const assertToolName = (expectedName: string, actualName: string | undefined) => {\n if (actualName !== expectedName) {\n throwUnknownTool(actualName);\n }\n};\n\nexport const throwUnknownTool = (name: string | undefined): never => {\n throw new Error(`Unknown tool: ${name ?? EMPTY_DISPLAY_VALUE}`);\n};\n","import { type CommandDefinition, isCommandMcpToolMetadata } from '../command/metadata';\nimport {\n CURSOR_KEYS,\n MCP_STATUS_COMPLETED,\n MCP_STATUS_ERROR,\n MCP_TEXT_CONTENT_TYPE,\n PROGRESS_LIST_KEYS,\n RESULT_ENVELOPE_DATA_KEY,\n RESULT_ENVELOPE_PROGRESS_KEY,\n} from './constants';\nimport type { McpResultEnvelope } from './types';\n\nexport const toolResult = (result: unknown, startedAt: number) => {\n const envelope = resultEnvelope(result);\n const data = envelope.data;\n const structuredContent = {\n status: MCP_STATUS_COMPLETED,\n progress: progressSummary(data, startedAt, envelope.progress),\n data,\n };\n return {\n structuredContent,\n content: [{ type: MCP_TEXT_CONTENT_TYPE, text: JSON.stringify(structuredContent, null, 2) }],\n };\n};\n\nexport const toolErrorResult = (caught: unknown, startedAt = Date.now()) => {\n const message = caught instanceof Error ? caught.message : String(caught);\n const structuredContent = {\n status: MCP_STATUS_ERROR,\n progress: { elapsedMs: elapsedMs(startedAt), errors: [message] },\n error: { message },\n };\n return {\n structuredContent,\n content: [{ type: MCP_TEXT_CONTENT_TYPE, text: JSON.stringify(structuredContent, null, 2) }],\n };\n};\n\nexport const commandProgressSummary = (data: unknown, command: CommandDefinition) => {\n const mcp = command.mcp;\n if (!isCommandMcpToolMetadata(mcp) || mcp.readOnly) {\n return undefined;\n }\n\n const processed = processedOf(data) ?? countOf(data) ?? 1;\n return { changed: processed, matched: processed, processed, skipped: 0 };\n};\n\nconst progressSummary = (\n data: unknown,\n startedAt: number,\n progress: Record<string, unknown> | undefined,\n) => {\n const summary = {\n count: countOf(data),\n elapsedMs: elapsedMs(startedAt),\n errors: [] as string[],\n nextCursor: cursorOf(data),\n processed: processedOf(data),\n ...progress,\n };\n\n return Object.fromEntries(Object.entries(summary).filter(([, value]) => value !== undefined));\n};\n\nconst resultEnvelope = (result: unknown): McpResultEnvelope => {\n if (\n isRecord(result) &&\n RESULT_ENVELOPE_DATA_KEY in result &&\n RESULT_ENVELOPE_PROGRESS_KEY in result\n ) {\n return {\n data: result[RESULT_ENVELOPE_DATA_KEY],\n progress: recordOf(result[RESULT_ENVELOPE_PROGRESS_KEY]),\n };\n }\n\n return { data: result };\n};\n\nconst recordOf = (value: unknown) => (isRecord(value) ? value : undefined);\n\nconst elapsedMs = (startedAt: number) => Date.now() - startedAt;\n\nconst countOf = (data: unknown) => {\n if (!isRecord(data)) return undefined;\n return typeof data.count === 'number' ? data.count : processedOf(data);\n};\n\nconst processedOf = (data: unknown) => {\n if (Array.isArray(data)) return data.length;\n if (!isRecord(data)) return undefined;\n\n const list = PROGRESS_LIST_KEYS.map((key) => data[key]).find(Array.isArray);\n return list ? list.length : undefined;\n};\n\nconst cursorOf = (data: unknown) => {\n if (!isRecord(data)) return undefined;\n const cursor = CURSOR_KEYS.map((key) => data[key]).find((value) => typeof value === 'string');\n return typeof cursor === 'string' ? cursor : undefined;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n","import { isCommandMcpResourceMetadata } from '../command/metadata';\nimport { DEFAULT_RESOURCE_MIME_TYPE } from './constants';\nimport type {\n CommandMcpRoute,\n CommandResourceRoute,\n McpResourceDefinition,\n McpResourceTemplateDefinition,\n ResourceReadParams,\n} from './types';\n\nexport const commandMcpRouteToResourceRoute = (route: CommandMcpRoute): CommandResourceRoute[] => {\n const mcp = route.command.mcp;\n if (!isCommandMcpResourceMetadata(mcp)) return [];\n\n const inputNames = resourceInputNames(mcp.uriTemplate);\n\n return [\n {\n command: route.command,\n handler: route.handler,\n inputNames,\n mimeType: mcp.mimeType ?? DEFAULT_RESOURCE_MIME_TYPE,\n name: route.command.name,\n uriTemplate: mcp.uriTemplate,\n },\n ];\n};\n\nexport const commandResourceRouteToResource = (\n route: CommandResourceRoute,\n): McpResourceDefinition => ({\n uri: route.uriTemplate,\n name: route.name,\n description: route.command.description,\n mimeType: route.mimeType,\n});\n\nexport const commandResourceRouteToResourceTemplate = (\n route: CommandResourceRoute,\n): McpResourceTemplateDefinition => ({\n uriTemplate: route.uriTemplate,\n name: route.name,\n description: route.command.description,\n mimeType: route.mimeType,\n});\n\nexport const commandResourceInput = (route: CommandResourceRoute, uri: string | undefined) => {\n if (!uri) return undefined;\n\n const prefix = route.uriTemplate.split('{')[0] ?? '';\n if (!uri.startsWith(prefix)) return undefined;\n\n const values = uri.slice(prefix.length).split('/').filter(Boolean).map(decodeURIComponent);\n if (values.length !== route.inputNames.length) return undefined;\n\n return Object.fromEntries(\n route.inputNames.map((inputName, index) => [inputName, values[index] ?? '']),\n );\n};\n\nexport const isResourceTemplate = (uri: string) => resourceInputNames(uri).length > 0;\n\nexport const resourceResult = (params: unknown, data: unknown) => {\n const resourceRead = params as ResourceReadParams;\n return {\n contents: [\n {\n uri: resourceRead.uri ?? '',\n mimeType: DEFAULT_RESOURCE_MIME_TYPE,\n text: JSON.stringify({ data }, null, 2),\n },\n ],\n };\n};\n\nconst resourceInputNames = (uriTemplate: string) =>\n [...uriTemplate.matchAll(/\\{([^}]+)\\}/g)].flatMap((match) => {\n const inputName = match[1];\n return inputName ? [inputName] : [];\n });\n","import { type ZodType, z } from 'zod';\nimport { MCP_STATUS_COMPLETED, MCP_STATUS_ERROR } from './constants';\n\nexport const mcpToolOutputSchema = (dataSchema: ZodType) => ({\n type: 'object',\n properties: {\n data: z.toJSONSchema(dataSchema),\n progress: {\n type: 'object',\n properties: {\n count: { type: 'number' },\n elapsedMs: { type: 'number' },\n changed: { type: 'number' },\n errors: { type: 'array', items: { type: 'string' } },\n matched: { type: 'number' },\n nextCursor: { type: 'string' },\n processed: { type: 'number' },\n skipped: { type: 'number' },\n },\n required: ['elapsedMs', 'errors'],\n additionalProperties: false,\n },\n status: { type: 'string', enum: [MCP_STATUS_COMPLETED, MCP_STATUS_ERROR] },\n },\n required: ['data', 'progress', 'status'],\n additionalProperties: false,\n});\n\nexport const emptyMcpInputSchema = {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n} as const;\n","import type { Program } from '@caporal/core';\nimport type { ZodType, z } from 'zod';\nimport { createCommandMcpRoute } from '../mcp/router';\nimport type { CommandMcpRoute } from '../mcp/types';\nimport { type CommandDefinition, commandActionInput, registerCommand } from './metadata';\n\ntype CommandActionContext = {\n args: Record<string, unknown>;\n options: Record<string, unknown>;\n};\n\ntype ContextFactory<TContext> = () => Promise<TContext> | TContext;\n\ntype Handler<TInput, TResult> = {\n handle(input: TInput): Promise<TResult> | TResult;\n}['handle'];\n\ntype ContextHandler<TContext, TInput, TResult> = {\n handle(context: TContext, input: TInput): Promise<TResult> | TResult;\n}['handle'];\n\ntype CommandRegistrarContext<TContext> = {\n binName?: string;\n getContext?: ContextFactory<TContext>;\n};\n\nexport type CommandAdaptersReturn<TContext, THandler> = {\n cli: (program: Program, context?: CommandRegistrarContext<TContext>) => void;\n handler: THandler;\n mcp: (getContext?: ContextFactory<TContext>) => CommandMcpRoute;\n metadata: CommandDefinition;\n};\n\ntype CommandPrint<TContext, TInputSchema extends ZodType, TResult> = (\n output: TResult,\n input: z.infer<TInputSchema>,\n context?: TContext,\n) => Promise<void> | void;\n\ntype BaseCommandAdaptersOptions<\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = {\n metadata: CommandDefinition<TInputSchema, TOutputSchema>;\n print?: CommandPrint<unknown, TInputSchema, TResult>;\n};\n\ntype CommandAdaptersOptions<\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = BaseCommandAdaptersOptions<TInputSchema, TOutputSchema, TResult> & {\n handler: Handler<z.infer<TInputSchema>, TResult>;\n};\n\ntype ContextCommandAdaptersOptions<\n TContext,\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n> = Omit<BaseCommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>, 'print'> & {\n handler: ContextHandler<TContext, z.infer<TInputSchema>, TResult>;\n print?: CommandPrint<TContext, TInputSchema, TResult>;\n};\n\nexport function createCommandAdapters<\n TInputSchema extends ZodType = ZodType<Record<string, unknown>>,\n TOutputSchema extends ZodType = ZodType,\n TResult = unknown,\n>(\n options: CommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>,\n): CommandAdaptersReturn<unknown, Handler<z.infer<TInputSchema>, TResult>>;\nexport function createCommandAdapters<\n TContext,\n TInputSchema extends ZodType = ZodType<Record<string, unknown>>,\n TOutputSchema extends ZodType = ZodType,\n TResult = unknown,\n>(\n options: ContextCommandAdaptersOptions<TContext, TInputSchema, TOutputSchema, TResult>,\n): CommandAdaptersReturn<TContext, ContextHandler<TContext, z.infer<TInputSchema>, TResult>>;\nexport function createCommandAdapters<\n TContext,\n TInputSchema extends ZodType,\n TOutputSchema extends ZodType,\n TResult,\n>({\n handler,\n metadata,\n print,\n}:\n | CommandAdaptersOptions<TInputSchema, TOutputSchema, TResult>\n | ContextCommandAdaptersOptions<TContext, TInputSchema, TOutputSchema, TResult>) {\n const parseInput = ({ args, options }: CommandActionContext) =>\n metadata.inputSchema.parse(commandActionInput(metadata, args, options));\n\n const run = async (input: z.infer<TInputSchema>, context?: TContext) => {\n if (context === undefined) {\n return (handler as (input: z.infer<TInputSchema>) => Promise<TResult> | TResult)(input);\n }\n\n return (\n handler as (context: TContext, input: z.infer<TInputSchema>) => Promise<TResult> | TResult\n )(context, input);\n };\n\n return {\n metadata,\n cli: (program: Program, context?: CommandRegistrarContext<TContext>) => {\n registerCommand(program, metadata).action(async ({ args, options }) => {\n const input = parseInput({ args, options });\n const getContext = context?.getContext;\n const resolvedContext = getContext ? await getContext() : undefined;\n const output = await run(input, resolvedContext);\n\n await print?.(output, input, resolvedContext);\n return typeof output === 'number' ? output : undefined;\n });\n },\n handler,\n mcp: (getContext?: ContextFactory<TContext>): CommandMcpRoute =>\n createCommandMcpRoute({\n command: metadata,\n inputSchema: metadata.inputSchema,\n outputSchema: metadata.outputSchema,\n handler: async (args) =>\n run(args as z.infer<TInputSchema>, getContext ? await getContext() : undefined),\n }),\n };\n}\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n type CommandModuleImporter,\n commandDefinitionsFromModules,\n loadCommandModules,\n} from '../command/loader';\nimport type { CommandDefinition } from '../command/metadata';\nimport { commandOptionSynopsis } from '../command/metadata';\n\nexport type GenerateReadmeCommandDocsOptions = {\n binName: string;\n commandDefinitions?: readonly CommandDefinition[];\n commandsDir?: string;\n importCommandModule?: CommandModuleImporter;\n markerName?: string;\n readmePath?: string;\n};\n\nexport const generateReadmeCommandDocs = async ({\n binName,\n commandDefinitions = [],\n commandsDir = join(process.cwd(), 'src', 'commands'),\n importCommandModule,\n markerName = 'COMMANDS',\n readmePath = 'README.md',\n}: GenerateReadmeCommandDocsOptions) => {\n const readme = readFileSync(readmePath, 'utf8');\n const loadedCommandDefinitions = commandDefinitionsFromModules(\n await loadCommandModules(commandsDir, importCommandModule),\n );\n const generated = formatCommandDocs(\n [...commandDefinitions, ...loadedCommandDefinitions],\n binName,\n );\n writeFileSync(readmePath, replaceMarker(readme, markerName, generated), 'utf8');\n};\n\nexport const formatCommandDocs = (commands: readonly CommandDefinition[], binName: string) => {\n const visibleCommands = commands.filter(isVisibleCommand).sort(commandSort);\n const groups = [...parentCommands(visibleCommands)].map(([parent, subcommands]) =>\n parentCommandDocs(parent, subcommands, binName),\n );\n const standaloneCommands = visibleCommands.filter((command) => !command.name.includes(' '));\n if (standaloneCommands.length > 0) groups.push(otherCommandDocs(standaloneCommands, binName));\n\n const lines = groups.flatMap((commandLines, index) =>\n index === 0 ? commandLines : ['', ...commandLines],\n );\n return ['```sh', ...lines, '```'].join('\\n');\n};\n\nconst isVisibleCommand = (command: CommandDefinition) => command.config?.visible !== false;\n\nconst commandSort = (left: CommandDefinition, right: CommandDefinition) =>\n (left.order ?? 0) - (right.order ?? 0) || left.name.localeCompare(right.name);\n\nconst parentCommands = (commands: readonly CommandDefinition[]) => {\n const groups = new Map<string, CommandDefinition[]>();\n for (const command of commands) {\n const [parent, subcommand] = command.name.split(' ');\n if (!parent || !subcommand) continue;\n groups.set(parent, [...(groups.get(parent) ?? []), command]);\n }\n return [...groups.entries()].sort(([left], [right]) => left.localeCompare(right));\n};\n\nconst parentCommandDocs = (\n parent: string,\n commands: readonly CommandDefinition[],\n binName: string,\n) => [`# ${parent} commands`, ...commands.flatMap((command) => commandDocs(command, binName))];\n\nconst otherCommandDocs = (commands: readonly CommandDefinition[], binName: string) => [\n '# other commands',\n ...commands.flatMap((command) => commandDocs(command, binName)),\n];\n\nconst commandDocs = (command: CommandDefinition, binName: string) => [\n `${binName} ${command.name}${usageSuffix(command)}`,\n];\n\nconst usageSuffix = (command: CommandDefinition) => {\n const args = command.arguments?.map((arg) => arg.synopsis) ?? [];\n const options = command.options?.map((option) => optionUsage(option)) ?? [];\n const usage = [...args, ...options];\n return usage.length > 0 ? ` ${usage.join(' ')}` : '';\n};\n\nconst optionUsage = (option: NonNullable<CommandDefinition['options']>[number]) => {\n const synopsis = option.value ? commandOptionSynopsis(option) : `--${option.name}`;\n return option.config?.required ? synopsis : `[${synopsis}]`;\n};\n\nconst replaceMarker = (source: string, markerName: string, replacement: string) => {\n const startMarker = `<!-- <DYNFIELD:${markerName}> -->`;\n const endMarker = `<!-- </DYNFIELD:${markerName}> -->`;\n const hasOneMarkerPair =\n countOccurrences(source, startMarker) === 1 && countOccurrences(source, endMarker) === 1;\n if (!hasOneMarkerPair) throw new Error(`${readmeMarkerError(startMarker, endMarker)}`);\n\n const before = source.slice(0, source.indexOf(startMarker) + startMarker.length);\n const after = source.slice(source.indexOf(endMarker));\n return `${before}\\n${replacement}\\n${after}`;\n};\n\nconst readmeMarkerError = (startMarker: string, endMarker: string) =>\n `README must contain one ${startMarker} and one ${endMarker}`;\n\nconst countOccurrences = (source: string, value: string) => source.split(value).length - 1;\n","import { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport {\n type CommandAdapterExport,\n type CommandModuleImporter,\n commandExportsFromModules,\n isCommandAdapterExport,\n loadCommandModules,\n} from '../command/loader';\nimport { DEFAULT_COMMANDS_DIR } from '../constants';\nimport { packageCommandMetadata } from '../package/metadata';\nimport { createCommandMcpRouter } from './router';\nimport { createMcpServer } from './server';\nimport type {\n CommandMcpRoute,\n CommandMcpRouteFactory,\n CreateCommandMcpServerOptions,\n CreatePackageCommandMcpServerOptions,\n} from './types';\n\nexport const loadCommandMcpRoutes = async <TContext>(\n commandsDir: string,\n getContext: () => Promise<TContext> | TContext = () => undefined as TContext,\n importCommandModule?: CommandModuleImporter,\n): Promise<CommandMcpRoute[]> => {\n const modules = await loadCommandModules(commandsDir, importCommandModule);\n const factories = commandExportsFromModules<CommandAdapterExport>(modules, (_name, value) =>\n isCommandAdapterExport(value),\n ).flatMap((command) => (command.mcp ? [command.mcp as CommandMcpRouteFactory<TContext>] : []));\n\n return factories.map((factory) => factory(getContext)).filter((route) => route.command.mcp);\n};\n\nexport const createCommandMcpServer = async <TContext>({\n commandsDir,\n getContext,\n importCommandModule,\n importMetaUrl,\n name,\n prefix,\n}: CreateCommandMcpServerOptions<TContext>) => {\n const commandDirectory =\n commandsDir ?? join(dirname(fileURLToPath(importMetaUrl)), DEFAULT_COMMANDS_DIR);\n const { tools, resources, resourceTemplates, callTool, readResource } = createCommandMcpRouter({\n prefix,\n routes: await loadCommandMcpRoutes(commandDirectory, getContext, importCommandModule),\n });\n\n return createMcpServer({ name, tools, resources, resourceTemplates, callTool, readResource });\n};\n\nexport const startCommandMcpServer = async <TContext>(\n options: CreateCommandMcpServerOptions<TContext>,\n) => {\n await (await createCommandMcpServer(options)).start();\n};\n\nexport const startPackageCommandMcpServer = async <TContext>({\n importMetaUrl,\n mcpServerPrefix,\n name,\n prefix,\n ...options\n}: CreatePackageCommandMcpServerOptions<TContext>) => {\n const metadata = packageCommandMetadata(importMetaUrl, { mcpServerPrefix });\n\n await startCommandMcpServer({\n ...options,\n importMetaUrl,\n name: name ?? metadata.mcpServerName,\n prefix: prefix ?? metadata.mcpPrefix,\n });\n};\n","import { createInterface } from 'node:readline';\nimport {\n DEFAULT_MCP_SERVER_VERSION,\n EMPTY_DISPLAY_VALUE,\n JSON_RPC_INTERNAL_ERROR,\n JSON_RPC_METHOD_NOT_FOUND,\n JSON_RPC_VERSION,\n MCP_METHOD_INITIALIZE,\n MCP_METHOD_RESOURCES_LIST,\n MCP_METHOD_RESOURCES_READ,\n MCP_METHOD_RESOURCES_TEMPLATES_LIST,\n MCP_METHOD_TOOLS_CALL,\n MCP_METHOD_TOOLS_LIST,\n MCP_PROTOCOL_VERSION,\n} from './constants';\nimport { assertToolName } from './errors';\nimport { toolErrorResult, toolResult } from './progress';\nimport { resourceResult } from './resources';\nimport type {\n CreateMcpServerOptions,\n CreateSingleToolMcpServerOptions,\n JsonRpcRequest,\n ToolCallParams,\n} from './types';\n\nexport const createSingleToolMcpServer = ({\n serverName,\n tool,\n callTool,\n}: CreateSingleToolMcpServerOptions) => {\n return createMcpServer({\n name: serverName,\n tools: [tool],\n callTool: (params) => {\n const toolCall = params as ToolCallParams;\n assertToolName(tool.name, toolCall.name);\n return callTool(toolCall.arguments ?? {});\n },\n });\n};\n\nexport const createMcpServer = ({\n name,\n tools,\n resources = [],\n resourceTemplates = [],\n callTool,\n readResource,\n}: CreateMcpServerOptions) => {\n const send = (message: unknown) => {\n process.stdout.write(`${JSON.stringify(message)}\\n`);\n };\n\n const result = (id: JsonRpcRequest['id'], value: unknown) => {\n send({ jsonrpc: JSON_RPC_VERSION, id, result: value });\n };\n\n const error = (id: JsonRpcRequest['id'], code: number, message: string) => {\n send({ jsonrpc: JSON_RPC_VERSION, id, error: { code, message } });\n };\n\n const handleRequest = async (request: JsonRpcRequest) => {\n if (request.method === MCP_METHOD_INITIALIZE) {\n result(request.id, {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: { resources: {}, tools: {} },\n serverInfo: { name, version: DEFAULT_MCP_SERVER_VERSION },\n });\n return;\n }\n\n if (request.method === MCP_METHOD_TOOLS_LIST) {\n result(request.id, { tools });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_LIST) {\n result(request.id, { resources });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_TEMPLATES_LIST) {\n result(request.id, { resourceTemplates });\n return;\n }\n\n if (request.method === MCP_METHOD_RESOURCES_READ) {\n if (!readResource) {\n error(\n request.id,\n JSON_RPC_METHOD_NOT_FOUND,\n `Method not found: ${MCP_METHOD_RESOURCES_READ}`,\n );\n return;\n }\n\n const startedAt = Date.now();\n try {\n result(request.id, resourceResult(request.params, await readResource(request.params)));\n } catch (caught) {\n result(request.id, toolErrorResult(caught, startedAt));\n }\n return;\n }\n\n if (request.method === MCP_METHOD_TOOLS_CALL) {\n const startedAt = Date.now();\n try {\n result(request.id, toolResult(await callTool(request.params), startedAt));\n } catch (caught) {\n result(request.id, toolErrorResult(caught, startedAt));\n }\n return;\n }\n\n if (request.id !== undefined) {\n error(\n request.id,\n JSON_RPC_METHOD_NOT_FOUND,\n `Method not found: ${request.method ?? EMPTY_DISPLAY_VALUE}`,\n );\n }\n };\n\n return {\n start: async () => {\n const input = createInterface({ input: process.stdin });\n\n for await (const line of input) {\n if (!line.trim()) continue;\n\n try {\n await handleRequest(JSON.parse(line) as JsonRpcRequest);\n } catch (caught) {\n error(\n undefined,\n JSON_RPC_INTERNAL_ERROR,\n caught instanceof Error ? caught.message : String(caught),\n );\n }\n }\n },\n };\n};\n","import { mkdirSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { PROGRAM_NAME_ENV_SUFFIX } from '../constants';\nimport { packageEnvPrefix, packageRoot, readPackageJson } from '../package/json';\nimport { getBinDir, installCommandShim } from './shims';\n\nconst DEV_BIN_DIR_ENV_SUFFIX = '_DEV_BIN_DIR';\nconst SOURCE_CLI_PATH = 'src/cli.ts';\n\ntype DevCommandConfig = {\n binDirEnvName: string;\n cliPath: string;\n commandName: string;\n packageDir: string;\n programNameEnvName: string;\n};\n\ntype PackageDevCommandOptions = {\n commandName: string;\n};\n\ntype PackageDevCommandsOptions = {\n commandNames: readonly string[];\n};\n\nexport const installDevCommand = (config: DevCommandConfig) => {\n const binDir = getBinDir(config.binDirEnvName);\n mkdirSync(binDir, { recursive: true });\n installCommandShim(binDir, config);\n};\n\nexport const installPackageDevCommand = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n) => {\n installDevCommand(packageDevCommandConfig(importMetaUrl, options));\n};\n\nexport const installPackageDevCommands = (\n importMetaUrl: string,\n options: PackageDevCommandsOptions,\n) => {\n for (const commandName of options.commandNames) {\n installPackageDevCommand(importMetaUrl, { commandName });\n }\n};\n\nexport const uninstallDevCommand = (\n config: Pick<DevCommandConfig, 'binDirEnvName' | 'commandName'>,\n) => {\n const binDir = getBinDir(config.binDirEnvName);\n\n rmSync(join(binDir, config.commandName), { force: true });\n rmSync(join(binDir, `${config.commandName}.cmd`), { force: true });\n};\n\nexport const uninstallPackageDevCommand = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n) => {\n const { binDirEnvName, commandName } = packageDevCommandConfig(importMetaUrl, options);\n uninstallDevCommand({ binDirEnvName, commandName });\n};\n\nexport const uninstallPackageDevCommands = (\n importMetaUrl: string,\n options: PackageDevCommandsOptions,\n) => {\n for (const commandName of options.commandNames) {\n uninstallPackageDevCommand(importMetaUrl, { commandName });\n }\n};\n\nconst packageDevCommandConfig = (\n importMetaUrl: string,\n options: PackageDevCommandOptions,\n): DevCommandConfig => {\n const packageDir = packageRoot(importMetaUrl);\n const packageJson = readPackageJson(packageDir);\n const appEnvPrefix = packageEnvPrefix(packageJson.name);\n\n return {\n binDirEnvName: `${appEnvPrefix}${DEV_BIN_DIR_ENV_SUFFIX}`,\n cliPath: join(packageDir, SOURCE_CLI_PATH),\n commandName: options.commandName,\n packageDir,\n programNameEnvName: `${appEnvPrefix}${PROGRAM_NAME_ENV_SUFFIX}`,\n };\n};\n","import { execFileSync } from 'node:child_process';\nimport { chmodSync, rmSync, writeFileSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nconst POSIX_SHIM_MODE = 0o755;\nconst WINDOWS_PLATFORM = 'win32';\nconst NPM_COMMAND = 'npm';\nconst NPM_WINDOWS_COMMAND = 'npm.cmd';\nconst NPM_PREFIX_ARGS = ['config', 'get', 'prefix'];\nconst COMMAND_OUTPUT_ENCODING = 'utf8';\nconst WINDOWS_NPM_DIR = ['AppData', 'Roaming', 'npm'];\nconst NODE_MODULES_BIN = ['node_modules', '.bin'];\nconst TSX_BIN = 'tsx';\nconst TSX_WINDOWS_BIN = 'tsx.cmd';\n\nexport type DevCommandShimConfig = {\n cliPath: string;\n commandName: string;\n packageDir: string;\n programNameEnvName: string;\n};\n\nexport const installCommandShim = (binDir: string, config: DevCommandShimConfig) => {\n if (process.platform === WINDOWS_PLATFORM) {\n installWindowsShim(binDir, config);\n return;\n }\n\n installPosixShim(binDir, config);\n};\n\nexport const getBinDir = (envName: string) => {\n const envValue = process.env[envName];\n\n if (envValue) {\n return envValue;\n }\n\n if (process.platform === WINDOWS_PLATFORM) {\n return getNpmPrefix() ?? join(homedir(), ...WINDOWS_NPM_DIR);\n }\n\n return join(homedir(), '.local', 'bin');\n};\n\nconst installPosixShim = (binDir: string, config: DevCommandShimConfig) => {\n const target = join(binDir, config.commandName);\n rmSync(target, { force: true });\n writeFileSync(target, getPosixShim(config));\n chmodSync(target, POSIX_SHIM_MODE);\n};\n\nconst installWindowsShim = (binDir: string, config: DevCommandShimConfig) => {\n const target = join(binDir, `${config.commandName}.cmd`);\n rmSync(target, { force: true });\n writeFileSync(target, getWindowsShim(config));\n};\n\nconst getNpmPrefix = () => {\n try {\n return execFileSync(\n process.platform === WINDOWS_PLATFORM ? NPM_WINDOWS_COMMAND : NPM_COMMAND,\n NPM_PREFIX_ARGS,\n {\n encoding: COMMAND_OUTPUT_ENCODING,\n stdio: ['ignore', 'pipe', 'ignore'],\n },\n ).trim();\n } catch {\n return null;\n }\n};\n\nconst getPosixShim = (config: DevCommandShimConfig) => {\n return `#!/usr/bin/env sh\nset -eu\nexport ${config.programNameEnvName}=${config.commandName}\nexec ${shellQuote(join(config.packageDir, ...NODE_MODULES_BIN, TSX_BIN))} ${shellQuote(config.cliPath)} \"$@\"\n`;\n};\n\nconst getWindowsShim = (config: DevCommandShimConfig) => {\n return `@echo off\nset \"${config.programNameEnvName}=${config.commandName}\"\n\"${join(config.packageDir, ...NODE_MODULES_BIN, TSX_WINDOWS_BIN)}\" \"${config.cliPath}\" %*\n`;\n};\n\nconst shellQuote = (value: string) => {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n};\n"],"mappings":"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","names":["z","CompletionShell","program","join","PackageManager","importCommandModule","require","join","dirname","join","fileURLToPath","fileURLToPath","pathToFileURL","importCommandModule","z","EMPTY_DISPLAY_VALUE","EMPTY_DISPLAY_VALUE","z","z","z","EMPTY_DISPLAY_VALUE","readFileSync","join","join","importCommandModule","readFileSync","isVisibleCommand","parentCommands","dirname","join","fileURLToPath","EMPTY_DISPLAY_VALUE","importCommandModule","join","dirname","fileURLToPath","rmSync","join","writeFileSync","join","rmSync","join"]}
|