zinkee 0.1.48 → 0.1.50

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli-runner.ts","../src/utils/argv-rewrite.ts","../src/cli-examples.ts","../src/program.ts","../src/config.ts","../src/commands/shared.ts","../src/parsers/selectors.ts","../src/runtime-context.ts","../src/commands/config.ts","../src/api/automations.ts","../src/parsers/kv.ts","../src/commands/automations.ts","../src/api/comments.ts","../src/commands/comments.ts","../src/commands/displays.ts","../src/api/displays.ts","../src/parsers/expressions.ts","../src/commands/document-templates.ts","../src/api/document-templates.ts","../src/utils/file-transfers.ts","../src/commands/files.ts","../src/api/files.ts","../src/api/formulas.ts","../src/commands/formulas.ts","../src/api/logs.ts","../src/commands/logs.ts","../src/commands/navigation.ts","../src/api/navigation.ts","../src/commands/profiles.ts","../src/commands/records.ts","../src/api/records.ts","../src/api/schemas.ts","../src/commands/schemas.ts","../src/commands/teamspace.ts","../src/api/teamspace.ts","../src/completion/engine.ts","../src/completion/install.ts","../src/completion/scripts.ts","../src/completion/runtime.ts","../src/index.ts"],"sourcesContent":["import { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nimport chalk from \"chalk\";\n\nimport { extractExampleRequest, showExamples } from \"./cli-examples.js\";\nimport {\n extractCompletionFlag,\n handleCompletionFlag,\n isCompletionRequest,\n runCompletionRequest,\n} from \"./completion/runtime.js\";\nimport { buildProgram } from \"./program.js\";\nimport {\n buildOptionMetadata,\n hoistGlobalOptions,\n} from \"./utils/argv-rewrite.js\";\nimport {\n formatCliErrorJson,\n formatCliErrorText,\n getExitCode,\n} from \"./utils/errors.js\";\n\nfunction resolveExecutablePath(candidatePath: string): string {\n try {\n return realpathSync(candidatePath);\n } catch {\n return candidatePath;\n }\n}\n\nexport function isExecutedAsEntry(argvEntry: string | undefined, moduleUrl: string): boolean {\n if (!argvEntry) {\n return false;\n }\n\n return resolveExecutablePath(argvEntry) === resolveExecutablePath(fileURLToPath(moduleUrl));\n}\n\nexport async function runCli(argv: string[]): Promise<void> {\n try {\n if (isCompletionRequest()) {\n runCompletionRequest();\n return;\n }\n\n const completionFlag = extractCompletionFlag(argv);\n if (completionFlag) {\n const exitCode = handleCompletionFlag(completionFlag);\n process.exitCode = exitCode;\n return;\n }\n\n const program = buildProgram();\n const optionMeta = buildOptionMetadata(program);\n const exampleRequest = extractExampleRequest(argv, optionMeta);\n\n if (exampleRequest) {\n await showExamples(\n exampleRequest.commandName,\n exampleRequest.json,\n undefined,\n exampleRequest.filters,\n );\n process.exitCode = 0;\n return;\n }\n\n const rewrittenArgv = hoistGlobalOptions(argv, optionMeta);\n await program.parseAsync(rewrittenArgv);\n } catch (error) {\n const exitCode = getExitCode(error);\n\n if (argv.includes(\"--json\")) {\n process.stderr.write(`${formatCliErrorJson(error, { exitCode })}\\n`);\n } else {\n process.stderr.write(`${chalk.red(\"Error:\")} ${formatCliErrorText(error)}\\n`);\n }\n\n process.exitCode = exitCode;\n }\n}\n","import type { Command } from \"commander\";\n\nexport const HOISTABLE_GLOBAL_FLAGS = {\n \"--profile\": \"value\",\n \"--base-url\": \"value\",\n \"--api-key\": \"value\",\n \"--read-only\": \"boolean\",\n \"--json\": \"boolean\",\n} as const satisfies Record<string, \"value\" | \"boolean\">;\n\ntype HoistableFlagName = keyof typeof HOISTABLE_GLOBAL_FLAGS;\n\nfunction isHoistableFlag(flagName: string): flagName is HoistableFlagName {\n return Object.hasOwn(HOISTABLE_GLOBAL_FLAGS, flagName);\n}\n\nexport interface OptionMetadata {\n valueFlags: Set<string>;\n booleanFlags: Set<string>;\n localOptionsByCommand: Map<string, Set<string>>;\n commandPaths: string[];\n}\n\nfunction getCommandPath(command: Command): string {\n const parts: string[] = [];\n let cursor: Command | null = command;\n while (cursor && cursor.parent) {\n parts.unshift(cursor.name());\n cursor = cursor.parent;\n }\n return parts.join(\" \");\n}\n\nexport function buildOptionMetadata(program: Command): OptionMetadata {\n const valueFlags = new Set<string>();\n const booleanFlags = new Set<string>();\n const localOptionsByCommand = new Map<string, Set<string>>();\n const commandPaths: string[] = [];\n\n function visit(command: Command, isRoot: boolean): void {\n const localFlags = new Set<string>();\n\n for (const option of command.options) {\n if (!option.long) continue;\n\n if (option.required || option.optional) {\n valueFlags.add(option.long);\n } else {\n booleanFlags.add(option.long);\n }\n\n if (!isRoot) {\n localFlags.add(option.long);\n }\n }\n\n if (!isRoot) {\n const path = getCommandPath(command);\n localOptionsByCommand.set(path, localFlags);\n if (command.commands.length === 0) {\n commandPaths.push(path);\n }\n }\n\n for (const sub of command.commands) {\n visit(sub, false);\n }\n }\n\n visit(program, true);\n return { valueFlags, booleanFlags, localOptionsByCommand, commandPaths };\n}\n\ninterface FlagSplit {\n flagName: string;\n inlineValue: string | undefined;\n}\n\nfunction isFlagToken(token: string): boolean {\n return token.length > 1 && token.startsWith(\"-\");\n}\n\nfunction splitFlagToken(token: string): FlagSplit {\n if (token.startsWith(\"--\") && token.includes(\"=\")) {\n const eqIdx = token.indexOf(\"=\");\n return {\n flagName: token.slice(0, eqIdx),\n inlineValue: token.slice(eqIdx + 1),\n };\n }\n return { flagName: token, inlineValue: undefined };\n}\n\nfunction flagConsumesValue(flagName: string, optionMeta: OptionMetadata): boolean {\n if (optionMeta.valueFlags.has(flagName)) {\n return true;\n }\n if (optionMeta.booleanFlags.has(flagName)) {\n return false;\n }\n return true;\n}\n\ninterface OperandPosition {\n index: number;\n token: string;\n}\n\nexport function collectOperandTokens(\n userArgs: readonly string[],\n optionMeta: OptionMetadata,\n options: { skipFlag?: string } = {},\n): OperandPosition[] {\n const operands: OperandPosition[] = [];\n let i = 0;\n while (i < userArgs.length) {\n const token = userArgs[i] as string;\n\n if (token === \"--\") {\n break;\n }\n\n if (isFlagToken(token)) {\n const { flagName, inlineValue } = splitFlagToken(token);\n\n if (options.skipFlag !== undefined && flagName === options.skipFlag) {\n i += 1;\n continue;\n }\n\n if (inlineValue !== undefined) {\n i += 1;\n continue;\n }\n\n const consumes = flagConsumesValue(flagName, optionMeta);\n const next = userArgs[i + 1];\n if (consumes && next !== undefined && !isFlagToken(next)) {\n i += 2;\n } else {\n i += 1;\n }\n continue;\n }\n\n operands.push({ index: i, token });\n i += 1;\n }\n return operands;\n}\n\nexport interface CommandPathMatch {\n commandName: string;\n firstArgvIndex: number;\n lastArgvIndex: number;\n}\n\nexport function findCommandPath(\n operands: readonly OperandPosition[],\n commandPaths: readonly string[],\n): CommandPathMatch | null {\n if (operands.length === 0) return null;\n\n const commandsByLength = [...commandPaths].sort(\n (left, right) => right.split(\" \").length - left.split(\" \").length,\n );\n\n for (let start = 0; start < operands.length; start += 1) {\n for (const commandName of commandsByLength) {\n const parts = commandName.split(\" \");\n if (start + parts.length > operands.length) continue;\n\n let matches = true;\n for (let j = 0; j < parts.length; j += 1) {\n if (operands[start + j]!.token !== parts[j]) {\n matches = false;\n break;\n }\n }\n\n if (matches) {\n return {\n commandName,\n firstArgvIndex: operands[start]!.index,\n lastArgvIndex: operands[start + parts.length - 1]!.index,\n };\n }\n }\n }\n\n return null;\n}\n\nexport function hoistGlobalOptions(\n argv: readonly string[],\n optionMeta: OptionMetadata,\n): string[] {\n if (argv.length < 3) return [...argv];\n\n const userArgs = argv.slice(2);\n const operands = collectOperandTokens(userArgs, optionMeta);\n const cmdPath = findCommandPath(operands, optionMeta.commandPaths);\n\n if (!cmdPath) return [...argv];\n\n const localOptions =\n optionMeta.localOptionsByCommand.get(cmdPath.commandName) ?? new Set<string>();\n\n const hoisted: string[] = [];\n const remaining: string[] = [];\n let i = 0;\n\n while (i < userArgs.length) {\n const token = userArgs[i] as string;\n\n if (token === \"--\") {\n remaining.push(...userArgs.slice(i));\n break;\n }\n\n if (!isFlagToken(token)) {\n remaining.push(token);\n i += 1;\n continue;\n }\n\n const { flagName, inlineValue } = splitFlagToken(token);\n\n if (!isHoistableFlag(flagName)) {\n remaining.push(token);\n i += 1;\n continue;\n }\n\n const isAfterCommandPath = i > cmdPath.lastArgvIndex;\n const collidesWithLocal = localOptions.has(flagName);\n\n const target = isAfterCommandPath && collidesWithLocal ? remaining : hoisted;\n target.push(token);\n\n const spec = HOISTABLE_GLOBAL_FLAGS[flagName];\n if (spec === \"value\" && inlineValue === undefined) {\n const next = userArgs[i + 1];\n if (next !== undefined && !isFlagToken(next)) {\n target.push(next);\n i += 2;\n continue;\n }\n }\n\n i += 1;\n }\n\n return [argv[0] as string, argv[1] as string, ...hoisted, ...remaining];\n}\n","import {\n collectOperandTokens,\n findCommandPath,\n type OptionMetadata,\n} from \"./utils/argv-rewrite.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { buildJsonSuccess } from \"./utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface ExampleRequest {\n commandName: string;\n filters: {\n type?: string;\n };\n json: boolean;\n}\n\nfunction extractExampleFilters(tokens: readonly string[]): { type?: string } {\n const filters: { type?: string } = {};\n\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n\n if (token === \"--type\") {\n const value = tokens[index + 1];\n if (value && !value.startsWith(\"-\")) {\n filters.type = value;\n index += 1;\n }\n }\n }\n\n return filters;\n}\n\nexport function extractExampleRequest(\n argv: readonly string[],\n optionMeta: OptionMetadata,\n): ExampleRequest | null {\n if (!argv.includes(\"--example\")) {\n return null;\n }\n\n const userArgs = argv.slice(2);\n const operands = collectOperandTokens(userArgs, optionMeta, { skipFlag: \"--example\" });\n const cmdPath = findCommandPath(operands, optionMeta.commandPaths);\n\n if (!cmdPath) {\n const typed = operands.map((operand) => operand.token).join(\" \");\n\n if (typed.length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide a command after \"--example\".');\n }\n\n // The token(s) didn't resolve to a runnable command. If they form the prefix\n // of one or more registered commands, the user named a command group (e.g.\n // \"schemas\") — list its subcommands instead of the generic error.\n const subcommands = optionMeta.commandPaths.filter((name) =>\n name.startsWith(`${typed} `),\n );\n\n if (subcommands.length > 0) {\n const list = subcommands.map((name) => ` zinkee --example ${name}`).join(\"\\n\");\n throw new CliError(\n \"invalid_cli_usage\",\n `\"${typed}\" is a command group, not a runnable command. Available subcommands:\\n${list}`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Unknown command \"${typed}\".`);\n }\n\n const remainingTokens = userArgs.slice(cmdPath.lastArgvIndex + 1);\n\n return {\n commandName: cmdPath.commandName,\n filters: extractExampleFilters(remainingTokens),\n json: argv.includes(\"--json\"),\n };\n}\n\nexport async function showExamples(\n commandName: string,\n json: boolean,\n stdout?: CommandIo,\n filters: { type?: string } = {},\n): Promise<void> {\n const { getCommandExamples } = await import(\"./utils/examples.js\");\n const examples = getCommandExamples(commandName, filters);\n\n if (examples.length === 0) {\n throw new CliError(\"invalid_cli_usage\", `No examples registered for \"${commandName}\".`);\n }\n\n const writer = stdout ?? process.stdout;\n\n if (json) {\n writer.write(`${JSON.stringify(buildJsonSuccess({ examples }, { command: commandName }))}\\n`);\n return;\n }\n\n writer.write(\"Examples:\\n\");\n for (const [index, example] of examples.entries()) {\n writer.write(`\\n${index + 1}. ${example.description}\\n`);\n writer.write(` ${example.command}\\n`);\n\n if (example.raw) {\n writer.write(\" Equivalent JSON payload:\\n\");\n for (const line of example.raw.split(\"\\n\")) {\n writer.write(` ${line}\\n`);\n }\n }\n\n if (example.response) {\n writer.write(\" Example response:\\n\");\n for (const line of example.response.split(\"\\n\")) {\n writer.write(` ${line}\\n`);\n }\n }\n }\n}\n","import { createRequire } from \"node:module\";\n\nimport { Command } from \"commander\";\n\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerAutomationsCommands } from \"./commands/automations.js\";\nimport { registerCommentsCommands } from \"./commands/comments.js\";\nimport { registerDisplaysCommands } from \"./commands/displays.js\";\nimport { registerDocumentTemplatesCommands } from \"./commands/document-templates.js\";\nimport { registerFilesCommands } from \"./commands/files.js\";\nimport { registerFormulasCommands } from \"./commands/formulas.js\";\nimport { registerLogsCommands } from \"./commands/logs.js\";\nimport { registerNavigationCommands } from \"./commands/navigation.js\";\nimport { registerProfilesCommands } from \"./commands/profiles.js\";\nimport { registerRecordsCommands } from \"./commands/records.js\";\nimport { registerSchemasCommands } from \"./commands/schemas.js\";\nimport { registerTeamspaceCommands } from \"./commands/teamspace.js\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\") as { version: string };\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface BuildProgramOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport function buildProgram(options: BuildProgramOptions = {}): Command {\n const program = new Command();\n\n program\n .name(\"zinkee\")\n .description(\"CLI for Zinkee API v2\")\n .version(version)\n .enablePositionalOptions()\n .showHelpAfterError()\n .option(\"--profile <name>\", \"select a profile from config\")\n .option(\"--base-url <url>\", \"override the configured base URL\")\n .option(\"--api-key <token>\", \"override the configured API key\")\n .option(\"--read-only\", \"run in read-only mode\")\n .option(\"--example\", \"show examples for a command\")\n .option(\"--json\", \"emit JSON output\")\n .option(\"--install-completion [shell]\", \"install shell completion (bash, zsh, fish, powershell)\")\n .option(\"--show-completion [shell]\", \"print shell completion script for the current shell\");\n\n registerProfilesCommands(program, options);\n registerAutomationsCommands(program, options);\n registerConfigCommands(program, options);\n registerDisplaysCommands(program, options);\n registerDocumentTemplatesCommands(program, options);\n registerFilesCommands(program, options);\n registerFormulasCommands(program, options);\n registerNavigationCommands(program, options);\n registerSchemasCommands(program, options);\n registerRecordsCommands(program, options);\n registerCommentsCommands(program, options);\n registerLogsCommands(program, options);\n registerTeamspaceCommands(program, options);\n\n return program;\n}\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nimport { parseTOML, stringifyTOML } from \"confbox/toml\";\n\nimport type { AppConfig, ProfileConfig, RuntimeOverrides, ResolvedProfile } from \"./types.js\";\n\nexport const defaultConfigPath = join(homedir(), \".config\", \"zinkee\", \"config.toml\");\nexport const redactedSecretMask = \"********\";\nexport const ENV_API_KEY = \"ZINKEE_API_KEY\";\nexport const ENV_BASE_URL = \"ZINKEE_API_BASE_URL\";\nexport const ENV_PROFILE = \"ZINKEE_PROFILE\";\nexport const DEFAULT_PRODUCTION_BASE_URL = \"https://api-z2.zinkee.com\";\n\nexport class ProfileResolutionError extends Error {\n override name = \"ProfileResolutionError\";\n\n constructor(message: string) {\n super(message);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toStringValue(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction toNonEmptyString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized ? normalized : undefined;\n}\n\nfunction parseProfileConfig(value: unknown): ProfileConfig {\n const profile: ProfileConfig = {};\n\n if (!isRecord(value)) {\n return profile;\n }\n\n for (const [key, rawValue] of Object.entries(value)) {\n if (key === \"api_key\") {\n profile.apiKey = toStringValue(rawValue);\n continue;\n }\n\n if (key === \"base_url\") {\n profile.baseUrl = toStringValue(rawValue);\n continue;\n }\n\n profile[key] = rawValue;\n }\n\n return profile;\n}\n\nexport function parseConfig(toml: string): AppConfig {\n const parsed = parseTOML<unknown>(toml);\n const config: AppConfig = { profiles: {} };\n\n if (!isRecord(parsed)) {\n return config;\n }\n\n for (const [key, value] of Object.entries(parsed)) {\n if (key === \"default_profile\") {\n config.defaultProfile = toStringValue(value);\n continue;\n }\n\n if (key === \"profiles\") {\n if (!isRecord(value)) {\n continue;\n }\n\n for (const [profileName, profileValue] of Object.entries(value)) {\n config.profiles[profileName] = parseProfileConfig(profileValue);\n }\n\n continue;\n }\n\n config[key] = value;\n }\n\n return config;\n}\n\nexport function readConfig(filePath: string = defaultConfigPath): AppConfig {\n return parseConfig(readFileSync(filePath, \"utf8\"));\n}\n\nexport function readConfigIfExists(filePath: string = defaultConfigPath): AppConfig | undefined {\n try {\n return readConfig(filePath);\n } catch (error) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return undefined;\n }\n\n throw error;\n }\n}\n\nexport function readRuntimeConfig(filePath: string = defaultConfigPath): AppConfig {\n return readConfigIfExists(filePath) ?? { profiles: {} };\n}\n\nfunction serializeProfileConfig(profile: ProfileConfig): Record<string, unknown> {\n const serialized: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(profile)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"apiKey\") {\n serialized.api_key = value;\n continue;\n }\n\n if (key === \"baseUrl\") {\n serialized.base_url = value;\n continue;\n }\n\n serialized[key] = value;\n }\n\n return serialized;\n}\n\nexport function serializeConfig(config: AppConfig): string {\n const serialized: Record<string, unknown> = {};\n\n if (config.defaultProfile !== undefined) {\n serialized.default_profile = config.defaultProfile;\n }\n\n for (const [key, value] of Object.entries(config)) {\n if (key === \"defaultProfile\" || key === \"profiles\" || value === undefined) {\n continue;\n }\n\n serialized[key] = value;\n }\n\n const serializedProfiles = Object.fromEntries(\n Object.entries(config.profiles).map(([name, profile]) => [name, serializeProfileConfig(profile)]),\n );\n\n if (Object.keys(serializedProfiles).length > 0) {\n serialized.profiles = serializedProfiles;\n }\n\n return stringifyTOML(serialized).trimEnd().concat(\"\\n\");\n}\n\nexport function writeConfig(config: AppConfig, filePath: string = defaultConfigPath): void {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, serializeConfig(config), \"utf8\");\n}\n\nexport function setProfileConfig(\n config: AppConfig,\n profileName: string,\n updates: Partial<ProfileConfig>,\n): AppConfig {\n return {\n ...config,\n profiles: {\n ...config.profiles,\n [profileName]: {\n ...config.profiles[profileName],\n ...updates,\n },\n },\n };\n}\n\nexport function removeProfileConfig(config: AppConfig, profileName: string): AppConfig {\n const nextProfiles = { ...config.profiles };\n delete nextProfiles[profileName];\n\n return {\n ...config,\n defaultProfile:\n config.defaultProfile === profileName\n ? undefined\n : config.defaultProfile,\n profiles: nextProfiles,\n };\n}\n\nexport function setDefaultProfile(config: AppConfig, profileName: string): AppConfig {\n return {\n ...config,\n defaultProfile: profileName,\n };\n}\n\nexport function redactSecret(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value.length <= 4) {\n return redactedSecretMask;\n }\n\n return `${redactedSecretMask}${value.slice(-4)}`;\n}\n\nexport function redactProfile(profile: ProfileConfig): ProfileConfig {\n return {\n ...profile,\n apiKey: redactSecret(profile.apiKey),\n };\n}\n\nexport function redactConfig(config: AppConfig): AppConfig {\n return {\n ...config,\n profiles: Object.fromEntries(\n Object.entries(config.profiles).map(([name, profile]) => [name, redactProfile(profile)]),\n ),\n };\n}\n\nexport function resolveProfile(\n config: AppConfig,\n overrides: Pick<RuntimeOverrides, \"profile\" | \"baseUrl\" | \"apiKey\"> = {},\n): ResolvedProfile {\n const profileName = overrides.profile ?? config.defaultProfile;\n if (profileName) {\n const profile = config.profiles[profileName];\n\n if (!profile) {\n const label = overrides.profile ? \"Profile\" : \"Default profile\";\n throw new ProfileResolutionError(`${label} \"${profileName}\" not found in config.`);\n }\n\n return {\n ...profile,\n name: profileName,\n baseUrl: overrides.baseUrl ?? profile.baseUrl,\n apiKey: overrides.apiKey ?? profile.apiKey,\n };\n }\n\n throw new ProfileResolutionError(\"No profile could be resolved from config.\");\n}\n\nexport function validateBaseUrl(value: string, source: string = \"Base URL\"): string {\n let parsed: URL;\n\n try {\n parsed = new URL(value);\n } catch {\n throw new ProfileResolutionError(`${source} must be an absolute http(s) URL.`);\n }\n\n if (![\"http:\", \"https:\"].includes(parsed.protocol) || !parsed.host) {\n throw new ProfileResolutionError(`${source} must be an absolute http(s) URL.`);\n }\n\n return value.replace(/\\/+$/, \"\");\n}\n\nexport function readEnvApiKey(env: NodeJS.ProcessEnv = process.env): string | undefined {\n return toNonEmptyString(env[ENV_API_KEY]);\n}\n\nexport function readEnvBaseUrl(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const baseUrl = toNonEmptyString(env[ENV_BASE_URL]);\n if (!baseUrl) {\n return undefined;\n }\n\n return validateBaseUrl(baseUrl, `Environment variable ${ENV_BASE_URL}`);\n}\n\nexport function readEnvProfile(env: NodeJS.ProcessEnv = process.env): string | undefined {\n return toNonEmptyString(env[ENV_PROFILE]);\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { InvalidArgumentError, type Command } from \"commander\";\n\nimport { ApiClient } from \"../client.js\";\nimport { readRuntimeConfig } from \"../config.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable, type OutputWriter } from \"../utils/output.js\";\n\nexport type CommandIo = OutputWriter;\n\nexport function createCommandContext(command: Command, filePath: string) {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, command.optsWithGlobals<RuntimeOverrides>());\n\n if (!runtime.baseUrl) {\n throw new CliError(\n \"configuration_error\",\n `Resolved profile \"${runtime.profile}\" is missing a base URL.`,\n );\n }\n\n return {\n client: new ApiClient({ baseUrl: runtime.baseUrl, apiKey: runtime.apiKey }),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nexport function emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath?: string,\n meta: Record<string, unknown> = {},\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, {\n command: commandName,\n ...(configPath !== undefined ? { configPath } : {}),\n ...meta,\n })),\n );\n}\n\nexport function writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nexport function toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n throw new CliError(\"configuration_error\", `Config file not found at ${filePath}.`);\n }\n\n if (error instanceof Error) {\n throw new CliError(\"configuration_error\", error.message);\n }\n\n throw error;\n}\n\nexport function ensureWritable(\n commandName: string,\n readOnly: boolean,\n commandMode: \"write\" | \"destructive\",\n): void {\n if (readOnly) {\n throw new CliError(\n \"command_not_allowed_in_read_only_mode\",\n `Command \"${commandName}\" is not allowed in read-only mode.`,\n {\n commandMode,\n executionMode: \"read-only\",\n },\n );\n }\n}\n\nexport function parseUuidOrSlugSelector(input: string): NormalizedUuidOrSlug {\n try {\n return normalizeUuidOrSlug(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid selector.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nexport function parseNonNegativeInteger(input: string): number {\n if (!/^\\d+$/.test(input.trim())) {\n throw new InvalidArgumentError(`Expected a non-negative integer, received \"${input}\".`);\n }\n\n return Number(input);\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\n}\n\nexport function parseRawJsonObject(input: string, sourceLabel: string): JsonObject {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${sourceLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nexport function readRawObject(\n raw: string | undefined,\n rawFile: string | undefined,\n): JsonObject {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--raw\" or \"--raw-file\", not both.',\n );\n }\n\n if (raw) {\n return parseRawJsonObject(raw, \"--raw\");\n }\n\n if (rawFile) {\n let contents: string;\n\n try {\n contents = readFileSync(rawFile, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read raw payload from ${rawFile}: ${message}`,\n );\n }\n\n return parseRawJsonObject(contents, `--raw-file ${rawFile}`);\n }\n\n return {};\n}\n\nexport function readTextFile(filePath: string, label: string): string {\n try {\n return readFileSync(filePath, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read ${label} from ${filePath}: ${message}`,\n );\n }\n}\n\nfunction toTableRows(data: unknown): Record<string, unknown>[] {\n if (Array.isArray(data)) {\n return data.map((entry) => (isJsonObject(entry) ? entry : { value: entry }));\n }\n\n if (isJsonObject(data)) {\n return [data];\n }\n\n return [{ value: data }];\n}\n\nexport function emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n","export type SelectorKind = \"uuid\" | \"slug\";\n\nexport interface NormalizedUuidOrSlug {\n kind: SelectorKind;\n value: string;\n}\n\nconst uuidPattern =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function normalizeUuidOrSlug(input: string): NormalizedUuidOrSlug {\n const value = input.trim();\n\n if (!value) {\n throw new Error(\"Selector cannot be empty.\");\n }\n\n if (uuidPattern.test(value)) {\n return {\n kind: \"uuid\",\n value: value.toLowerCase(),\n };\n }\n\n return {\n kind: \"slug\",\n value,\n };\n}\n","import type { AppConfig, RuntimeContext, RuntimeOverrides } from \"./types.js\";\n\nimport {\n DEFAULT_PRODUCTION_BASE_URL,\n ENV_API_KEY,\n ENV_BASE_URL,\n readEnvApiKey,\n readEnvBaseUrl,\n readEnvProfile,\n resolveProfile,\n ProfileResolutionError,\n validateBaseUrl,\n} from \"./config.js\";\n\nexport function resolveRuntimeContext(\n config: AppConfig,\n overrides: RuntimeOverrides = {},\n): RuntimeContext {\n const envProfile = readEnvProfile();\n const envApiKey = readEnvApiKey();\n const envBaseUrl = readEnvBaseUrl();\n\n const flagBaseUrl =\n overrides.baseUrl !== undefined\n ? validateBaseUrl(overrides.baseUrl, '\"--base-url\"')\n : undefined;\n\n const profileOverride = overrides.profile ?? envProfile;\n const apiKeyOverride = overrides.apiKey ?? envApiKey;\n const baseUrlOverride = flagBaseUrl ?? envBaseUrl;\n\n if (apiKeyOverride && !baseUrlOverride) {\n throw new ProfileResolutionError(\n `Runtime API key was provided, but ${ENV_BASE_URL} or --base-url is missing.`,\n );\n }\n\n if (baseUrlOverride && !apiKeyOverride) {\n throw new ProfileResolutionError(\n `Runtime base URL was provided, but ${ENV_API_KEY} or --api-key is missing.`,\n );\n }\n\n if (apiKeyOverride && baseUrlOverride) {\n return {\n profile: profileOverride ?? \"runtime\",\n baseUrl: baseUrlOverride,\n apiKey: apiKeyOverride,\n readOnly: overrides.readOnly ?? false,\n json: overrides.json ?? false,\n };\n }\n\n const profile = resolveProfile(config, {\n profile: profileOverride,\n baseUrl: baseUrlOverride,\n apiKey: apiKeyOverride,\n });\n\n return {\n profile: profile.name,\n baseUrl: baseUrlOverride ?? profile.baseUrl ?? DEFAULT_PRODUCTION_BASE_URL,\n apiKey: apiKeyOverride ?? profile.apiKey,\n readOnly: overrides.readOnly ?? false,\n json: overrides.json ?? false,\n };\n}\n","import { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n readConfig,\n redactConfig,\n resolveProfile,\n} from \"../config.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n emitJson,\n toConfigurationError,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterConfigCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport function registerConfigCommands(\n program: Command,\n options: RegisterConfigCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const config = program.command(\"config\").description(\"Inspect local CLI config\");\n\n config\n .command(\"path\")\n .description(\"Show the effective config file path\")\n .action(function action(this: Command) {\n const data = { path: filePath };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config path\", data, filePath);\n return;\n }\n\n writeLine(stdout, filePath);\n });\n\n config\n .command(\"show\")\n .description(\"Show the local config with secrets redacted\")\n .action(function action(this: Command) {\n try {\n const data = redactConfig(readConfig(filePath));\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config show\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Default profile: ${data.defaultProfile ?? \"(none)\"}`);\n printTable(\n Object.entries(data.profiles).map(([name, profile]) => ({\n name,\n default: data.defaultProfile === name ? \"yes\" : \"\",\n baseUrl:\n typeof profile.baseUrl === \"string\"\n ? profile.baseUrl\n : \"\",\n apiKey:\n typeof profile.apiKey === \"string\"\n ? profile.apiKey\n : \"\",\n })),\n [\"name\", \"default\", \"baseUrl\", \"apiKey\"],\n stdout,\n );\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n });\n\n config\n .command(\"validate\")\n .description(\"Validate that the local config can resolve a profile\")\n .action(function action(this: Command) {\n try {\n const parsed = readConfig(filePath);\n const profile = resolveProfile(parsed);\n const data = {\n valid: true,\n profile: profile.name,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config validate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Config is valid. Resolved profile \"${profile.name}\".`);\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject, JsonValue } from \"../types.js\";\n\nexport interface ApiAutomationFolder {\n [key: string]: unknown;\n id?: string;\n name?: string;\n automationCount?: number;\n}\n\nexport interface ApiAutomation {\n [key: string]: unknown;\n id?: string;\n name?: string;\n description?: string;\n status?: string;\n folderId?: string;\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n trigger?: ApiAutomationTrigger;\n actions?: ApiAutomationAction[];\n}\n\nexport interface ApiAutomationTrigger {\n [key: string]: unknown;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface ApiAutomationAction {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface ApiAutomationPlugin {\n [key: string]: unknown;\n id?: string;\n name?: string;\n version?: string;\n}\n\nexport interface ApiAutomationConnection {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n scope?: string;\n active?: boolean;\n}\n\nexport interface ListAutomationsQuery {\n folderId?: string;\n status?: string;\n triggerType?: string;\n actionType?: string;\n pluginId?: string;\n search?: string;\n}\n\nexport interface MoveAutomationInput {\n automationId: string;\n targetFolderId: string;\n}\n\nexport interface CreateAutomationInput {\n [key: string]: unknown;\n name: string;\n description?: string;\n folderId?: string;\n trigger?: ApiAutomationTrigger;\n}\n\nexport interface UpdateAutomationInput {\n [key: string]: unknown;\n name?: string;\n description?: string;\n folderId?: string;\n}\n\nexport interface SetAutomationTriggerInput {\n [key: string]: unknown;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface MutationAutomationActionInput {\n [key: string]: unknown;\n type?: string;\n name?: string;\n config?: JsonObject;\n}\n\nexport interface SetAutomationFlowInput {\n [key: string]: unknown;\n entryActionIds?: string[];\n transitions?: Array<{ from: string; to: string }>;\n}\n\nexport interface SetAutomationWebhookInput {\n [key: string]: unknown;\n active?: boolean;\n idempotencyKeyPath?: string;\n eventTypePath?: string;\n allowedEventTypes?: string[];\n fieldMappings?: JsonValue[];\n}\n\nexport interface CreateAutomationConnectionInput {\n [key: string]: unknown;\n name: string;\n type: string;\n scope: string;\n ownerMemberId?: string;\n config?: JsonObject;\n secret?: Record<string, string>;\n active?: boolean;\n}\n\nexport interface UpdateAutomationConnectionInput {\n [key: string]: unknown;\n set?: Record<string, unknown>;\n unset?: string[];\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction appendQuery(path: string, query: URLSearchParams): string {\n const queryString = query.toString();\n return queryString.length > 0 ? `${path}?${queryString}` : path;\n}\n\nexport class AutomationsApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(): Promise<ApiAutomationFolder[]> {\n return this.client.getJson<ApiAutomationFolder[]>(\"/api/v2/automation-folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<ApiAutomationFolder> {\n return this.client.requestJson<ApiAutomationFolder>(\n \"/api/v2/automation-folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiAutomationFolder> {\n return this.client.requestJson<ApiAutomationFolder>(\n `/api/v2/automation-folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automation-folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveAutomation(input: MoveAutomationInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/automation-folders/automations:move\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n listAutomations(query: ListAutomationsQuery = {}): Promise<ApiAutomation[]> {\n const params = new URLSearchParams();\n\n if (query.folderId) {\n params.set(\"folderId\", query.folderId);\n }\n\n if (query.status) {\n params.set(\"status\", query.status);\n }\n\n if (query.triggerType) {\n params.set(\"triggerType\", query.triggerType);\n }\n\n if (query.actionType) {\n params.set(\"actionType\", query.actionType);\n }\n\n if (query.pluginId) {\n params.set(\"pluginId\", query.pluginId);\n }\n\n if (query.search) {\n params.set(\"search\", query.search);\n }\n\n return this.client.getJson<ApiAutomation[]>(\n appendQuery(\"/api/v2/automations\", params),\n );\n }\n\n getAutomation(automation: NormalizedUuidOrSlug): Promise<ApiAutomation> {\n return this.client.getJson<ApiAutomation>(\n `/api/v2/automations/${automation.value}`,\n );\n }\n\n createAutomation(input: CreateAutomationInput): Promise<ApiAutomation> {\n return this.client.requestJson<ApiAutomation>(\n \"/api/v2/automations\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateAutomation(\n automation: NormalizedUuidOrSlug,\n input: UpdateAutomationInput,\n ): Promise<ApiAutomation> {\n return this.client.requestJson<ApiAutomation>(\n `/api/v2/automations/${automation.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}`,\n { method: \"DELETE\" },\n );\n }\n\n activateAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}:activate`,\n { method: \"POST\" },\n );\n }\n\n deactivateAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}:deactivate`,\n { method: \"POST\" },\n );\n }\n\n getTrigger(automation: NormalizedUuidOrSlug): Promise<ApiAutomationTrigger> {\n return this.client.getJson<ApiAutomationTrigger>(\n `/api/v2/automations/${automation.value}/trigger`,\n );\n }\n\n setTrigger(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationTriggerInput,\n ): Promise<ApiAutomationTrigger> {\n return this.client.requestJson<ApiAutomationTrigger>(\n `/api/v2/automations/${automation.value}/trigger`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n listActions(automation: NormalizedUuidOrSlug): Promise<ApiAutomationAction[]> {\n return this.client.getJson<ApiAutomationAction[]>(\n `/api/v2/automations/${automation.value}/actions`,\n );\n }\n\n addAction(\n automation: NormalizedUuidOrSlug,\n input: MutationAutomationActionInput,\n ): Promise<ApiAutomationAction> {\n return this.client.requestJson<ApiAutomationAction>(\n `/api/v2/automations/${automation.value}/actions`,\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateAction(\n automation: NormalizedUuidOrSlug,\n actionId: string,\n input: MutationAutomationActionInput,\n ): Promise<ApiAutomationAction> {\n return this.client.requestJson<ApiAutomationAction>(\n `/api/v2/automations/${automation.value}/actions/${segment(actionId)}`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteAction(\n automation: NormalizedUuidOrSlug,\n actionId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/actions/${segment(actionId)}`,\n { method: \"DELETE\" },\n );\n }\n\n getFlow(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/flow`,\n );\n }\n\n setFlow(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationFlowInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/flow`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n getWebhook(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n );\n }\n\n setWebhook(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationWebhookInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteWebhook(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n { method: \"DELETE\" },\n );\n }\n\n listPlugins(): Promise<ApiAutomationPlugin[]> {\n return this.client.getJson<ApiAutomationPlugin[]>(\"/api/v2/automation-plugins\");\n }\n\n getPlugin(pluginId: string): Promise<ApiAutomationPlugin> {\n return this.client.getJson<ApiAutomationPlugin>(\n `/api/v2/automation-plugins/${segment(pluginId)}`,\n );\n }\n\n listConnections(): Promise<ApiAutomationConnection[]> {\n return this.client.getJson<ApiAutomationConnection[]>(\n \"/api/v2/automation-connections\",\n );\n }\n\n getConnection(connection: NormalizedUuidOrSlug): Promise<ApiAutomationConnection> {\n return this.client.getJson<ApiAutomationConnection>(\n `/api/v2/automation-connections/${connection.value}`,\n );\n }\n\n createConnection(\n input: CreateAutomationConnectionInput,\n ): Promise<ApiAutomationConnection> {\n return this.client.requestJson<ApiAutomationConnection>(\n \"/api/v2/automation-connections\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateConnection(\n connection: NormalizedUuidOrSlug,\n input: UpdateAutomationConnectionInput,\n ): Promise<ApiAutomationConnection> {\n return this.client.requestJson<ApiAutomationConnection>(\n `/api/v2/automation-connections/${connection.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteConnection(connection: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automation-connections/${connection.value}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import type { JsonValue } from \"../types.js\";\n\nexport interface KeyValueAssignment {\n key: string;\n value: string;\n}\n\nexport interface JsonKeyValueAssignment<TValue = JsonValue> {\n key: string;\n value: TValue;\n}\n\nfunction splitAssignment(input: string): [string, string] {\n const separatorIndex = input.indexOf(\"=\");\n\n if (separatorIndex === -1) {\n throw new Error(`Expected key=value assignment, got \"${input}\".`);\n }\n\n const key = input.slice(0, separatorIndex).trim();\n const value = input.slice(separatorIndex + 1).trim();\n\n if (!key) {\n throw new Error(`Expected a key before \"=\", got \"${input}\".`);\n }\n\n return [key, value];\n}\n\nexport function parseKeyValue(input: string): KeyValueAssignment {\n const [key, value] = splitAssignment(input);\n\n return { key, value };\n}\n\nexport function parseJsonAssignment<TValue = JsonValue>(\n input: string,\n): JsonKeyValueAssignment<TValue> {\n const [key, value] = splitAssignment(input);\n\n try {\n return {\n key,\n value: JSON.parse(value) as TValue,\n };\n } catch (cause) {\n throw new Error(`Expected ${key}=<json> assignment, got invalid JSON.`, { cause });\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n AutomationsApi,\n type ApiAutomation,\n type ApiAutomationAction,\n type ApiAutomationConnection,\n type ApiAutomationFolder,\n type ApiAutomationPlugin,\n type CreateAutomationConnectionInput,\n type CreateAutomationInput,\n type MutationAutomationActionInput,\n type SetAutomationFlowInput,\n type SetAutomationTriggerInput,\n type SetAutomationWebhookInput,\n type UpdateAutomationConnectionInput,\n type UpdateAutomationInput,\n} from \"../api/automations.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { parseJsonAssignment, parseKeyValue } from \"../parsers/kv.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject, JsonValue } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseNonNegativeInteger,\n parseUuidOrSlugSelector,\n readTextFile,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterAutomationsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderMutationCommandOptions {\n name?: string;\n}\n\ninterface FolderMoveCommandOptions {\n to?: NormalizedUuidOrSlug;\n}\n\ninterface AutomationListCommandOptions {\n folder?: NormalizedUuidOrSlug;\n status?: string;\n triggerType?: string;\n actionType?: string;\n plugin?: string;\n search?: string;\n}\n\ninterface TriggerPayloadCommandOptions {\n triggerType?: string;\n cron?: string;\n triggerSchema?: string;\n triggerField?: string[];\n condition?: string[];\n conditionJson?: string[];\n webhookEndpointId?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface AutomationCreateCommandOptions extends TriggerPayloadCommandOptions {\n name?: string;\n description?: string;\n folder?: NormalizedUuidOrSlug;\n}\n\ninterface AutomationUpdateCommandOptions {\n name?: string;\n description?: string;\n folder?: NormalizedUuidOrSlug;\n raw?: string;\n rawFile?: string;\n}\n\ninterface ActionMutationCommandOptions {\n type?: string;\n name?: string;\n targetSchema?: string;\n map?: string[];\n mapJson?: string[];\n condition?: string[];\n conditionJson?: string[];\n useTriggerRecord?: boolean;\n method?: string;\n url?: string;\n header?: string[];\n body?: string;\n bodyFile?: string;\n contentType?: string;\n timeoutMs?: number;\n var?: string[];\n authMode?: string;\n connection?: string;\n plugin?: string;\n arg?: string[];\n argJson?: string[];\n to?: string;\n subject?: string;\n message?: string;\n documentTemplate?: string;\n targetFileField?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface FlowSetCommandOptions {\n entry?: string[];\n transition?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ninterface WebhookSetCommandOptions {\n active?: boolean;\n idempotencyKeyPath?: string;\n eventTypePath?: string;\n allowedEventType?: string[];\n fieldMapping?: string[];\n fieldMappingFile?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ninterface ConnectionCreateCommandOptions {\n name?: string;\n type?: string;\n scope?: string;\n ownerMember?: string;\n config?: string;\n configFile?: string;\n secret?: string[];\n active?: boolean;\n raw?: string;\n rawFile?: string;\n}\n\ninterface ConnectionUpdateCommandOptions {\n set?: string[];\n unset?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ntype ConditionSpec = JsonObject & {\n field: string;\n comparator: string;\n values: JsonValue[];\n};\n\ntype TransitionSpec = JsonObject & {\n fromActionId: string;\n toActionId: string;\n};\n\nfunction createAutomationsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new AutomationsApi(client),\n ...runtime,\n };\n}\n\nfunction collectValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction readRawSetPayload(raw: JsonObject, label: string): JsonObject {\n const setValue = raw.set;\n\n if (setValue === undefined) {\n return {};\n }\n\n if (!isJsonObject(setValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} field \"set\" to be a JSON object.`,\n );\n }\n\n return { ...setValue };\n}\n\nfunction readRawUnsetPayload(raw: JsonObject, label: string): string[] {\n const unsetValue = raw.unset;\n\n if (unsetValue === undefined) {\n return [];\n }\n\n if (!Array.isArray(unsetValue) || !unsetValue.every((value) => typeof value === \"string\")) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} field \"unset\" to be an array of strings.`,\n );\n }\n\n return [...unsetValue];\n}\n\nfunction splitRawPatchPayload(\n raw: JsonObject,\n label: string,\n): { set: JsonObject; unset: string[] } {\n const set: JsonObject = { ...raw };\n delete set.set;\n delete set.unset;\n\n return {\n set: {\n ...set,\n ...readRawSetPayload(raw, label),\n },\n unset: readRawUnsetPayload(raw, label),\n };\n}\n\nfunction setNestedPath(target: JsonObject, path: readonly string[], value: JsonValue): void {\n const [head, ...tail] = path;\n\n if (!head) {\n return;\n }\n\n if (tail.length === 0) {\n target[head] = value;\n return;\n }\n\n const next = isJsonObject(target[head]) ? { ...target[head] } : {};\n target[head] = next;\n setNestedPath(next, tail, value);\n}\n\nfunction hasSetPath(target: JsonObject, path: string): boolean {\n if (Object.hasOwn(target, path)) {\n return true;\n }\n\n const segments = path.split(\".\").filter(Boolean);\n\n if (segments.length <= 1) {\n return Object.hasOwn(target, path);\n }\n\n let current: unknown = target;\n\n for (const segment of segments) {\n if (!isJsonObject(current) || !Object.hasOwn(current, segment)) {\n return false;\n }\n\n current = current[segment];\n }\n\n return true;\n}\n\nfunction parseJsonValue(input: string, sourceLabel: string): JsonValue {\n try {\n return JSON.parse(input) as JsonValue;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n}\n\nfunction parseJsonObject(input: string, sourceLabel: string): JsonObject {\n const parsed = parseJsonValue(input, sourceLabel);\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${sourceLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nfunction readJsonValueOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonValue | undefined {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Provide either \"${rawLabel}\" or \"${rawFileLabel}\", not both.`,\n );\n }\n\n if (raw) {\n return parseJsonValue(raw, rawLabel);\n }\n\n if (rawFile) {\n return parseJsonValue(readTextFile(rawFile, rawFileLabel), `${rawFileLabel} ${rawFile}`);\n }\n\n return undefined;\n}\n\nfunction readJsonObjectOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonObject {\n return (\n readJsonValueOption(raw, rawFile, rawLabel, rawFileLabel) ?? {}\n ) as JsonObject;\n}\n\nconst NO_VALUE_COMPARATORS = new Set([\n \"chg\",\n \"changes\",\n \"ie\",\n \"is_empty\",\n \"ine\",\n \"is_not_empty\",\n]);\n\nfunction isNoValueComparator(comparator: string): boolean {\n return NO_VALUE_COMPARATORS.has(comparator.toLowerCase());\n}\n\nfunction conditionFormatError(input: string): CliError {\n return new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, or field:comparator for comparators without value (chg, ie, ine), received \"${input}\".`,\n );\n}\n\nfunction parseCondition(input: string): ConditionSpec {\n const firstSeparator = input.indexOf(\":\");\n const secondSeparator = input.indexOf(\":\", firstSeparator + 1);\n\n if (firstSeparator <= 0) {\n throw conditionFormatError(input);\n }\n\n if (secondSeparator === -1) {\n const field = input.slice(0, firstSeparator).trim();\n const comparator = input.slice(firstSeparator + 1).trim();\n\n if (!field || !comparator || !isNoValueComparator(comparator)) {\n throw conditionFormatError(input);\n }\n\n return { field, comparator, values: [] };\n }\n\n if (secondSeparator <= firstSeparator + 1) {\n throw conditionFormatError(input);\n }\n\n const field = input.slice(0, firstSeparator).trim();\n const comparator = input.slice(firstSeparator + 1, secondSeparator).trim();\n const value = input.slice(secondSeparator + 1).trim();\n\n if (!field || !comparator || !value) {\n throw conditionFormatError(input);\n }\n\n return {\n field,\n comparator,\n values: value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean),\n };\n}\n\nfunction parseJsonCondition(input: string, label: string): ConditionSpec {\n const parsed = parseJsonObject(input, label);\n const field = typeof parsed.field === \"string\" ? parsed.field.trim() : \"\";\n const comparator = typeof parsed.comparator === \"string\" ? parsed.comparator.trim() : \"\";\n const values = parsed.values;\n\n if (!field || !comparator || !Array.isArray(values)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to contain {\"field\",\"comparator\",\"values\"}.`,\n );\n }\n\n return {\n ...parsed,\n field,\n comparator,\n values: [...values],\n };\n}\n\nfunction parseTransition(input: string): TransitionSpec {\n const separatorIndex = input.indexOf(\":\");\n\n if (separatorIndex <= 0 || separatorIndex === input.length - 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected transition in the form from:to, received \"${input}\".`,\n );\n }\n\n const fromActionId = input.slice(0, separatorIndex).trim();\n const toActionId = input.slice(separatorIndex + 1).trim();\n\n if (!fromActionId || !toActionId) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected transition in the form from:to, received \"${input}\".`,\n );\n }\n\n return { fromActionId, toActionId };\n}\n\nfunction parseStringAssignments(values: readonly string[] | undefined): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const value of values ?? []) {\n const assignment = parseKeyValue(value);\n result[assignment.key] = assignment.value;\n }\n\n return result;\n}\n\nfunction parseJsonAssignments(values: readonly string[] | undefined): JsonObject {\n const result: JsonObject = {};\n\n for (const value of values ?? []) {\n const assignment = parseJsonAssignment<JsonValue>(value);\n result[assignment.key] = assignment.value;\n }\n\n return result;\n}\n\nfunction mergeMappings(\n stringAssignments: readonly string[] | undefined,\n jsonAssignments: readonly string[] | undefined,\n): JsonObject {\n return {\n ...parseStringAssignments(stringAssignments),\n ...parseJsonAssignments(jsonAssignments),\n };\n}\n\nconst AUTOMATION_SOURCE_TYPES = new Set([\"TRIGGER\", \"PREVIOUS_ACTION\"]);\n\ntype AutomationSourceType = \"TRIGGER\" | \"PREVIOUS_ACTION\";\n\ntype AutomationValueSource = JsonObject & {\n type: AutomationSourceType;\n id: string;\n};\n\ntype AutomationResolvedValue = JsonObject & {\n rawValue: JsonValue | null;\n source: AutomationValueSource | null;\n};\n\nfunction isAutomationValueSource(value: unknown): value is AutomationValueSource {\n return (\n isJsonObject(value) &&\n typeof value.type === \"string\" &&\n AUTOMATION_SOURCE_TYPES.has(value.type) &&\n typeof value.id === \"string\" &&\n value.id.trim().length > 0\n );\n}\n\nfunction looksLikeAutomationResolvedValue(value: unknown): value is JsonObject {\n if (!isJsonObject(value)) {\n return false;\n }\n\n if (\"rawValue\" in value) {\n return true;\n }\n\n if (!Object.hasOwn(value, \"source\")) {\n return false;\n }\n\n return value.source === null || isAutomationValueSource(value.source);\n}\n\nfunction normalizeAutomationResolvedValue(\n value: JsonValue,\n label: string,\n options: { allowSource: boolean },\n): AutomationResolvedValue {\n if (!looksLikeAutomationResolvedValue(value)) {\n return {\n rawValue: value,\n source: null,\n };\n }\n\n const rawValue = Object.hasOwn(value, \"rawValue\") ? (value.rawValue as JsonValue | null) : undefined;\n const sourceValue = Object.hasOwn(value, \"source\") ? value.source : undefined;\n const hasRawValue = rawValue !== undefined && rawValue !== null;\n const hasSource = sourceValue !== undefined && sourceValue !== null;\n\n if (hasRawValue === hasSource) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to define exactly one of \"rawValue\" or \"source\".`,\n );\n }\n\n if (hasSource) {\n if (!options.allowSource) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to use only literal \"rawValue\" values.`,\n );\n }\n\n if (!isAutomationValueSource(sourceValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} \"source\" to contain a valid automation source reference.`,\n );\n }\n\n return {\n rawValue: null,\n source: {\n type: sourceValue.type,\n id: sourceValue.id,\n },\n };\n }\n\n return {\n rawValue: rawValue ?? null,\n source: null,\n };\n}\n\nfunction normalizeAutomationFieldMapping(mapping: JsonObject, label: string): JsonObject {\n const normalized: JsonObject = {};\n\n for (const [field, value] of Object.entries(mapping)) {\n normalized[field] = normalizeAutomationResolvedValue(\n value as JsonValue,\n `${label} \"${field}\"`,\n { allowSource: true },\n );\n }\n\n return normalized;\n}\n\nfunction normalizeAutomationConditions(\n conditions: readonly unknown[],\n label: string,\n options: { allowSource: boolean },\n): ConditionSpec[] {\n return conditions.map((condition, index) => {\n if (!isJsonObject(condition)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to be a JSON object.`,\n );\n }\n\n const field = typeof condition.field === \"string\" ? condition.field.trim() : \"\";\n const comparator = typeof condition.comparator === \"string\" ? condition.comparator.trim() : \"\";\n const values = condition.values;\n\n const allowsEmptyValues = isNoValueComparator(comparator);\n if (!field || !comparator || !Array.isArray(values) || (values.length === 0 && !allowsEmptyValues)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to contain \"field\", \"comparator\", and a non-empty \"values\" array (comparators without value, e.g. chg/ie/ine, accept an empty array).`,\n );\n }\n\n return {\n ...condition,\n field,\n comparator,\n values: values.map((value, valueIndex) =>\n normalizeAutomationResolvedValue(\n value as JsonValue,\n `${label} ${index + 1} value ${valueIndex + 1}`,\n options,\n ),\n ),\n };\n });\n}\n\nfunction readConditions(\n literalConditions: readonly string[] | undefined,\n jsonConditions: readonly string[] | undefined,\n label: string,\n): ConditionSpec[] {\n return [\n ...(literalConditions ?? []).map(parseCondition),\n ...(jsonConditions ?? []).map((value, index) =>\n parseJsonCondition(value, `${label} ${index + 1}`),\n ),\n ];\n}\n\nfunction resolveFolder(\n folders: readonly ApiAutomationFolder[],\n selector: NormalizedUuidOrSlug,\n): ApiAutomationFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n\n if (match) {\n return match;\n }\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiAutomationFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nasync function resolveFolderSelector(\n api: AutomationsApi,\n selector: NormalizedUuidOrSlug | undefined,\n): Promise<NormalizedUuidOrSlug | undefined> {\n if (!selector) {\n return undefined;\n }\n\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const folders = await api.listFolders();\n const resolved = resolveFolder(folders, selector);\n\n if (typeof resolved.id !== \"string\" || resolved.id.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is missing an id in the API response.`,\n );\n }\n\n return { kind: \"uuid\", value: resolved.id };\n}\n\nfunction folderRows(folders: readonly ApiAutomationFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id ?? \"\",\n name: folder.name ?? \"\",\n automationCount: folder.automationCount ?? \"\",\n }));\n}\n\nfunction automationRows(automations: readonly ApiAutomation[]): Record<string, unknown>[] {\n return automations.map((automation) => ({\n id: automation.id ?? \"\",\n name: automation.name ?? \"\",\n status: automation.status ?? \"\",\n triggerType:\n isJsonObject(automation.trigger) && typeof automation.trigger.type === \"string\"\n ? automation.trigger.type\n : \"\",\n actionCount: Array.isArray(automation.actions) ? automation.actions.length : \"\",\n ...folderColumns(automation.folder),\n }));\n}\n\nfunction actionRows(actions: readonly ApiAutomationAction[]): Record<string, unknown>[] {\n return actions.map((action) => ({\n id: action.id ?? \"\",\n name: action.name ?? \"\",\n type: action.type ?? \"\",\n }));\n}\n\nfunction pluginRows(plugins: readonly ApiAutomationPlugin[]): Record<string, unknown>[] {\n return plugins.map((plugin) => ({\n id: plugin.id ?? \"\",\n name: plugin.name ?? \"\",\n version: plugin.version ?? \"\",\n }));\n}\n\nfunction connectionRows(\n connections: readonly ApiAutomationConnection[],\n): Record<string, unknown>[] {\n return connections.map((connection) => ({\n id: connection.id ?? \"\",\n name: connection.name ?? \"\",\n type: connection.type ?? \"\",\n scope: connection.scope ?? \"\",\n active: connection.active ?? \"\",\n }));\n}\n\nfunction buildFolderMutationInput(\n options: FolderMutationCommandOptions,\n requireName: boolean,\n): Record<string, unknown> {\n const input: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (requireName && typeof input.name !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n\n if (!requireName && isEmptyObject(input)) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder updates via \"--name\".');\n }\n\n return input;\n}\n\nfunction buildTriggerInput(\n options: TriggerPayloadCommandOptions,\n mode: \"optional\" | \"required\",\n): SetAutomationTriggerInput | undefined {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n const config = isJsonObject(input.config) ? { ...input.config } : {};\n\n if (options.triggerType !== undefined) {\n input.type = options.triggerType;\n }\n\n if (options.cron !== undefined) {\n config.cronExpression = options.cron;\n }\n\n if (options.triggerSchema !== undefined) {\n config.schemaId = options.triggerSchema;\n }\n\n if ((options.triggerField?.length ?? 0) > 0) {\n config.fieldIds = [...(options.triggerField ?? [])];\n }\n\n const conditions = readConditions(options.condition, options.conditionJson, \"--condition-json\");\n if (conditions.length > 0) {\n config.conditions = conditions;\n }\n\n if (options.webhookEndpointId !== undefined) {\n config.webhookEndpointId = options.webhookEndpointId;\n }\n\n if (!isEmptyObject(config)) {\n if (Array.isArray(config.conditions)) {\n config.conditions = normalizeAutomationConditions(\n config.conditions,\n \"trigger condition\",\n { allowSource: false },\n );\n }\n\n input.config = config;\n }\n\n if (isEmptyObject(input)) {\n if (mode === \"optional\") {\n return undefined;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide trigger input via \"--trigger-type\", trigger flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationTriggerInput;\n}\n\nasync function buildAutomationCreateInput(\n api: AutomationsApi,\n options: AutomationCreateCommandOptions,\n): Promise<CreateAutomationInput> {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n const folder = await resolveFolderSelector(api, options.folder);\n if (folder) {\n input.folderId = folder.value;\n }\n\n const trigger = buildTriggerInput(options, \"optional\");\n if (trigger) {\n input.trigger = trigger;\n }\n\n if (typeof input.name !== \"string\" || input.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide automation name via \"--name\".');\n }\n\n return input as CreateAutomationInput;\n}\n\nasync function buildAutomationUpdateInput(\n api: AutomationsApi,\n options: AutomationUpdateCommandOptions,\n): Promise<UpdateAutomationInput> {\n const raw = readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\");\n const { set: rawSet, unset: rawUnset } = splitRawPatchPayload(raw, \"raw automation update payload\");\n const setPayload: JsonObject = { ...rawSet };\n\n if (options.name !== undefined) {\n setPayload.name = options.name;\n }\n\n if (options.description !== undefined) {\n setPayload.description = options.description;\n }\n\n const folder = await resolveFolderSelector(api, options.folder);\n if (folder) {\n setPayload.folderId = folder.value;\n }\n\n const unsetPayload = rawUnset.filter((path) => !hasSetPath(setPayload, path));\n const input: UpdateAutomationInput = {};\n\n if (!isEmptyObject(setPayload)) {\n input.set = setPayload;\n }\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide automation updates via \"--name\", \"--description\", \"--folder\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as UpdateAutomationInput;\n}\n\nfunction buildActionInput(\n options: ActionMutationCommandOptions,\n mode: \"create\" | \"update\",\n): MutationAutomationActionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n const config = isJsonObject(input.config) ? { ...input.config } : {};\n const mappings = mergeMappings(options.map, options.mapJson);\n const headers = parseStringAssignments(options.header);\n const variables = parseStringAssignments(options.var);\n const args = mergeMappings(options.arg, options.argJson);\n const body = readJsonValueOption(options.body, options.bodyFile, \"--body\", \"--body-file\");\n\n if (options.type !== undefined) {\n input.type = options.type;\n }\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.targetSchema !== undefined) {\n config.targetSchemaId = options.targetSchema;\n }\n\n if (options.to !== undefined) {\n mappings.recipients = options.to;\n }\n\n if (options.subject !== undefined) {\n mappings.subject = options.subject;\n }\n\n if (options.message !== undefined) {\n mappings.body = options.message;\n }\n\n if (!isEmptyObject(mappings)) {\n config.fieldMapping = mappings;\n }\n\n const conditions = readConditions(options.condition, options.conditionJson, \"--condition-json\");\n if (conditions.length > 0) {\n config.conditions = conditions;\n }\n\n if (options.useTriggerRecord === true) {\n config.useTriggerRecord = true;\n }\n\n if (options.method !== undefined) {\n config.method = options.method.toUpperCase();\n }\n\n if (options.url !== undefined) {\n config.url = options.url;\n }\n\n if (!isEmptyObject(headers)) {\n config.headers = headers;\n }\n\n if (body !== undefined) {\n config.body = body;\n }\n\n if (options.contentType !== undefined) {\n config.contentType = options.contentType;\n }\n\n if (options.timeoutMs !== undefined) {\n config.timeoutMs = options.timeoutMs;\n }\n\n if (!isEmptyObject(variables)) {\n config.variables = variables;\n }\n\n if (options.authMode !== undefined) {\n config.authMode = options.authMode;\n }\n\n if (options.connection !== undefined) {\n config.connectionId = options.connection;\n }\n\n if (options.plugin !== undefined) {\n config.pluginId = options.plugin;\n }\n\n if (!isEmptyObject(args)) {\n config.pluginArgs = args;\n }\n\n if (options.documentTemplate !== undefined) {\n config.documentTemplateId = options.documentTemplate;\n }\n\n if (options.targetFileField !== undefined) {\n config.targetFileFieldId = options.targetFileField;\n }\n\n if (!isEmptyObject(config)) {\n if (isJsonObject(config.fieldMapping)) {\n config.fieldMapping = normalizeAutomationFieldMapping(\n config.fieldMapping,\n \"field mapping\",\n );\n }\n\n if (Array.isArray(config.conditions)) {\n config.conditions = normalizeAutomationConditions(\n config.conditions,\n \"action condition\",\n { allowSource: true },\n );\n }\n\n if (config.useTriggerRecord === true) {\n delete config.conditions;\n }\n\n input.config = config;\n }\n\n if (mode === \"create\" && typeof input.type !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide action type via \"--type\" or \"--raw\".');\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide action input via flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as MutationAutomationActionInput;\n}\n\nfunction buildFlowInput(options: FlowSetCommandOptions): SetAutomationFlowInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if ((options.entry?.length ?? 0) > 0) {\n input.entryActionIds = [...(options.entry ?? [])];\n }\n\n if ((options.transition?.length ?? 0) > 0) {\n input.transitions = (options.transition ?? []).map(parseTransition);\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide flow input via \"--entry\", \"--transition\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationFlowInput;\n}\n\nfunction readWebhookFieldMappings(options: WebhookSetCommandOptions): JsonValue[] {\n const mappings: JsonValue[] = [];\n\n for (const value of options.fieldMapping ?? []) {\n mappings.push(parseJsonValue(value, \"--field-mapping\"));\n }\n\n for (const filePath of options.fieldMappingFile ?? []) {\n mappings.push(\n parseJsonValue(\n readTextFile(filePath, \"--field-mapping-file\"),\n `--field-mapping-file ${filePath}`,\n ),\n );\n }\n\n return mappings;\n}\n\nfunction buildWebhookInput(options: WebhookSetCommandOptions): SetAutomationWebhookInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.active === true) {\n input.active = true;\n }\n\n if (options.idempotencyKeyPath !== undefined) {\n input.idempotencyKeyJsonPath = options.idempotencyKeyPath;\n }\n\n if (options.eventTypePath !== undefined) {\n input.eventTypeJsonPath = options.eventTypePath;\n }\n\n if ((options.allowedEventType?.length ?? 0) > 0) {\n input.allowedEventTypes = [...(options.allowedEventType ?? [])];\n }\n\n const fieldMappings = readWebhookFieldMappings(options);\n if (fieldMappings.length > 0) {\n input.fieldMappings = fieldMappings;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide webhook input via flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationWebhookInput;\n}\n\nfunction buildConnectionCreateInput(\n options: ConnectionCreateCommandOptions,\n): CreateAutomationConnectionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.type !== undefined) {\n input.type = options.type;\n }\n\n if (options.scope !== undefined) {\n input.scope = options.scope;\n }\n\n if (options.ownerMember !== undefined) {\n input.ownerMemberId = options.ownerMember;\n }\n\n const config = readJsonValueOption(options.config, options.configFile, \"--config\", \"--config-file\");\n if (config !== undefined) {\n if (!isJsonObject(config)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Expected \"--config\" or \"--config-file\" to contain a JSON object.',\n );\n }\n\n input.config = config;\n }\n\n const secrets = parseStringAssignments(options.secret);\n if (!isEmptyObject(secrets)) {\n input.secret = secrets;\n }\n\n if (options.active === true) {\n input.active = true;\n }\n\n if (typeof input.name !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection name via \"--name\".');\n }\n\n if (typeof input.type !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection type via \"--type\".');\n }\n\n if (typeof input.scope !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection scope via \"--scope\".');\n }\n\n return input as CreateAutomationConnectionInput;\n}\n\nfunction buildConnectionUpdateInput(\n options: ConnectionUpdateCommandOptions,\n): UpdateAutomationConnectionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as UpdateAutomationConnectionInput;\n const setPayload = readRawSetPayload(input as JsonObject, \"raw connection update payload\");\n\n for (const value of options.set ?? []) {\n const assignment = parseKeyValue(value);\n\n if (assignment.key.startsWith(\"config.\")) {\n setNestedPath(setPayload, assignment.key.split(\".\").filter(Boolean), assignment.value);\n continue;\n }\n\n setPayload[assignment.key] = assignment.value;\n }\n\n if (!isEmptyObject(setPayload)) {\n input.set = setPayload;\n }\n\n const unsetPayload = [\n ...readRawUnsetPayload(input as JsonObject, \"raw connection update payload\"),\n ...(options.unset ?? []),\n ].filter((path) => !hasSetPath(setPayload, path));\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n } else {\n delete input.unset;\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide connection updates via \"--set\", \"--unset\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as UpdateAutomationConnectionInput;\n}\n\nfunction addTriggerPayloadOptions(command: Command): Command {\n return command\n .option(\"--trigger-type <type>\", \"trigger type\")\n .option(\"--cron <expression>\", \"cron expression for scheduled triggers\")\n .option(\"--trigger-schema <uuid>\", \"schema id for record-based triggers\")\n .option(\n \"--trigger-field <uuid>\",\n \"field id for record_changed triggers\",\n collectValues,\n [],\n )\n .option(\n \"--condition <field:comparator:value>\",\n \"trigger condition (use field:comparator for comparators without value: chg, ie, ine)\",\n collectValues,\n [],\n )\n .option(\n \"--condition-json <json>\",\n \"trigger condition as JSON\",\n collectValues,\n [],\n )\n .option(\"--webhook-endpoint-id <uuid>\", \"webhook endpoint id\")\n .option(\"--raw <json>\", \"raw trigger JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw trigger JSON payload\");\n}\n\nconst ACTION_TYPES_HELP = `\nAction types and their flags:\n create_record --target-schema, --map, --map-json\n update_record --target-schema, --use-trigger-record, --map,\n --condition, --condition-json\n search_records --target-schema, --condition, --condition-json\n send_message --to, --subject, --message\n (--map / --map-json also accepted for extra keys)\n http_request --method, --url, --header, --body, --content-type,\n --timeout-ms, --var, --auth-mode, --connection\n execute_plugin --plugin, --arg, --arg-json\n generate_document --document-template, --target-schema, --target-file-field\n`;\n\nfunction addActionPayloadOptions(command: Command): Command {\n return command\n .option(\n \"--type <type>\",\n \"action type (create_record|update_record|search_records|send_message|http_request|execute_plugin|generate_document)\",\n )\n .option(\"--name <name>\", \"action name\")\n .option(\"--target-schema <uuid>\", \"target schema id\")\n .option(\"--map <field=value>\", \"field mapping\", collectValues, [])\n .option(\"--map-json <field=json>\", \"JSON field mapping\", collectValues, [])\n .option(\n \"--condition <field:comparator:value>\",\n \"action condition (use field:comparator for comparators without value: ie, ine)\",\n collectValues,\n [],\n )\n .option(\"--condition-json <json>\", \"action condition as JSON\", collectValues, [])\n .option(\"--use-trigger-record\", \"use the triggering record\")\n .option(\"--method <method>\", \"HTTP method\")\n .option(\"--url <url>\", \"HTTP target URL\")\n .option(\"--header <key=value>\", \"HTTP header\", collectValues, [])\n .option(\"--body <json>\", \"HTTP request body as JSON\")\n .option(\"--body-file <path>\", \"path to HTTP request body JSON\")\n .option(\"--content-type <type>\", \"HTTP content type\")\n .option(\n \"--timeout-ms <n>\",\n \"HTTP timeout in milliseconds\",\n parseNonNegativeInteger,\n )\n .option(\"--var <key=value>\", \"HTTP variable\", collectValues, [])\n .option(\"--auth-mode <mode>\", \"HTTP auth mode\")\n .option(\"--connection <uuid>\", \"connection id for HTTP auth\")\n .option(\"--plugin <id>\", \"plugin id for execute_plugin\")\n .option(\"--arg <key=value>\", \"plugin argument\", collectValues, [])\n .option(\"--arg-json <key=json>\", \"plugin argument as JSON\", collectValues, [])\n .option(\"--to <recipient>\", \"send_message recipient (maps to fieldMapping.recipients)\")\n .option(\"--subject <text>\", \"send_message subject\")\n .option(\"--message <text>\", \"send_message body text (maps to fieldMapping.body)\")\n .option(\"--document-template <uuid>\", \"generate_document template id\")\n .option(\"--target-file-field <uuid>\", \"generate_document target FileField id\")\n .option(\"--raw <json>\", \"raw action JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw action JSON payload\")\n .addHelpText(\"after\", ACTION_TYPES_HELP);\n}\n\nexport function registerAutomationsCommands(\n program: Command,\n options: RegisterAutomationsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const automations = program\n .command(\"automations\")\n .description(\"Manage automations, triggers, actions, and connections\");\n\n const folders = automations\n .command(\"folders\")\n .description(\"Manage automation folders (flat: a folder only has a name, no order or properties)\");\n\n folders\n .command(\"list\")\n .description(\"List automation folders (non-root folders plus the root bucket, whose name is null)\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listFolders();\n\n if (json) {\n emitJson(stdout, \"automations folders list\", data, filePath);\n return;\n }\n\n printTable(folderRows(data), [\"id\", \"name\", \"automationCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create an automation folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(this: Command, commandOptions: FolderMutationCommandOptions) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders create\", readOnly, \"write\");\n const data = await api.createFolder(buildFolderMutationInput(commandOptions, true));\n\n if (json) {\n emitJson(stdout, \"automations folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created automation folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update an automation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders update\", readOnly, \"write\");\n const resolvedFolder = await resolveFolderSelector(api, folder);\n\n if (!resolvedFolder) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${folder.value}\" was not found.`);\n }\n\n const data = await api.updateFolder(\n resolvedFolder,\n buildFolderMutationInput(commandOptions, false),\n );\n\n if (json) {\n emitJson(stdout, \"automations folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated automation folder \"${String(data.name ?? folder.value)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete an automation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders delete\", readOnly, \"destructive\");\n const resolvedFolder = await resolveFolderSelector(api, folder);\n\n if (!resolvedFolder) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${folder.value}\" was not found.`);\n }\n\n const data = await api.deleteFolder(resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"automations folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted automation folder \"${folder.value}\".`);\n });\n\n folders\n .command(\"move\")\n .description(\"Move an automation into a folder\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (use the root folder to move it out of any folder)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: FolderMoveCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders move\", readOnly, \"write\");\n\n if (!commandOptions.to) {\n throw new CliError(\"invalid_cli_usage\", 'Provide target folder via \"--to\".');\n }\n\n const targetFolder = await resolveFolderSelector(api, commandOptions.to);\n\n if (!targetFolder) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${commandOptions.to.value}\" was not found.`,\n );\n }\n\n const data = await api.moveAutomation({\n automationId: automation.value,\n targetFolderId: targetFolder.value,\n });\n\n if (json) {\n emitJson(stdout, \"automations folders move\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Moved automation \"${automation.value}\" to folder \"${targetFolder.value}\".`);\n });\n\n automations\n .command(\"list\")\n .description(\"List automations\")\n .option(\"--folder <folder>\", \"filter by folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--trigger-type <type>\", \"filter by trigger type\")\n .option(\"--action-type <type>\", \"filter by action type\")\n .option(\"--plugin <id>\", \"filter by plugin id\")\n .option(\"--search <text>\", \"search text\")\n .action(async function action(this: Command, commandOptions: AutomationListCommandOptions) {\n const { api, json } = createAutomationsApi(this, filePath);\n const folder = await resolveFolderSelector(api, commandOptions.folder);\n const data = await api.listAutomations({\n folderId: folder?.value,\n status: commandOptions.status,\n triggerType: commandOptions.triggerType,\n actionType: commandOptions.actionType,\n pluginId: commandOptions.plugin,\n search: commandOptions.search,\n });\n\n if (json) {\n emitJson(stdout, \"automations list\", data, filePath);\n return;\n }\n\n printTable(\n automationRows(data),\n [\"id\", \"name\", \"status\", \"triggerType\", \"actionCount\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n });\n\n automations\n .command(\"get\")\n .description(\"Get an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n addTriggerPayloadOptions(\n automations\n .command(\"create\")\n .description(\"Create an automation\")\n .requiredOption(\"--name <name>\", \"automation name\")\n .option(\"--description <text>\", \"automation description\")\n .option(\"--folder <folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n commandOptions: AutomationCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations create\", readOnly, \"write\");\n const data = await api.createAutomation(await buildAutomationCreateInput(api, commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created automation \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n automations\n .command(\"update\")\n .description(\"Update an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"automation name\")\n .option(\"--description <text>\", \"automation description\")\n .option(\"--folder <folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--raw <json>\", \"raw automation JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw automation JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: AutomationUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations update\", readOnly, \"write\");\n const data = await api.updateAutomation(\n automation,\n await buildAutomationUpdateInput(api, commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"automations update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"delete\")\n .description(\"Delete an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations delete\", readOnly, \"destructive\");\n const data = await api.deleteAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"activate\")\n .description(\"Activate an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations activate\", readOnly, \"write\");\n const data = await api.activateAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations activate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Activated automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"deactivate\")\n .description(\"Deactivate an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations deactivate\", readOnly, \"write\");\n const data = await api.deactivateAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations deactivate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deactivated automation \"${automation.value}\".`);\n });\n\n const trigger = automations.command(\"trigger\").description(\"Manage automation triggers\");\n\n trigger\n .command(\"get\")\n .description(\"Get the trigger for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getTrigger(automation);\n\n if (json) {\n emitJson(stdout, \"automations trigger get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n addTriggerPayloadOptions(\n trigger\n .command(\"set\")\n .description(\"Set the trigger for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: TriggerPayloadCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations trigger set\", readOnly, \"write\");\n const data = await api.setTrigger(\n automation,\n buildTriggerInput(commandOptions, \"required\") as SetAutomationTriggerInput,\n );\n\n if (json) {\n emitJson(stdout, \"automations trigger set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated trigger for automation \"${automation.value}\".`);\n });\n\n const actions = automations.command(\"actions\").description(\"Manage automation actions\");\n\n actions\n .command(\"list\")\n .description(\"List automation actions\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listActions(automation);\n\n if (json) {\n emitJson(stdout, \"automations actions list\", data, filePath);\n return;\n }\n\n printTable(actionRows(data), [\"id\", \"name\", \"type\"], stdout);\n });\n\n addActionPayloadOptions(\n actions\n .command(\"add\")\n .description(\"Add an action to an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: ActionMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions add\", readOnly, \"write\");\n const data = await api.addAction(automation, buildActionInput(commandOptions, \"create\"));\n\n if (json) {\n emitJson(stdout, \"automations actions add\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Added action to automation \"${automation.value}\".`);\n });\n\n addActionPayloadOptions(\n actions\n .command(\"update\")\n .description(\"Update an automation action\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .argument(\"<action>\", \"action UUID\"),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n actionId: string,\n commandOptions: ActionMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions update\", readOnly, \"write\");\n const data = await api.updateAction(automation, actionId, buildActionInput(commandOptions, \"update\"));\n\n if (json) {\n emitJson(stdout, \"automations actions update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated action \"${actionId}\" on automation \"${automation.value}\".`);\n });\n\n actions\n .command(\"delete\")\n .description(\"Delete an automation action\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .argument(\"<action>\", \"action UUID\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n actionId: string,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions delete\", readOnly, \"destructive\");\n const data = await api.deleteAction(automation, actionId);\n\n if (json) {\n emitJson(stdout, \"automations actions delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted action \"${actionId}\" from automation \"${automation.value}\".`);\n });\n\n const flow = automations.command(\"flow\").description(\"Manage automation flow wiring\");\n\n flow\n .command(\"get\")\n .description(\"Get the flow for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getFlow(automation);\n\n if (json) {\n emitJson(stdout, \"automations flow get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n flow\n .command(\"set\")\n .description(\"Set the flow for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--entry <actionId>\", \"entry action id\", collectValues, [])\n .option(\"--transition <from:to>\", \"transition\", collectValues, [])\n .option(\"--raw <json>\", \"raw flow JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw flow JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: FlowSetCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations flow set\", readOnly, \"write\");\n const data = await api.setFlow(automation, buildFlowInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations flow set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated flow for automation \"${automation.value}\".`);\n });\n\n const webhook = automations.command(\"webhook\").description(\"Manage automation webhook config\");\n\n webhook\n .command(\"get\")\n .description(\"Get webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getWebhook(automation);\n\n if (json) {\n emitJson(stdout, \"automations webhook get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n webhook\n .command(\"set\")\n .description(\"Set webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--active\", \"activate webhook processing\")\n .option(\"--idempotency-key-path <jsonpath>\", \"idempotency key JSONPath\")\n .option(\"--event-type-path <jsonpath>\", \"event type JSONPath\")\n .option(\"--allowed-event-type <value>\", \"allowed event type\", collectValues, [])\n .option(\"--field-mapping <json>\", \"field mapping JSON\", collectValues, [])\n .option(\"--field-mapping-file <path>\", \"path to field mapping JSON\", collectValues, [])\n .option(\"--raw <json>\", \"raw webhook JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw webhook JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: WebhookSetCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations webhook set\", readOnly, \"write\");\n const data = await api.setWebhook(automation, buildWebhookInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations webhook set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated webhook for automation \"${automation.value}\".`);\n });\n\n webhook\n .command(\"delete\")\n .description(\"Delete webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations webhook delete\", readOnly, \"destructive\");\n const data = await api.deleteWebhook(automation);\n\n if (json) {\n emitJson(stdout, \"automations webhook delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted webhook for automation \"${automation.value}\".`);\n });\n\n const plugins = automations.command(\"plugins\").description(\"Inspect automation plugins\");\n\n plugins\n .command(\"list\")\n .description(\"List automation plugins\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listPlugins();\n\n if (json) {\n emitJson(stdout, \"automations plugins list\", data, filePath);\n return;\n }\n\n printTable(pluginRows(data), [\"id\", \"name\", \"version\"], stdout);\n });\n\n plugins\n .command(\"get\")\n .description(\"Get an automation plugin\")\n .argument(\"<plugin>\", \"plugin id\")\n .action(async function action(this: Command, pluginId: string) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getPlugin(pluginId);\n\n if (json) {\n emitJson(stdout, \"automations plugins get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n const connections = automations\n .command(\"connections\")\n .description(\"Manage automation connections\");\n\n connections\n .command(\"list\")\n .description(\"List automation connections\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listConnections();\n\n if (json) {\n emitJson(stdout, \"automations connections list\", data, filePath);\n return;\n }\n\n printTable(connectionRows(data), [\"id\", \"name\", \"type\", \"scope\", \"active\"], stdout);\n });\n\n connections\n .command(\"get\")\n .description(\"Get an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, connection: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getConnection(connection);\n\n if (json) {\n emitJson(stdout, \"automations connections get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n connections\n .command(\"create\")\n .description(\"Create an automation connection\")\n .requiredOption(\"--name <name>\", \"connection name\")\n .requiredOption(\"--type <type>\", \"connection type\")\n .requiredOption(\"--scope <scope>\", \"connection scope\")\n .option(\"--owner-member <uuid>\", \"owner member id\")\n .option(\"--config <json>\", \"connection config JSON object\")\n .option(\"--config-file <path>\", \"path to connection config JSON object\")\n .option(\"--secret <key=value>\", \"connection secret\", collectValues, [])\n .option(\"--active\", \"activate connection\")\n .option(\"--raw <json>\", \"raw connection JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw connection JSON payload\")\n .action(async function action(this: Command, commandOptions: ConnectionCreateCommandOptions) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections create\", readOnly, \"write\");\n const data = await api.createConnection(buildConnectionCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations connections create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created connection \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n connections\n .command(\"update\")\n .description(\"Update an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .option(\"--set <path=value>\", \"set a path to a string value\", collectValues, [])\n .option(\"--unset <path>\", \"unset a path\", collectValues, [])\n .option(\"--raw <json>\", \"raw connection patch JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw connection patch JSON payload\")\n .action(async function action(\n this: Command,\n connection: NormalizedUuidOrSlug,\n commandOptions: ConnectionUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections update\", readOnly, \"write\");\n const data = await api.updateConnection(connection, buildConnectionUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations connections update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated connection \"${connection.value}\".`);\n });\n\n connections\n .command(\"delete\")\n .description(\"Delete an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, connection: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections delete\", readOnly, \"destructive\");\n const data = await api.deleteConnection(connection);\n\n if (json) {\n emitJson(stdout, \"automations connections delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted connection \"${connection.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiComment {\n [key: string]: unknown;\n id?: string;\n text?: string;\n}\n\nexport interface CreateCommentInput {\n [key: string]: unknown;\n text?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class CommentsApi {\n constructor(private readonly client: ApiClient) {}\n\n listComments(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n ): Promise<ApiComment[]> {\n return this.client.getJson<ApiComment[]>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/comments`,\n );\n }\n\n createComment(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n input: CreateCommentInput,\n ): Promise<ApiComment> {\n return this.client.requestJson<ApiComment>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/comments`,\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n CommentsApi,\n type CreateCommentInput,\n} from \"../api/comments.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterCommentsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface CommentCreateCommandOptions {\n text?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction createCommentsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new CommentsApi(client),\n ...runtime,\n };\n}\n\nfunction buildCommentCreateInput(options: CommentCreateCommandOptions): CreateCommentInput {\n const input: CreateCommentInput = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.text !== undefined) {\n input.content = [\n {\n type: \"TEXT\",\n value: options.text,\n },\n ];\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide comment content via \"--text\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input;\n}\n\nexport function registerCommentsCommands(\n program: Command,\n options: RegisterCommentsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const comments = program.command(\"comments\").description(\"Manage record comments\");\n\n comments\n .command(\"list\")\n .description(\"List comments for a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createCommentsApi(this, filePath);\n const data = await api.listComments(schema, record.value);\n\n if (json) {\n emitJson(stdout, \"comments list\", data);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n comments\n .command(\"create\")\n .description(\"Create a comment on a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--text <text>\", \"comment text\")\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n commandOptions: CommentCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createCommentsApi(this, filePath);\n ensureWritable(\"comments create\", readOnly, \"write\");\n\n const data = await api.createComment(\n schema,\n record.value,\n buildCommentCreateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"comments create\", data);\n return;\n }\n\n writeLine(stdout, `Created comment \"${String(data.id ?? \"unknown\")}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DisplaysApi,\n type ApiDisplayFolder,\n type DisplaySummary,\n} from \"../api/displays.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport {\n parseExpression,\n type ExpressionComparator,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport { type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isEmptyObject,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nconst DATE_DYNAMIC_OPTIONS =\n \"today, thisWeek, thisMonth, thisQuarter, thisSemester, thisYear, next7Days, next30Days, next6Months, next12Months, last12Months\";\n\nexport interface RegisterDisplaysCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface DisplayCreateOptions {\n name: string;\n description?: string;\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface DisplayUpdateOptions {\n name?: string;\n description?: string;\n}\n\ninterface LayoutUpdateOptions {\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface TabMutationOptions {\n name?: string;\n orientation?: string;\n}\n\ninterface VariableMutationOptions {\n type?: string;\n name?: string;\n allowMultiple?: boolean;\n static?: boolean;\n default?: string;\n defaultValue?: string[];\n sourceSchema?: string;\n sourceField?: string;\n filter?: ParsedExpression[];\n dateMode?: string;\n dateDynamicOption?: string;\n dateSpecific?: string;\n dateRangeStart?: string;\n dateRangeEnd?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface WidgetMutationOptions {\n type?: string;\n name?: string;\n description?: string;\n icon?: string;\n color?: string;\n originResource?: string;\n originSubschema?: boolean;\n tab?: string;\n slot?: string;\n layout?: string;\n layoutFile?: string;\n field?: string[];\n sort?: string[];\n filter?: ParsedExpression[];\n widgetReadOnly?: boolean;\n hideAddButton?: boolean;\n hideDeleteButton?: boolean;\n hideSortButton?: boolean;\n hideFilterButton?: boolean;\n hideSeeButton?: boolean;\n lockField?: string[];\n lockCondition?: LockConditionOption[];\n lockMessageBefore?: LockMessageOption[];\n lockMessageAfter?: LockMessageOption[];\n clearLockedFields?: boolean;\n calc?: string;\n calcField?: string;\n kpiConfig?: string;\n chartType?: string;\n xAxisField?: string;\n xAxisDateFormat?: string;\n xAxisTimeSeries?: boolean;\n yAxisSerie?: string[];\n legend?: string;\n // KANBAN / TIMELINE viewState.fieldMapping (UUIDs only; slugs are not resolved here)\n columnField?: string;\n swimlaneField?: string;\n startDateField?: string;\n endDateField?: string;\n labelField?: string;\n groupField?: string;\n subgroupField?: string;\n progressField?: string;\n cardTitleField?: string;\n cardCategory1Field?: string;\n cardCategory2Field?: string;\n cardCategory3Field?: string;\n cardCategory4Field?: string;\n cardDescriptionField?: string;\n aggregationMethod?: string;\n aggregationField?: string;\n viewState?: string;\n viewStateFile?: string;\n // HIERARCHY view.hierarchyConfig (UUIDs only; slugs are not resolved here)\n hierarchyLabel?: string;\n hierarchyInfo?: string[];\n hierarchyNumber?: string[];\n hierarchyRootName?: string;\n hierarchyRootLabelField?: string;\n hierarchyRootInfo?: string[];\n hierarchyRootNumber?: string[];\n hierarchyChild?: string[];\n hierarchyConfig?: string;\n hierarchyConfigFile?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface LockConditionOption {\n lockedField: string;\n expression: ParsedExpression;\n}\n\ninterface LockMessageOption {\n lockedField: string;\n message: string;\n}\n\ninterface NavigationTargetMutationOptions {\n sourceWidget?: string;\n targetDisplay?: string;\n targetVariable?: string;\n label?: string;\n}\n\ninterface CrossWidgetFilterSetOptions {\n sourceWidget?: string;\n sourceField?: string;\n sourceSchema?: string;\n target?: string[];\n raw?: string;\n rawFile?: string;\n}\n\nfunction createDisplaysApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new DisplaysApi(client),\n ...runtime,\n };\n}\n\nconst COMPARATOR_TO_DISPLAY_OPERATOR: Record<ExpressionComparator, string> = {\n eq: \"EQUAL\",\n neq: \"NOT_EQUAL\",\n gt: \"GREATER\",\n gte: \"GREATER_OR_EQUAL\",\n lt: \"LESS\",\n lte: \"LESS_OR_EQUAL\",\n contains: \"CONTAINS\",\n in: \"ANY_OF\",\n is_empty: \"IS_EMPTY\",\n is_not_empty: \"IS_NOT_EMPTY\",\n};\n\nfunction toDisplayFilter(parsed: ParsedExpression): Record<string, unknown> {\n const values =\n parsed.value === null\n ? []\n : Array.isArray(parsed.value)\n ? [...parsed.value]\n : [parsed.value];\n return {\n origin: { fieldId: parsed.field },\n comparisonOperator: COMPARATOR_TO_DISPLAY_OPERATOR[parsed.comparator],\n values,\n };\n}\n\nfunction parseFilterExpression(input: string): ParsedExpression {\n try {\n return parseExpression(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid filter expression.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction collectFilters(value: string, previous: ParsedExpression[] = []): ParsedExpression[] {\n return [...previous, parseFilterExpression(value)];\n}\n\nfunction parseLockConditionOption(input: string): LockConditionOption {\n const trimmed = input.trim();\n let lockedField: string;\n let expressionText: string;\n\n if (trimmed.includes(\":\") && !trimmed.includes(\" \")) {\n const separatorIndex = trimmed.indexOf(\":\");\n lockedField = trimmed.slice(0, separatorIndex).trim();\n expressionText = trimmed.slice(separatorIndex + 1).trim();\n } else {\n const parts = trimmed.split(/\\s+/);\n lockedField = parts[0]?.trim() ?? \"\";\n expressionText = parts.slice(1).join(\" \").trim();\n }\n\n if (!lockedField || !expressionText) {\n throw new InvalidArgumentError(\n 'Expected \"<lockedField>:<field>:<comparator>[:<value>]\" (or space-separated), e.g. \"status:invoice-number:is_empty\".',\n );\n }\n\n return { lockedField, expression: parseFilterExpression(expressionText) };\n}\n\nfunction collectLockConditions(value: string, previous: LockConditionOption[] = []): LockConditionOption[] {\n return [...previous, parseLockConditionOption(value)];\n}\n\nfunction parseLockMessageOption(input: string): LockMessageOption {\n const separatorIndex = input.indexOf(\":\");\n const lockedField = separatorIndex > 0 ? input.slice(0, separatorIndex).trim() : \"\";\n const message = separatorIndex > 0 ? input.slice(separatorIndex + 1).trim() : \"\";\n\n if (!lockedField || !message) {\n throw new InvalidArgumentError('Expected \"<lockedField>:<message>\", e.g. \"status:Locked once approved.\".');\n }\n\n return { lockedField, message };\n}\n\nfunction collectLockMessages(value: string, previous: LockMessageOption[] = []): LockMessageOption[] {\n return [...previous, parseLockMessageOption(value)];\n}\n\n/**\n * Builds behavior.lockedFields from the --lock-* flags. Every flag names its\n * locked field explicitly, so ordering between flags never matters. A field\n * with no conditions is locked permanently; with conditions it locks when all\n * of them match (AND). Returns [] for --clear-locked-fields and undefined when\n * no lock flag was used.\n */\nfunction buildLockedFields(options: WidgetMutationOptions): Array<Record<string, unknown>> | undefined {\n const hasLockFlags =\n (options.lockField?.length ?? 0) > 0 ||\n (options.lockCondition?.length ?? 0) > 0 ||\n (options.lockMessageBefore?.length ?? 0) > 0 ||\n (options.lockMessageAfter?.length ?? 0) > 0;\n\n if (options.clearLockedFields) {\n if (hasLockFlags) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Use either \"--clear-locked-fields\" or the \"--lock-*\" flags, not both.',\n );\n }\n return [];\n }\n\n if (!hasLockFlags) {\n return undefined;\n }\n\n interface LockRule {\n conditions: Array<Record<string, unknown>>;\n messageBeforeLock?: string;\n messageAfterLock?: string;\n }\n\n const rules = new Map<string, LockRule>();\n const ensureRule = (lockedField: string): LockRule => {\n let rule = rules.get(lockedField);\n if (!rule) {\n rule = { conditions: [] };\n rules.set(lockedField, rule);\n }\n return rule;\n };\n\n for (const lockedField of options.lockField ?? []) {\n ensureRule(lockedField);\n }\n for (const { lockedField, expression } of options.lockCondition ?? []) {\n ensureRule(lockedField).conditions.push(toDisplayFilter(expression));\n }\n for (const { lockedField, message } of options.lockMessageBefore ?? []) {\n ensureRule(lockedField).messageBeforeLock = message;\n }\n for (const { lockedField, message } of options.lockMessageAfter ?? []) {\n ensureRule(lockedField).messageAfterLock = message;\n }\n\n return [...rules.entries()].map(([lockedField, rule]) => ({\n field: { fieldId: lockedField },\n conditions: rule.conditions,\n ...(rule.messageBeforeLock !== undefined ? { messageBeforeLock: rule.messageBeforeLock } : {}),\n ...(rule.messageAfterLock !== undefined ? { messageAfterLock: rule.messageAfterLock } : {}),\n }));\n}\n\nfunction parseBooleanFlag(input: string): boolean {\n const normalized = input.trim().toLowerCase();\n if ([\"true\", \"1\", \"yes\", \"y\", \"on\"].includes(normalized)) return true;\n if ([\"false\", \"0\", \"no\", \"n\", \"off\"].includes(normalized)) return false;\n throw new InvalidArgumentError(`Expected a boolean value, received \"${input}\".`);\n}\n\nfunction readRawObject(raw?: string, rawFile?: string): Record<string, unknown> {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--raw\" or \"--raw-file\", not both.');\n }\n\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return {};\n }\n\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n } catch (error) {\n if (error instanceof CliError) throw error;\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload is invalid.\");\n }\n}\n\nfunction readNamedJsonOption(raw?: string, rawFile?: string, inlineFlag = \"--option\", fileFlag = \"--option-file\"): unknown {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", `Use either \"${inlineFlag}\" or \"${fileFlag}\", not both.`);\n }\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) return undefined;\n try {\n return JSON.parse(source) as unknown;\n } catch {\n throw new CliError(\"invalid_cli_usage\", `${inlineFlag} payload is invalid JSON.`);\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...target };\n for (const [key, value] of Object.entries(source)) {\n const existing = out[key];\n out[key] = isPlainObject(existing) && isPlainObject(value) ? deepMerge(existing, value) : value;\n }\n return out;\n}\n\nfunction assignDefined(target: Record<string, unknown>, key: string, value: unknown): void {\n if (value !== undefined) target[key] = value;\n}\n\nfunction readNamedJsonObject(\n raw: string | undefined,\n rawFile: string | undefined,\n inlineFlag: string,\n fileFlag: string,\n): Record<string, unknown> | undefined {\n const parsed = readNamedJsonOption(raw, rawFile, inlineFlag, fileFlag);\n if (parsed === undefined) return undefined;\n if (!isPlainObject(parsed)) {\n throw new CliError(\"invalid_cli_usage\", `${inlineFlag} payload must be a JSON object.`);\n }\n return parsed;\n}\n\nconst HIERARCHY_AGGREGATIONS = new Set([\n \"SUM\",\n \"AVERAGE\",\n \"MINIMUM\",\n \"MAXIMUM\",\n \"COUNT\",\n \"COUNT_DISTINCT\",\n]);\n\nfunction parseHierarchyInfo(value: string): Record<string, unknown> {\n const idx = value.indexOf(\":\");\n if (idx <= 0 || idx === value.length - 1) {\n throw new CliError(\"invalid_cli_usage\", `--hierarchy-info \"${value}\" must use the format <id:name>.`);\n }\n return { id: value.slice(0, idx).trim(), name: value.slice(idx + 1).trim() };\n}\n\nfunction parseHierarchyNumber(value: string): Record<string, unknown> {\n const parts = value.split(\":\");\n if (parts.length < 3) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number \"${value}\" must use the format <id:name:aggregation>.`,\n );\n }\n const id = parts[0]?.trim() ?? \"\";\n const aggregation = (parts[parts.length - 1]?.trim() ?? \"\").toUpperCase();\n const name = parts.slice(1, -1).join(\":\").trim();\n if (!id || !name) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number \"${value}\" must use the format <id:name:aggregation>.`,\n );\n }\n if (!HIERARCHY_AGGREGATIONS.has(aggregation)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number aggregation \"${aggregation}\" must be one of SUM, AVERAGE, MINIMUM, MAXIMUM, COUNT, COUNT_DISTINCT.`,\n );\n }\n return { id, name, aggregation };\n}\n\nfunction parseHierarchyMapping(value: string, flag: string): Record<string, unknown> {\n const idx = value.indexOf(\":\");\n if (idx <= 0 || idx === value.length - 1) {\n throw new CliError(\"invalid_cli_usage\", `${flag} \"${value}\" must use the format <columnId:fieldId>.`);\n }\n return { columnId: value.slice(0, idx).trim(), fieldId: value.slice(idx + 1).trim() };\n}\n\nfunction buildWidgetFieldMapping(options: WidgetMutationOptions): Record<string, unknown> | undefined {\n const mapping: Record<string, unknown> = {};\n assignDefined(mapping, \"columnField\", options.columnField);\n assignDefined(mapping, \"swimlaneField\", options.swimlaneField);\n assignDefined(mapping, \"startDateField\", options.startDateField);\n assignDefined(mapping, \"endDateField\", options.endDateField);\n assignDefined(mapping, \"labelField\", options.labelField);\n assignDefined(mapping, \"groupField\", options.groupField);\n assignDefined(mapping, \"subgroupField\", options.subgroupField);\n assignDefined(mapping, \"progressField\", options.progressField);\n\n const cardConfig: Record<string, unknown> = {};\n assignDefined(cardConfig, \"titleField\", options.cardTitleField);\n assignDefined(cardConfig, \"category1Field\", options.cardCategory1Field);\n assignDefined(cardConfig, \"category2Field\", options.cardCategory2Field);\n assignDefined(cardConfig, \"category3Field\", options.cardCategory3Field);\n assignDefined(cardConfig, \"category4Field\", options.cardCategory4Field);\n assignDefined(cardConfig, \"descriptionField\", options.cardDescriptionField);\n if (Object.keys(cardConfig).length > 0) mapping.cardConfig = cardConfig;\n\n const aggregationConfig: Record<string, unknown> = {};\n assignDefined(aggregationConfig, \"method\", options.aggregationMethod);\n assignDefined(aggregationConfig, \"fieldId\", options.aggregationField);\n if (Object.keys(aggregationConfig).length > 0) mapping.aggregationConfig = aggregationConfig;\n\n return Object.keys(mapping).length > 0 ? mapping : undefined;\n}\n\nfunction buildHierarchyConfig(options: WidgetMutationOptions): Record<string, unknown> | undefined {\n const base = readNamedJsonObject(\n options.hierarchyConfig,\n options.hierarchyConfigFile,\n \"--hierarchy-config\",\n \"--hierarchy-config-file\",\n );\n const patch: Record<string, unknown> = {};\n\n const columns: Record<string, unknown> = {};\n assignDefined(columns, \"label\", options.hierarchyLabel);\n if (options.hierarchyInfo && options.hierarchyInfo.length > 0) {\n columns.infos = options.hierarchyInfo.map(parseHierarchyInfo);\n }\n if (options.hierarchyNumber && options.hierarchyNumber.length > 0) {\n columns.numbers = options.hierarchyNumber.map(parseHierarchyNumber);\n }\n if (Object.keys(columns).length > 0) patch.columns = columns;\n\n const rootLevel: Record<string, unknown> = {};\n assignDefined(rootLevel, \"name\", options.hierarchyRootName);\n assignDefined(rootLevel, \"labelFieldId\", options.hierarchyRootLabelField);\n if (options.hierarchyRootInfo && options.hierarchyRootInfo.length > 0) {\n rootLevel.infoMappings = options.hierarchyRootInfo.map((entry) =>\n parseHierarchyMapping(entry, \"--hierarchy-root-info\"),\n );\n }\n if (options.hierarchyRootNumber && options.hierarchyRootNumber.length > 0) {\n rootLevel.numberMappings = options.hierarchyRootNumber.map((entry) =>\n parseHierarchyMapping(entry, \"--hierarchy-root-number\"),\n );\n }\n if (Object.keys(rootLevel).length > 0) patch.rootLevel = rootLevel;\n\n if (options.hierarchyChild && options.hierarchyChild.length > 0) {\n patch.childLevels = options.hierarchyChild.map((entry, index) => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(entry);\n } catch {\n throw new CliError(\"invalid_cli_usage\", `--hierarchy-child payload #${index + 1} is invalid JSON.`);\n }\n if (!isPlainObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-child payload #${index + 1} must be a JSON object.`,\n );\n }\n return parsed;\n });\n }\n\n if (base === undefined && Object.keys(patch).length === 0) return undefined;\n return deepMerge(base ?? {}, patch);\n}\n\nfunction displayRows(displays: readonly DisplaySummary[]): Record<string, unknown>[] {\n return displays.map((display) => ({\n id: display.id,\n name: display.name ?? \"\",\n layoutTemplate: display.layoutTemplate ?? \"\",\n variableCount: display.variableCount ?? \"\",\n widgetCount: display.widgetCount ?? \"\",\n ...folderColumns(display.folder),\n }));\n}\n\nfunction getDisplaySubresource(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter((entry): entry is Record<string, unknown> => Boolean(entry) && typeof entry === \"object\");\n}\n\nfunction displayFolderRows(folders: readonly ApiDisplayFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id ?? \"\",\n name: folder.name ?? \"\",\n isRoot: folder.isRoot ?? \"\",\n displayCount: folder.displayCount ?? \"\",\n }));\n}\n\nasync function resolveDisplayFolderId(\n api: DisplaysApi,\n selector: NormalizedUuidOrSlug,\n): Promise<string> {\n if (selector.kind === \"uuid\") {\n return selector.value;\n }\n\n const folders = await api.listFolders();\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1 && typeof matches[0]?.id === \"string\" && matches[0].id.length > 0) {\n return matches[0].id;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction buildVariableBody(options: VariableMutationOptions): Record<string, unknown> {\n const body = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.type !== undefined) body.type = options.type;\n if (options.name !== undefined) body.name = options.name;\n if (options.allowMultiple !== undefined) body.allowMultiple = options.allowMultiple;\n if (options.static !== undefined) body.staticVariable = options.static;\n if (options.default !== undefined) body.defaultValue = options.default;\n if (options.defaultValue && options.defaultValue.length > 0) body.defaultValues = options.defaultValue;\n if (options.sourceSchema || options.sourceField) {\n body.source = {\n schemaId: options.sourceSchema,\n fieldId: options.sourceField,\n };\n }\n if (options.filter && options.filter.length > 0) {\n body.filters = options.filter.map(toDisplayFilter);\n }\n if (\n options.dateMode ||\n options.dateDynamicOption ||\n options.dateSpecific ||\n options.dateRangeStart ||\n options.dateRangeEnd\n ) {\n body.date = {\n mode: options.dateMode,\n dynamicOption: options.dateDynamicOption,\n specificDate: options.dateSpecific,\n rangeStart: options.dateRangeStart,\n rangeEnd: options.dateRangeEnd,\n };\n }\n\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for variable mutation.\");\n }\n\n return body;\n}\n\nfunction buildWidgetBody(options: WidgetMutationOptions): Record<string, unknown> {\n const body = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.type !== undefined) {\n const normalizedType = options.type.toLowerCase() === \"table\"\n ? \"TABLE_OR_SUBTABLE\"\n : options.type.toUpperCase();\n body.type = normalizedType;\n }\n\n if (\n options.name !== undefined ||\n options.description !== undefined ||\n options.icon !== undefined ||\n options.color !== undefined\n ) {\n body.presentation = {\n ...(typeof body.presentation === \"object\" && body.presentation ? body.presentation as Record<string, unknown> : {}),\n name: options.name,\n description: options.description,\n icon: options.icon,\n color: options.color,\n };\n }\n\n if (options.originResource !== undefined || options.originSubschema !== undefined) {\n body.source = {\n ...(typeof body.source === \"object\" && body.source ? body.source as Record<string, unknown> : {}),\n originResourceId: options.originResource,\n isOriginSubSchema: options.originSubschema,\n };\n }\n\n const layout = readNamedJsonOption(options.layout, options.layoutFile, \"--layout\", \"--layout-file\");\n if (options.tab || options.slot || layout !== undefined) {\n body.placement = {\n ...(typeof body.placement === \"object\" && body.placement ? body.placement as Record<string, unknown> : {}),\n tabId: options.tab,\n slotId: options.slot,\n layout,\n };\n }\n\n const viewPatch: Record<string, unknown> = {};\n if (options.field && options.field.length > 0) {\n viewPatch.fields = options.field;\n }\n\n const fieldMapping = buildWidgetFieldMapping(options);\n const viewStateBase = readNamedJsonObject(\n options.viewState,\n options.viewStateFile,\n \"--view-state\",\n \"--view-state-file\",\n );\n let viewState: Record<string, unknown> | undefined = viewStateBase ? { ...viewStateBase } : undefined;\n if (fieldMapping) {\n viewState = deepMerge(viewState ?? {}, { fieldMapping });\n }\n if (viewState !== undefined) {\n viewPatch.viewAdditionalProperties = { viewState };\n }\n\n const hierarchyConfig = buildHierarchyConfig(options);\n if (hierarchyConfig !== undefined) {\n viewPatch.hierarchyConfig = hierarchyConfig;\n }\n\n if (Object.keys(viewPatch).length > 0) {\n const existingView =\n typeof body.view === \"object\" && body.view ? (body.view as Record<string, unknown>) : {};\n body.view = deepMerge(existingView, viewPatch);\n }\n\n const queryMerge: Record<string, unknown> = {};\n if (options.sort && options.sort.length > 0) queryMerge.sorts = options.sort;\n if (options.filter && options.filter.length > 0) queryMerge.filters = options.filter.map(toDisplayFilter);\n if (Object.keys(queryMerge).length > 0) {\n body.query = {\n ...(typeof body.query === \"object\" && body.query ? body.query as Record<string, unknown> : {}),\n ...queryMerge,\n };\n }\n\n if (\n options.widgetReadOnly !== undefined ||\n options.hideAddButton !== undefined ||\n options.hideDeleteButton !== undefined ||\n options.hideSortButton !== undefined ||\n options.hideFilterButton !== undefined ||\n options.hideSeeButton !== undefined\n ) {\n body.behavior = {\n ...(typeof body.behavior === \"object\" && body.behavior ? body.behavior as Record<string, unknown> : {}),\n readOnly: options.widgetReadOnly,\n hideAddButton: options.hideAddButton,\n hideDeleteButton: options.hideDeleteButton,\n hideSortButton: options.hideSortButton,\n hideFilterButton: options.hideFilterButton,\n hideSeeButton: options.hideSeeButton,\n };\n }\n\n const lockedFields = buildLockedFields(options);\n if (lockedFields !== undefined) {\n body.behavior = {\n ...(typeof body.behavior === \"object\" && body.behavior ? body.behavior as Record<string, unknown> : {}),\n lockedFields,\n };\n }\n\n if (options.calc || options.calcField || options.kpiConfig) {\n body.kpi = {\n ...(typeof body.kpi === \"object\" && body.kpi ? body.kpi as Record<string, unknown> : {}),\n typeCalc: options.calc,\n fieldCalc: options.calcField,\n config: readNamedJsonOption(options.kpiConfig, undefined, \"--kpi-config\"),\n };\n }\n\n const hasChartFlags =\n options.chartType !== undefined ||\n options.xAxisField !== undefined ||\n options.xAxisDateFormat !== undefined ||\n options.xAxisTimeSeries !== undefined ||\n (options.yAxisSerie?.length ?? 0) > 0 ||\n options.legend !== undefined;\n if (hasChartFlags) {\n const legend = readNamedJsonOption(options.legend, undefined, \"--legend\");\n body.chart = {\n ...(typeof body.chart === \"object\" && body.chart ? body.chart as Record<string, unknown> : {}),\n ...(options.chartType !== undefined ? { chartType: options.chartType } : {}),\n ...(options.xAxisField !== undefined ? { xAxisFieldId: options.xAxisField } : {}),\n ...(options.xAxisDateFormat !== undefined ? { xAxisDateFormat: options.xAxisDateFormat } : {}),\n ...(options.xAxisTimeSeries !== undefined ? { xAxisAsTimeSerie: options.xAxisTimeSeries } : {}),\n ...(options.yAxisSerie && options.yAxisSerie.length > 0\n ? { yAxisSeries: options.yAxisSerie.map((entry) => JSON.parse(entry)) }\n : {}),\n ...(legend !== undefined ? { legend } : {}),\n };\n }\n\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for widget mutation.\");\n }\n\n return body;\n}\n\nfunction buildNavigationTargetBody(options: NavigationTargetMutationOptions): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (options.sourceWidget !== undefined) body.sourceWidgetId = options.sourceWidget;\n if (options.targetDisplay !== undefined) body.targetDisplayId = options.targetDisplay;\n if (options.targetVariable !== undefined) body.targetVariableId = options.targetVariable;\n if (options.label !== undefined) body.label = options.label;\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for navigation target mutation.\");\n }\n return body;\n}\n\nfunction readRawArray(raw?: string, rawFile?: string): unknown[] {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--raw\" or \"--raw-file\", not both.');\n }\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return [];\n }\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Raw cross widget filter payload must be a JSON array of configurations.\");\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) throw error;\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload is invalid.\");\n }\n}\n\n// The endpoint replaces the whole array of configurations. With flags a single configuration is\n// built and wrapped in an array; use --raw/--raw-file to send several configurations at once.\nfunction buildCrossWidgetFilterBody(options: CrossWidgetFilterSetOptions): unknown[] {\n if (options.raw !== undefined || options.rawFile !== undefined) {\n return readRawArray(options.raw, options.rawFile);\n }\n\n if (!options.sourceWidget || !options.sourceField) {\n throw new CliError(\n \"invalid_cli_usage\",\n \"Provide --source-widget and --source-field, or --raw/--raw-file with the full configuration array.\",\n );\n }\n\n const source: Record<string, unknown> = {\n widgetId: options.sourceWidget,\n fieldId: options.sourceField,\n };\n if (options.sourceSchema) {\n source.schemaId = options.sourceSchema;\n }\n\n return [\n {\n source,\n targets: (options.target ?? []).map((entry) => {\n const [widgetId, fieldId] = entry.split(\":\");\n if (!widgetId || !fieldId) {\n throw new CliError(\"invalid_cli_usage\", `Invalid --target entry \"${entry}\". Use <widgetId:fieldId>.`);\n }\n return { widgetId, fieldId };\n }),\n },\n ];\n}\n\nexport function registerDisplaysCommands(\n program: Command,\n options: RegisterDisplaysCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const displays = program.command(\"displays\").description(\"Manage displays\");\n\n displays\n .command(\"list\")\n .description(\"List displays\")\n .action(async function action(this: Command) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.listDisplays();\n if (json) {\n emitJson(stdout, \"displays list\", data);\n return;\n }\n printTable(\n displayRows(data),\n [\"id\", \"name\", \"layoutTemplate\", \"variableCount\", \"widgetCount\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n });\n\n displays\n .command(\"get\")\n .description(\"Get a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n if (json) {\n emitJson(stdout, \"displays get\", data);\n return;\n }\n printTable([{ id: data.id, name: data.name ?? \"\", layoutTemplate: data.layout?.template ?? \"\" }], [\"id\", \"name\", \"layoutTemplate\"], stdout);\n });\n\n displays\n .command(\"create\")\n .description(\"Create a display\")\n .requiredOption(\"--name <name>\", \"display name\")\n .option(\"--description <text>\", \"display description\")\n .requiredOption(\"--template <template>\", \"layout template\")\n .option(\"--freeform-layouts <json>\", \"freeform layouts JSON\")\n .option(\"--freeform-layouts-file <path>\", \"freeform layouts JSON file\")\n .action(async function action(this: Command, commandOptions: DisplayCreateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays create\", readOnly, \"write\");\n const layout: Record<string, unknown> = { template: commandOptions.template };\n const freeformLayouts = readNamedJsonOption(\n commandOptions.freeformLayouts,\n commandOptions.freeformLayoutsFile,\n \"--freeform-layouts\",\n \"--freeform-layouts-file\",\n );\n if (freeformLayouts !== undefined) layout.freeformLayouts = freeformLayouts;\n const data = await api.createDisplay({\n name: commandOptions.name,\n description: commandOptions.description,\n layout,\n });\n if (json) {\n emitJson(stdout, \"displays create\", data);\n return;\n }\n writeLine(stdout, `Created display \"${commandOptions.name}\".`);\n });\n\n displays\n .command(\"update\")\n .description(\"Update a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"display name\")\n .option(\"--description <text>\", 'display description (use \"\" to clear)')\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: DisplayUpdateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays update\", readOnly, \"write\");\n if (commandOptions.name === undefined && commandOptions.description === undefined) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n }\n if (commandOptions.name !== undefined && commandOptions.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", \"Display name cannot be empty.\");\n }\n const data = await api.updateDisplay(display, {\n name: commandOptions.name,\n description: commandOptions.description,\n });\n if (json) {\n emitJson(stdout, \"displays update\", data);\n return;\n }\n writeLine(stdout, `Updated display \"${display.value}\".`);\n });\n\n displays\n .command(\"delete\")\n .description(\"Delete a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays delete\", readOnly, \"destructive\");\n const data = await api.deleteDisplay(display);\n if (json) {\n emitJson(stdout, \"displays delete\", data);\n return;\n }\n writeLine(stdout, `Deleted display \"${display.value}\".`);\n });\n\n const folders = displays\n .command(\"folders\")\n .description(\"Manage display folders (flat: a folder only has a name, no order or properties)\");\n\n folders\n .command(\"list\")\n .description(\"List display folders (non-root folders plus the root bucket, whose name is null)\")\n .action(async function action(this: Command) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.listFolders();\n if (json) {\n emitJson(stdout, \"displays folders list\", data);\n return;\n }\n printTable(displayFolderRows(data), [\"id\", \"name\", \"isRoot\", \"displayCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a display folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(this: Command, commandOptions: { name?: string }) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders create\", readOnly, \"write\");\n if (commandOptions.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n const data = await api.createFolder({ name: commandOptions.name });\n if (json) {\n emitJson(stdout, \"displays folders create\", data);\n return;\n }\n writeLine(stdout, `Created display folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Rename a display folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: { name?: string },\n ) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders update\", readOnly, \"write\");\n if (commandOptions.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n const folderId = await resolveDisplayFolderId(api, folder);\n const data = await api.updateFolder({ kind: \"uuid\", value: folderId }, { name: commandOptions.name });\n if (json) {\n emitJson(stdout, \"displays folders update\", data);\n return;\n }\n writeLine(stdout, `Updated display folder \"${String(data.name ?? folder.value)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a display folder (its displays move back to the root folder)\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders delete\", readOnly, \"destructive\");\n const folderId = await resolveDisplayFolderId(api, folder);\n const data = await api.deleteFolder({ kind: \"uuid\", value: folderId });\n if (json) {\n emitJson(stdout, \"displays folders delete\", data);\n return;\n }\n writeLine(stdout, `Deleted display folder \"${folder.value}\".`);\n });\n\n folders\n .command(\"move\")\n .description(\"Move a display into a folder\")\n .argument(\"<display>\", \"display UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (use the root folder to move it out of any folder)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n display: NormalizedUuidOrSlug,\n commandOptions: { to?: NormalizedUuidOrSlug },\n ) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders move\", readOnly, \"write\");\n if (!commandOptions.to) {\n throw new CliError(\"invalid_cli_usage\", 'Provide target folder via \"--to\".');\n }\n const targetFolderId = await resolveDisplayFolderId(api, commandOptions.to);\n const data = await api.moveDisplay({ displayId: display.value, targetFolderId });\n if (json) {\n emitJson(stdout, \"displays folders move\", data);\n return;\n }\n writeLine(stdout, `Moved display \"${display.value}\" to folder \"${targetFolderId}\".`);\n });\n\n const layout = displays.command(\"layout\").description(\"Manage display layout\");\n layout\n .command(\"get\")\n .description(\"Get display layout\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const layoutData = data.layout ?? null;\n if (json) {\n emitJson(stdout, \"displays layout get\", layoutData);\n return;\n }\n printTable(layoutData ? [{ template: layoutData.template ?? \"\", freeformLayouts: layoutData.freeformLayouts ?? \"\" }] : [], [\"template\", \"freeformLayouts\"], stdout);\n });\n layout\n .command(\"update\")\n .description(\"Update display layout\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--template <template>\", \"layout template\")\n .option(\"--freeform-layouts <json>\", \"freeform layouts JSON\")\n .option(\"--freeform-layouts-file <path>\", \"freeform layouts JSON file\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: LayoutUpdateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays layout update\", readOnly, \"write\");\n const body: Record<string, unknown> = { template: commandOptions.template };\n const freeformLayouts = readNamedJsonOption(commandOptions.freeformLayouts, commandOptions.freeformLayoutsFile, \"--freeform-layouts\", \"--freeform-layouts-file\");\n if (freeformLayouts !== undefined) body.freeformLayouts = freeformLayouts;\n const data = await api.patchLayout(display, body);\n if (json) {\n emitJson(stdout, \"displays layout update\", data);\n return;\n }\n writeLine(stdout, `Updated layout for display \"${display.value}\".`);\n });\n\n const tabs = displays.command(\"tabs\").description(\"Manage display tabs\");\n tabs.command(\"list\").description(\"List tabs\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const tabsData = getDisplaySubresource(data.layout?.tabs);\n if (json) { emitJson(stdout, \"displays tabs list\", tabsData); return; }\n printTable(tabsData, undefined, stdout);\n });\n tabs.command(\"create\").description(\"Create a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).option(\"--name <name>\").option(\"--orientation <orientation>\").action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: TabMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs create\", readOnly, \"write\");\n const data = await api.createTab(display, { name: commandOptions.name, orientation: commandOptions.orientation });\n if (json) { emitJson(stdout, \"displays tabs create\", data); return; }\n writeLine(stdout, `Created tab on display \"${display.value}\".`);\n });\n tabs.command(\"update\").description(\"Update a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<tab>\", \"tab id\").option(\"--name <name>\").option(\"--orientation <orientation>\").action(async function action(this: Command, display: NormalizedUuidOrSlug, tabId: string, commandOptions: TabMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs update\", readOnly, \"write\");\n const data = await api.updateTab(display, tabId, { name: commandOptions.name, orientation: commandOptions.orientation });\n if (json) { emitJson(stdout, \"displays tabs update\", data); return; }\n writeLine(stdout, `Updated tab \"${tabId}\".`);\n });\n tabs.command(\"delete\").description(\"Delete a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<tab>\", \"tab id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, tabId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs delete\", readOnly, \"destructive\");\n const data = await api.deleteTab(display, tabId);\n if (json) { emitJson(stdout, \"displays tabs delete\", data); return; }\n writeLine(stdout, `Deleted tab \"${tabId}\".`);\n });\n\n const variables = displays.command(\"variables\").description(\"Manage display variables\");\n variables.command(\"list\").description(\"List variables\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const items = getDisplaySubresource(data.variables);\n if (json) { emitJson(stdout, \"displays variables list\", items); return; }\n printTable(items, undefined, stdout);\n });\n variables.command(\"get\").description(\"Get variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const items = getDisplaySubresource(data.variables);\n const match = items.find((item) => item && typeof item === \"object\" && \"id\" in item && String(item.id) === variableId);\n if (!match) throw new CliError(\"invalid_cli_usage\", `Variable \"${variableId}\" not found.`);\n if (json) { emitJson(stdout, \"displays variables get\", match); return; }\n printTable([match], undefined, stdout);\n });\n variables.command(\"create\").description(\"Create variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--allow-multiple\").option(\"--static\")\n .option(\"--default <value>\").option(\"--default-value <value>\", \"repeatable default value\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--source-schema <id>\").option(\"--source-field <id>\").option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--date-mode <mode>\").option(\"--date-dynamic-option <option>\", `dynamic date period (${DATE_DYNAMIC_OPTIONS})`).option(\"--date-specific <iso>\").option(\"--date-range-start <iso>\").option(\"--date-range-end <iso>\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: VariableMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables create\", readOnly, \"write\");\n const data = await api.createVariable(display, buildVariableBody(commandOptions));\n if (json) { emitJson(stdout, \"displays variables create\", data); return; }\n writeLine(stdout, `Created variable on display \"${display.value}\".`);\n });\n variables.command(\"update\").description(\"Update variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\")\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--allow-multiple\").option(\"--static\")\n .option(\"--default <value>\").option(\"--default-value <value>\", \"repeatable default value\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--source-schema <id>\").option(\"--source-field <id>\").option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--date-mode <mode>\").option(\"--date-dynamic-option <option>\", `dynamic date period (${DATE_DYNAMIC_OPTIONS})`).option(\"--date-specific <iso>\").option(\"--date-range-start <iso>\").option(\"--date-range-end <iso>\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string, commandOptions: VariableMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables update\", readOnly, \"write\");\n const data = await api.updateVariable(display, variableId, buildVariableBody(commandOptions));\n if (json) { emitJson(stdout, \"displays variables update\", data); return; }\n writeLine(stdout, `Updated variable \"${variableId}\".`);\n });\n variables.command(\"delete\").description(\"Delete variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables delete\", readOnly, \"destructive\");\n const data = await api.deleteVariable(display, variableId);\n if (json) { emitJson(stdout, \"displays variables delete\", data); return; }\n writeLine(stdout, `Deleted variable \"${variableId}\".`);\n });\n\n const widgets = displays.command(\"widgets\").description(\"Manage display widgets\");\n widgets.command(\"list\").description(\"List widgets\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const items = getDisplaySubresource(data.widgets);\n if (json) { emitJson(stdout, \"displays widgets list\", items); return; } printTable(items, undefined, stdout);\n });\n widgets.command(\"get\").description(\"Get widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getWidget(display, widgetId);\n if (json) { emitJson(stdout, \"displays widgets get\", data); return; } printTable([data], undefined, stdout);\n });\n widgets.command(\"create\").description(\"Create widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--type <type>\", \"widget type\")\n .option(\"--name <name>\").option(\"--description <text>\").option(\"--icon <icon>\").option(\"--color <color>\")\n .option(\"--origin-resource <uuid>\").option(\"--origin-subschema\")\n .option(\"--tab <tabId>\").option(\"--slot <slotId>\").option(\"--layout <json>\").option(\"--layout-file <path>\")\n .option(\"--field <field>\", \"repeatable field\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--sort <sort>\", \"repeatable sort\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--widget-read-only\").option(\"--hide-add-button\").option(\"--hide-delete-button\").option(\"--hide-sort-button\").option(\"--hide-filter-button\").option(\"--hide-see-button\")\n .option(\"--lock-field <field>\", \"lock a field permanently in this widget (repeatable; field UUID or slug)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--lock-condition <expr>\", 'conditional lock \"<lockedField>:<field>:<comparator>[:<value>]\"; locks <lockedField> when all its conditions match (AND, repeatable)', collectLockConditions, [])\n .option(\"--lock-message-before <field:text>\", \"message shown while a conditional lock is not met yet (repeatable)\", collectLockMessages, [])\n .option(\"--lock-message-after <field:text>\", \"message shown once the field is locked (repeatable)\", collectLockMessages, [])\n .option(\"--clear-locked-fields\", \"clear the widget locked-fields configuration\")\n .option(\"--calc <type>\").option(\"--calc-field <uuid>\").option(\"--kpi-config <json>\")\n .option(\"--chart-type <type>\", \"chart type (lines, bars, stackedBars, combined)\").option(\"--x-axis-field <uuid>\").option(\"--x-axis-date-format <granularity>\", \"time granularity (DATE, MONTH_YEAR, QUARTER_YEAR, YEAR)\").option(\"--x-axis-time-series\")\n .option(\"--y-axis-serie <json>\", \"repeatable y axis serie\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--legend <json>\")\n .option(\"--column-field <uuid>\", \"KANBAN column field (UUID, not slug)\")\n .option(\"--swimlane-field <uuid>\", \"KANBAN swimlane field (UUID, not slug)\")\n .option(\"--start-date-field <uuid>\", \"TIMELINE start date field (UUID, not slug)\")\n .option(\"--end-date-field <uuid>\", \"TIMELINE end date field (UUID, not slug)\")\n .option(\"--label-field <uuid>\", \"TIMELINE label field (UUID, not slug)\")\n .option(\"--group-field <uuid>\", \"TIMELINE group field (UUID, not slug)\")\n .option(\"--subgroup-field <uuid>\", \"TIMELINE subgroup field (UUID, not slug)\")\n .option(\"--progress-field <uuid>\", \"TIMELINE progress field (UUID, not slug)\")\n .option(\"--card-title-field <uuid>\", \"KANBAN/TIMELINE card title field (UUID, not slug)\")\n .option(\"--card-category1-field <uuid>\", \"KANBAN/TIMELINE card category 1 field (UUID, not slug)\")\n .option(\"--card-category2-field <uuid>\", \"KANBAN/TIMELINE card category 2 field (UUID, not slug)\")\n .option(\"--card-category3-field <uuid>\", \"KANBAN card category 3 field (UUID, not slug)\")\n .option(\"--card-category4-field <uuid>\", \"TIMELINE card category 4 field (UUID, not slug)\")\n .option(\"--card-description-field <uuid>\", \"KANBAN/TIMELINE card description field (UUID, not slug)\")\n .option(\"--aggregation-method <method>\", \"KANBAN card aggregation method (e.g. sum)\")\n .option(\"--aggregation-field <uuid>\", \"KANBAN card aggregation field (UUID, not slug)\")\n .option(\"--view-state <json>\", \"KANBAN/TIMELINE viewState UI scalars (columnOrder, granularity, sidebarWidth, show* ...)\")\n .option(\"--view-state-file <path>\", \"read --view-state JSON from a file\")\n .option(\"--hierarchy-label <name>\", \"HIERARCHY label column name\")\n .option(\"--hierarchy-info <id:name>\", \"HIERARCHY info column; id is a unique opaque column id you choose (e.g. col_1779975207355_zfndknslw), not the name, and is reused as columnId in mappings (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-number <id:name:aggregation>\", \"HIERARCHY number column; id is a unique opaque column id (e.g. col_1779975207355_zfndknslw), not the name; aggregation SUM|AVERAGE|MINIMUM|MAXIMUM|COUNT|COUNT_DISTINCT (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-name <name>\", \"HIERARCHY root level name\")\n .option(\"--hierarchy-root-label-field <uuid>\", \"HIERARCHY root level label field (UUID, not slug)\")\n .option(\"--hierarchy-root-info <columnId:fieldId>\", \"HIERARCHY root info mapping; columnId must match a --hierarchy-info id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-number <columnId:fieldId>\", \"HIERARCHY root number mapping; columnId must match a --hierarchy-number id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-child <json>\", \"HIERARCHY child level JSON {name,schemaId,childFieldId,labelFieldId,infoMappings,numberMappings} (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-config <json>\", \"HIERARCHY full hierarchyConfig JSON (escape hatch)\")\n .option(\"--hierarchy-config-file <path>\", \"read --hierarchy-config JSON from a file\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: WidgetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets create\", readOnly, \"write\");\n const data = await api.createWidget(display, buildWidgetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays widgets create\", data); return; }\n writeLine(stdout, `Created widget on display \"${display.value}\".`);\n });\n widgets.command(\"update\").description(\"Update widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\")\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--description <text>\").option(\"--icon <icon>\").option(\"--color <color>\")\n .option(\"--origin-resource <uuid>\").option(\"--origin-subschema\")\n .option(\"--tab <tabId>\").option(\"--slot <slotId>\").option(\"--layout <json>\").option(\"--layout-file <path>\")\n .option(\"--field <field>\", \"repeatable field\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--sort <sort>\", \"repeatable sort\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--widget-read-only\").option(\"--hide-add-button\").option(\"--hide-delete-button\").option(\"--hide-sort-button\").option(\"--hide-filter-button\").option(\"--hide-see-button\")\n .option(\"--lock-field <field>\", \"lock a field permanently in this widget (repeatable; field UUID or slug)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--lock-condition <expr>\", 'conditional lock \"<lockedField>:<field>:<comparator>[:<value>]\"; locks <lockedField> when all its conditions match (AND, repeatable)', collectLockConditions, [])\n .option(\"--lock-message-before <field:text>\", \"message shown while a conditional lock is not met yet (repeatable)\", collectLockMessages, [])\n .option(\"--lock-message-after <field:text>\", \"message shown once the field is locked (repeatable)\", collectLockMessages, [])\n .option(\"--clear-locked-fields\", \"clear the widget locked-fields configuration\")\n .option(\"--calc <type>\").option(\"--calc-field <uuid>\").option(\"--kpi-config <json>\")\n .option(\"--chart-type <type>\", \"chart type (lines, bars, stackedBars, combined)\").option(\"--x-axis-field <uuid>\").option(\"--x-axis-date-format <granularity>\", \"time granularity (DATE, MONTH_YEAR, QUARTER_YEAR, YEAR)\").option(\"--x-axis-time-series\")\n .option(\"--y-axis-serie <json>\", \"repeatable y axis serie\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--legend <json>\")\n .option(\"--column-field <uuid>\", \"KANBAN column field (UUID, not slug)\")\n .option(\"--swimlane-field <uuid>\", \"KANBAN swimlane field (UUID, not slug)\")\n .option(\"--start-date-field <uuid>\", \"TIMELINE start date field (UUID, not slug)\")\n .option(\"--end-date-field <uuid>\", \"TIMELINE end date field (UUID, not slug)\")\n .option(\"--label-field <uuid>\", \"TIMELINE label field (UUID, not slug)\")\n .option(\"--group-field <uuid>\", \"TIMELINE group field (UUID, not slug)\")\n .option(\"--subgroup-field <uuid>\", \"TIMELINE subgroup field (UUID, not slug)\")\n .option(\"--progress-field <uuid>\", \"TIMELINE progress field (UUID, not slug)\")\n .option(\"--card-title-field <uuid>\", \"KANBAN/TIMELINE card title field (UUID, not slug)\")\n .option(\"--card-category1-field <uuid>\", \"KANBAN/TIMELINE card category 1 field (UUID, not slug)\")\n .option(\"--card-category2-field <uuid>\", \"KANBAN/TIMELINE card category 2 field (UUID, not slug)\")\n .option(\"--card-category3-field <uuid>\", \"KANBAN card category 3 field (UUID, not slug)\")\n .option(\"--card-category4-field <uuid>\", \"TIMELINE card category 4 field (UUID, not slug)\")\n .option(\"--card-description-field <uuid>\", \"KANBAN/TIMELINE card description field (UUID, not slug)\")\n .option(\"--aggregation-method <method>\", \"KANBAN card aggregation method (e.g. sum)\")\n .option(\"--aggregation-field <uuid>\", \"KANBAN card aggregation field (UUID, not slug)\")\n .option(\"--view-state <json>\", \"KANBAN/TIMELINE viewState UI scalars (columnOrder, granularity, sidebarWidth, show* ...)\")\n .option(\"--view-state-file <path>\", \"read --view-state JSON from a file\")\n .option(\"--hierarchy-label <name>\", \"HIERARCHY label column name\")\n .option(\"--hierarchy-info <id:name>\", \"HIERARCHY info column; id is a unique opaque column id you choose (e.g. col_1779975207355_zfndknslw), not the name, and is reused as columnId in mappings (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-number <id:name:aggregation>\", \"HIERARCHY number column; id is a unique opaque column id (e.g. col_1779975207355_zfndknslw), not the name; aggregation SUM|AVERAGE|MINIMUM|MAXIMUM|COUNT|COUNT_DISTINCT (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-name <name>\", \"HIERARCHY root level name\")\n .option(\"--hierarchy-root-label-field <uuid>\", \"HIERARCHY root level label field (UUID, not slug)\")\n .option(\"--hierarchy-root-info <columnId:fieldId>\", \"HIERARCHY root info mapping; columnId must match a --hierarchy-info id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-number <columnId:fieldId>\", \"HIERARCHY root number mapping; columnId must match a --hierarchy-number id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-child <json>\", \"HIERARCHY child level JSON {name,schemaId,childFieldId,labelFieldId,infoMappings,numberMappings} (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-config <json>\", \"HIERARCHY full hierarchyConfig JSON (escape hatch)\")\n .option(\"--hierarchy-config-file <path>\", \"read --hierarchy-config JSON from a file\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string, commandOptions: WidgetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets update\", readOnly, \"write\");\n const data = await api.updateWidget(display, widgetId, buildWidgetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays widgets update\", data); return; }\n writeLine(stdout, `Updated widget \"${widgetId}\".`);\n });\n widgets.command(\"delete\").description(\"Delete widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets delete\", readOnly, \"destructive\");\n const data = await api.deleteWidget(display, widgetId);\n if (json) { emitJson(stdout, \"displays widgets delete\", data); return; }\n writeLine(stdout, `Deleted widget \"${widgetId}\".`);\n });\n\n const targets = displays.command(\"navigation-targets\").description(\"Manage navigation targets\");\n targets.command(\"list\").description(\"List navigation targets\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const items = getDisplaySubresource(data.navigationTargets);\n if (json) { emitJson(stdout, \"displays navigation-targets list\", items); return; } printTable(items, undefined, stdout);\n });\n targets.command(\"create\").description(\"Create navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--source-widget <id>\").requiredOption(\"--target-display <id>\").requiredOption(\"--target-variable <id>\").option(\"--label <label>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: NavigationTargetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets create\", readOnly, \"write\");\n const data = await api.createNavigationTarget(display, buildNavigationTargetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays navigation-targets create\", data); return; }\n writeLine(stdout, `Created navigation target on display \"${display.value}\".`);\n });\n targets.command(\"update\").description(\"Update navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<target>\", \"target id\")\n .option(\"--source-widget <id>\").option(\"--target-display <id>\").option(\"--target-variable <id>\").option(\"--label <label>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, targetId: string, commandOptions: NavigationTargetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets update\", readOnly, \"write\");\n const data = await api.updateNavigationTarget(display, targetId, buildNavigationTargetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays navigation-targets update\", data); return; }\n writeLine(stdout, `Updated navigation target \"${targetId}\".`);\n });\n targets.command(\"delete\").description(\"Delete navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<target>\", \"target id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, targetId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets delete\", readOnly, \"destructive\");\n const data = await api.deleteNavigationTarget(display, targetId);\n if (json) { emitJson(stdout, \"displays navigation-targets delete\", data); return; }\n writeLine(stdout, `Deleted navigation target \"${targetId}\".`);\n });\n\n const cross = displays.command(\"cross-widget-filter\").description(\"Manage cross widget filter\");\n cross.command(\"get\").description(\"Get cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const item = data.crossWidgetFilter ?? null;\n if (json) { emitJson(stdout, \"displays cross-widget-filter get\", item); return; } printTable(item ?? [], undefined, stdout);\n });\n cross.command(\"set\").description(\"Set cross widget filter (replaces the whole array of configurations)\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--source-widget <id>\", \"source widget id (single-configuration mode)\")\n .option(\"--source-field <id>\", \"source field id (single-configuration mode)\")\n .option(\"--source-schema <id>\", \"source schema id, only for HIERARCHY source widgets\")\n .option(\"--target <widget:field>\", \"repeatable target (single-configuration mode)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--raw <json>\", \"full array of configurations as JSON (for several configurations)\")\n .option(\"--raw-file <path>\", \"path to a JSON file with the full array of configurations\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: CrossWidgetFilterSetOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays cross-widget-filter set\", readOnly, \"write\");\n const data = await api.setCrossWidgetFilter(display, buildCrossWidgetFilterBody(commandOptions));\n if (json) { emitJson(stdout, \"displays cross-widget-filter set\", data); return; }\n writeLine(stdout, `Updated cross widget filter for display \"${display.value}\".`);\n });\n cross.command(\"delete\").description(\"Delete cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays cross-widget-filter delete\", readOnly, \"destructive\");\n const data = await api.deleteCrossWidgetFilter(display);\n if (json) { emitJson(stdout, \"displays cross-widget-filter delete\", data); return; }\n writeLine(stdout, `Deleted cross widget filter for display \"${display.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiDisplay {\n [key: string]: unknown;\n id?: string;\n name?: string;\n description?: string;\n layoutTemplate?: string;\n layout?: {\n template?: string;\n freeformLayouts?: unknown;\n slots?: Array<Record<string, unknown>>;\n tabs?: Array<Record<string, unknown>>;\n };\n variables?: Array<Record<string, unknown>>;\n widgets?: Array<Record<string, unknown>>;\n navigationTargets?: Array<Record<string, unknown>>;\n crossWidgetFilter?: Array<Record<string, unknown>> | null;\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n}\n\nexport interface ApiDisplayTab {\n [key: string]: unknown;\n id?: string;\n name?: string;\n orientation?: string;\n}\n\nexport interface ApiDisplayVariable {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n}\n\nexport interface ApiDisplayWidget {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n}\n\nexport interface ApiDisplayNavigationTarget {\n [key: string]: unknown;\n id?: string;\n label?: string;\n}\n\nexport interface ApiDisplayFolder {\n [key: string]: unknown;\n id?: string;\n name?: string | null;\n isRoot?: boolean;\n displayCount?: number;\n}\n\nexport interface MoveDisplayInput {\n displayId: string;\n targetFolderId: string;\n}\n\nexport type DisplaySummary = ApiDisplay;\nexport type DisplayResource = ApiDisplay;\n\nexport interface CreateDisplayInput {\n name: string;\n description?: string;\n layout: Record<string, unknown>;\n}\n\nexport interface UpdateDisplayInput {\n name?: string;\n description?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport class DisplaysApi {\n constructor(private readonly client: ApiClient) {}\n\n listDisplays(): Promise<ApiDisplay[]> {\n return this.client.getJson<ApiDisplay[]>(\"/api/v2/displays\");\n }\n\n getDisplay(display: NormalizedUuidOrSlug): Promise<ApiDisplay> {\n return this.client.getJson<ApiDisplay>(`/api/v2/displays/${display.value}`);\n }\n\n createDisplay(body: CreateDisplayInput): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\"/api/v2/displays\", jsonOptions(body, \"POST\"));\n }\n\n updateDisplay(\n display: NormalizedUuidOrSlug,\n body: UpdateDisplayInput,\n ): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\n `/api/v2/displays/${display.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteDisplay(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}`,\n { method: \"DELETE\" },\n );\n }\n\n getLayout(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/layout`,\n );\n }\n\n patchLayout(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/layout`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n listTabs(display: NormalizedUuidOrSlug): Promise<ApiDisplayTab[]> {\n return this.client.getJson<ApiDisplayTab[]>(\n `/api/v2/displays/${display.value}/tabs`,\n );\n }\n\n createTab(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayTab> {\n return this.client.requestJson<ApiDisplayTab>(\n `/api/v2/displays/${display.value}/tabs`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateTab(\n display: NormalizedUuidOrSlug,\n tabId: string,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayTab> {\n return this.client.requestJson<ApiDisplayTab>(\n `/api/v2/displays/${display.value}/tabs/${segment(tabId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteTab(display: NormalizedUuidOrSlug, tabId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/tabs/${segment(tabId)}`,\n { method: \"DELETE\" },\n );\n }\n\n listVariables(display: NormalizedUuidOrSlug): Promise<ApiDisplayVariable[]> {\n return this.client.getJson<ApiDisplayVariable[]>(\n `/api/v2/displays/${display.value}/variables`,\n );\n }\n\n getVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<ApiDisplayVariable> {\n return this.client.getJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n );\n }\n\n createVariable(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayVariable> {\n return this.client.requestJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateVariable(display: NormalizedUuidOrSlug, variableId: string, body: Record<string, unknown>): Promise<ApiDisplayVariable> {\n return this.client.requestJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n { method: \"DELETE\" },\n );\n }\n\n listWidgets(display: NormalizedUuidOrSlug): Promise<ApiDisplayWidget[]> {\n return this.client.getJson<ApiDisplayWidget[]>(\n `/api/v2/displays/${display.value}/widgets`,\n );\n }\n\n getWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<ApiDisplayWidget> {\n return this.client.getJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n );\n }\n\n createWidget(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayWidget> {\n return this.client.requestJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateWidget(display: NormalizedUuidOrSlug, widgetId: string, body: Record<string, unknown>): Promise<ApiDisplayWidget> {\n return this.client.requestJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n createNavigationTarget(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayNavigationTarget> {\n return this.client.requestJson<ApiDisplayNavigationTarget>(\n `/api/v2/displays/${display.value}/navigation-targets`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateNavigationTarget(\n display: NormalizedUuidOrSlug,\n targetId: string,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayNavigationTarget> {\n return this.client.requestJson<ApiDisplayNavigationTarget>(\n `/api/v2/displays/${display.value}/navigation-targets/${segment(targetId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteNavigationTarget(\n display: NormalizedUuidOrSlug,\n targetId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/navigation-targets/${segment(targetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n getCrossWidgetFilter(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n );\n }\n\n setCrossWidgetFilter(\n display: NormalizedUuidOrSlug,\n body: unknown[],\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n jsonOptions(body, \"PUT\"),\n );\n }\n\n deleteCrossWidgetFilter(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n { method: \"DELETE\" },\n );\n }\n\n listFolders(): Promise<ApiDisplayFolder[]> {\n return this.client.getJson<ApiDisplayFolder[]>(\"/api/v2/display-folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<ApiDisplayFolder> {\n return this.client.requestJson<ApiDisplayFolder>(\n \"/api/v2/display-folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayFolder> {\n return this.client.requestJson<ApiDisplayFolder>(\n `/api/v2/display-folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/display-folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveDisplay(input: MoveDisplayInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/display-folders/displays:move\",\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","export type ExpressionComparator =\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"contains\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\";\n\nexport type ExpressionValue = string | readonly string[] | null;\n\nexport interface ParsedExpression {\n field: string;\n comparator: ExpressionComparator;\n value: ExpressionValue;\n raw: string;\n}\n\nconst supportedComparators = new Set<ExpressionComparator>([\n \"eq\",\n \"neq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"contains\",\n \"in\",\n \"is_empty\",\n \"is_not_empty\",\n]);\n\nconst noValueComparators = new Set<ExpressionComparator>([\"is_empty\", \"is_not_empty\"]);\n\nfunction parseColonExpression(input: string): [string, string, string] {\n const parts = input.split(\":\");\n\n if (parts.length < 2) {\n throw new Error(`Expected a field:comparator[:value] expression, got \"${input}\".`);\n }\n\n const field = parts[0]?.trim();\n const comparator = parts[1]?.trim();\n\n if (!field) {\n throw new Error(`Expected a field before \":\", got \"${input}\".`);\n }\n\n if (!comparator) {\n throw new Error(`Expected a comparator after \"${field}:\", got \"${input}\".`);\n }\n\n return [field, comparator, parts.slice(2).join(\":\").trim()];\n}\n\nfunction parseSpaceExpression(input: string): [string, string, string] {\n const parts = input.trim().split(/\\s+/);\n\n if (parts.length < 2) {\n throw new Error(`Expected a field comparator expression, got \"${input}\".`);\n }\n\n const field = parts[0];\n const comparator = parts[1];\n\n if (!field) {\n throw new Error(`Expected a field comparator expression, got \"${input}\".`);\n }\n\n if (!comparator) {\n throw new Error(`Expected a comparator after \"${field}\", got \"${input}\".`);\n }\n\n return [field.trim(), comparator.trim(), parts.slice(2).join(\" \").trim()];\n}\n\nfunction normalizeValue(comparator: ExpressionComparator, rawValue: string): ExpressionValue {\n if (noValueComparators.has(comparator)) {\n if (rawValue.length > 0) {\n throw new Error(`Comparator \"${comparator}\" does not accept a value.`);\n }\n\n return null;\n }\n\n if (comparator === \"in\") {\n const values = rawValue\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n\n if (values.length === 0) {\n throw new Error(`Comparator \"${comparator}\" requires at least one value.`);\n }\n\n return values;\n }\n\n if (rawValue.length === 0) {\n throw new Error(`Comparator \"${comparator}\" requires a value.`);\n }\n\n return rawValue;\n}\n\nexport function parseExpression(input: string): ParsedExpression {\n const trimmed = input.trim();\n const [field, comparatorCandidate, rawValue] = trimmed.includes(\":\") && !trimmed.includes(\" \")\n ? parseColonExpression(trimmed)\n : parseSpaceExpression(trimmed);\n\n if (!supportedComparators.has(comparatorCandidate as ExpressionComparator)) {\n throw new Error(\n `Unsupported comparator \"${comparatorCandidate}\" in expression \"${input}\".`,\n );\n }\n\n const comparator = comparatorCandidate as ExpressionComparator;\n\n return {\n field,\n comparator,\n value: normalizeValue(comparator, rawValue),\n raw: trimmed,\n };\n}\n","import { basename } from \"node:path\";\n\nimport { Command } from \"commander\";\n\nimport {\n DocumentTemplatesApi,\n type ApiDocumentTemplate,\n type CreateDocumentTemplateInput,\n type UpdateDocumentTemplateInput,\n} from \"../api/document-templates.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n downloadToOutput,\n openUploadFile,\n type BinaryWriter,\n} from \"../utils/file-transfers.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isJsonObject,\n isEmptyObject,\n parseUuidOrSlugSelector,\n readTextFile,\n writeLine,\n} from \"./shared.js\";\n\nexport interface RegisterDocumentTemplatesCommandsOptions {\n configPath?: string;\n stdout?: BinaryWriter;\n}\n\ninterface TemplateCreateCommandOptions {\n name?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface TemplateUpdateCommandOptions {\n name?: string;\n}\n\ninterface AssetAddCommandOptions {\n name?: string;\n}\n\ninterface AssetDownloadCommandOptions {\n output?: string;\n}\n\nfunction createDocumentTemplatesApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return { api: new DocumentTemplatesApi(client), ...runtime };\n}\n\nfunction parseJsonValue(input: string, sourceLabel: string): unknown {\n try {\n return JSON.parse(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n}\n\nfunction readJsonObjectOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonObject {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Provide either \"${rawLabel}\" or \"${rawFileLabel}\", not both.`,\n );\n }\n\n let parsed: unknown;\n\n if (raw) {\n parsed = parseJsonValue(raw, rawLabel);\n } else if (rawFile) {\n parsed = parseJsonValue(readTextFile(rawFile, rawFileLabel), `${rawFileLabel} ${rawFile}`);\n } else {\n return {};\n }\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${raw ? rawLabel : rawFileLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nfunction templateRows(templates: readonly ApiDocumentTemplate[]): Record<string, unknown>[] {\n return templates.map((template) => ({\n id: template.id ?? \"\",\n name: template.name ?? \"\",\n assetCount: Array.isArray(template.assets) ? template.assets.length : 0,\n updatedAt: template.updatedAt ?? \"\",\n }));\n}\n\nfunction resolveTemplate(\n templates: readonly ApiDocumentTemplate[],\n selector: NormalizedUuidOrSlug,\n): ApiDocumentTemplate {\n if (selector.kind === \"uuid\") {\n const match = templates.find((template) => template.id === selector.value);\n\n if (match) {\n return match;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" was not found.`,\n );\n }\n\n const matches = templates.filter((template) => template.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiDocumentTemplate;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" was not found.`,\n );\n}\n\nasync function resolveTemplateSelector(\n api: DocumentTemplatesApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const templates = await api.listTemplates();\n const resolved = resolveTemplate(templates, selector);\n\n if (typeof resolved.id !== \"string\" || resolved.id.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" is missing an id in the API response.`,\n );\n }\n\n return { kind: \"uuid\", value: resolved.id };\n}\n\nfunction buildCreateInput(\n options: TemplateCreateCommandOptions,\n): CreateDocumentTemplateInput {\n const raw = readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\");\n const input: JsonObject = { ...raw };\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (typeof input.name !== \"string\" || input.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide template name via \"--name\".');\n }\n\n if (input.assets === undefined) {\n input.assets = [];\n }\n\n return input as unknown as CreateDocumentTemplateInput;\n}\n\nfunction buildUpdateInput(\n options: TemplateUpdateCommandOptions,\n): UpdateDocumentTemplateInput {\n const input: UpdateDocumentTemplateInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\"invalid_cli_usage\", 'Provide template updates via \"--name\".');\n }\n\n return input;\n}\n\nexport function registerDocumentTemplatesCommands(\n program: Command,\n options: RegisterDocumentTemplatesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const templates = program\n .command(\"document-templates\")\n .description(\"Manage document templates and their assets\");\n\n templates\n .command(\"list\")\n .description(\"List document templates\")\n .action(async function action(this: Command) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n const data = await api.listTemplates();\n\n if (json) {\n emitJson(stdout, \"document-templates list\", data, filePath);\n return;\n }\n\n printTable(templateRows(data), [\"id\", \"name\", \"assetCount\", \"updatedAt\"], stdout);\n });\n\n templates\n .command(\"get\")\n .description(\"Get a document template by UUID or exact name\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, template: NormalizedUuidOrSlug) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n const list = await api.listTemplates();\n const data = resolveTemplate(list, template);\n\n if (json) {\n emitJson(stdout, \"document-templates get\", data, filePath);\n return;\n }\n\n printTable([data as Record<string, unknown>], undefined, stdout);\n });\n\n templates\n .command(\"create\")\n .description(\"Create a document template\")\n .option(\"--name <name>\", \"template name\")\n .option(\"--raw <json>\", \"raw create JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw create JSON payload\")\n .action(async function action(\n this: Command,\n commandOptions: TemplateCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates create\", readOnly, \"write\");\n const data = await api.createTemplate(buildCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"document-templates create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created document template \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n templates\n .command(\"update\")\n .description(\"Rename a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"new template name\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n commandOptions: TemplateUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates update\", readOnly, \"write\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.updateTemplate(resolved, buildUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"document-templates update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated document template \"${String(data.name ?? template.value)}\".`);\n });\n\n templates\n .command(\"delete\")\n .description(\"Delete a document template (and its assets)\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, template: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates delete\", readOnly, \"destructive\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.deleteTemplate(resolved);\n\n if (json) {\n emitJson(stdout, \"document-templates delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted document template \"${template.value}\".`);\n });\n\n const assets = templates.command(\"assets\").description(\"Manage document template assets\");\n\n assets\n .command(\"add\")\n .description(\"Upload an asset file to a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<path>\", \"path to the local file\")\n .option(\"--name <name>\", \"override the asset display name\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n localPath: string,\n commandOptions: AssetAddCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates assets add\", readOnly, \"write\");\n\n const contents = await openUploadFile(localPath);\n const formData = new FormData();\n formData.append(\"file\", contents, basename(localPath));\n\n if (commandOptions.name !== undefined) {\n formData.append(\"name\", commandOptions.name);\n }\n\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.addAsset(resolved, formData);\n\n if (json) {\n emitJson(stdout, \"document-templates assets add\", data, filePath);\n return;\n }\n\n writeLine(\n stdout,\n `Added asset \"${commandOptions.name ?? basename(localPath)}\" to template \"${template.value}\".`,\n );\n });\n\n assets\n .command(\"delete\")\n .description(\"Delete one asset from a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<asset>\", \"asset UUID\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n assetId: string,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates assets delete\", readOnly, \"destructive\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.deleteAsset(resolved, assetId);\n\n if (json) {\n emitJson(stdout, \"document-templates assets delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted asset \"${assetId}\" from template \"${template.value}\".`);\n });\n\n assets\n .command(\"download\")\n .description(\"Download the raw bytes of a document template asset\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<asset>\", \"asset UUID\")\n .option(\"--output <path>\", \"write the downloaded bytes to a path\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n assetId: string,\n commandOptions: AssetDownloadCommandOptions,\n ) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n\n if (json && !commandOptions.output) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide \"--output\" when using \"--json\" with \"document-templates assets download\".',\n );\n }\n\n const resolved = await resolveTemplateSelector(api, template);\n const bytes = await downloadToOutput(\n (destination) => api.downloadAsset(resolved, assetId, destination),\n stdout,\n commandOptions.output,\n );\n\n if (commandOptions.output) {\n if (json) {\n emitJson(\n stdout,\n \"document-templates assets download\",\n {\n template: resolved.value,\n asset: assetId,\n output: commandOptions.output,\n bytes,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded asset to \"${commandOptions.output}\".`);\n return;\n }\n });\n}\n","import type { Writable } from \"node:stream\";\n\nimport { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiDocumentTemplateAsset {\n [key: string]: unknown;\n id?: string;\n name?: string;\n link?: string;\n}\n\nexport interface ApiDocumentTemplate {\n [key: string]: unknown;\n id?: string;\n name?: string;\n assets?: ApiDocumentTemplateAsset[];\n createdAt?: string;\n updatedAt?: string;\n createdBy?: string;\n updatedBy?: string;\n}\n\nexport interface CreateDocumentTemplateInput {\n [key: string]: unknown;\n name: string;\n assets?: ApiDocumentTemplateAsset[];\n}\n\nexport interface UpdateDocumentTemplateInput {\n [key: string]: unknown;\n name?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class DocumentTemplatesApi {\n constructor(private readonly client: ApiClient) {}\n\n listTemplates(): Promise<ApiDocumentTemplate[]> {\n return this.client.getJson<ApiDocumentTemplate[]>(\"/api/v2/document-templates\");\n }\n\n createTemplate(input: CreateDocumentTemplateInput): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n \"/api/v2/document-templates\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateTemplate(\n template: NormalizedUuidOrSlug,\n input: UpdateDocumentTemplateInput,\n ): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteTemplate(template: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}`,\n { method: \"DELETE\" },\n );\n }\n\n addAsset(\n template: NormalizedUuidOrSlug,\n input: FormData,\n ): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets`,\n { method: \"POST\", body: input },\n );\n }\n\n deleteAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets/${encodeURIComponent(assetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n downloadAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n destination: Writable,\n ): Promise<number> {\n return this.client.download(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets/${encodeURIComponent(assetId)}/download`,\n destination,\n );\n }\n}\n","import { createWriteStream, openAsBlob } from \"node:fs\";\nimport { mkdtemp, rename, rm } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { Writable } from \"node:stream\";\nimport { finished } from \"node:stream/promises\";\n\nimport { ApiClientError } from \"../client.js\";\nimport { CliError } from \"./errors.js\";\n\nexport interface BinaryWriter {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport async function openUploadFile(filePath: string): Promise<Blob> {\n try {\n return await openAsBlob(filePath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\"invalid_cli_usage\", `Failed to read file at ${filePath}: ${message}`);\n }\n}\n\nexport async function downloadToOutput(\n download: (destination: Writable) => Promise<number>,\n stdout: BinaryWriter,\n outputPath?: string,\n): Promise<number> {\n if (!outputPath) {\n // Finish this adapter after the last write callback without closing stdout.\n const destination = new Writable({\n write(chunk: Buffer, _encoding, callback) {\n try {\n if (stdout instanceof Writable) {\n stdout.write(chunk, callback);\n } else {\n stdout.write(chunk);\n callback();\n }\n } catch (error) {\n callback(error as Error);\n }\n },\n });\n const onError = (error: Error): void => {\n destination.destroy(error);\n };\n if (stdout instanceof Writable) {\n stdout.on(\"error\", onError);\n }\n\n try {\n return await download(destination);\n } finally {\n destination.destroy();\n if (stdout instanceof Writable) {\n stdout.off(\"error\", onError);\n }\n }\n }\n\n let tempDirectory: string | undefined;\n let destination: ReturnType<typeof createWriteStream> | undefined;\n try {\n // Keep the temporary file on the same filesystem for an atomic replacement.\n tempDirectory = await mkdtemp(join(dirname(resolve(outputPath)), \".zinkee-download-\"));\n const tempFile = join(tempDirectory, \"download\");\n destination = createWriteStream(tempFile);\n // An HTTP error may arrive before pipeline attaches its error handler.\n destination.on(\"error\", () => {});\n const bytes = await download(destination);\n await rename(tempFile, outputPath);\n return bytes;\n } catch (error) {\n const cause = error instanceof ApiClientError ? error.cause : error;\n const isFileError =\n cause instanceof Error && \"syscall\" in cause &&\n [\"open\", \"write\", \"writev\", \"close\"].includes(String(cause.syscall));\n if (error instanceof ApiClientError && !isFileError) {\n throw error;\n }\n\n const message = cause instanceof Error ? cause.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n } finally {\n if (destination) {\n destination.destroy();\n await finished(destination, { cleanup: true }).catch(() => {});\n }\n if (tempDirectory) {\n await rm(tempDirectory, { recursive: true, force: true });\n }\n }\n}\n","import { basename } from \"node:path\";\n\nimport { Command } from \"commander\";\n\nimport { FilesApi } from \"../api/files.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n downloadToOutput,\n openUploadFile,\n type BinaryWriter,\n} from \"../utils/file-transfers.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isJsonObject,\n parseUuidOrSlugSelector,\n writeLine,\n} from \"./shared.js\";\n\nexport interface RegisterFilesCommandsOptions {\n configPath?: string;\n stdout?: BinaryWriter;\n}\n\ninterface FilesDownloadCommandOptions {\n output?: string;\n}\n\nfunction createFilesApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return { api: new FilesApi(client), ...runtime };\n}\n\nexport function registerFilesCommands(\n program: Command,\n options: RegisterFilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n\n const files = program.command(\"files\").description(\"Manage files and storage\");\n\n files\n .command(\"upload\")\n .description(\"Upload a local file\")\n .argument(\"<path>\", \"path to the local file\")\n .action(async function action(this: Command, path: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files upload\", readOnly, \"write\");\n\n const contents = await openUploadFile(path);\n const formData = new FormData();\n formData.append(\"file\", contents, basename(path));\n\n return api.uploadFile(formData).then((data) => {\n if (json) {\n emitJson(stdout, \"files upload\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Uploaded file \"${basename(path)}\".`);\n });\n });\n\n files\n .command(\"download\")\n .description(\"Download a file\")\n .argument(\"<file>\", \"file identifier\")\n .option(\"--output <path>\", \"write the downloaded file to a path\")\n .action(async function action(\n this: Command,\n file: string,\n commandOptions: FilesDownloadCommandOptions,\n ) {\n const { api, json } = createFilesApi(this, filePath);\n\n if (json && !commandOptions.output) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide \"--output\" when using \"--json\" with \"files download\".',\n );\n }\n\n const fileSelector = parseUuidOrSlugSelector(file);\n\n const bytes = await downloadToOutput(\n (destination) => api.downloadFile(fileSelector, destination),\n stdout,\n commandOptions.output,\n );\n\n if (commandOptions.output) {\n if (json) {\n emitJson(\n stdout,\n \"files download\",\n { file: fileSelector.value, output: commandOptions.output, bytes },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded file to \"${commandOptions.output}\".`);\n }\n });\n\n files\n .command(\"delete\")\n .description(\"Delete a file\")\n .argument(\"<file>\", \"file identifier\")\n .action(function action(this: Command, file: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files delete\", readOnly, \"destructive\");\n\n const fileSelector = parseUuidOrSlugSelector(file);\n\n return api.deleteFile(fileSelector).then((data) => {\n if (json) {\n emitJson(stdout, \"files delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted file \"${fileSelector.value}\".`);\n });\n });\n\n files\n .command(\"storage\")\n .description(\"Show storage usage information\")\n .action(function action(this: Command) {\n const { api, json } = createFilesApi(this, filePath);\n\n return api.getStorageInfo().then((data) => {\n if (json) {\n emitJson(stdout, \"files storage\", data, filePath);\n return;\n }\n\n if (isJsonObject(data)) {\n printTable([data], Object.keys(data), stdout);\n return;\n }\n\n writeLine(stdout, String(data));\n });\n });\n}\n","import type { Writable } from \"node:stream\";\n\nimport { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiFile {\n [key: string]: unknown;\n id?: string;\n name?: string;\n filename?: string;\n size?: number;\n mimeType?: string;\n}\n\nexport interface FileStorageInfo {\n [key: string]: unknown;\n usedBytes?: number;\n totalBytes?: number;\n availableBytes?: number;\n used?: number;\n limitBytes?: number;\n}\n\nexport class FilesApi {\n constructor(private readonly client: ApiClient) {}\n\n uploadFile(input: FormData): Promise<ApiFile> {\n return this.client.requestJson<ApiFile>(\"/api/v2/files\", {\n method: \"POST\",\n body: input,\n });\n }\n\n downloadFile(file: NormalizedUuidOrSlug, destination: Writable): Promise<number> {\n return this.client.download(`/api/v2/files/${file.value}`, destination);\n }\n\n deleteFile(file: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/files/${file.value}`,\n { method: \"DELETE\" },\n );\n }\n\n getStorageInfo(): Promise<FileStorageInfo> {\n return this.client.getJson<FileStorageInfo>(\"/api/v2/files/storage-info\");\n }\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport type FormulaRecomputeScope = \"FIELD\" | \"SCHEMA\" | \"WORKSPACE\";\n\nexport interface FormulaRecomputeResponse {\n requestId: string;\n scope: FormulaRecomputeScope;\n formulaCount: number;\n skippedFormulaCount: number;\n eventsQueued: number;\n status: \"QUEUED\";\n}\n\nexport type FormulaRecomputeInput =\n | {\n scope: \"FIELD\";\n schema: NormalizedUuidOrSlug;\n field: NormalizedUuidOrSlug;\n }\n | {\n scope: \"SCHEMA\";\n schema: NormalizedUuidOrSlug;\n }\n | {\n scope: \"WORKSPACE\";\n };\n\nfunction toRequestBody(input: FormulaRecomputeInput): Record<string, string> {\n if (input.scope === \"FIELD\") {\n return {\n scope: input.scope,\n schema: input.schema.value,\n field: input.field.value,\n };\n }\n\n if (input.scope === \"SCHEMA\") {\n return {\n scope: input.scope,\n schema: input.schema.value,\n };\n }\n\n return { scope: input.scope };\n}\n\nexport class FormulasApi {\n constructor(private readonly client: ApiClient) {}\n\n recompute(input: FormulaRecomputeInput): Promise<FormulaRecomputeResponse> {\n return this.client.requestJson<FormulaRecomputeResponse>(\n \"/api/v2/formulas:recompute\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(toRequestBody(input)),\n },\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n FormulasApi,\n type FormulaRecomputeInput,\n type FormulaRecomputeResponse,\n} from \"../api/formulas.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterFormulasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface ConfirmedCommandOptions {\n yes?: boolean;\n}\n\nfunction createFormulasApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new FormulasApi(client),\n ...runtime,\n };\n}\n\nfunction ensureConfirmed(commandName: string, confirmed: boolean | undefined): void {\n if (!confirmed) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Command \"${commandName}\" requires --yes because it may enqueue a large recalculation.`,\n );\n }\n}\n\nfunction emitResult(\n stdout: CommandIo,\n commandName: string,\n result: FormulaRecomputeResponse,\n configPath: string,\n json: boolean,\n): void {\n if (json) {\n emitJson(stdout, commandName, result, configPath);\n return;\n }\n\n writeLine(\n stdout,\n `Queued ${result.eventsQueued} formula recalculation event(s) for ${result.scope.toLowerCase()} scope (request ${result.requestId}).`,\n );\n}\n\nasync function recompute(\n command: Command,\n commandName: string,\n input: FormulaRecomputeInput,\n options: RegisterFormulasCommandsOptions,\n requireConfirmation: boolean,\n confirmed?: boolean,\n): Promise<void> {\n const configPath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const { api, json, readOnly } = createFormulasApi(command, configPath);\n\n ensureWritable(commandName, readOnly, \"write\");\n if (requireConfirmation) {\n ensureConfirmed(commandName, confirmed);\n }\n\n const result = await api.recompute(input);\n emitResult(stdout, commandName, result, configPath, json);\n}\n\nexport function registerFormulasCommands(\n program: Command,\n options: RegisterFormulasCommandsOptions = {},\n): void {\n const formulas = program\n .command(\"formulas\")\n .description(\"Recalculate formula values\");\n const recomputeCommand = formulas\n .command(\"recompute\")\n .description(\"Queue a full formula recalculation\");\n\n recomputeCommand\n .command(\"field\")\n .description(\"Queue recalculation of one formula column\")\n .argument(\"<schema>\", \"schema UUID or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"formula field UUID or slug\", parseUuidOrSlugSelector)\n .action(\n async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n await recompute(\n this,\n \"formulas recompute field\",\n { scope: \"FIELD\", schema, field },\n options,\n false,\n );\n },\n );\n\n recomputeCommand\n .command(\"schema\")\n .description(\"Queue recalculation of all active formulas in one schema\")\n .argument(\"<schema>\", \"schema UUID or slug\", parseUuidOrSlugSelector)\n .option(\"--yes\", \"confirm the potentially expensive recalculation\")\n .action(\n async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: ConfirmedCommandOptions,\n ) {\n await recompute(\n this,\n \"formulas recompute schema\",\n { scope: \"SCHEMA\", schema },\n options,\n true,\n commandOptions.yes,\n );\n },\n );\n\n recomputeCommand\n .command(\"workspace\")\n .description(\"Queue recalculation of all active formulas in the workspace\")\n .option(\"--yes\", \"confirm the potentially expensive recalculation\")\n .action(async function action(\n this: Command,\n commandOptions: ConfirmedCommandOptions,\n ) {\n await recompute(\n this,\n \"formulas recompute workspace\",\n { scope: \"WORKSPACE\" },\n options,\n true,\n commandOptions.yes,\n );\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiLogChange {\n beforeValue?: string | null;\n afterValue?: string | null;\n author?: string;\n operation?: string;\n}\n\nexport interface ApiLog {\n [key: string]: unknown;\n recordId?: string;\n timestamp?: string;\n changeField?: string;\n change?: ApiLogChange;\n}\n\nexport class LogsApi {\n constructor(private readonly client: ApiClient) {}\n\n listLogs(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n ): Promise<ApiLog[]> {\n return this.client.getJson<ApiLog[]>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/logs`,\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport { LogsApi } from \"../api/logs.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n parseUuidOrSlugSelector,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterLogsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nfunction createLogsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new LogsApi(client),\n ...runtime,\n };\n}\n\nexport function registerLogsCommands(\n program: Command,\n options: RegisterLogsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const logs = program.command(\"logs\").description(\"Inspect record change logs\");\n\n logs\n .command(\"list\")\n .description(\"List change logs for a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createLogsApi(this, filePath);\n const data = await api.listLogs(schema, record.value);\n\n if (json) {\n emitJson(stdout, \"logs list\", data);\n return;\n }\n\n emitTable(stdout, data);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command } from \"commander\";\n\nimport { NavigationApi, type NavigationFolder } from \"../api/navigation.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterNavigationCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderMutationOptions {\n name?: string;\n order?: string;\n props?: string;\n propsFile?: string;\n}\n\nfunction createNavigationApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new NavigationApi(client),\n ...runtime,\n };\n}\n\nfunction parseInteger(value: string | undefined, flagName: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number.parseInt(value, 10);\n if (Number.isNaN(parsed)) {\n throw new CliError(\"invalid_cli_usage\", `${flagName} must be an integer.`);\n }\n\n return parsed;\n}\n\nfunction readJsonObject(raw?: string, rawFile?: string): Record<string, unknown> {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--props\" or \"--props-file\", not both.');\n }\n\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return {};\n }\n\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Props payload must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(\"invalid_cli_usage\", \"Props payload is invalid JSON.\");\n }\n}\n\nfunction buildFolderBody(options: FolderMutationOptions): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n body.name = options.name;\n }\n\n const order = parseInteger(options.order, \"--order\");\n if (order !== undefined) {\n body.order = order;\n }\n\n const props = readJsonObject(options.props, options.propsFile);\n if (Object.keys(props).length > 0) {\n body.additionalProperties = props;\n }\n\n return body;\n}\n\nfunction resolveFolder(\n folders: readonly NavigationFolder[],\n selector: NormalizedUuidOrSlug,\n): NavigationFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n if (!match) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n }\n return match;\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n if (matches.length === 1) {\n return matches[0] as NavigationFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction folderRows(folders: readonly NavigationFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id,\n order: folder.order ?? \"\",\n name: folder.name ?? \"\",\n resourceCount: Array.isArray(folder.resources) ? folder.resources.length : \"\",\n }));\n}\n\nexport function registerNavigationCommands(\n program: Command,\n options: RegisterNavigationCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const navigation = program.command(\"navigation\").description(\"Manage workspace navigation\");\n const folders = navigation.command(\"folders\").description(\"Manage navigation folders\");\n\n folders\n .command(\"list\")\n .description(\"List navigation folders\")\n .action(async function action(this: Command) {\n const { api, json } = createNavigationApi(this, filePath);\n const data = await api.listFolders();\n\n if (json) {\n emitJson(stdout, \"navigation folders list\", data, filePath);\n return;\n }\n\n printTable(folderRows(data), [\"id\", \"order\", \"name\", \"resourceCount\"], stdout);\n });\n\n folders\n .command(\"get\")\n .description(\"Get a navigation folder by UUID or exact name\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json } = createNavigationApi(this, filePath);\n const data = await api.listFolders();\n const resolved = resolveFolder(data, folder);\n\n if (json) {\n emitJson(stdout, \"navigation folders get\", resolved, filePath);\n return;\n }\n\n printTable(folderRows([resolved]), [\"id\", \"order\", \"name\", \"resourceCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a navigation folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\")\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"color\\\":\\\"blue\\\",\\\"icon\\\":\\\"chart-line\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(this: Command, commandOptions: FolderMutationOptions) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders create\", readOnly, \"write\");\n const data = await api.createFolder(buildFolderBody(commandOptions));\n\n if (json) {\n emitJson(stdout, \"navigation folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created navigation folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update a navigation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\")\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"color\\\":\\\"blue\\\",\\\"icon\\\":\\\"chart-line\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug, commandOptions: FolderMutationOptions) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders update\", readOnly, \"write\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, folder);\n const body = buildFolderBody(commandOptions);\n\n if (Object.keys(body).length === 0) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n }\n\n const data = await api.updateFolder({ kind: \"uuid\", value: resolved.id }, body);\n\n if (json) {\n emitJson(stdout, \"navigation folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated navigation folder \"${String(data.name ?? resolved.name ?? resolved.id)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a navigation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders delete\", readOnly, \"destructive\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, folder);\n const data = await api.deleteFolder({ kind: \"uuid\", value: resolved.id });\n\n if (json) {\n emitJson(stdout, \"navigation folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted navigation folder \"${resolved.name ?? resolved.id}\".`);\n });\n\n navigation\n .command(\"resources\")\n .description(\"Manage navigation resources\")\n .command(\"move\")\n .description(\n \"Move a schema into a navigation folder. Only schemas can be moved (the navigation menu holds databases); schedules and sub-schemas follow their parent schema. Use the root folder UUID 00000000-0000-0000-0000-000000000000 to move it back to the workspace root.\",\n )\n .argument(\"<resource>\", \"schema UUID\")\n .requiredOption(\"--to <folder>\", \"target folder UUID or exact name\")\n .action(async function action(\n this: Command,\n resourceId: string,\n commandOptions: { to: string },\n ) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation resources move\", readOnly, \"write\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, parseUuidOrSlugSelector(commandOptions.to));\n const data = await api.moveResource({\n resourceId,\n targetFolderId: resolved.id,\n });\n\n if (json) {\n emitJson(stdout, \"navigation resources move\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Moved resource \"${resourceId}\" to \"${resolved.name ?? resolved.id}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface NavigationFolder {\n id: string;\n order?: number;\n name?: string;\n resources?: Array<Record<string, unknown>>;\n additionalProperties?: Record<string, unknown>;\n}\n\nexport interface NavigationFolderMutation {\n folderId?: string;\n name?: string;\n}\n\nexport interface NavigationMoveResourceInput {\n resourceId: string;\n targetFolderId: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class NavigationApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(): Promise<NavigationFolder[]> {\n return this.client.getJson<NavigationFolder[]>(\"/api/v2/navigation/folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n \"/api/v2/navigation/folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(folder: NormalizedUuidOrSlug, body: Record<string, unknown>): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveResource(body: NavigationMoveResourceInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/navigation/resources:move\",\n jsonOptions(body, \"POST\"),\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n ProfileResolutionError,\n readConfigIfExists,\n redactProfile,\n removeProfileConfig,\n setDefaultProfile,\n setProfileConfig,\n validateBaseUrl,\n writeConfig,\n} from \"../config.js\";\nimport type { AppConfig, ProfileConfig } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n emitJson,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterProfilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport interface DisplayProfile extends ProfileConfig {\n name: string;\n isDefault: boolean;\n}\n\nfunction readRequiredConfig(filePath: string): AppConfig {\n const config = readConfigIfExists(filePath);\n\n if (config) {\n return config;\n }\n\n throw new CliError(\"configuration_error\", `Config file not found at ${filePath}.`);\n}\n\nfunction getRequiredProfile(config: AppConfig, profileName: string): ProfileConfig {\n const profile = config.profiles[profileName];\n\n if (profile) {\n return profile;\n }\n\n throw new CliError(\"configuration_error\", `Profile \"${profileName}\" not found in config.`);\n}\n\nfunction toDisplayProfile(\n profileName: string,\n profile: ProfileConfig,\n defaultProfile: string | undefined,\n): DisplayProfile {\n return {\n name: profileName,\n isDefault: defaultProfile === profileName,\n ...redactProfile(profile),\n };\n}\n\nfunction loadConfigForAdd(filePath: string): AppConfig {\n return readConfigIfExists(filePath) ?? { profiles: {} };\n}\n\nfunction normalizeProfileBaseUrl(baseUrl: string | undefined): string | undefined {\n if (baseUrl === undefined) {\n return undefined;\n }\n\n try {\n return validateBaseUrl(baseUrl, '\"--base-url\"');\n } catch (error) {\n if (error instanceof ProfileResolutionError) {\n throw new CliError(\"configuration_error\", error.message);\n }\n\n throw error;\n }\n}\n\nfunction emitProfilesTable(stdout: CommandIo, data: readonly DisplayProfile[]): void {\n printTable(\n data.map((profile) => ({\n name: profile.name,\n default: profile.isDefault ? \"yes\" : \"\",\n baseUrl: profile.baseUrl ?? \"\",\n apiKey: profile.apiKey ?? \"\",\n })),\n [\"name\", \"default\", \"baseUrl\", \"apiKey\"],\n stdout,\n );\n}\n\nexport function registerProfilesCommands(\n program: Command,\n options: RegisterProfilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const profiles = program.command(\"profiles\").description(\"Manage local CLI profiles\");\n\n profiles\n .command(\"list\")\n .description(\"List configured profiles\")\n .action(function action(this: Command) {\n const config = readRequiredConfig(filePath);\n const data = Object.entries(config.profiles).map(([name, profile]) =>\n toDisplayProfile(name, profile, config.defaultProfile),\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles list\", data, filePath);\n return;\n }\n\n emitProfilesTable(stdout, data);\n });\n\n profiles\n .command(\"get\")\n .description(\"Show a single configured profile\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n const profile = getRequiredProfile(config, profileName);\n const data = toDisplayProfile(profileName, profile, config.defaultProfile);\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles get\", data, filePath);\n return;\n }\n\n emitProfilesTable(stdout, [data]);\n });\n\n profiles\n .command(\"use\")\n .description(\"Set the default profile\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const nextConfig = setDefaultProfile(config, profileName);\n writeConfig(nextConfig, filePath);\n const data = {\n profile: profileName,\n defaultProfile: nextConfig.defaultProfile,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles use\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Using profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"add\")\n .description(\"Add a profile to the local config\")\n .argument(\"<profile>\", \"profile name\")\n .requiredOption(\"--api-key <token>\", \"API key\")\n .option(\"--base-url <url>\", \"base URL\")\n .action(function action(\n this: Command,\n profileName: string,\n commandOptions: { apiKey: string; baseUrl?: string },\n ) {\n const config = loadConfigForAdd(filePath);\n\n if (config.profiles[profileName]) {\n throw new CliError(\n \"configuration_error\",\n `Profile \"${profileName}\" already exists in config.`,\n );\n }\n\n const baseUrl = normalizeProfileBaseUrl(commandOptions.baseUrl);\n\n let nextConfig = setProfileConfig(config, profileName, {\n apiKey: commandOptions.apiKey,\n baseUrl,\n });\n\n if (!nextConfig.defaultProfile) {\n nextConfig = setDefaultProfile(nextConfig, profileName);\n }\n\n writeConfig(nextConfig, filePath);\n const data = toDisplayProfile(\n profileName,\n nextConfig.profiles[profileName] ?? {},\n nextConfig.defaultProfile,\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles add\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Added profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"update\")\n .description(\"Update an existing profile\")\n .argument(\"<profile>\", \"profile name\")\n .option(\"--api-key <token>\", \"API key\")\n .option(\"--base-url <url>\", \"base URL\")\n .action(function action(\n this: Command,\n profileName: string,\n commandOptions: { apiKey?: string; baseUrl?: string },\n ) {\n if (commandOptions.apiKey === undefined && commandOptions.baseUrl === undefined) {\n throw new CliError(\n \"configuration_error\",\n 'Provide at least one of \"--api-key\" or \"--base-url\".',\n );\n }\n\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const baseUrl = normalizeProfileBaseUrl(commandOptions.baseUrl);\n\n const nextConfig = setProfileConfig(config, profileName, {\n apiKey: commandOptions.apiKey,\n baseUrl,\n });\n\n writeConfig(nextConfig, filePath);\n const data = toDisplayProfile(\n profileName,\n nextConfig.profiles[profileName] ?? {},\n nextConfig.defaultProfile,\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"remove\")\n .description(\"Remove a profile from the local config\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const nextConfig = removeProfileConfig(config, profileName);\n writeConfig(nextConfig, filePath);\n const data = {\n profile: profileName,\n defaultProfile: nextConfig.defaultProfile,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles remove\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Removed profile \"${profileName}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n RecordsApi,\n type ApiRecord,\n type CreateRecordValues,\n type RecordQueryExpression,\n type RecordQueryInput,\n type RecordQueryResult,\n type UpdateRecordInput,\n} from \"../api/records.js\";\nimport { SchemasApi } from \"../api/schemas.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport {\n parseExpression,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport {\n parseJsonAssignment,\n parseKeyValue,\n type JsonKeyValueAssignment,\n type KeyValueAssignment,\n} from \"../parsers/kv.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseNonNegativeInteger,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterRecordsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface RecordsQueryCommandOptions {\n select?: string[];\n where?: ParsedExpression[];\n search?: string;\n sort?: string[];\n limit?: number;\n offset?: number;\n raw?: string;\n rawFile?: string;\n}\n\ninterface RecordsListCommandOptions {\n limit?: number;\n offset?: number;\n}\n\ninterface RecordsCreateCommandOptions {\n set?: KeyValueAssignment[];\n setJson?: JsonKeyValueAssignment[];\n raw?: string;\n rawFile?: string;\n recordsFile?: string;\n}\n\ninterface RecordsUpdateCommandOptions extends RecordsCreateCommandOptions {\n unset?: string[];\n}\n\ninterface RecordsDeleteCommandOptions {\n record?: string[];\n recordsFile?: string;\n}\n\nfunction createRecordsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new RecordsApi(client),\n schemasApi: new SchemasApi(client),\n ...runtime,\n };\n}\n\nfunction parseCommaSeparatedValues(\n input: string,\n label: string,\n): string[] {\n const values = input\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n\n if (values.length === 0) {\n throw new InvalidArgumentError(`Expected ${label} to contain at least one value.`);\n }\n\n return values;\n}\n\nfunction parseExpressionValue(input: string): ParsedExpression {\n try {\n return parseExpression(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid expression.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction parseKeyValueAssignment(input: string): KeyValueAssignment {\n try {\n return parseKeyValue(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid assignment.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction parseJsonKeyValueAssignment(input: string): JsonKeyValueAssignment {\n try {\n return parseJsonAssignment(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON assignment.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction toRecordUuid(value: string): string | null {\n try {\n const normalized = normalizeUuidOrSlug(value);\n return normalized.kind === \"uuid\" ? normalized.value : null;\n } catch {\n return null;\n }\n}\n\nfunction collectRecordIds(value: string, previous: string[] = []): string[] {\n const uuid = toRecordUuid(value.trim());\n if (!uuid) {\n throw new InvalidArgumentError(`Expected a record UUID, received \"${value}\".`);\n }\n return [...previous, uuid];\n}\n\nfunction readRecordIdsFromFile(path: string): string[] {\n let contents: string;\n\n try {\n contents = readFileSync(path, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read record ids from ${path}: ${message}`,\n );\n }\n\n const ids: string[] = [];\n\n contents.split(/\\r?\\n/).forEach((line, index) => {\n const value = line.trim();\n if (!value) {\n return;\n }\n const uuid = toRecordUuid(value);\n if (!uuid) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Invalid record UUID \"${value}\" at ${path}:${index + 1}.`,\n );\n }\n ids.push(uuid);\n });\n\n return ids;\n}\n\nfunction resolveDeleteRecordIds(options: RecordsDeleteCommandOptions): string[] {\n const flagIds = options.record ?? [];\n const fileIds = options.recordsFile ? readRecordIdsFromFile(options.recordsFile) : [];\n const recordIds = dedupeStrings([...flagIds, ...fileIds]);\n\n if (recordIds.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one record id via \"--record <uuid>\" (repeatable) or \"--records-file <path>\".',\n );\n }\n\n return recordIds;\n}\n\nfunction collectStringValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction collectSelectValues(value: string, previous: string[] = []): string[] {\n return dedupeStrings([...previous, ...parseCommaSeparatedValues(value, \"--select\")]);\n}\n\nfunction collectSortValues(value: string, previous: string[] = []): string[] {\n return dedupeStrings([...previous, ...parseCommaSeparatedValues(value, \"--sort\")]);\n}\n\nfunction collectWhereExpressions(\n value: string,\n previous: ParsedExpression[] = [],\n): ParsedExpression[] {\n return [...previous, parseExpressionValue(value)];\n}\n\nfunction collectKeyValueAssignments(\n value: string,\n previous: KeyValueAssignment[] = [],\n): KeyValueAssignment[] {\n return [...previous, parseKeyValueAssignment(value)];\n}\n\nfunction collectJsonAssignments(\n value: string,\n previous: JsonKeyValueAssignment[] = [],\n): JsonKeyValueAssignment[] {\n return [...previous, parseJsonKeyValueAssignment(value)];\n}\n\nfunction buildAssignmentObject(\n assignments: readonly KeyValueAssignment[] = [],\n jsonAssignments: readonly JsonKeyValueAssignment[] = [],\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n\n for (const assignment of assignments) {\n output[assignment.key] = assignment.value;\n }\n\n for (const assignment of jsonAssignments) {\n output[assignment.key] = assignment.value;\n }\n\n return output;\n}\n\nfunction toQueryExpressions(\n expressions: readonly ParsedExpression[] | undefined,\n): RecordQueryExpression[] | undefined {\n if (!expressions || expressions.length === 0) {\n return undefined;\n }\n\n return expressions.map((expression) => ({\n field: expression.field,\n comparator: expression.comparator,\n value: expression.value,\n }));\n}\n\nfunction buildRecordQueryInput(\n options: RecordsQueryCommandOptions,\n allowRaw: boolean,\n): RecordQueryInput {\n const input: RecordQueryInput = allowRaw\n ? readRawObject(options.raw, options.rawFile)\n : {};\n\n if (options.select && options.select.length > 0) {\n input.select = [...options.select];\n }\n\n const where = toQueryExpressions(options.where);\n\n if (where && where.length > 0) {\n input.where = where;\n }\n\n if (options.search !== undefined) {\n input.search = { term: options.search };\n }\n\n if (options.sort && options.sort.length > 0) {\n input.sort = [...options.sort];\n }\n\n if (options.limit !== undefined) {\n input.limit = options.limit;\n }\n\n if (options.offset !== undefined) {\n input.offset = options.offset;\n }\n\n return input;\n}\n\nfunction readRecordsFromFile(path: string): CreateRecordValues[] {\n let contents: string;\n\n try {\n contents = readFileSync(path, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read records from ${path}: ${message}`,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(contents);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from --records-file ${path}: ${message}`,\n );\n }\n\n if (!Array.isArray(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected --records-file ${path} to contain a JSON array of record objects.`,\n );\n }\n\n if (parsed.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--records-file ${path} must contain at least one record.`,\n );\n }\n\n return parsed.map((record, index) => {\n if (!isJsonObject(record)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Record at index ${index} in --records-file ${path} must be a JSON object.`,\n );\n }\n return record;\n });\n}\n\nfunction buildCreateRecords(options: RecordsCreateCommandOptions): CreateRecordValues[] {\n const hasSingleRecordFlags =\n (options.set?.length ?? 0) > 0 ||\n (options.setJson?.length ?? 0) > 0 ||\n options.raw !== undefined ||\n options.rawFile !== undefined;\n\n if (options.recordsFile !== undefined) {\n if (hasSingleRecordFlags) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--records-file\" or the single-record flags (--set/--set-json/--raw/--raw-file), not both.',\n );\n }\n return readRecordsFromFile(options.recordsFile);\n }\n\n const values = {\n ...readRawObject(options.raw, options.rawFile),\n ...buildAssignmentObject(options.set, options.setJson),\n };\n\n if (isEmptyObject(values)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide record fields via \"--set\", \"--set-json\", \"--raw\", \"--raw-file\", or load multiple records with \"--records-file\".',\n );\n }\n\n return [values];\n}\n\nfunction buildRecordUpdateInput(\n options: RecordsUpdateCommandOptions,\n): UpdateRecordInput {\n const raw = readRawObject(options.raw, options.rawFile);\n const input: UpdateRecordInput = {};\n const setPayload = {\n ...raw,\n ...buildAssignmentObject(options.set, options.setJson),\n };\n const unsetPayload = [...(options.unset ?? [])];\n\n for (const key of Object.keys(setPayload)) {\n const unsetIndex = unsetPayload.indexOf(key);\n\n if (unsetIndex !== -1) {\n unsetPayload.splice(unsetIndex, 1);\n }\n }\n\n if (Object.keys(setPayload).length > 0) {\n input.set = setPayload;\n } else {\n delete input.set;\n }\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n } else {\n delete input.unset;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide record updates via \"--set\", \"--set-json\", \"--unset\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input;\n}\n\nfunction getQueryRecords(result: RecordQueryResult): ApiRecord[] {\n return Array.isArray(result.records) ? result.records : [];\n}\n\nfunction getRecordIdentifier(record: ApiRecord): string {\n return typeof record.recordId === \"string\" ? record.recordId : \"unknown\";\n}\n\nasync function resolveSchemaSelector(\n api: SchemasApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const schemas = await api.listSchemas();\n const match = schemas.find((entry) => entry.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Schema \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nexport function registerRecordsCommands(\n program: Command,\n options: RegisterRecordsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const records = program.command(\"records\").description(\"Manage schema records\");\n\n records\n .command(\"list\")\n .description(\"List records for a schema with simple pagination\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--limit <number>\", \"limit results\", parseNonNegativeInteger)\n .option(\"--offset <number>\", \"offset results\", parseNonNegativeInteger)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsListCommandOptions,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.listRecords(\n resolvedSchema,\n buildRecordQueryInput(commandOptions, false),\n );\n const recordsData = getQueryRecords(data);\n\n if (json) {\n emitJson(\n stdout,\n \"records list\",\n recordsData,\n filePath,\n data.page ? { page: data.page } : {},\n );\n return;\n }\n\n emitTable(stdout, recordsData);\n });\n\n records\n .command(\"query\")\n .description(\"Query records for a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--select <fields>\", \"field selection (comma-separated, repeatable)\", collectSelectValues, [])\n .option(\"--where <expression>\", \"where expression\", collectWhereExpressions, [])\n .option(\n \"--search <term>\",\n \"free-text search term (matched across the schema's searchable fields)\",\n )\n .option(\"--sort <field:direction>\", \"sort field(s)\", collectSortValues, [])\n .option(\"--limit <number>\", \"limit results\", parseNonNegativeInteger)\n .option(\"--offset <number>\", \"offset results\", parseNonNegativeInteger)\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsQueryCommandOptions,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.queryRecords(\n resolvedSchema,\n buildRecordQueryInput(commandOptions, true),\n );\n const recordsData = getQueryRecords(data);\n\n if (json) {\n emitJson(\n stdout,\n \"records query\",\n recordsData,\n filePath,\n data.page ? { page: data.page } : {},\n );\n return;\n }\n\n emitTable(stdout, recordsData);\n });\n\n records\n .command(\"get\")\n .description(\"Get a record by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.getRecord(resolvedSchema, record);\n\n if (json) {\n emitJson(stdout, \"records get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n records\n .command(\"create\")\n .description(\"Create one or more records\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--set <field=value>\",\n \"set a string field (reference fields: a record id, 'recordId::label', or an exact display value)\",\n collectKeyValueAssignments,\n [],\n )\n .option(\"--set-json <field=json>\", \"set a structured field\", collectJsonAssignments, [])\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .option(\n \"--records-file <path>\",\n \"path to a JSON array of record objects (mutually exclusive with --set/--set-json/--raw/--raw-file)\",\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsCreateCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records create\", readOnly, \"write\");\n\n const records = buildCreateRecords(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.createRecords(resolvedSchema, records);\n\n if (json) {\n emitJson(stdout, \"records create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created ${data.created.length} record(s) in schema \"${schema.value}\".`);\n if (data.errors.length > 0) {\n writeLine(stdout, `${data.errors.length} record(s) rejected:`);\n for (const error of data.errors) {\n writeLine(stdout, ` - index ${error.index}: ${error.message}`);\n }\n }\n });\n\n records\n .command(\"update\")\n .description(\"Update a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--set <field=value>\",\n \"set a string field (reference fields: a record id, 'recordId::label', or an exact display value)\",\n collectKeyValueAssignments,\n [],\n )\n .option(\"--set-json <field=json>\", \"set a structured field\", collectJsonAssignments, [])\n .option(\"--unset <field>\", \"unset a field\", collectStringValues, [])\n .option(\"--raw <json>\", \"raw JSON object of fields to set\")\n .option(\"--raw-file <path>\", \"path to a JSON object of fields to set\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n commandOptions: RecordsUpdateCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.updateRecord(\n resolvedSchema,\n record,\n buildRecordUpdateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"records update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated record \"${getRecordIdentifier(data)}\".`);\n });\n\n records\n .command(\"delete\")\n .description(\"Delete one or more records\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--record <uuid>\", \"record uuid to delete (repeatable)\", collectRecordIds, [])\n .option(\n \"--records-file <path>\",\n \"path to a file with one record uuid per line (merged with --record)\",\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsDeleteCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records delete\", readOnly, \"destructive\");\n\n const recordIds = resolveDeleteRecordIds(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.deleteRecords(resolvedSchema, recordIds);\n\n if (json) {\n emitJson(stdout, \"records delete\", data, filePath);\n return;\n }\n\n writeLine(\n stdout,\n `Deleted ${recordIds.length} record(s) from schema \"${schema.value}\".`,\n );\n });\n\n records\n .command(\"clear\")\n .description(\"Delete all records from a schema's table\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records clear\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.clearRecords(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"records clear\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Cleared all records from schema \"${schema.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiRecord {\n [key: string]: unknown;\n recordId?: string;\n values?: Record<string, unknown>;\n}\n\nexport interface RecordQueryExpression {\n field: string;\n comparator: string;\n value: unknown;\n}\n\nexport interface RecordQueryResult {\n records: ApiRecord[];\n page?: Record<string, unknown>;\n}\n\nexport interface RecordQueryInput {\n [key: string]: unknown;\n select?: string[];\n where?: RecordQueryExpression[];\n search?: { term: string };\n sort?: string[];\n limit?: number;\n offset?: number;\n}\n\nexport type CreateRecordValues = Record<string, unknown>;\n\nexport interface CreateRecordError {\n index: number;\n reason: string;\n message: string;\n action: string;\n}\n\nexport interface CreateRecordsResult {\n created: string[];\n errors: CreateRecordError[];\n}\n\nexport interface UpdateRecordInput {\n set?: Record<string, unknown>;\n unset?: string[];\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class RecordsApi {\n constructor(private readonly client: ApiClient) {}\n\n listRecords(\n schema: NormalizedUuidOrSlug,\n query: RecordQueryInput,\n ): Promise<RecordQueryResult> {\n const params = new URLSearchParams();\n\n if (query.limit !== undefined) {\n params.set(\"limit\", String(query.limit));\n }\n\n if (query.offset !== undefined) {\n params.set(\"offset\", String(query.offset));\n }\n\n const path = `/api/v2/schemas/${schema.value}/records`;\n const queryString = params.toString();\n\n return this.client.getJson<RecordQueryResult>(\n queryString ? `${path}?${queryString}` : path,\n );\n }\n\n queryRecords(\n schema: NormalizedUuidOrSlug,\n query: RecordQueryInput,\n ): Promise<RecordQueryResult> {\n const body = this.normalizeQueryInput(query);\n\n return this.client.requestJson<RecordQueryResult>(\n `/api/v2/schemas/${schema.value}/records:query`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n getRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ): Promise<ApiRecord> {\n return this.client.getJson<ApiRecord>(\n `/api/v2/schemas/${schema.value}/records/${record.value}`,\n );\n }\n\n createRecords(\n schema: NormalizedUuidOrSlug,\n records: CreateRecordValues[],\n ): Promise<CreateRecordsResult> {\n return this.client.requestJson<CreateRecordsResult>(\n `/api/v2/schemas/${schema.value}/records`,\n jsonOptions({ records }, \"POST\"),\n );\n }\n\n updateRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n input: UpdateRecordInput,\n ): Promise<ApiRecord> {\n return this.client.requestJson<ApiRecord>(\n `/api/v2/schemas/${schema.value}/records/${record.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteRecords(\n schema: NormalizedUuidOrSlug,\n recordIds: string[],\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/records:delete`,\n jsonOptions({ recordIds }, \"POST\"),\n );\n }\n\n clearRecords(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/records:clear`,\n { method: \"DELETE\" },\n );\n }\n\n private normalizeQueryInput(query: RecordQueryInput): Record<string, unknown> {\n const where = query.where?.map((expression) => ({\n field: expression.field,\n op: expression.comparator,\n value: expression.value,\n }));\n\n const sort = query.sort?.map((entry) => {\n const [field, direction = \"asc\"] = entry.split(\":\");\n return {\n field,\n direction: direction.toUpperCase(),\n };\n });\n\n return {\n ...query,\n select: query.select,\n where,\n sort,\n page:\n query.limit !== undefined || query.offset !== undefined\n ? {\n offset: query.offset,\n limit: query.limit,\n }\n : undefined,\n limit: undefined,\n offset: undefined,\n };\n }\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiSchemaField {\n [key: string]: unknown;\n id?: string;\n type?: string;\n slug?: string;\n label?: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface ApiSchema {\n [key: string]: unknown;\n id?: string;\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: string;\n fields?: ApiSchemaField[];\n uniqueFields?: string[];\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n}\n\nexport interface CreateSchemaInput {\n name: string;\n slug: string;\n auditable?: boolean;\n commentable?: boolean;\n}\n\nexport interface UpdateSchemaInput {\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: string;\n}\n\nexport interface SetUniqueFieldsInput {\n fieldIds: string[];\n}\n\nexport interface CreateSchemaFieldInput {\n [key: string]: unknown;\n type: string;\n slug: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface UpdateSchemaFieldInput {\n [key: string]: unknown;\n label?: string;\n description?: string;\n required?: boolean;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class SchemasApi {\n constructor(private readonly client: ApiClient) {}\n\n listSchemas(): Promise<ApiSchema[]> {\n return this.client.getJson<ApiSchema[]>(\"/api/v2/schemas\");\n }\n\n getSchema(schema: NormalizedUuidOrSlug): Promise<ApiSchema> {\n return this.client.getJson<ApiSchema>(`/api/v2/schemas/${schema.value}`);\n }\n\n createSchema(input: CreateSchemaInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\"/api/v2/schemas\", jsonOptions(input, \"POST\"));\n }\n\n updateSchema(schema: NormalizedUuidOrSlug, input: UpdateSchemaInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\n `/api/v2/schemas/${schema.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n setUniqueFields(schema: NormalizedUuidOrSlug, input: SetUniqueFieldsInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\n `/api/v2/schemas/${schema.value}/unique-fields`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteSchema(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}`,\n { method: \"DELETE\" },\n );\n }\n\n async listFields(schema: NormalizedUuidOrSlug): Promise<ApiSchemaField[]> {\n const result = await this.getSchema(schema);\n\n return Array.isArray(result.fields) ? result.fields : [];\n }\n\n getField(schema: NormalizedUuidOrSlug, field: NormalizedUuidOrSlug): Promise<ApiSchemaField> {\n return this.client.getJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n );\n }\n\n createField(schema: NormalizedUuidOrSlug, input: CreateSchemaFieldInput): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields`,\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateField(\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n input: UpdateSchemaFieldInput,\n ): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteField(schema: NormalizedUuidOrSlug, field: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n SchemasApi,\n type ApiSchema,\n type ApiSchemaField,\n type CreateSchemaFieldInput,\n type CreateSchemaInput,\n type SetUniqueFieldsInput,\n type UpdateSchemaFieldInput,\n type UpdateSchemaInput,\n} from \"../api/schemas.js\";\nimport { ApiClientError } from \"../client.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n assertSupportedSchemaFieldType,\n buildSchemaFieldCreateHelpText,\n buildSchemaFieldCreateValidationMessage,\n formatSchemaFieldTypes,\n normalizeSchemaFieldCreatePayload,\n normalizeSchemaFieldType,\n normalizeSchemaFieldUpdatePayload,\n} from \"../utils/schema-fields.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterSchemasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface SchemaCreateCommandOptions {\n name: string;\n slug: string;\n auditable?: boolean;\n commentable?: boolean;\n}\n\ninterface SchemaUpdateCommandOptions {\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: NormalizedUuidOrSlug;\n}\n\ninterface SetUniqueFieldsCommandOptions {\n field?: NormalizedUuidOrSlug[];\n clear?: boolean;\n}\n\nconst HIGHLIGHTED_FIELD_HELP = `\nHighlighted field:\n The schema's \"main\" field. The frontend uses its value as each record's\n display name, in two places:\n - Activity panel: the record's title in the activity side panel\n (the panel with the record's logs and comments).\n - Detail view: the record's name in the left-hand record list you\n browse to open each record's form.\n`;\n\ninterface FieldCreateCommandOptions {\n type?: string;\n slug?: string;\n label?: string;\n description?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface FieldUpdateCommandOptions {\n label?: string;\n description?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction createSchemasApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new SchemasApi(client),\n ...runtime,\n };\n}\n\nfunction collectFieldSelectors(\n value: string,\n previous: NormalizedUuidOrSlug[] = [],\n): NormalizedUuidOrSlug[] {\n return [...previous, parseUuidOrSlugSelector(value)];\n}\n\nfunction parseBooleanFlag(input: string): boolean {\n const normalized = input.trim().toLowerCase();\n\n if ([\"true\", \"1\", \"yes\", \"y\", \"on\"].includes(normalized)) {\n return true;\n }\n\n if ([\"false\", \"0\", \"no\", \"n\", \"off\"].includes(normalized)) {\n return false;\n }\n\n throw new InvalidArgumentError(`Expected a boolean value, received \"${input}\".`);\n}\n\nfunction emitSchemasTable(stdout: CommandIo, schemas: readonly ApiSchema[]): void {\n printTable(\n schemas.map((schema) => ({\n id: schema.id ?? \"\",\n name: schema.name ?? \"\",\n slug: schema.slug ?? \"\",\n auditable: schema.auditable ?? \"\",\n commentable: schema.commentable ?? \"\",\n ...folderColumns(schema.folder),\n })),\n [\"id\", \"name\", \"slug\", \"auditable\", \"commentable\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n}\n\nfunction emitFieldsTable(stdout: CommandIo, fields: readonly ApiSchemaField[]): void {\n printTable(\n fields.map((field) => ({\n id: field.id ?? \"\",\n type: field.type ?? \"\",\n slug: field.slug ?? \"\",\n label: field.label ?? \"\",\n required: field.required ?? \"\",\n })),\n [\"id\", \"type\", \"slug\", \"label\", \"required\"],\n stdout,\n );\n}\n\nfunction buildSchemaUpdateInput(options: SchemaUpdateCommandOptions): UpdateSchemaInput {\n const input: UpdateSchemaInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.slug !== undefined) {\n input.slug = options.slug;\n }\n\n if (options.auditable !== undefined) {\n input.auditable = options.auditable;\n }\n\n if (options.commentable !== undefined) {\n input.commentable = options.commentable;\n }\n\n return input;\n}\n\nfunction applyFieldDefaultValue(\n input: CreateSchemaFieldInput | UpdateSchemaFieldInput,\n defaultValue: string | undefined,\n): void {\n if (defaultValue === undefined) {\n return;\n }\n\n const config = input.config;\n\n if (config !== undefined && !isJsonObject(config)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Expected field \"config\" to be a JSON object when using \"--default\".',\n );\n }\n\n input.config = {\n ...(config ?? {}),\n defaultValue,\n };\n}\n\nfunction buildFieldCreateInput(\n options: FieldCreateCommandOptions,\n): CreateSchemaFieldInput {\n const raw = normalizeSchemaFieldCreatePayload(readRawObject(options.raw, options.rawFile));\n const rawType = typeof raw.type === \"string\" ? raw.type : undefined;\n const rawSlug = typeof raw.slug === \"string\" ? raw.slug : undefined;\n const rawLabel = typeof raw.label === \"string\" ? raw.label : undefined;\n const type = options.type ?? rawType;\n const slug = options.slug ?? rawSlug;\n const label = options.label ?? rawLabel;\n\n if (!type) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field type via \"--type\" or \"--raw\".');\n }\n\n if (!slug) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field slug via \"--slug\" or \"--raw\".');\n }\n\n if (!label) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field label via \"--label\" or \"--raw\".');\n }\n\n const normalizedType = normalizeSchemaFieldType(type);\n assertSupportedSchemaFieldType(normalizedType);\n const input: CreateSchemaFieldInput = {\n ...raw,\n type: normalizedType,\n slug,\n label,\n };\n\n if (options.required !== undefined) {\n input.required = options.required;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n applyFieldDefaultValue(input, options.default);\n\n if (\"config\" in input && isJsonObject(input.config) && isEmptyObject(input.config)) {\n delete input.config;\n }\n\n return input;\n}\n\nfunction readBackendErrorMessage(error: ApiClientError): string | undefined {\n const responseBody =\n typeof error.responseBody === \"object\" && error.responseBody !== null\n ? error.responseBody\n : undefined;\n const envelopeError =\n responseBody && \"error\" in responseBody && typeof responseBody.error === \"object\" && responseBody.error !== null\n ? responseBody.error\n : responseBody;\n\n return (\n (envelopeError && \"message\" in envelopeError && typeof envelopeError.message === \"string\"\n ? envelopeError.message\n : undefined) ??\n (typeof error.responseText === \"string\" && error.responseText.length > 0\n ? error.responseText\n : undefined)\n );\n}\n\nfunction toFieldCreateError(\n error: unknown,\n input: CreateSchemaFieldInput,\n): never {\n if (!(error instanceof ApiClientError)) {\n throw error;\n }\n\n const backendMessage = readBackendErrorMessage(error);\n const isGenericValidationMessage =\n backendMessage === \"Schema payload is invalid. One or more fields are invalid.\" ||\n backendMessage === \"Create field payload is invalid.\";\n\n if (!isGenericValidationMessage) {\n throw error;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n buildSchemaFieldCreateValidationMessage(input.type),\n {\n fieldType: input.type,\n status: error.status,\n },\n );\n}\n\nfunction buildFieldUpdateInput(\n currentType: string,\n options: FieldUpdateCommandOptions,\n): UpdateSchemaFieldInput {\n const input: UpdateSchemaFieldInput = {\n ...normalizeSchemaFieldUpdatePayload(\n currentType,\n readRawObject(options.raw, options.rawFile),\n ),\n type: currentType,\n };\n\n if (options.label !== undefined) {\n input.label = options.label;\n }\n\n if (options.required !== undefined) {\n input.required = options.required;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n applyFieldDefaultValue(input, options.default);\n\n return input;\n}\n\nasync function resolveSchemaSelector(\n api: SchemasApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const schemas = await api.listSchemas();\n const match = schemas.find((schema) => schema.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Schema \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nasync function resolveFieldSelector(\n api: SchemasApi,\n schema: NormalizedUuidOrSlug,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const fields = await api.listFields(schema);\n const match = fields.find((field) => field.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Field \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nexport function registerSchemasCommands(\n program: Command,\n options: RegisterSchemasCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const schemas = program.command(\"schemas\").description(\"Manage schemas and schema fields\");\n\n schemas\n .command(\"list\")\n .description(\"List schemas\")\n .action(async function action(this: Command) {\n const { api, json } = createSchemasApi(this, filePath);\n const data = await api.listSchemas();\n\n if (json) {\n emitJson(stdout, \"schemas list\", data, filePath);\n return;\n }\n\n emitSchemasTable(stdout, data);\n });\n\n schemas\n .command(\"get\")\n .description(\"Get a schema by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const data = await api.getSchema(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"schemas get\", data, filePath);\n return;\n }\n\n emitSchemasTable(stdout, [data]);\n });\n\n schemas\n .command(\"create\")\n .description(\"Create a schema\")\n .requiredOption(\"--name <name>\", \"schema name\")\n .requiredOption(\"--slug <slug>\", \"schema slug\")\n .option(\"--auditable\", \"mark schema as auditable\")\n .option(\"--commentable\", \"mark schema as commentable\")\n .action(async function action(\n this: Command,\n commandOptions: SchemaCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas create\", readOnly, \"write\");\n\n const input: CreateSchemaInput = {\n name: commandOptions.name,\n slug: commandOptions.slug,\n auditable: Boolean(commandOptions.auditable),\n commentable: Boolean(commandOptions.commentable),\n };\n const data = await api.createSchema(input);\n\n if (json) {\n emitJson(stdout, \"schemas create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created schema \"${data.slug ?? commandOptions.slug}\".`);\n });\n\n schemas\n .command(\"update\")\n .description(\"Update a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"schema name\")\n .option(\"--slug <slug>\", \"schema slug\")\n .option(\"--auditable <bool>\", \"auditable flag\", parseBooleanFlag)\n .option(\"--commentable <bool>\", \"commentable flag\", parseBooleanFlag)\n .option(\n \"--highlighted-field <field>\",\n \"its value is used as each record's display name in the UI (field uuid or slug)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: SchemaUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n\n const input = buildSchemaUpdateInput(commandOptions);\n\n if (commandOptions.highlightedField !== undefined) {\n const resolvedField = await resolveFieldSelector(\n api,\n resolvedSchema,\n commandOptions.highlightedField,\n );\n input.highlightedField = resolvedField.value;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one schema field to update via \"--name\", \"--slug\", \"--auditable\", \"--commentable\", or \"--highlighted-field\".',\n );\n }\n\n const data = await api.updateSchema(resolvedSchema, input);\n\n if (json) {\n emitJson(stdout, \"schemas update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated schema \"${data.slug ?? schema.value}\".`);\n })\n .addHelpText(\"after\", HIGHLIGHTED_FIELD_HELP);\n\n schemas\n .command(\"set-unique-fields\")\n .description(\"Set or clear the composite unique-field constraint on a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--field <field>\",\n \"field uuid or slug to include in the unique constraint (repeatable)\",\n collectFieldSelectors,\n [],\n )\n .option(\"--clear\", \"clear the unique constraint (sends an empty field list)\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: SetUniqueFieldsCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas set-unique-fields\", readOnly, \"write\");\n\n const selectors = commandOptions.field ?? [];\n\n if (commandOptions.clear && selectors.length > 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Use either \"--field\" or \"--clear\", not both.',\n );\n }\n\n if (!commandOptions.clear && selectors.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one field via \"--field\", or pass \"--clear\" to remove the unique constraint.',\n );\n }\n\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const fields = selectors.some((selector) => selector.kind === \"slug\")\n ? await api.listFields(resolvedSchema)\n : [];\n const input: SetUniqueFieldsInput = {\n fieldIds: selectors.map((selector) => {\n if (selector.kind === \"uuid\") {\n return selector.value;\n }\n\n const match = fields.find((field) => field.slug === selector.value);\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Field \"${selector.value}\" not found.`);\n }\n\n return match.id;\n }),\n };\n\n const data = await api.setUniqueFields(resolvedSchema, input);\n\n if (json) {\n emitJson(stdout, \"schemas set-unique-fields\", data, filePath);\n return;\n }\n\n if (input.fieldIds.length === 0) {\n writeLine(stdout, `Cleared unique fields on schema \"${schema.value}\".`);\n return;\n }\n\n const count = input.fieldIds.length;\n writeLine(\n stdout,\n `Set unique fields on schema \"${schema.value}\" (${count} field${count === 1 ? \"\" : \"s\"}).`,\n );\n });\n\n schemas\n .command(\"delete\")\n .description(\"Delete a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n\n await api.deleteSchema(resolvedSchema);\n const data = {\n schema: resolvedSchema.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"schemas delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted schema \"${schema.value}\".`);\n });\n\n const fields = schemas.command(\"fields\").description(\"Manage schema fields\");\n\n fields\n .command(\"list\")\n .description(\"List fields for a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const data = await api.listFields(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"schemas fields list\", data, filePath);\n return;\n }\n\n emitFieldsTable(stdout, data);\n });\n\n fields\n .command(\"get\")\n .description(\"Get a field by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n const data = await api.getField(resolvedSchema, resolvedField);\n\n if (json) {\n emitJson(stdout, \"schemas fields get\", data, filePath);\n return;\n }\n\n emitFieldsTable(stdout, [data]);\n });\n\n fields\n .command(\"create\")\n .description(`Create a field in a schema.${buildSchemaFieldCreateHelpText()}`)\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--type <type>\", `field type (${formatSchemaFieldTypes()})`)\n .option(\"--slug <slug>\", \"field slug\")\n .option(\"--label <label>\", \"field label\")\n .option(\"--description <text>\", \"field description\")\n .option(\"--required <bool>\", \"required flag\", parseBooleanFlag)\n .option(\"--default <value>\", \"default field value\")\n .option(\"--raw <json>\", 'raw JSON object payload (see type-specific shapes in --help)')\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: FieldCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields create\", readOnly, \"write\");\n const input = buildFieldCreateInput(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n let data: ApiSchemaField;\n try {\n data = await api.createField(resolvedSchema, input);\n } catch (error) {\n toFieldCreateError(error, input);\n }\n\n if (json) {\n emitJson(stdout, \"schemas fields create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created field \"${data.slug ?? commandOptions.slug}\".`);\n });\n\n fields\n .command(\"update\")\n .description(\"Update a field in a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--label <label>\", \"field label\")\n .option(\"--description <text>\", 'field description (use \"\" to clear)')\n .option(\"--required <bool>\", \"required flag\", parseBooleanFlag)\n .option(\"--default <value>\", \"default field value\")\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n commandOptions: FieldUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n const currentField = await api.getField(resolvedSchema, resolvedField);\n const currentType =\n typeof currentField.type === \"string\" && currentField.type.length > 0\n ? currentField.type\n : undefined;\n\n if (!currentType) {\n throw new CliError(\"invalid_cli_usage\", `Field \"${field.value}\" is missing type metadata.`);\n }\n\n const input = buildFieldUpdateInput(currentType, commandOptions);\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one field update via \"--label\", \"--description\", \"--required\", \"--default\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n const data = await api.updateField(resolvedSchema, resolvedField, input);\n\n if (json) {\n emitJson(stdout, \"schemas fields update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated field \"${data.slug ?? field.value}\".`);\n });\n\n fields\n .command(\"delete\")\n .description(\"Delete a field from a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n\n await api.deleteField(resolvedSchema, resolvedField);\n const data = {\n schema: resolvedSchema.value,\n field: resolvedField.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"schemas fields delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted field \"${field.value}\" from schema \"${schema.value}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command } from \"commander\";\n\nimport {\n TeamspaceApi,\n type ApiTeamspaceFolder,\n type CreateTeamspaceFolderInput,\n type UpdateTeamspaceFolderInput,\n} from \"../api/teamspace.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n parseNonNegativeInteger,\n parseRawJsonObject,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterTeamspaceCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderListCommandOptions {\n includeResources?: boolean;\n}\n\ninterface FolderCreateCommandOptions {\n name?: string;\n order?: number;\n props?: string;\n propsFile?: string;\n}\n\ninterface FolderUpdateCommandOptions extends FolderCreateCommandOptions {}\n\ninterface ResourcePublishCommandOptions {\n to: NormalizedUuidOrSlug;\n}\n\nfunction createTeamspaceApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new TeamspaceApi(client),\n ...runtime,\n };\n}\n\nfunction readRawObject(\n raw: string | undefined,\n rawFile: string | undefined,\n): JsonObject | undefined {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--props\" or \"--props-file\", not both.',\n );\n }\n\n if (raw) {\n return parseRawJsonObject(raw, \"--props\");\n }\n\n if (rawFile) {\n let contents: string;\n\n try {\n contents = readFileSync(rawFile, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read props payload from ${rawFile}: ${message}`,\n );\n }\n\n return parseRawJsonObject(contents, `--props-file ${rawFile}`);\n }\n\n return undefined;\n}\n\nfunction buildFolderCreateInput(\n options: FolderCreateCommandOptions,\n): CreateTeamspaceFolderInput {\n if (options.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n\n const input: CreateTeamspaceFolderInput = {\n name: options.name,\n };\n\n if (options.order !== undefined) {\n input.order = options.order;\n }\n\n const props = readRawObject(options.props, options.propsFile);\n\n if (props !== undefined) {\n input.additionalProperties = props;\n }\n\n return input;\n}\n\nfunction buildFolderUpdateInput(\n options: FolderUpdateCommandOptions,\n): UpdateTeamspaceFolderInput {\n const input: UpdateTeamspaceFolderInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.order !== undefined) {\n input.order = options.order;\n }\n\n const props = readRawObject(options.props, options.propsFile);\n\n if (props !== undefined) {\n input.additionalProperties = props;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide folder updates via \"--name\", \"--order\", \"--props\", or \"--props-file\".',\n );\n }\n\n return input;\n}\n\nfunction getFolderIdentifier(folder: ApiTeamspaceFolder): string {\n return typeof folder.id === \"string\"\n ? folder.id\n : typeof folder.name === \"string\"\n ? folder.name\n : \"unknown\";\n}\n\nfunction buildFolderLookup(\n folders: readonly ApiTeamspaceFolder[],\n selector: NormalizedUuidOrSlug,\n): NormalizedUuidOrSlug {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n const folderId = matches[0]?.id;\n\n if (typeof folderId === \"string\" && folderId.length > 0) {\n return {\n kind: \"uuid\",\n value: folderId,\n };\n }\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction findFolderEntity(\n folders: readonly ApiTeamspaceFolder[],\n selector: NormalizedUuidOrSlug,\n): ApiTeamspaceFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n\n if (match) {\n return match;\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiTeamspaceFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nasync function resolveFolderSelector(\n api: TeamspaceApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const folders = await api.listFolders(false);\n return buildFolderLookup(folders, selector);\n}\n\nexport function registerTeamspaceCommands(\n program: Command,\n options: RegisterTeamspaceCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const teamspace = program.command(\"teamspace\").description(\"Manage teamspace folders and resources\");\n\n const folders = teamspace.command(\"folders\").description(\"Manage teamspace folders\");\n\n folders\n .command(\"list\")\n .description(\"List teamspace folders\")\n .option(\"--include-resources\", \"include the published resources inside each folder\")\n .action(async function action(this: Command, commandOptions: FolderListCommandOptions) {\n const { api, json } = createTeamspaceApi(this, filePath);\n const data = await api.listFolders(Boolean(commandOptions.includeResources));\n\n if (json) {\n emitJson(stdout, \"teamspace folders list\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n folders\n .command(\"get\")\n .description(\"Get a teamspace folder by exact name or UUID\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--include-resources\", \"include the published resources inside each folder\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderListCommandOptions,\n ) {\n const { api, json } = createTeamspaceApi(this, filePath);\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const allFolders = await api.listFolders(Boolean(commandOptions.includeResources));\n const data = findFolderEntity(allFolders, resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"teamspace folders get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a teamspace folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\", parseNonNegativeInteger)\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"icon\\\":\\\"folder-users\\\",\\\"color\\\":\\\"gold\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(\n this: Command,\n commandOptions: FolderCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders create\", readOnly, \"write\");\n\n const data = await api.createFolder(buildFolderCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"teamspace folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created folder \"${getFolderIdentifier(data)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update a teamspace folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\", parseNonNegativeInteger)\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"icon\\\":\\\"folder-users\\\",\\\"color\\\":\\\"gold\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders update\", readOnly, \"write\");\n\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const data = await api.updateFolder(resolvedFolder, buildFolderUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"teamspace folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated folder \"${getFolderIdentifier(data)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a teamspace folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders delete\", readOnly, \"destructive\");\n\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const data = await api.deleteFolder(resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"teamspace folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted folder \"${resolvedFolder.value}\".`);\n });\n\n const resources = teamspace.command(\"resources\").description(\"Manage teamspace resources\");\n\n resources\n .command(\"publish\")\n .description(\n \"Publish a resource to a teamspace folder. Publishing an already-published resource moves it to the new folder.\",\n )\n .argument(\"<resource>\", \"schema UUID, schema slug, or display UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (root folder UUID is 00000000-0000-0000-0000-000000000000)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n resource: NormalizedUuidOrSlug,\n commandOptions: ResourcePublishCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace resources publish\", readOnly, \"write\");\n\n const folder = await resolveFolderSelector(api, commandOptions.to);\n const data = await api.publishResource({\n resourceId: resource.value,\n targetFolderId: folder.value,\n });\n\n if (json) {\n emitJson(stdout, \"teamspace resources publish\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Published resource \"${resource.value}\" to folder \"${folder.value}\".`);\n });\n\n resources\n .command(\"unpublish\")\n .description(\"Unpublish a resource from teamspace (removes it from its shared folder)\")\n .argument(\"<resource>\", \"schema UUID, schema slug, or display UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, resource: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace resources unpublish\", readOnly, \"write\");\n\n const data = await api.unpublishResource(resource.value);\n\n if (json) {\n emitJson(stdout, \"teamspace resources unpublish\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Unpublished resource \"${resource.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\n\nexport interface ApiTeamspaceResource {\n [key: string]: unknown;\n id?: string;\n name?: string;\n}\n\nexport interface ApiTeamspaceFolder {\n [key: string]: unknown;\n id?: string;\n name?: string;\n order?: number;\n additionalProperties?: JsonObject;\n resources?: ApiTeamspaceResource[];\n}\n\nexport interface CreateTeamspaceFolderInput {\n [key: string]: unknown;\n name: string;\n order?: number;\n additionalProperties?: JsonObject;\n}\n\nexport interface UpdateTeamspaceFolderInput {\n [key: string]: unknown;\n name?: string;\n order?: number;\n additionalProperties?: JsonObject;\n}\n\nexport interface PublishTeamspaceResourceInput {\n resourceId: string;\n targetFolderId: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class TeamspaceApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(includeResources: boolean = false): Promise<ApiTeamspaceFolder[]> {\n const params = new URLSearchParams();\n\n if (includeResources) {\n params.set(\"include\", \"resources\");\n }\n\n const path = \"/api/v2/teamspaces/folders\";\n const queryString = params.toString();\n\n return this.client.getJson<ApiTeamspaceFolder[]>(\n queryString ? `${path}?${queryString}` : path,\n );\n }\n\n createFolder(input: CreateTeamspaceFolderInput): Promise<ApiTeamspaceFolder> {\n return this.client.requestJson<ApiTeamspaceFolder>(\n \"/api/v2/teamspaces/folders\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n input: UpdateTeamspaceFolderInput,\n ): Promise<ApiTeamspaceFolder> {\n return this.client.requestJson<ApiTeamspaceFolder>(\n `/api/v2/teamspaces/folders/${folder.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/teamspaces/folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n publishResource(\n input: PublishTeamspaceResourceInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/teamspaces/resources:publish\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n unpublishResource(resourceId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/teamspaces/resources:unpublish\",\n jsonOptions({ resourceId }, \"POST\"),\n );\n }\n}\n","import type { Command } from \"commander\";\n\nimport { readConfigIfExists } from \"../config.js\";\n\nexport interface CompletionRequest {\n words: readonly string[];\n cwordIndex: number;\n}\n\nexport interface CompletionDeps {\n configPath?: string;\n readProfileNames?: (configPath: string | undefined) => readonly string[];\n}\n\nfunction readProfileNamesFromConfig(configPath: string | undefined): readonly string[] {\n try {\n const config = readConfigIfExists(configPath);\n if (!config) {\n return [];\n }\n return Object.keys(config.profiles).sort();\n } catch {\n return [];\n }\n}\n\nfunction findSubcommand(command: Command, name: string): Command | undefined {\n return command.commands.find((sub) => {\n if (sub.name() === name) {\n return true;\n }\n const aliases = sub.aliases();\n return aliases.includes(name);\n });\n}\n\nfunction collectFlagsThatTakeValues(root: Command): Set<string> {\n const flags = new Set<string>();\n const walk = (command: Command): void => {\n for (const option of command.options) {\n if (!option.required && !option.optional) {\n continue;\n }\n if (option.long) {\n flags.add(option.long);\n }\n if (option.short) {\n flags.add(option.short);\n }\n }\n for (const sub of command.commands) {\n walk(sub);\n }\n };\n walk(root);\n return flags;\n}\n\nfunction descend(root: Command, words: readonly string[]): Command {\n const flagsWithValues = collectFlagsThatTakeValues(root);\n let current = root;\n let index = 0;\n\n while (index < words.length) {\n const word = words[index]!;\n if (word.startsWith(\"-\")) {\n const [flagPart] = word.split(\"=\", 1);\n if (flagPart && flagsWithValues.has(flagPart) && !word.includes(\"=\")) {\n index += 2;\n } else {\n index += 1;\n }\n continue;\n }\n const next = findSubcommand(current, word);\n if (!next) {\n break;\n }\n current = next;\n index += 1;\n }\n\n return current;\n}\n\nfunction collectVisibleSubcommands(command: Command): readonly string[] {\n const names: string[] = [];\n for (const sub of command.commands) {\n if (sub.name().startsWith(\"__\")) {\n continue;\n }\n names.push(sub.name());\n }\n return names;\n}\n\nfunction collectVisibleLongFlags(command: Command): readonly string[] {\n const flags: string[] = [];\n let current: Command | null = command;\n\n while (current) {\n for (const option of current.options) {\n if (option.hidden || !option.long) {\n continue;\n }\n if (!flags.includes(option.long)) {\n flags.push(option.long);\n }\n }\n current = current.parent;\n }\n\n if (!flags.includes(\"--help\")) {\n flags.push(\"--help\");\n }\n\n return flags;\n}\n\nexport function getCompletions(\n program: Command,\n request: CompletionRequest,\n deps: CompletionDeps = {},\n): string[] {\n const { words, cwordIndex } = request;\n const safeIndex = Math.max(0, Math.min(cwordIndex, words.length));\n const current = words[safeIndex] ?? \"\";\n const prevToken = safeIndex > 0 ? words[safeIndex - 1] : undefined;\n const readProfiles = deps.readProfileNames ?? readProfileNamesFromConfig;\n\n if (prevToken === \"--profile\" || prevToken === \"-p\") {\n try {\n return readProfiles(deps.configPath)\n .filter((name) => name.startsWith(current))\n .slice()\n .sort();\n } catch {\n return [];\n }\n }\n\n const tokensBeforeCurrent = words.slice(1, safeIndex);\n const command = descend(program, tokensBeforeCurrent);\n\n const candidates = new Set<string>();\n\n if (current.startsWith(\"-\")) {\n for (const flag of collectVisibleLongFlags(command)) {\n if (flag.startsWith(current)) {\n candidates.add(flag);\n }\n }\n return [...candidates].sort();\n }\n\n for (const subcommand of collectVisibleSubcommands(command)) {\n if (subcommand.startsWith(current)) {\n candidates.add(subcommand);\n }\n }\n for (const flag of collectVisibleLongFlags(command)) {\n if (flag.startsWith(current)) {\n candidates.add(flag);\n }\n }\n\n return [...candidates].sort();\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport { renderScript, type SupportedShell } from \"./scripts.js\";\n\nexport const SUPPORTED_SHELLS: readonly SupportedShell[] = [\n \"bash\",\n \"zsh\",\n \"fish\",\n \"powershell\",\n];\n\nconst BLOCK_BEGIN = \"# >>> zinkee completion >>>\";\nconst BLOCK_END = \"# <<< zinkee completion <<<\";\n\nexport interface InstallEnvironment {\n home: string;\n platform: NodeJS.Platform;\n shellEnv: string | undefined;\n resolvePowerShellProfile?: () => string | undefined;\n}\n\nexport interface InstallTarget {\n shell: SupportedShell;\n scriptPath: string;\n rcPath?: string;\n}\n\nexport interface InstallResult {\n shell: SupportedShell;\n scriptPath: string;\n rcPath?: string;\n rcUpdated: boolean;\n}\n\nexport class CompletionShellError extends Error {\n override name = \"CompletionShellError\";\n}\n\nfunction defaultPowerShellProfile(env: InstallEnvironment): string | undefined {\n for (const exe of [\"pwsh\", \"powershell.exe\"]) {\n try {\n const out = execFileSync(exe, [\"-NoProfile\", \"-Command\", \"$PROFILE\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n const path = out.trim();\n if (path) {\n return path;\n }\n } catch {\n // try the next executable\n }\n }\n\n if (env.platform === \"win32\") {\n return join(env.home, \"Documents\", \"PowerShell\", \"Microsoft.PowerShell_profile.ps1\");\n }\n return join(env.home, \".config\", \"powershell\", \"Microsoft.PowerShell_profile.ps1\");\n}\n\nexport function detectShell(env: InstallEnvironment): SupportedShell {\n const fromEnv = env.shellEnv;\n if (fromEnv) {\n const name = basename(fromEnv).toLowerCase().replace(/\\.exe$/, \"\");\n if (name === \"bash\") {\n return \"bash\";\n }\n if (name === \"zsh\") {\n return \"zsh\";\n }\n if (name === \"fish\") {\n return \"fish\";\n }\n if (name === \"pwsh\" || name === \"powershell\") {\n return \"powershell\";\n }\n }\n if (env.platform === \"win32\") {\n return \"powershell\";\n }\n throw new CompletionShellError(\n `Could not detect a supported shell from $SHELL=${fromEnv ?? \"\"}. ` +\n `Pass one of: ${SUPPORTED_SHELLS.join(\", \")}.`,\n );\n}\n\nexport function parseShell(value: string): SupportedShell {\n const normalized = value.toLowerCase();\n if (\n normalized === \"bash\" ||\n normalized === \"zsh\" ||\n normalized === \"fish\" ||\n normalized === \"powershell\"\n ) {\n return normalized;\n }\n if (normalized === \"pwsh\") {\n return \"powershell\";\n }\n throw new CompletionShellError(\n `Unsupported shell \"${value}\". Supported: ${SUPPORTED_SHELLS.join(\", \")}.`,\n );\n}\n\nexport function resolveTarget(\n shell: SupportedShell,\n env: InstallEnvironment,\n): InstallTarget {\n switch (shell) {\n case \"bash\":\n return {\n shell,\n scriptPath: join(env.home, \".bash_completions\", \"zinkee.sh\"),\n rcPath: join(env.home, \".bashrc\"),\n };\n case \"zsh\":\n return {\n shell,\n scriptPath: join(env.home, \".zfunc\", \"_zinkee\"),\n rcPath: join(env.home, \".zshrc\"),\n };\n case \"fish\":\n return {\n shell,\n scriptPath: join(env.home, \".config\", \"fish\", \"completions\", \"zinkee.fish\"),\n };\n case \"powershell\": {\n const resolver = env.resolvePowerShellProfile ?? (() => defaultPowerShellProfile(env));\n const profilePath = resolver();\n if (!profilePath) {\n throw new CompletionShellError(\n \"Could not resolve PowerShell $PROFILE path. Install PowerShell or use --show-completion.\",\n );\n }\n return {\n shell,\n scriptPath: profilePath,\n rcPath: profilePath,\n };\n }\n }\n}\n\nfunction buildRcSnippet(shell: SupportedShell, scriptPath: string): string {\n switch (shell) {\n case \"bash\":\n return `source \"${scriptPath}\"`;\n case \"zsh\":\n return [\n `fpath=(\"${dirname(scriptPath)}\" $fpath)`,\n \"autoload -Uz compinit && compinit\",\n ].join(\"\\n\");\n default:\n return \"\";\n }\n}\n\nfunction applyBlock(existing: string, block: string): string {\n const wrapped = `${BLOCK_BEGIN}\\n${block.trimEnd()}\\n${BLOCK_END}\\n`;\n const blockPattern = new RegExp(\n `${BLOCK_BEGIN.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\\\\s\\\\S]*?${BLOCK_END.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\n?`,\n \"m\",\n );\n if (blockPattern.test(existing)) {\n return existing.replace(blockPattern, wrapped);\n }\n const separator = existing.length === 0 || existing.endsWith(\"\\n\") ? \"\" : \"\\n\";\n return `${existing}${separator}${wrapped}`;\n}\n\nfunction readFileOrEmpty(path: string): string {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\"\n ) {\n return \"\";\n }\n throw error;\n }\n}\n\nfunction writeFileEnsuringDir(path: string, content: string): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content, \"utf8\");\n}\n\nexport function installCompletion(\n shell: SupportedShell,\n env: InstallEnvironment,\n): InstallResult {\n const target = resolveTarget(shell, env);\n const script = renderScript(shell);\n\n if (shell === \"powershell\") {\n const existing = readFileOrEmpty(target.scriptPath);\n const updated = applyBlock(existing, script);\n writeFileEnsuringDir(target.scriptPath, updated);\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.scriptPath,\n rcUpdated: true,\n };\n }\n\n writeFileEnsuringDir(target.scriptPath, script);\n\n if (!target.rcPath) {\n return {\n shell,\n scriptPath: target.scriptPath,\n rcUpdated: false,\n };\n }\n\n const snippet = buildRcSnippet(shell, target.scriptPath);\n if (!snippet) {\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: false,\n };\n }\n\n const existingRc = readFileOrEmpty(target.rcPath);\n const updatedRc = applyBlock(existingRc, snippet);\n if (updatedRc !== existingRc) {\n writeFileEnsuringDir(target.rcPath, updatedRc);\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: true,\n };\n }\n\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: false,\n };\n}\n\nexport function currentEnvironment(): InstallEnvironment {\n return {\n home: homedir(),\n platform: platform(),\n shellEnv: process.env.SHELL,\n };\n}\n","export type SupportedShell = \"bash\" | \"zsh\" | \"fish\" | \"powershell\";\n\nconst PROGRAM = \"zinkee\";\nconst ENV_VAR = \"_ZINKEE_COMPLETE\";\n\nexport function renderBashScript(): string {\n return `_zinkee_completion() {\n local IFS=$'\\\\n'\n local response\n\n response=$(env COMP_WORDS=\"\\${COMP_WORDS[*]}\" COMP_CWORD=$COMP_CWORD ${ENV_VAR}=bash_complete ${PROGRAM} 2>/dev/null)\n\n COMPREPLY=( \\${response} )\n return 0\n}\n\ncomplete -o default -F _zinkee_completion ${PROGRAM}\n`;\n}\n\nexport function renderZshScript(): string {\n return `#compdef ${PROGRAM}\n\n_zinkee_completion() {\n local -a response\n (( ! $+commands[${PROGRAM}] )) && return 1\n\n response=(\"\\${(@f)$(env COMP_WORDS=\"\\${words[*]}\" COMP_CWORD=$((CURRENT - 1)) ${ENV_VAR}=zsh_complete ${PROGRAM} 2>/dev/null)}\")\n\n if [ -n \"$response\" ]; then\n compadd -U -V unsorted -a response\n fi\n}\n\nif [[ $zsh_eval_context[-1] == loadautofunc ]]; then\n _zinkee_completion \"$@\"\nelse\n compdef _zinkee_completion ${PROGRAM}\nfi\n`;\n}\n\nexport function renderFishScript(): string {\n return `function __zinkee_completion\n set -l tokens (commandline -opc) (commandline -ct)\n set -l cword (math (count $tokens) - 1)\n set -l joined (string join \" \" -- $tokens)\n\n env COMP_WORDS=\"$joined\" COMP_CWORD=$cword ${ENV_VAR}=fish_complete ${PROGRAM} 2>/dev/null\nend\n\ncomplete --no-files --command ${PROGRAM} --arguments '(__zinkee_completion)'\n`;\n}\n\nexport function renderPowerShellScript(): string {\n return `Register-ArgumentCompleter -Native -CommandName ${PROGRAM} -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n\n $tokens = @($commandAst.CommandElements | ForEach-Object { $_.ToString() })\n $cword = [Math]::Max(0, $tokens.Count - 1)\n\n $env:COMP_WORDS = ($tokens -join ' ')\n $env:COMP_CWORD = $cword\n $env:${ENV_VAR} = 'powershell_complete'\n\n try {\n & ${PROGRAM} 2>$null | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n } finally {\n Remove-Item Env:COMP_WORDS -ErrorAction SilentlyContinue\n Remove-Item Env:COMP_CWORD -ErrorAction SilentlyContinue\n Remove-Item Env:${ENV_VAR} -ErrorAction SilentlyContinue\n }\n}\n`;\n}\n\nexport function renderScript(shell: SupportedShell): string {\n switch (shell) {\n case \"bash\":\n return renderBashScript();\n case \"zsh\":\n return renderZshScript();\n case \"fish\":\n return renderFishScript();\n case \"powershell\":\n return renderPowerShellScript();\n }\n}\n","import type { Writable } from \"node:stream\";\n\nimport { buildProgram } from \"../program.js\";\nimport { getCompletions } from \"./engine.js\";\nimport {\n CompletionShellError,\n currentEnvironment,\n detectShell,\n installCompletion,\n parseShell,\n type InstallEnvironment,\n} from \"./install.js\";\nimport { renderScript, type SupportedShell } from \"./scripts.js\";\n\nexport const COMPLETION_ENV_VAR = \"_ZINKEE_COMPLETE\";\n\ninterface Stream {\n write(chunk: string): unknown;\n}\n\nfunction getStream(stream: Stream | undefined, fallback: NodeJS.WriteStream): Stream {\n return stream ?? (fallback as unknown as Writable);\n}\n\nfunction parseEnvWords(env: NodeJS.ProcessEnv): string[] {\n const raw = env.COMP_WORDS ?? \"\";\n if (raw.trim().length === 0) {\n return [];\n }\n return raw.split(/\\s+/).filter((token) => token.length > 0);\n}\n\nfunction parseEnvCwordIndex(env: NodeJS.ProcessEnv): number {\n const raw = env.COMP_CWORD ?? \"0\";\n const parsed = Number.parseInt(raw, 10);\n if (Number.isNaN(parsed) || parsed < 0) {\n return 0;\n }\n return parsed;\n}\n\nexport function isCompletionRequest(env: NodeJS.ProcessEnv = process.env): boolean {\n return typeof env[COMPLETION_ENV_VAR] === \"string\" && env[COMPLETION_ENV_VAR]!.length > 0;\n}\n\nexport function runCompletionRequest(\n env: NodeJS.ProcessEnv = process.env,\n stdout?: Stream,\n): void {\n const out = getStream(stdout, process.stdout);\n try {\n const program = buildProgram();\n const candidates = getCompletions(program, {\n words: parseEnvWords(env),\n cwordIndex: parseEnvCwordIndex(env),\n });\n if (candidates.length > 0) {\n out.write(`${candidates.join(\"\\n\")}\\n`);\n }\n } catch {\n // Completion must never crash the user's shell. Swallow.\n }\n}\n\nexport interface CompletionFlagRequest {\n mode: \"install\" | \"show\";\n shellOverride?: string;\n}\n\nexport function extractCompletionFlag(argv: readonly string[]): CompletionFlagRequest | null {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (!token) {\n continue;\n }\n if (token === \"--install-completion\" || token === \"--show-completion\") {\n const mode = token === \"--install-completion\" ? \"install\" : \"show\";\n const next = argv[index + 1];\n const shellOverride = next && !next.startsWith(\"-\") ? next : undefined;\n return { mode, shellOverride };\n }\n if (token.startsWith(\"--install-completion=\")) {\n const value = token.slice(\"--install-completion=\".length);\n return { mode: \"install\", shellOverride: value || undefined };\n }\n if (token.startsWith(\"--show-completion=\")) {\n const value = token.slice(\"--show-completion=\".length);\n return { mode: \"show\", shellOverride: value || undefined };\n }\n }\n return null;\n}\n\nfunction resolveShell(\n request: CompletionFlagRequest,\n env: InstallEnvironment,\n): SupportedShell {\n if (request.shellOverride) {\n return parseShell(request.shellOverride);\n }\n return detectShell(env);\n}\n\nexport interface CompletionFlagDeps {\n environment?: InstallEnvironment;\n stdout?: Stream;\n stderr?: Stream;\n}\n\nexport function handleCompletionFlag(\n request: CompletionFlagRequest,\n deps: CompletionFlagDeps = {},\n): number {\n const env = deps.environment ?? currentEnvironment();\n const out = getStream(deps.stdout, process.stdout);\n const err = getStream(deps.stderr, process.stderr);\n\n let shell: SupportedShell;\n try {\n shell = resolveShell(request, env);\n } catch (error) {\n const message = error instanceof CompletionShellError ? error.message : String(error);\n err.write(`${message}\\n`);\n return 1;\n }\n\n if (request.mode === \"show\") {\n out.write(renderScript(shell));\n return 0;\n }\n\n try {\n const result = installCompletion(shell, env);\n err.write(`zinkee completion installed for ${shell}.\\n`);\n err.write(` script: ${result.scriptPath}\\n`);\n if (result.rcPath && result.rcPath !== result.scriptPath) {\n err.write(\n result.rcUpdated\n ? ` updated: ${result.rcPath}\\n`\n : ` unchanged: ${result.rcPath}\\n`,\n );\n }\n err.write(`Restart your shell or open a new session to enable completion.\\n`);\n return 0;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n err.write(`Failed to install zinkee completion: ${message}\\n`);\n return 1;\n }\n}\n","#!/usr/bin/env node\n\nimport { runCli, isExecutedAsEntry } from \"./cli-runner.js\";\nexport { buildProgram, type BuildProgramOptions } from \"./program.js\";\n\nif (isExecutedAsEntry(process.argv[1], import.meta.url)) {\n await runCli(process.argv);\n}\n"],"mappings":"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","names":["Command","readFileSync","readFileSync","segment","field","comparator","jsonOptions","readFileSync","InvalidArgumentError","jsonOptions","segment","InvalidArgumentError","readRawObject","readFileSync","layout","jsonOptions","dirname","join","destination","join","dirname","parseJsonValue","readJsonObjectOption","basename","basename","readFileSync","jsonOptions","readFileSync","resolveFolder","folderRows","readFileSync","InvalidArgumentError","jsonOptions","jsonOptions","InvalidArgumentError","readFileSync","records","InvalidArgumentError","InvalidArgumentError","resolveSchemaSelector","fields","readFileSync","jsonOptions","readRawObject","readFileSync","resolveFolderSelector","require","Command","mkdirSync","readFileSync","writeFileSync","homedir","basename","dirname","join","join","basename","dirname","readFileSync","mkdirSync","writeFileSync","homedir"]}
1
+ {"version":3,"sources":["../src/cli-runner.ts","../src/utils/argv-rewrite.ts","../src/cli-examples.ts","../src/program.ts","../src/config.ts","../src/commands/shared.ts","../src/parsers/selectors.ts","../src/runtime-context.ts","../src/commands/config.ts","../src/api/automations.ts","../src/parsers/kv.ts","../src/commands/automations.ts","../src/api/comments.ts","../src/commands/comments.ts","../src/commands/displays.ts","../src/api/displays.ts","../src/parsers/expressions.ts","../src/commands/document-templates.ts","../src/api/document-templates.ts","../src/utils/file-transfers.ts","../src/commands/files.ts","../src/api/files.ts","../src/api/formulas.ts","../src/commands/formulas.ts","../src/api/logs.ts","../src/commands/logs.ts","../src/commands/navigation.ts","../src/api/navigation.ts","../src/commands/profiles.ts","../src/commands/records.ts","../src/api/records.ts","../src/api/schemas.ts","../src/commands/schemas.ts","../src/commands/teamspace.ts","../src/api/teamspace.ts","../src/completion/engine.ts","../src/completion/install.ts","../src/completion/scripts.ts","../src/completion/runtime.ts","../src/index.ts"],"sourcesContent":["import { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nimport chalk from \"chalk\";\n\nimport { extractExampleRequest, showExamples } from \"./cli-examples.js\";\nimport {\n extractCompletionFlag,\n handleCompletionFlag,\n isCompletionRequest,\n runCompletionRequest,\n} from \"./completion/runtime.js\";\nimport { buildProgram } from \"./program.js\";\nimport {\n buildOptionMetadata,\n hoistGlobalOptions,\n} from \"./utils/argv-rewrite.js\";\nimport {\n formatCliErrorJson,\n formatCliErrorText,\n getExitCode,\n} from \"./utils/errors.js\";\n\nfunction resolveExecutablePath(candidatePath: string): string {\n try {\n return realpathSync(candidatePath);\n } catch {\n return candidatePath;\n }\n}\n\nexport function isExecutedAsEntry(argvEntry: string | undefined, moduleUrl: string): boolean {\n if (!argvEntry) {\n return false;\n }\n\n return resolveExecutablePath(argvEntry) === resolveExecutablePath(fileURLToPath(moduleUrl));\n}\n\nexport async function runCli(argv: string[]): Promise<void> {\n try {\n if (isCompletionRequest()) {\n runCompletionRequest();\n return;\n }\n\n const completionFlag = extractCompletionFlag(argv);\n if (completionFlag) {\n const exitCode = handleCompletionFlag(completionFlag);\n process.exitCode = exitCode;\n return;\n }\n\n const program = buildProgram();\n const optionMeta = buildOptionMetadata(program);\n const exampleRequest = extractExampleRequest(argv, optionMeta);\n\n if (exampleRequest) {\n await showExamples(\n exampleRequest.commandName,\n exampleRequest.json,\n undefined,\n exampleRequest.filters,\n );\n process.exitCode = 0;\n return;\n }\n\n const rewrittenArgv = hoistGlobalOptions(argv, optionMeta);\n await program.parseAsync(rewrittenArgv);\n } catch (error) {\n const exitCode = getExitCode(error);\n\n if (argv.includes(\"--json\")) {\n process.stderr.write(`${formatCliErrorJson(error, { exitCode })}\\n`);\n } else {\n process.stderr.write(`${chalk.red(\"Error:\")} ${formatCliErrorText(error)}\\n`);\n }\n\n process.exitCode = exitCode;\n }\n}\n","import type { Command } from \"commander\";\n\nexport const HOISTABLE_GLOBAL_FLAGS = {\n \"--profile\": \"value\",\n \"--base-url\": \"value\",\n \"--api-key\": \"value\",\n \"--read-only\": \"boolean\",\n \"--json\": \"boolean\",\n} as const satisfies Record<string, \"value\" | \"boolean\">;\n\ntype HoistableFlagName = keyof typeof HOISTABLE_GLOBAL_FLAGS;\n\nfunction isHoistableFlag(flagName: string): flagName is HoistableFlagName {\n return Object.hasOwn(HOISTABLE_GLOBAL_FLAGS, flagName);\n}\n\nexport interface OptionMetadata {\n valueFlags: Set<string>;\n booleanFlags: Set<string>;\n localOptionsByCommand: Map<string, Set<string>>;\n commandPaths: string[];\n}\n\nfunction getCommandPath(command: Command): string {\n const parts: string[] = [];\n let cursor: Command | null = command;\n while (cursor && cursor.parent) {\n parts.unshift(cursor.name());\n cursor = cursor.parent;\n }\n return parts.join(\" \");\n}\n\nexport function buildOptionMetadata(program: Command): OptionMetadata {\n const valueFlags = new Set<string>();\n const booleanFlags = new Set<string>();\n const localOptionsByCommand = new Map<string, Set<string>>();\n const commandPaths: string[] = [];\n\n function visit(command: Command, isRoot: boolean): void {\n const localFlags = new Set<string>();\n\n for (const option of command.options) {\n if (!option.long) continue;\n\n if (option.required || option.optional) {\n valueFlags.add(option.long);\n } else {\n booleanFlags.add(option.long);\n }\n\n if (!isRoot) {\n localFlags.add(option.long);\n }\n }\n\n if (!isRoot) {\n const path = getCommandPath(command);\n localOptionsByCommand.set(path, localFlags);\n if (command.commands.length === 0) {\n commandPaths.push(path);\n }\n }\n\n for (const sub of command.commands) {\n visit(sub, false);\n }\n }\n\n visit(program, true);\n return { valueFlags, booleanFlags, localOptionsByCommand, commandPaths };\n}\n\ninterface FlagSplit {\n flagName: string;\n inlineValue: string | undefined;\n}\n\nfunction isFlagToken(token: string): boolean {\n return token.length > 1 && token.startsWith(\"-\");\n}\n\nfunction splitFlagToken(token: string): FlagSplit {\n if (token.startsWith(\"--\") && token.includes(\"=\")) {\n const eqIdx = token.indexOf(\"=\");\n return {\n flagName: token.slice(0, eqIdx),\n inlineValue: token.slice(eqIdx + 1),\n };\n }\n return { flagName: token, inlineValue: undefined };\n}\n\nfunction flagConsumesValue(flagName: string, optionMeta: OptionMetadata): boolean {\n if (optionMeta.valueFlags.has(flagName)) {\n return true;\n }\n if (optionMeta.booleanFlags.has(flagName)) {\n return false;\n }\n return true;\n}\n\ninterface OperandPosition {\n index: number;\n token: string;\n}\n\nexport function collectOperandTokens(\n userArgs: readonly string[],\n optionMeta: OptionMetadata,\n options: { skipFlag?: string } = {},\n): OperandPosition[] {\n const operands: OperandPosition[] = [];\n let i = 0;\n while (i < userArgs.length) {\n const token = userArgs[i] as string;\n\n if (token === \"--\") {\n break;\n }\n\n if (isFlagToken(token)) {\n const { flagName, inlineValue } = splitFlagToken(token);\n\n if (options.skipFlag !== undefined && flagName === options.skipFlag) {\n i += 1;\n continue;\n }\n\n if (inlineValue !== undefined) {\n i += 1;\n continue;\n }\n\n const consumes = flagConsumesValue(flagName, optionMeta);\n const next = userArgs[i + 1];\n if (consumes && next !== undefined && !isFlagToken(next)) {\n i += 2;\n } else {\n i += 1;\n }\n continue;\n }\n\n operands.push({ index: i, token });\n i += 1;\n }\n return operands;\n}\n\nexport interface CommandPathMatch {\n commandName: string;\n firstArgvIndex: number;\n lastArgvIndex: number;\n}\n\nexport function findCommandPath(\n operands: readonly OperandPosition[],\n commandPaths: readonly string[],\n): CommandPathMatch | null {\n if (operands.length === 0) return null;\n\n const commandsByLength = [...commandPaths].sort(\n (left, right) => right.split(\" \").length - left.split(\" \").length,\n );\n\n for (let start = 0; start < operands.length; start += 1) {\n for (const commandName of commandsByLength) {\n const parts = commandName.split(\" \");\n if (start + parts.length > operands.length) continue;\n\n let matches = true;\n for (let j = 0; j < parts.length; j += 1) {\n if (operands[start + j]!.token !== parts[j]) {\n matches = false;\n break;\n }\n }\n\n if (matches) {\n return {\n commandName,\n firstArgvIndex: operands[start]!.index,\n lastArgvIndex: operands[start + parts.length - 1]!.index,\n };\n }\n }\n }\n\n return null;\n}\n\nexport function hoistGlobalOptions(\n argv: readonly string[],\n optionMeta: OptionMetadata,\n): string[] {\n if (argv.length < 3) return [...argv];\n\n const userArgs = argv.slice(2);\n const operands = collectOperandTokens(userArgs, optionMeta);\n const cmdPath = findCommandPath(operands, optionMeta.commandPaths);\n\n if (!cmdPath) return [...argv];\n\n const localOptions =\n optionMeta.localOptionsByCommand.get(cmdPath.commandName) ?? new Set<string>();\n\n const hoisted: string[] = [];\n const remaining: string[] = [];\n let i = 0;\n\n while (i < userArgs.length) {\n const token = userArgs[i] as string;\n\n if (token === \"--\") {\n remaining.push(...userArgs.slice(i));\n break;\n }\n\n if (!isFlagToken(token)) {\n remaining.push(token);\n i += 1;\n continue;\n }\n\n const { flagName, inlineValue } = splitFlagToken(token);\n\n if (!isHoistableFlag(flagName)) {\n remaining.push(token);\n i += 1;\n continue;\n }\n\n const isAfterCommandPath = i > cmdPath.lastArgvIndex;\n const collidesWithLocal = localOptions.has(flagName);\n\n const target = isAfterCommandPath && collidesWithLocal ? remaining : hoisted;\n target.push(token);\n\n const spec = HOISTABLE_GLOBAL_FLAGS[flagName];\n if (spec === \"value\" && inlineValue === undefined) {\n const next = userArgs[i + 1];\n if (next !== undefined && !isFlagToken(next)) {\n target.push(next);\n i += 2;\n continue;\n }\n }\n\n i += 1;\n }\n\n return [argv[0] as string, argv[1] as string, ...hoisted, ...remaining];\n}\n","import {\n collectOperandTokens,\n findCommandPath,\n type OptionMetadata,\n} from \"./utils/argv-rewrite.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { buildJsonSuccess } from \"./utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface ExampleRequest {\n commandName: string;\n filters: {\n type?: string;\n };\n json: boolean;\n}\n\nfunction extractExampleFilters(tokens: readonly string[]): { type?: string } {\n const filters: { type?: string } = {};\n\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n\n if (token === \"--type\") {\n const value = tokens[index + 1];\n if (value && !value.startsWith(\"-\")) {\n filters.type = value;\n index += 1;\n }\n }\n }\n\n return filters;\n}\n\nexport function extractExampleRequest(\n argv: readonly string[],\n optionMeta: OptionMetadata,\n): ExampleRequest | null {\n if (!argv.includes(\"--example\")) {\n return null;\n }\n\n const userArgs = argv.slice(2);\n const operands = collectOperandTokens(userArgs, optionMeta, { skipFlag: \"--example\" });\n const cmdPath = findCommandPath(operands, optionMeta.commandPaths);\n\n if (!cmdPath) {\n const typed = operands.map((operand) => operand.token).join(\" \");\n\n if (typed.length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide a command after \"--example\".');\n }\n\n // The token(s) didn't resolve to a runnable command. If they form the prefix\n // of one or more registered commands, the user named a command group (e.g.\n // \"schemas\") — list its subcommands instead of the generic error.\n const subcommands = optionMeta.commandPaths.filter((name) =>\n name.startsWith(`${typed} `),\n );\n\n if (subcommands.length > 0) {\n const list = subcommands.map((name) => ` zinkee --example ${name}`).join(\"\\n\");\n throw new CliError(\n \"invalid_cli_usage\",\n `\"${typed}\" is a command group, not a runnable command. Available subcommands:\\n${list}`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Unknown command \"${typed}\".`);\n }\n\n const remainingTokens = userArgs.slice(cmdPath.lastArgvIndex + 1);\n\n return {\n commandName: cmdPath.commandName,\n filters: extractExampleFilters(remainingTokens),\n json: argv.includes(\"--json\"),\n };\n}\n\nexport async function showExamples(\n commandName: string,\n json: boolean,\n stdout?: CommandIo,\n filters: { type?: string } = {},\n): Promise<void> {\n const { getCommandExamples } = await import(\"./utils/examples.js\");\n const examples = getCommandExamples(commandName, filters);\n\n if (examples.length === 0) {\n throw new CliError(\"invalid_cli_usage\", `No examples registered for \"${commandName}\".`);\n }\n\n const writer = stdout ?? process.stdout;\n\n if (json) {\n writer.write(`${JSON.stringify(buildJsonSuccess({ examples }, { command: commandName }))}\\n`);\n return;\n }\n\n writer.write(\"Examples:\\n\");\n for (const [index, example] of examples.entries()) {\n writer.write(`\\n${index + 1}. ${example.description}\\n`);\n writer.write(` ${example.command}\\n`);\n\n if (example.raw) {\n writer.write(\" Equivalent JSON payload:\\n\");\n for (const line of example.raw.split(\"\\n\")) {\n writer.write(` ${line}\\n`);\n }\n }\n\n if (example.response) {\n writer.write(\" Example response:\\n\");\n for (const line of example.response.split(\"\\n\")) {\n writer.write(` ${line}\\n`);\n }\n }\n }\n}\n","import { createRequire } from \"node:module\";\n\nimport { Command } from \"commander\";\n\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerAutomationsCommands } from \"./commands/automations.js\";\nimport { registerCommentsCommands } from \"./commands/comments.js\";\nimport { registerDisplaysCommands } from \"./commands/displays.js\";\nimport { registerDocumentTemplatesCommands } from \"./commands/document-templates.js\";\nimport { registerFilesCommands } from \"./commands/files.js\";\nimport { registerFormulasCommands } from \"./commands/formulas.js\";\nimport { registerLogsCommands } from \"./commands/logs.js\";\nimport { registerNavigationCommands } from \"./commands/navigation.js\";\nimport { registerProfilesCommands } from \"./commands/profiles.js\";\nimport { registerRecordsCommands } from \"./commands/records.js\";\nimport { registerSchemasCommands } from \"./commands/schemas.js\";\nimport { registerTeamspaceCommands } from \"./commands/teamspace.js\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\") as { version: string };\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface BuildProgramOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport function buildProgram(options: BuildProgramOptions = {}): Command {\n const program = new Command();\n\n program\n .name(\"zinkee\")\n .description(\"CLI for Zinkee API v2\")\n .version(version)\n .enablePositionalOptions()\n .showHelpAfterError()\n .option(\"--profile <name>\", \"select a profile from config\")\n .option(\"--base-url <url>\", \"override the configured base URL\")\n .option(\"--api-key <token>\", \"override the configured API key\")\n .option(\"--read-only\", \"run in read-only mode\")\n .option(\"--example\", \"show examples for a command\")\n .option(\"--json\", \"emit JSON output\")\n .option(\"--install-completion [shell]\", \"install shell completion (bash, zsh, fish, powershell)\")\n .option(\"--show-completion [shell]\", \"print shell completion script for the current shell\");\n\n registerProfilesCommands(program, options);\n registerAutomationsCommands(program, options);\n registerConfigCommands(program, options);\n registerDisplaysCommands(program, options);\n registerDocumentTemplatesCommands(program, options);\n registerFilesCommands(program, options);\n registerFormulasCommands(program, options);\n registerNavigationCommands(program, options);\n registerSchemasCommands(program, options);\n registerRecordsCommands(program, options);\n registerCommentsCommands(program, options);\n registerLogsCommands(program, options);\n registerTeamspaceCommands(program, options);\n\n return program;\n}\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nimport { parseTOML, stringifyTOML } from \"confbox/toml\";\n\nimport type { AppConfig, ProfileConfig, RuntimeOverrides, ResolvedProfile } from \"./types.js\";\n\nexport const defaultConfigPath = join(homedir(), \".config\", \"zinkee\", \"config.toml\");\nexport const redactedSecretMask = \"********\";\nexport const ENV_API_KEY = \"ZINKEE_API_KEY\";\nexport const ENV_BASE_URL = \"ZINKEE_API_BASE_URL\";\nexport const ENV_PROFILE = \"ZINKEE_PROFILE\";\nexport const DEFAULT_PRODUCTION_BASE_URL = \"https://api-z2.zinkee.com\";\n\nexport class ProfileResolutionError extends Error {\n override name = \"ProfileResolutionError\";\n\n constructor(message: string) {\n super(message);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toStringValue(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction toNonEmptyString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized ? normalized : undefined;\n}\n\nfunction parseProfileConfig(value: unknown): ProfileConfig {\n const profile: ProfileConfig = {};\n\n if (!isRecord(value)) {\n return profile;\n }\n\n for (const [key, rawValue] of Object.entries(value)) {\n if (key === \"api_key\") {\n profile.apiKey = toStringValue(rawValue);\n continue;\n }\n\n if (key === \"base_url\") {\n profile.baseUrl = toStringValue(rawValue);\n continue;\n }\n\n profile[key] = rawValue;\n }\n\n return profile;\n}\n\nexport function parseConfig(toml: string): AppConfig {\n const parsed = parseTOML<unknown>(toml);\n const config: AppConfig = { profiles: {} };\n\n if (!isRecord(parsed)) {\n return config;\n }\n\n for (const [key, value] of Object.entries(parsed)) {\n if (key === \"default_profile\") {\n config.defaultProfile = toStringValue(value);\n continue;\n }\n\n if (key === \"profiles\") {\n if (!isRecord(value)) {\n continue;\n }\n\n for (const [profileName, profileValue] of Object.entries(value)) {\n config.profiles[profileName] = parseProfileConfig(profileValue);\n }\n\n continue;\n }\n\n config[key] = value;\n }\n\n return config;\n}\n\nexport function readConfig(filePath: string = defaultConfigPath): AppConfig {\n return parseConfig(readFileSync(filePath, \"utf8\"));\n}\n\nexport function readConfigIfExists(filePath: string = defaultConfigPath): AppConfig | undefined {\n try {\n return readConfig(filePath);\n } catch (error) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return undefined;\n }\n\n throw error;\n }\n}\n\nexport function readRuntimeConfig(filePath: string = defaultConfigPath): AppConfig {\n return readConfigIfExists(filePath) ?? { profiles: {} };\n}\n\nfunction serializeProfileConfig(profile: ProfileConfig): Record<string, unknown> {\n const serialized: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(profile)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"apiKey\") {\n serialized.api_key = value;\n continue;\n }\n\n if (key === \"baseUrl\") {\n serialized.base_url = value;\n continue;\n }\n\n serialized[key] = value;\n }\n\n return serialized;\n}\n\nexport function serializeConfig(config: AppConfig): string {\n const serialized: Record<string, unknown> = {};\n\n if (config.defaultProfile !== undefined) {\n serialized.default_profile = config.defaultProfile;\n }\n\n for (const [key, value] of Object.entries(config)) {\n if (key === \"defaultProfile\" || key === \"profiles\" || value === undefined) {\n continue;\n }\n\n serialized[key] = value;\n }\n\n const serializedProfiles = Object.fromEntries(\n Object.entries(config.profiles).map(([name, profile]) => [name, serializeProfileConfig(profile)]),\n );\n\n if (Object.keys(serializedProfiles).length > 0) {\n serialized.profiles = serializedProfiles;\n }\n\n return stringifyTOML(serialized).trimEnd().concat(\"\\n\");\n}\n\nexport function writeConfig(config: AppConfig, filePath: string = defaultConfigPath): void {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, serializeConfig(config), \"utf8\");\n}\n\nexport function setProfileConfig(\n config: AppConfig,\n profileName: string,\n updates: Partial<ProfileConfig>,\n): AppConfig {\n return {\n ...config,\n profiles: {\n ...config.profiles,\n [profileName]: {\n ...config.profiles[profileName],\n ...updates,\n },\n },\n };\n}\n\nexport function removeProfileConfig(config: AppConfig, profileName: string): AppConfig {\n const nextProfiles = { ...config.profiles };\n delete nextProfiles[profileName];\n\n return {\n ...config,\n defaultProfile:\n config.defaultProfile === profileName\n ? undefined\n : config.defaultProfile,\n profiles: nextProfiles,\n };\n}\n\nexport function setDefaultProfile(config: AppConfig, profileName: string): AppConfig {\n return {\n ...config,\n defaultProfile: profileName,\n };\n}\n\nexport function redactSecret(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value.length <= 4) {\n return redactedSecretMask;\n }\n\n return `${redactedSecretMask}${value.slice(-4)}`;\n}\n\nexport function redactProfile(profile: ProfileConfig): ProfileConfig {\n return {\n ...profile,\n apiKey: redactSecret(profile.apiKey),\n };\n}\n\nexport function redactConfig(config: AppConfig): AppConfig {\n return {\n ...config,\n profiles: Object.fromEntries(\n Object.entries(config.profiles).map(([name, profile]) => [name, redactProfile(profile)]),\n ),\n };\n}\n\nexport function resolveProfile(\n config: AppConfig,\n overrides: Pick<RuntimeOverrides, \"profile\" | \"baseUrl\" | \"apiKey\"> = {},\n): ResolvedProfile {\n const profileName = overrides.profile ?? config.defaultProfile;\n if (profileName) {\n const profile = config.profiles[profileName];\n\n if (!profile) {\n const label = overrides.profile ? \"Profile\" : \"Default profile\";\n throw new ProfileResolutionError(`${label} \"${profileName}\" not found in config.`);\n }\n\n return {\n ...profile,\n name: profileName,\n baseUrl: overrides.baseUrl ?? profile.baseUrl,\n apiKey: overrides.apiKey ?? profile.apiKey,\n };\n }\n\n throw new ProfileResolutionError(\"No profile could be resolved from config.\");\n}\n\nexport function validateBaseUrl(value: string, source: string = \"Base URL\"): string {\n let parsed: URL;\n\n try {\n parsed = new URL(value);\n } catch {\n throw new ProfileResolutionError(`${source} must be an absolute http(s) URL.`);\n }\n\n if (![\"http:\", \"https:\"].includes(parsed.protocol) || !parsed.host) {\n throw new ProfileResolutionError(`${source} must be an absolute http(s) URL.`);\n }\n\n return value.replace(/\\/+$/, \"\");\n}\n\nexport function readEnvApiKey(env: NodeJS.ProcessEnv = process.env): string | undefined {\n return toNonEmptyString(env[ENV_API_KEY]);\n}\n\nexport function readEnvBaseUrl(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const baseUrl = toNonEmptyString(env[ENV_BASE_URL]);\n if (!baseUrl) {\n return undefined;\n }\n\n return validateBaseUrl(baseUrl, `Environment variable ${ENV_BASE_URL}`);\n}\n\nexport function readEnvProfile(env: NodeJS.ProcessEnv = process.env): string | undefined {\n return toNonEmptyString(env[ENV_PROFILE]);\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { InvalidArgumentError, type Command } from \"commander\";\n\nimport { ApiClient } from \"../client.js\";\nimport { readRuntimeConfig } from \"../config.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable, type OutputWriter } from \"../utils/output.js\";\n\nexport type CommandIo = OutputWriter;\n\nexport function createCommandContext(command: Command, filePath: string) {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, command.optsWithGlobals<RuntimeOverrides>());\n\n if (!runtime.baseUrl) {\n throw new CliError(\n \"configuration_error\",\n `Resolved profile \"${runtime.profile}\" is missing a base URL.`,\n );\n }\n\n return {\n client: new ApiClient({ baseUrl: runtime.baseUrl, apiKey: runtime.apiKey }),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nexport function emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath?: string,\n meta: Record<string, unknown> = {},\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, {\n command: commandName,\n ...(configPath !== undefined ? { configPath } : {}),\n ...meta,\n })),\n );\n}\n\nexport function writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nexport function toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n throw new CliError(\"configuration_error\", `Config file not found at ${filePath}.`);\n }\n\n if (error instanceof Error) {\n throw new CliError(\"configuration_error\", error.message);\n }\n\n throw error;\n}\n\nexport function ensureWritable(\n commandName: string,\n readOnly: boolean,\n commandMode: \"write\" | \"destructive\",\n): void {\n if (readOnly) {\n throw new CliError(\n \"command_not_allowed_in_read_only_mode\",\n `Command \"${commandName}\" is not allowed in read-only mode.`,\n {\n commandMode,\n executionMode: \"read-only\",\n },\n );\n }\n}\n\nexport function parseUuidOrSlugSelector(input: string): NormalizedUuidOrSlug {\n try {\n return normalizeUuidOrSlug(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid selector.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nexport function parseNonNegativeInteger(input: string): number {\n if (!/^\\d+$/.test(input.trim())) {\n throw new InvalidArgumentError(`Expected a non-negative integer, received \"${input}\".`);\n }\n\n return Number(input);\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\n}\n\nexport function parseRawJsonObject(input: string, sourceLabel: string): JsonObject {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${sourceLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nexport function readRawObject(\n raw: string | undefined,\n rawFile: string | undefined,\n): JsonObject {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--raw\" or \"--raw-file\", not both.',\n );\n }\n\n if (raw) {\n return parseRawJsonObject(raw, \"--raw\");\n }\n\n if (rawFile) {\n let contents: string;\n\n try {\n contents = readFileSync(rawFile, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read raw payload from ${rawFile}: ${message}`,\n );\n }\n\n return parseRawJsonObject(contents, `--raw-file ${rawFile}`);\n }\n\n return {};\n}\n\nexport function readTextFile(filePath: string, label: string): string {\n try {\n return readFileSync(filePath, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read ${label} from ${filePath}: ${message}`,\n );\n }\n}\n\nfunction toTableRows(data: unknown): Record<string, unknown>[] {\n if (Array.isArray(data)) {\n return data.map((entry) => (isJsonObject(entry) ? entry : { value: entry }));\n }\n\n if (isJsonObject(data)) {\n return [data];\n }\n\n return [{ value: data }];\n}\n\nexport function emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n","export type SelectorKind = \"uuid\" | \"slug\";\n\nexport interface NormalizedUuidOrSlug {\n kind: SelectorKind;\n value: string;\n}\n\nconst uuidPattern =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function normalizeUuidOrSlug(input: string): NormalizedUuidOrSlug {\n const value = input.trim();\n\n if (!value) {\n throw new Error(\"Selector cannot be empty.\");\n }\n\n if (uuidPattern.test(value)) {\n return {\n kind: \"uuid\",\n value: value.toLowerCase(),\n };\n }\n\n return {\n kind: \"slug\",\n value,\n };\n}\n","import type { AppConfig, RuntimeContext, RuntimeOverrides } from \"./types.js\";\n\nimport {\n DEFAULT_PRODUCTION_BASE_URL,\n ENV_API_KEY,\n ENV_BASE_URL,\n readEnvApiKey,\n readEnvBaseUrl,\n readEnvProfile,\n resolveProfile,\n ProfileResolutionError,\n validateBaseUrl,\n} from \"./config.js\";\n\nexport function resolveRuntimeContext(\n config: AppConfig,\n overrides: RuntimeOverrides = {},\n): RuntimeContext {\n const envProfile = readEnvProfile();\n const envApiKey = readEnvApiKey();\n const envBaseUrl = readEnvBaseUrl();\n\n const flagBaseUrl =\n overrides.baseUrl !== undefined\n ? validateBaseUrl(overrides.baseUrl, '\"--base-url\"')\n : undefined;\n\n const profileOverride = overrides.profile ?? envProfile;\n const apiKeyOverride = overrides.apiKey ?? envApiKey;\n const baseUrlOverride = flagBaseUrl ?? envBaseUrl;\n\n if (apiKeyOverride && !baseUrlOverride) {\n throw new ProfileResolutionError(\n `Runtime API key was provided, but ${ENV_BASE_URL} or --base-url is missing.`,\n );\n }\n\n if (baseUrlOverride && !apiKeyOverride) {\n throw new ProfileResolutionError(\n `Runtime base URL was provided, but ${ENV_API_KEY} or --api-key is missing.`,\n );\n }\n\n if (apiKeyOverride && baseUrlOverride) {\n return {\n profile: profileOverride ?? \"runtime\",\n baseUrl: baseUrlOverride,\n apiKey: apiKeyOverride,\n readOnly: overrides.readOnly ?? false,\n json: overrides.json ?? false,\n };\n }\n\n const profile = resolveProfile(config, {\n profile: profileOverride,\n baseUrl: baseUrlOverride,\n apiKey: apiKeyOverride,\n });\n\n return {\n profile: profile.name,\n baseUrl: baseUrlOverride ?? profile.baseUrl ?? DEFAULT_PRODUCTION_BASE_URL,\n apiKey: apiKeyOverride ?? profile.apiKey,\n readOnly: overrides.readOnly ?? false,\n json: overrides.json ?? false,\n };\n}\n","import { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n readConfig,\n redactConfig,\n resolveProfile,\n} from \"../config.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n emitJson,\n toConfigurationError,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterConfigCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport function registerConfigCommands(\n program: Command,\n options: RegisterConfigCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const config = program.command(\"config\").description(\"Inspect local CLI config\");\n\n config\n .command(\"path\")\n .description(\"Show the effective config file path\")\n .action(function action(this: Command) {\n const data = { path: filePath };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config path\", data, filePath);\n return;\n }\n\n writeLine(stdout, filePath);\n });\n\n config\n .command(\"show\")\n .description(\"Show the local config with secrets redacted\")\n .action(function action(this: Command) {\n try {\n const data = redactConfig(readConfig(filePath));\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config show\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Default profile: ${data.defaultProfile ?? \"(none)\"}`);\n printTable(\n Object.entries(data.profiles).map(([name, profile]) => ({\n name,\n default: data.defaultProfile === name ? \"yes\" : \"\",\n baseUrl:\n typeof profile.baseUrl === \"string\"\n ? profile.baseUrl\n : \"\",\n apiKey:\n typeof profile.apiKey === \"string\"\n ? profile.apiKey\n : \"\",\n })),\n [\"name\", \"default\", \"baseUrl\", \"apiKey\"],\n stdout,\n );\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n });\n\n config\n .command(\"validate\")\n .description(\"Validate that the local config can resolve a profile\")\n .action(function action(this: Command) {\n try {\n const parsed = readConfig(filePath);\n const profile = resolveProfile(parsed);\n const data = {\n valid: true,\n profile: profile.name,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"config validate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Config is valid. Resolved profile \"${profile.name}\".`);\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject, JsonValue } from \"../types.js\";\n\nexport interface ApiAutomationFolder {\n [key: string]: unknown;\n id?: string;\n name?: string;\n automationCount?: number;\n}\n\nexport interface ApiAutomation {\n [key: string]: unknown;\n id?: string;\n name?: string;\n description?: string;\n status?: string;\n folderId?: string;\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n trigger?: ApiAutomationTrigger;\n actions?: ApiAutomationAction[];\n}\n\nexport interface ApiAutomationTrigger {\n [key: string]: unknown;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface ApiAutomationAction {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface ApiAutomationPlugin {\n [key: string]: unknown;\n id?: string;\n name?: string;\n version?: string;\n}\n\nexport interface ApiAutomationConnection {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n scope?: string;\n active?: boolean;\n}\n\nexport interface ListAutomationsQuery {\n folderId?: string;\n status?: string;\n triggerType?: string;\n actionType?: string;\n pluginId?: string;\n search?: string;\n}\n\nexport interface MoveAutomationInput {\n automationId: string;\n targetFolderId: string;\n}\n\nexport interface CreateAutomationInput {\n [key: string]: unknown;\n name: string;\n description?: string;\n folderId?: string;\n trigger?: ApiAutomationTrigger;\n}\n\nexport interface UpdateAutomationInput {\n [key: string]: unknown;\n name?: string;\n description?: string;\n folderId?: string;\n}\n\nexport interface SetAutomationTriggerInput {\n [key: string]: unknown;\n type?: string;\n config?: JsonObject;\n}\n\nexport interface MutationAutomationActionInput {\n [key: string]: unknown;\n type?: string;\n name?: string;\n config?: JsonObject;\n}\n\nexport interface SetAutomationFlowInput {\n [key: string]: unknown;\n entryActionIds?: string[];\n transitions?: Array<{ from: string; to: string }>;\n}\n\nexport interface SetAutomationWebhookInput {\n [key: string]: unknown;\n active?: boolean;\n idempotencyKeyPath?: string;\n eventTypePath?: string;\n allowedEventTypes?: string[];\n fieldMappings?: JsonValue[];\n}\n\nexport interface CreateAutomationConnectionInput {\n [key: string]: unknown;\n name: string;\n type: string;\n scope: string;\n ownerMemberId?: string;\n config?: JsonObject;\n secret?: Record<string, string>;\n active?: boolean;\n}\n\nexport interface UpdateAutomationConnectionInput {\n [key: string]: unknown;\n set?: Record<string, unknown>;\n unset?: string[];\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction appendQuery(path: string, query: URLSearchParams): string {\n const queryString = query.toString();\n return queryString.length > 0 ? `${path}?${queryString}` : path;\n}\n\nexport class AutomationsApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(): Promise<ApiAutomationFolder[]> {\n return this.client.getJson<ApiAutomationFolder[]>(\"/api/v2/automation-folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<ApiAutomationFolder> {\n return this.client.requestJson<ApiAutomationFolder>(\n \"/api/v2/automation-folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiAutomationFolder> {\n return this.client.requestJson<ApiAutomationFolder>(\n `/api/v2/automation-folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automation-folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveAutomation(input: MoveAutomationInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/automation-folders/automations:move\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n listAutomations(query: ListAutomationsQuery = {}): Promise<ApiAutomation[]> {\n const params = new URLSearchParams();\n\n if (query.folderId) {\n params.set(\"folderId\", query.folderId);\n }\n\n if (query.status) {\n params.set(\"status\", query.status);\n }\n\n if (query.triggerType) {\n params.set(\"triggerType\", query.triggerType);\n }\n\n if (query.actionType) {\n params.set(\"actionType\", query.actionType);\n }\n\n if (query.pluginId) {\n params.set(\"pluginId\", query.pluginId);\n }\n\n if (query.search) {\n params.set(\"search\", query.search);\n }\n\n return this.client.getJson<ApiAutomation[]>(\n appendQuery(\"/api/v2/automations\", params),\n );\n }\n\n getAutomation(automation: NormalizedUuidOrSlug): Promise<ApiAutomation> {\n return this.client.getJson<ApiAutomation>(\n `/api/v2/automations/${automation.value}`,\n );\n }\n\n createAutomation(input: CreateAutomationInput): Promise<ApiAutomation> {\n return this.client.requestJson<ApiAutomation>(\n \"/api/v2/automations\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateAutomation(\n automation: NormalizedUuidOrSlug,\n input: UpdateAutomationInput,\n ): Promise<ApiAutomation> {\n return this.client.requestJson<ApiAutomation>(\n `/api/v2/automations/${automation.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}`,\n { method: \"DELETE\" },\n );\n }\n\n activateAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}:activate`,\n { method: \"POST\" },\n );\n }\n\n deactivateAutomation(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}:deactivate`,\n { method: \"POST\" },\n );\n }\n\n getTrigger(automation: NormalizedUuidOrSlug): Promise<ApiAutomationTrigger> {\n return this.client.getJson<ApiAutomationTrigger>(\n `/api/v2/automations/${automation.value}/trigger`,\n );\n }\n\n setTrigger(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationTriggerInput,\n ): Promise<ApiAutomationTrigger> {\n return this.client.requestJson<ApiAutomationTrigger>(\n `/api/v2/automations/${automation.value}/trigger`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n listActions(automation: NormalizedUuidOrSlug): Promise<ApiAutomationAction[]> {\n return this.client.getJson<ApiAutomationAction[]>(\n `/api/v2/automations/${automation.value}/actions`,\n );\n }\n\n addAction(\n automation: NormalizedUuidOrSlug,\n input: MutationAutomationActionInput,\n ): Promise<ApiAutomationAction> {\n return this.client.requestJson<ApiAutomationAction>(\n `/api/v2/automations/${automation.value}/actions`,\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateAction(\n automation: NormalizedUuidOrSlug,\n actionId: string,\n input: MutationAutomationActionInput,\n ): Promise<ApiAutomationAction> {\n return this.client.requestJson<ApiAutomationAction>(\n `/api/v2/automations/${automation.value}/actions/${segment(actionId)}`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteAction(\n automation: NormalizedUuidOrSlug,\n actionId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/actions/${segment(actionId)}`,\n { method: \"DELETE\" },\n );\n }\n\n getFlow(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/flow`,\n );\n }\n\n setFlow(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationFlowInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/flow`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n getWebhook(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n );\n }\n\n setWebhook(\n automation: NormalizedUuidOrSlug,\n input: SetAutomationWebhookInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteWebhook(automation: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automations/${automation.value}/webhook-endpoint`,\n { method: \"DELETE\" },\n );\n }\n\n listPlugins(): Promise<ApiAutomationPlugin[]> {\n return this.client.getJson<ApiAutomationPlugin[]>(\"/api/v2/automation-plugins\");\n }\n\n getPlugin(pluginId: string): Promise<ApiAutomationPlugin> {\n return this.client.getJson<ApiAutomationPlugin>(\n `/api/v2/automation-plugins/${segment(pluginId)}`,\n );\n }\n\n listConnections(): Promise<ApiAutomationConnection[]> {\n return this.client.getJson<ApiAutomationConnection[]>(\n \"/api/v2/automation-connections\",\n );\n }\n\n getConnection(connection: NormalizedUuidOrSlug): Promise<ApiAutomationConnection> {\n return this.client.getJson<ApiAutomationConnection>(\n `/api/v2/automation-connections/${connection.value}`,\n );\n }\n\n createConnection(\n input: CreateAutomationConnectionInput,\n ): Promise<ApiAutomationConnection> {\n return this.client.requestJson<ApiAutomationConnection>(\n \"/api/v2/automation-connections\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateConnection(\n connection: NormalizedUuidOrSlug,\n input: UpdateAutomationConnectionInput,\n ): Promise<ApiAutomationConnection> {\n return this.client.requestJson<ApiAutomationConnection>(\n `/api/v2/automation-connections/${connection.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteConnection(connection: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/automation-connections/${connection.value}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import type { JsonValue } from \"../types.js\";\n\nexport interface KeyValueAssignment {\n key: string;\n value: string;\n}\n\nexport interface JsonKeyValueAssignment<TValue = JsonValue> {\n key: string;\n value: TValue;\n}\n\nfunction splitAssignment(input: string): [string, string] {\n const separatorIndex = input.indexOf(\"=\");\n\n if (separatorIndex === -1) {\n throw new Error(`Expected key=value assignment, got \"${input}\".`);\n }\n\n const key = input.slice(0, separatorIndex).trim();\n const value = input.slice(separatorIndex + 1).trim();\n\n if (!key) {\n throw new Error(`Expected a key before \"=\", got \"${input}\".`);\n }\n\n return [key, value];\n}\n\nexport function parseKeyValue(input: string): KeyValueAssignment {\n const [key, value] = splitAssignment(input);\n\n return { key, value };\n}\n\nexport function parseJsonAssignment<TValue = JsonValue>(\n input: string,\n): JsonKeyValueAssignment<TValue> {\n const [key, value] = splitAssignment(input);\n\n try {\n return {\n key,\n value: JSON.parse(value) as TValue,\n };\n } catch (cause) {\n throw new Error(`Expected ${key}=<json> assignment, got invalid JSON.`, { cause });\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n AutomationsApi,\n type ApiAutomation,\n type ApiAutomationAction,\n type ApiAutomationConnection,\n type ApiAutomationFolder,\n type ApiAutomationPlugin,\n type CreateAutomationConnectionInput,\n type CreateAutomationInput,\n type MutationAutomationActionInput,\n type SetAutomationFlowInput,\n type SetAutomationTriggerInput,\n type SetAutomationWebhookInput,\n type UpdateAutomationConnectionInput,\n type UpdateAutomationInput,\n} from \"../api/automations.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { parseJsonAssignment, parseKeyValue } from \"../parsers/kv.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject, JsonValue } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseNonNegativeInteger,\n parseUuidOrSlugSelector,\n readTextFile,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterAutomationsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderMutationCommandOptions {\n name?: string;\n}\n\ninterface FolderMoveCommandOptions {\n to?: NormalizedUuidOrSlug;\n}\n\ninterface AutomationListCommandOptions {\n folder?: NormalizedUuidOrSlug;\n status?: string;\n triggerType?: string;\n actionType?: string;\n plugin?: string;\n search?: string;\n}\n\ninterface TriggerPayloadCommandOptions {\n triggerType?: string;\n cron?: string;\n triggerSchema?: string;\n triggerField?: string[];\n condition?: string[];\n conditionJson?: string[];\n webhookEndpointId?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface AutomationCreateCommandOptions extends TriggerPayloadCommandOptions {\n name?: string;\n description?: string;\n folder?: NormalizedUuidOrSlug;\n}\n\ninterface AutomationUpdateCommandOptions {\n name?: string;\n description?: string;\n folder?: NormalizedUuidOrSlug;\n raw?: string;\n rawFile?: string;\n}\n\ninterface ActionMutationCommandOptions {\n type?: string;\n name?: string;\n targetSchema?: string;\n map?: string[];\n mapJson?: string[];\n condition?: string[];\n conditionJson?: string[];\n useTriggerRecord?: boolean;\n method?: string;\n url?: string;\n header?: string[];\n body?: string;\n bodyFile?: string;\n contentType?: string;\n timeoutMs?: number;\n var?: string[];\n authMode?: string;\n connection?: string;\n plugin?: string;\n arg?: string[];\n argJson?: string[];\n to?: string;\n subject?: string;\n message?: string;\n documentTemplate?: string;\n targetFileField?: string;\n operation?: string;\n schema?: string;\n input?: string[];\n inputJson?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ninterface FlowSetCommandOptions {\n entry?: string[];\n transition?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ninterface WebhookSetCommandOptions {\n active?: boolean;\n idempotencyKeyPath?: string;\n eventTypePath?: string;\n allowedEventType?: string[];\n fieldMapping?: string[];\n fieldMappingFile?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ninterface ConnectionCreateCommandOptions {\n name?: string;\n type?: string;\n scope?: string;\n ownerMember?: string;\n config?: string;\n configFile?: string;\n secret?: string[];\n active?: boolean;\n raw?: string;\n rawFile?: string;\n}\n\ninterface ConnectionUpdateCommandOptions {\n set?: string[];\n unset?: string[];\n raw?: string;\n rawFile?: string;\n}\n\ntype ConditionSpec = JsonObject & {\n field: string;\n comparator: string;\n values: JsonValue[];\n};\n\ntype TransitionSpec = JsonObject & {\n fromActionId: string;\n toActionId: string;\n};\n\nfunction createAutomationsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new AutomationsApi(client),\n ...runtime,\n };\n}\n\nfunction collectValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction readRawSetPayload(raw: JsonObject, label: string): JsonObject {\n const setValue = raw.set;\n\n if (setValue === undefined) {\n return {};\n }\n\n if (!isJsonObject(setValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} field \"set\" to be a JSON object.`,\n );\n }\n\n return { ...setValue };\n}\n\nfunction readRawUnsetPayload(raw: JsonObject, label: string): string[] {\n const unsetValue = raw.unset;\n\n if (unsetValue === undefined) {\n return [];\n }\n\n if (!Array.isArray(unsetValue) || !unsetValue.every((value) => typeof value === \"string\")) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} field \"unset\" to be an array of strings.`,\n );\n }\n\n return [...unsetValue];\n}\n\nfunction splitRawPatchPayload(\n raw: JsonObject,\n label: string,\n): { set: JsonObject; unset: string[] } {\n const set: JsonObject = { ...raw };\n delete set.set;\n delete set.unset;\n\n return {\n set: {\n ...set,\n ...readRawSetPayload(raw, label),\n },\n unset: readRawUnsetPayload(raw, label),\n };\n}\n\nfunction setNestedPath(target: JsonObject, path: readonly string[], value: JsonValue): void {\n const [head, ...tail] = path;\n\n if (!head) {\n return;\n }\n\n if (tail.length === 0) {\n target[head] = value;\n return;\n }\n\n const next = isJsonObject(target[head]) ? { ...target[head] } : {};\n target[head] = next;\n setNestedPath(next, tail, value);\n}\n\nfunction hasSetPath(target: JsonObject, path: string): boolean {\n if (Object.hasOwn(target, path)) {\n return true;\n }\n\n const segments = path.split(\".\").filter(Boolean);\n\n if (segments.length <= 1) {\n return Object.hasOwn(target, path);\n }\n\n let current: unknown = target;\n\n for (const segment of segments) {\n if (!isJsonObject(current) || !Object.hasOwn(current, segment)) {\n return false;\n }\n\n current = current[segment];\n }\n\n return true;\n}\n\nfunction parseJsonValue(input: string, sourceLabel: string): JsonValue {\n try {\n return JSON.parse(input) as JsonValue;\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n}\n\nfunction parseJsonObject(input: string, sourceLabel: string): JsonObject {\n const parsed = parseJsonValue(input, sourceLabel);\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${sourceLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nfunction readJsonValueOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonValue | undefined {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Provide either \"${rawLabel}\" or \"${rawFileLabel}\", not both.`,\n );\n }\n\n if (raw) {\n return parseJsonValue(raw, rawLabel);\n }\n\n if (rawFile) {\n return parseJsonValue(readTextFile(rawFile, rawFileLabel), `${rawFileLabel} ${rawFile}`);\n }\n\n return undefined;\n}\n\nfunction readJsonObjectOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonObject {\n return (\n readJsonValueOption(raw, rawFile, rawLabel, rawFileLabel) ?? {}\n ) as JsonObject;\n}\n\nconst NO_VALUE_COMPARATORS = new Set([\n \"chg\",\n \"changes\",\n \"ie\",\n \"is_empty\",\n \"ine\",\n \"is_not_empty\",\n]);\n\nfunction isNoValueComparator(comparator: string): boolean {\n return NO_VALUE_COMPARATORS.has(comparator.toLowerCase());\n}\n\nfunction conditionFormatError(input: string): CliError {\n return new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, or field:comparator for comparators without value (chg, ie, ine), received \"${input}\".`,\n );\n}\n\nfunction parseCondition(input: string): ConditionSpec {\n const firstSeparator = input.indexOf(\":\");\n const secondSeparator = input.indexOf(\":\", firstSeparator + 1);\n\n if (firstSeparator <= 0) {\n throw conditionFormatError(input);\n }\n\n if (secondSeparator === -1) {\n const field = input.slice(0, firstSeparator).trim();\n const comparator = input.slice(firstSeparator + 1).trim();\n\n if (!field || !comparator || !isNoValueComparator(comparator)) {\n throw conditionFormatError(input);\n }\n\n return { field, comparator, values: [] };\n }\n\n if (secondSeparator <= firstSeparator + 1) {\n throw conditionFormatError(input);\n }\n\n const field = input.slice(0, firstSeparator).trim();\n const comparator = input.slice(firstSeparator + 1, secondSeparator).trim();\n const value = input.slice(secondSeparator + 1).trim();\n\n if (!field || !comparator || !value) {\n throw conditionFormatError(input);\n }\n\n return {\n field,\n comparator,\n values: value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean),\n };\n}\n\nfunction parseJsonCondition(input: string, label: string): ConditionSpec {\n const parsed = parseJsonObject(input, label);\n const field = typeof parsed.field === \"string\" ? parsed.field.trim() : \"\";\n const comparator = typeof parsed.comparator === \"string\" ? parsed.comparator.trim() : \"\";\n const values = parsed.values;\n\n if (!field || !comparator || !Array.isArray(values)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to contain {\"field\",\"comparator\",\"values\"}.`,\n );\n }\n\n return {\n ...parsed,\n field,\n comparator,\n values: [...values],\n };\n}\n\nfunction parseTransition(input: string): TransitionSpec {\n const separatorIndex = input.indexOf(\":\");\n\n if (separatorIndex <= 0 || separatorIndex === input.length - 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected transition in the form from:to, received \"${input}\".`,\n );\n }\n\n const fromActionId = input.slice(0, separatorIndex).trim();\n const toActionId = input.slice(separatorIndex + 1).trim();\n\n if (!fromActionId || !toActionId) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected transition in the form from:to, received \"${input}\".`,\n );\n }\n\n return { fromActionId, toActionId };\n}\n\nfunction parseStringAssignments(values: readonly string[] | undefined): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const value of values ?? []) {\n const assignment = parseKeyValue(value);\n result[assignment.key] = assignment.value;\n }\n\n return result;\n}\n\nfunction parseJsonAssignments(values: readonly string[] | undefined): JsonObject {\n const result: JsonObject = {};\n\n for (const value of values ?? []) {\n const assignment = parseJsonAssignment<JsonValue>(value);\n result[assignment.key] = assignment.value;\n }\n\n return result;\n}\n\nfunction mergeMappings(\n stringAssignments: readonly string[] | undefined,\n jsonAssignments: readonly string[] | undefined,\n): JsonObject {\n return {\n ...parseStringAssignments(stringAssignments),\n ...parseJsonAssignments(jsonAssignments),\n };\n}\n\nconst AUTOMATION_SOURCE_TYPES = new Set([\"TRIGGER\", \"PREVIOUS_ACTION\"]);\n\ntype AutomationSourceType = \"TRIGGER\" | \"PREVIOUS_ACTION\";\n\ntype AutomationValueSource = JsonObject & {\n type: AutomationSourceType;\n id: string;\n actionId?: string;\n};\n\ntype AutomationResolvedValue = JsonObject & {\n rawValue: JsonValue | null;\n source: AutomationValueSource | null;\n};\n\nfunction isAutomationValueSource(value: unknown): value is AutomationValueSource {\n return (\n isJsonObject(value) &&\n typeof value.type === \"string\" &&\n AUTOMATION_SOURCE_TYPES.has(value.type) &&\n typeof value.id === \"string\" &&\n value.id.trim().length > 0 &&\n (value.actionId === undefined ||\n (value.type === \"PREVIOUS_ACTION\" && typeof value.actionId === \"string\" && value.actionId.trim().length > 0))\n );\n}\n\nfunction looksLikeAutomationResolvedValue(value: unknown): value is JsonObject {\n if (!isJsonObject(value)) {\n return false;\n }\n\n if (\"rawValue\" in value) {\n return true;\n }\n\n if (!Object.hasOwn(value, \"source\")) {\n return false;\n }\n\n return value.source === null ||\n (isJsonObject(value.source) && (\"type\" in value.source || \"id\" in value.source || \"actionId\" in value.source));\n}\n\nfunction normalizeAutomationResolvedValue(\n value: JsonValue,\n label: string,\n options: { allowSource: boolean },\n): AutomationResolvedValue {\n if (!looksLikeAutomationResolvedValue(value)) {\n return {\n rawValue: value,\n source: null,\n };\n }\n\n const rawValue = Object.hasOwn(value, \"rawValue\") ? (value.rawValue as JsonValue | null) : undefined;\n const sourceValue = Object.hasOwn(value, \"source\") ? value.source : undefined;\n const hasRawValue = rawValue !== undefined && rawValue !== null;\n const hasSource = sourceValue !== undefined && sourceValue !== null;\n\n if (hasRawValue === hasSource) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to define exactly one of \"rawValue\" or \"source\".`,\n );\n }\n\n if (hasSource) {\n if (!options.allowSource) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} to use only literal \"rawValue\" values.`,\n );\n }\n\n if (!isAutomationValueSource(sourceValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} \"source\" to contain a valid automation source reference.`,\n );\n }\n\n return {\n rawValue: null,\n source: {\n type: sourceValue.type,\n id: sourceValue.id,\n ...(sourceValue.actionId === undefined ? {} : { actionId: sourceValue.actionId }),\n },\n };\n }\n\n return {\n rawValue: rawValue ?? null,\n source: null,\n };\n}\n\nfunction normalizeAutomationFieldMapping(mapping: JsonObject, label: string): JsonObject {\n const normalized: JsonObject = {};\n\n for (const [field, value] of Object.entries(mapping)) {\n normalized[field] = normalizeAutomationResolvedValue(\n value as JsonValue,\n `${label} \"${field}\"`,\n { allowSource: true },\n );\n }\n\n return normalized;\n}\n\nfunction normalizeAutomationConditions(\n conditions: readonly unknown[],\n label: string,\n options: { allowSource: boolean },\n): ConditionSpec[] {\n return conditions.map((condition, index) => {\n if (!isJsonObject(condition)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to be a JSON object.`,\n );\n }\n\n const field = typeof condition.field === \"string\" ? condition.field.trim() : \"\";\n const comparator = typeof condition.comparator === \"string\" ? condition.comparator.trim() : \"\";\n const values = condition.values;\n\n const allowsEmptyValues = isNoValueComparator(comparator);\n if (!field || !comparator || !Array.isArray(values) || (values.length === 0 && !allowsEmptyValues)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to contain \"field\", \"comparator\", and a non-empty \"values\" array (comparators without value, e.g. chg/ie/ine, accept an empty array).`,\n );\n }\n\n return {\n ...condition,\n field,\n comparator,\n values: values.map((value, valueIndex) =>\n normalizeAutomationResolvedValue(\n value as JsonValue,\n `${label} ${index + 1} value ${valueIndex + 1}`,\n options,\n ),\n ),\n };\n });\n}\n\nfunction readConditions(\n literalConditions: readonly string[] | undefined,\n jsonConditions: readonly string[] | undefined,\n label: string,\n): ConditionSpec[] {\n return [\n ...(literalConditions ?? []).map(parseCondition),\n ...(jsonConditions ?? []).map((value, index) =>\n parseJsonCondition(value, `${label} ${index + 1}`),\n ),\n ];\n}\n\nfunction resolveFolder(\n folders: readonly ApiAutomationFolder[],\n selector: NormalizedUuidOrSlug,\n): ApiAutomationFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n\n if (match) {\n return match;\n }\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiAutomationFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nasync function resolveFolderSelector(\n api: AutomationsApi,\n selector: NormalizedUuidOrSlug | undefined,\n): Promise<NormalizedUuidOrSlug | undefined> {\n if (!selector) {\n return undefined;\n }\n\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const folders = await api.listFolders();\n const resolved = resolveFolder(folders, selector);\n\n if (typeof resolved.id !== \"string\" || resolved.id.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is missing an id in the API response.`,\n );\n }\n\n return { kind: \"uuid\", value: resolved.id };\n}\n\nfunction folderRows(folders: readonly ApiAutomationFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id ?? \"\",\n name: folder.name ?? \"\",\n automationCount: folder.automationCount ?? \"\",\n }));\n}\n\nfunction automationRows(automations: readonly ApiAutomation[]): Record<string, unknown>[] {\n return automations.map((automation) => ({\n id: automation.id ?? \"\",\n name: automation.name ?? \"\",\n status: automation.status ?? \"\",\n triggerType:\n isJsonObject(automation.trigger) && typeof automation.trigger.type === \"string\"\n ? automation.trigger.type\n : \"\",\n actionCount: Array.isArray(automation.actions) ? automation.actions.length : \"\",\n ...folderColumns(automation.folder),\n }));\n}\n\nfunction actionRows(actions: readonly ApiAutomationAction[]): Record<string, unknown>[] {\n return actions.map((action) => ({\n id: action.id ?? \"\",\n name: action.name ?? \"\",\n type: action.type ?? \"\",\n }));\n}\n\nfunction pluginRows(plugins: readonly ApiAutomationPlugin[]): Record<string, unknown>[] {\n return plugins.map((plugin) => ({\n id: plugin.id ?? \"\",\n name: plugin.name ?? \"\",\n version: plugin.version ?? \"\",\n }));\n}\n\nfunction connectionRows(\n connections: readonly ApiAutomationConnection[],\n): Record<string, unknown>[] {\n return connections.map((connection) => ({\n id: connection.id ?? \"\",\n name: connection.name ?? \"\",\n type: connection.type ?? \"\",\n scope: connection.scope ?? \"\",\n active: connection.active ?? \"\",\n }));\n}\n\nfunction buildFolderMutationInput(\n options: FolderMutationCommandOptions,\n requireName: boolean,\n): Record<string, unknown> {\n const input: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (requireName && typeof input.name !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n\n if (!requireName && isEmptyObject(input)) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder updates via \"--name\".');\n }\n\n return input;\n}\n\nfunction buildTriggerInput(\n options: TriggerPayloadCommandOptions,\n mode: \"optional\" | \"required\",\n): SetAutomationTriggerInput | undefined {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n const config = isJsonObject(input.config) ? { ...input.config } : {};\n\n if (options.triggerType !== undefined) {\n input.type = options.triggerType;\n }\n\n if (options.cron !== undefined) {\n config.cronExpression = options.cron;\n }\n\n if (options.triggerSchema !== undefined) {\n config.schemaId = options.triggerSchema;\n }\n\n if ((options.triggerField?.length ?? 0) > 0) {\n config.fieldIds = [...(options.triggerField ?? [])];\n }\n\n const conditions = readConditions(options.condition, options.conditionJson, \"--condition-json\");\n if (conditions.length > 0) {\n config.conditions = conditions;\n }\n\n if (options.webhookEndpointId !== undefined) {\n config.webhookEndpointId = options.webhookEndpointId;\n }\n\n if (!isEmptyObject(config)) {\n if (Array.isArray(config.conditions)) {\n config.conditions = normalizeAutomationConditions(\n config.conditions,\n \"trigger condition\",\n { allowSource: false },\n );\n }\n\n input.config = config;\n }\n\n if (isEmptyObject(input)) {\n if (mode === \"optional\") {\n return undefined;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide trigger input via \"--trigger-type\", trigger flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationTriggerInput;\n}\n\nasync function buildAutomationCreateInput(\n api: AutomationsApi,\n options: AutomationCreateCommandOptions,\n): Promise<CreateAutomationInput> {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n const folder = await resolveFolderSelector(api, options.folder);\n if (folder) {\n input.folderId = folder.value;\n }\n\n const trigger = buildTriggerInput(options, \"optional\");\n if (trigger) {\n input.trigger = trigger;\n }\n\n if (typeof input.name !== \"string\" || input.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide automation name via \"--name\".');\n }\n\n return input as CreateAutomationInput;\n}\n\nasync function buildAutomationUpdateInput(\n api: AutomationsApi,\n options: AutomationUpdateCommandOptions,\n): Promise<UpdateAutomationInput> {\n const raw = readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\");\n const { set: rawSet, unset: rawUnset } = splitRawPatchPayload(raw, \"raw automation update payload\");\n const setPayload: JsonObject = { ...rawSet };\n\n if (options.name !== undefined) {\n setPayload.name = options.name;\n }\n\n if (options.description !== undefined) {\n setPayload.description = options.description;\n }\n\n const folder = await resolveFolderSelector(api, options.folder);\n if (folder) {\n setPayload.folderId = folder.value;\n }\n\n const unsetPayload = rawUnset.filter((path) => !hasSetPath(setPayload, path));\n const input: UpdateAutomationInput = {};\n\n if (!isEmptyObject(setPayload)) {\n input.set = setPayload;\n }\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide automation updates via \"--name\", \"--description\", \"--folder\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as UpdateAutomationInput;\n}\n\nfunction buildActionInput(\n options: ActionMutationCommandOptions,\n mode: \"create\" | \"update\",\n): MutationAutomationActionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n const config = isJsonObject(input.config) ? { ...input.config } : {};\n const mappings = mergeMappings(options.map, options.mapJson);\n const headers = parseStringAssignments(options.header);\n const variables = parseStringAssignments(options.var);\n const args = mergeMappings(options.arg, options.argJson);\n const body = readJsonValueOption(options.body, options.bodyFile, \"--body\", \"--body-file\");\n\n if (options.type !== undefined) {\n input.type = options.type;\n }\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.targetSchema !== undefined) {\n config.targetSchemaId = options.targetSchema;\n }\n\n if (options.to !== undefined) {\n mappings.recipients = options.to;\n }\n\n if (options.subject !== undefined) {\n mappings.subject = options.subject;\n }\n\n if (options.message !== undefined) {\n mappings.body = options.message;\n }\n\n if (!isEmptyObject(mappings)) {\n config.fieldMapping = mappings;\n }\n\n const conditions = readConditions(options.condition, options.conditionJson, \"--condition-json\");\n if (conditions.length > 0) {\n config.conditions = conditions;\n }\n\n if (options.useTriggerRecord === true) {\n config.useTriggerRecord = true;\n }\n\n if (options.method !== undefined) {\n config.method = options.method.toUpperCase();\n }\n\n if (options.url !== undefined) {\n config.url = options.url;\n }\n\n if (!isEmptyObject(headers)) {\n config.headers = headers;\n }\n\n if (body !== undefined) {\n config.body = body;\n }\n\n if (options.contentType !== undefined) {\n config.contentType = options.contentType;\n }\n\n if (options.timeoutMs !== undefined) {\n config.timeoutMs = options.timeoutMs;\n }\n\n if (!isEmptyObject(variables)) {\n config.variables = variables;\n }\n\n if (options.authMode !== undefined) {\n config.authMode = options.authMode;\n }\n\n if (options.connection !== undefined) {\n config.connectionId = options.connection;\n }\n\n if (options.plugin !== undefined) {\n config.pluginId = options.plugin;\n }\n\n if (!isEmptyObject(args)) {\n config.pluginArgs = args;\n }\n\n if (options.documentTemplate !== undefined) {\n config.documentTemplateId = options.documentTemplate;\n }\n\n if (options.targetFileField !== undefined) {\n config.targetFileFieldId = options.targetFileField;\n }\n\n if (options.operation !== undefined) {\n config.operation = options.operation;\n }\n if (options.schema !== undefined) {\n config.schemaId = options.schema;\n }\n const invoicingInputs = mergeMappings(options.input, options.inputJson);\n if (!isEmptyObject(invoicingInputs)) {\n config.inputs = { ...(isJsonObject(config.inputs) ? config.inputs : {}), ...invoicingInputs };\n }\n\n if (input.type === \"invoicing\" && config.inputs === undefined) {\n config.inputs = {};\n }\n\n if (!isEmptyObject(config)) {\n if (isJsonObject(config.inputs)) {\n config.inputs = normalizeAutomationFieldMapping(config.inputs, \"invoicing input\");\n }\n if (isJsonObject(config.fieldMapping)) {\n config.fieldMapping = normalizeAutomationFieldMapping(\n config.fieldMapping,\n \"field mapping\",\n );\n }\n\n if (Array.isArray(config.conditions)) {\n config.conditions = normalizeAutomationConditions(\n config.conditions,\n \"action condition\",\n { allowSource: true },\n );\n }\n\n if (config.useTriggerRecord === true) {\n delete config.conditions;\n }\n\n input.config = config;\n }\n\n if (mode === \"create\" && typeof input.type !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide action type via \"--type\" or \"--raw\".');\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide action input via flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as MutationAutomationActionInput;\n}\n\nfunction buildFlowInput(options: FlowSetCommandOptions): SetAutomationFlowInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if ((options.entry?.length ?? 0) > 0) {\n input.entryActionIds = [...(options.entry ?? [])];\n }\n\n if ((options.transition?.length ?? 0) > 0) {\n input.transitions = (options.transition ?? []).map(parseTransition);\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide flow input via \"--entry\", \"--transition\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationFlowInput;\n}\n\nfunction readWebhookFieldMappings(options: WebhookSetCommandOptions): JsonValue[] {\n const mappings: JsonValue[] = [];\n\n for (const value of options.fieldMapping ?? []) {\n mappings.push(parseJsonValue(value, \"--field-mapping\"));\n }\n\n for (const filePath of options.fieldMappingFile ?? []) {\n mappings.push(\n parseJsonValue(\n readTextFile(filePath, \"--field-mapping-file\"),\n `--field-mapping-file ${filePath}`,\n ),\n );\n }\n\n return mappings;\n}\n\nfunction buildWebhookInput(options: WebhookSetCommandOptions): SetAutomationWebhookInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.active === true) {\n input.active = true;\n }\n\n if (options.idempotencyKeyPath !== undefined) {\n input.idempotencyKeyJsonPath = options.idempotencyKeyPath;\n }\n\n if (options.eventTypePath !== undefined) {\n input.eventTypeJsonPath = options.eventTypePath;\n }\n\n if ((options.allowedEventType?.length ?? 0) > 0) {\n input.allowedEventTypes = [...(options.allowedEventType ?? [])];\n }\n\n const fieldMappings = readWebhookFieldMappings(options);\n if (fieldMappings.length > 0) {\n input.fieldMappings = fieldMappings;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide webhook input via flags, \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as SetAutomationWebhookInput;\n}\n\nfunction buildConnectionCreateInput(\n options: ConnectionCreateCommandOptions,\n): CreateAutomationConnectionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as Record<string, unknown>;\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.type !== undefined) {\n input.type = options.type;\n }\n\n if (options.scope !== undefined) {\n input.scope = options.scope;\n }\n\n if (options.ownerMember !== undefined) {\n input.ownerMemberId = options.ownerMember;\n }\n\n const config = readJsonValueOption(options.config, options.configFile, \"--config\", \"--config-file\");\n if (config !== undefined) {\n if (!isJsonObject(config)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Expected \"--config\" or \"--config-file\" to contain a JSON object.',\n );\n }\n\n input.config = config;\n }\n\n const secrets = parseStringAssignments(options.secret);\n if (!isEmptyObject(secrets)) {\n input.secret = secrets;\n }\n\n if (options.active === true) {\n input.active = true;\n }\n\n if (typeof input.name !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection name via \"--name\".');\n }\n\n if (typeof input.type !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection type via \"--type\".');\n }\n\n if (typeof input.scope !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", 'Provide connection scope via \"--scope\".');\n }\n\n return input as CreateAutomationConnectionInput;\n}\n\nfunction buildConnectionUpdateInput(\n options: ConnectionUpdateCommandOptions,\n): UpdateAutomationConnectionInput {\n const input = {\n ...readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\"),\n } as UpdateAutomationConnectionInput;\n const setPayload = readRawSetPayload(input as JsonObject, \"raw connection update payload\");\n\n for (const value of options.set ?? []) {\n const assignment = parseKeyValue(value);\n\n if (assignment.key.startsWith(\"config.\")) {\n setNestedPath(setPayload, assignment.key.split(\".\").filter(Boolean), assignment.value);\n continue;\n }\n\n setPayload[assignment.key] = assignment.value;\n }\n\n if (!isEmptyObject(setPayload)) {\n input.set = setPayload;\n }\n\n const unsetPayload = [\n ...readRawUnsetPayload(input as JsonObject, \"raw connection update payload\"),\n ...(options.unset ?? []),\n ].filter((path) => !hasSetPath(setPayload, path));\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n } else {\n delete input.unset;\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide connection updates via \"--set\", \"--unset\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input as UpdateAutomationConnectionInput;\n}\n\nfunction addTriggerPayloadOptions(command: Command): Command {\n return command\n .option(\"--trigger-type <type>\", \"trigger type\")\n .option(\"--cron <expression>\", \"cron expression for scheduled triggers\")\n .option(\"--trigger-schema <uuid>\", \"schema id for record-based triggers\")\n .option(\n \"--trigger-field <uuid>\",\n \"field id for record_changed triggers\",\n collectValues,\n [],\n )\n .option(\n \"--condition <field:comparator:value>\",\n \"trigger condition (use field:comparator for comparators without value: chg, ie, ine)\",\n collectValues,\n [],\n )\n .option(\n \"--condition-json <json>\",\n \"trigger condition as JSON\",\n collectValues,\n [],\n )\n .option(\"--webhook-endpoint-id <uuid>\", \"webhook endpoint id\")\n .option(\"--raw <json>\", \"raw trigger JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw trigger JSON payload\");\n}\n\nconst ACTION_TYPES_HELP = `\nAction types and their flags:\n create_record --target-schema, --map, --map-json\n update_record --target-schema, --use-trigger-record, --map,\n --condition, --condition-json\n search_records --target-schema, --condition, --condition-json\n send_message --to, --subject, --message\n (--map / --map-json also accepted for extra keys)\n http_request --method, --url, --header, --body, --content-type,\n --timeout-ms, --var, --auth-mode, --connection\n execute_plugin --plugin, --arg, --arg-json\n generate_document --document-template, --target-schema, --target-file-field\n invoicing --operation, --schema, --input, --input-json\n`;\n\nfunction addActionPayloadOptions(command: Command): Command {\n return command\n .option(\n \"--type <type>\",\n \"action type (create_record|update_record|search_records|send_message|http_request|execute_plugin|generate_document|invoicing)\",\n )\n .option(\"--name <name>\", \"action name\")\n .option(\"--target-schema <uuid>\", \"target schema id\")\n .option(\"--map <field=value>\", \"field mapping\", collectValues, [])\n .option(\"--map-json <field=json>\", \"JSON field mapping\", collectValues, [])\n .option(\n \"--condition <field:comparator:value>\",\n \"action condition (use field:comparator for comparators without value: ie, ine)\",\n collectValues,\n [],\n )\n .option(\"--condition-json <json>\", \"action condition as JSON\", collectValues, [])\n .option(\"--use-trigger-record\", \"use the triggering record\")\n .option(\"--method <method>\", \"HTTP method\")\n .option(\"--url <url>\", \"HTTP target URL\")\n .option(\"--header <key=value>\", \"HTTP header\", collectValues, [])\n .option(\"--body <json>\", \"HTTP request body as JSON\")\n .option(\"--body-file <path>\", \"path to HTTP request body JSON\")\n .option(\"--content-type <type>\", \"HTTP content type\")\n .option(\n \"--timeout-ms <n>\",\n \"HTTP timeout in milliseconds\",\n parseNonNegativeInteger,\n )\n .option(\"--var <key=value>\", \"HTTP variable\", collectValues, [])\n .option(\"--auth-mode <mode>\", \"HTTP auth mode\")\n .option(\"--connection <uuid>\", \"connection id for HTTP auth\")\n .option(\"--plugin <id>\", \"plugin id for execute_plugin\")\n .option(\"--arg <key=value>\", \"plugin argument\", collectValues, [])\n .option(\"--arg-json <key=json>\", \"plugin argument as JSON\", collectValues, [])\n .option(\"--to <recipient>\", \"send_message recipient (maps to fieldMapping.recipients)\")\n .option(\"--subject <text>\", \"send_message subject\")\n .option(\"--message <text>\", \"send_message body text (maps to fieldMapping.body)\")\n .option(\"--document-template <uuid>\", \"generate_document template id\")\n .option(\"--target-file-field <uuid>\", \"generate_document target FileField id\")\n .option(\"--operation <operation>\", \"invoicing operation (prepare|issue|refund|cancel|create_correction)\")\n .option(\"--schema <uuid>\", \"invoicing source draft or invoice schema id\")\n .option(\"--input <key=value>\", \"invoicing literal input (repeatable)\", collectValues, [])\n .option(\"--input-json <key=json>\", \"invoicing literal or source input (repeatable)\", collectValues, [])\n .option(\"--raw <json>\", \"raw action JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw action JSON payload\")\n .addHelpText(\"after\", ACTION_TYPES_HELP);\n}\n\nexport function registerAutomationsCommands(\n program: Command,\n options: RegisterAutomationsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const automations = program\n .command(\"automations\")\n .description(\"Manage automations, triggers, actions, and connections\");\n\n const folders = automations\n .command(\"folders\")\n .description(\"Manage automation folders (flat: a folder only has a name, no order or properties)\");\n\n folders\n .command(\"list\")\n .description(\"List automation folders (non-root folders plus the root bucket, whose name is null)\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listFolders();\n\n if (json) {\n emitJson(stdout, \"automations folders list\", data, filePath);\n return;\n }\n\n printTable(folderRows(data), [\"id\", \"name\", \"automationCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create an automation folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(this: Command, commandOptions: FolderMutationCommandOptions) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders create\", readOnly, \"write\");\n const data = await api.createFolder(buildFolderMutationInput(commandOptions, true));\n\n if (json) {\n emitJson(stdout, \"automations folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created automation folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update an automation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders update\", readOnly, \"write\");\n const resolvedFolder = await resolveFolderSelector(api, folder);\n\n if (!resolvedFolder) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${folder.value}\" was not found.`);\n }\n\n const data = await api.updateFolder(\n resolvedFolder,\n buildFolderMutationInput(commandOptions, false),\n );\n\n if (json) {\n emitJson(stdout, \"automations folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated automation folder \"${String(data.name ?? folder.value)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete an automation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders delete\", readOnly, \"destructive\");\n const resolvedFolder = await resolveFolderSelector(api, folder);\n\n if (!resolvedFolder) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${folder.value}\" was not found.`);\n }\n\n const data = await api.deleteFolder(resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"automations folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted automation folder \"${folder.value}\".`);\n });\n\n folders\n .command(\"move\")\n .description(\"Move an automation into a folder\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (use the root folder to move it out of any folder)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: FolderMoveCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations folders move\", readOnly, \"write\");\n\n if (!commandOptions.to) {\n throw new CliError(\"invalid_cli_usage\", 'Provide target folder via \"--to\".');\n }\n\n const targetFolder = await resolveFolderSelector(api, commandOptions.to);\n\n if (!targetFolder) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${commandOptions.to.value}\" was not found.`,\n );\n }\n\n const data = await api.moveAutomation({\n automationId: automation.value,\n targetFolderId: targetFolder.value,\n });\n\n if (json) {\n emitJson(stdout, \"automations folders move\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Moved automation \"${automation.value}\" to folder \"${targetFolder.value}\".`);\n });\n\n automations\n .command(\"list\")\n .description(\"List automations\")\n .option(\"--folder <folder>\", \"filter by folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--trigger-type <type>\", \"filter by trigger type\")\n .option(\"--action-type <type>\", \"filter by action type\")\n .option(\"--plugin <id>\", \"filter by plugin id\")\n .option(\"--search <text>\", \"search text\")\n .action(async function action(this: Command, commandOptions: AutomationListCommandOptions) {\n const { api, json } = createAutomationsApi(this, filePath);\n const folder = await resolveFolderSelector(api, commandOptions.folder);\n const data = await api.listAutomations({\n folderId: folder?.value,\n status: commandOptions.status,\n triggerType: commandOptions.triggerType,\n actionType: commandOptions.actionType,\n pluginId: commandOptions.plugin,\n search: commandOptions.search,\n });\n\n if (json) {\n emitJson(stdout, \"automations list\", data, filePath);\n return;\n }\n\n printTable(\n automationRows(data),\n [\"id\", \"name\", \"status\", \"triggerType\", \"actionCount\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n });\n\n automations\n .command(\"get\")\n .description(\"Get an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n addTriggerPayloadOptions(\n automations\n .command(\"create\")\n .description(\"Create an automation\")\n .requiredOption(\"--name <name>\", \"automation name\")\n .option(\"--description <text>\", \"automation description\")\n .option(\"--folder <folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n commandOptions: AutomationCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations create\", readOnly, \"write\");\n const data = await api.createAutomation(await buildAutomationCreateInput(api, commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created automation \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n automations\n .command(\"update\")\n .description(\"Update an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"automation name\")\n .option(\"--description <text>\", \"automation description\")\n .option(\"--folder <folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--raw <json>\", \"raw automation JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw automation JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: AutomationUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations update\", readOnly, \"write\");\n const data = await api.updateAutomation(\n automation,\n await buildAutomationUpdateInput(api, commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"automations update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"delete\")\n .description(\"Delete an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations delete\", readOnly, \"destructive\");\n const data = await api.deleteAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"activate\")\n .description(\"Activate an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations activate\", readOnly, \"write\");\n const data = await api.activateAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations activate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Activated automation \"${automation.value}\".`);\n });\n\n automations\n .command(\"deactivate\")\n .description(\"Deactivate an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations deactivate\", readOnly, \"write\");\n const data = await api.deactivateAutomation(automation);\n\n if (json) {\n emitJson(stdout, \"automations deactivate\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deactivated automation \"${automation.value}\".`);\n });\n\n const trigger = automations.command(\"trigger\").description(\"Manage automation triggers\");\n\n trigger\n .command(\"get\")\n .description(\"Get the trigger for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getTrigger(automation);\n\n if (json) {\n emitJson(stdout, \"automations trigger get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n addTriggerPayloadOptions(\n trigger\n .command(\"set\")\n .description(\"Set the trigger for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: TriggerPayloadCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations trigger set\", readOnly, \"write\");\n const data = await api.setTrigger(\n automation,\n buildTriggerInput(commandOptions, \"required\") as SetAutomationTriggerInput,\n );\n\n if (json) {\n emitJson(stdout, \"automations trigger set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated trigger for automation \"${automation.value}\".`);\n });\n\n const actions = automations.command(\"actions\").description(\"Manage automation actions\");\n\n actions\n .command(\"list\")\n .description(\"List automation actions\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listActions(automation);\n\n if (json) {\n emitJson(stdout, \"automations actions list\", data, filePath);\n return;\n }\n\n printTable(actionRows(data), [\"id\", \"name\", \"type\"], stdout);\n });\n\n addActionPayloadOptions(\n actions\n .command(\"add\")\n .description(\"Add an action to an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: ActionMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions add\", readOnly, \"write\");\n const data = await api.addAction(automation, buildActionInput(commandOptions, \"create\"));\n\n if (json) {\n emitJson(stdout, \"automations actions add\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Added action to automation \"${automation.value}\".`);\n });\n\n addActionPayloadOptions(\n actions\n .command(\"update\")\n .description(\"Update an automation action\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .argument(\"<action>\", \"action UUID\"),\n ).action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n actionId: string,\n commandOptions: ActionMutationCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions update\", readOnly, \"write\");\n const data = await api.updateAction(automation, actionId, buildActionInput(commandOptions, \"update\"));\n\n if (json) {\n emitJson(stdout, \"automations actions update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated action \"${actionId}\" on automation \"${automation.value}\".`);\n });\n\n actions\n .command(\"delete\")\n .description(\"Delete an automation action\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .argument(\"<action>\", \"action UUID\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n actionId: string,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations actions delete\", readOnly, \"destructive\");\n const data = await api.deleteAction(automation, actionId);\n\n if (json) {\n emitJson(stdout, \"automations actions delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted action \"${actionId}\" from automation \"${automation.value}\".`);\n });\n\n const flow = automations.command(\"flow\").description(\"Manage automation flow wiring\");\n\n flow\n .command(\"get\")\n .description(\"Get the flow for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getFlow(automation);\n\n if (json) {\n emitJson(stdout, \"automations flow get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n flow\n .command(\"set\")\n .description(\"Set the flow for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--entry <actionId>\", \"entry action id\", collectValues, [])\n .option(\"--transition <from:to>\", \"transition\", collectValues, [])\n .option(\"--raw <json>\", \"raw flow JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw flow JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: FlowSetCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations flow set\", readOnly, \"write\");\n const data = await api.setFlow(automation, buildFlowInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations flow set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated flow for automation \"${automation.value}\".`);\n });\n\n const webhook = automations.command(\"webhook\").description(\"Manage automation webhook config\");\n\n webhook\n .command(\"get\")\n .description(\"Get webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getWebhook(automation);\n\n if (json) {\n emitJson(stdout, \"automations webhook get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n webhook\n .command(\"set\")\n .description(\"Set webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .option(\"--active\", \"activate webhook processing\")\n .option(\"--idempotency-key-path <jsonpath>\", \"idempotency key JSONPath\")\n .option(\"--event-type-path <jsonpath>\", \"event type JSONPath\")\n .option(\"--allowed-event-type <value>\", \"allowed event type\", collectValues, [])\n .option(\"--field-mapping <json>\", \"field mapping JSON\", collectValues, [])\n .option(\"--field-mapping-file <path>\", \"path to field mapping JSON\", collectValues, [])\n .option(\"--raw <json>\", \"raw webhook JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw webhook JSON payload\")\n .action(async function action(\n this: Command,\n automation: NormalizedUuidOrSlug,\n commandOptions: WebhookSetCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations webhook set\", readOnly, \"write\");\n const data = await api.setWebhook(automation, buildWebhookInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations webhook set\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated webhook for automation \"${automation.value}\".`);\n });\n\n webhook\n .command(\"delete\")\n .description(\"Delete webhook configuration for an automation\")\n .argument(\"<automation>\", \"automation UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, automation: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations webhook delete\", readOnly, \"destructive\");\n const data = await api.deleteWebhook(automation);\n\n if (json) {\n emitJson(stdout, \"automations webhook delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted webhook for automation \"${automation.value}\".`);\n });\n\n const plugins = automations.command(\"plugins\").description(\"Inspect automation plugins\");\n\n plugins\n .command(\"list\")\n .description(\"List automation plugins\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listPlugins();\n\n if (json) {\n emitJson(stdout, \"automations plugins list\", data, filePath);\n return;\n }\n\n printTable(pluginRows(data), [\"id\", \"name\", \"version\"], stdout);\n });\n\n plugins\n .command(\"get\")\n .description(\"Get an automation plugin\")\n .argument(\"<plugin>\", \"plugin id\")\n .action(async function action(this: Command, pluginId: string) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getPlugin(pluginId);\n\n if (json) {\n emitJson(stdout, \"automations plugins get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n const connections = automations\n .command(\"connections\")\n .description(\"Manage automation connections\");\n\n connections\n .command(\"list\")\n .description(\"List automation connections\")\n .action(async function action(this: Command) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.listConnections();\n\n if (json) {\n emitJson(stdout, \"automations connections list\", data, filePath);\n return;\n }\n\n printTable(connectionRows(data), [\"id\", \"name\", \"type\", \"scope\", \"active\"], stdout);\n });\n\n connections\n .command(\"get\")\n .description(\"Get an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, connection: NormalizedUuidOrSlug) {\n const { api, json } = createAutomationsApi(this, filePath);\n const data = await api.getConnection(connection);\n\n if (json) {\n emitJson(stdout, \"automations connections get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n connections\n .command(\"create\")\n .description(\"Create an automation connection\")\n .requiredOption(\"--name <name>\", \"connection name\")\n .requiredOption(\"--type <type>\", \"connection type\")\n .requiredOption(\"--scope <scope>\", \"connection scope\")\n .option(\"--owner-member <uuid>\", \"owner member id\")\n .option(\"--config <json>\", \"connection config JSON object\")\n .option(\"--config-file <path>\", \"path to connection config JSON object\")\n .option(\"--secret <key=value>\", \"connection secret\", collectValues, [])\n .option(\"--active\", \"activate connection\")\n .option(\"--raw <json>\", \"raw connection JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw connection JSON payload\")\n .action(async function action(this: Command, commandOptions: ConnectionCreateCommandOptions) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections create\", readOnly, \"write\");\n const data = await api.createConnection(buildConnectionCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations connections create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created connection \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n connections\n .command(\"update\")\n .description(\"Update an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .option(\"--set <path=value>\", \"set a path to a string value\", collectValues, [])\n .option(\"--unset <path>\", \"unset a path\", collectValues, [])\n .option(\"--raw <json>\", \"raw connection patch JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw connection patch JSON payload\")\n .action(async function action(\n this: Command,\n connection: NormalizedUuidOrSlug,\n commandOptions: ConnectionUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections update\", readOnly, \"write\");\n const data = await api.updateConnection(connection, buildConnectionUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"automations connections update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated connection \"${connection.value}\".`);\n });\n\n connections\n .command(\"delete\")\n .description(\"Delete an automation connection\")\n .argument(\"<connection>\", \"connection UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, connection: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createAutomationsApi(this, filePath);\n ensureWritable(\"automations connections delete\", readOnly, \"destructive\");\n const data = await api.deleteConnection(connection);\n\n if (json) {\n emitJson(stdout, \"automations connections delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted connection \"${connection.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiComment {\n [key: string]: unknown;\n id?: string;\n text?: string;\n}\n\nexport interface CreateCommentInput {\n [key: string]: unknown;\n text?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class CommentsApi {\n constructor(private readonly client: ApiClient) {}\n\n listComments(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n ): Promise<ApiComment[]> {\n return this.client.getJson<ApiComment[]>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/comments`,\n );\n }\n\n createComment(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n input: CreateCommentInput,\n ): Promise<ApiComment> {\n return this.client.requestJson<ApiComment>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/comments`,\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n CommentsApi,\n type CreateCommentInput,\n} from \"../api/comments.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterCommentsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface CommentCreateCommandOptions {\n text?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction createCommentsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new CommentsApi(client),\n ...runtime,\n };\n}\n\nfunction buildCommentCreateInput(options: CommentCreateCommandOptions): CreateCommentInput {\n const input: CreateCommentInput = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.text !== undefined) {\n input.content = [\n {\n type: \"TEXT\",\n value: options.text,\n },\n ];\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide comment content via \"--text\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input;\n}\n\nexport function registerCommentsCommands(\n program: Command,\n options: RegisterCommentsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const comments = program.command(\"comments\").description(\"Manage record comments\");\n\n comments\n .command(\"list\")\n .description(\"List comments for a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createCommentsApi(this, filePath);\n const data = await api.listComments(schema, record.value);\n\n if (json) {\n emitJson(stdout, \"comments list\", data);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n comments\n .command(\"create\")\n .description(\"Create a comment on a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--text <text>\", \"comment text\")\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n commandOptions: CommentCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createCommentsApi(this, filePath);\n ensureWritable(\"comments create\", readOnly, \"write\");\n\n const data = await api.createComment(\n schema,\n record.value,\n buildCommentCreateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"comments create\", data);\n return;\n }\n\n writeLine(stdout, `Created comment \"${String(data.id ?? \"unknown\")}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DisplaysApi,\n type ApiDisplayFolder,\n type DisplaySummary,\n} from \"../api/displays.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport {\n parseExpression,\n type ExpressionComparator,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport { type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isEmptyObject,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nconst DATE_DYNAMIC_OPTIONS =\n \"today, thisWeek, thisMonth, thisQuarter, thisSemester, thisYear, next7Days, next30Days, next6Months, next12Months, last12Months\";\n\nexport interface RegisterDisplaysCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface DisplayCreateOptions {\n name: string;\n description?: string;\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface DisplayUpdateOptions {\n name?: string;\n description?: string;\n}\n\ninterface LayoutUpdateOptions {\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface TabMutationOptions {\n name?: string;\n orientation?: string;\n}\n\ninterface VariableMutationOptions {\n type?: string;\n name?: string;\n allowMultiple?: boolean;\n static?: boolean;\n default?: string;\n defaultValue?: string[];\n sourceSchema?: string;\n sourceField?: string;\n filter?: ParsedExpression[];\n dateMode?: string;\n dateDynamicOption?: string;\n dateSpecific?: string;\n dateRangeStart?: string;\n dateRangeEnd?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface WidgetMutationOptions {\n type?: string;\n name?: string;\n description?: string;\n icon?: string;\n color?: string;\n originResource?: string;\n originSubschema?: boolean;\n tab?: string;\n slot?: string;\n layout?: string;\n layoutFile?: string;\n field?: string[];\n sort?: string[];\n filter?: ParsedExpression[];\n widgetReadOnly?: boolean;\n hideAddButton?: boolean;\n hideDeleteButton?: boolean;\n hideSortButton?: boolean;\n hideFilterButton?: boolean;\n hideSeeButton?: boolean;\n lockField?: string[];\n lockCondition?: LockConditionOption[];\n lockMessageBefore?: LockMessageOption[];\n lockMessageAfter?: LockMessageOption[];\n clearLockedFields?: boolean;\n calc?: string;\n calcField?: string;\n kpiConfig?: string;\n chartType?: string;\n xAxisField?: string;\n xAxisDateFormat?: string;\n xAxisTimeSeries?: boolean;\n yAxisSerie?: string[];\n legend?: string;\n // KANBAN / TIMELINE viewState.fieldMapping (UUIDs only; slugs are not resolved here)\n columnField?: string;\n swimlaneField?: string;\n startDateField?: string;\n endDateField?: string;\n labelField?: string;\n groupField?: string;\n subgroupField?: string;\n progressField?: string;\n cardTitleField?: string;\n cardCategory1Field?: string;\n cardCategory2Field?: string;\n cardCategory3Field?: string;\n cardCategory4Field?: string;\n cardDescriptionField?: string;\n aggregationMethod?: string;\n aggregationField?: string;\n viewState?: string;\n viewStateFile?: string;\n // HIERARCHY view.hierarchyConfig (UUIDs only; slugs are not resolved here)\n hierarchyLabel?: string;\n hierarchyInfo?: string[];\n hierarchyNumber?: string[];\n hierarchyRootName?: string;\n hierarchyRootLabelField?: string;\n hierarchyRootInfo?: string[];\n hierarchyRootNumber?: string[];\n hierarchyChild?: string[];\n hierarchyConfig?: string;\n hierarchyConfigFile?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface LockConditionOption {\n lockedField: string;\n expression: ParsedExpression;\n}\n\ninterface LockMessageOption {\n lockedField: string;\n message: string;\n}\n\ninterface NavigationTargetMutationOptions {\n sourceWidget?: string;\n targetDisplay?: string;\n targetVariable?: string;\n label?: string;\n}\n\ninterface CrossWidgetFilterSetOptions {\n sourceWidget?: string;\n sourceField?: string;\n sourceSchema?: string;\n target?: string[];\n raw?: string;\n rawFile?: string;\n}\n\nfunction createDisplaysApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new DisplaysApi(client),\n ...runtime,\n };\n}\n\nconst COMPARATOR_TO_DISPLAY_OPERATOR: Record<ExpressionComparator, string> = {\n eq: \"EQUAL\",\n neq: \"NOT_EQUAL\",\n gt: \"GREATER\",\n gte: \"GREATER_OR_EQUAL\",\n lt: \"LESS\",\n lte: \"LESS_OR_EQUAL\",\n contains: \"CONTAINS\",\n in: \"ANY_OF\",\n is_empty: \"IS_EMPTY\",\n is_not_empty: \"IS_NOT_EMPTY\",\n};\n\nfunction toDisplayFilter(parsed: ParsedExpression): Record<string, unknown> {\n const values =\n parsed.value === null\n ? []\n : Array.isArray(parsed.value)\n ? [...parsed.value]\n : [parsed.value];\n return {\n origin: { fieldId: parsed.field },\n comparisonOperator: COMPARATOR_TO_DISPLAY_OPERATOR[parsed.comparator],\n values,\n };\n}\n\nfunction parseFilterExpression(input: string): ParsedExpression {\n try {\n return parseExpression(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid filter expression.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction collectFilters(value: string, previous: ParsedExpression[] = []): ParsedExpression[] {\n return [...previous, parseFilterExpression(value)];\n}\n\nfunction parseLockConditionOption(input: string): LockConditionOption {\n const trimmed = input.trim();\n let lockedField: string;\n let expressionText: string;\n\n if (trimmed.includes(\":\") && !trimmed.includes(\" \")) {\n const separatorIndex = trimmed.indexOf(\":\");\n lockedField = trimmed.slice(0, separatorIndex).trim();\n expressionText = trimmed.slice(separatorIndex + 1).trim();\n } else {\n const parts = trimmed.split(/\\s+/);\n lockedField = parts[0]?.trim() ?? \"\";\n expressionText = parts.slice(1).join(\" \").trim();\n }\n\n if (!lockedField || !expressionText) {\n throw new InvalidArgumentError(\n 'Expected \"<lockedField>:<field>:<comparator>[:<value>]\" (or space-separated), e.g. \"status:invoice-number:is_empty\".',\n );\n }\n\n return { lockedField, expression: parseFilterExpression(expressionText) };\n}\n\nfunction collectLockConditions(value: string, previous: LockConditionOption[] = []): LockConditionOption[] {\n return [...previous, parseLockConditionOption(value)];\n}\n\nfunction parseLockMessageOption(input: string): LockMessageOption {\n const separatorIndex = input.indexOf(\":\");\n const lockedField = separatorIndex > 0 ? input.slice(0, separatorIndex).trim() : \"\";\n const message = separatorIndex > 0 ? input.slice(separatorIndex + 1).trim() : \"\";\n\n if (!lockedField || !message) {\n throw new InvalidArgumentError('Expected \"<lockedField>:<message>\", e.g. \"status:Locked once approved.\".');\n }\n\n return { lockedField, message };\n}\n\nfunction collectLockMessages(value: string, previous: LockMessageOption[] = []): LockMessageOption[] {\n return [...previous, parseLockMessageOption(value)];\n}\n\n/**\n * Builds behavior.lockedFields from the --lock-* flags. Every flag names its\n * locked field explicitly, so ordering between flags never matters. A field\n * with no conditions is locked permanently; with conditions it locks when all\n * of them match (AND). Returns [] for --clear-locked-fields and undefined when\n * no lock flag was used.\n */\nfunction buildLockedFields(options: WidgetMutationOptions): Array<Record<string, unknown>> | undefined {\n const hasLockFlags =\n (options.lockField?.length ?? 0) > 0 ||\n (options.lockCondition?.length ?? 0) > 0 ||\n (options.lockMessageBefore?.length ?? 0) > 0 ||\n (options.lockMessageAfter?.length ?? 0) > 0;\n\n if (options.clearLockedFields) {\n if (hasLockFlags) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Use either \"--clear-locked-fields\" or the \"--lock-*\" flags, not both.',\n );\n }\n return [];\n }\n\n if (!hasLockFlags) {\n return undefined;\n }\n\n interface LockRule {\n conditions: Array<Record<string, unknown>>;\n messageBeforeLock?: string;\n messageAfterLock?: string;\n }\n\n const rules = new Map<string, LockRule>();\n const ensureRule = (lockedField: string): LockRule => {\n let rule = rules.get(lockedField);\n if (!rule) {\n rule = { conditions: [] };\n rules.set(lockedField, rule);\n }\n return rule;\n };\n\n for (const lockedField of options.lockField ?? []) {\n ensureRule(lockedField);\n }\n for (const { lockedField, expression } of options.lockCondition ?? []) {\n ensureRule(lockedField).conditions.push(toDisplayFilter(expression));\n }\n for (const { lockedField, message } of options.lockMessageBefore ?? []) {\n ensureRule(lockedField).messageBeforeLock = message;\n }\n for (const { lockedField, message } of options.lockMessageAfter ?? []) {\n ensureRule(lockedField).messageAfterLock = message;\n }\n\n return [...rules.entries()].map(([lockedField, rule]) => ({\n field: { fieldId: lockedField },\n conditions: rule.conditions,\n ...(rule.messageBeforeLock !== undefined ? { messageBeforeLock: rule.messageBeforeLock } : {}),\n ...(rule.messageAfterLock !== undefined ? { messageAfterLock: rule.messageAfterLock } : {}),\n }));\n}\n\nfunction parseBooleanFlag(input: string): boolean {\n const normalized = input.trim().toLowerCase();\n if ([\"true\", \"1\", \"yes\", \"y\", \"on\"].includes(normalized)) return true;\n if ([\"false\", \"0\", \"no\", \"n\", \"off\"].includes(normalized)) return false;\n throw new InvalidArgumentError(`Expected a boolean value, received \"${input}\".`);\n}\n\nfunction readRawObject(raw?: string, rawFile?: string): Record<string, unknown> {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--raw\" or \"--raw-file\", not both.');\n }\n\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return {};\n }\n\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n } catch (error) {\n if (error instanceof CliError) throw error;\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload is invalid.\");\n }\n}\n\nfunction readNamedJsonOption(raw?: string, rawFile?: string, inlineFlag = \"--option\", fileFlag = \"--option-file\"): unknown {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", `Use either \"${inlineFlag}\" or \"${fileFlag}\", not both.`);\n }\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) return undefined;\n try {\n return JSON.parse(source) as unknown;\n } catch {\n throw new CliError(\"invalid_cli_usage\", `${inlineFlag} payload is invalid JSON.`);\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...target };\n for (const [key, value] of Object.entries(source)) {\n const existing = out[key];\n out[key] = isPlainObject(existing) && isPlainObject(value) ? deepMerge(existing, value) : value;\n }\n return out;\n}\n\nfunction assignDefined(target: Record<string, unknown>, key: string, value: unknown): void {\n if (value !== undefined) target[key] = value;\n}\n\nfunction readNamedJsonObject(\n raw: string | undefined,\n rawFile: string | undefined,\n inlineFlag: string,\n fileFlag: string,\n): Record<string, unknown> | undefined {\n const parsed = readNamedJsonOption(raw, rawFile, inlineFlag, fileFlag);\n if (parsed === undefined) return undefined;\n if (!isPlainObject(parsed)) {\n throw new CliError(\"invalid_cli_usage\", `${inlineFlag} payload must be a JSON object.`);\n }\n return parsed;\n}\n\nconst HIERARCHY_AGGREGATIONS = new Set([\n \"SUM\",\n \"AVERAGE\",\n \"MINIMUM\",\n \"MAXIMUM\",\n \"COUNT\",\n \"COUNT_DISTINCT\",\n]);\n\nfunction parseHierarchyInfo(value: string): Record<string, unknown> {\n const idx = value.indexOf(\":\");\n if (idx <= 0 || idx === value.length - 1) {\n throw new CliError(\"invalid_cli_usage\", `--hierarchy-info \"${value}\" must use the format <id:name>.`);\n }\n return { id: value.slice(0, idx).trim(), name: value.slice(idx + 1).trim() };\n}\n\nfunction parseHierarchyNumber(value: string): Record<string, unknown> {\n const parts = value.split(\":\");\n if (parts.length < 3) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number \"${value}\" must use the format <id:name:aggregation>.`,\n );\n }\n const id = parts[0]?.trim() ?? \"\";\n const aggregation = (parts[parts.length - 1]?.trim() ?? \"\").toUpperCase();\n const name = parts.slice(1, -1).join(\":\").trim();\n if (!id || !name) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number \"${value}\" must use the format <id:name:aggregation>.`,\n );\n }\n if (!HIERARCHY_AGGREGATIONS.has(aggregation)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-number aggregation \"${aggregation}\" must be one of SUM, AVERAGE, MINIMUM, MAXIMUM, COUNT, COUNT_DISTINCT.`,\n );\n }\n return { id, name, aggregation };\n}\n\nfunction parseHierarchyMapping(value: string, flag: string): Record<string, unknown> {\n const idx = value.indexOf(\":\");\n if (idx <= 0 || idx === value.length - 1) {\n throw new CliError(\"invalid_cli_usage\", `${flag} \"${value}\" must use the format <columnId:fieldId>.`);\n }\n return { columnId: value.slice(0, idx).trim(), fieldId: value.slice(idx + 1).trim() };\n}\n\nfunction buildWidgetFieldMapping(options: WidgetMutationOptions): Record<string, unknown> | undefined {\n const mapping: Record<string, unknown> = {};\n assignDefined(mapping, \"columnField\", options.columnField);\n assignDefined(mapping, \"swimlaneField\", options.swimlaneField);\n assignDefined(mapping, \"startDateField\", options.startDateField);\n assignDefined(mapping, \"endDateField\", options.endDateField);\n assignDefined(mapping, \"labelField\", options.labelField);\n assignDefined(mapping, \"groupField\", options.groupField);\n assignDefined(mapping, \"subgroupField\", options.subgroupField);\n assignDefined(mapping, \"progressField\", options.progressField);\n\n const cardConfig: Record<string, unknown> = {};\n assignDefined(cardConfig, \"titleField\", options.cardTitleField);\n assignDefined(cardConfig, \"category1Field\", options.cardCategory1Field);\n assignDefined(cardConfig, \"category2Field\", options.cardCategory2Field);\n assignDefined(cardConfig, \"category3Field\", options.cardCategory3Field);\n assignDefined(cardConfig, \"category4Field\", options.cardCategory4Field);\n assignDefined(cardConfig, \"descriptionField\", options.cardDescriptionField);\n if (Object.keys(cardConfig).length > 0) mapping.cardConfig = cardConfig;\n\n const aggregationConfig: Record<string, unknown> = {};\n assignDefined(aggregationConfig, \"method\", options.aggregationMethod);\n assignDefined(aggregationConfig, \"fieldId\", options.aggregationField);\n if (Object.keys(aggregationConfig).length > 0) mapping.aggregationConfig = aggregationConfig;\n\n return Object.keys(mapping).length > 0 ? mapping : undefined;\n}\n\nfunction buildHierarchyConfig(options: WidgetMutationOptions): Record<string, unknown> | undefined {\n const base = readNamedJsonObject(\n options.hierarchyConfig,\n options.hierarchyConfigFile,\n \"--hierarchy-config\",\n \"--hierarchy-config-file\",\n );\n const patch: Record<string, unknown> = {};\n\n const columns: Record<string, unknown> = {};\n assignDefined(columns, \"label\", options.hierarchyLabel);\n if (options.hierarchyInfo && options.hierarchyInfo.length > 0) {\n columns.infos = options.hierarchyInfo.map(parseHierarchyInfo);\n }\n if (options.hierarchyNumber && options.hierarchyNumber.length > 0) {\n columns.numbers = options.hierarchyNumber.map(parseHierarchyNumber);\n }\n if (Object.keys(columns).length > 0) patch.columns = columns;\n\n const rootLevel: Record<string, unknown> = {};\n assignDefined(rootLevel, \"name\", options.hierarchyRootName);\n assignDefined(rootLevel, \"labelFieldId\", options.hierarchyRootLabelField);\n if (options.hierarchyRootInfo && options.hierarchyRootInfo.length > 0) {\n rootLevel.infoMappings = options.hierarchyRootInfo.map((entry) =>\n parseHierarchyMapping(entry, \"--hierarchy-root-info\"),\n );\n }\n if (options.hierarchyRootNumber && options.hierarchyRootNumber.length > 0) {\n rootLevel.numberMappings = options.hierarchyRootNumber.map((entry) =>\n parseHierarchyMapping(entry, \"--hierarchy-root-number\"),\n );\n }\n if (Object.keys(rootLevel).length > 0) patch.rootLevel = rootLevel;\n\n if (options.hierarchyChild && options.hierarchyChild.length > 0) {\n patch.childLevels = options.hierarchyChild.map((entry, index) => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(entry);\n } catch {\n throw new CliError(\"invalid_cli_usage\", `--hierarchy-child payload #${index + 1} is invalid JSON.`);\n }\n if (!isPlainObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--hierarchy-child payload #${index + 1} must be a JSON object.`,\n );\n }\n return parsed;\n });\n }\n\n if (base === undefined && Object.keys(patch).length === 0) return undefined;\n return deepMerge(base ?? {}, patch);\n}\n\nfunction displayRows(displays: readonly DisplaySummary[]): Record<string, unknown>[] {\n return displays.map((display) => ({\n id: display.id,\n name: display.name ?? \"\",\n layoutTemplate: display.layoutTemplate ?? \"\",\n variableCount: display.variableCount ?? \"\",\n widgetCount: display.widgetCount ?? \"\",\n ...folderColumns(display.folder),\n }));\n}\n\nfunction getDisplaySubresource(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter((entry): entry is Record<string, unknown> => Boolean(entry) && typeof entry === \"object\");\n}\n\nfunction displayFolderRows(folders: readonly ApiDisplayFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id ?? \"\",\n name: folder.name ?? \"\",\n isRoot: folder.isRoot ?? \"\",\n displayCount: folder.displayCount ?? \"\",\n }));\n}\n\nasync function resolveDisplayFolderId(\n api: DisplaysApi,\n selector: NormalizedUuidOrSlug,\n): Promise<string> {\n if (selector.kind === \"uuid\") {\n return selector.value;\n }\n\n const folders = await api.listFolders();\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1 && typeof matches[0]?.id === \"string\" && matches[0].id.length > 0) {\n return matches[0].id;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction buildVariableBody(options: VariableMutationOptions): Record<string, unknown> {\n const body = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.type !== undefined) body.type = options.type;\n if (options.name !== undefined) body.name = options.name;\n if (options.allowMultiple !== undefined) body.allowMultiple = options.allowMultiple;\n if (options.static !== undefined) body.staticVariable = options.static;\n if (options.default !== undefined) body.defaultValue = options.default;\n if (options.defaultValue && options.defaultValue.length > 0) body.defaultValues = options.defaultValue;\n if (options.sourceSchema || options.sourceField) {\n body.source = {\n schemaId: options.sourceSchema,\n fieldId: options.sourceField,\n };\n }\n if (options.filter && options.filter.length > 0) {\n body.filters = options.filter.map(toDisplayFilter);\n }\n if (\n options.dateMode ||\n options.dateDynamicOption ||\n options.dateSpecific ||\n options.dateRangeStart ||\n options.dateRangeEnd\n ) {\n body.date = {\n mode: options.dateMode,\n dynamicOption: options.dateDynamicOption,\n specificDate: options.dateSpecific,\n rangeStart: options.dateRangeStart,\n rangeEnd: options.dateRangeEnd,\n };\n }\n\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for variable mutation.\");\n }\n\n return body;\n}\n\nfunction buildWidgetBody(options: WidgetMutationOptions): Record<string, unknown> {\n const body = {\n ...readRawObject(options.raw, options.rawFile),\n };\n\n if (options.type !== undefined) {\n const normalizedType = options.type.toLowerCase() === \"table\"\n ? \"TABLE_OR_SUBTABLE\"\n : options.type.toUpperCase();\n body.type = normalizedType;\n }\n\n if (\n options.name !== undefined ||\n options.description !== undefined ||\n options.icon !== undefined ||\n options.color !== undefined\n ) {\n body.presentation = {\n ...(typeof body.presentation === \"object\" && body.presentation ? body.presentation as Record<string, unknown> : {}),\n name: options.name,\n description: options.description,\n icon: options.icon,\n color: options.color,\n };\n }\n\n if (options.originResource !== undefined || options.originSubschema !== undefined) {\n body.source = {\n ...(typeof body.source === \"object\" && body.source ? body.source as Record<string, unknown> : {}),\n originResourceId: options.originResource,\n isOriginSubSchema: options.originSubschema,\n };\n }\n\n const layout = readNamedJsonOption(options.layout, options.layoutFile, \"--layout\", \"--layout-file\");\n if (options.tab || options.slot || layout !== undefined) {\n body.placement = {\n ...(typeof body.placement === \"object\" && body.placement ? body.placement as Record<string, unknown> : {}),\n tabId: options.tab,\n slotId: options.slot,\n layout,\n };\n }\n\n const viewPatch: Record<string, unknown> = {};\n if (options.field && options.field.length > 0) {\n viewPatch.fields = options.field;\n }\n\n const fieldMapping = buildWidgetFieldMapping(options);\n const viewStateBase = readNamedJsonObject(\n options.viewState,\n options.viewStateFile,\n \"--view-state\",\n \"--view-state-file\",\n );\n let viewState: Record<string, unknown> | undefined = viewStateBase ? { ...viewStateBase } : undefined;\n if (fieldMapping) {\n viewState = deepMerge(viewState ?? {}, { fieldMapping });\n }\n if (viewState !== undefined) {\n viewPatch.viewAdditionalProperties = { viewState };\n }\n\n const hierarchyConfig = buildHierarchyConfig(options);\n if (hierarchyConfig !== undefined) {\n viewPatch.hierarchyConfig = hierarchyConfig;\n }\n\n if (Object.keys(viewPatch).length > 0) {\n const existingView =\n typeof body.view === \"object\" && body.view ? (body.view as Record<string, unknown>) : {};\n body.view = deepMerge(existingView, viewPatch);\n }\n\n const queryMerge: Record<string, unknown> = {};\n if (options.sort && options.sort.length > 0) queryMerge.sorts = options.sort;\n if (options.filter && options.filter.length > 0) queryMerge.filters = options.filter.map(toDisplayFilter);\n if (Object.keys(queryMerge).length > 0) {\n body.query = {\n ...(typeof body.query === \"object\" && body.query ? body.query as Record<string, unknown> : {}),\n ...queryMerge,\n };\n }\n\n if (\n options.widgetReadOnly !== undefined ||\n options.hideAddButton !== undefined ||\n options.hideDeleteButton !== undefined ||\n options.hideSortButton !== undefined ||\n options.hideFilterButton !== undefined ||\n options.hideSeeButton !== undefined\n ) {\n body.behavior = {\n ...(typeof body.behavior === \"object\" && body.behavior ? body.behavior as Record<string, unknown> : {}),\n readOnly: options.widgetReadOnly,\n hideAddButton: options.hideAddButton,\n hideDeleteButton: options.hideDeleteButton,\n hideSortButton: options.hideSortButton,\n hideFilterButton: options.hideFilterButton,\n hideSeeButton: options.hideSeeButton,\n };\n }\n\n const lockedFields = buildLockedFields(options);\n if (lockedFields !== undefined) {\n body.behavior = {\n ...(typeof body.behavior === \"object\" && body.behavior ? body.behavior as Record<string, unknown> : {}),\n lockedFields,\n };\n }\n\n if (options.calc || options.calcField || options.kpiConfig) {\n body.kpi = {\n ...(typeof body.kpi === \"object\" && body.kpi ? body.kpi as Record<string, unknown> : {}),\n typeCalc: options.calc,\n fieldCalc: options.calcField,\n config: readNamedJsonOption(options.kpiConfig, undefined, \"--kpi-config\"),\n };\n }\n\n const hasChartFlags =\n options.chartType !== undefined ||\n options.xAxisField !== undefined ||\n options.xAxisDateFormat !== undefined ||\n options.xAxisTimeSeries !== undefined ||\n (options.yAxisSerie?.length ?? 0) > 0 ||\n options.legend !== undefined;\n if (hasChartFlags) {\n const legend = readNamedJsonOption(options.legend, undefined, \"--legend\");\n body.chart = {\n ...(typeof body.chart === \"object\" && body.chart ? body.chart as Record<string, unknown> : {}),\n ...(options.chartType !== undefined ? { chartType: options.chartType } : {}),\n ...(options.xAxisField !== undefined ? { xAxisFieldId: options.xAxisField } : {}),\n ...(options.xAxisDateFormat !== undefined ? { xAxisDateFormat: options.xAxisDateFormat } : {}),\n ...(options.xAxisTimeSeries !== undefined ? { xAxisAsTimeSerie: options.xAxisTimeSeries } : {}),\n ...(options.yAxisSerie && options.yAxisSerie.length > 0\n ? { yAxisSeries: options.yAxisSerie.map((entry) => JSON.parse(entry)) }\n : {}),\n ...(legend !== undefined ? { legend } : {}),\n };\n }\n\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for widget mutation.\");\n }\n\n return body;\n}\n\nfunction buildNavigationTargetBody(options: NavigationTargetMutationOptions): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n if (options.sourceWidget !== undefined) body.sourceWidgetId = options.sourceWidget;\n if (options.targetDisplay !== undefined) body.targetDisplayId = options.targetDisplay;\n if (options.targetVariable !== undefined) body.targetVariableId = options.targetVariable;\n if (options.label !== undefined) body.label = options.label;\n if (isEmptyObject(body)) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to send for navigation target mutation.\");\n }\n return body;\n}\n\nfunction readRawArray(raw?: string, rawFile?: string): unknown[] {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--raw\" or \"--raw-file\", not both.');\n }\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return [];\n }\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Raw cross widget filter payload must be a JSON array of configurations.\");\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) throw error;\n throw new CliError(\"invalid_cli_usage\", \"Raw JSON payload is invalid.\");\n }\n}\n\n// The endpoint replaces the whole array of configurations. With flags a single configuration is\n// built and wrapped in an array; use --raw/--raw-file to send several configurations at once.\nfunction buildCrossWidgetFilterBody(options: CrossWidgetFilterSetOptions): unknown[] {\n if (options.raw !== undefined || options.rawFile !== undefined) {\n return readRawArray(options.raw, options.rawFile);\n }\n\n if (!options.sourceWidget || !options.sourceField) {\n throw new CliError(\n \"invalid_cli_usage\",\n \"Provide --source-widget and --source-field, or --raw/--raw-file with the full configuration array.\",\n );\n }\n\n const source: Record<string, unknown> = {\n widgetId: options.sourceWidget,\n fieldId: options.sourceField,\n };\n if (options.sourceSchema) {\n source.schemaId = options.sourceSchema;\n }\n\n return [\n {\n source,\n targets: (options.target ?? []).map((entry) => {\n const [widgetId, fieldId] = entry.split(\":\");\n if (!widgetId || !fieldId) {\n throw new CliError(\"invalid_cli_usage\", `Invalid --target entry \"${entry}\". Use <widgetId:fieldId>.`);\n }\n return { widgetId, fieldId };\n }),\n },\n ];\n}\n\nexport function registerDisplaysCommands(\n program: Command,\n options: RegisterDisplaysCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const displays = program.command(\"displays\").description(\"Manage displays\");\n\n displays\n .command(\"list\")\n .description(\"List displays\")\n .action(async function action(this: Command) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.listDisplays();\n if (json) {\n emitJson(stdout, \"displays list\", data);\n return;\n }\n printTable(\n displayRows(data),\n [\"id\", \"name\", \"layoutTemplate\", \"variableCount\", \"widgetCount\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n });\n\n displays\n .command(\"get\")\n .description(\"Get a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n if (json) {\n emitJson(stdout, \"displays get\", data);\n return;\n }\n printTable([{ id: data.id, name: data.name ?? \"\", layoutTemplate: data.layout?.template ?? \"\" }], [\"id\", \"name\", \"layoutTemplate\"], stdout);\n });\n\n displays\n .command(\"create\")\n .description(\"Create a display\")\n .requiredOption(\"--name <name>\", \"display name\")\n .option(\"--description <text>\", \"display description\")\n .requiredOption(\"--template <template>\", \"layout template\")\n .option(\"--freeform-layouts <json>\", \"freeform layouts JSON\")\n .option(\"--freeform-layouts-file <path>\", \"freeform layouts JSON file\")\n .action(async function action(this: Command, commandOptions: DisplayCreateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays create\", readOnly, \"write\");\n const layout: Record<string, unknown> = { template: commandOptions.template };\n const freeformLayouts = readNamedJsonOption(\n commandOptions.freeformLayouts,\n commandOptions.freeformLayoutsFile,\n \"--freeform-layouts\",\n \"--freeform-layouts-file\",\n );\n if (freeformLayouts !== undefined) layout.freeformLayouts = freeformLayouts;\n const data = await api.createDisplay({\n name: commandOptions.name,\n description: commandOptions.description,\n layout,\n });\n if (json) {\n emitJson(stdout, \"displays create\", data);\n return;\n }\n writeLine(stdout, `Created display \"${commandOptions.name}\".`);\n });\n\n displays\n .command(\"update\")\n .description(\"Update a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"display name\")\n .option(\"--description <text>\", 'display description (use \"\" to clear)')\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: DisplayUpdateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays update\", readOnly, \"write\");\n if (commandOptions.name === undefined && commandOptions.description === undefined) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n }\n if (commandOptions.name !== undefined && commandOptions.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", \"Display name cannot be empty.\");\n }\n const data = await api.updateDisplay(display, {\n name: commandOptions.name,\n description: commandOptions.description,\n });\n if (json) {\n emitJson(stdout, \"displays update\", data);\n return;\n }\n writeLine(stdout, `Updated display \"${display.value}\".`);\n });\n\n displays\n .command(\"delete\")\n .description(\"Delete a display\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays delete\", readOnly, \"destructive\");\n const data = await api.deleteDisplay(display);\n if (json) {\n emitJson(stdout, \"displays delete\", data);\n return;\n }\n writeLine(stdout, `Deleted display \"${display.value}\".`);\n });\n\n const folders = displays\n .command(\"folders\")\n .description(\"Manage display folders (flat: a folder only has a name, no order or properties)\");\n\n folders\n .command(\"list\")\n .description(\"List display folders (non-root folders plus the root bucket, whose name is null)\")\n .action(async function action(this: Command) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.listFolders();\n if (json) {\n emitJson(stdout, \"displays folders list\", data);\n return;\n }\n printTable(displayFolderRows(data), [\"id\", \"name\", \"isRoot\", \"displayCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a display folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(this: Command, commandOptions: { name?: string }) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders create\", readOnly, \"write\");\n if (commandOptions.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n const data = await api.createFolder({ name: commandOptions.name });\n if (json) {\n emitJson(stdout, \"displays folders create\", data);\n return;\n }\n writeLine(stdout, `Created display folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Rename a display folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .requiredOption(\"--name <name>\", \"folder name\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: { name?: string },\n ) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders update\", readOnly, \"write\");\n if (commandOptions.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n const folderId = await resolveDisplayFolderId(api, folder);\n const data = await api.updateFolder({ kind: \"uuid\", value: folderId }, { name: commandOptions.name });\n if (json) {\n emitJson(stdout, \"displays folders update\", data);\n return;\n }\n writeLine(stdout, `Updated display folder \"${String(data.name ?? folder.value)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a display folder (its displays move back to the root folder)\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders delete\", readOnly, \"destructive\");\n const folderId = await resolveDisplayFolderId(api, folder);\n const data = await api.deleteFolder({ kind: \"uuid\", value: folderId });\n if (json) {\n emitJson(stdout, \"displays folders delete\", data);\n return;\n }\n writeLine(stdout, `Deleted display folder \"${folder.value}\".`);\n });\n\n folders\n .command(\"move\")\n .description(\"Move a display into a folder\")\n .argument(\"<display>\", \"display UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (use the root folder to move it out of any folder)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n display: NormalizedUuidOrSlug,\n commandOptions: { to?: NormalizedUuidOrSlug },\n ) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays folders move\", readOnly, \"write\");\n if (!commandOptions.to) {\n throw new CliError(\"invalid_cli_usage\", 'Provide target folder via \"--to\".');\n }\n const targetFolderId = await resolveDisplayFolderId(api, commandOptions.to);\n const data = await api.moveDisplay({ displayId: display.value, targetFolderId });\n if (json) {\n emitJson(stdout, \"displays folders move\", data);\n return;\n }\n writeLine(stdout, `Moved display \"${display.value}\" to folder \"${targetFolderId}\".`);\n });\n\n const layout = displays.command(\"layout\").description(\"Manage display layout\");\n layout\n .command(\"get\")\n .description(\"Get display layout\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const layoutData = data.layout ?? null;\n if (json) {\n emitJson(stdout, \"displays layout get\", layoutData);\n return;\n }\n printTable(layoutData ? [{ template: layoutData.template ?? \"\", freeformLayouts: layoutData.freeformLayouts ?? \"\" }] : [], [\"template\", \"freeformLayouts\"], stdout);\n });\n layout\n .command(\"update\")\n .description(\"Update display layout\")\n .argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--template <template>\", \"layout template\")\n .option(\"--freeform-layouts <json>\", \"freeform layouts JSON\")\n .option(\"--freeform-layouts-file <path>\", \"freeform layouts JSON file\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: LayoutUpdateOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays layout update\", readOnly, \"write\");\n const body: Record<string, unknown> = { template: commandOptions.template };\n const freeformLayouts = readNamedJsonOption(commandOptions.freeformLayouts, commandOptions.freeformLayoutsFile, \"--freeform-layouts\", \"--freeform-layouts-file\");\n if (freeformLayouts !== undefined) body.freeformLayouts = freeformLayouts;\n const data = await api.patchLayout(display, body);\n if (json) {\n emitJson(stdout, \"displays layout update\", data);\n return;\n }\n writeLine(stdout, `Updated layout for display \"${display.value}\".`);\n });\n\n const tabs = displays.command(\"tabs\").description(\"Manage display tabs\");\n tabs.command(\"list\").description(\"List tabs\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const tabsData = getDisplaySubresource(data.layout?.tabs);\n if (json) { emitJson(stdout, \"displays tabs list\", tabsData); return; }\n printTable(tabsData, undefined, stdout);\n });\n tabs.command(\"create\").description(\"Create a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).option(\"--name <name>\").option(\"--orientation <orientation>\").action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: TabMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs create\", readOnly, \"write\");\n const data = await api.createTab(display, { name: commandOptions.name, orientation: commandOptions.orientation });\n if (json) { emitJson(stdout, \"displays tabs create\", data); return; }\n writeLine(stdout, `Created tab on display \"${display.value}\".`);\n });\n tabs.command(\"update\").description(\"Update a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<tab>\", \"tab id\").option(\"--name <name>\").option(\"--orientation <orientation>\").action(async function action(this: Command, display: NormalizedUuidOrSlug, tabId: string, commandOptions: TabMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs update\", readOnly, \"write\");\n const data = await api.updateTab(display, tabId, { name: commandOptions.name, orientation: commandOptions.orientation });\n if (json) { emitJson(stdout, \"displays tabs update\", data); return; }\n writeLine(stdout, `Updated tab \"${tabId}\".`);\n });\n tabs.command(\"delete\").description(\"Delete a tab\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<tab>\", \"tab id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, tabId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath);\n ensureWritable(\"displays tabs delete\", readOnly, \"destructive\");\n const data = await api.deleteTab(display, tabId);\n if (json) { emitJson(stdout, \"displays tabs delete\", data); return; }\n writeLine(stdout, `Deleted tab \"${tabId}\".`);\n });\n\n const variables = displays.command(\"variables\").description(\"Manage display variables\");\n variables.command(\"list\").description(\"List variables\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const items = getDisplaySubresource(data.variables);\n if (json) { emitJson(stdout, \"displays variables list\", items); return; }\n printTable(items, undefined, stdout);\n });\n variables.command(\"get\").description(\"Get variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string) {\n const { api, json } = createDisplaysApi(this, filePath);\n const data = await api.getDisplay(display);\n const items = getDisplaySubresource(data.variables);\n const match = items.find((item) => item && typeof item === \"object\" && \"id\" in item && String(item.id) === variableId);\n if (!match) throw new CliError(\"invalid_cli_usage\", `Variable \"${variableId}\" not found.`);\n if (json) { emitJson(stdout, \"displays variables get\", match); return; }\n printTable([match], undefined, stdout);\n });\n variables.command(\"create\").description(\"Create variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--allow-multiple\").option(\"--static\")\n .option(\"--default <value>\").option(\"--default-value <value>\", \"repeatable default value\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--source-schema <id>\").option(\"--source-field <id>\").option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--date-mode <mode>\").option(\"--date-dynamic-option <option>\", `dynamic date period (${DATE_DYNAMIC_OPTIONS})`).option(\"--date-specific <iso>\").option(\"--date-range-start <iso>\").option(\"--date-range-end <iso>\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: VariableMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables create\", readOnly, \"write\");\n const data = await api.createVariable(display, buildVariableBody(commandOptions));\n if (json) { emitJson(stdout, \"displays variables create\", data); return; }\n writeLine(stdout, `Created variable on display \"${display.value}\".`);\n });\n variables.command(\"update\").description(\"Update variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\")\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--allow-multiple\").option(\"--static\")\n .option(\"--default <value>\").option(\"--default-value <value>\", \"repeatable default value\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--source-schema <id>\").option(\"--source-field <id>\").option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--date-mode <mode>\").option(\"--date-dynamic-option <option>\", `dynamic date period (${DATE_DYNAMIC_OPTIONS})`).option(\"--date-specific <iso>\").option(\"--date-range-start <iso>\").option(\"--date-range-end <iso>\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string, commandOptions: VariableMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables update\", readOnly, \"write\");\n const data = await api.updateVariable(display, variableId, buildVariableBody(commandOptions));\n if (json) { emitJson(stdout, \"displays variables update\", data); return; }\n writeLine(stdout, `Updated variable \"${variableId}\".`);\n });\n variables.command(\"delete\").description(\"Delete variable\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<variable>\", \"variable id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, variableId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays variables delete\", readOnly, \"destructive\");\n const data = await api.deleteVariable(display, variableId);\n if (json) { emitJson(stdout, \"displays variables delete\", data); return; }\n writeLine(stdout, `Deleted variable \"${variableId}\".`);\n });\n\n const widgets = displays.command(\"widgets\").description(\"Manage display widgets\");\n widgets.command(\"list\").description(\"List widgets\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const items = getDisplaySubresource(data.widgets);\n if (json) { emitJson(stdout, \"displays widgets list\", items); return; } printTable(items, undefined, stdout);\n });\n widgets.command(\"get\").description(\"Get widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getWidget(display, widgetId);\n if (json) { emitJson(stdout, \"displays widgets get\", data); return; } printTable([data], undefined, stdout);\n });\n widgets.command(\"create\").description(\"Create widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--type <type>\", \"widget type\")\n .option(\"--name <name>\").option(\"--description <text>\").option(\"--icon <icon>\").option(\"--color <color>\")\n .option(\"--origin-resource <uuid>\").option(\"--origin-subschema\")\n .option(\"--tab <tabId>\").option(\"--slot <slotId>\").option(\"--layout <json>\").option(\"--layout-file <path>\")\n .option(\"--field <field>\", \"repeatable field\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--sort <sort>\", \"repeatable sort\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--widget-read-only\").option(\"--hide-add-button\").option(\"--hide-delete-button\").option(\"--hide-sort-button\").option(\"--hide-filter-button\").option(\"--hide-see-button\")\n .option(\"--lock-field <field>\", \"lock a field permanently in this widget (repeatable; field UUID or slug)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--lock-condition <expr>\", 'conditional lock \"<lockedField>:<field>:<comparator>[:<value>]\"; locks <lockedField> when all its conditions match (AND, repeatable)', collectLockConditions, [])\n .option(\"--lock-message-before <field:text>\", \"message shown while a conditional lock is not met yet (repeatable)\", collectLockMessages, [])\n .option(\"--lock-message-after <field:text>\", \"message shown once the field is locked (repeatable)\", collectLockMessages, [])\n .option(\"--clear-locked-fields\", \"clear the widget locked-fields configuration\")\n .option(\"--calc <type>\").option(\"--calc-field <uuid>\").option(\"--kpi-config <json>\")\n .option(\"--chart-type <type>\", \"chart type (lines, bars, stackedBars, combined)\").option(\"--x-axis-field <uuid>\").option(\"--x-axis-date-format <granularity>\", \"time granularity (DATE, MONTH_YEAR, QUARTER_YEAR, YEAR)\").option(\"--x-axis-time-series\")\n .option(\"--y-axis-serie <json>\", \"repeatable y axis serie\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--legend <json>\")\n .option(\"--column-field <uuid>\", \"KANBAN column field (UUID, not slug)\")\n .option(\"--swimlane-field <uuid>\", \"KANBAN swimlane field (UUID, not slug)\")\n .option(\"--start-date-field <uuid>\", \"TIMELINE start date field (UUID, not slug)\")\n .option(\"--end-date-field <uuid>\", \"TIMELINE end date field (UUID, not slug)\")\n .option(\"--label-field <uuid>\", \"TIMELINE label field (UUID, not slug)\")\n .option(\"--group-field <uuid>\", \"TIMELINE group field (UUID, not slug)\")\n .option(\"--subgroup-field <uuid>\", \"TIMELINE subgroup field (UUID, not slug)\")\n .option(\"--progress-field <uuid>\", \"TIMELINE progress field (UUID, not slug)\")\n .option(\"--card-title-field <uuid>\", \"KANBAN/TIMELINE card title field (UUID, not slug)\")\n .option(\"--card-category1-field <uuid>\", \"KANBAN/TIMELINE card category 1 field (UUID, not slug)\")\n .option(\"--card-category2-field <uuid>\", \"KANBAN/TIMELINE card category 2 field (UUID, not slug)\")\n .option(\"--card-category3-field <uuid>\", \"KANBAN card category 3 field (UUID, not slug)\")\n .option(\"--card-category4-field <uuid>\", \"TIMELINE card category 4 field (UUID, not slug)\")\n .option(\"--card-description-field <uuid>\", \"KANBAN/TIMELINE card description field (UUID, not slug)\")\n .option(\"--aggregation-method <method>\", \"KANBAN card aggregation method (e.g. sum)\")\n .option(\"--aggregation-field <uuid>\", \"KANBAN card aggregation field (UUID, not slug)\")\n .option(\"--view-state <json>\", \"KANBAN/TIMELINE viewState UI scalars (columnOrder, granularity, sidebarWidth, show* ...)\")\n .option(\"--view-state-file <path>\", \"read --view-state JSON from a file\")\n .option(\"--hierarchy-label <name>\", \"HIERARCHY label column name\")\n .option(\"--hierarchy-info <id:name>\", \"HIERARCHY info column; id is a unique opaque column id you choose (e.g. col_1779975207355_zfndknslw), not the name, and is reused as columnId in mappings (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-number <id:name:aggregation>\", \"HIERARCHY number column; id is a unique opaque column id (e.g. col_1779975207355_zfndknslw), not the name; aggregation SUM|AVERAGE|MINIMUM|MAXIMUM|COUNT|COUNT_DISTINCT (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-name <name>\", \"HIERARCHY root level name\")\n .option(\"--hierarchy-root-label-field <uuid>\", \"HIERARCHY root level label field (UUID, not slug)\")\n .option(\"--hierarchy-root-info <columnId:fieldId>\", \"HIERARCHY root info mapping; columnId must match a --hierarchy-info id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-number <columnId:fieldId>\", \"HIERARCHY root number mapping; columnId must match a --hierarchy-number id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-child <json>\", \"HIERARCHY child level JSON {name,schemaId,childFieldId,labelFieldId,infoMappings,numberMappings} (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-config <json>\", \"HIERARCHY full hierarchyConfig JSON (escape hatch)\")\n .option(\"--hierarchy-config-file <path>\", \"read --hierarchy-config JSON from a file\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: WidgetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets create\", readOnly, \"write\");\n const data = await api.createWidget(display, buildWidgetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays widgets create\", data); return; }\n writeLine(stdout, `Created widget on display \"${display.value}\".`);\n });\n widgets.command(\"update\").description(\"Update widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\")\n .option(\"--type <type>\").option(\"--name <name>\").option(\"--description <text>\").option(\"--icon <icon>\").option(\"--color <color>\")\n .option(\"--origin-resource <uuid>\").option(\"--origin-subschema\")\n .option(\"--tab <tabId>\").option(\"--slot <slotId>\").option(\"--layout <json>\").option(\"--layout-file <path>\")\n .option(\"--field <field>\", \"repeatable field\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--sort <sort>\", \"repeatable sort\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--filter <expr>\", \"repeatable filter\", collectFilters, [])\n .option(\"--widget-read-only\").option(\"--hide-add-button\").option(\"--hide-delete-button\").option(\"--hide-sort-button\").option(\"--hide-filter-button\").option(\"--hide-see-button\")\n .option(\"--lock-field <field>\", \"lock a field permanently in this widget (repeatable; field UUID or slug)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--lock-condition <expr>\", 'conditional lock \"<lockedField>:<field>:<comparator>[:<value>]\"; locks <lockedField> when all its conditions match (AND, repeatable)', collectLockConditions, [])\n .option(\"--lock-message-before <field:text>\", \"message shown while a conditional lock is not met yet (repeatable)\", collectLockMessages, [])\n .option(\"--lock-message-after <field:text>\", \"message shown once the field is locked (repeatable)\", collectLockMessages, [])\n .option(\"--clear-locked-fields\", \"clear the widget locked-fields configuration\")\n .option(\"--calc <type>\").option(\"--calc-field <uuid>\").option(\"--kpi-config <json>\")\n .option(\"--chart-type <type>\", \"chart type (lines, bars, stackedBars, combined)\").option(\"--x-axis-field <uuid>\").option(\"--x-axis-date-format <granularity>\", \"time granularity (DATE, MONTH_YEAR, QUARTER_YEAR, YEAR)\").option(\"--x-axis-time-series\")\n .option(\"--y-axis-serie <json>\", \"repeatable y axis serie\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--legend <json>\")\n .option(\"--column-field <uuid>\", \"KANBAN column field (UUID, not slug)\")\n .option(\"--swimlane-field <uuid>\", \"KANBAN swimlane field (UUID, not slug)\")\n .option(\"--start-date-field <uuid>\", \"TIMELINE start date field (UUID, not slug)\")\n .option(\"--end-date-field <uuid>\", \"TIMELINE end date field (UUID, not slug)\")\n .option(\"--label-field <uuid>\", \"TIMELINE label field (UUID, not slug)\")\n .option(\"--group-field <uuid>\", \"TIMELINE group field (UUID, not slug)\")\n .option(\"--subgroup-field <uuid>\", \"TIMELINE subgroup field (UUID, not slug)\")\n .option(\"--progress-field <uuid>\", \"TIMELINE progress field (UUID, not slug)\")\n .option(\"--card-title-field <uuid>\", \"KANBAN/TIMELINE card title field (UUID, not slug)\")\n .option(\"--card-category1-field <uuid>\", \"KANBAN/TIMELINE card category 1 field (UUID, not slug)\")\n .option(\"--card-category2-field <uuid>\", \"KANBAN/TIMELINE card category 2 field (UUID, not slug)\")\n .option(\"--card-category3-field <uuid>\", \"KANBAN card category 3 field (UUID, not slug)\")\n .option(\"--card-category4-field <uuid>\", \"TIMELINE card category 4 field (UUID, not slug)\")\n .option(\"--card-description-field <uuid>\", \"KANBAN/TIMELINE card description field (UUID, not slug)\")\n .option(\"--aggregation-method <method>\", \"KANBAN card aggregation method (e.g. sum)\")\n .option(\"--aggregation-field <uuid>\", \"KANBAN card aggregation field (UUID, not slug)\")\n .option(\"--view-state <json>\", \"KANBAN/TIMELINE viewState UI scalars (columnOrder, granularity, sidebarWidth, show* ...)\")\n .option(\"--view-state-file <path>\", \"read --view-state JSON from a file\")\n .option(\"--hierarchy-label <name>\", \"HIERARCHY label column name\")\n .option(\"--hierarchy-info <id:name>\", \"HIERARCHY info column; id is a unique opaque column id you choose (e.g. col_1779975207355_zfndknslw), not the name, and is reused as columnId in mappings (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-number <id:name:aggregation>\", \"HIERARCHY number column; id is a unique opaque column id (e.g. col_1779975207355_zfndknslw), not the name; aggregation SUM|AVERAGE|MINIMUM|MAXIMUM|COUNT|COUNT_DISTINCT (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-name <name>\", \"HIERARCHY root level name\")\n .option(\"--hierarchy-root-label-field <uuid>\", \"HIERARCHY root level label field (UUID, not slug)\")\n .option(\"--hierarchy-root-info <columnId:fieldId>\", \"HIERARCHY root info mapping; columnId must match a --hierarchy-info id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-root-number <columnId:fieldId>\", \"HIERARCHY root number mapping; columnId must match a --hierarchy-number id (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-child <json>\", \"HIERARCHY child level JSON {name,schemaId,childFieldId,labelFieldId,infoMappings,numberMappings} (repeatable)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--hierarchy-config <json>\", \"HIERARCHY full hierarchyConfig JSON (escape hatch)\")\n .option(\"--hierarchy-config-file <path>\", \"read --hierarchy-config JSON from a file\")\n .option(\"--raw <json>\").option(\"--raw-file <path>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string, commandOptions: WidgetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets update\", readOnly, \"write\");\n const data = await api.updateWidget(display, widgetId, buildWidgetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays widgets update\", data); return; }\n writeLine(stdout, `Updated widget \"${widgetId}\".`);\n });\n widgets.command(\"delete\").description(\"Delete widget\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<widget>\", \"widget id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, widgetId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays widgets delete\", readOnly, \"destructive\");\n const data = await api.deleteWidget(display, widgetId);\n if (json) { emitJson(stdout, \"displays widgets delete\", data); return; }\n writeLine(stdout, `Deleted widget \"${widgetId}\".`);\n });\n\n const targets = displays.command(\"navigation-targets\").description(\"Manage navigation targets\");\n targets.command(\"list\").description(\"List navigation targets\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const items = getDisplaySubresource(data.navigationTargets);\n if (json) { emitJson(stdout, \"displays navigation-targets list\", items); return; } printTable(items, undefined, stdout);\n });\n targets.command(\"create\").description(\"Create navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--source-widget <id>\").requiredOption(\"--target-display <id>\").requiredOption(\"--target-variable <id>\").option(\"--label <label>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: NavigationTargetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets create\", readOnly, \"write\");\n const data = await api.createNavigationTarget(display, buildNavigationTargetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays navigation-targets create\", data); return; }\n writeLine(stdout, `Created navigation target on display \"${display.value}\".`);\n });\n targets.command(\"update\").description(\"Update navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<target>\", \"target id\")\n .option(\"--source-widget <id>\").option(\"--target-display <id>\").option(\"--target-variable <id>\").option(\"--label <label>\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, targetId: string, commandOptions: NavigationTargetMutationOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets update\", readOnly, \"write\");\n const data = await api.updateNavigationTarget(display, targetId, buildNavigationTargetBody(commandOptions));\n if (json) { emitJson(stdout, \"displays navigation-targets update\", data); return; }\n writeLine(stdout, `Updated navigation target \"${targetId}\".`);\n });\n targets.command(\"delete\").description(\"Delete navigation target\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).argument(\"<target>\", \"target id\").action(async function action(this: Command, display: NormalizedUuidOrSlug, targetId: string) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays navigation-targets delete\", readOnly, \"destructive\");\n const data = await api.deleteNavigationTarget(display, targetId);\n if (json) { emitJson(stdout, \"displays navigation-targets delete\", data); return; }\n writeLine(stdout, `Deleted navigation target \"${targetId}\".`);\n });\n\n const cross = displays.command(\"cross-widget-filter\").description(\"Manage cross widget filter\");\n cross.command(\"get\").description(\"Get cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json } = createDisplaysApi(this, filePath); const data = await api.getDisplay(display); const item = data.crossWidgetFilter ?? null;\n if (json) { emitJson(stdout, \"displays cross-widget-filter get\", item); return; } printTable(item ?? [], undefined, stdout);\n });\n cross.command(\"set\").description(\"Set cross widget filter (replaces the whole array of configurations)\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--source-widget <id>\", \"source widget id (single-configuration mode)\")\n .option(\"--source-field <id>\", \"source field id (single-configuration mode)\")\n .option(\"--source-schema <id>\", \"source schema id, only for HIERARCHY source widgets\")\n .option(\"--target <widget:field>\", \"repeatable target (single-configuration mode)\", (v, p: string[] = []) => [...p, v], [])\n .option(\"--raw <json>\", \"full array of configurations as JSON (for several configurations)\")\n .option(\"--raw-file <path>\", \"path to a JSON file with the full array of configurations\")\n .action(async function action(this: Command, display: NormalizedUuidOrSlug, commandOptions: CrossWidgetFilterSetOptions) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays cross-widget-filter set\", readOnly, \"write\");\n const data = await api.setCrossWidgetFilter(display, buildCrossWidgetFilterBody(commandOptions));\n if (json) { emitJson(stdout, \"displays cross-widget-filter set\", data); return; }\n writeLine(stdout, `Updated cross widget filter for display \"${display.value}\".`);\n });\n cross.command(\"delete\").description(\"Delete cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector).action(async function action(this: Command, display: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDisplaysApi(this, filePath); ensureWritable(\"displays cross-widget-filter delete\", readOnly, \"destructive\");\n const data = await api.deleteCrossWidgetFilter(display);\n if (json) { emitJson(stdout, \"displays cross-widget-filter delete\", data); return; }\n writeLine(stdout, `Deleted cross widget filter for display \"${display.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiDisplay {\n [key: string]: unknown;\n id?: string;\n name?: string;\n description?: string;\n layoutTemplate?: string;\n layout?: {\n template?: string;\n freeformLayouts?: unknown;\n slots?: Array<Record<string, unknown>>;\n tabs?: Array<Record<string, unknown>>;\n };\n variables?: Array<Record<string, unknown>>;\n widgets?: Array<Record<string, unknown>>;\n navigationTargets?: Array<Record<string, unknown>>;\n crossWidgetFilter?: Array<Record<string, unknown>> | null;\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n}\n\nexport interface ApiDisplayTab {\n [key: string]: unknown;\n id?: string;\n name?: string;\n orientation?: string;\n}\n\nexport interface ApiDisplayVariable {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n}\n\nexport interface ApiDisplayWidget {\n [key: string]: unknown;\n id?: string;\n name?: string;\n type?: string;\n}\n\nexport interface ApiDisplayNavigationTarget {\n [key: string]: unknown;\n id?: string;\n label?: string;\n}\n\nexport interface ApiDisplayFolder {\n [key: string]: unknown;\n id?: string;\n name?: string | null;\n isRoot?: boolean;\n displayCount?: number;\n}\n\nexport interface MoveDisplayInput {\n displayId: string;\n targetFolderId: string;\n}\n\nexport type DisplaySummary = ApiDisplay;\nexport type DisplayResource = ApiDisplay;\n\nexport interface CreateDisplayInput {\n name: string;\n description?: string;\n layout: Record<string, unknown>;\n}\n\nexport interface UpdateDisplayInput {\n name?: string;\n description?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport class DisplaysApi {\n constructor(private readonly client: ApiClient) {}\n\n listDisplays(): Promise<ApiDisplay[]> {\n return this.client.getJson<ApiDisplay[]>(\"/api/v2/displays\");\n }\n\n getDisplay(display: NormalizedUuidOrSlug): Promise<ApiDisplay> {\n return this.client.getJson<ApiDisplay>(`/api/v2/displays/${display.value}`);\n }\n\n createDisplay(body: CreateDisplayInput): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\"/api/v2/displays\", jsonOptions(body, \"POST\"));\n }\n\n updateDisplay(\n display: NormalizedUuidOrSlug,\n body: UpdateDisplayInput,\n ): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\n `/api/v2/displays/${display.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteDisplay(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}`,\n { method: \"DELETE\" },\n );\n }\n\n getLayout(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/layout`,\n );\n }\n\n patchLayout(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/layout`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n listTabs(display: NormalizedUuidOrSlug): Promise<ApiDisplayTab[]> {\n return this.client.getJson<ApiDisplayTab[]>(\n `/api/v2/displays/${display.value}/tabs`,\n );\n }\n\n createTab(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayTab> {\n return this.client.requestJson<ApiDisplayTab>(\n `/api/v2/displays/${display.value}/tabs`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateTab(\n display: NormalizedUuidOrSlug,\n tabId: string,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayTab> {\n return this.client.requestJson<ApiDisplayTab>(\n `/api/v2/displays/${display.value}/tabs/${segment(tabId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteTab(display: NormalizedUuidOrSlug, tabId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/tabs/${segment(tabId)}`,\n { method: \"DELETE\" },\n );\n }\n\n listVariables(display: NormalizedUuidOrSlug): Promise<ApiDisplayVariable[]> {\n return this.client.getJson<ApiDisplayVariable[]>(\n `/api/v2/displays/${display.value}/variables`,\n );\n }\n\n getVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<ApiDisplayVariable> {\n return this.client.getJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n );\n }\n\n createVariable(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayVariable> {\n return this.client.requestJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateVariable(display: NormalizedUuidOrSlug, variableId: string, body: Record<string, unknown>): Promise<ApiDisplayVariable> {\n return this.client.requestJson<ApiDisplayVariable>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/variables/${segment(variableId)}`,\n { method: \"DELETE\" },\n );\n }\n\n listWidgets(display: NormalizedUuidOrSlug): Promise<ApiDisplayWidget[]> {\n return this.client.getJson<ApiDisplayWidget[]>(\n `/api/v2/displays/${display.value}/widgets`,\n );\n }\n\n getWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<ApiDisplayWidget> {\n return this.client.getJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n );\n }\n\n createWidget(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayWidget> {\n return this.client.requestJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateWidget(display: NormalizedUuidOrSlug, widgetId: string, body: Record<string, unknown>): Promise<ApiDisplayWidget> {\n return this.client.requestJson<ApiDisplayWidget>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/widgets/${segment(widgetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n createNavigationTarget(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayNavigationTarget> {\n return this.client.requestJson<ApiDisplayNavigationTarget>(\n `/api/v2/displays/${display.value}/navigation-targets`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateNavigationTarget(\n display: NormalizedUuidOrSlug,\n targetId: string,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayNavigationTarget> {\n return this.client.requestJson<ApiDisplayNavigationTarget>(\n `/api/v2/displays/${display.value}/navigation-targets/${segment(targetId)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteNavigationTarget(\n display: NormalizedUuidOrSlug,\n targetId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/navigation-targets/${segment(targetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n getCrossWidgetFilter(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.getJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n );\n }\n\n setCrossWidgetFilter(\n display: NormalizedUuidOrSlug,\n body: unknown[],\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n jsonOptions(body, \"PUT\"),\n );\n }\n\n deleteCrossWidgetFilter(display: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/displays/${display.value}/cross-widget-filter`,\n { method: \"DELETE\" },\n );\n }\n\n listFolders(): Promise<ApiDisplayFolder[]> {\n return this.client.getJson<ApiDisplayFolder[]>(\"/api/v2/display-folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<ApiDisplayFolder> {\n return this.client.requestJson<ApiDisplayFolder>(\n \"/api/v2/display-folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplayFolder> {\n return this.client.requestJson<ApiDisplayFolder>(\n `/api/v2/display-folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/display-folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveDisplay(input: MoveDisplayInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/display-folders/displays:move\",\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","export type ExpressionComparator =\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"contains\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\";\n\nexport type ExpressionValue = string | readonly string[] | null;\n\nexport interface ParsedExpression {\n field: string;\n comparator: ExpressionComparator;\n value: ExpressionValue;\n raw: string;\n}\n\nconst supportedComparators = new Set<ExpressionComparator>([\n \"eq\",\n \"neq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"contains\",\n \"in\",\n \"is_empty\",\n \"is_not_empty\",\n]);\n\nconst noValueComparators = new Set<ExpressionComparator>([\"is_empty\", \"is_not_empty\"]);\n\nfunction parseColonExpression(input: string): [string, string, string] {\n const parts = input.split(\":\");\n\n if (parts.length < 2) {\n throw new Error(`Expected a field:comparator[:value] expression, got \"${input}\".`);\n }\n\n const field = parts[0]?.trim();\n const comparator = parts[1]?.trim();\n\n if (!field) {\n throw new Error(`Expected a field before \":\", got \"${input}\".`);\n }\n\n if (!comparator) {\n throw new Error(`Expected a comparator after \"${field}:\", got \"${input}\".`);\n }\n\n return [field, comparator, parts.slice(2).join(\":\").trim()];\n}\n\nfunction parseSpaceExpression(input: string): [string, string, string] {\n const parts = input.trim().split(/\\s+/);\n\n if (parts.length < 2) {\n throw new Error(`Expected a field comparator expression, got \"${input}\".`);\n }\n\n const field = parts[0];\n const comparator = parts[1];\n\n if (!field) {\n throw new Error(`Expected a field comparator expression, got \"${input}\".`);\n }\n\n if (!comparator) {\n throw new Error(`Expected a comparator after \"${field}\", got \"${input}\".`);\n }\n\n return [field.trim(), comparator.trim(), parts.slice(2).join(\" \").trim()];\n}\n\nfunction normalizeValue(comparator: ExpressionComparator, rawValue: string): ExpressionValue {\n if (noValueComparators.has(comparator)) {\n if (rawValue.length > 0) {\n throw new Error(`Comparator \"${comparator}\" does not accept a value.`);\n }\n\n return null;\n }\n\n if (comparator === \"in\") {\n const values = rawValue\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n\n if (values.length === 0) {\n throw new Error(`Comparator \"${comparator}\" requires at least one value.`);\n }\n\n return values;\n }\n\n if (rawValue.length === 0) {\n throw new Error(`Comparator \"${comparator}\" requires a value.`);\n }\n\n return rawValue;\n}\n\nexport function parseExpression(input: string): ParsedExpression {\n const trimmed = input.trim();\n const [field, comparatorCandidate, rawValue] = trimmed.includes(\":\") && !trimmed.includes(\" \")\n ? parseColonExpression(trimmed)\n : parseSpaceExpression(trimmed);\n\n if (!supportedComparators.has(comparatorCandidate as ExpressionComparator)) {\n throw new Error(\n `Unsupported comparator \"${comparatorCandidate}\" in expression \"${input}\".`,\n );\n }\n\n const comparator = comparatorCandidate as ExpressionComparator;\n\n return {\n field,\n comparator,\n value: normalizeValue(comparator, rawValue),\n raw: trimmed,\n };\n}\n","import { basename } from \"node:path\";\n\nimport { Command } from \"commander\";\n\nimport {\n DocumentTemplatesApi,\n type ApiDocumentTemplate,\n type CreateDocumentTemplateInput,\n type UpdateDocumentTemplateInput,\n} from \"../api/document-templates.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n downloadToOutput,\n openUploadFile,\n type BinaryWriter,\n} from \"../utils/file-transfers.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isJsonObject,\n isEmptyObject,\n parseUuidOrSlugSelector,\n readTextFile,\n writeLine,\n} from \"./shared.js\";\n\nexport interface RegisterDocumentTemplatesCommandsOptions {\n configPath?: string;\n stdout?: BinaryWriter;\n}\n\ninterface TemplateCreateCommandOptions {\n name?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface TemplateUpdateCommandOptions {\n name?: string;\n}\n\ninterface AssetAddCommandOptions {\n name?: string;\n}\n\ninterface AssetDownloadCommandOptions {\n output?: string;\n}\n\nfunction createDocumentTemplatesApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return { api: new DocumentTemplatesApi(client), ...runtime };\n}\n\nfunction parseJsonValue(input: string, sourceLabel: string): unknown {\n try {\n return JSON.parse(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from ${sourceLabel}: ${message}`,\n );\n }\n}\n\nfunction readJsonObjectOption(\n raw: string | undefined,\n rawFile: string | undefined,\n rawLabel: string,\n rawFileLabel: string,\n): JsonObject {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Provide either \"${rawLabel}\" or \"${rawFileLabel}\", not both.`,\n );\n }\n\n let parsed: unknown;\n\n if (raw) {\n parsed = parseJsonValue(raw, rawLabel);\n } else if (rawFile) {\n parsed = parseJsonValue(readTextFile(rawFile, rawFileLabel), `${rawFileLabel} ${rawFile}`);\n } else {\n return {};\n }\n\n if (!isJsonObject(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${raw ? rawLabel : rawFileLabel} to contain a JSON object.`,\n );\n }\n\n return parsed;\n}\n\nfunction templateRows(templates: readonly ApiDocumentTemplate[]): Record<string, unknown>[] {\n return templates.map((template) => ({\n id: template.id ?? \"\",\n name: template.name ?? \"\",\n assetCount: Array.isArray(template.assets) ? template.assets.length : 0,\n updatedAt: template.updatedAt ?? \"\",\n }));\n}\n\nfunction resolveTemplate(\n templates: readonly ApiDocumentTemplate[],\n selector: NormalizedUuidOrSlug,\n): ApiDocumentTemplate {\n if (selector.kind === \"uuid\") {\n const match = templates.find((template) => template.id === selector.value);\n\n if (match) {\n return match;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" was not found.`,\n );\n }\n\n const matches = templates.filter((template) => template.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiDocumentTemplate;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" was not found.`,\n );\n}\n\nasync function resolveTemplateSelector(\n api: DocumentTemplatesApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const templates = await api.listTemplates();\n const resolved = resolveTemplate(templates, selector);\n\n if (typeof resolved.id !== \"string\" || resolved.id.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Document template \"${selector.value}\" is missing an id in the API response.`,\n );\n }\n\n return { kind: \"uuid\", value: resolved.id };\n}\n\nfunction buildCreateInput(\n options: TemplateCreateCommandOptions,\n): CreateDocumentTemplateInput {\n const raw = readJsonObjectOption(options.raw, options.rawFile, \"--raw\", \"--raw-file\");\n const input: JsonObject = { ...raw };\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (typeof input.name !== \"string\" || input.name.trim().length === 0) {\n throw new CliError(\"invalid_cli_usage\", 'Provide template name via \"--name\".');\n }\n\n if (input.assets === undefined) {\n input.assets = [];\n }\n\n return input as unknown as CreateDocumentTemplateInput;\n}\n\nfunction buildUpdateInput(\n options: TemplateUpdateCommandOptions,\n): UpdateDocumentTemplateInput {\n const input: UpdateDocumentTemplateInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (isEmptyObject(input as object)) {\n throw new CliError(\"invalid_cli_usage\", 'Provide template updates via \"--name\".');\n }\n\n return input;\n}\n\nexport function registerDocumentTemplatesCommands(\n program: Command,\n options: RegisterDocumentTemplatesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const templates = program\n .command(\"document-templates\")\n .description(\"Manage document templates and their assets\");\n\n templates\n .command(\"list\")\n .description(\"List document templates\")\n .action(async function action(this: Command) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n const data = await api.listTemplates();\n\n if (json) {\n emitJson(stdout, \"document-templates list\", data, filePath);\n return;\n }\n\n printTable(templateRows(data), [\"id\", \"name\", \"assetCount\", \"updatedAt\"], stdout);\n });\n\n templates\n .command(\"get\")\n .description(\"Get a document template by UUID or exact name\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, template: NormalizedUuidOrSlug) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n const list = await api.listTemplates();\n const data = resolveTemplate(list, template);\n\n if (json) {\n emitJson(stdout, \"document-templates get\", data, filePath);\n return;\n }\n\n printTable([data as Record<string, unknown>], undefined, stdout);\n });\n\n templates\n .command(\"create\")\n .description(\"Create a document template\")\n .option(\"--name <name>\", \"template name\")\n .option(\"--raw <json>\", \"raw create JSON payload\")\n .option(\"--raw-file <path>\", \"path to raw create JSON payload\")\n .action(async function action(\n this: Command,\n commandOptions: TemplateCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates create\", readOnly, \"write\");\n const data = await api.createTemplate(buildCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"document-templates create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created document template \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n templates\n .command(\"update\")\n .description(\"Rename a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"new template name\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n commandOptions: TemplateUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates update\", readOnly, \"write\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.updateTemplate(resolved, buildUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"document-templates update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated document template \"${String(data.name ?? template.value)}\".`);\n });\n\n templates\n .command(\"delete\")\n .description(\"Delete a document template (and its assets)\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, template: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates delete\", readOnly, \"destructive\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.deleteTemplate(resolved);\n\n if (json) {\n emitJson(stdout, \"document-templates delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted document template \"${template.value}\".`);\n });\n\n const assets = templates.command(\"assets\").description(\"Manage document template assets\");\n\n assets\n .command(\"add\")\n .description(\"Upload an asset file to a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<path>\", \"path to the local file\")\n .option(\"--name <name>\", \"override the asset display name\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n localPath: string,\n commandOptions: AssetAddCommandOptions,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates assets add\", readOnly, \"write\");\n\n const contents = await openUploadFile(localPath);\n const formData = new FormData();\n formData.append(\"file\", contents, basename(localPath));\n\n if (commandOptions.name !== undefined) {\n formData.append(\"name\", commandOptions.name);\n }\n\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.addAsset(resolved, formData);\n\n if (json) {\n emitJson(stdout, \"document-templates assets add\", data, filePath);\n return;\n }\n\n writeLine(\n stdout,\n `Added asset \"${commandOptions.name ?? basename(localPath)}\" to template \"${template.value}\".`,\n );\n });\n\n assets\n .command(\"delete\")\n .description(\"Delete one asset from a document template\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<asset>\", \"asset UUID\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n assetId: string,\n ) {\n const { api, json, readOnly } = createDocumentTemplatesApi(this, filePath);\n ensureWritable(\"document-templates assets delete\", readOnly, \"destructive\");\n const resolved = await resolveTemplateSelector(api, template);\n const data = await api.deleteAsset(resolved, assetId);\n\n if (json) {\n emitJson(stdout, \"document-templates assets delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted asset \"${assetId}\" from template \"${template.value}\".`);\n });\n\n assets\n .command(\"download\")\n .description(\"Download the raw bytes of a document template asset\")\n .argument(\"<template>\", \"template UUID or exact name\", parseUuidOrSlugSelector)\n .argument(\"<asset>\", \"asset UUID\")\n .option(\"--output <path>\", \"write the downloaded bytes to a path\")\n .action(async function action(\n this: Command,\n template: NormalizedUuidOrSlug,\n assetId: string,\n commandOptions: AssetDownloadCommandOptions,\n ) {\n const { api, json } = createDocumentTemplatesApi(this, filePath);\n\n if (json && !commandOptions.output) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide \"--output\" when using \"--json\" with \"document-templates assets download\".',\n );\n }\n\n const resolved = await resolveTemplateSelector(api, template);\n const bytes = await downloadToOutput(\n (destination) => api.downloadAsset(resolved, assetId, destination),\n stdout,\n commandOptions.output,\n );\n\n if (commandOptions.output) {\n if (json) {\n emitJson(\n stdout,\n \"document-templates assets download\",\n {\n template: resolved.value,\n asset: assetId,\n output: commandOptions.output,\n bytes,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded asset to \"${commandOptions.output}\".`);\n return;\n }\n });\n}\n","import type { Writable } from \"node:stream\";\n\nimport { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiDocumentTemplateAsset {\n [key: string]: unknown;\n id?: string;\n name?: string;\n link?: string;\n}\n\nexport interface ApiDocumentTemplate {\n [key: string]: unknown;\n id?: string;\n name?: string;\n assets?: ApiDocumentTemplateAsset[];\n createdAt?: string;\n updatedAt?: string;\n createdBy?: string;\n updatedBy?: string;\n}\n\nexport interface CreateDocumentTemplateInput {\n [key: string]: unknown;\n name: string;\n assets?: ApiDocumentTemplateAsset[];\n}\n\nexport interface UpdateDocumentTemplateInput {\n [key: string]: unknown;\n name?: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class DocumentTemplatesApi {\n constructor(private readonly client: ApiClient) {}\n\n listTemplates(): Promise<ApiDocumentTemplate[]> {\n return this.client.getJson<ApiDocumentTemplate[]>(\"/api/v2/document-templates\");\n }\n\n createTemplate(input: CreateDocumentTemplateInput): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n \"/api/v2/document-templates\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateTemplate(\n template: NormalizedUuidOrSlug,\n input: UpdateDocumentTemplateInput,\n ): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteTemplate(template: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}`,\n { method: \"DELETE\" },\n );\n }\n\n addAsset(\n template: NormalizedUuidOrSlug,\n input: FormData,\n ): Promise<ApiDocumentTemplate> {\n return this.client.requestJson<ApiDocumentTemplate>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets`,\n { method: \"POST\", body: input },\n );\n }\n\n deleteAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets/${encodeURIComponent(assetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n downloadAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n destination: Writable,\n ): Promise<number> {\n return this.client.download(\n `/api/v2/document-templates/${encodeURIComponent(template.value)}/assets/${encodeURIComponent(assetId)}/download`,\n destination,\n );\n }\n}\n","import { createWriteStream, openAsBlob } from \"node:fs\";\nimport { mkdtemp, rename, rm } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { Writable } from \"node:stream\";\nimport { finished } from \"node:stream/promises\";\n\nimport { ApiClientError } from \"../client.js\";\nimport { CliError } from \"./errors.js\";\n\nexport interface BinaryWriter {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport async function openUploadFile(filePath: string): Promise<Blob> {\n try {\n return await openAsBlob(filePath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\"invalid_cli_usage\", `Failed to read file at ${filePath}: ${message}`);\n }\n}\n\nexport async function downloadToOutput(\n download: (destination: Writable) => Promise<number>,\n stdout: BinaryWriter,\n outputPath?: string,\n): Promise<number> {\n if (!outputPath) {\n // Finish this adapter after the last write callback without closing stdout.\n const destination = new Writable({\n write(chunk: Buffer, _encoding, callback) {\n try {\n if (stdout instanceof Writable) {\n stdout.write(chunk, callback);\n } else {\n stdout.write(chunk);\n callback();\n }\n } catch (error) {\n callback(error as Error);\n }\n },\n });\n const onError = (error: Error): void => {\n destination.destroy(error);\n };\n if (stdout instanceof Writable) {\n stdout.on(\"error\", onError);\n }\n\n try {\n return await download(destination);\n } finally {\n destination.destroy();\n if (stdout instanceof Writable) {\n stdout.off(\"error\", onError);\n }\n }\n }\n\n let tempDirectory: string | undefined;\n let destination: ReturnType<typeof createWriteStream> | undefined;\n try {\n // Keep the temporary file on the same filesystem for an atomic replacement.\n tempDirectory = await mkdtemp(join(dirname(resolve(outputPath)), \".zinkee-download-\"));\n const tempFile = join(tempDirectory, \"download\");\n destination = createWriteStream(tempFile);\n // An HTTP error may arrive before pipeline attaches its error handler.\n destination.on(\"error\", () => {});\n const bytes = await download(destination);\n await rename(tempFile, outputPath);\n return bytes;\n } catch (error) {\n const cause = error instanceof ApiClientError ? error.cause : error;\n const isFileError =\n cause instanceof Error && \"syscall\" in cause &&\n [\"open\", \"write\", \"writev\", \"close\"].includes(String(cause.syscall));\n if (error instanceof ApiClientError && !isFileError) {\n throw error;\n }\n\n const message = cause instanceof Error ? cause.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n } finally {\n if (destination) {\n destination.destroy();\n await finished(destination, { cleanup: true }).catch(() => {});\n }\n if (tempDirectory) {\n await rm(tempDirectory, { recursive: true, force: true });\n }\n }\n}\n","import { basename } from \"node:path\";\n\nimport { Command } from \"commander\";\n\nimport { FilesApi } from \"../api/files.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n downloadToOutput,\n openUploadFile,\n type BinaryWriter,\n} from \"../utils/file-transfers.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isJsonObject,\n parseUuidOrSlugSelector,\n writeLine,\n} from \"./shared.js\";\n\nexport interface RegisterFilesCommandsOptions {\n configPath?: string;\n stdout?: BinaryWriter;\n}\n\ninterface FilesDownloadCommandOptions {\n output?: string;\n}\n\nfunction createFilesApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return { api: new FilesApi(client), ...runtime };\n}\n\nexport function registerFilesCommands(\n program: Command,\n options: RegisterFilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n\n const files = program.command(\"files\").description(\"Manage files and storage\");\n\n files\n .command(\"upload\")\n .description(\"Upload a local file\")\n .argument(\"<path>\", \"path to the local file\")\n .action(async function action(this: Command, path: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files upload\", readOnly, \"write\");\n\n const contents = await openUploadFile(path);\n const formData = new FormData();\n formData.append(\"file\", contents, basename(path));\n\n return api.uploadFile(formData).then((data) => {\n if (json) {\n emitJson(stdout, \"files upload\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Uploaded file \"${basename(path)}\".`);\n });\n });\n\n files\n .command(\"download\")\n .description(\"Download a file\")\n .argument(\"<file>\", \"file identifier\")\n .option(\"--output <path>\", \"write the downloaded file to a path\")\n .action(async function action(\n this: Command,\n file: string,\n commandOptions: FilesDownloadCommandOptions,\n ) {\n const { api, json } = createFilesApi(this, filePath);\n\n if (json && !commandOptions.output) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide \"--output\" when using \"--json\" with \"files download\".',\n );\n }\n\n const fileSelector = parseUuidOrSlugSelector(file);\n\n const bytes = await downloadToOutput(\n (destination) => api.downloadFile(fileSelector, destination),\n stdout,\n commandOptions.output,\n );\n\n if (commandOptions.output) {\n if (json) {\n emitJson(\n stdout,\n \"files download\",\n { file: fileSelector.value, output: commandOptions.output, bytes },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded file to \"${commandOptions.output}\".`);\n }\n });\n\n files\n .command(\"delete\")\n .description(\"Delete a file\")\n .argument(\"<file>\", \"file identifier\")\n .action(function action(this: Command, file: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files delete\", readOnly, \"destructive\");\n\n const fileSelector = parseUuidOrSlugSelector(file);\n\n return api.deleteFile(fileSelector).then((data) => {\n if (json) {\n emitJson(stdout, \"files delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted file \"${fileSelector.value}\".`);\n });\n });\n\n files\n .command(\"storage\")\n .description(\"Show storage usage information\")\n .action(function action(this: Command) {\n const { api, json } = createFilesApi(this, filePath);\n\n return api.getStorageInfo().then((data) => {\n if (json) {\n emitJson(stdout, \"files storage\", data, filePath);\n return;\n }\n\n if (isJsonObject(data)) {\n printTable([data], Object.keys(data), stdout);\n return;\n }\n\n writeLine(stdout, String(data));\n });\n });\n}\n","import type { Writable } from \"node:stream\";\n\nimport { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiFile {\n [key: string]: unknown;\n id?: string;\n name?: string;\n filename?: string;\n size?: number;\n mimeType?: string;\n}\n\nexport interface FileStorageInfo {\n [key: string]: unknown;\n usedBytes?: number;\n totalBytes?: number;\n availableBytes?: number;\n used?: number;\n limitBytes?: number;\n}\n\nexport class FilesApi {\n constructor(private readonly client: ApiClient) {}\n\n uploadFile(input: FormData): Promise<ApiFile> {\n return this.client.requestJson<ApiFile>(\"/api/v2/files\", {\n method: \"POST\",\n body: input,\n });\n }\n\n downloadFile(file: NormalizedUuidOrSlug, destination: Writable): Promise<number> {\n return this.client.download(`/api/v2/files/${file.value}`, destination);\n }\n\n deleteFile(file: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/files/${file.value}`,\n { method: \"DELETE\" },\n );\n }\n\n getStorageInfo(): Promise<FileStorageInfo> {\n return this.client.getJson<FileStorageInfo>(\"/api/v2/files/storage-info\");\n }\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport type FormulaRecomputeScope = \"FIELD\" | \"SCHEMA\" | \"WORKSPACE\";\n\nexport interface FormulaRecomputeResponse {\n requestId: string;\n scope: FormulaRecomputeScope;\n formulaCount: number;\n skippedFormulaCount: number;\n eventsQueued: number;\n status: \"QUEUED\";\n}\n\nexport type FormulaRecomputeInput =\n | {\n scope: \"FIELD\";\n schema: NormalizedUuidOrSlug;\n field: NormalizedUuidOrSlug;\n }\n | {\n scope: \"SCHEMA\";\n schema: NormalizedUuidOrSlug;\n }\n | {\n scope: \"WORKSPACE\";\n };\n\nfunction toRequestBody(input: FormulaRecomputeInput): Record<string, string> {\n if (input.scope === \"FIELD\") {\n return {\n scope: input.scope,\n schema: input.schema.value,\n field: input.field.value,\n };\n }\n\n if (input.scope === \"SCHEMA\") {\n return {\n scope: input.scope,\n schema: input.schema.value,\n };\n }\n\n return { scope: input.scope };\n}\n\nexport class FormulasApi {\n constructor(private readonly client: ApiClient) {}\n\n recompute(input: FormulaRecomputeInput): Promise<FormulaRecomputeResponse> {\n return this.client.requestJson<FormulaRecomputeResponse>(\n \"/api/v2/formulas:recompute\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(toRequestBody(input)),\n },\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n FormulasApi,\n type FormulaRecomputeInput,\n type FormulaRecomputeResponse,\n} from \"../api/formulas.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterFormulasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface ConfirmedCommandOptions {\n yes?: boolean;\n}\n\nfunction createFormulasApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new FormulasApi(client),\n ...runtime,\n };\n}\n\nfunction ensureConfirmed(commandName: string, confirmed: boolean | undefined): void {\n if (!confirmed) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Command \"${commandName}\" requires --yes because it may enqueue a large recalculation.`,\n );\n }\n}\n\nfunction emitResult(\n stdout: CommandIo,\n commandName: string,\n result: FormulaRecomputeResponse,\n configPath: string,\n json: boolean,\n): void {\n if (json) {\n emitJson(stdout, commandName, result, configPath);\n return;\n }\n\n writeLine(\n stdout,\n `Queued ${result.eventsQueued} formula recalculation event(s) for ${result.scope.toLowerCase()} scope (request ${result.requestId}).`,\n );\n}\n\nasync function recompute(\n command: Command,\n commandName: string,\n input: FormulaRecomputeInput,\n options: RegisterFormulasCommandsOptions,\n requireConfirmation: boolean,\n confirmed?: boolean,\n): Promise<void> {\n const configPath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const { api, json, readOnly } = createFormulasApi(command, configPath);\n\n ensureWritable(commandName, readOnly, \"write\");\n if (requireConfirmation) {\n ensureConfirmed(commandName, confirmed);\n }\n\n const result = await api.recompute(input);\n emitResult(stdout, commandName, result, configPath, json);\n}\n\nexport function registerFormulasCommands(\n program: Command,\n options: RegisterFormulasCommandsOptions = {},\n): void {\n const formulas = program\n .command(\"formulas\")\n .description(\"Recalculate formula values\");\n const recomputeCommand = formulas\n .command(\"recompute\")\n .description(\"Queue a full formula recalculation\");\n\n recomputeCommand\n .command(\"field\")\n .description(\"Queue recalculation of one formula column\")\n .argument(\"<schema>\", \"schema UUID or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"formula field UUID or slug\", parseUuidOrSlugSelector)\n .action(\n async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n await recompute(\n this,\n \"formulas recompute field\",\n { scope: \"FIELD\", schema, field },\n options,\n false,\n );\n },\n );\n\n recomputeCommand\n .command(\"schema\")\n .description(\"Queue recalculation of all active formulas in one schema\")\n .argument(\"<schema>\", \"schema UUID or slug\", parseUuidOrSlugSelector)\n .option(\"--yes\", \"confirm the potentially expensive recalculation\")\n .action(\n async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: ConfirmedCommandOptions,\n ) {\n await recompute(\n this,\n \"formulas recompute schema\",\n { scope: \"SCHEMA\", schema },\n options,\n true,\n commandOptions.yes,\n );\n },\n );\n\n recomputeCommand\n .command(\"workspace\")\n .description(\"Queue recalculation of all active formulas in the workspace\")\n .option(\"--yes\", \"confirm the potentially expensive recalculation\")\n .action(async function action(\n this: Command,\n commandOptions: ConfirmedCommandOptions,\n ) {\n await recompute(\n this,\n \"formulas recompute workspace\",\n { scope: \"WORKSPACE\" },\n options,\n true,\n commandOptions.yes,\n );\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiLogChange {\n beforeValue?: string | null;\n afterValue?: string | null;\n author?: string;\n operation?: string;\n}\n\nexport interface ApiLog {\n [key: string]: unknown;\n recordId?: string;\n timestamp?: string;\n changeField?: string;\n change?: ApiLogChange;\n}\n\nexport class LogsApi {\n constructor(private readonly client: ApiClient) {}\n\n listLogs(\n schema: NormalizedUuidOrSlug,\n recordId: string,\n ): Promise<ApiLog[]> {\n return this.client.getJson<ApiLog[]>(\n `/api/v2/schemas/${schema.value}/records/${recordId}/logs`,\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport { LogsApi } from \"../api/logs.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n parseUuidOrSlugSelector,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterLogsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nfunction createLogsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new LogsApi(client),\n ...runtime,\n };\n}\n\nexport function registerLogsCommands(\n program: Command,\n options: RegisterLogsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const logs = program.command(\"logs\").description(\"Inspect record change logs\");\n\n logs\n .command(\"list\")\n .description(\"List change logs for a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createLogsApi(this, filePath);\n const data = await api.listLogs(schema, record.value);\n\n if (json) {\n emitJson(stdout, \"logs list\", data);\n return;\n }\n\n emitTable(stdout, data);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command } from \"commander\";\n\nimport { NavigationApi, type NavigationFolder } from \"../api/navigation.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport { type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterNavigationCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderMutationOptions {\n name?: string;\n order?: string;\n props?: string;\n propsFile?: string;\n}\n\nfunction createNavigationApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new NavigationApi(client),\n ...runtime,\n };\n}\n\nfunction parseInteger(value: string | undefined, flagName: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number.parseInt(value, 10);\n if (Number.isNaN(parsed)) {\n throw new CliError(\"invalid_cli_usage\", `${flagName} must be an integer.`);\n }\n\n return parsed;\n}\n\nfunction readJsonObject(raw?: string, rawFile?: string): Record<string, unknown> {\n if (raw && rawFile) {\n throw new CliError(\"invalid_cli_usage\", 'Use either \"--props\" or \"--props-file\", not both.');\n }\n\n const source = rawFile ? readFileSync(rawFile, \"utf8\") : raw;\n if (!source) {\n return {};\n }\n\n try {\n const parsed = JSON.parse(source) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"invalid_cli_usage\", \"Props payload must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(\"invalid_cli_usage\", \"Props payload is invalid JSON.\");\n }\n}\n\nfunction buildFolderBody(options: FolderMutationOptions): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n body.name = options.name;\n }\n\n const order = parseInteger(options.order, \"--order\");\n if (order !== undefined) {\n body.order = order;\n }\n\n const props = readJsonObject(options.props, options.propsFile);\n if (Object.keys(props).length > 0) {\n body.additionalProperties = props;\n }\n\n return body;\n}\n\nfunction resolveFolder(\n folders: readonly NavigationFolder[],\n selector: NormalizedUuidOrSlug,\n): NavigationFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n if (!match) {\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n }\n return match;\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n if (matches.length === 1) {\n return matches[0] as NavigationFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction folderRows(folders: readonly NavigationFolder[]): Record<string, unknown>[] {\n return folders.map((folder) => ({\n id: folder.id,\n order: folder.order ?? \"\",\n name: folder.name ?? \"\",\n resourceCount: Array.isArray(folder.resources) ? folder.resources.length : \"\",\n }));\n}\n\nexport function registerNavigationCommands(\n program: Command,\n options: RegisterNavigationCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const navigation = program.command(\"navigation\").description(\"Manage workspace navigation\");\n const folders = navigation.command(\"folders\").description(\"Manage navigation folders\");\n\n folders\n .command(\"list\")\n .description(\"List navigation folders\")\n .action(async function action(this: Command) {\n const { api, json } = createNavigationApi(this, filePath);\n const data = await api.listFolders();\n\n if (json) {\n emitJson(stdout, \"navigation folders list\", data, filePath);\n return;\n }\n\n printTable(folderRows(data), [\"id\", \"order\", \"name\", \"resourceCount\"], stdout);\n });\n\n folders\n .command(\"get\")\n .description(\"Get a navigation folder by UUID or exact name\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json } = createNavigationApi(this, filePath);\n const data = await api.listFolders();\n const resolved = resolveFolder(data, folder);\n\n if (json) {\n emitJson(stdout, \"navigation folders get\", resolved, filePath);\n return;\n }\n\n printTable(folderRows([resolved]), [\"id\", \"order\", \"name\", \"resourceCount\"], stdout);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a navigation folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\")\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"color\\\":\\\"blue\\\",\\\"icon\\\":\\\"chart-line\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(this: Command, commandOptions: FolderMutationOptions) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders create\", readOnly, \"write\");\n const data = await api.createFolder(buildFolderBody(commandOptions));\n\n if (json) {\n emitJson(stdout, \"navigation folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created navigation folder \"${String(data.name ?? commandOptions.name)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update a navigation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\")\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"color\\\":\\\"blue\\\",\\\"icon\\\":\\\"chart-line\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug, commandOptions: FolderMutationOptions) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders update\", readOnly, \"write\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, folder);\n const body = buildFolderBody(commandOptions);\n\n if (Object.keys(body).length === 0) {\n throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n }\n\n const data = await api.updateFolder({ kind: \"uuid\", value: resolved.id }, body);\n\n if (json) {\n emitJson(stdout, \"navigation folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated navigation folder \"${String(data.name ?? resolved.name ?? resolved.id)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a navigation folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation folders delete\", readOnly, \"destructive\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, folder);\n const data = await api.deleteFolder({ kind: \"uuid\", value: resolved.id });\n\n if (json) {\n emitJson(stdout, \"navigation folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted navigation folder \"${resolved.name ?? resolved.id}\".`);\n });\n\n navigation\n .command(\"resources\")\n .description(\"Manage navigation resources\")\n .command(\"move\")\n .description(\n \"Move a schema into a navigation folder. Only schemas can be moved (the navigation menu holds databases); schedules and sub-schemas follow their parent schema. Use the root folder UUID 00000000-0000-0000-0000-000000000000 to move it back to the workspace root.\",\n )\n .argument(\"<resource>\", \"schema UUID\")\n .requiredOption(\"--to <folder>\", \"target folder UUID or exact name\")\n .action(async function action(\n this: Command,\n resourceId: string,\n commandOptions: { to: string },\n ) {\n const { api, json, readOnly } = createNavigationApi(this, filePath);\n ensureWritable(\"navigation resources move\", readOnly, \"write\");\n const allFolders = await api.listFolders();\n const resolved = resolveFolder(allFolders, parseUuidOrSlugSelector(commandOptions.to));\n const data = await api.moveResource({\n resourceId,\n targetFolderId: resolved.id,\n });\n\n if (json) {\n emitJson(stdout, \"navigation resources move\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Moved resource \"${resourceId}\" to \"${resolved.name ?? resolved.id}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface NavigationFolder {\n id: string;\n order?: number;\n name?: string;\n resources?: Array<Record<string, unknown>>;\n additionalProperties?: Record<string, unknown>;\n}\n\nexport interface NavigationFolderMutation {\n folderId?: string;\n name?: string;\n}\n\nexport interface NavigationMoveResourceInput {\n resourceId: string;\n targetFolderId: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class NavigationApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(): Promise<NavigationFolder[]> {\n return this.client.getJson<NavigationFolder[]>(\"/api/v2/navigation/folders\");\n }\n\n createFolder(body: Record<string, unknown>): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n \"/api/v2/navigation/folders\",\n jsonOptions(body, \"POST\"),\n );\n }\n\n updateFolder(folder: NormalizedUuidOrSlug, body: Record<string, unknown>): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${folder.value}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n moveResource(body: NavigationMoveResourceInput): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/navigation/resources:move\",\n jsonOptions(body, \"POST\"),\n );\n }\n}\n","import { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n ProfileResolutionError,\n readConfigIfExists,\n redactProfile,\n removeProfileConfig,\n setDefaultProfile,\n setProfileConfig,\n validateBaseUrl,\n writeConfig,\n} from \"../config.js\";\nimport type { AppConfig, ProfileConfig } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { printTable } from \"../utils/output.js\";\nimport {\n emitJson,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterProfilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\nexport interface DisplayProfile extends ProfileConfig {\n name: string;\n isDefault: boolean;\n}\n\nfunction readRequiredConfig(filePath: string): AppConfig {\n const config = readConfigIfExists(filePath);\n\n if (config) {\n return config;\n }\n\n throw new CliError(\"configuration_error\", `Config file not found at ${filePath}.`);\n}\n\nfunction getRequiredProfile(config: AppConfig, profileName: string): ProfileConfig {\n const profile = config.profiles[profileName];\n\n if (profile) {\n return profile;\n }\n\n throw new CliError(\"configuration_error\", `Profile \"${profileName}\" not found in config.`);\n}\n\nfunction toDisplayProfile(\n profileName: string,\n profile: ProfileConfig,\n defaultProfile: string | undefined,\n): DisplayProfile {\n return {\n name: profileName,\n isDefault: defaultProfile === profileName,\n ...redactProfile(profile),\n };\n}\n\nfunction loadConfigForAdd(filePath: string): AppConfig {\n return readConfigIfExists(filePath) ?? { profiles: {} };\n}\n\nfunction normalizeProfileBaseUrl(baseUrl: string | undefined): string | undefined {\n if (baseUrl === undefined) {\n return undefined;\n }\n\n try {\n return validateBaseUrl(baseUrl, '\"--base-url\"');\n } catch (error) {\n if (error instanceof ProfileResolutionError) {\n throw new CliError(\"configuration_error\", error.message);\n }\n\n throw error;\n }\n}\n\nfunction emitProfilesTable(stdout: CommandIo, data: readonly DisplayProfile[]): void {\n printTable(\n data.map((profile) => ({\n name: profile.name,\n default: profile.isDefault ? \"yes\" : \"\",\n baseUrl: profile.baseUrl ?? \"\",\n apiKey: profile.apiKey ?? \"\",\n })),\n [\"name\", \"default\", \"baseUrl\", \"apiKey\"],\n stdout,\n );\n}\n\nexport function registerProfilesCommands(\n program: Command,\n options: RegisterProfilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const profiles = program.command(\"profiles\").description(\"Manage local CLI profiles\");\n\n profiles\n .command(\"list\")\n .description(\"List configured profiles\")\n .action(function action(this: Command) {\n const config = readRequiredConfig(filePath);\n const data = Object.entries(config.profiles).map(([name, profile]) =>\n toDisplayProfile(name, profile, config.defaultProfile),\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles list\", data, filePath);\n return;\n }\n\n emitProfilesTable(stdout, data);\n });\n\n profiles\n .command(\"get\")\n .description(\"Show a single configured profile\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n const profile = getRequiredProfile(config, profileName);\n const data = toDisplayProfile(profileName, profile, config.defaultProfile);\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles get\", data, filePath);\n return;\n }\n\n emitProfilesTable(stdout, [data]);\n });\n\n profiles\n .command(\"use\")\n .description(\"Set the default profile\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const nextConfig = setDefaultProfile(config, profileName);\n writeConfig(nextConfig, filePath);\n const data = {\n profile: profileName,\n defaultProfile: nextConfig.defaultProfile,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles use\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Using profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"add\")\n .description(\"Add a profile to the local config\")\n .argument(\"<profile>\", \"profile name\")\n .requiredOption(\"--api-key <token>\", \"API key\")\n .option(\"--base-url <url>\", \"base URL\")\n .action(function action(\n this: Command,\n profileName: string,\n commandOptions: { apiKey: string; baseUrl?: string },\n ) {\n const config = loadConfigForAdd(filePath);\n\n if (config.profiles[profileName]) {\n throw new CliError(\n \"configuration_error\",\n `Profile \"${profileName}\" already exists in config.`,\n );\n }\n\n const baseUrl = normalizeProfileBaseUrl(commandOptions.baseUrl);\n\n let nextConfig = setProfileConfig(config, profileName, {\n apiKey: commandOptions.apiKey,\n baseUrl,\n });\n\n if (!nextConfig.defaultProfile) {\n nextConfig = setDefaultProfile(nextConfig, profileName);\n }\n\n writeConfig(nextConfig, filePath);\n const data = toDisplayProfile(\n profileName,\n nextConfig.profiles[profileName] ?? {},\n nextConfig.defaultProfile,\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles add\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Added profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"update\")\n .description(\"Update an existing profile\")\n .argument(\"<profile>\", \"profile name\")\n .option(\"--api-key <token>\", \"API key\")\n .option(\"--base-url <url>\", \"base URL\")\n .action(function action(\n this: Command,\n profileName: string,\n commandOptions: { apiKey?: string; baseUrl?: string },\n ) {\n if (commandOptions.apiKey === undefined && commandOptions.baseUrl === undefined) {\n throw new CliError(\n \"configuration_error\",\n 'Provide at least one of \"--api-key\" or \"--base-url\".',\n );\n }\n\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const baseUrl = normalizeProfileBaseUrl(commandOptions.baseUrl);\n\n const nextConfig = setProfileConfig(config, profileName, {\n apiKey: commandOptions.apiKey,\n baseUrl,\n });\n\n writeConfig(nextConfig, filePath);\n const data = toDisplayProfile(\n profileName,\n nextConfig.profiles[profileName] ?? {},\n nextConfig.defaultProfile,\n );\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated profile \"${profileName}\".`);\n });\n\n profiles\n .command(\"remove\")\n .description(\"Remove a profile from the local config\")\n .argument(\"<profile>\", \"profile name\")\n .action(function action(this: Command, profileName: string) {\n const config = readRequiredConfig(filePath);\n getRequiredProfile(config, profileName);\n\n const nextConfig = removeProfileConfig(config, profileName);\n writeConfig(nextConfig, filePath);\n const data = {\n profile: profileName,\n defaultProfile: nextConfig.defaultProfile,\n };\n\n if (this.optsWithGlobals<{ json?: boolean }>().json) {\n emitJson(stdout, \"profiles remove\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Removed profile \"${profileName}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n RecordsApi,\n type ApiRecord,\n type CreateRecordValues,\n type RecordQueryExpression,\n type RecordQueryInput,\n type RecordQueryResult,\n type UpdateRecordInput,\n} from \"../api/records.js\";\nimport { SchemasApi } from \"../api/schemas.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport {\n parseExpression,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport {\n parseJsonAssignment,\n parseKeyValue,\n type JsonKeyValueAssignment,\n type KeyValueAssignment,\n} from \"../parsers/kv.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseNonNegativeInteger,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterRecordsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface RecordsQueryCommandOptions {\n select?: string[];\n where?: ParsedExpression[];\n search?: string;\n sort?: string[];\n limit?: number;\n offset?: number;\n raw?: string;\n rawFile?: string;\n}\n\ninterface RecordsListCommandOptions {\n limit?: number;\n offset?: number;\n}\n\ninterface RecordsCreateCommandOptions {\n set?: KeyValueAssignment[];\n setJson?: JsonKeyValueAssignment[];\n raw?: string;\n rawFile?: string;\n recordsFile?: string;\n}\n\ninterface RecordsUpdateCommandOptions extends RecordsCreateCommandOptions {\n unset?: string[];\n}\n\ninterface RecordsDeleteCommandOptions {\n record?: string[];\n recordsFile?: string;\n}\n\nfunction createRecordsApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new RecordsApi(client),\n schemasApi: new SchemasApi(client),\n ...runtime,\n };\n}\n\nfunction parseCommaSeparatedValues(\n input: string,\n label: string,\n): string[] {\n const values = input\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n\n if (values.length === 0) {\n throw new InvalidArgumentError(`Expected ${label} to contain at least one value.`);\n }\n\n return values;\n}\n\nfunction parseExpressionValue(input: string): ParsedExpression {\n try {\n return parseExpression(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid expression.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction parseKeyValueAssignment(input: string): KeyValueAssignment {\n try {\n return parseKeyValue(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid assignment.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction parseJsonKeyValueAssignment(input: string): JsonKeyValueAssignment {\n try {\n return parseJsonAssignment(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON assignment.\";\n throw new InvalidArgumentError(message);\n }\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction toRecordUuid(value: string): string | null {\n try {\n const normalized = normalizeUuidOrSlug(value);\n return normalized.kind === \"uuid\" ? normalized.value : null;\n } catch {\n return null;\n }\n}\n\nfunction collectRecordIds(value: string, previous: string[] = []): string[] {\n const uuid = toRecordUuid(value.trim());\n if (!uuid) {\n throw new InvalidArgumentError(`Expected a record UUID, received \"${value}\".`);\n }\n return [...previous, uuid];\n}\n\nfunction readRecordIdsFromFile(path: string): string[] {\n let contents: string;\n\n try {\n contents = readFileSync(path, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read record ids from ${path}: ${message}`,\n );\n }\n\n const ids: string[] = [];\n\n contents.split(/\\r?\\n/).forEach((line, index) => {\n const value = line.trim();\n if (!value) {\n return;\n }\n const uuid = toRecordUuid(value);\n if (!uuid) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Invalid record UUID \"${value}\" at ${path}:${index + 1}.`,\n );\n }\n ids.push(uuid);\n });\n\n return ids;\n}\n\nfunction resolveDeleteRecordIds(options: RecordsDeleteCommandOptions): string[] {\n const flagIds = options.record ?? [];\n const fileIds = options.recordsFile ? readRecordIdsFromFile(options.recordsFile) : [];\n const recordIds = dedupeStrings([...flagIds, ...fileIds]);\n\n if (recordIds.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one record id via \"--record <uuid>\" (repeatable) or \"--records-file <path>\".',\n );\n }\n\n return recordIds;\n}\n\nfunction collectStringValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction collectSelectValues(value: string, previous: string[] = []): string[] {\n return dedupeStrings([...previous, ...parseCommaSeparatedValues(value, \"--select\")]);\n}\n\nfunction collectSortValues(value: string, previous: string[] = []): string[] {\n return dedupeStrings([...previous, ...parseCommaSeparatedValues(value, \"--sort\")]);\n}\n\nfunction collectWhereExpressions(\n value: string,\n previous: ParsedExpression[] = [],\n): ParsedExpression[] {\n return [...previous, parseExpressionValue(value)];\n}\n\nfunction collectKeyValueAssignments(\n value: string,\n previous: KeyValueAssignment[] = [],\n): KeyValueAssignment[] {\n return [...previous, parseKeyValueAssignment(value)];\n}\n\nfunction collectJsonAssignments(\n value: string,\n previous: JsonKeyValueAssignment[] = [],\n): JsonKeyValueAssignment[] {\n return [...previous, parseJsonKeyValueAssignment(value)];\n}\n\nfunction buildAssignmentObject(\n assignments: readonly KeyValueAssignment[] = [],\n jsonAssignments: readonly JsonKeyValueAssignment[] = [],\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n\n for (const assignment of assignments) {\n output[assignment.key] = assignment.value;\n }\n\n for (const assignment of jsonAssignments) {\n output[assignment.key] = assignment.value;\n }\n\n return output;\n}\n\nfunction toQueryExpressions(\n expressions: readonly ParsedExpression[] | undefined,\n): RecordQueryExpression[] | undefined {\n if (!expressions || expressions.length === 0) {\n return undefined;\n }\n\n return expressions.map((expression) => ({\n field: expression.field,\n comparator: expression.comparator,\n value: expression.value,\n }));\n}\n\nfunction buildRecordQueryInput(\n options: RecordsQueryCommandOptions,\n allowRaw: boolean,\n): RecordQueryInput {\n const input: RecordQueryInput = allowRaw\n ? readRawObject(options.raw, options.rawFile)\n : {};\n\n if (options.select && options.select.length > 0) {\n input.select = [...options.select];\n }\n\n const where = toQueryExpressions(options.where);\n\n if (where && where.length > 0) {\n input.where = where;\n }\n\n if (options.search !== undefined) {\n input.search = { term: options.search };\n }\n\n if (options.sort && options.sort.length > 0) {\n input.sort = [...options.sort];\n }\n\n if (options.limit !== undefined) {\n input.limit = options.limit;\n }\n\n if (options.offset !== undefined) {\n input.offset = options.offset;\n }\n\n return input;\n}\n\nfunction readRecordsFromFile(path: string): CreateRecordValues[] {\n let contents: string;\n\n try {\n contents = readFileSync(path, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read records from ${path}: ${message}`,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(contents);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to parse JSON from --records-file ${path}: ${message}`,\n );\n }\n\n if (!Array.isArray(parsed)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected --records-file ${path} to contain a JSON array of record objects.`,\n );\n }\n\n if (parsed.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `--records-file ${path} must contain at least one record.`,\n );\n }\n\n return parsed.map((record, index) => {\n if (!isJsonObject(record)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Record at index ${index} in --records-file ${path} must be a JSON object.`,\n );\n }\n return record;\n });\n}\n\nfunction buildCreateRecords(options: RecordsCreateCommandOptions): CreateRecordValues[] {\n const hasSingleRecordFlags =\n (options.set?.length ?? 0) > 0 ||\n (options.setJson?.length ?? 0) > 0 ||\n options.raw !== undefined ||\n options.rawFile !== undefined;\n\n if (options.recordsFile !== undefined) {\n if (hasSingleRecordFlags) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--records-file\" or the single-record flags (--set/--set-json/--raw/--raw-file), not both.',\n );\n }\n return readRecordsFromFile(options.recordsFile);\n }\n\n const values = {\n ...readRawObject(options.raw, options.rawFile),\n ...buildAssignmentObject(options.set, options.setJson),\n };\n\n if (isEmptyObject(values)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide record fields via \"--set\", \"--set-json\", \"--raw\", \"--raw-file\", or load multiple records with \"--records-file\".',\n );\n }\n\n return [values];\n}\n\nfunction buildRecordUpdateInput(\n options: RecordsUpdateCommandOptions,\n): UpdateRecordInput {\n const raw = readRawObject(options.raw, options.rawFile);\n const input: UpdateRecordInput = {};\n const setPayload = {\n ...raw,\n ...buildAssignmentObject(options.set, options.setJson),\n };\n const unsetPayload = [...(options.unset ?? [])];\n\n for (const key of Object.keys(setPayload)) {\n const unsetIndex = unsetPayload.indexOf(key);\n\n if (unsetIndex !== -1) {\n unsetPayload.splice(unsetIndex, 1);\n }\n }\n\n if (Object.keys(setPayload).length > 0) {\n input.set = setPayload;\n } else {\n delete input.set;\n }\n\n if (unsetPayload.length > 0) {\n input.unset = [...new Set(unsetPayload)];\n } else {\n delete input.unset;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide record updates via \"--set\", \"--set-json\", \"--unset\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n return input;\n}\n\nfunction getQueryRecords(result: RecordQueryResult): ApiRecord[] {\n return Array.isArray(result.records) ? result.records : [];\n}\n\nfunction getRecordIdentifier(record: ApiRecord): string {\n return typeof record.recordId === \"string\" ? record.recordId : \"unknown\";\n}\n\nasync function resolveSchemaSelector(\n api: SchemasApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const schemas = await api.listSchemas();\n const match = schemas.find((entry) => entry.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Schema \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nexport function registerRecordsCommands(\n program: Command,\n options: RegisterRecordsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const records = program.command(\"records\").description(\"Manage schema records\");\n\n records\n .command(\"list\")\n .description(\"List records for a schema with simple pagination\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--limit <number>\", \"limit results\", parseNonNegativeInteger)\n .option(\"--offset <number>\", \"offset results\", parseNonNegativeInteger)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsListCommandOptions,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.listRecords(\n resolvedSchema,\n buildRecordQueryInput(commandOptions, false),\n );\n const recordsData = getQueryRecords(data);\n\n if (json) {\n emitJson(\n stdout,\n \"records list\",\n recordsData,\n filePath,\n data.page ? { page: data.page } : {},\n );\n return;\n }\n\n emitTable(stdout, recordsData);\n });\n\n records\n .command(\"query\")\n .description(\"Query records for a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--select <fields>\", \"field selection (comma-separated, repeatable)\", collectSelectValues, [])\n .option(\"--where <expression>\", \"where expression\", collectWhereExpressions, [])\n .option(\n \"--search <term>\",\n \"free-text search term (matched across the schema's searchable fields)\",\n )\n .option(\"--sort <field:direction>\", \"sort field(s)\", collectSortValues, [])\n .option(\"--limit <number>\", \"limit results\", parseNonNegativeInteger)\n .option(\"--offset <number>\", \"offset results\", parseNonNegativeInteger)\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsQueryCommandOptions,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.queryRecords(\n resolvedSchema,\n buildRecordQueryInput(commandOptions, true),\n );\n const recordsData = getQueryRecords(data);\n\n if (json) {\n emitJson(\n stdout,\n \"records query\",\n recordsData,\n filePath,\n data.page ? { page: data.page } : {},\n );\n return;\n }\n\n emitTable(stdout, recordsData);\n });\n\n records\n .command(\"get\")\n .description(\"Get a record by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ) {\n const { api, schemasApi, json } = createRecordsApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n const data = await api.getRecord(resolvedSchema, record);\n\n if (json) {\n emitJson(stdout, \"records get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n records\n .command(\"create\")\n .description(\"Create one or more records\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--set <field=value>\",\n \"set a string field (reference fields: a record id, 'recordId::label', or an exact display value)\",\n collectKeyValueAssignments,\n [],\n )\n .option(\"--set-json <field=json>\", \"set a structured field\", collectJsonAssignments, [])\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .option(\n \"--records-file <path>\",\n \"path to a JSON array of record objects (mutually exclusive with --set/--set-json/--raw/--raw-file)\",\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsCreateCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records create\", readOnly, \"write\");\n\n const records = buildCreateRecords(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.createRecords(resolvedSchema, records);\n\n if (json) {\n emitJson(stdout, \"records create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created ${data.created.length} record(s) in schema \"${schema.value}\".`);\n if (data.errors.length > 0) {\n writeLine(stdout, `${data.errors.length} record(s) rejected:`);\n for (const error of data.errors) {\n writeLine(stdout, ` - index ${error.index}: ${error.message}`);\n }\n }\n });\n\n records\n .command(\"update\")\n .description(\"Update a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<record>\", \"record uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--set <field=value>\",\n \"set a string field (reference fields: a record id, 'recordId::label', or an exact display value)\",\n collectKeyValueAssignments,\n [],\n )\n .option(\"--set-json <field=json>\", \"set a structured field\", collectJsonAssignments, [])\n .option(\"--unset <field>\", \"unset a field\", collectStringValues, [])\n .option(\"--raw <json>\", \"raw JSON object of fields to set\")\n .option(\"--raw-file <path>\", \"path to a JSON object of fields to set\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n commandOptions: RecordsUpdateCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.updateRecord(\n resolvedSchema,\n record,\n buildRecordUpdateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"records update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated record \"${getRecordIdentifier(data)}\".`);\n });\n\n records\n .command(\"delete\")\n .description(\"Delete one or more records\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--record <uuid>\", \"record uuid to delete (repeatable)\", collectRecordIds, [])\n .option(\n \"--records-file <path>\",\n \"path to a file with one record uuid per line (merged with --record)\",\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: RecordsDeleteCommandOptions,\n ) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records delete\", readOnly, \"destructive\");\n\n const recordIds = resolveDeleteRecordIds(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.deleteRecords(resolvedSchema, recordIds);\n\n if (json) {\n emitJson(stdout, \"records delete\", data, filePath);\n return;\n }\n\n writeLine(\n stdout,\n `Deleted ${recordIds.length} record(s) from schema \"${schema.value}\".`,\n );\n });\n\n records\n .command(\"clear\")\n .description(\"Delete all records from a schema's table\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records clear\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.clearRecords(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"records clear\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Cleared all records from schema \"${schema.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiRecord {\n [key: string]: unknown;\n recordId?: string;\n values?: Record<string, unknown>;\n}\n\nexport interface RecordQueryExpression {\n field: string;\n comparator: string;\n value: unknown;\n}\n\nexport interface RecordQueryResult {\n records: ApiRecord[];\n page?: Record<string, unknown>;\n}\n\nexport interface RecordQueryInput {\n [key: string]: unknown;\n select?: string[];\n where?: RecordQueryExpression[];\n search?: { term: string };\n sort?: string[];\n limit?: number;\n offset?: number;\n}\n\nexport type CreateRecordValues = Record<string, unknown>;\n\nexport interface CreateRecordError {\n index: number;\n reason: string;\n message: string;\n action: string;\n}\n\nexport interface CreateRecordsResult {\n created: string[];\n errors: CreateRecordError[];\n}\n\nexport interface UpdateRecordInput {\n set?: Record<string, unknown>;\n unset?: string[];\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class RecordsApi {\n constructor(private readonly client: ApiClient) {}\n\n listRecords(\n schema: NormalizedUuidOrSlug,\n query: RecordQueryInput,\n ): Promise<RecordQueryResult> {\n const params = new URLSearchParams();\n\n if (query.limit !== undefined) {\n params.set(\"limit\", String(query.limit));\n }\n\n if (query.offset !== undefined) {\n params.set(\"offset\", String(query.offset));\n }\n\n const path = `/api/v2/schemas/${schema.value}/records`;\n const queryString = params.toString();\n\n return this.client.getJson<RecordQueryResult>(\n queryString ? `${path}?${queryString}` : path,\n );\n }\n\n queryRecords(\n schema: NormalizedUuidOrSlug,\n query: RecordQueryInput,\n ): Promise<RecordQueryResult> {\n const body = this.normalizeQueryInput(query);\n\n return this.client.requestJson<RecordQueryResult>(\n `/api/v2/schemas/${schema.value}/records:query`,\n jsonOptions(body, \"POST\"),\n );\n }\n\n getRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ): Promise<ApiRecord> {\n return this.client.getJson<ApiRecord>(\n `/api/v2/schemas/${schema.value}/records/${record.value}`,\n );\n }\n\n createRecords(\n schema: NormalizedUuidOrSlug,\n records: CreateRecordValues[],\n ): Promise<CreateRecordsResult> {\n return this.client.requestJson<CreateRecordsResult>(\n `/api/v2/schemas/${schema.value}/records`,\n jsonOptions({ records }, \"POST\"),\n );\n }\n\n updateRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n input: UpdateRecordInput,\n ): Promise<ApiRecord> {\n return this.client.requestJson<ApiRecord>(\n `/api/v2/schemas/${schema.value}/records/${record.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteRecords(\n schema: NormalizedUuidOrSlug,\n recordIds: string[],\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/records:delete`,\n jsonOptions({ recordIds }, \"POST\"),\n );\n }\n\n clearRecords(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/records:clear`,\n { method: \"DELETE\" },\n );\n }\n\n private normalizeQueryInput(query: RecordQueryInput): Record<string, unknown> {\n const where = query.where?.map((expression) => ({\n field: expression.field,\n op: expression.comparator,\n value: expression.value,\n }));\n\n const sort = query.sort?.map((entry) => {\n const [field, direction = \"asc\"] = entry.split(\":\");\n return {\n field,\n direction: direction.toUpperCase(),\n };\n });\n\n return {\n ...query,\n select: query.select,\n where,\n sort,\n page:\n query.limit !== undefined || query.offset !== undefined\n ? {\n offset: query.offset,\n limit: query.limit,\n }\n : undefined,\n limit: undefined,\n offset: undefined,\n };\n }\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\n\nexport interface ApiSchemaField {\n [key: string]: unknown;\n id?: string;\n type?: string;\n slug?: string;\n label?: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface ApiSchema {\n [key: string]: unknown;\n id?: string;\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: string;\n fields?: ApiSchemaField[];\n uniqueFields?: string[];\n folder?: { id?: string; name?: string | null; isRoot?: boolean };\n}\n\nexport interface CreateSchemaInput {\n name: string;\n slug: string;\n auditable?: boolean;\n commentable?: boolean;\n}\n\nexport interface UpdateSchemaInput {\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: string;\n}\n\nexport interface SetUniqueFieldsInput {\n fieldIds: string[];\n}\n\nexport interface CreateSchemaFieldInput {\n [key: string]: unknown;\n type: string;\n slug: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface UpdateSchemaFieldInput {\n [key: string]: unknown;\n label?: string;\n description?: string;\n required?: boolean;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class SchemasApi {\n constructor(private readonly client: ApiClient) {}\n\n listSchemas(): Promise<ApiSchema[]> {\n return this.client.getJson<ApiSchema[]>(\"/api/v2/schemas\");\n }\n\n getSchema(schema: NormalizedUuidOrSlug): Promise<ApiSchema> {\n return this.client.getJson<ApiSchema>(`/api/v2/schemas/${schema.value}`);\n }\n\n createSchema(input: CreateSchemaInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\"/api/v2/schemas\", jsonOptions(input, \"POST\"));\n }\n\n updateSchema(schema: NormalizedUuidOrSlug, input: UpdateSchemaInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\n `/api/v2/schemas/${schema.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n setUniqueFields(schema: NormalizedUuidOrSlug, input: SetUniqueFieldsInput): Promise<ApiSchema> {\n return this.client.requestJson<ApiSchema>(\n `/api/v2/schemas/${schema.value}/unique-fields`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n deleteSchema(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}`,\n { method: \"DELETE\" },\n );\n }\n\n async listFields(schema: NormalizedUuidOrSlug): Promise<ApiSchemaField[]> {\n const result = await this.getSchema(schema);\n\n return Array.isArray(result.fields) ? result.fields : [];\n }\n\n getField(schema: NormalizedUuidOrSlug, field: NormalizedUuidOrSlug): Promise<ApiSchemaField> {\n return this.client.getJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n );\n }\n\n createField(schema: NormalizedUuidOrSlug, input: CreateSchemaFieldInput): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields`,\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateField(\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n input: UpdateSchemaFieldInput,\n ): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteField(schema: NormalizedUuidOrSlug, field: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${schema.value}/fields/${field.value}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n SchemasApi,\n type ApiSchema,\n type ApiSchemaField,\n type CreateSchemaFieldInput,\n type CreateSchemaInput,\n type SetUniqueFieldsInput,\n type UpdateSchemaFieldInput,\n type UpdateSchemaInput,\n} from \"../api/schemas.js\";\nimport { ApiClientError } from \"../client.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { FOLDER_TABLE_KEYS, folderColumns, printTable } from \"../utils/output.js\";\nimport {\n assertSupportedSchemaFieldType,\n buildSchemaFieldCreateHelpText,\n buildSchemaFieldCreateValidationMessage,\n formatSchemaFieldTypes,\n normalizeSchemaFieldCreatePayload,\n normalizeSchemaFieldType,\n normalizeSchemaFieldUpdatePayload,\n} from \"../utils/schema-fields.js\";\nimport {\n createCommandContext,\n emitJson,\n ensureWritable,\n isEmptyObject,\n isJsonObject,\n parseUuidOrSlugSelector,\n readRawObject,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterSchemasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface SchemaCreateCommandOptions {\n name: string;\n slug: string;\n auditable?: boolean;\n commentable?: boolean;\n}\n\ninterface SchemaUpdateCommandOptions {\n name?: string;\n slug?: string;\n auditable?: boolean;\n commentable?: boolean;\n highlightedField?: NormalizedUuidOrSlug;\n}\n\ninterface SetUniqueFieldsCommandOptions {\n field?: NormalizedUuidOrSlug[];\n clear?: boolean;\n}\n\nconst HIGHLIGHTED_FIELD_HELP = `\nHighlighted field:\n The schema's \"main\" field. The frontend uses its value as each record's\n display name, in two places:\n - Activity panel: the record's title in the activity side panel\n (the panel with the record's logs and comments).\n - Detail view: the record's name in the left-hand record list you\n browse to open each record's form.\n`;\n\ninterface FieldCreateCommandOptions {\n type?: string;\n slug?: string;\n label?: string;\n description?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface FieldUpdateCommandOptions {\n label?: string;\n description?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction createSchemasApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new SchemasApi(client),\n ...runtime,\n };\n}\n\nfunction collectFieldSelectors(\n value: string,\n previous: NormalizedUuidOrSlug[] = [],\n): NormalizedUuidOrSlug[] {\n return [...previous, parseUuidOrSlugSelector(value)];\n}\n\nfunction parseBooleanFlag(input: string): boolean {\n const normalized = input.trim().toLowerCase();\n\n if ([\"true\", \"1\", \"yes\", \"y\", \"on\"].includes(normalized)) {\n return true;\n }\n\n if ([\"false\", \"0\", \"no\", \"n\", \"off\"].includes(normalized)) {\n return false;\n }\n\n throw new InvalidArgumentError(`Expected a boolean value, received \"${input}\".`);\n}\n\nfunction emitSchemasTable(stdout: CommandIo, schemas: readonly ApiSchema[]): void {\n printTable(\n schemas.map((schema) => ({\n id: schema.id ?? \"\",\n name: schema.name ?? \"\",\n slug: schema.slug ?? \"\",\n auditable: schema.auditable ?? \"\",\n commentable: schema.commentable ?? \"\",\n ...folderColumns(schema.folder),\n })),\n [\"id\", \"name\", \"slug\", \"auditable\", \"commentable\", ...FOLDER_TABLE_KEYS],\n stdout,\n );\n}\n\nfunction emitFieldsTable(stdout: CommandIo, fields: readonly ApiSchemaField[]): void {\n printTable(\n fields.map((field) => ({\n id: field.id ?? \"\",\n type: field.type ?? \"\",\n slug: field.slug ?? \"\",\n label: field.label ?? \"\",\n required: field.required ?? \"\",\n })),\n [\"id\", \"type\", \"slug\", \"label\", \"required\"],\n stdout,\n );\n}\n\nfunction buildSchemaUpdateInput(options: SchemaUpdateCommandOptions): UpdateSchemaInput {\n const input: UpdateSchemaInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.slug !== undefined) {\n input.slug = options.slug;\n }\n\n if (options.auditable !== undefined) {\n input.auditable = options.auditable;\n }\n\n if (options.commentable !== undefined) {\n input.commentable = options.commentable;\n }\n\n return input;\n}\n\nfunction applyFieldDefaultValue(\n input: CreateSchemaFieldInput | UpdateSchemaFieldInput,\n defaultValue: string | undefined,\n): void {\n if (defaultValue === undefined) {\n return;\n }\n\n const config = input.config;\n\n if (config !== undefined && !isJsonObject(config)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Expected field \"config\" to be a JSON object when using \"--default\".',\n );\n }\n\n input.config = {\n ...(config ?? {}),\n defaultValue,\n };\n}\n\nfunction buildFieldCreateInput(\n options: FieldCreateCommandOptions,\n): CreateSchemaFieldInput {\n const raw = normalizeSchemaFieldCreatePayload(readRawObject(options.raw, options.rawFile));\n const rawType = typeof raw.type === \"string\" ? raw.type : undefined;\n const rawSlug = typeof raw.slug === \"string\" ? raw.slug : undefined;\n const rawLabel = typeof raw.label === \"string\" ? raw.label : undefined;\n const type = options.type ?? rawType;\n const slug = options.slug ?? rawSlug;\n const label = options.label ?? rawLabel;\n\n if (!type) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field type via \"--type\" or \"--raw\".');\n }\n\n if (!slug) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field slug via \"--slug\" or \"--raw\".');\n }\n\n if (!label) {\n throw new CliError(\"invalid_cli_usage\", 'Provide field label via \"--label\" or \"--raw\".');\n }\n\n const normalizedType = normalizeSchemaFieldType(type);\n assertSupportedSchemaFieldType(normalizedType);\n const input: CreateSchemaFieldInput = {\n ...raw,\n type: normalizedType,\n slug,\n label,\n };\n\n if (options.required !== undefined) {\n input.required = options.required;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n applyFieldDefaultValue(input, options.default);\n\n if (\"config\" in input && isJsonObject(input.config) && isEmptyObject(input.config)) {\n delete input.config;\n }\n\n return input;\n}\n\nfunction readBackendErrorMessage(error: ApiClientError): string | undefined {\n const responseBody =\n typeof error.responseBody === \"object\" && error.responseBody !== null\n ? error.responseBody\n : undefined;\n const envelopeError =\n responseBody && \"error\" in responseBody && typeof responseBody.error === \"object\" && responseBody.error !== null\n ? responseBody.error\n : responseBody;\n\n return (\n (envelopeError && \"message\" in envelopeError && typeof envelopeError.message === \"string\"\n ? envelopeError.message\n : undefined) ??\n (typeof error.responseText === \"string\" && error.responseText.length > 0\n ? error.responseText\n : undefined)\n );\n}\n\nfunction toFieldCreateError(\n error: unknown,\n input: CreateSchemaFieldInput,\n): never {\n if (!(error instanceof ApiClientError)) {\n throw error;\n }\n\n const backendMessage = readBackendErrorMessage(error);\n const isGenericValidationMessage =\n backendMessage === \"Schema payload is invalid. One or more fields are invalid.\" ||\n backendMessage === \"Create field payload is invalid.\";\n\n if (!isGenericValidationMessage) {\n throw error;\n }\n\n throw new CliError(\n \"invalid_cli_usage\",\n buildSchemaFieldCreateValidationMessage(input.type),\n {\n fieldType: input.type,\n status: error.status,\n },\n );\n}\n\nfunction buildFieldUpdateInput(\n currentType: string,\n options: FieldUpdateCommandOptions,\n): UpdateSchemaFieldInput {\n const input: UpdateSchemaFieldInput = {\n ...normalizeSchemaFieldUpdatePayload(\n currentType,\n readRawObject(options.raw, options.rawFile),\n ),\n type: currentType,\n };\n\n if (options.label !== undefined) {\n input.label = options.label;\n }\n\n if (options.required !== undefined) {\n input.required = options.required;\n }\n\n if (options.description !== undefined) {\n input.description = options.description;\n }\n\n applyFieldDefaultValue(input, options.default);\n\n return input;\n}\n\nasync function resolveSchemaSelector(\n api: SchemasApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const schemas = await api.listSchemas();\n const match = schemas.find((schema) => schema.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Schema \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nasync function resolveFieldSelector(\n api: SchemasApi,\n schema: NormalizedUuidOrSlug,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const fields = await api.listFields(schema);\n const match = fields.find((field) => field.slug === selector.value);\n\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Field \"${selector.value}\" not found.`);\n }\n\n return {\n kind: \"uuid\",\n value: match.id,\n };\n}\n\nexport function registerSchemasCommands(\n program: Command,\n options: RegisterSchemasCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const schemas = program.command(\"schemas\").description(\"Manage schemas and schema fields\");\n\n schemas\n .command(\"list\")\n .description(\"List schemas\")\n .action(async function action(this: Command) {\n const { api, json } = createSchemasApi(this, filePath);\n const data = await api.listSchemas();\n\n if (json) {\n emitJson(stdout, \"schemas list\", data, filePath);\n return;\n }\n\n emitSchemasTable(stdout, data);\n });\n\n schemas\n .command(\"get\")\n .description(\"Get a schema by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const data = await api.getSchema(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"schemas get\", data, filePath);\n return;\n }\n\n emitSchemasTable(stdout, [data]);\n });\n\n schemas\n .command(\"create\")\n .description(\"Create a schema\")\n .requiredOption(\"--name <name>\", \"schema name\")\n .requiredOption(\"--slug <slug>\", \"schema slug\")\n .option(\"--auditable\", \"mark schema as auditable\")\n .option(\"--commentable\", \"mark schema as commentable\")\n .action(async function action(\n this: Command,\n commandOptions: SchemaCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas create\", readOnly, \"write\");\n\n const input: CreateSchemaInput = {\n name: commandOptions.name,\n slug: commandOptions.slug,\n auditable: Boolean(commandOptions.auditable),\n commentable: Boolean(commandOptions.commentable),\n };\n const data = await api.createSchema(input);\n\n if (json) {\n emitJson(stdout, \"schemas create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created schema \"${data.slug ?? commandOptions.slug}\".`);\n });\n\n schemas\n .command(\"update\")\n .description(\"Update a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"schema name\")\n .option(\"--slug <slug>\", \"schema slug\")\n .option(\"--auditable <bool>\", \"auditable flag\", parseBooleanFlag)\n .option(\"--commentable <bool>\", \"commentable flag\", parseBooleanFlag)\n .option(\n \"--highlighted-field <field>\",\n \"its value is used as each record's display name in the UI (field uuid or slug)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: SchemaUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n\n const input = buildSchemaUpdateInput(commandOptions);\n\n if (commandOptions.highlightedField !== undefined) {\n const resolvedField = await resolveFieldSelector(\n api,\n resolvedSchema,\n commandOptions.highlightedField,\n );\n input.highlightedField = resolvedField.value;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one schema field to update via \"--name\", \"--slug\", \"--auditable\", \"--commentable\", or \"--highlighted-field\".',\n );\n }\n\n const data = await api.updateSchema(resolvedSchema, input);\n\n if (json) {\n emitJson(stdout, \"schemas update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated schema \"${data.slug ?? schema.value}\".`);\n })\n .addHelpText(\"after\", HIGHLIGHTED_FIELD_HELP);\n\n schemas\n .command(\"set-unique-fields\")\n .description(\"Set or clear the composite unique-field constraint on a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\n \"--field <field>\",\n \"field uuid or slug to include in the unique constraint (repeatable)\",\n collectFieldSelectors,\n [],\n )\n .option(\"--clear\", \"clear the unique constraint (sends an empty field list)\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: SetUniqueFieldsCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas set-unique-fields\", readOnly, \"write\");\n\n const selectors = commandOptions.field ?? [];\n\n if (commandOptions.clear && selectors.length > 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Use either \"--field\" or \"--clear\", not both.',\n );\n }\n\n if (!commandOptions.clear && selectors.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one field via \"--field\", or pass \"--clear\" to remove the unique constraint.',\n );\n }\n\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const fields = selectors.some((selector) => selector.kind === \"slug\")\n ? await api.listFields(resolvedSchema)\n : [];\n const input: SetUniqueFieldsInput = {\n fieldIds: selectors.map((selector) => {\n if (selector.kind === \"uuid\") {\n return selector.value;\n }\n\n const match = fields.find((field) => field.slug === selector.value);\n if (!match || typeof match.id !== \"string\") {\n throw new CliError(\"invalid_cli_usage\", `Field \"${selector.value}\" not found.`);\n }\n\n return match.id;\n }),\n };\n\n const data = await api.setUniqueFields(resolvedSchema, input);\n\n if (json) {\n emitJson(stdout, \"schemas set-unique-fields\", data, filePath);\n return;\n }\n\n if (input.fieldIds.length === 0) {\n writeLine(stdout, `Cleared unique fields on schema \"${schema.value}\".`);\n return;\n }\n\n const count = input.fieldIds.length;\n writeLine(\n stdout,\n `Set unique fields on schema \"${schema.value}\" (${count} field${count === 1 ? \"\" : \"s\"}).`,\n );\n });\n\n schemas\n .command(\"delete\")\n .description(\"Delete a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n\n await api.deleteSchema(resolvedSchema);\n const data = {\n schema: resolvedSchema.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"schemas delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted schema \"${schema.value}\".`);\n });\n\n const fields = schemas.command(\"fields\").description(\"Manage schema fields\");\n\n fields\n .command(\"list\")\n .description(\"List fields for a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, schema: NormalizedUuidOrSlug) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const data = await api.listFields(resolvedSchema);\n\n if (json) {\n emitJson(stdout, \"schemas fields list\", data, filePath);\n return;\n }\n\n emitFieldsTable(stdout, data);\n });\n\n fields\n .command(\"get\")\n .description(\"Get a field by UUID or slug\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n const { api, json } = createSchemasApi(this, filePath);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n const data = await api.getField(resolvedSchema, resolvedField);\n\n if (json) {\n emitJson(stdout, \"schemas fields get\", data, filePath);\n return;\n }\n\n emitFieldsTable(stdout, [data]);\n });\n\n fields\n .command(\"create\")\n .description(`Create a field in a schema.${buildSchemaFieldCreateHelpText()}`)\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--type <type>\", `field type (${formatSchemaFieldTypes()})`)\n .option(\"--slug <slug>\", \"field slug\")\n .option(\"--label <label>\", \"field label\")\n .option(\"--description <text>\", \"field description\")\n .option(\"--required <bool>\", \"required flag\", parseBooleanFlag)\n .option(\"--default <value>\", \"default field value\")\n .option(\"--raw <json>\", 'raw JSON object payload (see type-specific shapes in --help)')\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n commandOptions: FieldCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields create\", readOnly, \"write\");\n const input = buildFieldCreateInput(commandOptions);\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n let data: ApiSchemaField;\n try {\n data = await api.createField(resolvedSchema, input);\n } catch (error) {\n toFieldCreateError(error, input);\n }\n\n if (json) {\n emitJson(stdout, \"schemas fields create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created field \"${data.slug ?? commandOptions.slug}\".`);\n });\n\n fields\n .command(\"update\")\n .description(\"Update a field in a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--label <label>\", \"field label\")\n .option(\"--description <text>\", 'field description (use \"\" to clear)')\n .option(\"--required <bool>\", \"required flag\", parseBooleanFlag)\n .option(\"--default <value>\", \"default field value\")\n .option(\"--raw <json>\", \"raw JSON object payload\")\n .option(\"--raw-file <path>\", \"path to a raw JSON object payload\")\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n commandOptions: FieldUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields update\", readOnly, \"write\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n const currentField = await api.getField(resolvedSchema, resolvedField);\n const currentType =\n typeof currentField.type === \"string\" && currentField.type.length > 0\n ? currentField.type\n : undefined;\n\n if (!currentType) {\n throw new CliError(\"invalid_cli_usage\", `Field \"${field.value}\" is missing type metadata.`);\n }\n\n const input = buildFieldUpdateInput(currentType, commandOptions);\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide at least one field update via \"--label\", \"--description\", \"--required\", \"--default\", \"--raw\", or \"--raw-file\".',\n );\n }\n\n const data = await api.updateField(resolvedSchema, resolvedField, input);\n\n if (json) {\n emitJson(stdout, \"schemas fields update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated field \"${data.slug ?? field.value}\".`);\n });\n\n fields\n .command(\"delete\")\n .description(\"Delete a field from a schema\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .argument(\"<field>\", \"field uuid or slug\", parseUuidOrSlugSelector)\n .action(async function action(\n this: Command,\n schema: NormalizedUuidOrSlug,\n field: NormalizedUuidOrSlug,\n ) {\n const { api, json, readOnly } = createSchemasApi(this, filePath);\n ensureWritable(\"schemas fields delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(api, schema);\n const resolvedField = await resolveFieldSelector(api, resolvedSchema, field);\n\n await api.deleteField(resolvedSchema, resolvedField);\n const data = {\n schema: resolvedSchema.value,\n field: resolvedField.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"schemas fields delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted field \"${field.value}\" from schema \"${schema.value}\".`);\n });\n}\n","import { readFileSync } from \"node:fs\";\n\nimport { Command } from \"commander\";\n\nimport {\n TeamspaceApi,\n type ApiTeamspaceFolder,\n type CreateTeamspaceFolderInput,\n type UpdateTeamspaceFolderInput,\n} from \"../api/teamspace.js\";\nimport { defaultConfigPath } from \"../config.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n createCommandContext,\n emitJson,\n emitTable,\n ensureWritable,\n isEmptyObject,\n parseNonNegativeInteger,\n parseRawJsonObject,\n parseUuidOrSlugSelector,\n writeLine,\n type CommandIo,\n} from \"./shared.js\";\n\nexport interface RegisterTeamspaceCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface FolderListCommandOptions {\n includeResources?: boolean;\n}\n\ninterface FolderCreateCommandOptions {\n name?: string;\n order?: number;\n props?: string;\n propsFile?: string;\n}\n\ninterface FolderUpdateCommandOptions extends FolderCreateCommandOptions {}\n\ninterface ResourcePublishCommandOptions {\n to: NormalizedUuidOrSlug;\n}\n\nfunction createTeamspaceApi(command: Command, filePath: string) {\n const { client, ...runtime } = createCommandContext(command, filePath);\n return {\n api: new TeamspaceApi(client),\n ...runtime,\n };\n}\n\nfunction readRawObject(\n raw: string | undefined,\n rawFile: string | undefined,\n): JsonObject | undefined {\n if (raw && rawFile) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide either \"--props\" or \"--props-file\", not both.',\n );\n }\n\n if (raw) {\n return parseRawJsonObject(raw, \"--props\");\n }\n\n if (rawFile) {\n let contents: string;\n\n try {\n contents = readFileSync(rawFile, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to read props payload from ${rawFile}: ${message}`,\n );\n }\n\n return parseRawJsonObject(contents, `--props-file ${rawFile}`);\n }\n\n return undefined;\n}\n\nfunction buildFolderCreateInput(\n options: FolderCreateCommandOptions,\n): CreateTeamspaceFolderInput {\n if (options.name === undefined) {\n throw new CliError(\"invalid_cli_usage\", 'Provide folder name via \"--name\".');\n }\n\n const input: CreateTeamspaceFolderInput = {\n name: options.name,\n };\n\n if (options.order !== undefined) {\n input.order = options.order;\n }\n\n const props = readRawObject(options.props, options.propsFile);\n\n if (props !== undefined) {\n input.additionalProperties = props;\n }\n\n return input;\n}\n\nfunction buildFolderUpdateInput(\n options: FolderUpdateCommandOptions,\n): UpdateTeamspaceFolderInput {\n const input: UpdateTeamspaceFolderInput = {};\n\n if (options.name !== undefined) {\n input.name = options.name;\n }\n\n if (options.order !== undefined) {\n input.order = options.order;\n }\n\n const props = readRawObject(options.props, options.propsFile);\n\n if (props !== undefined) {\n input.additionalProperties = props;\n }\n\n if (isEmptyObject(input)) {\n throw new CliError(\n \"invalid_cli_usage\",\n 'Provide folder updates via \"--name\", \"--order\", \"--props\", or \"--props-file\".',\n );\n }\n\n return input;\n}\n\nfunction getFolderIdentifier(folder: ApiTeamspaceFolder): string {\n return typeof folder.id === \"string\"\n ? folder.id\n : typeof folder.name === \"string\"\n ? folder.name\n : \"unknown\";\n}\n\nfunction buildFolderLookup(\n folders: readonly ApiTeamspaceFolder[],\n selector: NormalizedUuidOrSlug,\n): NormalizedUuidOrSlug {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n const folderId = matches[0]?.id;\n\n if (typeof folderId === \"string\" && folderId.length > 0) {\n return {\n kind: \"uuid\",\n value: folderId,\n };\n }\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nfunction findFolderEntity(\n folders: readonly ApiTeamspaceFolder[],\n selector: NormalizedUuidOrSlug,\n): ApiTeamspaceFolder {\n if (selector.kind === \"uuid\") {\n const match = folders.find((folder) => folder.id === selector.value);\n\n if (match) {\n return match;\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n }\n\n const matches = folders.filter((folder) => folder.name === selector.value);\n\n if (matches.length === 1) {\n return matches[0] as ApiTeamspaceFolder;\n }\n\n if (matches.length > 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Folder \"${selector.value}\" is ambiguous. Found ${matches.length} matches.`,\n );\n }\n\n throw new CliError(\"invalid_cli_usage\", `Folder \"${selector.value}\" was not found.`);\n}\n\nasync function resolveFolderSelector(\n api: TeamspaceApi,\n selector: NormalizedUuidOrSlug,\n): Promise<NormalizedUuidOrSlug> {\n if (selector.kind === \"uuid\") {\n return selector;\n }\n\n const folders = await api.listFolders(false);\n return buildFolderLookup(folders, selector);\n}\n\nexport function registerTeamspaceCommands(\n program: Command,\n options: RegisterTeamspaceCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = options.stdout ?? process.stdout;\n const teamspace = program.command(\"teamspace\").description(\"Manage teamspace folders and resources\");\n\n const folders = teamspace.command(\"folders\").description(\"Manage teamspace folders\");\n\n folders\n .command(\"list\")\n .description(\"List teamspace folders\")\n .option(\"--include-resources\", \"include the published resources inside each folder\")\n .action(async function action(this: Command, commandOptions: FolderListCommandOptions) {\n const { api, json } = createTeamspaceApi(this, filePath);\n const data = await api.listFolders(Boolean(commandOptions.includeResources));\n\n if (json) {\n emitJson(stdout, \"teamspace folders list\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n folders\n .command(\"get\")\n .description(\"Get a teamspace folder by exact name or UUID\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--include-resources\", \"include the published resources inside each folder\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderListCommandOptions,\n ) {\n const { api, json } = createTeamspaceApi(this, filePath);\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const allFolders = await api.listFolders(Boolean(commandOptions.includeResources));\n const data = findFolderEntity(allFolders, resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"teamspace folders get\", data, filePath);\n return;\n }\n\n emitTable(stdout, data);\n });\n\n folders\n .command(\"create\")\n .description(\"Create a teamspace folder\")\n .requiredOption(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\", parseNonNegativeInteger)\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"icon\\\":\\\"folder-users\\\",\\\"color\\\":\\\"gold\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(\n this: Command,\n commandOptions: FolderCreateCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders create\", readOnly, \"write\");\n\n const data = await api.createFolder(buildFolderCreateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"teamspace folders create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created folder \"${getFolderIdentifier(data)}\".`);\n });\n\n folders\n .command(\"update\")\n .description(\"Update a teamspace folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .option(\"--name <name>\", \"folder name\")\n .option(\"--order <n>\", \"display order (lower values appear first)\", parseNonNegativeInteger)\n .option(\"--props <json>\", \"additionalProperties JSON: free-form client metadata, e.g. {\\\"icon\\\":\\\"folder-users\\\",\\\"color\\\":\\\"gold\\\"}\")\n .option(\"--props-file <path>\", \"path to a file with the additionalProperties JSON\")\n .action(async function action(\n this: Command,\n folder: NormalizedUuidOrSlug,\n commandOptions: FolderUpdateCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders update\", readOnly, \"write\");\n\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const data = await api.updateFolder(resolvedFolder, buildFolderUpdateInput(commandOptions));\n\n if (json) {\n emitJson(stdout, \"teamspace folders update\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Updated folder \"${getFolderIdentifier(data)}\".`);\n });\n\n folders\n .command(\"delete\")\n .description(\"Delete a teamspace folder\")\n .argument(\"<folder>\", \"folder UUID or exact name\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, folder: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace folders delete\", readOnly, \"destructive\");\n\n const resolvedFolder = await resolveFolderSelector(api, folder);\n const data = await api.deleteFolder(resolvedFolder);\n\n if (json) {\n emitJson(stdout, \"teamspace folders delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted folder \"${resolvedFolder.value}\".`);\n });\n\n const resources = teamspace.command(\"resources\").description(\"Manage teamspace resources\");\n\n resources\n .command(\"publish\")\n .description(\n \"Publish a resource to a teamspace folder. Publishing an already-published resource moves it to the new folder.\",\n )\n .argument(\"<resource>\", \"schema UUID, schema slug, or display UUID\", parseUuidOrSlugSelector)\n .requiredOption(\n \"--to <folder>\",\n \"target folder UUID or exact name (root folder UUID is 00000000-0000-0000-0000-000000000000)\",\n parseUuidOrSlugSelector,\n )\n .action(async function action(\n this: Command,\n resource: NormalizedUuidOrSlug,\n commandOptions: ResourcePublishCommandOptions,\n ) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace resources publish\", readOnly, \"write\");\n\n const folder = await resolveFolderSelector(api, commandOptions.to);\n const data = await api.publishResource({\n resourceId: resource.value,\n targetFolderId: folder.value,\n });\n\n if (json) {\n emitJson(stdout, \"teamspace resources publish\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Published resource \"${resource.value}\" to folder \"${folder.value}\".`);\n });\n\n resources\n .command(\"unpublish\")\n .description(\"Unpublish a resource from teamspace (removes it from its shared folder)\")\n .argument(\"<resource>\", \"schema UUID, schema slug, or display UUID\", parseUuidOrSlugSelector)\n .action(async function action(this: Command, resource: NormalizedUuidOrSlug) {\n const { api, json, readOnly } = createTeamspaceApi(this, filePath);\n ensureWritable(\"teamspace resources unpublish\", readOnly, \"write\");\n\n const data = await api.unpublishResource(resource.value);\n\n if (json) {\n emitJson(stdout, \"teamspace resources unpublish\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Unpublished resource \"${resource.value}\".`);\n });\n}\n","import { ApiClient } from \"../client.js\";\nimport type { NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport type { JsonObject } from \"../types.js\";\n\nexport interface ApiTeamspaceResource {\n [key: string]: unknown;\n id?: string;\n name?: string;\n}\n\nexport interface ApiTeamspaceFolder {\n [key: string]: unknown;\n id?: string;\n name?: string;\n order?: number;\n additionalProperties?: JsonObject;\n resources?: ApiTeamspaceResource[];\n}\n\nexport interface CreateTeamspaceFolderInput {\n [key: string]: unknown;\n name: string;\n order?: number;\n additionalProperties?: JsonObject;\n}\n\nexport interface UpdateTeamspaceFolderInput {\n [key: string]: unknown;\n name?: string;\n order?: number;\n additionalProperties?: JsonObject;\n}\n\nexport interface PublishTeamspaceResourceInput {\n resourceId: string;\n targetFolderId: string;\n}\n\nfunction jsonOptions(body: unknown, method: string): RequestInit {\n return {\n method,\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n };\n}\n\nexport class TeamspaceApi {\n constructor(private readonly client: ApiClient) {}\n\n listFolders(includeResources: boolean = false): Promise<ApiTeamspaceFolder[]> {\n const params = new URLSearchParams();\n\n if (includeResources) {\n params.set(\"include\", \"resources\");\n }\n\n const path = \"/api/v2/teamspaces/folders\";\n const queryString = params.toString();\n\n return this.client.getJson<ApiTeamspaceFolder[]>(\n queryString ? `${path}?${queryString}` : path,\n );\n }\n\n createFolder(input: CreateTeamspaceFolderInput): Promise<ApiTeamspaceFolder> {\n return this.client.requestJson<ApiTeamspaceFolder>(\n \"/api/v2/teamspaces/folders\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n updateFolder(\n folder: NormalizedUuidOrSlug,\n input: UpdateTeamspaceFolderInput,\n ): Promise<ApiTeamspaceFolder> {\n return this.client.requestJson<ApiTeamspaceFolder>(\n `/api/v2/teamspaces/folders/${folder.value}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/teamspaces/folders/${folder.value}`,\n { method: \"DELETE\" },\n );\n }\n\n publishResource(\n input: PublishTeamspaceResourceInput,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/teamspaces/resources:publish\",\n jsonOptions(input, \"POST\"),\n );\n }\n\n unpublishResource(resourceId: string): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n \"/api/v2/teamspaces/resources:unpublish\",\n jsonOptions({ resourceId }, \"POST\"),\n );\n }\n}\n","import type { Command } from \"commander\";\n\nimport { readConfigIfExists } from \"../config.js\";\n\nexport interface CompletionRequest {\n words: readonly string[];\n cwordIndex: number;\n}\n\nexport interface CompletionDeps {\n configPath?: string;\n readProfileNames?: (configPath: string | undefined) => readonly string[];\n}\n\nfunction readProfileNamesFromConfig(configPath: string | undefined): readonly string[] {\n try {\n const config = readConfigIfExists(configPath);\n if (!config) {\n return [];\n }\n return Object.keys(config.profiles).sort();\n } catch {\n return [];\n }\n}\n\nfunction findSubcommand(command: Command, name: string): Command | undefined {\n return command.commands.find((sub) => {\n if (sub.name() === name) {\n return true;\n }\n const aliases = sub.aliases();\n return aliases.includes(name);\n });\n}\n\nfunction collectFlagsThatTakeValues(root: Command): Set<string> {\n const flags = new Set<string>();\n const walk = (command: Command): void => {\n for (const option of command.options) {\n if (!option.required && !option.optional) {\n continue;\n }\n if (option.long) {\n flags.add(option.long);\n }\n if (option.short) {\n flags.add(option.short);\n }\n }\n for (const sub of command.commands) {\n walk(sub);\n }\n };\n walk(root);\n return flags;\n}\n\nfunction descend(root: Command, words: readonly string[]): Command {\n const flagsWithValues = collectFlagsThatTakeValues(root);\n let current = root;\n let index = 0;\n\n while (index < words.length) {\n const word = words[index]!;\n if (word.startsWith(\"-\")) {\n const [flagPart] = word.split(\"=\", 1);\n if (flagPart && flagsWithValues.has(flagPart) && !word.includes(\"=\")) {\n index += 2;\n } else {\n index += 1;\n }\n continue;\n }\n const next = findSubcommand(current, word);\n if (!next) {\n break;\n }\n current = next;\n index += 1;\n }\n\n return current;\n}\n\nfunction collectVisibleSubcommands(command: Command): readonly string[] {\n const names: string[] = [];\n for (const sub of command.commands) {\n if (sub.name().startsWith(\"__\")) {\n continue;\n }\n names.push(sub.name());\n }\n return names;\n}\n\nfunction collectVisibleLongFlags(command: Command): readonly string[] {\n const flags: string[] = [];\n let current: Command | null = command;\n\n while (current) {\n for (const option of current.options) {\n if (option.hidden || !option.long) {\n continue;\n }\n if (!flags.includes(option.long)) {\n flags.push(option.long);\n }\n }\n current = current.parent;\n }\n\n if (!flags.includes(\"--help\")) {\n flags.push(\"--help\");\n }\n\n return flags;\n}\n\nexport function getCompletions(\n program: Command,\n request: CompletionRequest,\n deps: CompletionDeps = {},\n): string[] {\n const { words, cwordIndex } = request;\n const safeIndex = Math.max(0, Math.min(cwordIndex, words.length));\n const current = words[safeIndex] ?? \"\";\n const prevToken = safeIndex > 0 ? words[safeIndex - 1] : undefined;\n const readProfiles = deps.readProfileNames ?? readProfileNamesFromConfig;\n\n if (prevToken === \"--profile\" || prevToken === \"-p\") {\n try {\n return readProfiles(deps.configPath)\n .filter((name) => name.startsWith(current))\n .slice()\n .sort();\n } catch {\n return [];\n }\n }\n\n const tokensBeforeCurrent = words.slice(1, safeIndex);\n const command = descend(program, tokensBeforeCurrent);\n\n const candidates = new Set<string>();\n\n if (current.startsWith(\"-\")) {\n for (const flag of collectVisibleLongFlags(command)) {\n if (flag.startsWith(current)) {\n candidates.add(flag);\n }\n }\n return [...candidates].sort();\n }\n\n for (const subcommand of collectVisibleSubcommands(command)) {\n if (subcommand.startsWith(current)) {\n candidates.add(subcommand);\n }\n }\n for (const flag of collectVisibleLongFlags(command)) {\n if (flag.startsWith(current)) {\n candidates.add(flag);\n }\n }\n\n return [...candidates].sort();\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport { renderScript, type SupportedShell } from \"./scripts.js\";\n\nexport const SUPPORTED_SHELLS: readonly SupportedShell[] = [\n \"bash\",\n \"zsh\",\n \"fish\",\n \"powershell\",\n];\n\nconst BLOCK_BEGIN = \"# >>> zinkee completion >>>\";\nconst BLOCK_END = \"# <<< zinkee completion <<<\";\n\nexport interface InstallEnvironment {\n home: string;\n platform: NodeJS.Platform;\n shellEnv: string | undefined;\n resolvePowerShellProfile?: () => string | undefined;\n}\n\nexport interface InstallTarget {\n shell: SupportedShell;\n scriptPath: string;\n rcPath?: string;\n}\n\nexport interface InstallResult {\n shell: SupportedShell;\n scriptPath: string;\n rcPath?: string;\n rcUpdated: boolean;\n}\n\nexport class CompletionShellError extends Error {\n override name = \"CompletionShellError\";\n}\n\nfunction defaultPowerShellProfile(env: InstallEnvironment): string | undefined {\n for (const exe of [\"pwsh\", \"powershell.exe\"]) {\n try {\n const out = execFileSync(exe, [\"-NoProfile\", \"-Command\", \"$PROFILE\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n const path = out.trim();\n if (path) {\n return path;\n }\n } catch {\n // try the next executable\n }\n }\n\n if (env.platform === \"win32\") {\n return join(env.home, \"Documents\", \"PowerShell\", \"Microsoft.PowerShell_profile.ps1\");\n }\n return join(env.home, \".config\", \"powershell\", \"Microsoft.PowerShell_profile.ps1\");\n}\n\nexport function detectShell(env: InstallEnvironment): SupportedShell {\n const fromEnv = env.shellEnv;\n if (fromEnv) {\n const name = basename(fromEnv).toLowerCase().replace(/\\.exe$/, \"\");\n if (name === \"bash\") {\n return \"bash\";\n }\n if (name === \"zsh\") {\n return \"zsh\";\n }\n if (name === \"fish\") {\n return \"fish\";\n }\n if (name === \"pwsh\" || name === \"powershell\") {\n return \"powershell\";\n }\n }\n if (env.platform === \"win32\") {\n return \"powershell\";\n }\n throw new CompletionShellError(\n `Could not detect a supported shell from $SHELL=${fromEnv ?? \"\"}. ` +\n `Pass one of: ${SUPPORTED_SHELLS.join(\", \")}.`,\n );\n}\n\nexport function parseShell(value: string): SupportedShell {\n const normalized = value.toLowerCase();\n if (\n normalized === \"bash\" ||\n normalized === \"zsh\" ||\n normalized === \"fish\" ||\n normalized === \"powershell\"\n ) {\n return normalized;\n }\n if (normalized === \"pwsh\") {\n return \"powershell\";\n }\n throw new CompletionShellError(\n `Unsupported shell \"${value}\". Supported: ${SUPPORTED_SHELLS.join(\", \")}.`,\n );\n}\n\nexport function resolveTarget(\n shell: SupportedShell,\n env: InstallEnvironment,\n): InstallTarget {\n switch (shell) {\n case \"bash\":\n return {\n shell,\n scriptPath: join(env.home, \".bash_completions\", \"zinkee.sh\"),\n rcPath: join(env.home, \".bashrc\"),\n };\n case \"zsh\":\n return {\n shell,\n scriptPath: join(env.home, \".zfunc\", \"_zinkee\"),\n rcPath: join(env.home, \".zshrc\"),\n };\n case \"fish\":\n return {\n shell,\n scriptPath: join(env.home, \".config\", \"fish\", \"completions\", \"zinkee.fish\"),\n };\n case \"powershell\": {\n const resolver = env.resolvePowerShellProfile ?? (() => defaultPowerShellProfile(env));\n const profilePath = resolver();\n if (!profilePath) {\n throw new CompletionShellError(\n \"Could not resolve PowerShell $PROFILE path. Install PowerShell or use --show-completion.\",\n );\n }\n return {\n shell,\n scriptPath: profilePath,\n rcPath: profilePath,\n };\n }\n }\n}\n\nfunction buildRcSnippet(shell: SupportedShell, scriptPath: string): string {\n switch (shell) {\n case \"bash\":\n return `source \"${scriptPath}\"`;\n case \"zsh\":\n return [\n `fpath=(\"${dirname(scriptPath)}\" $fpath)`,\n \"autoload -Uz compinit && compinit\",\n ].join(\"\\n\");\n default:\n return \"\";\n }\n}\n\nfunction applyBlock(existing: string, block: string): string {\n const wrapped = `${BLOCK_BEGIN}\\n${block.trimEnd()}\\n${BLOCK_END}\\n`;\n const blockPattern = new RegExp(\n `${BLOCK_BEGIN.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\\\\s\\\\S]*?${BLOCK_END.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\n?`,\n \"m\",\n );\n if (blockPattern.test(existing)) {\n return existing.replace(blockPattern, wrapped);\n }\n const separator = existing.length === 0 || existing.endsWith(\"\\n\") ? \"\" : \"\\n\";\n return `${existing}${separator}${wrapped}`;\n}\n\nfunction readFileOrEmpty(path: string): string {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\"\n ) {\n return \"\";\n }\n throw error;\n }\n}\n\nfunction writeFileEnsuringDir(path: string, content: string): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content, \"utf8\");\n}\n\nexport function installCompletion(\n shell: SupportedShell,\n env: InstallEnvironment,\n): InstallResult {\n const target = resolveTarget(shell, env);\n const script = renderScript(shell);\n\n if (shell === \"powershell\") {\n const existing = readFileOrEmpty(target.scriptPath);\n const updated = applyBlock(existing, script);\n writeFileEnsuringDir(target.scriptPath, updated);\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.scriptPath,\n rcUpdated: true,\n };\n }\n\n writeFileEnsuringDir(target.scriptPath, script);\n\n if (!target.rcPath) {\n return {\n shell,\n scriptPath: target.scriptPath,\n rcUpdated: false,\n };\n }\n\n const snippet = buildRcSnippet(shell, target.scriptPath);\n if (!snippet) {\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: false,\n };\n }\n\n const existingRc = readFileOrEmpty(target.rcPath);\n const updatedRc = applyBlock(existingRc, snippet);\n if (updatedRc !== existingRc) {\n writeFileEnsuringDir(target.rcPath, updatedRc);\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: true,\n };\n }\n\n return {\n shell,\n scriptPath: target.scriptPath,\n rcPath: target.rcPath,\n rcUpdated: false,\n };\n}\n\nexport function currentEnvironment(): InstallEnvironment {\n return {\n home: homedir(),\n platform: platform(),\n shellEnv: process.env.SHELL,\n };\n}\n","export type SupportedShell = \"bash\" | \"zsh\" | \"fish\" | \"powershell\";\n\nconst PROGRAM = \"zinkee\";\nconst ENV_VAR = \"_ZINKEE_COMPLETE\";\n\nexport function renderBashScript(): string {\n return `_zinkee_completion() {\n local IFS=$'\\\\n'\n local response\n\n response=$(env COMP_WORDS=\"\\${COMP_WORDS[*]}\" COMP_CWORD=$COMP_CWORD ${ENV_VAR}=bash_complete ${PROGRAM} 2>/dev/null)\n\n COMPREPLY=( \\${response} )\n return 0\n}\n\ncomplete -o default -F _zinkee_completion ${PROGRAM}\n`;\n}\n\nexport function renderZshScript(): string {\n return `#compdef ${PROGRAM}\n\n_zinkee_completion() {\n local -a response\n (( ! $+commands[${PROGRAM}] )) && return 1\n\n response=(\"\\${(@f)$(env COMP_WORDS=\"\\${words[*]}\" COMP_CWORD=$((CURRENT - 1)) ${ENV_VAR}=zsh_complete ${PROGRAM} 2>/dev/null)}\")\n\n if [ -n \"$response\" ]; then\n compadd -U -V unsorted -a response\n fi\n}\n\nif [[ $zsh_eval_context[-1] == loadautofunc ]]; then\n _zinkee_completion \"$@\"\nelse\n compdef _zinkee_completion ${PROGRAM}\nfi\n`;\n}\n\nexport function renderFishScript(): string {\n return `function __zinkee_completion\n set -l tokens (commandline -opc) (commandline -ct)\n set -l cword (math (count $tokens) - 1)\n set -l joined (string join \" \" -- $tokens)\n\n env COMP_WORDS=\"$joined\" COMP_CWORD=$cword ${ENV_VAR}=fish_complete ${PROGRAM} 2>/dev/null\nend\n\ncomplete --no-files --command ${PROGRAM} --arguments '(__zinkee_completion)'\n`;\n}\n\nexport function renderPowerShellScript(): string {\n return `Register-ArgumentCompleter -Native -CommandName ${PROGRAM} -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n\n $tokens = @($commandAst.CommandElements | ForEach-Object { $_.ToString() })\n $cword = [Math]::Max(0, $tokens.Count - 1)\n\n $env:COMP_WORDS = ($tokens -join ' ')\n $env:COMP_CWORD = $cword\n $env:${ENV_VAR} = 'powershell_complete'\n\n try {\n & ${PROGRAM} 2>$null | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n } finally {\n Remove-Item Env:COMP_WORDS -ErrorAction SilentlyContinue\n Remove-Item Env:COMP_CWORD -ErrorAction SilentlyContinue\n Remove-Item Env:${ENV_VAR} -ErrorAction SilentlyContinue\n }\n}\n`;\n}\n\nexport function renderScript(shell: SupportedShell): string {\n switch (shell) {\n case \"bash\":\n return renderBashScript();\n case \"zsh\":\n return renderZshScript();\n case \"fish\":\n return renderFishScript();\n case \"powershell\":\n return renderPowerShellScript();\n }\n}\n","import type { Writable } from \"node:stream\";\n\nimport { buildProgram } from \"../program.js\";\nimport { getCompletions } from \"./engine.js\";\nimport {\n CompletionShellError,\n currentEnvironment,\n detectShell,\n installCompletion,\n parseShell,\n type InstallEnvironment,\n} from \"./install.js\";\nimport { renderScript, type SupportedShell } from \"./scripts.js\";\n\nexport const COMPLETION_ENV_VAR = \"_ZINKEE_COMPLETE\";\n\ninterface Stream {\n write(chunk: string): unknown;\n}\n\nfunction getStream(stream: Stream | undefined, fallback: NodeJS.WriteStream): Stream {\n return stream ?? (fallback as unknown as Writable);\n}\n\nfunction parseEnvWords(env: NodeJS.ProcessEnv): string[] {\n const raw = env.COMP_WORDS ?? \"\";\n if (raw.trim().length === 0) {\n return [];\n }\n return raw.split(/\\s+/).filter((token) => token.length > 0);\n}\n\nfunction parseEnvCwordIndex(env: NodeJS.ProcessEnv): number {\n const raw = env.COMP_CWORD ?? \"0\";\n const parsed = Number.parseInt(raw, 10);\n if (Number.isNaN(parsed) || parsed < 0) {\n return 0;\n }\n return parsed;\n}\n\nexport function isCompletionRequest(env: NodeJS.ProcessEnv = process.env): boolean {\n return typeof env[COMPLETION_ENV_VAR] === \"string\" && env[COMPLETION_ENV_VAR]!.length > 0;\n}\n\nexport function runCompletionRequest(\n env: NodeJS.ProcessEnv = process.env,\n stdout?: Stream,\n): void {\n const out = getStream(stdout, process.stdout);\n try {\n const program = buildProgram();\n const candidates = getCompletions(program, {\n words: parseEnvWords(env),\n cwordIndex: parseEnvCwordIndex(env),\n });\n if (candidates.length > 0) {\n out.write(`${candidates.join(\"\\n\")}\\n`);\n }\n } catch {\n // Completion must never crash the user's shell. Swallow.\n }\n}\n\nexport interface CompletionFlagRequest {\n mode: \"install\" | \"show\";\n shellOverride?: string;\n}\n\nexport function extractCompletionFlag(argv: readonly string[]): CompletionFlagRequest | null {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (!token) {\n continue;\n }\n if (token === \"--install-completion\" || token === \"--show-completion\") {\n const mode = token === \"--install-completion\" ? \"install\" : \"show\";\n const next = argv[index + 1];\n const shellOverride = next && !next.startsWith(\"-\") ? next : undefined;\n return { mode, shellOverride };\n }\n if (token.startsWith(\"--install-completion=\")) {\n const value = token.slice(\"--install-completion=\".length);\n return { mode: \"install\", shellOverride: value || undefined };\n }\n if (token.startsWith(\"--show-completion=\")) {\n const value = token.slice(\"--show-completion=\".length);\n return { mode: \"show\", shellOverride: value || undefined };\n }\n }\n return null;\n}\n\nfunction resolveShell(\n request: CompletionFlagRequest,\n env: InstallEnvironment,\n): SupportedShell {\n if (request.shellOverride) {\n return parseShell(request.shellOverride);\n }\n return detectShell(env);\n}\n\nexport interface CompletionFlagDeps {\n environment?: InstallEnvironment;\n stdout?: Stream;\n stderr?: Stream;\n}\n\nexport function handleCompletionFlag(\n request: CompletionFlagRequest,\n deps: CompletionFlagDeps = {},\n): number {\n const env = deps.environment ?? currentEnvironment();\n const out = getStream(deps.stdout, process.stdout);\n const err = getStream(deps.stderr, process.stderr);\n\n let shell: SupportedShell;\n try {\n shell = resolveShell(request, env);\n } catch (error) {\n const message = error instanceof CompletionShellError ? error.message : String(error);\n err.write(`${message}\\n`);\n return 1;\n }\n\n if (request.mode === \"show\") {\n out.write(renderScript(shell));\n return 0;\n }\n\n try {\n const result = installCompletion(shell, env);\n err.write(`zinkee completion installed for ${shell}.\\n`);\n err.write(` script: ${result.scriptPath}\\n`);\n if (result.rcPath && result.rcPath !== result.scriptPath) {\n err.write(\n result.rcUpdated\n ? ` updated: ${result.rcPath}\\n`\n : ` unchanged: ${result.rcPath}\\n`,\n );\n }\n err.write(`Restart your shell or open a new session to enable completion.\\n`);\n return 0;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n err.write(`Failed to install zinkee completion: ${message}\\n`);\n return 1;\n }\n}\n","#!/usr/bin/env node\n\nimport { runCli, isExecutedAsEntry } from \"./cli-runner.js\";\nexport { buildProgram, type BuildProgramOptions } from \"./program.js\";\n\nif (isExecutedAsEntry(process.argv[1], import.meta.url)) {\n await runCli(process.argv);\n}\n"],"mappings":"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","names":["Command","readFileSync","readFileSync","segment","field","comparator","jsonOptions","readFileSync","InvalidArgumentError","jsonOptions","segment","InvalidArgumentError","readRawObject","readFileSync","layout","jsonOptions","dirname","join","destination","join","dirname","parseJsonValue","readJsonObjectOption","basename","basename","readFileSync","jsonOptions","readFileSync","resolveFolder","folderRows","readFileSync","InvalidArgumentError","jsonOptions","jsonOptions","InvalidArgumentError","readFileSync","records","InvalidArgumentError","InvalidArgumentError","resolveSchemaSelector","fields","readFileSync","jsonOptions","readRawObject","readFileSync","resolveFolderSelector","require","Command","mkdirSync","readFileSync","writeFileSync","homedir","basename","dirname","join","join","basename","dirname","readFileSync","mkdirSync","writeFileSync","homedir"]}