zinkee 0.1.30 → 0.1.32

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/command-registry.ts","../src/utils/argv-rewrite.ts","../src/client.ts","../src/utils/output.ts","../src/utils/errors.ts","../src/utils/schema-fields.ts","../src/utils/examples.ts","../src/cli-examples.ts","../src/program.ts","../src/config.ts","../src/commands/config.ts","../src/commands/automations.ts","../src/api/automations.ts","../src/parsers/kv.ts","../src/parsers/selectors.ts","../src/runtime-context.ts","../src/commands/comments.ts","../src/api/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/commands/files.ts","../src/api/files.ts","../src/commands/logs.ts","../src/api/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 { commandRegistry } from \"./command-registry.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\nclass ExampleDisplayed extends Error {\n override name = \"ExampleDisplayed\";\n}\n\nfunction hasJsonOutput(argv: readonly string[]): boolean {\n return argv.includes(\"--json\");\n}\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 showExamples(\n exampleRequest.commandName,\n exampleRequest.json,\n undefined,\n exampleRequest.filters,\n );\n throw new ExampleDisplayed();\n }\n\n const rewrittenArgv = hoistGlobalOptions(argv, optionMeta, commandRegistry);\n await program.parseAsync(rewrittenArgv);\n } catch (error) {\n if (error instanceof ExampleDisplayed) {\n process.exitCode = 0;\n return;\n }\n\n const exitCode = getExitCode(error);\n\n if (hasJsonOutput(argv)) {\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 {\n CommandAccessLevel,\n CommandMeta,\n CommandOutputCapability,\n} from \"./types.js\";\n\nexport type {\n CommandAccessLevel,\n CommandMeta,\n CommandOutputCapability,\n} from \"./types.js\";\n\nconst readOutput: CommandOutputCapability = \"table-json\";\nconst writeOutput: CommandOutputCapability = \"json-only\";\n\nexport const commandRegistry = {\n \"config path\": {\n command: \"config path\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"config show\": {\n command: \"config show\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"config validate\": {\n command: \"config validate\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"automations folders list\": {\n command: \"automations folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations folders create\": {\n command: \"automations folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders update\": {\n command: \"automations folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders delete\": {\n command: \"automations folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders move\": {\n command: \"automations folders move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations list\": {\n command: \"automations list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations get\": {\n command: \"automations get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations create\": {\n command: \"automations create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations update\": {\n command: \"automations update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations delete\": {\n command: \"automations delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations activate\": {\n command: \"automations activate\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations deactivate\": {\n command: \"automations deactivate\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations trigger get\": {\n command: \"automations trigger get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations trigger set\": {\n command: \"automations trigger set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions list\": {\n command: \"automations actions list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations actions add\": {\n command: \"automations actions add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions update\": {\n command: \"automations actions update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions delete\": {\n command: \"automations actions delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations flow get\": {\n command: \"automations flow get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations flow set\": {\n command: \"automations flow set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations webhook get\": {\n command: \"automations webhook get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations webhook set\": {\n command: \"automations webhook set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations webhook delete\": {\n command: \"automations webhook delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations plugins list\": {\n command: \"automations plugins list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations plugins get\": {\n command: \"automations plugins get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections list\": {\n command: \"automations connections list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections get\": {\n command: \"automations connections get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections create\": {\n command: \"automations connections create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations connections update\": {\n command: \"automations connections update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations connections delete\": {\n command: \"automations connections delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays list\": {\n command: \"displays list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays get\": {\n command: \"displays get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays create\": {\n command: \"displays create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays update\": {\n command: \"displays update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays delete\": {\n command: \"displays delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders list\": {\n command: \"displays folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays folders create\": {\n command: \"displays folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders update\": {\n command: \"displays folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders delete\": {\n command: \"displays folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders move\": {\n command: \"displays folders move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays layout get\": {\n command: \"displays layout get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays layout update\": {\n command: \"displays layout update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs list\": {\n command: \"displays tabs list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays tabs create\": {\n command: \"displays tabs create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs update\": {\n command: \"displays tabs update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs delete\": {\n command: \"displays tabs delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays variables list\": {\n command: \"displays variables list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays variables get\": {\n command: \"displays variables get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays variables create\": {\n command: \"displays variables create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays variables update\": {\n command: \"displays variables update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays variables delete\": {\n command: \"displays variables delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays widgets list\": {\n command: \"displays widgets list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays widgets get\": {\n command: \"displays widgets get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays widgets create\": {\n command: \"displays widgets create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays widgets update\": {\n command: \"displays widgets update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays widgets delete\": {\n command: \"displays widgets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets list\": {\n command: \"displays navigation-targets list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays navigation-targets create\": {\n command: \"displays navigation-targets create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets update\": {\n command: \"displays navigation-targets update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets delete\": {\n command: \"displays navigation-targets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays cross-widget-filter get\": {\n command: \"displays cross-widget-filter get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays cross-widget-filter set\": {\n command: \"displays cross-widget-filter set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays cross-widget-filter delete\": {\n command: \"displays cross-widget-filter delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates list\": {\n command: \"document-templates list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"document-templates get\": {\n command: \"document-templates get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"document-templates create\": {\n command: \"document-templates create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"document-templates update\": {\n command: \"document-templates update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates delete\": {\n command: \"document-templates delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets add\": {\n command: \"document-templates assets add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets delete\": {\n command: \"document-templates assets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets download\": {\n command: \"document-templates assets download\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"binary\",\n },\n \"files upload\": {\n command: \"files upload\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"files download\": {\n command: \"files download\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"binary\",\n },\n \"files delete\": {\n command: \"files delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"files storage\": {\n command: \"files storage\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders list\": {\n command: \"navigation folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders get\": {\n command: \"navigation folders get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders create\": {\n command: \"navigation folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation folders update\": {\n command: \"navigation folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation folders delete\": {\n command: \"navigation folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation resources move\": {\n command: \"navigation resources move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles list\": {\n command: \"profiles list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"profiles get\": {\n command: \"profiles get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"profiles use\": {\n command: \"profiles use\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles add\": {\n command: \"profiles add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles update\": {\n command: \"profiles update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles remove\": {\n command: \"profiles remove\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas list\": {\n command: \"schemas list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas get\": {\n command: \"schemas get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas create\": {\n command: \"schemas create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas update\": {\n command: \"schemas update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas delete\": {\n command: \"schemas delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas fields list\": {\n command: \"schemas fields list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas fields get\": {\n command: \"schemas fields get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas fields create\": {\n command: \"schemas fields create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"schemas fields update\": {\n command: \"schemas fields update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"schemas fields delete\": {\n command: \"schemas fields delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"records list\": {\n command: \"records list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"records query\": {\n command: \"records query\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: true,\n output: readOutput,\n },\n \"records get\": {\n command: \"records get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"records create\": {\n command: \"records create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"records update\": {\n command: \"records update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"records delete\": {\n command: \"records delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"records clear\": {\n command: \"records clear\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"comments list\": {\n command: \"comments list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"comments create\": {\n command: \"comments create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"logs list\": {\n command: \"logs list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders list\": {\n command: \"teamspace folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders get\": {\n command: \"teamspace folders get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders create\": {\n command: \"teamspace folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace folders update\": {\n command: \"teamspace folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace folders delete\": {\n command: \"teamspace folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace resources publish\": {\n command: \"teamspace resources publish\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace resources unpublish\": {\n command: \"teamspace resources unpublish\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n} as const satisfies Record<string, CommandMeta>;\n\nexport type CommandName = keyof typeof commandRegistry;\n\nexport function getCommandMeta(command: string): CommandMeta | undefined {\n return command in commandRegistry\n ? commandRegistry[command as CommandName]\n : undefined;\n}\n\nexport function listCommandMeta(): readonly CommandMeta[] {\n return Object.values(commandRegistry);\n}\n\nexport function isCommandAllowedInReadOnly(command: string): boolean {\n const meta = getCommandMeta(command);\n\n return meta ? meta.accessLevel === \"read\" : true;\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}\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\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 localOptionsByCommand.set(getCommandPath(command), localFlags);\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 };\n}\n\nexport function createDefaultOptionMetadata(): OptionMetadata {\n return {\n valueFlags: new Set([\n \"--profile\",\n \"--base-url\",\n \"--api-key\",\n \"--install-completion\",\n \"--show-completion\",\n ]),\n booleanFlags: new Set([\n \"--read-only\",\n \"--json\",\n \"--example\",\n \"--help\",\n ]),\n localOptionsByCommand: new Map(),\n };\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 registry: Record<string, unknown>,\n): CommandPathMatch | null {\n if (operands.length === 0) return null;\n\n const commandsByLength = Object.keys(registry).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 registry: Record<string, unknown>,\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, registry);\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","export interface ApiClientOptions {\n baseUrl: string;\n apiKey?: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n}\n\nexport type ApiClientErrorCode =\n | \"network_error\"\n | \"http_error\"\n | \"timeout\"\n | \"invalid_json\";\n\nexport interface ApiClientErrorDetails {\n url: string;\n method: string;\n status?: number;\n responseBody?: unknown;\n responseText?: string;\n cause?: unknown;\n}\n\nexport class ApiClientError extends Error {\n override name = \"ApiClientError\";\n\n readonly code: ApiClientErrorCode;\n\n readonly url: string;\n\n readonly method: string;\n\n readonly status?: number;\n\n readonly responseBody?: unknown;\n\n readonly responseText?: string;\n\n override readonly cause?: unknown;\n\n constructor(\n code: ApiClientErrorCode,\n message: string,\n details: ApiClientErrorDetails,\n ) {\n super(message);\n this.code = code;\n this.url = details.url;\n this.method = details.method;\n this.status = details.status;\n this.responseBody = details.responseBody;\n this.responseText = details.responseText;\n this.cause = details.cause;\n }\n}\n\nexport interface ApiRequestOptions extends RequestInit {\n timeoutMs?: number;\n}\n\nfunction isJsonContentType(contentType: string | null): boolean {\n return contentType ? /(^|\\/|\\+)json\\b/i.test(contentType) : false;\n}\n\nfunction looksLikeJson(text: string): boolean {\n const trimmed = text.trim();\n\n return (\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\") ||\n trimmed === \"null\" ||\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?$/.test(trimmed) ||\n trimmed.startsWith('\"')\n );\n}\n\nfunction parseJsonBody<T>(text: string, url: string, method: string): T {\n const trimmed = text.trim();\n\n if (trimmed.length === 0) {\n return undefined as T;\n }\n\n try {\n return JSON.parse(trimmed) as T;\n } catch (cause) {\n throw new ApiClientError(\"invalid_json\", `Failed to parse JSON response from ${method} ${url}.`, {\n url,\n method,\n responseText: text,\n cause,\n });\n }\n}\n\nfunction parseErrorBody(text: string, contentType: string | null): unknown {\n if (text.trim().length === 0) {\n return undefined;\n }\n\n if (!isJsonContentType(contentType) && !looksLikeJson(text)) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction summarizeNetworkCause(cause: unknown): string | undefined {\n const seen = new Set<unknown>();\n let current: unknown = cause;\n\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n\n const candidate = current as { message?: unknown; code?: unknown; cause?: unknown };\n const message = typeof candidate.message === \"string\" ? candidate.message.trim() : \"\";\n const code = typeof candidate.code === \"string\" ? candidate.code : undefined;\n\n if (message && message !== \"fetch failed\") {\n return code && !message.includes(code) ? `${message} (${code})` : message;\n }\n\n current = candidate.cause;\n }\n\n return undefined;\n}\n\nexport class ApiClient {\n private readonly fetchImpl: typeof fetch;\n\n constructor(private readonly options: ApiClientOptions) {\n this.fetchImpl = options.fetch ?? fetch;\n }\n\n async getJson<T>(path: string, init: ApiRequestOptions = {}): Promise<T> {\n return this.requestJson<T>(path, { ...init, method: \"GET\" });\n }\n\n async requestJson<T>(path: string, init: ApiRequestOptions = {}): Promise<T> {\n const response = await this.request(path, init, \"application/json\");\n\n if (!response.ok) {\n const text = await response.text();\n throw this.buildHttpError(response, text, init, \"requestJson\");\n }\n\n const text = await response.text();\n return parseJsonBody<T>(text, response.url, init.method ?? \"GET\");\n }\n\n async requestBinary(path: string, init: ApiRequestOptions = {}): Promise<ArrayBuffer> {\n const response = await this.request(path, init);\n\n if (!response.ok) {\n const text = await response.text();\n throw this.buildHttpError(response, text, init, \"requestBinary\");\n }\n\n return response.arrayBuffer();\n }\n\n private buildUrl(path: string): string {\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\n return new URL(normalizedPath, this.options.baseUrl).toString();\n }\n\n private async request(\n path: string,\n init: ApiRequestOptions,\n accept?: string,\n ): Promise<Response> {\n const url = this.buildUrl(path);\n const method = init.method ?? \"GET\";\n const headers = new Headers(init.headers);\n\n if (accept && !headers.has(\"accept\")) {\n headers.set(\"accept\", accept);\n }\n\n if (this.options.apiKey && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.options.apiKey}`);\n }\n\n const controller = new AbortController();\n const timeoutMs = init.timeoutMs ?? this.options.timeoutMs;\n let timedOut = false;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n const abortListener = (): void => {\n controller.abort();\n };\n\n if (init.signal) {\n if (init.signal.aborted) {\n controller.abort();\n } else {\n init.signal.addEventListener(\"abort\", abortListener, { once: true });\n }\n }\n\n if (timeoutMs !== undefined) {\n timeoutHandle = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n }\n\n try {\n return await this.fetchImpl(url, {\n ...init,\n headers,\n signal: controller.signal,\n });\n } catch (cause) {\n if (timedOut) {\n throw new ApiClientError(\"timeout\", `Request timed out after ${timeoutMs}ms.`, {\n url,\n method,\n cause,\n });\n }\n\n const causeSummary = summarizeNetworkCause(cause);\n const message = causeSummary\n ? `Request failed for ${method} ${url}: ${causeSummary}.`\n : `Request failed for ${method} ${url}.`;\n\n throw new ApiClientError(\"network_error\", message, {\n url,\n method,\n cause,\n });\n } finally {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n }\n\n if (init.signal) {\n init.signal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n\n private buildHttpError(\n response: Response,\n text: string,\n init: ApiRequestOptions,\n operation: string,\n ): ApiClientError {\n const method = init.method ?? \"GET\";\n const responseBody = parseErrorBody(text, response.headers.get(\"content-type\"));\n\n return new ApiClientError(\"http_error\", `Request failed with status ${response.status} for ${method} ${response.url}.`, {\n url: response.url,\n method,\n status: response.status,\n responseBody,\n responseText: responseBody === text ? text : undefined,\n cause: new Error(operation),\n });\n }\n}\n","import Table from \"cli-table3\";\n\nimport type {\n JsonEnvelopeMeta,\n JsonErrorEnvelope,\n JsonSuccessEnvelope,\n OutputFormat,\n} from \"../types.js\";\n\nexport interface TableColumn {\n key: string;\n label: string;\n}\n\nexport interface TableCell {\n key: string;\n value: string;\n}\n\nexport interface TableRow {\n cells: TableCell[];\n}\n\nexport interface OutputWriter {\n write(chunk: string): unknown;\n}\n\nfunction stringifyCellValue(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n}\n\nexport function buildJsonSuccess<TData, TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n data: TData,\n meta: TMeta = {} as TMeta,\n): JsonSuccessEnvelope<TData, TMeta> {\n return { data, meta };\n}\n\nexport function buildJsonError<TErr, TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: TErr,\n meta: TMeta = {} as TMeta,\n): JsonErrorEnvelope<TErr, TMeta> {\n return { error, meta };\n}\n\nexport function buildTableColumns(keys: readonly string[]): readonly TableColumn[] {\n return keys.map((key) => ({ key, label: key }));\n}\n\nexport function buildTableRows(\n rows: readonly Record<string, unknown>[],\n columns: readonly TableColumn[],\n): readonly TableRow[] {\n return rows.map((row) => ({\n cells: columns.map((column) => ({\n key: column.key,\n value: stringifyCellValue(row[column.key]),\n })),\n }));\n}\n\nfunction getWriter(writer?: OutputWriter): OutputWriter {\n return writer ?? process.stdout;\n}\n\nexport function printJson(value: unknown, writer?: OutputWriter): void {\n getWriter(writer).write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function printTable(\n rows: readonly Record<string, unknown>[],\n keys?: readonly string[],\n writer?: OutputWriter,\n): void {\n if (rows.length === 0) {\n getWriter(writer).write(\"No results.\\n\");\n return;\n }\n\n const firstRow = rows[0];\n\n if (!firstRow) {\n getWriter(writer).write(\"No results.\\n\");\n return;\n }\n\n const headings = [...(keys ?? Object.keys(firstRow))];\n const table = new Table({\n head: headings,\n wordWrap: true,\n });\n\n for (const row of rows) {\n table.push(headings.map((heading) => stringifyCellValue(row[heading])));\n }\n\n getWriter(writer).write(`${table.toString()}\\n`);\n}\n\nexport function printOutput(\n format: OutputFormat,\n rows: readonly Record<string, unknown>[],\n keys?: readonly string[],\n writer?: OutputWriter,\n): void {\n if (format === \"json\") {\n printJson(rows, writer);\n return;\n }\n\n printTable(rows, keys, writer);\n}\n","import { ApiClientError } from \"../client.js\";\nimport type { JsonEnvelopeMeta, JsonErrorEnvelope } from \"../types.js\";\n\nimport { buildJsonError } from \"./output.js\";\n\nexport type CliErrorCode =\n | \"unknown_error\"\n | \"invalid_cli_usage\"\n | \"configuration_error\"\n | \"command_not_allowed_in_read_only_mode\"\n | \"network_error\"\n | \"http_error\"\n | \"timeout\"\n | \"invalid_json\";\n\nexport const cliExitCodeByErrorCode = {\n unknown_error: 1,\n invalid_cli_usage: 2,\n configuration_error: 2,\n command_not_allowed_in_read_only_mode: 7,\n network_error: 1,\n http_error: 1,\n timeout: 1,\n invalid_json: 1,\n} as const satisfies Record<CliErrorCode, number>;\n\nexport interface CliErrorDetails {\n [key: string]: unknown;\n}\n\nexport interface CliErrorPayload {\n code: CliErrorCode;\n message: string;\n exitCode: number;\n details?: CliErrorDetails;\n}\n\nconst errorCodeByName: Record<string, CliErrorCode> = {\n ProfileResolutionError: \"configuration_error\",\n};\n\nexport class CliError extends Error {\n override name = \"CliError\";\n\n readonly code: CliErrorCode;\n\n readonly exitCode: number;\n\n readonly details?: CliErrorDetails;\n\n constructor(\n code: CliErrorCode,\n message: string,\n details: CliErrorDetails = {},\n exitCode: number = cliExitCodeByErrorCode[code],\n ) {\n super(message);\n this.code = code;\n this.exitCode = exitCode;\n\n if (Object.keys(details).length > 0) {\n this.details = details;\n }\n }\n\n toJSON(): CliErrorPayload {\n const payload: CliErrorPayload = {\n code: this.code,\n message: this.message,\n exitCode: this.exitCode,\n };\n\n if (this.details) {\n payload.details = this.details;\n }\n\n return payload;\n }\n}\n\nexport function isCliError(error: unknown): error is CliError {\n return error instanceof CliError;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction extractApiErrorDetails(error: ApiClientError): {\n message: string;\n details: CliErrorDetails;\n meta: JsonEnvelopeMeta;\n} {\n const details: CliErrorDetails = {};\n const meta: JsonEnvelopeMeta = {};\n const responseBody = isRecord(error.responseBody) ? error.responseBody : undefined;\n const errorBody = responseBody?.error;\n const backendError = isRecord(errorBody) ? errorBody : responseBody;\n const backendMeta = isRecord(responseBody?.meta) ? responseBody.meta : undefined;\n const reason =\n readString(backendError?.reason) ??\n readString(backendError?.code);\n const action = readString(backendError?.action);\n const requestId =\n readString(backendMeta?.requestId) ??\n readString(responseBody?.requestId) ??\n readString(backendError?.requestId);\n const status =\n readNumber(backendError?.status) ??\n readNumber(responseBody?.status) ??\n error.status;\n const backendMessage = readString(backendError?.message);\n\n if (reason !== undefined) {\n details.reason = reason;\n }\n\n if (action !== undefined) {\n details.action = action;\n }\n\n if (requestId !== undefined) {\n details.requestId = requestId;\n meta.requestId = requestId;\n }\n\n if (status !== undefined) {\n details.status = status;\n meta.status = status;\n }\n\n return {\n message: backendMessage ?? error.message,\n details,\n meta,\n };\n}\n\nexport function toCliError(error: unknown): CliError {\n if (error instanceof CliError) {\n return error;\n }\n\n if (error instanceof ApiClientError) {\n const apiError = extractApiErrorDetails(error);\n\n return new CliError(error.code, apiError.message, apiError.details);\n }\n\n if (error instanceof Error) {\n return new CliError(errorCodeByName[error.name] ?? \"unknown_error\", error.message);\n }\n\n return new CliError(\"unknown_error\", \"Unknown error\");\n}\n\nexport function getExitCode(error: unknown): number {\n return toCliError(error).exitCode;\n}\n\nexport function buildJsonCliError<TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: unknown,\n meta: TMeta = {} as TMeta,\n): JsonErrorEnvelope<CliErrorPayload, TMeta> {\n const cliError = toCliError(error);\n const apiErrorMeta =\n error instanceof ApiClientError\n ? extractApiErrorDetails(error).meta\n : {};\n\n return buildJsonError(cliError.toJSON(), { ...apiErrorMeta, ...meta } as TMeta);\n}\n\nexport function formatCliErrorText(error: unknown): string {\n return toCliError(error).message;\n}\n\nexport function formatCliErrorJson<TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: unknown,\n meta: TMeta = {} as TMeta,\n): string {\n return JSON.stringify(buildJsonCliError(error, meta));\n}\n","import type { JsonObject } from \"../types.js\";\nimport { CliError } from \"./errors.js\";\n\nexport type SchemaFieldTypeKey =\n | \"text\"\n | \"number\"\n | \"date\"\n | \"option\"\n | \"file\"\n | \"reference\"\n | \"formula\"\n | \"member\"\n | \"autoincremental\"\n | \"schedule\";\n\nexport interface SchemaFieldExamplePayload {\n name: string;\n payload: JsonObject;\n}\n\nexport interface SchemaFieldTypeDefinition {\n key: SchemaFieldTypeKey;\n className: string;\n aliases: readonly string[];\n description: string;\n rawShape: string;\n examplePayloads: readonly SchemaFieldExamplePayload[];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toJsonObject(value: unknown): JsonObject | undefined {\n return isJsonObject(value) ? value : undefined;\n}\n\nfunction toStringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction toNumberValue(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return undefined;\n}\n\nconst fieldTypeDefinitions = [\n {\n key: \"text\",\n className: \"TextField\",\n aliases: [\"text\", \"TextField\"],\n description: \"Plain text field.\",\n rawShape:\n '{\"type\":\"TextField\",\"slug\":\"name\",\"label\":\"Name\",\"config\":{\"textType\":\"NORMAL\"}}',\n examplePayloads: [\n {\n name: \"Text field (normal)\",\n payload: {\n type: \"TextField\",\n slug: \"customer-name\",\n label: \"Customer Name\",\n required: true,\n config: {\n textType: \"NORMAL\",\n defaultValue: null,\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Text field (long)\",\n payload: {\n type: \"TextField\",\n slug: \"customer-notes\",\n label: \"Customer Notes\",\n required: false,\n config: {\n textType: \"LONG\",\n defaultValue: \"Add internal notes here...\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"number\",\n className: \"NumberField\",\n aliases: [\"number\", \"NumberField\"],\n description: \"Numeric field.\",\n rawShape:\n '{\"type\":\"NumberField\",\"slug\":\"quantity\",\"label\":\"Quantity\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"number\",\"decimals\":0,\"thousandsSeparator\":false}}}',\n examplePayloads: [\n {\n name: \"Number field (plain integer)\",\n payload: {\n type: \"NumberField\",\n slug: \"quantity\",\n label: \"Quantity\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"number\",\n decimals: 0,\n thousandsSeparator: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (decimal with thousands)\",\n payload: {\n type: \"NumberField\",\n slug: \"weight\",\n label: \"Weight (kg)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"number\",\n decimals: 2,\n thousandsSeparator: true,\n negativesInRed: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (currency € prefix)\",\n payload: {\n type: \"NumberField\",\n slug: \"amount-eur\",\n label: \"Amount (EUR)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"currency\",\n decimals: 2,\n negativesInRed: true,\n thousandsSeparator: true,\n symbolEnabled: true,\n symbolPosition: \"before\",\n symbolValue: \"€\",\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (currency $ suffix)\",\n payload: {\n type: \"NumberField\",\n slug: \"amount-usd\",\n label: \"Amount (USD)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"currency\",\n decimals: 2,\n negativesInRed: false,\n thousandsSeparator: true,\n symbolEnabled: true,\n symbolPosition: \"right\",\n symbolValue: \" $\",\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (percentage)\",\n payload: {\n type: \"NumberField\",\n slug: \"discount-rate\",\n label: \"Discount Rate\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"percentage\",\n decimals: 1,\n negativesInRed: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (duration HH:MM)\",\n payload: {\n type: \"NumberField\",\n slug: \"tracked-time\",\n label: \"Tracked Time\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"duration\",\n durationFormat: \"HH:MM\",\n },\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"date\",\n className: \"DateField\",\n aliases: [\"date\", \"DateField\"],\n description: \"Date or datetime field.\",\n rawShape:\n '{\"type\":\"DateField\",\"slug\":\"due-date\",\"label\":\"Due Date\",\"config\":{\"formatOptions\":{\"format\":\"date\",\"dateFormat\":\"YYYY-MM-DD\",\"showTime\":false}}}',\n examplePayloads: [\n {\n name: \"Date field (date only)\",\n payload: {\n type: \"DateField\",\n slug: \"birth-date\",\n label: \"Birth Date\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"date\",\n dateFormat: \"YYYY-MM-DD\",\n showTime: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Date field (datetime EU)\",\n payload: {\n type: \"DateField\",\n slug: \"due-date\",\n label: \"Due Date\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"datetime\",\n dateFormat: \"DD/MM/YYYY\",\n showTime: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Date field (datetime US)\",\n payload: {\n type: \"DateField\",\n slug: \"appointment-at\",\n label: \"Appointment\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"datetime\",\n dateFormat: \"MM/DD/YYYY\",\n showTime: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"option\",\n className: \"OptionField\",\n aliases: [\"option\", \"OptionField\"],\n description: \"Dropdown/select field with options.\",\n rawShape:\n '{\"type\":\"OptionField\",\"slug\":\"status\",\"label\":\"Status\",\"config\":{\"options\":[{\"id\":1,\"name\":\"Open\",\"color\":\"default\"},{\"id\":2,\"name\":\"Closed\",\"color\":\"success\"}]}}',\n examplePayloads: [\n {\n name: \"Option field (select dropdown)\",\n payload: {\n type: \"OptionField\",\n slug: \"priority\",\n label: \"Priority\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"Low\", color: \"default\" },\n { id: 2, name: \"Medium\", color: \"warning\" },\n { id: 3, name: \"High\", color: \"danger\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: null,\n },\n },\n },\n {\n name: \"Option field (button cycle)\",\n payload: {\n type: \"OptionField\",\n slug: \"stage\",\n label: \"Stage\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"To Do\", color: \"default\" },\n { id: 2, name: \"Doing\", color: \"warning\" },\n { id: 3, name: \"Done\", color: \"success\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: {\n displayMode: \"button\",\n buttonBehavior: {\n mode: \"cycle\",\n cycleOrder: [1, 2, 3],\n requireConfirmation: false,\n lockAfterSelection: false,\n allowReselect: true,\n },\n },\n },\n },\n },\n {\n name: \"Option field (button dropdown w/ confirm)\",\n payload: {\n type: \"OptionField\",\n slug: \"status\",\n label: \"Status\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"Open\", color: \"default\" },\n { id: 2, name: \"In Progress\", color: \"warning\" },\n { id: 3, name: \"Done\", color: \"success\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: {\n displayMode: \"button\",\n buttonBehavior: {\n mode: \"dropdown\",\n requireConfirmation: true,\n confirmationMessage: \"Confirm status change\",\n useFixedLabel: true,\n buttonLabel: \"Set status\",\n allowReselect: true,\n },\n },\n },\n },\n },\n ],\n },\n {\n key: \"file\",\n className: \"FileField\",\n aliases: [\"file\", \"FileField\"],\n description: \"File attachment field.\",\n rawShape:\n '{\"type\":\"FileField\",\"slug\":\"attachment\",\"label\":\"Attachment\",\"config\":{}}',\n examplePayloads: [\n {\n name: \"File field\",\n payload: {\n type: \"FileField\",\n slug: \"attachment\",\n label: \"Attachment\",\n required: false,\n config: {},\n },\n },\n ],\n },\n {\n key: \"reference\",\n className: \"ReferenceField\",\n aliases: [\"reference\", \"ReferenceField\"],\n description: \"Reference to another schema.\",\n rawShape:\n '{\"type\":\"ReferenceField\",\"slug\":\"company-ref\",\"label\":\"Company\",\"config\":{\"targetSchema\":\"<schema-uuid>\",\"targetDisplayField\":\"<field-uuid>\"}}',\n examplePayloads: [\n {\n name: \"Reference field (minimal)\",\n payload: {\n type: \"ReferenceField\",\n slug: \"company-ref\",\n label: \"Company\",\n required: false,\n config: {\n targetSchema: \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n targetDisplayField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n },\n },\n },\n {\n name: \"Reference field (restrict + filter + description)\",\n payload: {\n type: \"ReferenceField\",\n slug: \"customer-ref\",\n label: \"Customer\",\n required: false,\n config: {\n targetSchema: \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n targetDisplayField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n deleteBehavior: \"RESTRICT\",\n defaultValue: \"CUST-12\",\n filterFields: [\n {\n fatherField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n currentField: \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n comparison: \"EQUAL\",\n value: null,\n },\n ],\n descriptionFields: [\n {\n id: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n fieldType: \"NumberField\",\n options: null,\n format: \"number\",\n },\n ],\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"formula\",\n className: \"FormulaField\",\n aliases: [\"formula\", \"FormulaField\"],\n description: \"Calculated field from a formula.\",\n rawShape:\n '{\"type\":\"FormulaField\",\"slug\":\"formula-code\",\"label\":\"Formula Code\",\"config\":{\"formulaText\":\"concat(\\\\\"CUST-\\\\\", f1e1d000-0000-0000-0000-000000000005)\",\"uiFormatKind\":\"none\"}}',\n examplePayloads: [\n {\n name: \"Formula field (none)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-code\",\n label: \"Formula Code\",\n required: false,\n config: {\n formulaText:\n 'concat(\"CUST-\", f1e1d000-0000-0000-0000-000000000005)',\n uiFormatKind: \"none\",\n status: \"ACTIVE\",\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (number)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-total\",\n label: \"Formula Total\",\n required: false,\n config: {\n formulaText: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.21\",\n uiFormatKind: \"number\",\n status: \"ACTIVE\",\n numberFormatOptions: {\n format: \"number\",\n decimals: 2,\n thousandsSeparator: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (date)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-period\",\n label: \"Formula Period\",\n required: false,\n config: {\n formulaText:\n 'date_format(d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90, \"AAAA-MM\")',\n uiFormatKind: \"date\",\n status: \"ACTIVE\",\n dateFormatOptions: {\n format: \"date\",\n dateFormat: \"DD/MM/YYYY\",\n showTime: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (member)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-assignee\",\n label: \"Computed Assignee\",\n required: false,\n config: {\n formulaText: \"a7b8c9d0-e1f2-3a4b-5c6d-7e8f90123456\",\n uiFormatKind: \"member\",\n status: \"ACTIVE\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"member\",\n className: \"MemberField\",\n aliases: [\"member\", \"MemberField\"],\n description: \"Workspace member field.\",\n rawShape:\n '{\"type\":\"MemberField\",\"slug\":\"owner\",\"label\":\"Owner\",\"config\":{\"defaultValue\":null}}',\n examplePayloads: [\n {\n name: \"Member field\",\n payload: {\n type: \"MemberField\",\n slug: \"owner\",\n label: \"Owner\",\n required: false,\n config: {\n defaultValue: null,\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"autoincremental\",\n className: \"AutoIncrementalField\",\n aliases: [\n \"autoincremental\",\n \"auto-incremental\",\n \"auto_incremental\",\n \"AutoIncrementalField\",\n ],\n description: \"Auto-generated incremental counter.\",\n rawShape:\n '{\"type\":\"AutoIncrementalField\",\"slug\":\"order-number\",\"label\":\"Order Number\",\"config\":{\"segmentedByFieldId\":null}}',\n examplePayloads: [\n {\n name: \"Autoincremental (global counter)\",\n payload: {\n type: \"AutoIncrementalField\",\n slug: \"order-number\",\n label: \"Order Number\",\n required: false,\n config: {\n segmentedByFieldId: null,\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Autoincremental (segmented)\",\n payload: {\n type: \"AutoIncrementalField\",\n slug: \"sequence-code\",\n label: \"Sequence Code\",\n required: false,\n config: {\n segmentedByFieldId: \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"schedule\",\n className: \"ScheduleField\",\n aliases: [\"schedule\", \"ScheduleField\"],\n description:\n \"Recurrence/schedule field bound to a number reference and a date period (frequency: monthly or daily).\",\n rawShape:\n '{\"type\":\"ScheduleField\",\"slug\":\"recurrence\",\"label\":\"Recurrence\",\"config\":{\"referenceField\":\"<number-field-uuid>\",\"beginningPeriodField\":\"<date-field-uuid>\",\"endingPeriodField\":\"<date-field-uuid>\",\"frequency\":\"monthly\"}}',\n examplePayloads: [\n {\n name: \"Schedule field (monthly)\",\n payload: {\n type: \"ScheduleField\",\n slug: \"monthly-recurrence\",\n label: \"Monthly Recurrence\",\n required: false,\n config: {\n referenceField: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n beginningPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n endingPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n frequency: \"monthly\",\n },\n },\n },\n {\n name: \"Schedule field (daily)\",\n payload: {\n type: \"ScheduleField\",\n slug: \"daily-recurrence\",\n label: \"Daily Recurrence\",\n required: false,\n config: {\n referenceField: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n beginningPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n endingPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n frequency: \"daily\",\n },\n },\n },\n ],\n },\n] as const satisfies readonly SchemaFieldTypeDefinition[];\n\nconst fieldTypeDefinitionByAlias = new Map(\n fieldTypeDefinitions.flatMap((definition) =>\n definition.aliases.map((alias) => [alias.trim().toLowerCase(), definition] as const),\n ),\n);\n\nconst fieldTypeDefinitionByClassName = new Map<string, SchemaFieldTypeDefinition>(\n fieldTypeDefinitions.map((definition) => [definition.className, definition] as const),\n);\n\nconst optionValidationMessage =\n 'Option fields require an \"options\" array with at least one entry like {\"id\":1,\"name\":\"Open\",\"color\":\"default\"}.';\n\nexport function getSchemaFieldTypeDefinitions(): readonly SchemaFieldTypeDefinition[] {\n return fieldTypeDefinitions;\n}\n\nexport function listSchemaFieldTypes(): readonly SchemaFieldTypeKey[] {\n return fieldTypeDefinitions.map((definition) => definition.key);\n}\n\nexport function formatSchemaFieldTypes(): string {\n return listSchemaFieldTypes().join(\", \");\n}\n\nexport function resolveSchemaFieldType(\n input: string | undefined,\n): SchemaFieldTypeDefinition | undefined {\n if (!input) {\n return undefined;\n }\n\n return fieldTypeDefinitionByAlias.get(input.trim().toLowerCase());\n}\n\nexport function resolveSchemaFieldTypeByClassName(\n className: string | undefined,\n): SchemaFieldTypeDefinition | undefined {\n if (!className) {\n return undefined;\n }\n\n return fieldTypeDefinitionByClassName.get(className);\n}\n\nexport function normalizeSchemaFieldType(input: string): string {\n const definition = resolveSchemaFieldType(input);\n\n if (definition) {\n return definition.className;\n }\n\n if (/^[a-z]/.test(input) && !input.endsWith(\"Field\")) {\n return `${input.charAt(0).toUpperCase()}${input.slice(1)}Field`;\n }\n\n return input;\n}\n\nexport function assertSupportedSchemaFieldType(type: string): void {\n if (!resolveSchemaFieldTypeByClassName(type)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Unsupported field type \"${type}\". Valid types: ${formatSchemaFieldTypes()}.`,\n );\n }\n}\n\ninterface OptionEntry {\n [key: string]: string | number;\n id: number;\n name: string;\n color: string;\n}\n\nfunction normalizeOptionEntries(entries: readonly unknown[]): OptionEntry[] {\n return entries.flatMap((entry) => {\n if (!isJsonObject(entry)) {\n return [];\n }\n\n const id = toNumberValue(entry.id);\n const name = toStringValue(entry.name) ?? toStringValue(entry.label);\n const color = toStringValue(entry.color) ?? \"default\";\n\n if (id === undefined || !name) {\n return [];\n }\n\n return [{ id, name, color }];\n });\n}\n\nfunction normalizeOptionPayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config);\n const rootOptions = Array.isArray(input.options) ? input.options : undefined;\n const nestedOptions = Array.isArray(additionalProperties.options)\n ? additionalProperties.options\n : Array.isArray(config?.options)\n ? config.options\n : undefined;\n const optionObjects = normalizeOptionEntries(\n nestedOptions ??\n (Array.isArray(rootOptions) ? rootOptions : []),\n );\n\n if (optionObjects.length === 0) {\n throw new CliError(\"invalid_cli_usage\", optionValidationMessage);\n }\n\n const { options: _options, additionalProperties: _additionalProperties, ...rest } = input;\n const defaultValue =\n config?.defaultValue ?? input.defaultValue ?? additionalProperties.defaultValue;\n const conditionalFormatting =\n config?.conditionalFormatting ?? additionalProperties.conditionalFormatting;\n const buttonConfig = config?.buttonConfig ?? additionalProperties.buttonConfig;\n\n return {\n ...rest,\n config: {\n ...(config ?? {}),\n options: optionObjects,\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(conditionalFormatting !== undefined ? { conditionalFormatting } : {}),\n ...(buttonConfig !== undefined ? { buttonConfig } : {}),\n },\n };\n}\n\nfunction normalizeReferencePayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config) ?? {};\n const targetSchema =\n config.targetSchema ?? input.targetSchema ?? additionalProperties.targetSchema;\n const targetDisplayField =\n config.targetDisplayField ??\n input.targetDisplayField ??\n additionalProperties.targetDisplayField;\n const deleteBehavior =\n config.deleteBehavior ?? input.deleteBehavior ?? additionalProperties.deleteBehavior;\n const defaultValue =\n config.defaultValue ?? input.defaultValue ?? additionalProperties.defaultValue;\n const filterFields =\n config.filterFields ?? input.filterFields ?? additionalProperties.filterFields;\n const descriptionFields =\n config.descriptionFields ??\n input.descriptionFields ??\n additionalProperties.descriptionFields;\n const conditionalFormatting =\n config.conditionalFormatting ??\n input.conditionalFormatting ??\n additionalProperties.conditionalFormatting;\n\n const normalized: JsonObject = {\n ...input,\n };\n\n normalized.config = {\n ...config,\n ...(targetSchema !== undefined ? { targetSchema } : {}),\n ...(targetDisplayField !== undefined ? { targetDisplayField } : {}),\n ...(deleteBehavior !== undefined ? { deleteBehavior } : {}),\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(filterFields !== undefined ? { filterFields } : {}),\n ...(descriptionFields !== undefined ? { descriptionFields } : {}),\n ...(conditionalFormatting !== undefined ? { conditionalFormatting } : {}),\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n\n if (\n !toStringValue(normalizedConfig.targetSchema) ||\n !toStringValue(normalizedConfig.targetDisplayField)\n ) {\n const definition = resolveSchemaFieldType(\"reference\")!;\n throw new CliError(\n \"invalid_cli_usage\",\n `Reference fields require \"targetSchema\" and \"targetDisplayField\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n return normalized;\n}\n\nconst scheduleAllowedFrequencies = new Set([\"monthly\", \"daily\"]);\n\nfunction normalizeSchedulePayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config) ?? {};\n const referenceField =\n config.referenceField ?? input.referenceField ?? additionalProperties.referenceField;\n const beginningPeriodField =\n config.beginningPeriodField ??\n input.beginningPeriodField ??\n additionalProperties.beginningPeriodField;\n const endingPeriodField =\n config.endingPeriodField ??\n input.endingPeriodField ??\n additionalProperties.endingPeriodField;\n const frequency =\n config.frequency ?? input.frequency ?? additionalProperties.frequency;\n\n const {\n referenceField: _referenceField,\n beginningPeriodField: _beginningPeriodField,\n endingPeriodField: _endingPeriodField,\n frequency: _frequency,\n additionalProperties: _additionalProperties,\n ...rest\n } = input;\n\n const normalized: JsonObject = {\n ...rest,\n config: {\n ...config,\n ...(referenceField !== undefined ? { referenceField } : {}),\n ...(beginningPeriodField !== undefined ? { beginningPeriodField } : {}),\n ...(endingPeriodField !== undefined ? { endingPeriodField } : {}),\n ...(frequency !== undefined ? { frequency } : {}),\n },\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n const definition = resolveSchemaFieldType(\"schedule\")!;\n\n if (\n !toStringValue(normalizedConfig.referenceField) ||\n !toStringValue(normalizedConfig.beginningPeriodField) ||\n !toStringValue(normalizedConfig.endingPeriodField) ||\n !toStringValue(normalizedConfig.frequency)\n ) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Schedule fields require \"referenceField\", \"beginningPeriodField\", \"endingPeriodField\" and \"frequency\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n const frequencyValue = toStringValue(normalizedConfig.frequency)!;\n if (!scheduleAllowedFrequencies.has(frequencyValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Schedule \"frequency\" must be \"monthly\" or \"daily\" (received \"${frequencyValue}\").`,\n );\n }\n\n return normalized;\n}\n\nfunction normalizeFormulaPayload(input: JsonObject): JsonObject {\n const { status: _status, ...rest } = input;\n const rawAdditionalProperties = toJsonObject(input.additionalProperties);\n const rawConfig = toJsonObject(input.config);\n const { status: _additionalStatus, ...additionalProperties } =\n rawAdditionalProperties ?? {};\n const { status: _configStatus, ...config } = rawConfig ?? {};\n const formulaText =\n config.formulaText ??\n rest.formulaText ??\n rest.expression ??\n additionalProperties.formulaText ??\n additionalProperties.expression;\n\n const normalized: JsonObject = {\n ...rest,\n };\n\n normalized.config = {\n ...config,\n ...(formulaText !== undefined ? { formulaText } : {}),\n ...(config.uiFormatKind !== undefined ? { uiFormatKind: config.uiFormatKind } : {}),\n ...(config.defaultValue !== undefined ? { defaultValue: config.defaultValue } : {}),\n ...(config.numberFormatOptions !== undefined\n ? { numberFormatOptions: config.numberFormatOptions }\n : {}),\n ...(config.dateFormatOptions !== undefined\n ? { dateFormatOptions: config.dateFormatOptions }\n : {}),\n ...(config.conditionalFormatting !== undefined\n ? { conditionalFormatting: config.conditionalFormatting }\n : {}),\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n\n if (!toStringValue(normalizedConfig.formulaText)) {\n const definition = resolveSchemaFieldType(\"formula\")!;\n throw new CliError(\n \"invalid_cli_usage\",\n `Formula fields require \"formulaText\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n return normalized;\n}\n\nexport function normalizeSchemaFieldCreatePayload(input: JsonObject): JsonObject {\n const rawType = toStringValue(input.type);\n const normalizedType = rawType ? normalizeSchemaFieldType(rawType) : undefined;\n const definition = resolveSchemaFieldTypeByClassName(normalizedType);\n\n if (!definition) {\n return input;\n }\n\n const normalizedWithType: JsonObject = {\n ...input,\n type: definition.className,\n };\n\n switch (definition.key) {\n case \"option\":\n return normalizeOptionPayload(normalizedWithType);\n case \"reference\":\n return normalizeReferencePayload(normalizedWithType);\n case \"formula\":\n return normalizeFormulaPayload(normalizedWithType);\n case \"schedule\":\n return normalizeSchedulePayload(normalizedWithType);\n case \"autoincremental\": {\n const config = toJsonObject(normalizedWithType.config) ?? {};\n const segmentedByFieldId =\n config.segmentedByFieldId ??\n normalizedWithType.segmentedByFieldId ??\n null;\n return {\n ...normalizedWithType,\n config: {\n ...config,\n segmentedByFieldId,\n ...(config.conditionalFormatting !== undefined\n ? { conditionalFormatting: config.conditionalFormatting }\n : {}),\n },\n };\n }\n default:\n return normalizedWithType;\n }\n}\n\nexport function normalizeSchemaFieldUpdatePayload(\n type: string,\n input: JsonObject,\n): JsonObject {\n const definition = resolveSchemaFieldTypeByClassName(type);\n\n if (definition?.key === \"formula\") {\n return normalizeFormulaPayload(input);\n }\n\n return input;\n}\n\nexport function buildSchemaFieldCreateHelpText(): string {\n const sections = fieldTypeDefinitions.map(\n (definition) =>\n ` - ${definition.key}: ${definition.description}\\n raw: ${definition.rawShape}`,\n );\n\n return [\n \"\",\n \"Valid field types:\",\n ` ${formatSchemaFieldTypes()}`,\n \"\",\n \"Raw payload shapes by type:\",\n ...sections,\n \"\",\n 'Use \"zinkee --example schemas fields create --type <type>\" to show a concrete example for one type.',\n ].join(\"\\n\");\n}\n\nexport function buildSchemaFieldCreateValidationMessage(type: string): string {\n const definition = resolveSchemaFieldTypeByClassName(type);\n\n if (!definition) {\n return `Invalid payload for field type \"${type}\". Valid types: ${formatSchemaFieldTypes()}.`;\n }\n\n return `Invalid payload for field type \"${definition.key}\". Expected raw shape: ${definition.rawShape}`;\n}\n","import {\n getSchemaFieldTypeDefinitions,\n resolveSchemaFieldType,\n} from \"./schema-fields.js\";\n\nexport interface CommandExample {\n command: string;\n description: string;\n raw?: string;\n response?: string;\n}\n\nexport function buildCommandExample(example: CommandExample): CommandExample {\n return {\n command: example.command,\n description: example.description,\n raw: example.raw,\n response: example.response,\n };\n}\n\nexport function buildCommandExamples(examples: readonly CommandExample[]): readonly CommandExample[] {\n return examples.map((example) => buildCommandExample(example));\n}\n\nconst SAMPLE_UUID = \"550e8400-e29b-41d4-a716-446655440001\";\n\nconst specificExamples: Record<string, readonly CommandExample[]> = {\n \"profiles list\": buildCommandExamples([\n {\n description:\n \"List all local profiles. The CLI always redacts the apiKey to ******** plus the last 4 chars.\",\n command: \"zinkee --json profiles list\",\n response: `[\n {\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n },\n {\n \"name\": \"local\",\n \"isDefault\": false,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:8088\"\n }\n]`,\n },\n ]),\n \"profiles get\": buildCommandExamples([\n {\n description: \"Show one profile by name.\",\n command: \"zinkee --json profiles get prod\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n ]),\n \"profiles use\": buildCommandExamples([\n {\n description: \"Set a profile as the default one used when --profile is not passed.\",\n command: \"zinkee --json profiles use local\",\n response: `{\n \"profile\": \"local\",\n \"defaultProfile\": \"local\"\n}`,\n },\n ]),\n \"profiles add\": buildCommandExamples([\n {\n description:\n \"Add a new profile with an explicit base URL. Becomes the default if no other profile existed.\",\n command:\n \"zinkee --json profiles add prod --api-key sk-prod-9f3a2c1b-1234567890abcdef --base-url https://api.zinkee.com\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n {\n description:\n \"Add a profile without --base-url (the runtime falls back to the production URL at call time).\",\n command: \"zinkee --json profiles add staging --api-key sk-staging-7777aaaa-bbbbccccddddeeee\",\n response: `{\n \"name\": \"staging\",\n \"isDefault\": false,\n \"apiKey\": \"********eeee\"\n}`,\n },\n ]),\n \"profiles update\": buildCommandExamples([\n {\n description: \"Rotate just the API key of an existing profile.\",\n command:\n \"zinkee --json profiles update prod --api-key sk-prod-0000new0-fedcba0987654321\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n {\n description: \"Point an existing profile at a different base URL (useful when moving envs).\",\n command: \"zinkee --json profiles update local --base-url http://localhost:9090\",\n response: `{\n \"name\": \"local\",\n \"isDefault\": false,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:9090\"\n}`,\n },\n ]),\n \"profiles remove\": buildCommandExamples([\n {\n description:\n \"Remove a profile. If it was the default, defaultProfile becomes null and you should set a new one with profiles use.\",\n command: \"zinkee --json profiles remove staging\",\n response: `{\n \"profile\": \"staging\",\n \"defaultProfile\": \"prod\"\n}`,\n },\n ]),\n \"config path\": buildCommandExamples([\n {\n description: \"Print the path of the config file the CLI is reading right now.\",\n command: \"zinkee --json config path\",\n response: `{\n \"path\": \"/home/guillermo/.config/zinkee/config.json\"\n}`,\n },\n ]),\n \"config show\": buildCommandExamples([\n {\n description:\n \"Dump the whole config with secrets redacted. Same ******** + last 4 chars mask that profiles list uses.\",\n command: \"zinkee --json config show\",\n response: `{\n \"defaultProfile\": \"prod\",\n \"profiles\": {\n \"prod\": {\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n },\n \"local\": {\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:8088\"\n }\n }\n}`,\n },\n ]),\n \"config validate\": buildCommandExamples([\n {\n description:\n \"Validate that the local config resolves a profile. Useful as a CI gate before running other commands.\",\n command: \"zinkee --json config validate\",\n response: `{\n \"valid\": true,\n \"profile\": \"prod\"\n}`,\n },\n ]),\n \"schemas create\": buildCommandExamples([\n {\n description: \"Create an auditable and commentable schema from flags.\",\n command:\n 'zinkee --json schemas create --name \"Codex Demo\" --slug codex-demo --auditable --commentable',\n raw: `{\n \"name\": \"Codex Demo\",\n \"slug\": \"codex-demo\",\n \"auditable\": true,\n \"commentable\": true\n}`,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"slug\": \"codex-demo\",\n \"folder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n }\n}`,\n },\n {\n description: \"Minimal create with just name and slug.\",\n command: 'zinkee --json schemas create --name Leads --slug leads',\n raw: `{\n \"name\": \"Leads\",\n \"slug\": \"leads\"\n}`,\n },\n {\n description:\n \"Create an auditable schema inside an existing navigation folder (folder id can be a UUID or the exact folder name).\",\n command:\n 'zinkee --json schemas create --name Tasks --slug tasks --auditable --folder 7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f',\n raw: `{\n \"name\": \"Tasks\",\n \"slug\": \"tasks\",\n \"auditable\": true,\n \"commentable\": false,\n \"folderId\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\"\n}`,\n },\n ]),\n \"schemas update\": buildCommandExamples([\n {\n description: \"Toggle the commentable flag on a schema.\",\n command: 'zinkee --json schemas update contacts --commentable true',\n raw: `{\n \"commentable\": true\n}`,\n response: `{\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer Contacts\",\n \"slug\": \"customer-contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": true,\n \"commentable\": true,\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"fields\": [\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n }\n ]\n}`,\n },\n {\n description: \"Rename a schema and change its slug.\",\n command:\n 'zinkee --json schemas update contacts --name \"Customer Contacts\" --slug customer-contacts',\n raw: `{\n \"name\": \"Customer Contacts\",\n \"slug\": \"customer-contacts\"\n}`,\n },\n {\n description: \"Enable the audit log on a schema.\",\n command: 'zinkee --json schemas update contacts --auditable true',\n raw: `{\n \"auditable\": true\n}`,\n },\n {\n description: \"Set the highlighted (main) field of a schema.\",\n command:\n 'zinkee --json schemas update contacts --highlighted-field contact-name',\n raw: `{\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n}`,\n },\n ]),\n \"schemas fields update\": buildCommandExamples([\n {\n description: \"Rename slug and label.\",\n command:\n `zinkee --json schemas fields update contacts contact-name --label \"Customer Full Name\" --raw '{\"slug\":\"customer-full-name\"}'`,\n raw: `{\n \"slug\": \"customer-full-name\",\n \"label\": \"Customer Full Name\"\n}`,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"slug\": \"customer-full-name\"\n}`,\n },\n {\n description: \"Toggle required.\",\n command: \"zinkee --json schemas fields update contacts status --required true\",\n raw: `{\n \"required\": true\n}`,\n },\n {\n description: \"Patch text field (long with default).\",\n command:\n `zinkee --json schemas fields update contacts contact-name --raw '{\"type\":\"TextField\",\"label\":\"Customer Full Name\",\"required\":false,\"config\":{\"textType\":\"LONG\",\"defaultValue\":\"Unknown\",\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"TextField\",\n \"label\": \"Customer Full Name\",\n \"required\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch number field (to currency).\",\n command:\n `zinkee --json schemas fields update contacts amount --raw '{\"type\":\"NumberField\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"currency\",\"decimals\":2,\"thousandsSeparator\":true,\"symbolEnabled\":true,\"symbolPosition\":\"before\",\"symbolValue\":\"€\"},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"NumberField\",\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"currency\",\n \"decimals\": 2,\n \"thousandsSeparator\": true,\n \"symbolEnabled\": true,\n \"symbolPosition\": \"before\",\n \"symbolValue\": \"€\"\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch number field (to percentage).\",\n command:\n `zinkee --json schemas fields update contacts discount-rate --raw '{\"type\":\"NumberField\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"percentage\",\"decimals\":1},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"NumberField\",\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"percentage\",\n \"decimals\": 1\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch date field (to date only).\",\n command:\n `zinkee --json schemas fields update contacts due-date --raw '{\"type\":\"DateField\",\"config\":{\"defaultValue\":null,\"formatOptions\":{\"format\":\"date\",\"dateFormat\":\"YYYY-MM-DD\",\"showTime\":false},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"DateField\",\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"YYYY-MM-DD\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch option field (button cycle).\",\n command:\n `zinkee --json schemas fields update contacts stage --raw '{\"type\":\"OptionField\",\"config\":{\"options\":[{\"id\":1,\"name\":\"To Do\",\"color\":\"default\"},{\"id\":2,\"name\":\"Doing\",\"color\":\"warning\"},{\"id\":3,\"name\":\"Done\",\"color\":\"success\"}],\"defaultValue\":1,\"conditionalFormatting\":[],\"buttonConfig\":{\"displayMode\":\"button\",\"buttonBehavior\":{\"mode\":\"cycle\",\"cycleOrder\":[1,2,3],\"allowReselect\":true}}}}'`,\n raw: `{\n \"type\": \"OptionField\",\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"To Do\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"Doing\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"allowReselect\": true\n }\n }\n }\n}`,\n },\n {\n description: \"Patch option field (drop button mode).\",\n command:\n `zinkee --json schemas fields update contacts status --raw '{\"type\":\"OptionField\",\"config\":{\"options\":[{\"id\":1,\"name\":\"Open\",\"color\":\"default\"},{\"id\":2,\"name\":\"In Progress\",\"color\":\"warning\"},{\"id\":3,\"name\":\"Done\",\"color\":\"success\"}],\"defaultValue\":1,\"conditionalFormatting\":[],\"buttonConfig\":null}}'`,\n raw: `{\n \"type\": \"OptionField\",\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n}`,\n },\n {\n description: \"Patch formula field (formula text).\",\n command:\n `zinkee --json schemas fields update contacts formula-total --raw '{\"type\":\"FormulaField\",\"config\":{\"formulaText\":\"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.10\",\"uiFormatKind\":\"number\",\"status\":\"ACTIVE\",\"numberFormatOptions\":{\"format\":\"number\",\"decimals\":2,\"thousandsSeparator\":true},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"FormulaField\",\n \"config\": {\n \"formulaText\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.10\",\n \"uiFormatKind\": \"number\",\n \"status\": \"ACTIVE\",\n \"numberFormatOptions\": {\n \"format\": \"number\",\n \"decimals\": 2,\n \"thousandsSeparator\": true\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch reference field (delete behavior).\",\n command:\n `zinkee --json schemas fields update contacts customer-ref --raw '{\"type\":\"ReferenceField\",\"config\":{\"targetSchema\":\"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\"targetDisplayField\":\"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\"deleteBehavior\":\"RESTRICT\",\"defaultValue\":null,\"filterFields\":[],\"descriptionFields\":[],\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"ReferenceField\",\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"RESTRICT\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch schedule field (to daily).\",\n command:\n `zinkee --json schemas fields update contacts recurrence --raw '{\"type\":\"ScheduleField\",\"config\":{\"referenceField\":\"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\"beginningPeriodField\":\"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\"endingPeriodField\":\"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\"frequency\":\"daily\"}}'`,\n raw: `{\n \"type\": \"ScheduleField\",\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"daily\"\n }\n}`,\n },\n ]),\n \"records query\": buildCommandExamples([\n {\n description: \"Lookup a single record by id.\",\n command:\n 'zinkee --json records query contacts --select id,contact-name --where \"id eq 550e8400-e29b-41d4-a716-446655440000\" --sort id:desc --limit 10',\n raw: `{\n \"select\": [\"id\", \"contact-name\"],\n \"where\": [\n { \"field\": \"id\", \"op\": \"eq\", \"value\": \"550e8400-e29b-41d4-a716-446655440000\" }\n ],\n \"sort\": [\n { \"field\": \"id\", \"direction\": \"DESC\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 10 }\n}`,\n response: `{\n \"records\": [\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"status\": 2,\n \"amount\": 1250.50\n }\n }\n ],\n \"page\": {\n \"offset\": 0,\n \"limit\": 25,\n \"total\": 1,\n \"count\": 1,\n \"hasMore\": false\n }\n}`,\n },\n {\n description:\n \"Filter by multiple conditions and sort by amount then name.\",\n command:\n `zinkee --json records query contacts --select id,contact-name,status,amount --where \"status in 1,2\" --where \"amount gte 500\" --sort amount:desc --sort contact-name:asc --limit 25`,\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"status\", \"amount\"],\n \"where\": [\n { \"field\": \"status\", \"op\": \"in\", \"value\": [1, 2] },\n { \"field\": \"amount\", \"op\": \"gte\", \"value\": 500 }\n ],\n \"sort\": [\n { \"field\": \"amount\", \"direction\": \"DESC\" },\n { \"field\": \"contact-name\", \"direction\": \"ASC\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 25 }\n}`,\n },\n {\n description: \"Filter by status with a free-text search term.\",\n command:\n `zinkee --json records query contacts --select id,contact-name,status --where \"status in OPEN\" --search garcia --limit 25`,\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"status\"],\n \"where\": [\n { \"field\": \"status\", \"op\": \"in\", \"value\": [\"OPEN\"] }\n ],\n \"search\": { \"term\": \"garcia\" },\n \"page\": { \"offset\": 0, \"limit\": 25 }\n}`,\n },\n {\n description: \"Text contains search.\",\n command:\n 'zinkee --json records query contacts --select id,contact-name,contact-email --where \"contact-name contains Lovelace\" --limit 50',\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"contact-email\"],\n \"where\": [\n { \"field\": \"contact-name\", \"op\": \"contains\", \"value\": \"Lovelace\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 50 }\n}`,\n },\n {\n description: \"Records with a non-empty due-date inside a date range.\",\n command:\n 'zinkee --json records query contacts --where \"due-date is_not_empty\" --where \"due-date lte 2026-12-31T23:59:59Z\" --sort due-date:asc',\n raw: `{\n \"where\": [\n { \"field\": \"due-date\", \"op\": \"is_not_empty\" },\n { \"field\": \"due-date\", \"op\": \"lte\", \"value\": \"2026-12-31T23:59:59Z\" }\n ],\n \"sort\": [\n { \"field\": \"due-date\", \"direction\": \"ASC\" }\n ]\n}`,\n },\n {\n description: \"Records whose status is not equal to a value.\",\n command:\n 'zinkee --json records query contacts --where \"status neq 0\"',\n raw: `{\n \"where\": [\n { \"field\": \"status\", \"op\": \"neq\", \"value\": 0 }\n ]\n}`,\n },\n {\n description: \"Records with an amount greater than a threshold.\",\n command:\n 'zinkee --json records query contacts --where \"amount gt 1000\"',\n raw: `{\n \"where\": [\n { \"field\": \"amount\", \"op\": \"gt\", \"value\": 1000 }\n ]\n}`,\n },\n {\n description: \"Records with an amount less than a threshold.\",\n command:\n 'zinkee --json records query contacts --where \"amount lt 100\"',\n raw: `{\n \"where\": [\n { \"field\": \"amount\", \"op\": \"lt\", \"value\": 100 }\n ]\n}`,\n },\n {\n description: \"Records whose due-date is empty.\",\n command:\n 'zinkee --json records query contacts --where \"due-date is_empty\"',\n raw: `{\n \"where\": [\n { \"field\": \"due-date\", \"op\": \"is_empty\" }\n ]\n}`,\n },\n {\n description: \"Records whose contact-email is not empty.\",\n command:\n 'zinkee --json records query contacts --where \"contact-email is_not_empty\"',\n raw: `{\n \"where\": [\n { \"field\": \"contact-email\", \"op\": \"is_not_empty\" }\n ]\n}`,\n },\n ]),\n \"records create\": buildCommandExamples([\n {\n description: \"Minimal create using just two plain string fields.\",\n command:\n `zinkee --json records create contacts --set contact-name=\"Ada Lovelace\" --set contact-email=ada@example.com`,\n raw: `{\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\"\n }\n}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\"\n }\n}`,\n },\n {\n description:\n \"Create a record mixing text, option, number, date, reference and member fields. ReferenceField values must match the target's current targetDisplayField (read it from the target record before writing).\",\n command:\n `zinkee --json records create contacts --set contact-name=\"Grace Hopper\" --set contact-email=grace@example.com --set status=2 --set amount=1999.99 --set due-date=2026-06-01T09:00:00Z --set customer-ref=\"CUST-12\" --set owner=6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d`,\n raw: `{\n \"values\": {\n \"contact-name\": \"Grace Hopper\",\n \"contact-email\": \"grace@example.com\",\n \"status\": 2,\n \"amount\": 1999.99,\n \"due-date\": \"2026-06-01T09:00:00Z\",\n \"customer-ref\": \"CUST-12\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n ]),\n \"records update\": buildCommandExamples([\n {\n description: \"Set one field and unset another.\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --set contact-name=\"Ada Lovelace Updated\" --unset contact-email',\n raw: `{\n \"set\": {\n \"contact-name\": \"Ada Lovelace Updated\"\n },\n \"unset\": [\"contact-email\"]\n}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace Updated\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n {\n description: \"Patch multiple typed values at once.\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --set status=3 --set amount=2500.00 --set due-date=2026-07-01T09:00:00Z --set owner=6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d',\n raw: `{\n \"set\": {\n \"status\": 3,\n \"amount\": 2500.00,\n \"due-date\": \"2026-07-01T09:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n {\n description: \"Unset only (clear fields).\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --unset contact-email --unset due-date',\n raw: `{\n \"unset\": [\"contact-email\", \"due-date\"]\n}`,\n },\n ]),\n \"comments create\": buildCommandExamples([\n {\n description: \"Plain text comment on a record (uses --text).\",\n command:\n `zinkee --json comments create contacts 550e8400-e29b-41d4-a716-446655440000 --text \"This record needs review.\"`,\n raw: `{\n \"content\": [\n {\n \"type\": \"TEXT\",\n \"value\": \"This record needs review.\"\n }\n ]\n}`,\n response: `{\n \"id\": \"cd8e3b2a-1f5c-4e9a-8b7d-0a2b3c4d5e6f\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"This record needs review.\" }\n ]\n}`,\n },\n {\n description:\n \"Comment with an inline member mention. Mentions only go through --raw today because --text is plain text.\",\n command:\n `zinkee --json comments create contacts 550e8400-e29b-41d4-a716-446655440000 --raw '{\"content\":[{\"type\":\"TEXT\",\"value\":\"Assigning to \"},{\"type\":\"MENTION\",\"value\":\"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\"},{\"type\":\"TEXT\",\"value\":\" for follow up.\"}]}'`,\n raw: `{\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"Assigning to \" },\n { \"type\": \"MENTION\", \"value\": \"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\" },\n { \"type\": \"TEXT\", \"value\": \" for follow up.\" }\n ]\n}`,\n },\n ]),\n \"files download\": buildCommandExamples([\n {\n description:\n \"Download a file to disk (the CLI writes the raw bytes to the --output path; the JSON mode only emits a success envelope).\",\n command: `zinkee --json files download ${SAMPLE_UUID} --output ./download.bin`,\n },\n ]),\n \"files upload\": buildCommandExamples([\n {\n description:\n \"Upload a local file. The CLI sends the multipart form and the backend returns the generated file id to reference from record FileField values.\",\n command: \"zinkee --json files upload ./report.pdf\",\n response: `{\n \"id\": \"d290f1ee-6c54-4b01-90e6-d701748f0851\"\n}`,\n },\n ]),\n \"files delete\": buildCommandExamples([\n {\n description:\n \"Delete a file from workspace storage. Records that still reference the file id keep the stale pointer until updated separately.\",\n command: `zinkee --json files delete ${SAMPLE_UUID}`,\n response: `{\n \"id\": \"d290f1ee-6c54-4b01-90e6-d701748f0851\",\n \"deleted\": true\n}`,\n },\n ]),\n \"navigation folders create\": buildCommandExamples([\n {\n description: \"Create a folder with a display order and custom properties.\",\n command:\n `zinkee --json navigation folders create --name Finance --order 20 --props '{\"color\":\"green\"}'`,\n raw: `{\n \"name\": \"Finance\",\n \"order\": 20,\n \"additionalProperties\": {\n \"color\": \"green\"\n }\n}`,\n response: `{\n \"folderId\": \"c5d6e7f8-9012-3456-789a-bcdef0123456\",\n \"name\": \"Finance\"\n}`,\n },\n {\n description: \"Minimal create with just a name.\",\n command: 'zinkee --json navigation folders create --name Archive',\n raw: `{\n \"name\": \"Archive\"\n}`,\n },\n {\n description: \"Create a folder with color and icon metadata.\",\n command:\n `zinkee --json navigation folders create --name Reports --order 5 --props '{\"color\":\"teal\",\"icon\":\"chart-line\"}'`,\n raw: `{\n \"name\": \"Reports\",\n \"order\": 5,\n \"additionalProperties\": {\n \"color\": \"teal\",\n \"icon\": \"chart-line\"\n }\n}`,\n },\n ]),\n \"navigation folders update\": buildCommandExamples([\n {\n description: \"Rename the folder, change its order, and rewrite its additionalProperties.\",\n command:\n `zinkee --json navigation folders update Finance --name \"Finance Ops\" --order 30 --props '{\"color\":\"teal\"}'`,\n raw: `{\n \"name\": \"Finance Ops\",\n \"order\": 30,\n \"additionalProperties\": {\n \"color\": \"teal\"\n }\n}`,\n response: `{\n \"folderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"name\": \"Finance Ops\"\n}`,\n },\n {\n description: \"Rename only.\",\n command: 'zinkee --json navigation folders update Finance --name \"Finance (legacy)\"',\n raw: `{\n \"name\": \"Finance (legacy)\"\n}`,\n },\n {\n description: \"Change only the display order.\",\n command: 'zinkee --json navigation folders update Finance --order 1',\n raw: `{\n \"order\": 1\n}`,\n },\n {\n description: \"Replace only additionalProperties.\",\n command:\n `zinkee --json navigation folders update Finance --props '{\"color\":\"red\",\"icon\":\"archive\"}'`,\n raw: `{\n \"additionalProperties\": {\n \"color\": \"red\",\n \"icon\": \"archive\"\n }\n}`,\n },\n ]),\n \"navigation resources move\": buildCommandExamples([\n {\n description:\n \"Move a schema into a navigation folder. Only schemas can be moved; the navigation menu holds databases.\",\n command:\n 'zinkee --json navigation resources move 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --to Sales',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\"\n}`,\n },\n {\n description: \"Move a schema back to the root folder (root is always UUID 00000000-0000-0000-0000-000000000000).\",\n command:\n 'zinkee --json navigation resources move 5223cbc8-8c6c-4694-93bc-dd176364df9b --to 00000000-0000-0000-0000-000000000000',\n raw: `{\n \"resourceId\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetFolderId\": \"00000000-0000-0000-0000-000000000000\"\n}`,\n },\n ]),\n \"teamspace folders create\": buildCommandExamples([\n {\n description: \"Create a teamspace folder with order and icon metadata.\",\n command:\n `zinkee --json teamspace folders create --name \"Customer Success\" --order 10 --props '{\"icon\":\"folder-users\"}'`,\n raw: `{\n \"name\": \"Customer Success\",\n \"order\": 10,\n \"additionalProperties\": {\n \"icon\": \"folder-users\"\n }\n}`,\n response: `{\n \"id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"name\": \"Customer Success\",\n \"order\": 10,\n \"isRoot\": false,\n \"resourceCount\": 0,\n \"resources\": [],\n \"additionalProperties\": {\n \"icon\": \"folder-users\"\n }\n}`,\n },\n {\n description: \"Minimal create.\",\n command: 'zinkee --json teamspace folders create --name Shared',\n raw: `{\n \"name\": \"Shared\"\n}`,\n },\n {\n description: \"Prominent folder with icon and color.\",\n command:\n `zinkee --json teamspace folders create --name Executive --order 1 --props '{\"icon\":\"crown\",\"color\":\"gold\"}'`,\n raw: `{\n \"name\": \"Executive\",\n \"order\": 1,\n \"additionalProperties\": {\n \"icon\": \"crown\",\n \"color\": \"gold\"\n }\n}`,\n },\n ]),\n \"teamspace folders update\": buildCommandExamples([\n {\n description: \"Rename, reorder and update properties in one call.\",\n command:\n `zinkee --json teamspace folders update \"Customer Success\" --name \"Shared KPIs\" --order 5 --props '{\"icon\":\"chart-bar\"}'`,\n raw: `{\n \"name\": \"Shared KPIs\",\n \"order\": 5,\n \"additionalProperties\": {\n \"icon\": \"chart-bar\"\n }\n}`,\n response: `{\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared KPIs\",\n \"order\": 5,\n \"isRoot\": false,\n \"resourceCount\": 1,\n \"resources\": [\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"type\": \"DISPLAY\"\n }\n ],\n \"additionalProperties\": {\n \"icon\": \"chart-bar\"\n }\n}`,\n },\n {\n description: \"Rename only.\",\n command:\n 'zinkee --json teamspace folders update \"Customer Success\" --name \"Shared Analytics\"',\n raw: `{\n \"name\": \"Shared Analytics\"\n}`,\n },\n {\n description: \"Reorder only.\",\n command: 'zinkee --json teamspace folders update \"Customer Success\" --order 2',\n raw: `{\n \"order\": 2\n}`,\n },\n {\n description: \"Update only the icon metadata.\",\n command:\n `zinkee --json teamspace folders update \"Customer Success\" --props '{\"icon\":\"chart-line\"}'`,\n raw: `{\n \"additionalProperties\": {\n \"icon\": \"chart-line\"\n }\n}`,\n },\n ]),\n \"teamspace resources publish\": buildCommandExamples([\n {\n description: \"Publish a schema by slug into a teamspace folder.\",\n command:\n 'zinkee --json teamspace resources publish customer-records --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"customer-records\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolder\": {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"isRoot\": false\n },\n \"previousFolder\": null\n}`,\n },\n {\n description: \"Publish a schema by UUID.\",\n command:\n 'zinkee --json teamspace resources publish 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n },\n {\n description: \"Publish a display.\",\n command:\n 'zinkee --json teamspace resources publish 0f6f062f-1478-4df2-96a1-c495d037d260 --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n },\n {\n description: \"Publish directly at the teamspace root (root folder UUID is always 00000000-0000-0000-0000-000000000000).\",\n command:\n 'zinkee --json teamspace resources publish customer-records --to 00000000-0000-0000-0000-000000000000',\n raw: `{\n \"resourceId\": \"customer-records\",\n \"targetFolderId\": \"00000000-0000-0000-0000-000000000000\"\n}`,\n },\n ]),\n \"teamspace resources unpublish\": buildCommandExamples([\n {\n description: \"Unpublish a schema by slug.\",\n command: 'zinkee --json teamspace resources unpublish customer-records',\n raw: `{\n \"resourceId\": \"customer-records\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"removedFromFolder\": {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"isRoot\": false\n }\n}`,\n },\n {\n description: \"Unpublish a schema by UUID.\",\n command:\n 'zinkee --json teamspace resources unpublish 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\"\n}`,\n },\n {\n description: \"Unpublish a display.\",\n command:\n 'zinkee --json teamspace resources unpublish 0f6f062f-1478-4df2-96a1-c495d037d260',\n raw: `{\n \"resourceId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n ]),\n \"displays create\": buildCommandExamples([\n {\n description:\n \"Create a freeform display with an initial widget layout. Freeform layouts travel through --freeform-layouts.\",\n command:\n `zinkee --json displays create --name \"Control Proyecto Freeform\" --template freeform --freeform-layouts '{\"lg\":[{\"i\":\"widget-1\",\"x\":0,\"y\":0,\"w\":6,\"h\":5}]}'`,\n raw: `{\n \"name\": \"Control Proyecto Freeform\",\n \"layout\": {\n \"template\": \"freeform\",\n \"freeformLayouts\": {\n \"lg\": [\n { \"i\": \"widget-1\", \"x\": 0, \"y\": 0, \"w\": 6, \"h\": 5 }\n ]\n }\n }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n {\n description: \"Create a tabbed display using the widget_row_tabs template.\",\n command:\n 'zinkee --json displays create --name \"Executive Revenue\" --template widget_row_tabs',\n raw: `{\n \"name\": \"Executive Revenue\",\n \"layout\": {\n \"template\": \"widget_row_tabs\"\n }\n}`,\n },\n {\n description: \"Create a grid display.\",\n command:\n 'zinkee --json displays create --name \"Customer Detail\" --template grid',\n raw: `{\n \"name\": \"Customer Detail\",\n \"layout\": {\n \"template\": \"grid\"\n }\n}`,\n },\n ]),\n \"displays tabs create\": buildCommandExamples([\n {\n description: \"Create a horizontal tab.\",\n command:\n 'zinkee --json displays tabs create 0f6f062f-1478-4df2-96a1-c495d037d260 --name Overview --orientation horizontal',\n raw: `{\n \"name\": \"Overview\",\n \"orientation\": \"horizontal\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-overview\"\n}`,\n },\n {\n description: \"Create a vertical tab.\",\n command:\n 'zinkee --json displays tabs create 0f6f062f-1478-4df2-96a1-c495d037d260 --name Details --orientation vertical',\n raw: `{\n \"name\": \"Details\",\n \"orientation\": \"vertical\"\n}`,\n },\n ]),\n \"displays tabs update\": buildCommandExamples([\n {\n description: \"Rename a tab.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --name \"Overview (renamed)\"',\n raw: `{\n \"name\": \"Overview (renamed)\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-main\"\n}`,\n },\n {\n description: \"Change orientation only.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --orientation vertical',\n raw: `{\n \"orientation\": \"vertical\"\n}`,\n },\n {\n description: \"Rename and reorient at once.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --name Details --orientation vertical',\n raw: `{\n \"name\": \"Details\",\n \"orientation\": \"vertical\"\n}`,\n },\n ]),\n \"displays variables create\": buildCommandExamples([\n {\n description:\n \"Create a single-select REFERENCE variable bound to a (schema, field) pair. schemaId and fieldId accept slugs or UUIDs.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type REFERENCE --name Customer --source-schema contacts --source-field contact-name --default \"\"',\n raw: `{\n \"type\": \"REFERENCE\",\n \"name\": \"Customer\",\n \"source\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"contact-name\"\n },\n \"defaultValue\": \"\",\n \"allowMultiple\": false,\n \"staticVariable\": false,\n \"filters\": []\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Create a multi-select REFERENCE variable with a filter. Complex filters go via --raw because --filter only accepts raw expressions.\",\n command:\n `zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --raw '{\"type\":\"REFERENCE\",\"name\":\"Active customers\",\"source\":{\"schemaId\":\"contacts\",\"fieldId\":\"contact-name\"},\"defaultValues\":[],\"allowMultiple\":true,\"staticVariable\":false,\"filters\":[{\"origin\":{\"schemaId\":\"contacts\",\"fieldId\":\"status\"},\"comparisonOperator\":\"ANY_OF\",\"values\":[\"1\",\"2\"]}]}'`,\n raw: `{\n \"type\": \"REFERENCE\",\n \"name\": \"Active customers\",\n \"source\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"contact-name\"\n },\n \"defaultValues\": [],\n \"allowMultiple\": true,\n \"staticVariable\": false,\n \"filters\": [\n {\n \"origin\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"status\"\n },\n \"comparisonOperator\": \"ANY_OF\",\n \"values\": [\"1\", \"2\"]\n }\n ]\n}`,\n },\n {\n description: \"Create a MEMBER variable with a default user id.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type MEMBER --name Owner --default 6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d',\n raw: `{\n \"type\": \"MEMBER\",\n \"name\": \"Owner\",\n \"defaultValue\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\",\n \"allowMultiple\": false,\n \"staticVariable\": false\n}`,\n },\n {\n description: \"Create a DATE variable using a dynamic period (thisMonth).\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Period --date-mode dynamic --date-dynamic-option thisMonth',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Period\",\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"thisMonth\"\n }\n}`,\n },\n {\n description: \"Create a DATE variable with a specific date.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Cutoff --date-mode specific --date-specific 2026-04-22',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Cutoff\",\n \"date\": {\n \"mode\": \"specific\",\n \"specificDate\": \"2026-04-22\"\n }\n}`,\n },\n {\n description: \"Create a DATE variable with a custom range.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Quarter --date-mode range --date-range-start 2026-04-01 --date-range-end 2026-06-30',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Quarter\",\n \"date\": {\n \"mode\": \"range\",\n \"rangeStart\": \"2026-04-01\",\n \"rangeEnd\": \"2026-06-30\"\n }\n}`,\n },\n ]),\n \"displays variables update\": buildCommandExamples([\n {\n description:\n \"Rename the variable and make it static (defaults must be cleared with a raw patch because the CLI has no --default-values [] shortcut).\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --raw '{\"name\":\"Proyecto principal\",\"staticVariable\":true,\"defaultValues\":[]}'`,\n raw: `{\n \"name\": \"Proyecto principal\",\n \"staticVariable\": true,\n \"defaultValues\": []\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description: \"Replace the reference filters of the variable.\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --raw '{\"filters\":[{\"origin\":{\"schemaId\":\"contacts\",\"fieldId\":\"status\"},\"comparisonOperator\":\"ANY_OF\",\"values\":[\"2\",\"3\"]}]}'`,\n raw: `{\n \"filters\": [\n {\n \"origin\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"status\"\n },\n \"comparisonOperator\": \"ANY_OF\",\n \"values\": [\"2\", \"3\"]\n }\n ]\n}`,\n },\n {\n description: \"Switch a variable to multi-select.\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --allow-multiple --raw '{\"defaultValues\":[]}'`,\n raw: `{\n \"allowMultiple\": true,\n \"defaultValues\": []\n}`,\n },\n {\n description: \"Change a DATE variable to use last12Months.\",\n command:\n 'zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 bbbbbbbb-2222-4222-a222-222222222222 --date-mode dynamic --date-dynamic-option last12Months',\n raw: `{\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"last12Months\"\n }\n}`,\n },\n ]),\n \"displays widgets create\": buildCommandExamples([\n {\n description:\n \"Create a TABLE widget (CLI normalises --type table to TABLE_OR_SUBTABLE).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type table --name Customers --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":8}' --field contact-name --field status --field amount --sort '{\"fieldId\":\"contact-name\",\"direction\":\"ASC\"}'`,\n raw: `{\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\"\n },\n \"query\": {\n \"sorts\": [\n { \"fieldId\": \"contact-name\", \"direction\": \"ASC\" }\n ]\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"]\n }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Create a DETAIL widget on a tab. The rich placement is easier via --raw.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --raw '{\"type\":\"DETAIL\",\"source\":{\"originResourceId\":\"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\"isOriginSubSchema\":false},\"placement\":{\"tabId\":\"tab-detail\",\"layout\":{\"x\":0,\"y\":0,\"w\":6,\"h\":10}},\"presentation\":{\"name\":\"Customer detail\"},\"behavior\":{\"readOnly\":true},\"view\":{\"fields\":[\"contact-name\",\"contact-email\",\"status\",\"amount\"]}}'`,\n raw: `{\n \"type\": \"DETAIL\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"tabId\": \"tab-detail\",\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 6, \"h\": 10 }\n },\n \"presentation\": { \"name\": \"Customer detail\" },\n \"behavior\": { \"readOnly\": true },\n \"view\": {\n \"fields\": [\"contact-name\", \"contact-email\", \"status\", \"amount\"]\n }\n}`,\n },\n {\n description: \"Create a KPI widget computing SUM(amount).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type KPI --name \"Total revenue\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":3,\"h\":3}' --calc SUM --calc-field amount --kpi-config '{\"format\":\"currency\",\"decimals\":2}'`,\n raw: `{\n \"type\": \"KPI\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 3, \"h\": 3 }\n },\n \"presentation\": { \"name\": \"Total revenue\" },\n \"kpi\": {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"config\": { \"format\": \"currency\", \"decimals\": 2 }\n }\n}`,\n },\n {\n description: \"Create a CHART widget with a daily time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by day\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type lines --x-axis-field due-date --x-axis-date-format DATE --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by day\" },\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"DATE\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a bars CHART widget with a monthly time-serie x-axis and two y-axis series.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by month\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type bars --x-axis-field due-date --x-axis-date-format MONTH_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --y-axis-serie '{\"typeCalc\":\"COUNT\",\"fieldCalc\":\"contact-name\",\"color\":\"#E57373\",\"axisType\":\"SECONDARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by month\" },\n \"chart\": {\n \"chartType\": \"bars\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"MONTH_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n },\n {\n \"typeCalc\": \"COUNT\",\n \"fieldCalc\": \"contact-name\",\n \"color\": \"#E57373\",\n \"axisType\": \"SECONDARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a bars CHART widget with a quarterly time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by quarter\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type bars --x-axis-field due-date --x-axis-date-format QUARTER_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by quarter\" },\n \"chart\": {\n \"chartType\": \"bars\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"QUARTER_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a CHART widget with a yearly time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by year\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type lines --x-axis-field due-date --x-axis-date-format YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by year\" },\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description:\n \"Create a TIMELINE widget via flags. The typed view state lives in view.viewAdditionalProperties.viewState; field references there must be UUIDs (slugs are only resolved in --field). cardConfig uses category1/category2/category4 (no category3). Use --view-state for UI scalars (granularity, sidebarWidth, show* ...).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type TIMELINE --name \"Customer schedule\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":6}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --start-date-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --end-date-field e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012 --label-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --group-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --subgroup-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --progress-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-title-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-category1-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --card-category2-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --card-category4-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-description-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --view-state '{\"granularity\":\"month\",\"sidebarWidth\":300,\"showUngroupedEvents\":true,\"showUnsubgroupedEvents\":true}'`,\n raw: `{\n \"type\": \"TIMELINE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Customer schedule\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\"\n ],\n \"viewAdditionalProperties\": {\n \"viewState\": {\n \"granularity\": \"month\",\n \"sidebarWidth\": 300,\n \"showUngroupedEvents\": true,\n \"showUnsubgroupedEvents\": true,\n \"fieldMapping\": {\n \"startDateField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endDateField\": \"e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012\",\n \"labelField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"groupField\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"subgroupField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"progressField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"cardConfig\": {\n \"titleField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"category1Field\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"category2Field\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"category4Field\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"descriptionField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n }\n }\n }\n }\n}`,\n },\n {\n description:\n \"Create a KANBAN widget via flags. The typed view state lives in view.viewAdditionalProperties.viewState; field references there must be UUIDs (slugs are only resolved in --field). cardConfig uses category1/category2/category3 (no category4). --aggregation-method/--aggregation-field set the card aggregation; use --view-state for UI scalars.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type KANBAN --name \"Status board\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":8}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --column-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --swimlane-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-title-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-category1-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --card-category2-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --card-category3-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-description-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --aggregation-method sum --aggregation-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --view-state '{\"hideEmptyColumns\":false,\"showNoValueColumn\":true,\"showNoValueSwimlane\":true}'`,\n raw: `{\n \"type\": \"KANBAN\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": { \"name\": \"Status board\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\"\n ],\n \"viewAdditionalProperties\": {\n \"viewState\": {\n \"hideEmptyColumns\": false,\n \"showNoValueColumn\": true,\n \"showNoValueSwimlane\": true,\n \"fieldMapping\": {\n \"columnField\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"swimlaneField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"cardConfig\": {\n \"titleField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"category1Field\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"category2Field\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"category3Field\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"descriptionField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"aggregationConfig\": {\n \"method\": \"sum\",\n \"fieldId\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\"\n }\n }\n }\n }\n }\n}`,\n },\n {\n description:\n \"Create a HIERARCHY widget via flags. Declare columns once (--hierarchy-label, repeatable --hierarchy-info <id:name>, --hierarchy-number <id:name:aggregation>), map the root level (the view's own table) with --hierarchy-root-* and add each child level as a JSON object with --hierarchy-child. label is required per level; info/number mappings are optional. Column ids (e.g. col_1779975207355_zfndknslw) are unique opaque identifiers you choose — not the column name — and are reused as columnId in every mapping. All field references must be UUIDs.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type HIERARCHY --name \"Org tree\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":6}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --hierarchy-label \"Name\" --hierarchy-info \"col_1779975207355_zfndknslw:Status\" --hierarchy-info \"col_1779975243018_qm4t7xb2pa:Description\" --hierarchy-number \"col_1779975261490_h8kd3nv9ws:Total amount:SUM\" --hierarchy-root-name \"Customers\" --hierarchy-root-label-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --hierarchy-root-info \"col_1779975207355_zfndknslw:a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\" --hierarchy-root-number \"col_1779975261490_h8kd3nv9ws:c52efe3f-2825-4c60-a7e3-34dd4c1ce043\" --hierarchy-child '{\"name\":\"Projects\",\"schemaId\":\"3ec9cdef-7e0a-4cdd-8019-8fb9281f5d6f\",\"childFieldId\":\"80deefae-af3d-4000-b322-bfe1594f8073\",\"labelFieldId\":\"50dbef0b-7e0a-4fdd-8019-8fb9281f5d70\",\"infoMappings\":[{\"columnId\":\"col_1779975243018_qm4t7xb2pa\",\"fieldId\":\"60dcef0c-8f1b-4eee-9120-9fc0392f6e71\"}],\"numberMappings\":[{\"columnId\":\"col_1779975261490_h8kd3nv9ws\",\"fieldId\":\"70ddef0d-9f2c-4fff-a221-afd0493f7f72\"}]}'`,\n raw: `{\n \"type\": \"HIERARCHY\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Org tree\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\"\n ],\n \"hierarchyConfig\": {\n \"columns\": {\n \"label\": \"Name\",\n \"infos\": [\n { \"id\": \"col_1779975207355_zfndknslw\", \"name\": \"Status\" },\n { \"id\": \"col_1779975243018_qm4t7xb2pa\", \"name\": \"Description\" }\n ],\n \"numbers\": [\n { \"id\": \"col_1779975261490_h8kd3nv9ws\", \"name\": \"Total amount\", \"aggregation\": \"SUM\" }\n ]\n },\n \"rootLevel\": {\n \"name\": \"Customers\",\n \"labelFieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"infoMappings\": [\n { \"columnId\": \"col_1779975207355_zfndknslw\", \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\" }\n ],\n \"numberMappings\": [\n { \"columnId\": \"col_1779975261490_h8kd3nv9ws\", \"fieldId\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\" }\n ]\n },\n \"childLevels\": [\n {\n \"name\": \"Projects\",\n \"schemaId\": \"3ec9cdef-7e0a-4cdd-8019-8fb9281f5d6f\",\n \"childFieldId\": \"80deefae-af3d-4000-b322-bfe1594f8073\",\n \"labelFieldId\": \"50dbef0b-7e0a-4fdd-8019-8fb9281f5d70\",\n \"infoMappings\": [\n { \"columnId\": \"col_1779975243018_qm4t7xb2pa\", \"fieldId\": \"60dcef0c-8f1b-4eee-9120-9fc0392f6e71\" }\n ],\n \"numberMappings\": [\n { \"columnId\": \"col_1779975261490_h8kd3nv9ws\", \"fieldId\": \"70ddef0d-9f2c-4fff-a221-afd0493f7f72\" }\n ]\n }\n ]\n }\n }\n}`,\n },\n ]),\n \"displays widgets update\": buildCommandExamples([\n {\n description: \"Move placement, update view columns, rename the widget and lock it.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --layout '{\"x\":1,\"y\":2,\"w\":8,\"h\":4}' --field contact-name --field status --field amount --name \"Revenue Updated\" --widget-read-only`,\n raw: `{\n \"placement\": {\n \"layout\": { \"x\": 1, \"y\": 2, \"w\": 8, \"h\": 4 }\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"]\n },\n \"presentation\": { \"name\": \"Revenue Updated\" },\n \"behavior\": { \"readOnly\": true }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Add query filters with --filter. The CLI parses the expression and emits the structured comparisonOperator payload the API expects.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --filter \"status:eq:2\" --filter \"amount:gte:500\"`,\n raw: `{\n \"query\": {\n \"filters\": [\n {\n \"origin\": { \"fieldId\": \"status\" },\n \"comparisonOperator\": \"EQUAL\",\n \"values\": [\"2\"]\n },\n {\n \"origin\": { \"fieldId\": \"amount\" },\n \"comparisonOperator\": \"GREATER_OR_EQUAL\",\n \"values\": [\"500\"]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Fall back to --raw for comparators the parser does not cover yet (e.g. NOT_CONTAINS, RANGE).\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --raw '{\"query\":{\"filters\":[{\"origin\":{\"fieldId\":\"due-date\"},\"comparisonOperator\":\"RANGE\",\"values\":[\"2025-01-01\",\"2025-12-31\"]}]}}'`,\n raw: `{\n \"query\": {\n \"filters\": [\n {\n \"origin\": { \"fieldId\": \"due-date\" },\n \"comparisonOperator\": \"RANGE\",\n \"values\": [\"2025-01-01\", \"2025-12-31\"]\n }\n ]\n }\n}`,\n },\n {\n description: \"Hide the add, delete and filter buttons.\",\n command:\n 'zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --hide-add-button --hide-delete-button --hide-filter-button',\n raw: `{\n \"behavior\": {\n \"hideAddButton\": true,\n \"hideDeleteButton\": true,\n \"hideFilterButton\": true\n }\n}`,\n },\n {\n description: \"Update the KPI aggregation to AVG with one-decimal format.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 33333333-3333-4333-a333-333333333333 --calc AVG --calc-field amount --kpi-config '{\"format\":\"number\",\"decimals\":1}'`,\n raw: `{\n \"kpi\": {\n \"typeCalc\": \"AVG\",\n \"fieldCalc\": \"amount\",\n \"config\": { \"format\": \"number\", \"decimals\": 1 }\n }\n}`,\n },\n {\n description: \"Replace the chart series with quarterly lines.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 22222222-2222-4222-a222-222222222222 --chart-type lines --x-axis-field due-date --x-axis-date-format QUARTER_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#2E7D32\",\"axisType\":\"PRIMARY\"}'`,\n raw: `{\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"QUARTER_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#2E7D32\",\n \"axisType\": \"PRIMARY\"\n }\n ]\n }\n}`,\n },\n {\n description: \"Rewrite the widget bindings (requires --raw because the CLI has no --binding flag).\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --raw '{\"bindings\":{\"variableMap\":{\"aaaaaaaa-1111-4111-a111-111111111111\":\"contact-name\",\"cccccccc-3333-4333-a333-333333333333\":\"owner\"}}}'`,\n raw: `{\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"contact-name\",\n \"cccccccc-3333-4333-a333-333333333333\": \"owner\"\n }\n }\n}`,\n },\n ]),\n \"displays navigation-targets create\": buildCommandExamples([\n {\n description: \"Create a navigation target with a visible label.\",\n command:\n 'zinkee --json displays navigation-targets create 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --target-display ef012345-6789-4abc-8def-0123456789ab --target-variable aaaaaaaa-1111-4111-a111-111111111111 --label \"Open customer\"',\n raw: `{\n \"sourceWidgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"label\": \"Open customer\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n {\n description: \"Create a navigation target without a label (uses the target display name).\",\n command:\n 'zinkee --json displays navigation-targets create 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 22222222-2222-4222-a222-222222222222 --target-display ef012345-6789-4abc-8def-0123456789ab --target-variable aaaaaaaa-1111-4111-a111-111111111111',\n raw: `{\n \"sourceWidgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays navigation-targets update\": buildCommandExamples([\n {\n description: \"Change just the label.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --label \"Go to customer\"',\n raw: `{\n \"label\": \"Go to customer\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n {\n description: \"Redirect the target to another display/variable pair.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --target-display 6b7c8d9e-0f12-3456-789a-bcdef0123456 --target-variable bbbbbbbb-2222-4222-a222-222222222222',\n raw: `{\n \"targetDisplayId\": \"6b7c8d9e-0f12-3456-789a-bcdef0123456\",\n \"targetVariableId\": \"bbbbbbbb-2222-4222-a222-222222222222\"\n}`,\n },\n {\n description: \"Change the source widget.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --source-widget 44444444-4444-4444-a444-444444444444',\n raw: `{\n \"sourceWidgetId\": \"44444444-4444-4444-a444-444444444444\"\n}`,\n },\n ]),\n \"displays cross-widget-filter set\": buildCommandExamples([\n {\n description: \"Link one source widget/field to several target widgets through the same field.\",\n command:\n 'zinkee --json displays cross-widget-filter set 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --source-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --target 22222222-2222-4222-a222-222222222222:c60b8526-5835-4c9f-aecd-9a16c7704a34 --target 33333333-3333-4333-a333-333333333333:c60b8526-5835-4c9f-aecd-9a16c7704a34',\n raw: `{\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"targets\": [\n {\n \"widgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n {\n \"widgetId\": \"33333333-3333-4333-a333-333333333333\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n ]\n}`,\n },\n {\n description: \"Filter one target widget by the status field of the source.\",\n command:\n 'zinkee --json displays cross-widget-filter set 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --source-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --target 66666666-6666-4666-a666-666666666666:a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890',\n raw: `{\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\"\n },\n \"targets\": [\n {\n \"widgetId\": \"66666666-6666-4666-a666-666666666666\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\"\n }\n ]\n}`,\n },\n ]),\n \"schemas list\": buildCommandExamples([\n {\n description: \"List schemas in the workspace with folder and field counts.\",\n command: \"zinkee --json schemas list\",\n response: `[\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Contacts\",\n \"slug\": \"contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": false,\n \"commentable\": false,\n \"fieldCount\": 11\n },\n {\n \"id\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"name\": \"Orders\",\n \"slug\": \"orders\",\n \"folder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n },\n \"auditable\": true,\n \"commentable\": true,\n \"fieldCount\": 7\n }\n]`,\n },\n ]),\n \"schemas get\": buildCommandExamples([\n {\n description: \"Get a schema with all its fields.\",\n command: \"zinkee --json schemas get contacts\",\n response: `{\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Contacts\",\n \"slug\": \"contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": true,\n \"commentable\": true,\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"fields\": [\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"NORMAL\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\",\n \"type\": \"TextField\",\n \"slug\": \"notes\",\n \"label\": \"Notes\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": null,\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"type\": \"NumberField\",\n \"slug\": \"amount\",\n \"label\": \"Amount\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"currency\",\n \"decimals\": 2,\n \"negativesInRed\": true,\n \"thousandsSeparator\": true,\n \"symbolEnabled\": true,\n \"symbolPosition\": \"before\",\n \"symbolValue\": \"€\"\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"2f3a4b5c-6d7e-8f90-1234-56789abcdef0\",\n \"type\": \"NumberField\",\n \"slug\": \"quantity\",\n \"label\": \"Quantity\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"number\",\n \"decimals\": 0,\n \"thousandsSeparator\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"3a4b5c6d-7e8f-9012-3456-789abcdef012\",\n \"type\": \"NumberField\",\n \"slug\": \"discount-rate\",\n \"label\": \"Discount Rate\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"percentage\",\n \"decimals\": 1,\n \"negativesInRed\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"type\": \"DateField\",\n \"slug\": \"due-date\",\n \"label\": \"Due Date\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"datetime\",\n \"dateFormat\": \"DD/MM/YYYY\",\n \"showTime\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"4b5c6d7e-8f90-1234-5678-9abcdef01234\",\n \"type\": \"DateField\",\n \"slug\": \"birth-date\",\n \"label\": \"Birth Date\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"YYYY-MM-DD\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n },\n {\n \"id\": \"5c6d7e8f-9012-3456-789a-bcdef0123456\",\n \"type\": \"OptionField\",\n \"slug\": \"stage\",\n \"label\": \"Stage\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"To Do\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"Doing\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"requireConfirmation\": false,\n \"lockAfterSelection\": false,\n \"allowReselect\": true\n }\n }\n }\n },\n {\n \"id\": \"3e9f8c12-4a5b-6c7d-8e9f-0a1b2c3d4e5f\",\n \"type\": \"FormulaField\",\n \"slug\": \"formula-total\",\n \"label\": \"Formula Total\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"formulaText\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.21\",\n \"uiFormatKind\": \"number\",\n \"status\": \"ACTIVE\",\n \"defaultValue\": null,\n \"numberFormatOptions\": {\n \"format\": \"number\",\n \"decimals\": 2,\n \"thousandsSeparator\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"6d7e8f90-1234-5678-9abc-def012345678\",\n \"type\": \"FormulaField\",\n \"slug\": \"formula-period\",\n \"label\": \"Formula Period\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"formulaText\": \"date_format(d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90, \\\"AAAA-MM\\\")\",\n \"uiFormatKind\": \"date\",\n \"status\": \"ACTIVE\",\n \"defaultValue\": null,\n \"dateFormatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"DD/MM/YYYY\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n \"type\": \"ReferenceField\",\n \"slug\": \"customer-ref\",\n \"label\": \"Customer\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"SET_NULL\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"7e8f9012-3456-789a-bcde-f01234567890\",\n \"type\": \"ReferenceField\",\n \"slug\": \"company-ref\",\n \"label\": \"Company\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"RESTRICT\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e\",\n \"type\": \"AutoIncrementalField\",\n \"slug\": \"sequence-code\",\n \"label\": \"Sequence Code\",\n \"required\": false,\n \"system\": true,\n \"config\": {\n \"segmentedByFieldId\": \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"8f901234-5678-9abc-def0-123456789012\",\n \"type\": \"AutoIncrementalField\",\n \"slug\": \"order-number\",\n \"label\": \"Order Number\",\n \"required\": false,\n \"system\": true,\n \"config\": {\n \"segmentedByFieldId\": null,\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012\",\n \"type\": \"FileField\",\n \"slug\": \"attachment\",\n \"label\": \"Attachment\",\n \"required\": false,\n \"system\": false,\n \"config\": {}\n },\n {\n \"id\": \"f6a7b8c9-d0e1-2f3a-4b5c-6d7e8f901234\",\n \"type\": \"ScheduleField\",\n \"slug\": \"recurrence\",\n \"label\": \"Recurrence\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"monthly\"\n }\n },\n {\n \"id\": \"9012abcd-ef01-2345-6789-abcdef012345\",\n \"type\": \"ScheduleField\",\n \"slug\": \"daily-recurrence\",\n \"label\": \"Daily Recurrence\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"daily\"\n }\n },\n {\n \"id\": \"a7b8c9d0-e1f2-3a4b-5c6d-7e8f90123456\",\n \"type\": \"MemberField\",\n \"slug\": \"owner\",\n \"label\": \"Owner\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"conditionalFormatting\": []\n }\n }\n ]\n}`,\n },\n ]),\n \"schemas delete\": buildCommandExamples([\n {\n description: \"Delete a schema (also removes it from navigation folders).\",\n command: \"zinkee --json schemas delete contacts\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"deleted\": true\n}`,\n },\n ]),\n \"schemas fields list\": buildCommandExamples([\n {\n description: \"List the fields of a schema (fields are inlined in the schema resource).\",\n command: \"zinkee --json schemas fields list contacts\",\n response: `[\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n }\n]`,\n },\n ]),\n \"schemas fields get\": buildCommandExamples([\n {\n description: \"Get a schema field (returns the full typed field contract).\",\n command: \"zinkee --json schemas fields get contacts status\",\n response: `{\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"requireConfirmation\": false,\n \"lockAfterSelection\": false,\n \"useFixedLabel\": false,\n \"allowReselect\": true\n }\n }\n }\n}`,\n },\n ]),\n \"schemas fields delete\": buildCommandExamples([\n {\n description: \"Delete a schema field.\",\n command: \"zinkee --json schemas fields delete contacts status\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"slug\": \"status\"\n}`,\n },\n ]),\n \"records list\": buildCommandExamples([\n {\n description: \"List records with default pagination.\",\n command: \"zinkee --json records list contacts\",\n response: `{\n \"records\": [\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n },\n {\n \"recordId\": \"7c9a4b31-e85d-42f7-8b6a-123456789abc\",\n \"values\": {\n \"contact-name\": \"Alan Turing\",\n \"contact-email\": \"alan@example.com\",\n \"status\": 1,\n \"amount\": 890.00\n }\n }\n ],\n \"page\": {\n \"offset\": 0,\n \"limit\": 50,\n \"total\": 2,\n \"count\": 2,\n \"hasMore\": false\n }\n}`,\n },\n {\n description: \"Paginate further into the result set.\",\n command: \"zinkee --json records list contacts --limit 50 --offset 100\",\n },\n ]),\n \"records get\": buildCommandExamples([\n {\n description: \"Get one record by id (values are keyed by field slug).\",\n command: `zinkee --json records get contacts ${SAMPLE_UUID}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n ]),\n \"records delete\": buildCommandExamples([\n {\n description: \"Delete a record.\",\n command: `zinkee --json records delete contacts ${SAMPLE_UUID}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"deleted\": true\n}`,\n },\n ]),\n \"records clear\": buildCommandExamples([\n {\n description:\n \"Delete every record from a schema's table. Heritage rules (CASCADE / SET NULL) propagate to child schemas asynchronously via the CDC pipeline.\",\n command: \"zinkee --json records clear contacts\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"cleared\": true\n}`,\n },\n ]),\n \"comments list\": buildCommandExamples([\n {\n description: \"List comments on a record (content is an array of TEXT/MENTION items).\",\n command: `zinkee --json comments list contacts ${SAMPLE_UUID}`,\n response: `[\n {\n \"id\": \"cd8e3b2a-1f5c-4e9a-8b7d-0a2b3c4d5e6f\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"This record needs review.\" }\n ]\n },\n {\n \"id\": \"a1b2c3d4-5e6f-7890-abcd-ef1234567890\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T11:30:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"Assigning to \" },\n { \"type\": \"MENTION\", \"value\": \"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\" },\n { \"type\": \"TEXT\", \"value\": \" for follow up.\" }\n ]\n }\n]`,\n },\n ]),\n \"logs list\": buildCommandExamples([\n {\n description:\n \"List the change history for a record (CREATE entry plus UPDATE entries with before/after values per field).\",\n command: `zinkee --json logs list contacts ${SAMPLE_UUID}`,\n response: `[\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:00:00Z\",\n \"changeField\": \"\",\n \"change\": {\n \"beforeValue\": null,\n \"afterValue\": null,\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"CREATE\"\n }\n },\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:15:00Z\",\n \"changeField\": \"status\",\n \"change\": {\n \"beforeValue\": \"1\",\n \"afterValue\": \"2\",\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"UPDATE\"\n }\n },\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:20:00Z\",\n \"changeField\": \"amount\",\n \"change\": {\n \"beforeValue\": \"1000.00\",\n \"afterValue\": \"1250.50\",\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"UPDATE\"\n }\n }\n]`,\n },\n ]),\n \"navigation folders list\": buildCommandExamples([\n {\n description: \"List navigation folders with embedded resources, sorted by order.\",\n command: \"zinkee --json navigation folders list\",\n response: `[\n {\n \"id\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"order\": 1,\n \"name\": \"Sales\",\n \"resources\": [\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer records\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": false,\n \"additionalProperties\": {}\n },\n {\n \"id\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"name\": \"Orders\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": true,\n \"additionalProperties\": {}\n }\n ],\n \"additionalProperties\": {\n \"color\": \"blue\"\n }\n },\n {\n \"id\": \"b8c9d0e1-f2a3-4b5c-6d7e-8f9012345678\",\n \"order\": 2,\n \"name\": \"Operations\",\n \"resources\": [\n {\n \"id\": \"3f8a2c1b-9d4e-4a5b-8c6d-7e8f90123456\",\n \"name\": \"Shipments\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": false,\n \"additionalProperties\": {}\n }\n ],\n \"additionalProperties\": {\n \"color\": \"purple\"\n }\n },\n {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"order\": 99,\n \"name\": \"root\",\n \"resources\": [],\n \"additionalProperties\": {}\n }\n]`,\n },\n ]),\n \"navigation folders get\": buildCommandExamples([\n {\n description: \"Get a navigation folder by exact name or UUID.\",\n command: 'zinkee --json navigation folders get Finance',\n },\n ]),\n \"navigation folders delete\": buildCommandExamples([\n {\n description: \"Delete a navigation folder by exact name or UUID.\",\n command: 'zinkee --json navigation folders delete Finance',\n response: `{\n \"folderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"name\": \"Finance Ops\"\n}`,\n },\n ]),\n \"teamspace folders list\": buildCommandExamples([\n {\n description: \"List teamspace folders.\",\n command: \"zinkee --json teamspace folders list\",\n },\n {\n description: \"List teamspace folders with their published resources.\",\n command: \"zinkee --json teamspace folders list --include-resources\",\n response: `[\n {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"order\": 1,\n \"isRoot\": false,\n \"resourceCount\": 2,\n \"resources\": [\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer records\",\n \"type\": \"SCHEMA\"\n },\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"type\": \"DISPLAY\"\n }\n ],\n \"additionalProperties\": {}\n }\n]`,\n },\n ]),\n \"teamspace folders get\": buildCommandExamples([\n {\n description: \"Get a teamspace folder by exact name or UUID.\",\n command: 'zinkee --json teamspace folders get \"Shared Dashboards\"',\n },\n ]),\n \"teamspace folders delete\": buildCommandExamples([\n {\n description:\n \"Delete a teamspace folder. Its resources are moved to the returned target folder (root by default).\",\n command: 'zinkee --json teamspace folders delete \"Customer Success\"',\n response: `{\n \"folderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"movedResourceCount\": 3,\n \"targetFolder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n }\n}`,\n },\n ]),\n \"files storage\": buildCommandExamples([\n {\n description: \"Get the storage quota and current usage (bytes).\",\n command: \"zinkee --json files storage\",\n response: `{\n \"maxSize\": 10737418240,\n \"usedSize\": 2147483648\n}`,\n },\n ]),\n \"displays list\": buildCommandExamples([\n {\n description: \"List displays in the workspace with variable and widget counts.\",\n command: \"zinkee --json displays list\",\n response: `[\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"layoutTemplate\": \"widget_row_tabs\",\n \"variableCount\": 3,\n \"widgetCount\": 6\n },\n {\n \"id\": \"6b7c8d9e-0f12-3456-789a-bcdef0123456\",\n \"name\": \"Sales Pipeline\",\n \"layoutTemplate\": \"freeform\",\n \"variableCount\": 1,\n \"widgetCount\": 3\n },\n {\n \"id\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"name\": \"Customer Detail\",\n \"layoutTemplate\": \"grid\",\n \"variableCount\": 0,\n \"widgetCount\": 2\n }\n]`,\n },\n ]),\n \"displays get\": buildCommandExamples([\n {\n description:\n \"Get a display with its layout (tabs/freeformLayouts/slots), variables, widgets, cross-widget filter and navigation targets.\",\n command: \"zinkee --json displays get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n response: `{\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"layout\": {\n \"template\": \"widget_row_tabs\",\n \"freeformLayouts\": null,\n \"slots\": null,\n \"tabs\": [\n {\n \"id\": \"tab-main\",\n \"name\": \"Overview\",\n \"orientation\": \"horizontal\",\n \"widgetIds\": [\n \"11111111-1111-4111-a111-111111111111\",\n \"22222222-2222-4222-a222-222222222222\",\n \"33333333-3333-4333-a333-333333333333\"\n ]\n },\n {\n \"id\": \"tab-detail\",\n \"name\": \"Detail\",\n \"orientation\": \"horizontal\",\n \"widgetIds\": [\n \"44444444-4444-4444-a444-444444444444\",\n \"55555555-5555-4555-a555-555555555555\",\n \"66666666-6666-4666-a666-666666666666\"\n ]\n }\n ]\n },\n \"variables\": [\n {\n \"id\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"type\": \"REFERENCE\",\n \"name\": \"Customer\",\n \"source\": {\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"defaultValue\": \"\",\n \"allowMultiple\": false,\n \"staticVariable\": false,\n \"filters\": []\n },\n {\n \"id\": \"bbbbbbbb-2222-4222-a222-222222222222\",\n \"type\": \"DATE\",\n \"name\": \"Period\",\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"thisMonth\"\n }\n },\n {\n \"id\": \"cccccccc-3333-4333-a333-333333333333\",\n \"type\": \"MEMBER\",\n \"name\": \"Owner\",\n \"defaultValue\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\",\n \"allowMultiple\": false,\n \"staticVariable\": false\n }\n ],\n \"widgets\": [\n {\n \"id\": \"11111111-1111-4111-a111-111111111111\",\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\",\n \"description\": \"All customers\",\n \"icon\": \"users\",\n \"color\": \"blue\"\n },\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n },\n \"query\": {\n \"filters\": [],\n \"sorts\": [\n { \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\", \"direction\": \"ASC\" }\n ]\n },\n \"behavior\": {\n \"readOnly\": false,\n \"hideAddButton\": false,\n \"hideDeleteButton\": false\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"],\n \"columnSize\": { \"contact-name\": 240 }\n }\n }\n ],\n \"crossWidgetFilter\": {\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"targets\": [\n {\n \"widgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n ]\n },\n \"navigationTargets\": [\n {\n \"id\": \"nav-target-customer\",\n \"sourceWidgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"label\": \"Open customer\"\n }\n ]\n}`,\n },\n ]),\n \"displays update\": buildCommandExamples([\n {\n description: \"Rename a display (patch of top-level metadata only).\",\n command:\n 'zinkee --json displays update 0f6f062f-1478-4df2-96a1-c495d037d260 --name \"Pipeline overview (renamed)\"',\n raw: `{\n \"name\": \"Pipeline overview (renamed)\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n ]),\n \"displays delete\": buildCommandExamples([\n {\n description: \"Delete a display.\",\n command: \"zinkee --json displays delete 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays folders list\": buildCommandExamples([\n {\n description: \"List flat display folders (non-root folders plus the root bucket).\",\n command: \"zinkee --json displays folders list\",\n response: `[\n {\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 2\n },\n {\n \"id\": \"8b22282b-3db3-4dd7-87f7-b29365dcf3f6\",\n \"name\": null,\n \"isRoot\": true,\n \"displayCount\": 4\n }\n]`,\n },\n ]),\n \"displays folders create\": buildCommandExamples([\n {\n description: \"Create one flat display folder.\",\n command: 'zinkee --json displays folders create --name \"Executive Dashboards\"',\n raw: `{\n \"name\": \"Executive Dashboards\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 0\n}`,\n },\n ]),\n \"displays folders update\": buildCommandExamples([\n {\n description: \"Rename a display folder. The folder argument accepts a UUID or an exact name.\",\n command:\n 'zinkee --json displays folders update \"Executive Dashboards\" --name \"Executive Dashboards (2026)\"',\n raw: `{\n \"name\": \"Executive Dashboards (2026)\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards (2026)\",\n \"isRoot\": false,\n \"displayCount\": 2\n}`,\n },\n ]),\n \"displays folders delete\": buildCommandExamples([\n {\n description: \"Delete a non-root display folder. Its displays move back to the root folder.\",\n command: 'zinkee --json displays folders delete \"Executive Dashboards\"',\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 2\n}`,\n },\n ]),\n \"displays folders move\": buildCommandExamples([\n {\n description: \"Move one display into a target folder by exact folder name.\",\n command:\n 'zinkee --json displays folders move 0f6f062f-1478-4df2-96a1-c495d037d260 --to \"Executive Dashboards\"',\n raw: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"targetFolderId\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false\n}`,\n },\n ]),\n \"displays layout get\": buildCommandExamples([\n {\n description: \"Get the layout block of a display (template + tabs/freeformLayouts/slots).\",\n command: \"zinkee --json displays layout get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays layout update\": buildCommandExamples([\n {\n description: \"Replace the freeform layout of a display.\",\n command:\n `zinkee --json displays layout update 0f6f062f-1478-4df2-96a1-c495d037d260 --template freeform --freeform-layouts '{\"lg\":[{\"i\":\"widget-1\",\"x\":0,\"y\":0,\"w\":6,\"h\":5}]}'`,\n },\n ]),\n \"displays tabs list\": buildCommandExamples([\n {\n description: \"List the tabs of a display (only meaningful when the layout template uses tabs).\",\n command: \"zinkee --json displays tabs list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays tabs delete\": buildCommandExamples([\n {\n description: \"Delete a tab by id.\",\n command: \"zinkee --json displays tabs delete 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-main\"\n}`,\n },\n ]),\n \"displays variables list\": buildCommandExamples([\n {\n description: \"List the variables of a display.\",\n command: \"zinkee --json displays variables list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays variables get\": buildCommandExamples([\n {\n description: \"Get one variable by id.\",\n command:\n \"zinkee --json displays variables get 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111\",\n },\n ]),\n \"displays variables delete\": buildCommandExamples([\n {\n description: \"Delete a variable.\",\n command:\n \"zinkee --json displays variables delete 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays widgets list\": buildCommandExamples([\n {\n description: \"List the widgets of a display.\",\n command: \"zinkee --json displays widgets list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays widgets get\": buildCommandExamples([\n {\n description: \"Get one widget (returns the canonical typed widget contract).\",\n command:\n \"zinkee --json displays widgets get 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111\",\n response: `{\n \"id\": \"11111111-1111-4111-a111-111111111111\",\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\",\n \"description\": \"All customers\",\n \"icon\": \"users\",\n \"color\": \"blue\"\n },\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n },\n \"query\": {\n \"filters\": [],\n \"sorts\": [\n { \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\", \"direction\": \"ASC\" }\n ]\n },\n \"behavior\": {\n \"readOnly\": false,\n \"hideAddButton\": false,\n \"hideDeleteButton\": false\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"],\n \"columnSize\": { \"contact-name\": 240 }\n }\n}`,\n },\n ]),\n \"displays widgets delete\": buildCommandExamples([\n {\n description: \"Delete a widget.\",\n command:\n \"zinkee --json displays widgets delete 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays navigation-targets list\": buildCommandExamples([\n {\n description: \"List navigation targets for a display.\",\n command: \"zinkee --json displays navigation-targets list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays navigation-targets delete\": buildCommandExamples([\n {\n description: \"Delete a navigation target.\",\n command:\n \"zinkee --json displays navigation-targets delete 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n ]),\n \"displays cross-widget-filter get\": buildCommandExamples([\n {\n description: \"Get the cross-widget filter of a display (can be null if none is set).\",\n command: \"zinkee --json displays cross-widget-filter get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays cross-widget-filter delete\": buildCommandExamples([\n {\n description: \"Delete the cross-widget filter of a display.\",\n command:\n \"zinkee --json displays cross-widget-filter delete 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"automations list\": buildCommandExamples([\n {\n description: \"List automations with summaries.\",\n command: \"zinkee --json automations list\",\n response: `[\n {\n \"id\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"name\": \"Codex Trigger Demo 1774278580\",\n \"description\": \"Demo compleja no-webhook para revisar en frontend.\",\n \"status\": \"active\",\n \"folder\": {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n },\n \"triggerType\": \"record_changed\",\n \"actionTypes\": [\"create_record\", \"http_request\", \"execute_plugin\", \"send_message\"]\n }\n]`,\n },\n {\n description: \"Filter automations by folder, status, and trigger type.\",\n command:\n 'zinkee --json automations list --folder \"Codex Frontend Demo\" --status active --trigger-type record_changed',\n },\n ]),\n \"automations get\": buildCommandExamples([\n {\n description:\n \"Get the full automation document, including trigger, actions and flow.\",\n command: \"zinkee --json automations get automation-1\",\n response: `{\n \"id\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"name\": \"Codex Trigger Demo 1774278580\",\n \"description\": \"Demo compleja no-webhook para revisar en frontend.\",\n \"status\": \"active\",\n \"folder\": {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n },\n \"trigger\": {\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldIds\": [\"4dd04e57-2a01-4c49-8728-9cb288bffb8d\"],\n \"conditions\": [\n {\n \"field\": \"4dd04e57-2a01-4c49-8728-9cb288bffb8d\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n },\n \"actions\": [\n {\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n },\n {\n \"id\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"type\": \"http_request\",\n \"name\": \"Notify ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\"X-Demo\": \"codex\"},\n \"body\": \"{\\\\\"event\\\\\":\\\\\"order.status.changed\\\\\"}\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"variables\": {},\n \"authMode\": \"STORED\",\n \"connectionId\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\"\n }\n },\n {\n \"id\": \"dae13307-057f-4c39-817c-4d2dd5898421\",\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\n \"mode\": \"safe\"\n }\n }\n }\n ],\n \"flow\": {\n \"entryActionIds\": [\"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\"],\n \"transitions\": [\n {\n \"fromActionId\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"toActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\"\n },\n {\n \"fromActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"toActionId\": \"dae13307-057f-4c39-817c-4d2dd5898421\"\n }\n ]\n }\n}`,\n },\n ]),\n \"automations delete\": buildCommandExamples([\n {\n description: \"Delete an automation. The response mirrors the mutation shape.\",\n command: \"zinkee --json automations delete automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations activate\": buildCommandExamples([\n {\n description: \"Activate an automation (transitions it to status=active).\",\n command: \"zinkee --json automations activate automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations deactivate\": buildCommandExamples([\n {\n description: \"Deactivate an automation (transitions it to status=inactive).\",\n command: \"zinkee --json automations deactivate automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations folders list\": buildCommandExamples([\n {\n description: \"List flat automation folders (non-root plus the root bucket).\",\n command: \"zinkee --json automations folders list\",\n response: `[\n {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 2\n },\n {\n \"id\": \"8b22282b-3db3-4dd7-87f7-b29365dcf3f6\",\n \"name\": null,\n \"isRoot\": true,\n \"automationCount\": 3\n }\n]`,\n },\n ]),\n \"automations folders delete\": buildCommandExamples([\n {\n description: \"Delete a non-root automation folder by exact name.\",\n command: 'zinkee --json automations folders delete \"Codex Frontend Demo\"',\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 0\n}`,\n },\n ]),\n \"automations trigger get\": buildCommandExamples([\n {\n description:\n \"Get the trigger subresource. Response shape depends on trigger type; here the scheduled variant.\",\n command: \"zinkee --json automations trigger get automation-1\",\n response: `{\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n}`,\n },\n ]),\n \"automations webhook get\": buildCommandExamples([\n {\n description:\n \"Get the webhook endpoint companion resource (only exists when the trigger is a webhook).\",\n command: \"zinkee --json automations webhook get automation-1\",\n response: `{\n \"endpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"endpointUrl\": \"https://hooks.zinkee.com/webhooks/b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n },\n ]),\n \"automations webhook delete\": buildCommandExamples([\n {\n description: \"Delete the webhook endpoint companion resource (returns no body).\",\n command: \"zinkee --json automations webhook delete automation-1\",\n },\n ]),\n \"automations actions list\": buildCommandExamples([\n {\n description: \"List the ordered actions of an automation.\",\n command: \"zinkee --json automations actions list automation-1\",\n response: `[\n {\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n },\n {\n \"id\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"type\": \"http_request\",\n \"name\": \"Notify ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\"X-Demo\": \"codex\"},\n \"body\": \"{\\\\\"event\\\\\":\\\\\"order.status.changed\\\\\"}\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"variables\": {},\n \"authMode\": \"STORED\",\n \"connectionId\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\"\n }\n },\n {\n \"id\": \"dae13307-057f-4c39-817c-4d2dd5898421\",\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\"mode\": \"safe\"}\n }\n }\n]`,\n },\n ]),\n \"automations actions delete\": buildCommandExamples([\n {\n description: \"Delete one action from an automation.\",\n command: \"zinkee --json automations actions delete automation-1 action-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations flow get\": buildCommandExamples([\n {\n description: \"Get the flow subresource (entry actions and transitions).\",\n command: \"zinkee --json automations flow get automation-1\",\n response: `{\n \"entryActionIds\": [\"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\"],\n \"transitions\": [\n {\n \"fromActionId\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"toActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\"\n },\n {\n \"fromActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"toActionId\": \"dae13307-057f-4c39-817c-4d2dd5898421\"\n }\n ]\n}`,\n },\n ]),\n \"automations plugins list\": buildCommandExamples([\n {\n description: \"List active workspace plugins available for execute_plugin actions.\",\n command: \"zinkee --json automations plugins list\",\n response: `[\n {\n \"id\": \"demo-plugin\",\n \"name\": \"Demo Plugin\",\n \"active\": true,\n \"description\": \"Example plugin for automations\",\n \"properties\": {\n \"version\": \"1.0\"\n }\n }\n]`,\n },\n ]),\n \"automations plugins get\": buildCommandExamples([\n {\n description: \"Get one plugin by id.\",\n command: \"zinkee --json automations plugins get demo-plugin\",\n response: `{\n \"id\": \"demo-plugin\",\n \"name\": \"Demo Plugin\",\n \"active\": true,\n \"description\": \"Example plugin for automations\",\n \"properties\": {\n \"version\": \"1.0\"\n }\n}`,\n },\n ]),\n \"automations connections list\": buildCommandExamples([\n {\n description: \"List stored workspace connections (secrets are never returned).\",\n command: \"zinkee --json automations connections list\",\n response: `[\n {\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n }\n }\n]`,\n },\n ]),\n \"automations connections get\": buildCommandExamples([\n {\n description: \"Get one stored connection by id.\",\n command: \"zinkee --json automations connections get connection-1\",\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T09:00:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations connections delete\": buildCommandExamples([\n {\n description: \"Delete one stored connection (returns no body).\",\n command: \"zinkee --json automations connections delete connection-1\",\n },\n ]),\n \"automations create\": buildCommandExamples([\n {\n description:\n \"Create a scheduled automation with description and target folder. Safe first example because it does not depend on workspace schemas.\",\n command:\n 'zinkee --json automations create --name \"Nightly invoice sync\" --description \"Runs every Monday morning\" --folder cdfc14e3-3169-4ffb-8d9b-b11858a9240f --trigger-type scheduled --cron \"0 15 10 * * 1\"',\n raw: `{\n \"name\": \"Nightly invoice sync\",\n \"description\": \"Runs every Monday morning\",\n \"folderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"trigger\": {\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n }\n}`,\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n {\n description:\n \"Create a record-created automation with an 'is not empty' condition. Replace 'leads' and 'status' with real schema/field slugs or UUIDs.\",\n command:\n `zinkee --json automations create --name \"Lead welcome\" --trigger-type record_created --trigger-schema leads --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"name\": \"Lead welcome\",\n \"trigger\": {\n \"type\": \"record_created\",\n \"config\": {\n \"schemaId\": \"leads\",\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n }\n}`,\n },\n {\n description:\n \"Create a record-changed automation watching a single field, with an 'is not empty' condition. Replace 'orders' and 'status' with values from your workspace.\",\n command:\n `zinkee --json automations create --name \"Order status sync\" --trigger-type record_changed --trigger-schema orders --trigger-field status --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"name\": \"Order status sync\",\n \"trigger\": {\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"fieldIds\": [\"status\"],\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n }\n}`,\n },\n ]),\n \"automations update\": buildCommandExamples([\n {\n description:\n \"Update automation description and move it to a folder. Supported patch paths: name, description, folderId.\",\n command:\n 'zinkee --json automations update automation-1 --description \"Updated by an agent\" --folder cdfc14e3-3169-4ffb-8d9b-b11858a9240f',\n raw: `{\n \"set\": {\n \"description\": \"Updated by an agent\",\n \"folderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\"\n }\n}`,\n },\n {\n description:\n \"Clear the folder assignment by combining an explicit unset through the raw payload.\",\n command:\n 'zinkee --json automations update automation-1 --raw \\'{\"unset\":[\"folderId\"]}\\'',\n raw: `{\n \"unset\": [\"folderId\"]\n}`,\n },\n ]),\n \"automations trigger set\": buildCommandExamples([\n {\n description: \"Replace the trigger with a scheduled (cron) trigger.\",\n command:\n 'zinkee --json automations trigger set automation-1 --trigger-type scheduled --cron \"0 15 10 * * 1\"',\n raw: `{\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n}`,\n },\n {\n description:\n \"Replace the trigger with a record-created trigger plus an 'is not empty' condition. Agents should provide at least one meaningful condition.\",\n command:\n `zinkee --json automations trigger set automation-1 --trigger-type record_created --trigger-schema orders --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"type\": \"record_created\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Replace the trigger with a record-changed trigger watching one field, with an 'is not empty' condition on that field.\",\n command:\n `zinkee --json automations trigger set automation-1 --trigger-type record_changed --trigger-schema orders --trigger-field status --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"fieldIds\": [\"status\"],\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n}`,\n },\n {\n description: \"Replace the trigger with a webhook trigger that reuses an existing webhook endpoint id.\",\n command:\n \"zinkee --json automations trigger set automation-1 --trigger-type webhook --webhook-endpoint-id b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n raw: `{\n \"type\": \"webhook\",\n \"config\": {\n \"webhookEndpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\"\n }\n}`,\n },\n ]),\n \"automations actions add\": buildCommandExamples([\n {\n description:\n \"Add a create-record action with two literal field mappings. Populate visible fieldMapping entries so the frontend form is complete.\",\n command:\n 'zinkee --json automations actions add automation-1 --type create_record --name \"Create follow-up order\" --target-schema followups --map status=pending --map description=\"Created by automation\"',\n raw: `{\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"pending\",\n \"source\": null\n },\n \"description\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Add an update-record action that targets the trigger record. Pair --use-trigger-record with --map to rewrite fields on the record that fired the automation.\",\n command:\n 'zinkee --json automations actions add automation-1 --type update_record --name \"Mark order as processed\" --target-schema orders --use-trigger-record --map status=processed',\n raw: `{\n \"type\": \"update_record\",\n \"name\": \"Mark order as processed\",\n \"config\": {\n \"targetSchemaId\": \"orders\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"processed\",\n \"source\": null\n }\n },\n \"useTriggerRecord\": true\n }\n}`,\n },\n {\n description: \"Add a search-records action scoped to a target schema.\",\n command:\n 'zinkee --json automations actions add automation-1 --type search_records --name \"Find related invoices\" --target-schema orders',\n raw: `{\n \"type\": \"search_records\",\n \"name\": \"Find related invoices\",\n \"config\": {\n \"targetSchemaId\": \"orders\"\n }\n}`,\n },\n {\n description:\n \"Add a search-records action whose condition pulls its value from the trigger payload using --condition-json.\",\n command:\n `zinkee --json automations actions add automation-1 --type search_records --name \"Find duplicates\" --target-schema followups --condition-json '{\"field\":\"email\",\"comparator\":\"eq\",\"values\":[{\"rawValue\":null,\"source\":{\"type\":\"TRIGGER\",\"id\":\"f1e1d000-0000-0000-0000-000000000005\"}}]}'`,\n raw: `{\n \"type\": \"search_records\",\n \"name\": \"Find duplicates\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"conditions\": [\n {\n \"field\": \"email\",\n \"comparator\": \"eq\",\n \"values\": [\n {\n \"rawValue\": null,\n \"source\": {\n \"type\": \"TRIGGER\",\n \"id\": \"f1e1d000-0000-0000-0000-000000000005\"\n }\n }\n ]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Add an HTTP request action using a stored workspace connection for authentication.\",\n command:\n 'zinkee --json automations actions add automation-1 --type http_request --name \"Notify external ERP\" --method POST --url https://example.com/integrations/order-status --header X-Demo=codex --content-type application/json --timeout-ms 5000 --auth-mode STORED --connection connection-1',\n raw: `{\n \"type\": \"http_request\",\n \"name\": \"Notify external ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\n \"X-Demo\": \"codex\"\n },\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"authMode\": \"STORED\",\n \"connectionId\": \"connection-1\"\n }\n}`,\n },\n {\n description:\n \"Add an execute-plugin action with structured plugin arguments. Replace 'demo-plugin' with an active id from 'zinkee --json automations plugins list'.\",\n command:\n `zinkee --json automations actions add automation-1 --type execute_plugin --name \"Run billing plugin\" --plugin demo-plugin --arg mode=safe --arg-json steps='[\"one\",\"two\"]'`,\n raw: `{\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\n \"mode\": \"safe\",\n \"steps\": [\"one\", \"two\"]\n }\n }\n}`,\n },\n {\n description:\n \"Add a send-message action. --to maps to fieldMapping.recipients and --message maps to fieldMapping.body. Values are wrapped in {rawValue, source} like every other automation field mapping; use --map / --map-json for extra keys.\",\n command:\n `zinkee --json automations actions add automation-1 --type send_message --name \"Notify customer\" --to customer@example.com --subject \"Your order status has changed\" --message \"Hello, your order is now processed.\"`,\n raw: `{\n \"type\": \"send_message\",\n \"name\": \"Notify customer\",\n \"config\": {\n \"fieldMapping\": {\n \"recipients\": {\n \"rawValue\": \"customer@example.com\",\n \"source\": null\n },\n \"subject\": {\n \"rawValue\": \"Your order status has changed\",\n \"source\": null\n },\n \"body\": {\n \"rawValue\": \"Hello, your order is now processed.\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Add a generate-document action. The renderer reads the template, writes the file, and stores its id in the target FileField of the target schema.\",\n command:\n 'zinkee --json automations actions add automation-1 --type generate_document --name \"Generate invoice PDF\" --document-template 6c08673e-f8a6-44d2-8c91-d09eca911f8f --target-schema 68d2c7be-4392-42de-b5ae-625ad79cfc3c --target-file-field c8edbde8-a361-4e9f-a39a-2e88971f21a7',\n raw: `{\n \"type\": \"generate_document\",\n \"name\": \"Generate invoice PDF\",\n \"config\": {\n \"documentTemplateId\": \"6c08673e-f8a6-44d2-8c91-d09eca911f8f\",\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"targetFileFieldId\": \"c8edbde8-a361-4e9f-a39a-2e88971f21a7\"\n }\n}`,\n },\n ]),\n \"automations actions update\": buildCommandExamples([\n {\n description:\n \"Replace an update-record action so it targets the trigger record. Conditions are stripped automatically when --use-trigger-record is provided.\",\n command:\n 'zinkee --json automations actions update automation-1 action-1 --type update_record --name \"Update trigger record\" --target-schema followups --map status=ready --use-trigger-record',\n raw: `{\n \"type\": \"update_record\",\n \"name\": \"Update trigger record\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"ready\",\n \"source\": null\n }\n },\n \"useTriggerRecord\": true\n }\n}`,\n response: `{\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Updated by an agent\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Replace an HTTP request action, keeping it authenticated through a stored connection.\",\n command:\n 'zinkee --json automations actions update automation-1 action-1 --type http_request --name \"Notify external ERP\" --method POST --url https://example.com/integrations/order-status --content-type application/json --timeout-ms 5000 --auth-mode STORED --connection connection-1',\n raw: `{\n \"type\": \"http_request\",\n \"name\": \"Notify external ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"authMode\": \"STORED\",\n \"connectionId\": \"connection-1\"\n }\n}`,\n },\n {\n description:\n \"Replace a send-message action. --to maps to fieldMapping.recipients and --message maps to fieldMapping.body; values are wrapped in {rawValue, source}.\",\n command:\n `zinkee --json automations actions update automation-1 action-1 --type send_message --name \"Notify customer\" --to customer@example.com --subject \"Your order status has changed\" --message \"Hello, your order is now processed.\"`,\n raw: `{\n \"type\": \"send_message\",\n \"name\": \"Notify customer\",\n \"config\": {\n \"fieldMapping\": {\n \"recipients\": {\n \"rawValue\": \"customer@example.com\",\n \"source\": null\n },\n \"subject\": {\n \"rawValue\": \"Your order status has changed\",\n \"source\": null\n },\n \"body\": {\n \"rawValue\": \"Hello, your order is now processed.\",\n \"source\": null\n }\n }\n }\n}`,\n },\n ]),\n \"automations flow set\": buildCommandExamples([\n {\n description:\n \"Set one entry action and chain two transitions (action-1 → action-2 → action-3).\",\n command:\n \"zinkee --json automations flow set automation-1 --entry action-1 --transition action-1:action-2 --transition action-2:action-3\",\n raw: `{\n \"entryActionIds\": [\"action-1\"],\n \"transitions\": [\n {\n \"fromActionId\": \"action-1\",\n \"toActionId\": \"action-2\"\n },\n {\n \"fromActionId\": \"action-2\",\n \"toActionId\": \"action-3\"\n }\n ]\n}`,\n },\n ]),\n \"automations webhook set\": buildCommandExamples([\n {\n description:\n \"Create or update the webhook endpoint companion resource with idempotency key, event type filter, and a field mapping. This config is separate from the webhook trigger itself.\",\n command:\n `zinkee --json automations webhook set automation-1 --idempotency-key-path \"$.id\" --event-type-path \"$.type\" --allowed-event-type frontend.demo.created --field-mapping '{\"variable\":\"external_id\",\"jsonPath\":\"$.data.id\"}' --active`,\n raw: `{\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n response: `{\n \"endpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"endpointUrl\": \"https://hooks.zinkee.com/webhooks/b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n },\n ]),\n \"automations connections create\": buildCommandExamples([\n {\n description:\n \"Create a stored workspace connection for http_request actions. Secret values are write-only and never returned on read.\",\n command:\n `zinkee --json automations connections create --name \"ERP API Key\" --type api_key --scope workspace --config '{\"headerName\":\"Authorization\"}' --secret apiKey=super-secret --active`,\n raw: `{\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"secret\": {\n \"apiKey\": \"super-secret\"\n },\n \"active\": true\n}`,\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T09:00:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations connections update\": buildCommandExamples([\n {\n description:\n \"Patch an existing stored connection. Use set.secret only when rotating secrets.\",\n command:\n `zinkee --json automations connections update connection-1 --raw '{\"set\":{\"name\":\"ERP API Key Updated\",\"config\":{\"headerName\":\"Authorization\"}}}'`,\n raw: `{\n \"set\": {\n \"name\": \"ERP API Key Updated\",\n \"config\": {\n \"headerName\": \"Authorization\"\n }\n }\n}`,\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key Updated\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations folders create\": buildCommandExamples([\n {\n description: \"Create one flat automation folder.\",\n command: 'zinkee --json automations folders create --name \"Codex Frontend Demo\"',\n raw: `{\n \"name\": \"Codex Frontend Demo\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 0\n}`,\n },\n ]),\n \"automations folders update\": buildCommandExamples([\n {\n description: \"Rename a non-root automation folder. The folder argument accepts a UUID or an exact name.\",\n command:\n 'zinkee --json automations folders update \"Codex Frontend Demo\" --name \"Codex Frontend Demo Updated\"',\n raw: `{\n \"name\": \"Codex Frontend Demo Updated\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo Updated\",\n \"isRoot\": false,\n \"automationCount\": 2\n}`,\n },\n ]),\n \"automations folders move\": buildCommandExamples([\n {\n description: \"Move one automation into a target folder by exact folder name.\",\n command: 'zinkee --json automations folders move automation-1 --to \"Codex Frontend Demo\"',\n raw: `{\n \"automationId\": \"automation-1\",\n \"targetFolderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n}`,\n },\n ]),\n \"document-templates list\": buildCommandExamples([\n {\n description:\n \"List every document template in the workspace. Each asset's link is a relative path to the asset download endpoint, ready to call without composition.\",\n command: \"zinkee --json document-templates list\",\n response: `[\n {\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-20T14:30:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n }\n]`,\n },\n ]),\n \"document-templates get\": buildCommandExamples([\n {\n description:\n \"Look up one template by UUID. The CLI filters the list endpoint locally (the backend does not expose a get-one route).\",\n command:\n \"zinkee --json document-templates get 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-20T14:30:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"creator@example.com\"\n}`,\n },\n {\n description:\n \"Look up by exact template name. Names are unique within the workspace; ambiguity is reported as an error.\",\n command: 'zinkee --json document-templates get \"Quarterly report\"',\n },\n ]),\n \"document-templates create\": buildCommandExamples([\n {\n description:\n \"Typical create: empty template by name. Assets are uploaded afterwards via document-templates assets add.\",\n command: 'zinkee --json document-templates create --name \"Quarterly report\"',\n raw: `{\n \"name\": \"Quarterly report\",\n \"assets\": []\n}`,\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-15T10:00:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"creator@example.com\"\n}`,\n },\n {\n description:\n \"Create with pre-existing asset records via --raw. Used for import/migration flows where the assets already exist elsewhere; the typical UX is to create empty and upload via assets add.\",\n command:\n `zinkee --json document-templates create --raw '{\"name\":\"Annual report\",\"assets\":[{\"id\":\"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\"name\":\"Cover.docx\",\"link\":\"/existing/cover.docx\"},{\"id\":\"3f2e1d0c-9b8a-7654-3210-fedcba987654\",\"name\":\"Appendix.docx\",\"link\":\"/existing/appendix.docx\"}]}'`,\n raw: `{\n \"name\": \"Annual report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Cover.docx\",\n \"link\": \"/existing/cover.docx\"\n },\n {\n \"id\": \"3f2e1d0c-9b8a-7654-3210-fedcba987654\",\n \"name\": \"Appendix.docx\",\n \"link\": \"/existing/appendix.docx\"\n }\n ]\n}`,\n },\n ]),\n \"document-templates update\": buildCommandExamples([\n {\n description:\n \"Rename a template. The template argument accepts a UUID or an exact current name. Only the name is updatable through this endpoint; assets are managed via the assets subcommands.\",\n command:\n 'zinkee --json document-templates update \"Quarterly report\" --name \"Annual report\"',\n raw: `{\n \"name\": \"Annual report\"\n}`,\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Annual report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-22T09:15:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n}`,\n },\n ]),\n \"document-templates delete\": buildCommandExamples([\n {\n description:\n \"Delete a template and remove its asset files from storage. Record fields that reference previously generated documents are not modified.\",\n command:\n \"zinkee --json document-templates delete 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"deleted\": true\n}`,\n },\n ]),\n \"document-templates assets add\": buildCommandExamples([\n {\n description:\n \"Upload a local file as an asset of a template. The CLI sends a multipart form with a part named \\\"file\\\"; the asset display name defaults to the uploaded filename.\",\n command:\n 'zinkee --json document-templates assets add \"Quarterly report\" ./contract.docx',\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"contract.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-22T09:15:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n}`,\n },\n {\n description:\n \"Override the asset display name with --name (otherwise the uploaded filename is used).\",\n command:\n 'zinkee --json document-templates assets add \"Quarterly report\" ./contract.docx --name \"Customer Contract\"',\n },\n ]),\n \"document-templates assets delete\": buildCommandExamples([\n {\n description: \"Delete one asset from a template and remove its file from storage.\",\n command:\n \"zinkee --json document-templates assets delete 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n response: `{\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"deleted\": true\n}`,\n },\n ]),\n \"document-templates assets download\": buildCommandExamples([\n {\n description:\n \"Download asset bytes to disk. The CLI streams the raw bytes to --output; in --json mode --output is required and the JSON envelope only carries metadata.\",\n command:\n \"zinkee --json document-templates assets download 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f --output ./contract.docx\",\n },\n {\n description:\n \"Stream asset bytes to stdout (omit --json and --output). Useful for piping into other tools.\",\n command:\n \"zinkee document-templates assets download 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f > contract.docx\",\n },\n ]),\n};\n\nfunction fallbackExamples(commandName: string): readonly CommandExample[] {\n switch (commandName) {\n default:\n return [];\n }\n}\n\nfunction buildSchemaFieldCreateExamples(type?: string): readonly CommandExample[] {\n const definitions = getSchemaFieldTypeDefinitions();\n const selectedDefinition = resolveSchemaFieldType(type);\n const filteredDefinitions = selectedDefinition\n ? definitions.filter((definition) => definition.key === selectedDefinition.key)\n : definitions;\n\n const flat = filteredDefinitions.flatMap((definition) =>\n definition.examplePayloads.map((example) => ({ definition, example })),\n );\n\n return buildCommandExamples(\n flat.map(({ example }, index) => {\n const slug =\n typeof example.payload.slug === \"string\" ? example.payload.slug : \"field\";\n const command = `zinkee --json schemas fields create contacts --raw '${JSON.stringify(example.payload)}'`;\n\n if (index === 0) {\n return {\n description: example.name,\n command,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"slug\": \"${slug}\"\n}`,\n };\n }\n\n return {\n description: example.name,\n command,\n };\n }),\n );\n}\n\nexport function getCommandExamples(\n commandName: string,\n filters: { type?: string } = {},\n): readonly CommandExample[] {\n if (commandName === \"schemas fields create\") {\n return buildSchemaFieldCreateExamples(filters.type);\n }\n\n return specificExamples[commandName] ?? fallbackExamples(commandName);\n}\n\nexport function getResolvedCommandExamples(\n commandName: string,\n filters: { type?: string } = {},\n): readonly CommandExample[] {\n return getCommandExamples(commandName, filters);\n}\n","import { commandRegistry } from \"./command-registry.js\";\nimport {\n collectOperandTokens,\n createDefaultOptionMetadata,\n findCommandPath,\n type OptionMetadata,\n} from \"./utils/argv-rewrite.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { getResolvedCommandExamples } from \"./utils/examples.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 getStdout(stdout?: CommandIo): CommandIo {\n return stdout ?? process.stdout;\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 = createDefaultOptionMetadata(),\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, commandRegistry);\n\n if (!cmdPath) {\n throw new CliError(\"invalid_cli_usage\", 'Provide a command after \"--example\".');\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 function showExamples(\n commandName: string,\n json: boolean,\n stdout?: CommandIo,\n filters: { type?: string } = {},\n): void {\n const examples = getResolvedCommandExamples(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 = getStdout(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 { 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 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 type { Writable } from \"node:stream\";\n\nimport { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n readConfig,\n redactConfig,\n resolveProfile,\n} from \"../config.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterConfigCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions {\n json?: boolean;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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 registerConfigCommands(\n program: Command,\n options: RegisterConfigCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } 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 { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport { parseJsonAssignment, parseKeyValue } from \"../parsers/kv.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, JsonValue, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterAutomationsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createAutomationsApi(\n command: Command,\n filePath: string,\n): { api: AutomationsApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new AutomationsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction collectValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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 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\nfunction parseCondition(input: string): ConditionSpec {\n const firstSeparator = input.indexOf(\":\");\n const secondSeparator = input.indexOf(\":\", firstSeparator + 1);\n\n if (firstSeparator <= 0 || secondSeparator <= firstSeparator + 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, received \"${input}\".`,\n );\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 new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, received \"${input}\".`,\n );\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 if (!field || !comparator || !Array.isArray(values) || values.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to contain \"field\", \"comparator\", and a non-empty \"values\" 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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 folderId: automation.folderId ?? \"\",\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 }));\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\",\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(\"--condition <field:comparator:value>\", \"action condition\", collectValues, [])\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 = getCommandIo(options.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\", \"folderId\", \"triggerType\", \"actionCount\"],\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\";\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 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 selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}: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/${selectorValue(automation)}:deactivate`,\n { method: \"POST\" },\n );\n }\n\n getTrigger(automation: NormalizedUuidOrSlug): Promise<ApiAutomationTrigger> {\n return this.client.getJson<ApiAutomationTrigger>(\n `/api/v2/automations/${selectorValue(automation)}/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/${selectorValue(automation)}/trigger`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n listActions(automation: NormalizedUuidOrSlug): Promise<ApiAutomationAction[]> {\n return this.client.getJson<ApiAutomationAction[]>(\n `/api/v2/automations/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/actions/${segment(actionId)}`,\n jsonOptions(input, \"PATCH\"),\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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(connection)}`,\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/${selectorValue(connection)}`,\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/${selectorValue(connection)}`,\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","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 profileSource:\n overrides.profile !== undefined\n ? \"flag\"\n : envProfile !== undefined\n ? \"env\"\n : undefined,\n baseUrlSource:\n overrides.baseUrl !== undefined\n ? \"flag\"\n : envBaseUrl !== undefined\n ? \"env\"\n : undefined,\n apiKeySource:\n overrides.apiKey !== undefined\n ? \"flag\"\n : envApiKey !== undefined\n ? \"env\"\n : undefined,\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 profileSource:\n overrides.profile !== undefined\n ? \"flag\"\n : envProfile !== undefined\n ? \"env\"\n : \"config\",\n baseUrlSource:\n overrides.baseUrl !== undefined\n ? \"flag\"\n : envBaseUrl !== undefined\n ? \"env\"\n : \"config\",\n apiKeySource:\n overrides.apiKey !== undefined\n ? \"flag\"\n : envApiKey !== undefined\n ? \"env\"\n : \"config\",\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n CommentsApi,\n type CreateCommentInput,\n} from \"../api/comments.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterCommentsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface CommentCreateCommandOptions {\n text?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n ..._extra: unknown[]\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName })),\n );\n}\n\nfunction 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\nfunction createCommentsApi(\n command: Command,\n filePath: string,\n): { api: CommentsApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new CommentsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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\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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n\nexport function registerCommentsCommands(\n program: Command,\n options: RegisterCommentsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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, filePath);\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, filePath);\n return;\n }\n\n writeLine(stdout, `Created comment \"${String(data.id ?? \"unknown\")}\".`);\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/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/${selectorValue(schema)}/records/${recordId}/comments`,\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DisplaysApi,\n type ApiDisplayFolder,\n type DisplayResource,\n type DisplaySummary,\n} from \"../api/displays.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n parseExpression,\n type ExpressionComparator,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\nconst DATE_DYNAMIC_OPTIONS =\n \"today, thisWeek, thisMonth, thisQuarter, thisSemester, thisYear, next7Days, next30Days, next6Months, next12Months, last12Months\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterDisplaysCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface DisplayCreateOptions {\n name: string;\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface DisplayUpdateOptions {\n name?: 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 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 NavigationTargetMutationOptions {\n sourceWidget?: string;\n targetDisplay?: string;\n targetVariable?: string;\n label?: string;\n}\n\ninterface CrossWidgetFilterSetOptions {\n sourceWidget: string;\n sourceField: string;\n target: string[];\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(stdout: CommandIo, commandName: string, data: unknown): void {\n writeLine(stdout, JSON.stringify(buildJsonSuccess(data, { command: commandName })));\n}\n\nfunction toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") {\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\nfunction createDisplaysApi(\n command: Command,\n filePath: string,\n): { api: DisplaysApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\n\n if (!runtime.baseUrl) {\n throw new CliError(\"configuration_error\", `Resolved profile \"${runtime.profile}\" is missing a base URL.`);\n }\n\n return {\n api: new DisplaysApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction ensureWritable(commandName: string, readOnly: boolean, mode: \"write\" | \"destructive\"): 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 { commandMode: mode, executionMode: \"read-only\" },\n );\n }\n}\n\nfunction 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\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 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 parseNonNegativeInteger(input: string): number {\n if (!/^\\d+$/.test(input.trim())) {\n throw new InvalidArgumentError(`Expected a non-negative integer, received \"${input}\".`);\n }\n return Number(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 isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 }));\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 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 buildCrossWidgetFilterBody(options: CrossWidgetFilterSetOptions): Record<string, unknown> {\n return {\n source: {\n widgetId: options.sourceWidget,\n fieldId: options.sourceField,\n },\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\nexport function registerDisplaysCommands(\n program: Command,\n options: RegisterDisplaysCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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(displayRows(data), [\"id\", \"name\", \"layoutTemplate\", \"variableCount\", \"widgetCount\"], stdout);\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 .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({ name: commandOptions.name, layout });\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 .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) throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n const data = await api.updateDisplay(display, { name: commandOptions.name });\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(\"--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(\"--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 ? [item] : [], undefined, stdout);\n });\n cross.command(\"set\").description(\"Set cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--source-widget <id>\").requiredOption(\"--source-field <id>\").requiredOption(\"--target <widget:field>\", \"repeatable target\", (v, p: string[] = []) => [...p, v], [])\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 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?: Record<string, unknown> | null;\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\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 selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\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/${selectorValue(display)}`);\n }\n\n createDisplay(body: Record<string, unknown>): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\"/api/v2/displays\", jsonOptions(body, \"POST\"));\n }\n\n updateDisplay(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\n `/api/v2/displays/${selectorValue(display)}`,\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/${selectorValue(display)}`,\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/${selectorValue(display)}/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/${selectorValue(display)}/layout`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n listTabs(display: NormalizedUuidOrSlug): Promise<ApiDisplayTab[]> {\n return this.client.getJson<ApiDisplayTab[]>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/variables`,\n );\n }\n\n getVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<ApiDisplayVariable> {\n return this.client.getJson<ApiDisplayVariable>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/widgets`,\n );\n }\n\n getWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<ApiDisplayWidget> {\n return this.client.getJson<ApiDisplayWidget>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/cross-widget-filter`,\n );\n }\n\n setCrossWidgetFilter(\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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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 { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DocumentTemplatesApi,\n type ApiDocumentTemplate,\n type CreateDocumentTemplateInput,\n type UpdateDocumentTemplateInput,\n} from \"../api/document-templates.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport interface RegisterDocumentTemplatesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction writeBinary(stdout: CommandIo, value: ArrayBuffer): void {\n stdout.write(Buffer.from(value));\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createDocumentTemplatesApi(\n command: Command,\n filePath: string,\n): { api: DocumentTemplatesApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new DocumentTemplatesApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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 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 readLocalFile(filePath: string): Buffer {\n try {\n return readFileSync(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\nfunction writeDownloadedFile(outputPath: string, value: ArrayBuffer): void {\n try {\n writeFileSync(outputPath, Buffer.from(value));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n }\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 = getCommandIo(options.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 = readLocalFile(localPath);\n const formData = new FormData();\n formData.append(\"file\", new Blob([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 data = await api.downloadAsset(resolved, assetId);\n\n if (commandOptions.output) {\n writeDownloadedFile(commandOptions.output, data);\n\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: data.byteLength,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded asset to \"${commandOptions.output}\".`);\n return;\n }\n\n writeBinary(stdout, data);\n });\n}\n","import { 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\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/${selectorValue(template)}`,\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/${selectorValue(template)}`,\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/${selectorValue(template)}/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/${selectorValue(template)}/assets/${segment(assetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n downloadAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n ): Promise<ArrayBuffer> {\n return this.client.requestBinary(\n `/api/v2/document-templates/${selectorValue(template)}/assets/${segment(assetId)}/download`,\n );\n }\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { FilesApi } from \"../api/files.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport interface RegisterFilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface FilesDownloadCommandOptions {\n output?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction writeBinary(stdout: CommandIo, value: ArrayBuffer): void {\n stdout.write(Buffer.from(value));\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createFilesApi(\n command: Command,\n filePath: string,\n): { api: FilesApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new FilesApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readLocalFile(filePath: string): Buffer {\n try {\n return readFileSync(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\nfunction writeDownloadedFile(outputPath: string, value: ArrayBuffer): void {\n try {\n writeFileSync(outputPath, Buffer.from(value));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n }\n}\n\nexport function registerFilesCommands(\n program: Command,\n options: RegisterFilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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(function action(this: Command, path: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files upload\", readOnly, \"write\");\n\n const contents = readLocalFile(path);\n const formData = new FormData();\n formData.append(\"file\", new Blob([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(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 return api.downloadFile(fileSelector).then((data) => {\n if (commandOptions.output) {\n writeDownloadedFile(commandOptions.output, data);\n\n if (json) {\n emitJson(\n stdout,\n \"files download\",\n {\n file: fileSelector.value,\n output: commandOptions.output,\n bytes: data.byteLength,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded file to \"${commandOptions.output}\".`);\n return;\n }\n\n writeBinary(stdout, data);\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 (isRecord(data)) {\n printTable([data], Object.keys(data), stdout);\n return;\n }\n\n writeLine(stdout, String(data));\n });\n });\n}\n","import { 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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): Promise<ArrayBuffer> {\n return this.client.requestBinary(`/api/v2/files/${selectorValue(file)}`);\n }\n\n deleteFile(file: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/files/${selectorValue(file)}`,\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 type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { LogsApi } from \"../api/logs.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterLogsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n ..._extra: unknown[]\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName })),\n );\n}\n\nfunction 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\nfunction createLogsApi(\n command: Command,\n filePath: string,\n): { api: LogsApi; json: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new LogsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n\nexport function registerLogsCommands(\n program: Command,\n options: RegisterLogsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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, filePath);\n return;\n }\n\n emitTable(stdout, data);\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/records/${recordId}/logs`,\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { NavigationApi, type NavigationFolder } from \"../api/navigation.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterNavigationCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface FolderMutationOptions {\n name?: string;\n order?: string;\n props?: string;\n propsFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(stdout, JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })));\n}\n\nfunction toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") {\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\nfunction createNavigationApi(\n command: Command,\n filePath: string,\n): { api: NavigationApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\n\n if (!runtime.baseUrl) {\n throw new CliError(\"configuration_error\", `Resolved profile \"${runtime.profile}\" is missing a base URL.`);\n }\n\n return {\n api: new NavigationApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction ensureWritable(commandName: string, readOnly: boolean, mode: \"write\" | \"destructive\"): 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 { commandMode: mode, executionMode: \"read-only\" },\n );\n }\n}\n\nfunction 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\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 = getCommandIo(options.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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(folder)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${selectorValue(folder)}`,\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 type { Writable } from \"node:stream\";\n\nimport { 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 { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterProfilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions {\n json?: boolean;\n}\n\nexport interface DisplayProfile extends ProfileConfig {\n name: string;\n isDefault: boolean;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\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 = getCommandIo(options.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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n type ApiRecord,\n type CreateRecordInput,\n type RecordQueryExpression,\n type RecordQueryInput,\n type RecordQueryResult,\n RecordsApi,\n type UpdateRecordInput,\n} from \"../api/records.js\";\nimport { SchemasApi } from \"../api/schemas.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n type ParsedExpression,\n parseExpression,\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 { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterRecordsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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}\n\ninterface RecordsUpdateCommandOptions extends RecordsCreateCommandOptions {\n unset?: string[];\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createRecordsApi(\n command: Command,\n filePath: string,\n): {\n api: RecordsApi;\n schemasApi: SchemasApi;\n json: boolean;\n profile: string;\n readOnly: boolean;\n} {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 const client = new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n });\n\n return {\n api: new RecordsApi(client),\n schemasApi: new SchemasApi(client),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction 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\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 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 isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 buildRecordCreateInput(\n options: RecordsCreateCommandOptions,\n): CreateRecordInput {\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\", or \"--raw-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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 = getCommandIo(options.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 a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--set <field=value>\", \"set a string field\", collectKeyValueAssignments, [])\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 .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 const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.createRecord(\n resolvedSchema,\n buildRecordCreateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"records create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created record \"${getRecordIdentifier(data)}\".`);\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(\"--set <field=value>\", \"set a string field\", collectKeyValueAssignments, [])\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 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, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n await api.deleteRecord(resolvedSchema, record);\n const data = {\n schema: resolvedSchema.value,\n record: record.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"records delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted record \"${record.value}\" from schema \"${schema.value}\".`);\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 RecordQuerySort {\n field: string;\n direction: \"ASC\" | \"DESC\";\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 interface CreateRecordInput {\n [key: string]: unknown;\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/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/${selectorValue(schema)}/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/${selectorValue(schema)}/records/${selectorValue(record)}`,\n );\n }\n\n createRecord(\n schema: NormalizedUuidOrSlug,\n input: CreateRecordInput,\n ): Promise<ApiRecord> {\n return this.client.requestJson<ApiRecord>(\n `/api/v2/schemas/${selectorValue(schema)}/records`,\n jsonOptions(input, \"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/${selectorValue(schema)}/records/${selectorValue(record)}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${selectorValue(schema)}/records/${selectorValue(record)}`,\n { method: \"DELETE\" },\n );\n }\n\n clearRecords(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${selectorValue(schema)}/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 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}\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 CreateSchemaFieldInput {\n [key: string]: unknown;\n type: string;\n slug: string;\n label: string;\n required?: boolean;\n}\n\nexport interface UpdateSchemaFieldInput {\n [key: string]: unknown;\n label?: 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}`);\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/${selectorValue(schema)}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteSchema(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${selectorValue(schema)}`,\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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\n );\n }\n\n createField(schema: NormalizedUuidOrSlug, input: CreateSchemaFieldInput): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${selectorValue(schema)}/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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n SchemasApi,\n type ApiSchema,\n type ApiSchemaField,\n type CreateSchemaFieldInput,\n type CreateSchemaInput,\n type UpdateSchemaFieldInput,\n type UpdateSchemaInput,\n} from \"../api/schemas.js\";\nimport { ApiClientError } from \"../client.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n assertSupportedSchemaFieldType,\n buildSchemaFieldCreateHelpText,\n buildSchemaFieldCreateValidationMessage,\n formatSchemaFieldTypes,\n normalizeSchemaFieldCreatePayload,\n normalizeSchemaFieldUpdatePayload,\n normalizeSchemaFieldType,\n} from \"../utils/schema-fields.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterSchemasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 FieldCreateCommandOptions {\n type?: string;\n slug?: string;\n label?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface FieldUpdateCommandOptions {\n label?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createSchemasApi(\n command: Command,\n filePath: string,\n): { api: SchemasApi; json: boolean; profile: string; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new SchemasApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\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 isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\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 })),\n [\"id\", \"name\", \"slug\", \"auditable\", \"commentable\"],\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 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 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\n}\n\nexport function registerSchemasCommands(\n program: Command,\n options: RegisterSchemasCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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 \"highlighted (main) 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\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(\"--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(\"--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\", \"--required\", \"--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\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n TeamspaceApi,\n type ApiTeamspaceFolder,\n type CreateTeamspaceFolderInput,\n type UpdateTeamspaceFolderInput,\n} from \"../api/teamspace.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterTeamspaceCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createTeamspaceApi(\n command: Command,\n filePath: string,\n): { api: TeamspaceApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new TeamspaceApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\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 isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 = getCommandIo(options.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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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":["text","Command","isRecord","toStringValue","readFileSync","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","isJsonObject","segment","readFileSync","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","readFileSync","isEmptyObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","segment","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","readRawObject","readFileSync","isEmptyObject","getCommandIo","emitJson","parseUuidOrSlugSelector","ensureWritable","layout","writeLine","readFileSync","writeFileSync","InvalidArgumentError","jsonOptions","selectorValue","segment","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","isEmptyObject","parseJsonValue","readTextFile","readFileSync","readJsonObjectOption","writeFileSync","readFileSync","writeFileSync","basename","InvalidArgumentError","selectorValue","getCommandIo","writeLine","writeBinary","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isRecord","readLocalFile","readFileSync","writeDownloadedFile","writeFileSync","basename","InvalidArgumentError","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","readFileSync","resolveFolder","folderRows","getCommandIo","writeLine","getGlobalOptions","emitJson","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","parseNonNegativeInteger","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","resolveSchemaSelector","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","parseNonNegativeInteger","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","toTableRows","emitTable","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/command-registry.ts","../src/utils/argv-rewrite.ts","../src/client.ts","../src/utils/output.ts","../src/utils/errors.ts","../src/utils/schema-fields.ts","../src/utils/examples.ts","../src/cli-examples.ts","../src/program.ts","../src/config.ts","../src/commands/config.ts","../src/commands/automations.ts","../src/api/automations.ts","../src/parsers/kv.ts","../src/parsers/selectors.ts","../src/runtime-context.ts","../src/commands/comments.ts","../src/api/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/commands/files.ts","../src/api/files.ts","../src/commands/logs.ts","../src/api/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 { commandRegistry } from \"./command-registry.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\nclass ExampleDisplayed extends Error {\n override name = \"ExampleDisplayed\";\n}\n\nfunction hasJsonOutput(argv: readonly string[]): boolean {\n return argv.includes(\"--json\");\n}\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 showExamples(\n exampleRequest.commandName,\n exampleRequest.json,\n undefined,\n exampleRequest.filters,\n );\n throw new ExampleDisplayed();\n }\n\n const rewrittenArgv = hoistGlobalOptions(argv, optionMeta, commandRegistry);\n await program.parseAsync(rewrittenArgv);\n } catch (error) {\n if (error instanceof ExampleDisplayed) {\n process.exitCode = 0;\n return;\n }\n\n const exitCode = getExitCode(error);\n\n if (hasJsonOutput(argv)) {\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 {\n CommandAccessLevel,\n CommandMeta,\n CommandOutputCapability,\n} from \"./types.js\";\n\nexport type {\n CommandAccessLevel,\n CommandMeta,\n CommandOutputCapability,\n} from \"./types.js\";\n\nconst readOutput: CommandOutputCapability = \"table-json\";\nconst writeOutput: CommandOutputCapability = \"json-only\";\n\nexport const commandRegistry = {\n \"config path\": {\n command: \"config path\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"config show\": {\n command: \"config show\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"config validate\": {\n command: \"config validate\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"automations folders list\": {\n command: \"automations folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations folders create\": {\n command: \"automations folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders update\": {\n command: \"automations folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders delete\": {\n command: \"automations folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations folders move\": {\n command: \"automations folders move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations list\": {\n command: \"automations list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations get\": {\n command: \"automations get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations create\": {\n command: \"automations create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations update\": {\n command: \"automations update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations delete\": {\n command: \"automations delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations activate\": {\n command: \"automations activate\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations deactivate\": {\n command: \"automations deactivate\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations trigger get\": {\n command: \"automations trigger get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations trigger set\": {\n command: \"automations trigger set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions list\": {\n command: \"automations actions list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations actions add\": {\n command: \"automations actions add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions update\": {\n command: \"automations actions update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations actions delete\": {\n command: \"automations actions delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations flow get\": {\n command: \"automations flow get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations flow set\": {\n command: \"automations flow set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations webhook get\": {\n command: \"automations webhook get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations webhook set\": {\n command: \"automations webhook set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"automations webhook delete\": {\n command: \"automations webhook delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations plugins list\": {\n command: \"automations plugins list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations plugins get\": {\n command: \"automations plugins get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections list\": {\n command: \"automations connections list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections get\": {\n command: \"automations connections get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"automations connections create\": {\n command: \"automations connections create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations connections update\": {\n command: \"automations connections update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"automations connections delete\": {\n command: \"automations connections delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays list\": {\n command: \"displays list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays get\": {\n command: \"displays get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays create\": {\n command: \"displays create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays update\": {\n command: \"displays update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays delete\": {\n command: \"displays delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders list\": {\n command: \"displays folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays folders create\": {\n command: \"displays folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders update\": {\n command: \"displays folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders delete\": {\n command: \"displays folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays folders move\": {\n command: \"displays folders move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays layout get\": {\n command: \"displays layout get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays layout update\": {\n command: \"displays layout update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs list\": {\n command: \"displays tabs list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays tabs create\": {\n command: \"displays tabs create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs update\": {\n command: \"displays tabs update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays tabs delete\": {\n command: \"displays tabs delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays variables list\": {\n command: \"displays variables list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays variables get\": {\n command: \"displays variables get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays variables create\": {\n command: \"displays variables create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays variables update\": {\n command: \"displays variables update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays variables delete\": {\n command: \"displays variables delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays widgets list\": {\n command: \"displays widgets list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays widgets get\": {\n command: \"displays widgets get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays widgets create\": {\n command: \"displays widgets create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays widgets update\": {\n command: \"displays widgets update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"displays widgets delete\": {\n command: \"displays widgets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets list\": {\n command: \"displays navigation-targets list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays navigation-targets create\": {\n command: \"displays navigation-targets create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets update\": {\n command: \"displays navigation-targets update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays navigation-targets delete\": {\n command: \"displays navigation-targets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays cross-widget-filter get\": {\n command: \"displays cross-widget-filter get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"displays cross-widget-filter set\": {\n command: \"displays cross-widget-filter set\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"displays cross-widget-filter delete\": {\n command: \"displays cross-widget-filter delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates list\": {\n command: \"document-templates list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"document-templates get\": {\n command: \"document-templates get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"document-templates create\": {\n command: \"document-templates create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"document-templates update\": {\n command: \"document-templates update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates delete\": {\n command: \"document-templates delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets add\": {\n command: \"document-templates assets add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets delete\": {\n command: \"document-templates assets delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"document-templates assets download\": {\n command: \"document-templates assets download\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"binary\",\n },\n \"files upload\": {\n command: \"files upload\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"files download\": {\n command: \"files download\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: \"binary\",\n },\n \"files delete\": {\n command: \"files delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: \"json-only\",\n },\n \"files storage\": {\n command: \"files storage\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders list\": {\n command: \"navigation folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders get\": {\n command: \"navigation folders get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"navigation folders create\": {\n command: \"navigation folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation folders update\": {\n command: \"navigation folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation folders delete\": {\n command: \"navigation folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"navigation resources move\": {\n command: \"navigation resources move\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles list\": {\n command: \"profiles list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"profiles get\": {\n command: \"profiles get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"profiles use\": {\n command: \"profiles use\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles add\": {\n command: \"profiles add\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles update\": {\n command: \"profiles update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"profiles remove\": {\n command: \"profiles remove\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas list\": {\n command: \"schemas list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas get\": {\n command: \"schemas get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas create\": {\n command: \"schemas create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas update\": {\n command: \"schemas update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas set-unique-fields\": {\n command: \"schemas set-unique-fields\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas delete\": {\n command: \"schemas delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"schemas fields list\": {\n command: \"schemas fields list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas fields get\": {\n command: \"schemas fields get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"schemas fields create\": {\n command: \"schemas fields create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"schemas fields update\": {\n command: \"schemas fields update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"schemas fields delete\": {\n command: \"schemas fields delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"records list\": {\n command: \"records list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"records query\": {\n command: \"records query\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: true,\n output: readOutput,\n },\n \"records get\": {\n command: \"records get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"records create\": {\n command: \"records create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"records update\": {\n command: \"records update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"records delete\": {\n command: \"records delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"records clear\": {\n command: \"records clear\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"comments list\": {\n command: \"comments list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"comments create\": {\n command: \"comments create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: true,\n output: writeOutput,\n },\n \"logs list\": {\n command: \"logs list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders list\": {\n command: \"teamspace folders list\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders get\": {\n command: \"teamspace folders get\",\n accessLevel: \"read\",\n supportsExample: true,\n supportsRaw: false,\n output: readOutput,\n },\n \"teamspace folders create\": {\n command: \"teamspace folders create\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace folders update\": {\n command: \"teamspace folders update\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace folders delete\": {\n command: \"teamspace folders delete\",\n accessLevel: \"destructive\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace resources publish\": {\n command: \"teamspace resources publish\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n \"teamspace resources unpublish\": {\n command: \"teamspace resources unpublish\",\n accessLevel: \"write\",\n supportsExample: true,\n supportsRaw: false,\n output: writeOutput,\n },\n} as const satisfies Record<string, CommandMeta>;\n\nexport type CommandName = keyof typeof commandRegistry;\n\nexport function getCommandMeta(command: string): CommandMeta | undefined {\n return command in commandRegistry\n ? commandRegistry[command as CommandName]\n : undefined;\n}\n\nexport function listCommandMeta(): readonly CommandMeta[] {\n return Object.values(commandRegistry);\n}\n\nexport function isCommandAllowedInReadOnly(command: string): boolean {\n const meta = getCommandMeta(command);\n\n return meta ? meta.accessLevel === \"read\" : true;\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}\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\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 localOptionsByCommand.set(getCommandPath(command), localFlags);\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 };\n}\n\nexport function createDefaultOptionMetadata(): OptionMetadata {\n return {\n valueFlags: new Set([\n \"--profile\",\n \"--base-url\",\n \"--api-key\",\n \"--install-completion\",\n \"--show-completion\",\n ]),\n booleanFlags: new Set([\n \"--read-only\",\n \"--json\",\n \"--example\",\n \"--help\",\n ]),\n localOptionsByCommand: new Map(),\n };\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 registry: Record<string, unknown>,\n): CommandPathMatch | null {\n if (operands.length === 0) return null;\n\n const commandsByLength = Object.keys(registry).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 registry: Record<string, unknown>,\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, registry);\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","export interface ApiClientOptions {\n baseUrl: string;\n apiKey?: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n}\n\nexport type ApiClientErrorCode =\n | \"network_error\"\n | \"http_error\"\n | \"timeout\"\n | \"invalid_json\";\n\nexport interface ApiClientErrorDetails {\n url: string;\n method: string;\n status?: number;\n responseBody?: unknown;\n responseText?: string;\n cause?: unknown;\n}\n\nexport class ApiClientError extends Error {\n override name = \"ApiClientError\";\n\n readonly code: ApiClientErrorCode;\n\n readonly url: string;\n\n readonly method: string;\n\n readonly status?: number;\n\n readonly responseBody?: unknown;\n\n readonly responseText?: string;\n\n override readonly cause?: unknown;\n\n constructor(\n code: ApiClientErrorCode,\n message: string,\n details: ApiClientErrorDetails,\n ) {\n super(message);\n this.code = code;\n this.url = details.url;\n this.method = details.method;\n this.status = details.status;\n this.responseBody = details.responseBody;\n this.responseText = details.responseText;\n this.cause = details.cause;\n }\n}\n\nexport interface ApiRequestOptions extends RequestInit {\n timeoutMs?: number;\n}\n\nfunction isJsonContentType(contentType: string | null): boolean {\n return contentType ? /(^|\\/|\\+)json\\b/i.test(contentType) : false;\n}\n\nfunction looksLikeJson(text: string): boolean {\n const trimmed = text.trim();\n\n return (\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\") ||\n trimmed === \"null\" ||\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?$/.test(trimmed) ||\n trimmed.startsWith('\"')\n );\n}\n\nfunction parseJsonBody<T>(text: string, url: string, method: string): T {\n const trimmed = text.trim();\n\n if (trimmed.length === 0) {\n return undefined as T;\n }\n\n try {\n return JSON.parse(trimmed) as T;\n } catch (cause) {\n throw new ApiClientError(\"invalid_json\", `Failed to parse JSON response from ${method} ${url}.`, {\n url,\n method,\n responseText: text,\n cause,\n });\n }\n}\n\nfunction parseErrorBody(text: string, contentType: string | null): unknown {\n if (text.trim().length === 0) {\n return undefined;\n }\n\n if (!isJsonContentType(contentType) && !looksLikeJson(text)) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction summarizeNetworkCause(cause: unknown): string | undefined {\n const seen = new Set<unknown>();\n let current: unknown = cause;\n\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n\n const candidate = current as { message?: unknown; code?: unknown; cause?: unknown };\n const message = typeof candidate.message === \"string\" ? candidate.message.trim() : \"\";\n const code = typeof candidate.code === \"string\" ? candidate.code : undefined;\n\n if (message && message !== \"fetch failed\") {\n return code && !message.includes(code) ? `${message} (${code})` : message;\n }\n\n current = candidate.cause;\n }\n\n return undefined;\n}\n\nexport class ApiClient {\n private readonly fetchImpl: typeof fetch;\n\n constructor(private readonly options: ApiClientOptions) {\n this.fetchImpl = options.fetch ?? fetch;\n }\n\n async getJson<T>(path: string, init: ApiRequestOptions = {}): Promise<T> {\n return this.requestJson<T>(path, { ...init, method: \"GET\" });\n }\n\n async requestJson<T>(path: string, init: ApiRequestOptions = {}): Promise<T> {\n const response = await this.request(path, init, \"application/json\");\n\n if (!response.ok) {\n const text = await response.text();\n throw this.buildHttpError(response, text, init, \"requestJson\");\n }\n\n const text = await response.text();\n return parseJsonBody<T>(text, response.url, init.method ?? \"GET\");\n }\n\n async requestBinary(path: string, init: ApiRequestOptions = {}): Promise<ArrayBuffer> {\n const response = await this.request(path, init);\n\n if (!response.ok) {\n const text = await response.text();\n throw this.buildHttpError(response, text, init, \"requestBinary\");\n }\n\n return response.arrayBuffer();\n }\n\n private buildUrl(path: string): string {\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\n return new URL(normalizedPath, this.options.baseUrl).toString();\n }\n\n private async request(\n path: string,\n init: ApiRequestOptions,\n accept?: string,\n ): Promise<Response> {\n const url = this.buildUrl(path);\n const method = init.method ?? \"GET\";\n const headers = new Headers(init.headers);\n\n if (accept && !headers.has(\"accept\")) {\n headers.set(\"accept\", accept);\n }\n\n if (this.options.apiKey && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.options.apiKey}`);\n }\n\n const controller = new AbortController();\n const timeoutMs = init.timeoutMs ?? this.options.timeoutMs;\n let timedOut = false;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n const abortListener = (): void => {\n controller.abort();\n };\n\n if (init.signal) {\n if (init.signal.aborted) {\n controller.abort();\n } else {\n init.signal.addEventListener(\"abort\", abortListener, { once: true });\n }\n }\n\n if (timeoutMs !== undefined) {\n timeoutHandle = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n }\n\n try {\n return await this.fetchImpl(url, {\n ...init,\n headers,\n signal: controller.signal,\n });\n } catch (cause) {\n if (timedOut) {\n throw new ApiClientError(\"timeout\", `Request timed out after ${timeoutMs}ms.`, {\n url,\n method,\n cause,\n });\n }\n\n const causeSummary = summarizeNetworkCause(cause);\n const message = causeSummary\n ? `Request failed for ${method} ${url}: ${causeSummary}.`\n : `Request failed for ${method} ${url}.`;\n\n throw new ApiClientError(\"network_error\", message, {\n url,\n method,\n cause,\n });\n } finally {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n }\n\n if (init.signal) {\n init.signal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n\n private buildHttpError(\n response: Response,\n text: string,\n init: ApiRequestOptions,\n operation: string,\n ): ApiClientError {\n const method = init.method ?? \"GET\";\n const responseBody = parseErrorBody(text, response.headers.get(\"content-type\"));\n\n return new ApiClientError(\"http_error\", `Request failed with status ${response.status} for ${method} ${response.url}.`, {\n url: response.url,\n method,\n status: response.status,\n responseBody,\n responseText: responseBody === text ? text : undefined,\n cause: new Error(operation),\n });\n }\n}\n","import Table from \"cli-table3\";\n\nimport type {\n JsonEnvelopeMeta,\n JsonErrorEnvelope,\n JsonSuccessEnvelope,\n OutputFormat,\n} from \"../types.js\";\n\nexport interface TableColumn {\n key: string;\n label: string;\n}\n\nexport interface TableCell {\n key: string;\n value: string;\n}\n\nexport interface TableRow {\n cells: TableCell[];\n}\n\nexport interface OutputWriter {\n write(chunk: string): unknown;\n}\n\nfunction stringifyCellValue(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n}\n\nexport function buildJsonSuccess<TData, TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n data: TData,\n meta: TMeta = {} as TMeta,\n): JsonSuccessEnvelope<TData, TMeta> {\n return { data, meta };\n}\n\nexport function buildJsonError<TErr, TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: TErr,\n meta: TMeta = {} as TMeta,\n): JsonErrorEnvelope<TErr, TMeta> {\n return { error, meta };\n}\n\nexport function buildTableColumns(keys: readonly string[]): readonly TableColumn[] {\n return keys.map((key) => ({ key, label: key }));\n}\n\nexport function buildTableRows(\n rows: readonly Record<string, unknown>[],\n columns: readonly TableColumn[],\n): readonly TableRow[] {\n return rows.map((row) => ({\n cells: columns.map((column) => ({\n key: column.key,\n value: stringifyCellValue(row[column.key]),\n })),\n }));\n}\n\nfunction getWriter(writer?: OutputWriter): OutputWriter {\n return writer ?? process.stdout;\n}\n\nexport function printJson(value: unknown, writer?: OutputWriter): void {\n getWriter(writer).write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function printTable(\n rows: readonly Record<string, unknown>[],\n keys?: readonly string[],\n writer?: OutputWriter,\n): void {\n if (rows.length === 0) {\n getWriter(writer).write(\"No results.\\n\");\n return;\n }\n\n const firstRow = rows[0];\n\n if (!firstRow) {\n getWriter(writer).write(\"No results.\\n\");\n return;\n }\n\n const headings = [...(keys ?? Object.keys(firstRow))];\n const table = new Table({\n head: headings,\n wordWrap: true,\n });\n\n for (const row of rows) {\n table.push(headings.map((heading) => stringifyCellValue(row[heading])));\n }\n\n getWriter(writer).write(`${table.toString()}\\n`);\n}\n\nexport function printOutput(\n format: OutputFormat,\n rows: readonly Record<string, unknown>[],\n keys?: readonly string[],\n writer?: OutputWriter,\n): void {\n if (format === \"json\") {\n printJson(rows, writer);\n return;\n }\n\n printTable(rows, keys, writer);\n}\n","import { ApiClientError } from \"../client.js\";\nimport type { JsonEnvelopeMeta, JsonErrorEnvelope } from \"../types.js\";\n\nimport { buildJsonError } from \"./output.js\";\n\nexport type CliErrorCode =\n | \"unknown_error\"\n | \"invalid_cli_usage\"\n | \"configuration_error\"\n | \"command_not_allowed_in_read_only_mode\"\n | \"network_error\"\n | \"http_error\"\n | \"timeout\"\n | \"invalid_json\";\n\nexport const cliExitCodeByErrorCode = {\n unknown_error: 1,\n invalid_cli_usage: 2,\n configuration_error: 2,\n command_not_allowed_in_read_only_mode: 7,\n network_error: 1,\n http_error: 1,\n timeout: 1,\n invalid_json: 1,\n} as const satisfies Record<CliErrorCode, number>;\n\nexport interface CliErrorDetails {\n [key: string]: unknown;\n}\n\nexport interface CliErrorPayload {\n code: CliErrorCode;\n message: string;\n exitCode: number;\n details?: CliErrorDetails;\n}\n\nconst errorCodeByName: Record<string, CliErrorCode> = {\n ProfileResolutionError: \"configuration_error\",\n};\n\nexport class CliError extends Error {\n override name = \"CliError\";\n\n readonly code: CliErrorCode;\n\n readonly exitCode: number;\n\n readonly details?: CliErrorDetails;\n\n constructor(\n code: CliErrorCode,\n message: string,\n details: CliErrorDetails = {},\n exitCode: number = cliExitCodeByErrorCode[code],\n ) {\n super(message);\n this.code = code;\n this.exitCode = exitCode;\n\n if (Object.keys(details).length > 0) {\n this.details = details;\n }\n }\n\n toJSON(): CliErrorPayload {\n const payload: CliErrorPayload = {\n code: this.code,\n message: this.message,\n exitCode: this.exitCode,\n };\n\n if (this.details) {\n payload.details = this.details;\n }\n\n return payload;\n }\n}\n\nexport function isCliError(error: unknown): error is CliError {\n return error instanceof CliError;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction extractApiErrorDetails(error: ApiClientError): {\n message: string;\n details: CliErrorDetails;\n meta: JsonEnvelopeMeta;\n} {\n const details: CliErrorDetails = {};\n const meta: JsonEnvelopeMeta = {};\n const responseBody = isRecord(error.responseBody) ? error.responseBody : undefined;\n const errorBody = responseBody?.error;\n const backendError = isRecord(errorBody) ? errorBody : responseBody;\n const backendMeta = isRecord(responseBody?.meta) ? responseBody.meta : undefined;\n const reason =\n readString(backendError?.reason) ??\n readString(backendError?.code);\n const action = readString(backendError?.action);\n const requestId =\n readString(backendMeta?.requestId) ??\n readString(responseBody?.requestId) ??\n readString(backendError?.requestId);\n const status =\n readNumber(backendError?.status) ??\n readNumber(responseBody?.status) ??\n error.status;\n const backendMessage = readString(backendError?.message);\n\n if (reason !== undefined) {\n details.reason = reason;\n }\n\n if (action !== undefined) {\n details.action = action;\n }\n\n if (requestId !== undefined) {\n details.requestId = requestId;\n meta.requestId = requestId;\n }\n\n if (status !== undefined) {\n details.status = status;\n meta.status = status;\n }\n\n return {\n message: backendMessage ?? error.message,\n details,\n meta,\n };\n}\n\nexport function toCliError(error: unknown): CliError {\n if (error instanceof CliError) {\n return error;\n }\n\n if (error instanceof ApiClientError) {\n const apiError = extractApiErrorDetails(error);\n\n return new CliError(error.code, apiError.message, apiError.details);\n }\n\n if (error instanceof Error) {\n return new CliError(errorCodeByName[error.name] ?? \"unknown_error\", error.message);\n }\n\n return new CliError(\"unknown_error\", \"Unknown error\");\n}\n\nexport function getExitCode(error: unknown): number {\n return toCliError(error).exitCode;\n}\n\nexport function buildJsonCliError<TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: unknown,\n meta: TMeta = {} as TMeta,\n): JsonErrorEnvelope<CliErrorPayload, TMeta> {\n const cliError = toCliError(error);\n const apiErrorMeta =\n error instanceof ApiClientError\n ? extractApiErrorDetails(error).meta\n : {};\n\n return buildJsonError(cliError.toJSON(), { ...apiErrorMeta, ...meta } as TMeta);\n}\n\nexport function formatCliErrorText(error: unknown): string {\n return toCliError(error).message;\n}\n\nexport function formatCliErrorJson<TMeta extends JsonEnvelopeMeta = JsonEnvelopeMeta>(\n error: unknown,\n meta: TMeta = {} as TMeta,\n): string {\n return JSON.stringify(buildJsonCliError(error, meta));\n}\n","import type { JsonObject } from \"../types.js\";\nimport { CliError } from \"./errors.js\";\n\nexport type SchemaFieldTypeKey =\n | \"text\"\n | \"number\"\n | \"date\"\n | \"option\"\n | \"file\"\n | \"reference\"\n | \"formula\"\n | \"member\"\n | \"autoincremental\"\n | \"schedule\";\n\nexport interface SchemaFieldExamplePayload {\n name: string;\n payload: JsonObject;\n}\n\nexport interface SchemaFieldTypeDefinition {\n key: SchemaFieldTypeKey;\n className: string;\n aliases: readonly string[];\n description: string;\n rawShape: string;\n examplePayloads: readonly SchemaFieldExamplePayload[];\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toJsonObject(value: unknown): JsonObject | undefined {\n return isJsonObject(value) ? value : undefined;\n}\n\nfunction toStringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction toNumberValue(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return undefined;\n}\n\nconst fieldTypeDefinitions = [\n {\n key: \"text\",\n className: \"TextField\",\n aliases: [\"text\", \"TextField\"],\n description: \"Plain text field.\",\n rawShape:\n '{\"type\":\"TextField\",\"slug\":\"name\",\"label\":\"Name\",\"config\":{\"textType\":\"NORMAL\"}}',\n examplePayloads: [\n {\n name: \"Text field (normal)\",\n payload: {\n type: \"TextField\",\n slug: \"customer-name\",\n label: \"Customer Name\",\n required: true,\n config: {\n textType: \"NORMAL\",\n defaultValue: null,\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Text field (long)\",\n payload: {\n type: \"TextField\",\n slug: \"customer-notes\",\n label: \"Customer Notes\",\n required: false,\n config: {\n textType: \"LONG\",\n defaultValue: \"Add internal notes here...\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"number\",\n className: \"NumberField\",\n aliases: [\"number\", \"NumberField\"],\n description: \"Numeric field.\",\n rawShape:\n '{\"type\":\"NumberField\",\"slug\":\"quantity\",\"label\":\"Quantity\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"number\",\"decimals\":0,\"thousandsSeparator\":false}}}',\n examplePayloads: [\n {\n name: \"Number field (plain integer)\",\n payload: {\n type: \"NumberField\",\n slug: \"quantity\",\n label: \"Quantity\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"number\",\n decimals: 0,\n thousandsSeparator: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (decimal with thousands)\",\n payload: {\n type: \"NumberField\",\n slug: \"weight\",\n label: \"Weight (kg)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"number\",\n decimals: 2,\n thousandsSeparator: true,\n negativesInRed: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (currency € prefix)\",\n payload: {\n type: \"NumberField\",\n slug: \"amount-eur\",\n label: \"Amount (EUR)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"currency\",\n decimals: 2,\n negativesInRed: true,\n thousandsSeparator: true,\n symbolEnabled: true,\n symbolPosition: \"before\",\n symbolValue: \"€\",\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (currency $ suffix)\",\n payload: {\n type: \"NumberField\",\n slug: \"amount-usd\",\n label: \"Amount (USD)\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"currency\",\n decimals: 2,\n negativesInRed: false,\n thousandsSeparator: true,\n symbolEnabled: true,\n symbolPosition: \"right\",\n symbolValue: \" $\",\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (percentage)\",\n payload: {\n type: \"NumberField\",\n slug: \"discount-rate\",\n label: \"Discount Rate\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"percentage\",\n decimals: 1,\n negativesInRed: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Number field (duration HH:MM)\",\n payload: {\n type: \"NumberField\",\n slug: \"tracked-time\",\n label: \"Tracked Time\",\n required: false,\n config: {\n defaultValue: \"0\",\n formatOptions: {\n format: \"duration\",\n durationFormat: \"HH:MM\",\n },\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"date\",\n className: \"DateField\",\n aliases: [\"date\", \"DateField\"],\n description: \"Date or datetime field.\",\n rawShape:\n '{\"type\":\"DateField\",\"slug\":\"due-date\",\"label\":\"Due Date\",\"config\":{\"formatOptions\":{\"format\":\"date\",\"dateFormat\":\"YYYY-MM-DD\",\"showTime\":false}}}',\n examplePayloads: [\n {\n name: \"Date field (date only)\",\n payload: {\n type: \"DateField\",\n slug: \"birth-date\",\n label: \"Birth Date\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"date\",\n dateFormat: \"YYYY-MM-DD\",\n showTime: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Date field (datetime EU)\",\n payload: {\n type: \"DateField\",\n slug: \"due-date\",\n label: \"Due Date\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"datetime\",\n dateFormat: \"DD/MM/YYYY\",\n showTime: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Date field (datetime US)\",\n payload: {\n type: \"DateField\",\n slug: \"appointment-at\",\n label: \"Appointment\",\n required: false,\n config: {\n defaultValue: null,\n formatOptions: {\n format: \"datetime\",\n dateFormat: \"MM/DD/YYYY\",\n showTime: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"option\",\n className: \"OptionField\",\n aliases: [\"option\", \"OptionField\"],\n description: \"Dropdown/select field with options.\",\n rawShape:\n '{\"type\":\"OptionField\",\"slug\":\"status\",\"label\":\"Status\",\"config\":{\"options\":[{\"id\":1,\"name\":\"Open\",\"color\":\"default\"},{\"id\":2,\"name\":\"Closed\",\"color\":\"success\"}]}}',\n examplePayloads: [\n {\n name: \"Option field (select dropdown)\",\n payload: {\n type: \"OptionField\",\n slug: \"priority\",\n label: \"Priority\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"Low\", color: \"default\" },\n { id: 2, name: \"Medium\", color: \"warning\" },\n { id: 3, name: \"High\", color: \"danger\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: null,\n },\n },\n },\n {\n name: \"Option field (button cycle)\",\n payload: {\n type: \"OptionField\",\n slug: \"stage\",\n label: \"Stage\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"To Do\", color: \"default\" },\n { id: 2, name: \"Doing\", color: \"warning\" },\n { id: 3, name: \"Done\", color: \"success\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: {\n displayMode: \"button\",\n buttonBehavior: {\n mode: \"cycle\",\n cycleOrder: [1, 2, 3],\n requireConfirmation: false,\n lockAfterSelection: false,\n allowReselect: true,\n },\n },\n },\n },\n },\n {\n name: \"Option field (button dropdown w/ confirm)\",\n payload: {\n type: \"OptionField\",\n slug: \"status\",\n label: \"Status\",\n required: false,\n config: {\n options: [\n { id: 1, name: \"Open\", color: \"default\" },\n { id: 2, name: \"In Progress\", color: \"warning\" },\n { id: 3, name: \"Done\", color: \"success\" },\n ],\n defaultValue: 1,\n conditionalFormatting: [],\n buttonConfig: {\n displayMode: \"button\",\n buttonBehavior: {\n mode: \"dropdown\",\n requireConfirmation: true,\n confirmationMessage: \"Confirm status change\",\n useFixedLabel: true,\n buttonLabel: \"Set status\",\n allowReselect: true,\n },\n },\n },\n },\n },\n ],\n },\n {\n key: \"file\",\n className: \"FileField\",\n aliases: [\"file\", \"FileField\"],\n description: \"File attachment field.\",\n rawShape:\n '{\"type\":\"FileField\",\"slug\":\"attachment\",\"label\":\"Attachment\",\"config\":{}}',\n examplePayloads: [\n {\n name: \"File field\",\n payload: {\n type: \"FileField\",\n slug: \"attachment\",\n label: \"Attachment\",\n required: false,\n config: {},\n },\n },\n ],\n },\n {\n key: \"reference\",\n className: \"ReferenceField\",\n aliases: [\"reference\", \"ReferenceField\"],\n description: \"Reference to another schema.\",\n rawShape:\n '{\"type\":\"ReferenceField\",\"slug\":\"company-ref\",\"label\":\"Company\",\"config\":{\"targetSchema\":\"<schema-uuid>\",\"targetDisplayField\":\"<field-uuid>\"}}',\n examplePayloads: [\n {\n name: \"Reference field (minimal)\",\n payload: {\n type: \"ReferenceField\",\n slug: \"company-ref\",\n label: \"Company\",\n required: false,\n config: {\n targetSchema: \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n targetDisplayField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n },\n },\n },\n {\n name: \"Reference field (restrict + filter + description)\",\n payload: {\n type: \"ReferenceField\",\n slug: \"customer-ref\",\n label: \"Customer\",\n required: false,\n config: {\n targetSchema: \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n targetDisplayField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n deleteBehavior: \"RESTRICT\",\n defaultValue: \"CUST-12\",\n filterFields: [\n {\n fatherField: \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n currentField: \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n comparison: \"EQUAL\",\n value: null,\n },\n ],\n descriptionFields: [\n {\n id: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n fieldType: \"NumberField\",\n options: null,\n format: \"number\",\n },\n ],\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"formula\",\n className: \"FormulaField\",\n aliases: [\"formula\", \"FormulaField\"],\n description: \"Calculated field from a formula.\",\n rawShape:\n '{\"type\":\"FormulaField\",\"slug\":\"formula-code\",\"label\":\"Formula Code\",\"config\":{\"formulaText\":\"concat(\\\\\"CUST-\\\\\", f1e1d000-0000-0000-0000-000000000005)\",\"uiFormatKind\":\"none\"}}',\n examplePayloads: [\n {\n name: \"Formula field (none)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-code\",\n label: \"Formula Code\",\n required: false,\n config: {\n formulaText:\n 'concat(\"CUST-\", f1e1d000-0000-0000-0000-000000000005)',\n uiFormatKind: \"none\",\n status: \"ACTIVE\",\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (number)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-total\",\n label: \"Formula Total\",\n required: false,\n config: {\n formulaText: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.21\",\n uiFormatKind: \"number\",\n status: \"ACTIVE\",\n numberFormatOptions: {\n format: \"number\",\n decimals: 2,\n thousandsSeparator: true,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (date)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-period\",\n label: \"Formula Period\",\n required: false,\n config: {\n formulaText:\n 'date_format(d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90, \"AAAA-MM\")',\n uiFormatKind: \"date\",\n status: \"ACTIVE\",\n dateFormatOptions: {\n format: \"date\",\n dateFormat: \"DD/MM/YYYY\",\n showTime: false,\n },\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Formula field (member)\",\n payload: {\n type: \"FormulaField\",\n slug: \"formula-assignee\",\n label: \"Computed Assignee\",\n required: false,\n config: {\n formulaText: \"a7b8c9d0-e1f2-3a4b-5c6d-7e8f90123456\",\n uiFormatKind: \"member\",\n status: \"ACTIVE\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"member\",\n className: \"MemberField\",\n aliases: [\"member\", \"MemberField\"],\n description: \"Workspace member field.\",\n rawShape:\n '{\"type\":\"MemberField\",\"slug\":\"owner\",\"label\":\"Owner\",\"config\":{\"defaultValue\":null}}',\n examplePayloads: [\n {\n name: \"Member field\",\n payload: {\n type: \"MemberField\",\n slug: \"owner\",\n label: \"Owner\",\n required: false,\n config: {\n defaultValue: null,\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"autoincremental\",\n className: \"AutoIncrementalField\",\n aliases: [\n \"autoincremental\",\n \"auto-incremental\",\n \"auto_incremental\",\n \"AutoIncrementalField\",\n ],\n description: \"Auto-generated incremental counter.\",\n rawShape:\n '{\"type\":\"AutoIncrementalField\",\"slug\":\"order-number\",\"label\":\"Order Number\",\"config\":{\"segmentedByFieldId\":null}}',\n examplePayloads: [\n {\n name: \"Autoincremental (global counter)\",\n payload: {\n type: \"AutoIncrementalField\",\n slug: \"order-number\",\n label: \"Order Number\",\n required: false,\n config: {\n segmentedByFieldId: null,\n conditionalFormatting: [],\n },\n },\n },\n {\n name: \"Autoincremental (segmented)\",\n payload: {\n type: \"AutoIncrementalField\",\n slug: \"sequence-code\",\n label: \"Sequence Code\",\n required: false,\n config: {\n segmentedByFieldId: \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n conditionalFormatting: [],\n },\n },\n },\n ],\n },\n {\n key: \"schedule\",\n className: \"ScheduleField\",\n aliases: [\"schedule\", \"ScheduleField\"],\n description:\n \"Recurrence/schedule field bound to a number reference and a date period (frequency: monthly or daily).\",\n rawShape:\n '{\"type\":\"ScheduleField\",\"slug\":\"recurrence\",\"label\":\"Recurrence\",\"config\":{\"referenceField\":\"<number-field-uuid>\",\"beginningPeriodField\":\"<date-field-uuid>\",\"endingPeriodField\":\"<date-field-uuid>\",\"frequency\":\"monthly\"}}',\n examplePayloads: [\n {\n name: \"Schedule field (monthly)\",\n payload: {\n type: \"ScheduleField\",\n slug: \"monthly-recurrence\",\n label: \"Monthly Recurrence\",\n required: false,\n config: {\n referenceField: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n beginningPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n endingPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n frequency: \"monthly\",\n },\n },\n },\n {\n name: \"Schedule field (daily)\",\n payload: {\n type: \"ScheduleField\",\n slug: \"daily-recurrence\",\n label: \"Daily Recurrence\",\n required: false,\n config: {\n referenceField: \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n beginningPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n endingPeriodField: \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n frequency: \"daily\",\n },\n },\n },\n ],\n },\n] as const satisfies readonly SchemaFieldTypeDefinition[];\n\nconst fieldTypeDefinitionByAlias = new Map(\n fieldTypeDefinitions.flatMap((definition) =>\n definition.aliases.map((alias) => [alias.trim().toLowerCase(), definition] as const),\n ),\n);\n\nconst fieldTypeDefinitionByClassName = new Map<string, SchemaFieldTypeDefinition>(\n fieldTypeDefinitions.map((definition) => [definition.className, definition] as const),\n);\n\nconst optionValidationMessage =\n 'Option fields require an \"options\" array with at least one entry like {\"id\":1,\"name\":\"Open\",\"color\":\"default\"}.';\n\nexport function getSchemaFieldTypeDefinitions(): readonly SchemaFieldTypeDefinition[] {\n return fieldTypeDefinitions;\n}\n\nexport function listSchemaFieldTypes(): readonly SchemaFieldTypeKey[] {\n return fieldTypeDefinitions.map((definition) => definition.key);\n}\n\nexport function formatSchemaFieldTypes(): string {\n return listSchemaFieldTypes().join(\", \");\n}\n\nexport function resolveSchemaFieldType(\n input: string | undefined,\n): SchemaFieldTypeDefinition | undefined {\n if (!input) {\n return undefined;\n }\n\n return fieldTypeDefinitionByAlias.get(input.trim().toLowerCase());\n}\n\nexport function resolveSchemaFieldTypeByClassName(\n className: string | undefined,\n): SchemaFieldTypeDefinition | undefined {\n if (!className) {\n return undefined;\n }\n\n return fieldTypeDefinitionByClassName.get(className);\n}\n\nexport function normalizeSchemaFieldType(input: string): string {\n const definition = resolveSchemaFieldType(input);\n\n if (definition) {\n return definition.className;\n }\n\n if (/^[a-z]/.test(input) && !input.endsWith(\"Field\")) {\n return `${input.charAt(0).toUpperCase()}${input.slice(1)}Field`;\n }\n\n return input;\n}\n\nexport function assertSupportedSchemaFieldType(type: string): void {\n if (!resolveSchemaFieldTypeByClassName(type)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Unsupported field type \"${type}\". Valid types: ${formatSchemaFieldTypes()}.`,\n );\n }\n}\n\ninterface OptionEntry {\n [key: string]: string | number;\n id: number;\n name: string;\n color: string;\n}\n\nfunction normalizeOptionEntries(entries: readonly unknown[]): OptionEntry[] {\n return entries.flatMap((entry) => {\n if (!isJsonObject(entry)) {\n return [];\n }\n\n const id = toNumberValue(entry.id);\n const name = toStringValue(entry.name) ?? toStringValue(entry.label);\n const color = toStringValue(entry.color) ?? \"default\";\n\n if (id === undefined || !name) {\n return [];\n }\n\n return [{ id, name, color }];\n });\n}\n\nfunction normalizeOptionPayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config);\n const rootOptions = Array.isArray(input.options) ? input.options : undefined;\n const nestedOptions = Array.isArray(additionalProperties.options)\n ? additionalProperties.options\n : Array.isArray(config?.options)\n ? config.options\n : undefined;\n const optionObjects = normalizeOptionEntries(\n nestedOptions ??\n (Array.isArray(rootOptions) ? rootOptions : []),\n );\n\n if (optionObjects.length === 0) {\n throw new CliError(\"invalid_cli_usage\", optionValidationMessage);\n }\n\n const { options: _options, additionalProperties: _additionalProperties, ...rest } = input;\n const defaultValue =\n config?.defaultValue ?? input.defaultValue ?? additionalProperties.defaultValue;\n const conditionalFormatting =\n config?.conditionalFormatting ?? additionalProperties.conditionalFormatting;\n const buttonConfig = config?.buttonConfig ?? additionalProperties.buttonConfig;\n\n return {\n ...rest,\n config: {\n ...(config ?? {}),\n options: optionObjects,\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(conditionalFormatting !== undefined ? { conditionalFormatting } : {}),\n ...(buttonConfig !== undefined ? { buttonConfig } : {}),\n },\n };\n}\n\nfunction normalizeReferencePayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config) ?? {};\n const targetSchema =\n config.targetSchema ?? input.targetSchema ?? additionalProperties.targetSchema;\n const targetDisplayField =\n config.targetDisplayField ??\n input.targetDisplayField ??\n additionalProperties.targetDisplayField;\n const deleteBehavior =\n config.deleteBehavior ?? input.deleteBehavior ?? additionalProperties.deleteBehavior;\n const defaultValue =\n config.defaultValue ?? input.defaultValue ?? additionalProperties.defaultValue;\n const filterFields =\n config.filterFields ?? input.filterFields ?? additionalProperties.filterFields;\n const descriptionFields =\n config.descriptionFields ??\n input.descriptionFields ??\n additionalProperties.descriptionFields;\n const conditionalFormatting =\n config.conditionalFormatting ??\n input.conditionalFormatting ??\n additionalProperties.conditionalFormatting;\n\n const normalized: JsonObject = {\n ...input,\n };\n\n normalized.config = {\n ...config,\n ...(targetSchema !== undefined ? { targetSchema } : {}),\n ...(targetDisplayField !== undefined ? { targetDisplayField } : {}),\n ...(deleteBehavior !== undefined ? { deleteBehavior } : {}),\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(filterFields !== undefined ? { filterFields } : {}),\n ...(descriptionFields !== undefined ? { descriptionFields } : {}),\n ...(conditionalFormatting !== undefined ? { conditionalFormatting } : {}),\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n\n if (\n !toStringValue(normalizedConfig.targetSchema) ||\n !toStringValue(normalizedConfig.targetDisplayField)\n ) {\n const definition = resolveSchemaFieldType(\"reference\")!;\n throw new CliError(\n \"invalid_cli_usage\",\n `Reference fields require \"targetSchema\" and \"targetDisplayField\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n return normalized;\n}\n\nconst scheduleAllowedFrequencies = new Set([\"monthly\", \"daily\"]);\n\nfunction normalizeSchedulePayload(input: JsonObject): JsonObject {\n const additionalProperties = toJsonObject(input.additionalProperties) ?? {};\n const config = toJsonObject(input.config) ?? {};\n const referenceField =\n config.referenceField ?? input.referenceField ?? additionalProperties.referenceField;\n const beginningPeriodField =\n config.beginningPeriodField ??\n input.beginningPeriodField ??\n additionalProperties.beginningPeriodField;\n const endingPeriodField =\n config.endingPeriodField ??\n input.endingPeriodField ??\n additionalProperties.endingPeriodField;\n const frequency =\n config.frequency ?? input.frequency ?? additionalProperties.frequency;\n\n const {\n referenceField: _referenceField,\n beginningPeriodField: _beginningPeriodField,\n endingPeriodField: _endingPeriodField,\n frequency: _frequency,\n additionalProperties: _additionalProperties,\n ...rest\n } = input;\n\n const normalized: JsonObject = {\n ...rest,\n config: {\n ...config,\n ...(referenceField !== undefined ? { referenceField } : {}),\n ...(beginningPeriodField !== undefined ? { beginningPeriodField } : {}),\n ...(endingPeriodField !== undefined ? { endingPeriodField } : {}),\n ...(frequency !== undefined ? { frequency } : {}),\n },\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n const definition = resolveSchemaFieldType(\"schedule\")!;\n\n if (\n !toStringValue(normalizedConfig.referenceField) ||\n !toStringValue(normalizedConfig.beginningPeriodField) ||\n !toStringValue(normalizedConfig.endingPeriodField) ||\n !toStringValue(normalizedConfig.frequency)\n ) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Schedule fields require \"referenceField\", \"beginningPeriodField\", \"endingPeriodField\" and \"frequency\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n const frequencyValue = toStringValue(normalizedConfig.frequency)!;\n if (!scheduleAllowedFrequencies.has(frequencyValue)) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Schedule \"frequency\" must be \"monthly\" or \"daily\" (received \"${frequencyValue}\").`,\n );\n }\n\n return normalized;\n}\n\nfunction normalizeFormulaPayload(input: JsonObject): JsonObject {\n const { status: _status, ...rest } = input;\n const rawAdditionalProperties = toJsonObject(input.additionalProperties);\n const rawConfig = toJsonObject(input.config);\n const { status: _additionalStatus, ...additionalProperties } =\n rawAdditionalProperties ?? {};\n const { status: _configStatus, ...config } = rawConfig ?? {};\n const formulaText =\n config.formulaText ??\n rest.formulaText ??\n rest.expression ??\n additionalProperties.formulaText ??\n additionalProperties.expression;\n\n const normalized: JsonObject = {\n ...rest,\n };\n\n normalized.config = {\n ...config,\n ...(formulaText !== undefined ? { formulaText } : {}),\n ...(config.uiFormatKind !== undefined ? { uiFormatKind: config.uiFormatKind } : {}),\n ...(config.defaultValue !== undefined ? { defaultValue: config.defaultValue } : {}),\n ...(config.numberFormatOptions !== undefined\n ? { numberFormatOptions: config.numberFormatOptions }\n : {}),\n ...(config.dateFormatOptions !== undefined\n ? { dateFormatOptions: config.dateFormatOptions }\n : {}),\n ...(config.conditionalFormatting !== undefined\n ? { conditionalFormatting: config.conditionalFormatting }\n : {}),\n };\n\n const normalizedConfig = toJsonObject(normalized.config) ?? {};\n\n if (!toStringValue(normalizedConfig.formulaText)) {\n const definition = resolveSchemaFieldType(\"formula\")!;\n throw new CliError(\n \"invalid_cli_usage\",\n `Formula fields require \"formulaText\". Expected raw shape: ${definition.rawShape}`,\n );\n }\n\n return normalized;\n}\n\nexport function normalizeSchemaFieldCreatePayload(input: JsonObject): JsonObject {\n const rawType = toStringValue(input.type);\n const normalizedType = rawType ? normalizeSchemaFieldType(rawType) : undefined;\n const definition = resolveSchemaFieldTypeByClassName(normalizedType);\n\n if (!definition) {\n return input;\n }\n\n const normalizedWithType: JsonObject = {\n ...input,\n type: definition.className,\n };\n\n switch (definition.key) {\n case \"option\":\n return normalizeOptionPayload(normalizedWithType);\n case \"reference\":\n return normalizeReferencePayload(normalizedWithType);\n case \"formula\":\n return normalizeFormulaPayload(normalizedWithType);\n case \"schedule\":\n return normalizeSchedulePayload(normalizedWithType);\n case \"autoincremental\": {\n const config = toJsonObject(normalizedWithType.config) ?? {};\n const segmentedByFieldId =\n config.segmentedByFieldId ??\n normalizedWithType.segmentedByFieldId ??\n null;\n return {\n ...normalizedWithType,\n config: {\n ...config,\n segmentedByFieldId,\n ...(config.conditionalFormatting !== undefined\n ? { conditionalFormatting: config.conditionalFormatting }\n : {}),\n },\n };\n }\n default:\n return normalizedWithType;\n }\n}\n\nexport function normalizeSchemaFieldUpdatePayload(\n type: string,\n input: JsonObject,\n): JsonObject {\n const definition = resolveSchemaFieldTypeByClassName(type);\n\n if (definition?.key === \"formula\") {\n return normalizeFormulaPayload(input);\n }\n\n return input;\n}\n\nexport function buildSchemaFieldCreateHelpText(): string {\n const sections = fieldTypeDefinitions.map(\n (definition) =>\n ` - ${definition.key}: ${definition.description}\\n raw: ${definition.rawShape}`,\n );\n\n return [\n \"\",\n \"Valid field types:\",\n ` ${formatSchemaFieldTypes()}`,\n \"\",\n \"Raw payload shapes by type:\",\n ...sections,\n \"\",\n 'Use \"zinkee --example schemas fields create --type <type>\" to show a concrete example for one type.',\n ].join(\"\\n\");\n}\n\nexport function buildSchemaFieldCreateValidationMessage(type: string): string {\n const definition = resolveSchemaFieldTypeByClassName(type);\n\n if (!definition) {\n return `Invalid payload for field type \"${type}\". Valid types: ${formatSchemaFieldTypes()}.`;\n }\n\n return `Invalid payload for field type \"${definition.key}\". Expected raw shape: ${definition.rawShape}`;\n}\n","import {\n getSchemaFieldTypeDefinitions,\n resolveSchemaFieldType,\n} from \"./schema-fields.js\";\n\nexport interface CommandExample {\n command: string;\n description: string;\n raw?: string;\n response?: string;\n}\n\nexport function buildCommandExample(example: CommandExample): CommandExample {\n return {\n command: example.command,\n description: example.description,\n raw: example.raw,\n response: example.response,\n };\n}\n\nexport function buildCommandExamples(examples: readonly CommandExample[]): readonly CommandExample[] {\n return examples.map((example) => buildCommandExample(example));\n}\n\nconst SAMPLE_UUID = \"550e8400-e29b-41d4-a716-446655440001\";\n\nconst specificExamples: Record<string, readonly CommandExample[]> = {\n \"profiles list\": buildCommandExamples([\n {\n description:\n \"List all local profiles. The CLI always redacts the apiKey to ******** plus the last 4 chars.\",\n command: \"zinkee --json profiles list\",\n response: `[\n {\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n },\n {\n \"name\": \"local\",\n \"isDefault\": false,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:8088\"\n }\n]`,\n },\n ]),\n \"profiles get\": buildCommandExamples([\n {\n description: \"Show one profile by name.\",\n command: \"zinkee --json profiles get prod\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n ]),\n \"profiles use\": buildCommandExamples([\n {\n description: \"Set a profile as the default one used when --profile is not passed.\",\n command: \"zinkee --json profiles use local\",\n response: `{\n \"profile\": \"local\",\n \"defaultProfile\": \"local\"\n}`,\n },\n ]),\n \"profiles add\": buildCommandExamples([\n {\n description:\n \"Add a new profile with an explicit base URL. Becomes the default if no other profile existed.\",\n command:\n \"zinkee --json profiles add prod --api-key sk-prod-9f3a2c1b-1234567890abcdef --base-url https://api.zinkee.com\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n {\n description:\n \"Add a profile without --base-url (the runtime falls back to the production URL at call time).\",\n command: \"zinkee --json profiles add staging --api-key sk-staging-7777aaaa-bbbbccccddddeeee\",\n response: `{\n \"name\": \"staging\",\n \"isDefault\": false,\n \"apiKey\": \"********eeee\"\n}`,\n },\n ]),\n \"profiles update\": buildCommandExamples([\n {\n description: \"Rotate just the API key of an existing profile.\",\n command:\n \"zinkee --json profiles update prod --api-key sk-prod-0000new0-fedcba0987654321\",\n response: `{\n \"name\": \"prod\",\n \"isDefault\": true,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"https://api.zinkee.com\"\n}`,\n },\n {\n description: \"Point an existing profile at a different base URL (useful when moving envs).\",\n command: \"zinkee --json profiles update local --base-url http://localhost:9090\",\n response: `{\n \"name\": \"local\",\n \"isDefault\": false,\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:9090\"\n}`,\n },\n ]),\n \"profiles remove\": buildCommandExamples([\n {\n description:\n \"Remove a profile. If it was the default, defaultProfile becomes null and you should set a new one with profiles use.\",\n command: \"zinkee --json profiles remove staging\",\n response: `{\n \"profile\": \"staging\",\n \"defaultProfile\": \"prod\"\n}`,\n },\n ]),\n \"config path\": buildCommandExamples([\n {\n description: \"Print the path of the config file the CLI is reading right now.\",\n command: \"zinkee --json config path\",\n response: `{\n \"path\": \"/home/guillermo/.config/zinkee/config.json\"\n}`,\n },\n ]),\n \"config show\": buildCommandExamples([\n {\n description:\n \"Dump the whole config with secrets redacted. Same ******** + last 4 chars mask that profiles list uses.\",\n command: \"zinkee --json config show\",\n response: `{\n \"defaultProfile\": \"prod\",\n \"profiles\": {\n \"prod\": {\n \"apiKey\": \"********cdef\",\n \"baseUrl\": \"https://api.zinkee.com\"\n },\n \"local\": {\n \"apiKey\": \"********4321\",\n \"baseUrl\": \"http://localhost:8088\"\n }\n }\n}`,\n },\n ]),\n \"config validate\": buildCommandExamples([\n {\n description:\n \"Validate that the local config resolves a profile. Useful as a CI gate before running other commands.\",\n command: \"zinkee --json config validate\",\n response: `{\n \"valid\": true,\n \"profile\": \"prod\"\n}`,\n },\n ]),\n \"schemas create\": buildCommandExamples([\n {\n description: \"Create an auditable and commentable schema from flags.\",\n command:\n 'zinkee --json schemas create --name \"Codex Demo\" --slug codex-demo --auditable --commentable',\n raw: `{\n \"name\": \"Codex Demo\",\n \"slug\": \"codex-demo\",\n \"auditable\": true,\n \"commentable\": true\n}`,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"slug\": \"codex-demo\",\n \"folder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n }\n}`,\n },\n {\n description: \"Minimal create with just name and slug.\",\n command: 'zinkee --json schemas create --name Leads --slug leads',\n raw: `{\n \"name\": \"Leads\",\n \"slug\": \"leads\"\n}`,\n },\n {\n description:\n \"Create an auditable schema inside an existing navigation folder (folder id can be a UUID or the exact folder name).\",\n command:\n 'zinkee --json schemas create --name Tasks --slug tasks --auditable --folder 7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f',\n raw: `{\n \"name\": \"Tasks\",\n \"slug\": \"tasks\",\n \"auditable\": true,\n \"commentable\": false,\n \"folderId\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\"\n}`,\n },\n ]),\n \"schemas update\": buildCommandExamples([\n {\n description: \"Toggle the commentable flag on a schema.\",\n command: 'zinkee --json schemas update contacts --commentable true',\n raw: `{\n \"commentable\": true\n}`,\n response: `{\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer Contacts\",\n \"slug\": \"customer-contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": true,\n \"commentable\": true,\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"fields\": [\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n }\n ],\n \"uniqueFields\": []\n}`,\n },\n {\n description: \"Rename a schema and change its slug.\",\n command:\n 'zinkee --json schemas update contacts --name \"Customer Contacts\" --slug customer-contacts',\n raw: `{\n \"name\": \"Customer Contacts\",\n \"slug\": \"customer-contacts\"\n}`,\n },\n {\n description: \"Enable the audit log on a schema.\",\n command: 'zinkee --json schemas update contacts --auditable true',\n raw: `{\n \"auditable\": true\n}`,\n },\n {\n description:\n \"Set the schema's highlighted (main) field — the field whose value names each record in the UI (activity-panel title and detail-view record list).\",\n command:\n 'zinkee --json schemas update contacts --highlighted-field contact-name',\n raw: `{\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n}`,\n },\n ]),\n \"schemas set-unique-fields\": buildCommandExamples([\n {\n description:\n \"Set a composite unique constraint: the listed fields must be unique together across records.\",\n command:\n \"zinkee --json schemas set-unique-fields contacts --field contact-name --field notes\",\n raw: `{\n \"fieldIds\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\"\n ]\n}`,\n response: `{\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Contacts\",\n \"slug\": \"contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": true,\n \"commentable\": true,\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"fields\": [\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"NORMAL\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\",\n \"type\": \"TextField\",\n \"slug\": \"notes\",\n \"label\": \"Notes\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": null,\n \"conditionalFormatting\": []\n }\n }\n ],\n \"uniqueFields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\"\n ]\n}`,\n },\n {\n description: \"Set a single-field unique constraint.\",\n command: \"zinkee --json schemas set-unique-fields contacts --field contact-name\",\n raw: `{\n \"fieldIds\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n ]\n}`,\n },\n {\n description: \"Clear the unique constraint (no field must be unique anymore).\",\n command: \"zinkee --json schemas set-unique-fields contacts --clear\",\n raw: `{\n \"fieldIds\": []\n}`,\n },\n ]),\n \"schemas fields update\": buildCommandExamples([\n {\n description: \"Rename slug and label.\",\n command:\n `zinkee --json schemas fields update contacts contact-name --label \"Customer Full Name\" --raw '{\"slug\":\"customer-full-name\"}'`,\n raw: `{\n \"slug\": \"customer-full-name\",\n \"label\": \"Customer Full Name\"\n}`,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"slug\": \"customer-full-name\"\n}`,\n },\n {\n description: \"Toggle required.\",\n command: \"zinkee --json schemas fields update contacts status --required true\",\n raw: `{\n \"required\": true\n}`,\n },\n {\n description: \"Patch text field (long with default).\",\n command:\n `zinkee --json schemas fields update contacts contact-name --raw '{\"type\":\"TextField\",\"label\":\"Customer Full Name\",\"required\":false,\"config\":{\"textType\":\"LONG\",\"defaultValue\":\"Unknown\",\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"TextField\",\n \"label\": \"Customer Full Name\",\n \"required\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch number field (to currency).\",\n command:\n `zinkee --json schemas fields update contacts amount --raw '{\"type\":\"NumberField\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"currency\",\"decimals\":2,\"thousandsSeparator\":true,\"symbolEnabled\":true,\"symbolPosition\":\"before\",\"symbolValue\":\"€\"},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"NumberField\",\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"currency\",\n \"decimals\": 2,\n \"thousandsSeparator\": true,\n \"symbolEnabled\": true,\n \"symbolPosition\": \"before\",\n \"symbolValue\": \"€\"\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch number field (to percentage).\",\n command:\n `zinkee --json schemas fields update contacts discount-rate --raw '{\"type\":\"NumberField\",\"config\":{\"defaultValue\":\"0\",\"formatOptions\":{\"format\":\"percentage\",\"decimals\":1},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"NumberField\",\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"percentage\",\n \"decimals\": 1\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch date field (to date only).\",\n command:\n `zinkee --json schemas fields update contacts due-date --raw '{\"type\":\"DateField\",\"config\":{\"defaultValue\":null,\"formatOptions\":{\"format\":\"date\",\"dateFormat\":\"YYYY-MM-DD\",\"showTime\":false},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"DateField\",\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"YYYY-MM-DD\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch option field (button cycle).\",\n command:\n `zinkee --json schemas fields update contacts stage --raw '{\"type\":\"OptionField\",\"config\":{\"options\":[{\"id\":1,\"name\":\"To Do\",\"color\":\"default\"},{\"id\":2,\"name\":\"Doing\",\"color\":\"warning\"},{\"id\":3,\"name\":\"Done\",\"color\":\"success\"}],\"defaultValue\":1,\"conditionalFormatting\":[],\"buttonConfig\":{\"displayMode\":\"button\",\"buttonBehavior\":{\"mode\":\"cycle\",\"cycleOrder\":[1,2,3],\"allowReselect\":true}}}}'`,\n raw: `{\n \"type\": \"OptionField\",\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"To Do\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"Doing\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"allowReselect\": true\n }\n }\n }\n}`,\n },\n {\n description: \"Patch option field (drop button mode).\",\n command:\n `zinkee --json schemas fields update contacts status --raw '{\"type\":\"OptionField\",\"config\":{\"options\":[{\"id\":1,\"name\":\"Open\",\"color\":\"default\"},{\"id\":2,\"name\":\"In Progress\",\"color\":\"warning\"},{\"id\":3,\"name\":\"Done\",\"color\":\"success\"}],\"defaultValue\":1,\"conditionalFormatting\":[],\"buttonConfig\":null}}'`,\n raw: `{\n \"type\": \"OptionField\",\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n}`,\n },\n {\n description: \"Patch formula field (formula text).\",\n command:\n `zinkee --json schemas fields update contacts formula-total --raw '{\"type\":\"FormulaField\",\"config\":{\"formulaText\":\"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.10\",\"uiFormatKind\":\"number\",\"status\":\"ACTIVE\",\"numberFormatOptions\":{\"format\":\"number\",\"decimals\":2,\"thousandsSeparator\":true},\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"FormulaField\",\n \"config\": {\n \"formulaText\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.10\",\n \"uiFormatKind\": \"number\",\n \"status\": \"ACTIVE\",\n \"numberFormatOptions\": {\n \"format\": \"number\",\n \"decimals\": 2,\n \"thousandsSeparator\": true\n },\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch reference field (delete behavior).\",\n command:\n `zinkee --json schemas fields update contacts customer-ref --raw '{\"type\":\"ReferenceField\",\"config\":{\"targetSchema\":\"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\"targetDisplayField\":\"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\"deleteBehavior\":\"RESTRICT\",\"defaultValue\":null,\"filterFields\":[],\"descriptionFields\":[],\"conditionalFormatting\":[]}}'`,\n raw: `{\n \"type\": \"ReferenceField\",\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"RESTRICT\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n}`,\n },\n {\n description: \"Patch schedule field (to daily).\",\n command:\n `zinkee --json schemas fields update contacts recurrence --raw '{\"type\":\"ScheduleField\",\"config\":{\"referenceField\":\"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\"beginningPeriodField\":\"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\"endingPeriodField\":\"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\"frequency\":\"daily\"}}'`,\n raw: `{\n \"type\": \"ScheduleField\",\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"daily\"\n }\n}`,\n },\n ]),\n \"records query\": buildCommandExamples([\n {\n description: \"Lookup a single record by id.\",\n command:\n 'zinkee --json records query contacts --select id,contact-name --where \"id eq 550e8400-e29b-41d4-a716-446655440000\" --sort id:desc --limit 10',\n raw: `{\n \"select\": [\"id\", \"contact-name\"],\n \"where\": [\n { \"field\": \"id\", \"op\": \"eq\", \"value\": \"550e8400-e29b-41d4-a716-446655440000\" }\n ],\n \"sort\": [\n { \"field\": \"id\", \"direction\": \"DESC\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 10 }\n}`,\n response: `{\n \"records\": [\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"status\": 2,\n \"amount\": 1250.50\n }\n }\n ],\n \"page\": {\n \"offset\": 0,\n \"limit\": 25,\n \"total\": 1,\n \"count\": 1,\n \"hasMore\": false\n }\n}`,\n },\n {\n description:\n \"Filter by multiple conditions and sort by amount then name.\",\n command:\n `zinkee --json records query contacts --select id,contact-name,status,amount --where \"status in 1,2\" --where \"amount gte 500\" --sort amount:desc --sort contact-name:asc --limit 25`,\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"status\", \"amount\"],\n \"where\": [\n { \"field\": \"status\", \"op\": \"in\", \"value\": [1, 2] },\n { \"field\": \"amount\", \"op\": \"gte\", \"value\": 500 }\n ],\n \"sort\": [\n { \"field\": \"amount\", \"direction\": \"DESC\" },\n { \"field\": \"contact-name\", \"direction\": \"ASC\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 25 }\n}`,\n },\n {\n description: \"Filter by status with a free-text search term.\",\n command:\n `zinkee --json records query contacts --select id,contact-name,status --where \"status in OPEN\" --search garcia --limit 25`,\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"status\"],\n \"where\": [\n { \"field\": \"status\", \"op\": \"in\", \"value\": [\"OPEN\"] }\n ],\n \"search\": { \"term\": \"garcia\" },\n \"page\": { \"offset\": 0, \"limit\": 25 }\n}`,\n },\n {\n description: \"Text contains search.\",\n command:\n 'zinkee --json records query contacts --select id,contact-name,contact-email --where \"contact-name contains Lovelace\" --limit 50',\n raw: `{\n \"select\": [\"id\", \"contact-name\", \"contact-email\"],\n \"where\": [\n { \"field\": \"contact-name\", \"op\": \"contains\", \"value\": \"Lovelace\" }\n ],\n \"page\": { \"offset\": 0, \"limit\": 50 }\n}`,\n },\n {\n description: \"Records with a non-empty due-date inside a date range.\",\n command:\n 'zinkee --json records query contacts --where \"due-date is_not_empty\" --where \"due-date lte 2026-12-31T23:59:59Z\" --sort due-date:asc',\n raw: `{\n \"where\": [\n { \"field\": \"due-date\", \"op\": \"is_not_empty\" },\n { \"field\": \"due-date\", \"op\": \"lte\", \"value\": \"2026-12-31T23:59:59Z\" }\n ],\n \"sort\": [\n { \"field\": \"due-date\", \"direction\": \"ASC\" }\n ]\n}`,\n },\n {\n description: \"Records whose status is not equal to a value.\",\n command:\n 'zinkee --json records query contacts --where \"status neq 0\"',\n raw: `{\n \"where\": [\n { \"field\": \"status\", \"op\": \"neq\", \"value\": 0 }\n ]\n}`,\n },\n {\n description: \"Records with an amount greater than a threshold.\",\n command:\n 'zinkee --json records query contacts --where \"amount gt 1000\"',\n raw: `{\n \"where\": [\n { \"field\": \"amount\", \"op\": \"gt\", \"value\": 1000 }\n ]\n}`,\n },\n {\n description: \"Records with an amount less than a threshold.\",\n command:\n 'zinkee --json records query contacts --where \"amount lt 100\"',\n raw: `{\n \"where\": [\n { \"field\": \"amount\", \"op\": \"lt\", \"value\": 100 }\n ]\n}`,\n },\n {\n description: \"Records whose due-date is empty.\",\n command:\n 'zinkee --json records query contacts --where \"due-date is_empty\"',\n raw: `{\n \"where\": [\n { \"field\": \"due-date\", \"op\": \"is_empty\" }\n ]\n}`,\n },\n {\n description: \"Records whose contact-email is not empty.\",\n command:\n 'zinkee --json records query contacts --where \"contact-email is_not_empty\"',\n raw: `{\n \"where\": [\n { \"field\": \"contact-email\", \"op\": \"is_not_empty\" }\n ]\n}`,\n },\n ]),\n \"records create\": buildCommandExamples([\n {\n description: \"Minimal create using just two plain string fields.\",\n command:\n `zinkee --json records create contacts --set contact-name=\"Ada Lovelace\" --set contact-email=ada@example.com`,\n raw: `{\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\"\n }\n}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\"\n }\n}`,\n },\n {\n description:\n \"Create a record mixing text, option, number, date, reference and member fields. ReferenceField values must match the target's current targetDisplayField (read it from the target record before writing).\",\n command:\n `zinkee --json records create contacts --set contact-name=\"Grace Hopper\" --set contact-email=grace@example.com --set status=2 --set amount=1999.99 --set due-date=2026-06-01T09:00:00Z --set customer-ref=\"CUST-12\" --set owner=6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d`,\n raw: `{\n \"values\": {\n \"contact-name\": \"Grace Hopper\",\n \"contact-email\": \"grace@example.com\",\n \"status\": 2,\n \"amount\": 1999.99,\n \"due-date\": \"2026-06-01T09:00:00Z\",\n \"customer-ref\": \"CUST-12\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n ]),\n \"records update\": buildCommandExamples([\n {\n description: \"Set one field and unset another.\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --set contact-name=\"Ada Lovelace Updated\" --unset contact-email',\n raw: `{\n \"set\": {\n \"contact-name\": \"Ada Lovelace Updated\"\n },\n \"unset\": [\"contact-email\"]\n}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace Updated\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n {\n description: \"Patch multiple typed values at once.\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --set status=3 --set amount=2500.00 --set due-date=2026-07-01T09:00:00Z --set owner=6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d',\n raw: `{\n \"set\": {\n \"status\": 3,\n \"amount\": 2500.00,\n \"due-date\": \"2026-07-01T09:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n {\n description: \"Unset only (clear fields).\",\n command:\n 'zinkee --json records update contacts 550e8400-e29b-41d4-a716-446655440000 --unset contact-email --unset due-date',\n raw: `{\n \"unset\": [\"contact-email\", \"due-date\"]\n}`,\n },\n ]),\n \"comments create\": buildCommandExamples([\n {\n description: \"Plain text comment on a record (uses --text).\",\n command:\n `zinkee --json comments create contacts 550e8400-e29b-41d4-a716-446655440000 --text \"This record needs review.\"`,\n raw: `{\n \"content\": [\n {\n \"type\": \"TEXT\",\n \"value\": \"This record needs review.\"\n }\n ]\n}`,\n response: `{\n \"id\": \"cd8e3b2a-1f5c-4e9a-8b7d-0a2b3c4d5e6f\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"This record needs review.\" }\n ]\n}`,\n },\n {\n description:\n \"Comment with an inline member mention. Mentions only go through --raw today because --text is plain text.\",\n command:\n `zinkee --json comments create contacts 550e8400-e29b-41d4-a716-446655440000 --raw '{\"content\":[{\"type\":\"TEXT\",\"value\":\"Assigning to \"},{\"type\":\"MENTION\",\"value\":\"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\"},{\"type\":\"TEXT\",\"value\":\" for follow up.\"}]}'`,\n raw: `{\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"Assigning to \" },\n { \"type\": \"MENTION\", \"value\": \"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\" },\n { \"type\": \"TEXT\", \"value\": \" for follow up.\" }\n ]\n}`,\n },\n ]),\n \"files download\": buildCommandExamples([\n {\n description:\n \"Download a file to disk (the CLI writes the raw bytes to the --output path; the JSON mode only emits a success envelope).\",\n command: `zinkee --json files download ${SAMPLE_UUID} --output ./download.bin`,\n },\n ]),\n \"files upload\": buildCommandExamples([\n {\n description:\n \"Upload a local file. The CLI sends the multipart form and the backend returns the generated file id to reference from record FileField values.\",\n command: \"zinkee --json files upload ./report.pdf\",\n response: `{\n \"id\": \"d290f1ee-6c54-4b01-90e6-d701748f0851\"\n}`,\n },\n ]),\n \"files delete\": buildCommandExamples([\n {\n description:\n \"Delete a file from workspace storage. Records that still reference the file id keep the stale pointer until updated separately.\",\n command: `zinkee --json files delete ${SAMPLE_UUID}`,\n response: `{\n \"id\": \"d290f1ee-6c54-4b01-90e6-d701748f0851\",\n \"deleted\": true\n}`,\n },\n ]),\n \"navigation folders create\": buildCommandExamples([\n {\n description: \"Create a folder with a display order and custom properties.\",\n command:\n `zinkee --json navigation folders create --name Finance --order 20 --props '{\"color\":\"green\"}'`,\n raw: `{\n \"name\": \"Finance\",\n \"order\": 20,\n \"additionalProperties\": {\n \"color\": \"green\"\n }\n}`,\n response: `{\n \"folderId\": \"c5d6e7f8-9012-3456-789a-bcdef0123456\",\n \"name\": \"Finance\"\n}`,\n },\n {\n description: \"Minimal create with just a name.\",\n command: 'zinkee --json navigation folders create --name Archive',\n raw: `{\n \"name\": \"Archive\"\n}`,\n },\n {\n description: \"Create a folder with color and icon metadata.\",\n command:\n `zinkee --json navigation folders create --name Reports --order 5 --props '{\"color\":\"teal\",\"icon\":\"chart-line\"}'`,\n raw: `{\n \"name\": \"Reports\",\n \"order\": 5,\n \"additionalProperties\": {\n \"color\": \"teal\",\n \"icon\": \"chart-line\"\n }\n}`,\n },\n ]),\n \"navigation folders update\": buildCommandExamples([\n {\n description: \"Rename the folder, change its order, and rewrite its additionalProperties.\",\n command:\n `zinkee --json navigation folders update Finance --name \"Finance Ops\" --order 30 --props '{\"color\":\"teal\"}'`,\n raw: `{\n \"name\": \"Finance Ops\",\n \"order\": 30,\n \"additionalProperties\": {\n \"color\": \"teal\"\n }\n}`,\n response: `{\n \"folderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"name\": \"Finance Ops\"\n}`,\n },\n {\n description: \"Rename only.\",\n command: 'zinkee --json navigation folders update Finance --name \"Finance (legacy)\"',\n raw: `{\n \"name\": \"Finance (legacy)\"\n}`,\n },\n {\n description: \"Change only the display order.\",\n command: 'zinkee --json navigation folders update Finance --order 1',\n raw: `{\n \"order\": 1\n}`,\n },\n {\n description: \"Replace only additionalProperties.\",\n command:\n `zinkee --json navigation folders update Finance --props '{\"color\":\"red\",\"icon\":\"archive\"}'`,\n raw: `{\n \"additionalProperties\": {\n \"color\": \"red\",\n \"icon\": \"archive\"\n }\n}`,\n },\n ]),\n \"navigation resources move\": buildCommandExamples([\n {\n description:\n \"Move a schema into a navigation folder. Only schemas can be moved; the navigation menu holds databases.\",\n command:\n 'zinkee --json navigation resources move 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --to Sales',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\"\n}`,\n },\n {\n description: \"Move a schema back to the root folder (root is always UUID 00000000-0000-0000-0000-000000000000).\",\n command:\n 'zinkee --json navigation resources move 5223cbc8-8c6c-4694-93bc-dd176364df9b --to 00000000-0000-0000-0000-000000000000',\n raw: `{\n \"resourceId\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetFolderId\": \"00000000-0000-0000-0000-000000000000\"\n}`,\n },\n ]),\n \"teamspace folders create\": buildCommandExamples([\n {\n description: \"Create a teamspace folder with order and icon metadata.\",\n command:\n `zinkee --json teamspace folders create --name \"Customer Success\" --order 10 --props '{\"icon\":\"folder-users\"}'`,\n raw: `{\n \"name\": \"Customer Success\",\n \"order\": 10,\n \"additionalProperties\": {\n \"icon\": \"folder-users\"\n }\n}`,\n response: `{\n \"id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"name\": \"Customer Success\",\n \"order\": 10,\n \"isRoot\": false,\n \"resourceCount\": 0,\n \"resources\": [],\n \"additionalProperties\": {\n \"icon\": \"folder-users\"\n }\n}`,\n },\n {\n description: \"Minimal create.\",\n command: 'zinkee --json teamspace folders create --name Shared',\n raw: `{\n \"name\": \"Shared\"\n}`,\n },\n {\n description: \"Prominent folder with icon and color.\",\n command:\n `zinkee --json teamspace folders create --name Executive --order 1 --props '{\"icon\":\"crown\",\"color\":\"gold\"}'`,\n raw: `{\n \"name\": \"Executive\",\n \"order\": 1,\n \"additionalProperties\": {\n \"icon\": \"crown\",\n \"color\": \"gold\"\n }\n}`,\n },\n ]),\n \"teamspace folders update\": buildCommandExamples([\n {\n description: \"Rename, reorder and update properties in one call.\",\n command:\n `zinkee --json teamspace folders update \"Customer Success\" --name \"Shared KPIs\" --order 5 --props '{\"icon\":\"chart-bar\"}'`,\n raw: `{\n \"name\": \"Shared KPIs\",\n \"order\": 5,\n \"additionalProperties\": {\n \"icon\": \"chart-bar\"\n }\n}`,\n response: `{\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared KPIs\",\n \"order\": 5,\n \"isRoot\": false,\n \"resourceCount\": 1,\n \"resources\": [\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"type\": \"DISPLAY\"\n }\n ],\n \"additionalProperties\": {\n \"icon\": \"chart-bar\"\n }\n}`,\n },\n {\n description: \"Rename only.\",\n command:\n 'zinkee --json teamspace folders update \"Customer Success\" --name \"Shared Analytics\"',\n raw: `{\n \"name\": \"Shared Analytics\"\n}`,\n },\n {\n description: \"Reorder only.\",\n command: 'zinkee --json teamspace folders update \"Customer Success\" --order 2',\n raw: `{\n \"order\": 2\n}`,\n },\n {\n description: \"Update only the icon metadata.\",\n command:\n `zinkee --json teamspace folders update \"Customer Success\" --props '{\"icon\":\"chart-line\"}'`,\n raw: `{\n \"additionalProperties\": {\n \"icon\": \"chart-line\"\n }\n}`,\n },\n ]),\n \"teamspace resources publish\": buildCommandExamples([\n {\n description: \"Publish a schema by slug into a teamspace folder.\",\n command:\n 'zinkee --json teamspace resources publish customer-records --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"customer-records\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolder\": {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"isRoot\": false\n },\n \"previousFolder\": null\n}`,\n },\n {\n description: \"Publish a schema by UUID.\",\n command:\n 'zinkee --json teamspace resources publish 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n },\n {\n description: \"Publish a display.\",\n command:\n 'zinkee --json teamspace resources publish 0f6f062f-1478-4df2-96a1-c495d037d260 --to \"Shared Dashboards\"',\n raw: `{\n \"resourceId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"targetFolderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\"\n}`,\n },\n {\n description: \"Publish directly at the teamspace root (root folder UUID is always 00000000-0000-0000-0000-000000000000).\",\n command:\n 'zinkee --json teamspace resources publish customer-records --to 00000000-0000-0000-0000-000000000000',\n raw: `{\n \"resourceId\": \"customer-records\",\n \"targetFolderId\": \"00000000-0000-0000-0000-000000000000\"\n}`,\n },\n ]),\n \"teamspace resources unpublish\": buildCommandExamples([\n {\n description: \"Unpublish a schema by slug.\",\n command: 'zinkee --json teamspace resources unpublish customer-records',\n raw: `{\n \"resourceId\": \"customer-records\"\n}`,\n response: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"removedFromFolder\": {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"isRoot\": false\n }\n}`,\n },\n {\n description: \"Unpublish a schema by UUID.\",\n command:\n 'zinkee --json teamspace resources unpublish 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e',\n raw: `{\n \"resourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\"\n}`,\n },\n {\n description: \"Unpublish a display.\",\n command:\n 'zinkee --json teamspace resources unpublish 0f6f062f-1478-4df2-96a1-c495d037d260',\n raw: `{\n \"resourceId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n ]),\n \"displays create\": buildCommandExamples([\n {\n description:\n \"Create a freeform display with an initial widget layout. Freeform layouts travel through --freeform-layouts.\",\n command:\n `zinkee --json displays create --name \"Control Proyecto Freeform\" --template freeform --freeform-layouts '{\"lg\":[{\"i\":\"widget-1\",\"x\":0,\"y\":0,\"w\":6,\"h\":5}]}'`,\n raw: `{\n \"name\": \"Control Proyecto Freeform\",\n \"layout\": {\n \"template\": \"freeform\",\n \"freeformLayouts\": {\n \"lg\": [\n { \"i\": \"widget-1\", \"x\": 0, \"y\": 0, \"w\": 6, \"h\": 5 }\n ]\n }\n }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n {\n description: \"Create a tabbed display using the widget_row_tabs template.\",\n command:\n 'zinkee --json displays create --name \"Executive Revenue\" --template widget_row_tabs',\n raw: `{\n \"name\": \"Executive Revenue\",\n \"layout\": {\n \"template\": \"widget_row_tabs\"\n }\n}`,\n },\n {\n description: \"Create a grid display.\",\n command:\n 'zinkee --json displays create --name \"Customer Detail\" --template grid',\n raw: `{\n \"name\": \"Customer Detail\",\n \"layout\": {\n \"template\": \"grid\"\n }\n}`,\n },\n ]),\n \"displays tabs create\": buildCommandExamples([\n {\n description: \"Create a horizontal tab.\",\n command:\n 'zinkee --json displays tabs create 0f6f062f-1478-4df2-96a1-c495d037d260 --name Overview --orientation horizontal',\n raw: `{\n \"name\": \"Overview\",\n \"orientation\": \"horizontal\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-overview\"\n}`,\n },\n {\n description: \"Create a vertical tab.\",\n command:\n 'zinkee --json displays tabs create 0f6f062f-1478-4df2-96a1-c495d037d260 --name Details --orientation vertical',\n raw: `{\n \"name\": \"Details\",\n \"orientation\": \"vertical\"\n}`,\n },\n ]),\n \"displays tabs update\": buildCommandExamples([\n {\n description: \"Rename a tab.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --name \"Overview (renamed)\"',\n raw: `{\n \"name\": \"Overview (renamed)\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-main\"\n}`,\n },\n {\n description: \"Change orientation only.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --orientation vertical',\n raw: `{\n \"orientation\": \"vertical\"\n}`,\n },\n {\n description: \"Rename and reorient at once.\",\n command:\n 'zinkee --json displays tabs update 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main --name Details --orientation vertical',\n raw: `{\n \"name\": \"Details\",\n \"orientation\": \"vertical\"\n}`,\n },\n ]),\n \"displays variables create\": buildCommandExamples([\n {\n description:\n \"Create a single-select REFERENCE variable bound to a (schema, field) pair. schemaId and fieldId accept slugs or UUIDs.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type REFERENCE --name Customer --source-schema contacts --source-field contact-name --default \"\"',\n raw: `{\n \"type\": \"REFERENCE\",\n \"name\": \"Customer\",\n \"source\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"contact-name\"\n },\n \"defaultValue\": \"\",\n \"allowMultiple\": false,\n \"staticVariable\": false,\n \"filters\": []\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Create a multi-select REFERENCE variable with a filter. Complex filters go via --raw because --filter only accepts raw expressions.\",\n command:\n `zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --raw '{\"type\":\"REFERENCE\",\"name\":\"Active customers\",\"source\":{\"schemaId\":\"contacts\",\"fieldId\":\"contact-name\"},\"defaultValues\":[],\"allowMultiple\":true,\"staticVariable\":false,\"filters\":[{\"origin\":{\"schemaId\":\"contacts\",\"fieldId\":\"status\"},\"comparisonOperator\":\"ANY_OF\",\"values\":[\"1\",\"2\"]}]}'`,\n raw: `{\n \"type\": \"REFERENCE\",\n \"name\": \"Active customers\",\n \"source\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"contact-name\"\n },\n \"defaultValues\": [],\n \"allowMultiple\": true,\n \"staticVariable\": false,\n \"filters\": [\n {\n \"origin\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"status\"\n },\n \"comparisonOperator\": \"ANY_OF\",\n \"values\": [\"1\", \"2\"]\n }\n ]\n}`,\n },\n {\n description: \"Create a MEMBER variable with a default user id.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type MEMBER --name Owner --default 6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d',\n raw: `{\n \"type\": \"MEMBER\",\n \"name\": \"Owner\",\n \"defaultValue\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\",\n \"allowMultiple\": false,\n \"staticVariable\": false\n}`,\n },\n {\n description: \"Create a DATE variable using a dynamic period (thisMonth).\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Period --date-mode dynamic --date-dynamic-option thisMonth',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Period\",\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"thisMonth\"\n }\n}`,\n },\n {\n description: \"Create a DATE variable with a specific date.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Cutoff --date-mode specific --date-specific 2026-04-22',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Cutoff\",\n \"date\": {\n \"mode\": \"specific\",\n \"specificDate\": \"2026-04-22\"\n }\n}`,\n },\n {\n description: \"Create a DATE variable with a custom range.\",\n command:\n 'zinkee --json displays variables create 0f6f062f-1478-4df2-96a1-c495d037d260 --type DATE --name Quarter --date-mode range --date-range-start 2026-04-01 --date-range-end 2026-06-30',\n raw: `{\n \"type\": \"DATE\",\n \"name\": \"Quarter\",\n \"date\": {\n \"mode\": \"range\",\n \"rangeStart\": \"2026-04-01\",\n \"rangeEnd\": \"2026-06-30\"\n }\n}`,\n },\n ]),\n \"displays variables update\": buildCommandExamples([\n {\n description:\n \"Rename the variable and make it static (defaults must be cleared with a raw patch because the CLI has no --default-values [] shortcut).\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --raw '{\"name\":\"Proyecto principal\",\"staticVariable\":true,\"defaultValues\":[]}'`,\n raw: `{\n \"name\": \"Proyecto principal\",\n \"staticVariable\": true,\n \"defaultValues\": []\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description: \"Replace the reference filters of the variable.\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --raw '{\"filters\":[{\"origin\":{\"schemaId\":\"contacts\",\"fieldId\":\"status\"},\"comparisonOperator\":\"ANY_OF\",\"values\":[\"2\",\"3\"]}]}'`,\n raw: `{\n \"filters\": [\n {\n \"origin\": {\n \"schemaId\": \"contacts\",\n \"fieldId\": \"status\"\n },\n \"comparisonOperator\": \"ANY_OF\",\n \"values\": [\"2\", \"3\"]\n }\n ]\n}`,\n },\n {\n description: \"Switch a variable to multi-select.\",\n command:\n `zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111 --allow-multiple --raw '{\"defaultValues\":[]}'`,\n raw: `{\n \"allowMultiple\": true,\n \"defaultValues\": []\n}`,\n },\n {\n description: \"Change a DATE variable to use last12Months.\",\n command:\n 'zinkee --json displays variables update 0f6f062f-1478-4df2-96a1-c495d037d260 bbbbbbbb-2222-4222-a222-222222222222 --date-mode dynamic --date-dynamic-option last12Months',\n raw: `{\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"last12Months\"\n }\n}`,\n },\n ]),\n \"displays widgets create\": buildCommandExamples([\n {\n description:\n \"Create a TABLE widget (CLI normalises --type table to TABLE_OR_SUBTABLE).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type table --name Customers --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":8}' --field contact-name --field status --field amount --sort '{\"fieldId\":\"contact-name\",\"direction\":\"ASC\"}'`,\n raw: `{\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\"\n },\n \"query\": {\n \"sorts\": [\n { \"fieldId\": \"contact-name\", \"direction\": \"ASC\" }\n ]\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"]\n }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Create a DETAIL widget on a tab. The rich placement is easier via --raw.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --raw '{\"type\":\"DETAIL\",\"source\":{\"originResourceId\":\"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\"isOriginSubSchema\":false},\"placement\":{\"tabId\":\"tab-detail\",\"layout\":{\"x\":0,\"y\":0,\"w\":6,\"h\":10}},\"presentation\":{\"name\":\"Customer detail\"},\"behavior\":{\"readOnly\":true},\"view\":{\"fields\":[\"contact-name\",\"contact-email\",\"status\",\"amount\"]}}'`,\n raw: `{\n \"type\": \"DETAIL\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"tabId\": \"tab-detail\",\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 6, \"h\": 10 }\n },\n \"presentation\": { \"name\": \"Customer detail\" },\n \"behavior\": { \"readOnly\": true },\n \"view\": {\n \"fields\": [\"contact-name\", \"contact-email\", \"status\", \"amount\"]\n }\n}`,\n },\n {\n description: \"Create a KPI widget computing SUM(amount).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type KPI --name \"Total revenue\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":3,\"h\":3}' --calc SUM --calc-field amount --kpi-config '{\"format\":\"currency\",\"decimals\":2}'`,\n raw: `{\n \"type\": \"KPI\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 3, \"h\": 3 }\n },\n \"presentation\": { \"name\": \"Total revenue\" },\n \"kpi\": {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"config\": { \"format\": \"currency\", \"decimals\": 2 }\n }\n}`,\n },\n {\n description: \"Create a CHART widget with a daily time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by day\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type lines --x-axis-field due-date --x-axis-date-format DATE --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by day\" },\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"DATE\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a bars CHART widget with a monthly time-serie x-axis and two y-axis series.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by month\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type bars --x-axis-field due-date --x-axis-date-format MONTH_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --y-axis-serie '{\"typeCalc\":\"COUNT\",\"fieldCalc\":\"contact-name\",\"color\":\"#E57373\",\"axisType\":\"SECONDARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by month\" },\n \"chart\": {\n \"chartType\": \"bars\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"MONTH_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n },\n {\n \"typeCalc\": \"COUNT\",\n \"fieldCalc\": \"contact-name\",\n \"color\": \"#E57373\",\n \"axisType\": \"SECONDARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a bars CHART widget with a quarterly time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by quarter\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type bars --x-axis-field due-date --x-axis-date-format QUARTER_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by quarter\" },\n \"chart\": {\n \"chartType\": \"bars\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"QUARTER_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description: \"Create a CHART widget with a yearly time-serie x-axis.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type CHART --name \"Revenue by year\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":8,\"h\":6}' --chart-type lines --x-axis-field due-date --x-axis-date-format YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#4B9CD3\",\"axisType\":\"PRIMARY\"}' --legend '{\"position\":\"bottom\"}'`,\n raw: `{\n \"type\": \"CHART\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 8, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Revenue by year\" },\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#4B9CD3\",\n \"axisType\": \"PRIMARY\"\n }\n ],\n \"legend\": { \"position\": \"bottom\" }\n }\n}`,\n },\n {\n description:\n \"Create a TIMELINE widget via flags. The typed view state lives in view.viewAdditionalProperties.viewState; field references there must be UUIDs (slugs are only resolved in --field). cardConfig uses category1/category2/category4 (no category3). Use --view-state for UI scalars (granularity, sidebarWidth, show* ...).\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type TIMELINE --name \"Customer schedule\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":6}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --start-date-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --end-date-field e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012 --label-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --group-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --subgroup-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --progress-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-title-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-category1-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --card-category2-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --card-category4-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-description-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --view-state '{\"granularity\":\"month\",\"sidebarWidth\":300,\"showUngroupedEvents\":true,\"showUnsubgroupedEvents\":true}'`,\n raw: `{\n \"type\": \"TIMELINE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Customer schedule\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\"\n ],\n \"viewAdditionalProperties\": {\n \"viewState\": {\n \"granularity\": \"month\",\n \"sidebarWidth\": 300,\n \"showUngroupedEvents\": true,\n \"showUnsubgroupedEvents\": true,\n \"fieldMapping\": {\n \"startDateField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endDateField\": \"e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012\",\n \"labelField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"groupField\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"subgroupField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"progressField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"cardConfig\": {\n \"titleField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"category1Field\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"category2Field\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"category4Field\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"descriptionField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n }\n }\n }\n }\n}`,\n },\n {\n description:\n \"Create a KANBAN widget via flags. The typed view state lives in view.viewAdditionalProperties.viewState; field references there must be UUIDs (slugs are only resolved in --field). cardConfig uses category1/category2/category3 (no category4). --aggregation-method/--aggregation-field set the card aggregation; use --view-state for UI scalars.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type KANBAN --name \"Status board\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":8}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --column-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --swimlane-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-title-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --card-category1-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --card-category2-field d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90 --card-category3-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --card-description-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --aggregation-method sum --aggregation-field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --view-state '{\"hideEmptyColumns\":false,\"showNoValueColumn\":true,\"showNoValueSwimlane\":true}'`,\n raw: `{\n \"type\": \"KANBAN\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": { \"name\": \"Status board\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\"\n ],\n \"viewAdditionalProperties\": {\n \"viewState\": {\n \"hideEmptyColumns\": false,\n \"showNoValueColumn\": true,\n \"showNoValueSwimlane\": true,\n \"fieldMapping\": {\n \"columnField\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"swimlaneField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"cardConfig\": {\n \"titleField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"category1Field\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"category2Field\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"category3Field\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"descriptionField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"aggregationConfig\": {\n \"method\": \"sum\",\n \"fieldId\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\"\n }\n }\n }\n }\n }\n}`,\n },\n {\n description:\n \"Create a HIERARCHY widget via flags. Declare columns once (--hierarchy-label, repeatable --hierarchy-info <id:name>, --hierarchy-number <id:name:aggregation>), map the root level (the view's own table) with --hierarchy-root-* and add each child level as a JSON object with --hierarchy-child. label is required per level; info/number mappings are optional. Column ids (e.g. col_1779975207355_zfndknslw) are unique opaque identifiers you choose — not the column name — and are reused as columnId in every mapping. All field references must be UUIDs.\",\n command:\n `zinkee --json displays widgets create 0f6f062f-1478-4df2-96a1-c495d037d260 --type HIERARCHY --name \"Org tree\" --origin-resource 2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e --layout '{\"x\":0,\"y\":0,\"w\":12,\"h\":6}' --field c60b8526-5835-4c9f-aecd-9a16c7704a34 --field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --field c52efe3f-2825-4c60-a7e3-34dd4c1ce043 --hierarchy-label \"Name\" --hierarchy-info \"col_1779975207355_zfndknslw:Status\" --hierarchy-info \"col_1779975243018_qm4t7xb2pa:Description\" --hierarchy-number \"col_1779975261490_h8kd3nv9ws:Total amount:SUM\" --hierarchy-root-name \"Customers\" --hierarchy-root-label-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --hierarchy-root-info \"col_1779975207355_zfndknslw:a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\" --hierarchy-root-number \"col_1779975261490_h8kd3nv9ws:c52efe3f-2825-4c60-a7e3-34dd4c1ce043\" --hierarchy-child '{\"name\":\"Projects\",\"schemaId\":\"3ec9cdef-7e0a-4cdd-8019-8fb9281f5d6f\",\"childFieldId\":\"80deefae-af3d-4000-b322-bfe1594f8073\",\"labelFieldId\":\"50dbef0b-7e0a-4fdd-8019-8fb9281f5d70\",\"infoMappings\":[{\"columnId\":\"col_1779975243018_qm4t7xb2pa\",\"fieldId\":\"60dcef0c-8f1b-4eee-9120-9fc0392f6e71\"}],\"numberMappings\":[{\"columnId\":\"col_1779975261490_h8kd3nv9ws\",\"fieldId\":\"70ddef0d-9f2c-4fff-a221-afd0493f7f72\"}]}'`,\n raw: `{\n \"type\": \"HIERARCHY\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 6 }\n },\n \"presentation\": { \"name\": \"Org tree\" },\n \"view\": {\n \"fields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\"\n ],\n \"hierarchyConfig\": {\n \"columns\": {\n \"label\": \"Name\",\n \"infos\": [\n { \"id\": \"col_1779975207355_zfndknslw\", \"name\": \"Status\" },\n { \"id\": \"col_1779975243018_qm4t7xb2pa\", \"name\": \"Description\" }\n ],\n \"numbers\": [\n { \"id\": \"col_1779975261490_h8kd3nv9ws\", \"name\": \"Total amount\", \"aggregation\": \"SUM\" }\n ]\n },\n \"rootLevel\": {\n \"name\": \"Customers\",\n \"labelFieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"infoMappings\": [\n { \"columnId\": \"col_1779975207355_zfndknslw\", \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\" }\n ],\n \"numberMappings\": [\n { \"columnId\": \"col_1779975261490_h8kd3nv9ws\", \"fieldId\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\" }\n ]\n },\n \"childLevels\": [\n {\n \"name\": \"Projects\",\n \"schemaId\": \"3ec9cdef-7e0a-4cdd-8019-8fb9281f5d6f\",\n \"childFieldId\": \"80deefae-af3d-4000-b322-bfe1594f8073\",\n \"labelFieldId\": \"50dbef0b-7e0a-4fdd-8019-8fb9281f5d70\",\n \"infoMappings\": [\n { \"columnId\": \"col_1779975243018_qm4t7xb2pa\", \"fieldId\": \"60dcef0c-8f1b-4eee-9120-9fc0392f6e71\" }\n ],\n \"numberMappings\": [\n { \"columnId\": \"col_1779975261490_h8kd3nv9ws\", \"fieldId\": \"70ddef0d-9f2c-4fff-a221-afd0493f7f72\" }\n ]\n }\n ]\n }\n }\n}`,\n },\n ]),\n \"displays widgets update\": buildCommandExamples([\n {\n description: \"Move placement, update view columns, rename the widget and lock it.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --layout '{\"x\":1,\"y\":2,\"w\":8,\"h\":4}' --field contact-name --field status --field amount --name \"Revenue Updated\" --widget-read-only`,\n raw: `{\n \"placement\": {\n \"layout\": { \"x\": 1, \"y\": 2, \"w\": 8, \"h\": 4 }\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"]\n },\n \"presentation\": { \"name\": \"Revenue Updated\" },\n \"behavior\": { \"readOnly\": true }\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n {\n description:\n \"Add query filters with --filter. The CLI parses the expression and emits the structured comparisonOperator payload the API expects.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --filter \"status:eq:2\" --filter \"amount:gte:500\"`,\n raw: `{\n \"query\": {\n \"filters\": [\n {\n \"origin\": { \"fieldId\": \"status\" },\n \"comparisonOperator\": \"EQUAL\",\n \"values\": [\"2\"]\n },\n {\n \"origin\": { \"fieldId\": \"amount\" },\n \"comparisonOperator\": \"GREATER_OR_EQUAL\",\n \"values\": [\"500\"]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Fall back to --raw for comparators the parser does not cover yet (e.g. NOT_CONTAINS, RANGE).\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --raw '{\"query\":{\"filters\":[{\"origin\":{\"fieldId\":\"due-date\"},\"comparisonOperator\":\"RANGE\",\"values\":[\"2025-01-01\",\"2025-12-31\"]}]}}'`,\n raw: `{\n \"query\": {\n \"filters\": [\n {\n \"origin\": { \"fieldId\": \"due-date\" },\n \"comparisonOperator\": \"RANGE\",\n \"values\": [\"2025-01-01\", \"2025-12-31\"]\n }\n ]\n }\n}`,\n },\n {\n description: \"Hide the add, delete and filter buttons.\",\n command:\n 'zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --hide-add-button --hide-delete-button --hide-filter-button',\n raw: `{\n \"behavior\": {\n \"hideAddButton\": true,\n \"hideDeleteButton\": true,\n \"hideFilterButton\": true\n }\n}`,\n },\n {\n description: \"Update the KPI aggregation to AVG with one-decimal format.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 33333333-3333-4333-a333-333333333333 --calc AVG --calc-field amount --kpi-config '{\"format\":\"number\",\"decimals\":1}'`,\n raw: `{\n \"kpi\": {\n \"typeCalc\": \"AVG\",\n \"fieldCalc\": \"amount\",\n \"config\": { \"format\": \"number\", \"decimals\": 1 }\n }\n}`,\n },\n {\n description: \"Replace the chart series with quarterly lines.\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 22222222-2222-4222-a222-222222222222 --chart-type lines --x-axis-field due-date --x-axis-date-format QUARTER_YEAR --x-axis-time-series --y-axis-serie '{\"typeCalc\":\"SUM\",\"fieldCalc\":\"amount\",\"color\":\"#2E7D32\",\"axisType\":\"PRIMARY\"}'`,\n raw: `{\n \"chart\": {\n \"chartType\": \"lines\",\n \"xAxisFieldId\": \"due-date\",\n \"xAxisDateFormat\": \"QUARTER_YEAR\",\n \"xAxisAsTimeSerie\": true,\n \"yAxisSeries\": [\n {\n \"typeCalc\": \"SUM\",\n \"fieldCalc\": \"amount\",\n \"color\": \"#2E7D32\",\n \"axisType\": \"PRIMARY\"\n }\n ]\n }\n}`,\n },\n {\n description: \"Rewrite the widget bindings (requires --raw because the CLI has no --binding flag).\",\n command:\n `zinkee --json displays widgets update 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111 --raw '{\"bindings\":{\"variableMap\":{\"aaaaaaaa-1111-4111-a111-111111111111\":\"contact-name\",\"cccccccc-3333-4333-a333-333333333333\":\"owner\"}}}'`,\n raw: `{\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"contact-name\",\n \"cccccccc-3333-4333-a333-333333333333\": \"owner\"\n }\n }\n}`,\n },\n ]),\n \"displays navigation-targets create\": buildCommandExamples([\n {\n description: \"Create a navigation target with a visible label.\",\n command:\n 'zinkee --json displays navigation-targets create 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --target-display ef012345-6789-4abc-8def-0123456789ab --target-variable aaaaaaaa-1111-4111-a111-111111111111 --label \"Open customer\"',\n raw: `{\n \"sourceWidgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"label\": \"Open customer\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n {\n description: \"Create a navigation target without a label (uses the target display name).\",\n command:\n 'zinkee --json displays navigation-targets create 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 22222222-2222-4222-a222-222222222222 --target-display ef012345-6789-4abc-8def-0123456789ab --target-variable aaaaaaaa-1111-4111-a111-111111111111',\n raw: `{\n \"sourceWidgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays navigation-targets update\": buildCommandExamples([\n {\n description: \"Change just the label.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --label \"Go to customer\"',\n raw: `{\n \"label\": \"Go to customer\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n {\n description: \"Redirect the target to another display/variable pair.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --target-display 6b7c8d9e-0f12-3456-789a-bcdef0123456 --target-variable bbbbbbbb-2222-4222-a222-222222222222',\n raw: `{\n \"targetDisplayId\": \"6b7c8d9e-0f12-3456-789a-bcdef0123456\",\n \"targetVariableId\": \"bbbbbbbb-2222-4222-a222-222222222222\"\n}`,\n },\n {\n description: \"Change the source widget.\",\n command:\n 'zinkee --json displays navigation-targets update 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer --source-widget 44444444-4444-4444-a444-444444444444',\n raw: `{\n \"sourceWidgetId\": \"44444444-4444-4444-a444-444444444444\"\n}`,\n },\n ]),\n \"displays cross-widget-filter set\": buildCommandExamples([\n {\n description: \"Link one source widget/field to several target widgets through the same field.\",\n command:\n 'zinkee --json displays cross-widget-filter set 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --source-field c60b8526-5835-4c9f-aecd-9a16c7704a34 --target 22222222-2222-4222-a222-222222222222:c60b8526-5835-4c9f-aecd-9a16c7704a34 --target 33333333-3333-4333-a333-333333333333:c60b8526-5835-4c9f-aecd-9a16c7704a34',\n raw: `{\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"targets\": [\n {\n \"widgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n {\n \"widgetId\": \"33333333-3333-4333-a333-333333333333\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n ]\n}`,\n },\n {\n description: \"Filter one target widget by the status field of the source.\",\n command:\n 'zinkee --json displays cross-widget-filter set 0f6f062f-1478-4df2-96a1-c495d037d260 --source-widget 11111111-1111-4111-a111-111111111111 --source-field a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890 --target 66666666-6666-4666-a666-666666666666:a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890',\n raw: `{\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\"\n },\n \"targets\": [\n {\n \"widgetId\": \"66666666-6666-4666-a666-666666666666\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\"\n }\n ]\n}`,\n },\n ]),\n \"schemas list\": buildCommandExamples([\n {\n description: \"List schemas in the workspace with folder and field counts.\",\n command: \"zinkee --json schemas list\",\n response: `[\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Contacts\",\n \"slug\": \"contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": false,\n \"commentable\": false,\n \"fieldCount\": 11\n },\n {\n \"id\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"name\": \"Orders\",\n \"slug\": \"orders\",\n \"folder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n },\n \"auditable\": true,\n \"commentable\": true,\n \"fieldCount\": 7\n }\n]`,\n },\n ]),\n \"schemas get\": buildCommandExamples([\n {\n description: \"Get a schema with all its fields.\",\n command: \"zinkee --json schemas get contacts\",\n response: `{\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Contacts\",\n \"slug\": \"contacts\",\n \"folder\": {\n \"id\": \"7f4e7c25-d8b2-4c1a-9f3e-6a7b5c8d9e1f\",\n \"name\": \"Customers\",\n \"isRoot\": false\n },\n \"auditable\": true,\n \"commentable\": true,\n \"highlightedField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"fields\": [\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"NORMAL\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\",\n \"type\": \"TextField\",\n \"slug\": \"notes\",\n \"label\": \"Notes\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": null,\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"type\": \"NumberField\",\n \"slug\": \"amount\",\n \"label\": \"Amount\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"currency\",\n \"decimals\": 2,\n \"negativesInRed\": true,\n \"thousandsSeparator\": true,\n \"symbolEnabled\": true,\n \"symbolPosition\": \"before\",\n \"symbolValue\": \"€\"\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"2f3a4b5c-6d7e-8f90-1234-56789abcdef0\",\n \"type\": \"NumberField\",\n \"slug\": \"quantity\",\n \"label\": \"Quantity\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"number\",\n \"decimals\": 0,\n \"thousandsSeparator\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"3a4b5c6d-7e8f-9012-3456-789abcdef012\",\n \"type\": \"NumberField\",\n \"slug\": \"discount-rate\",\n \"label\": \"Discount Rate\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": \"0\",\n \"formatOptions\": {\n \"format\": \"percentage\",\n \"decimals\": 1,\n \"negativesInRed\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"type\": \"DateField\",\n \"slug\": \"due-date\",\n \"label\": \"Due Date\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"datetime\",\n \"dateFormat\": \"DD/MM/YYYY\",\n \"showTime\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"4b5c6d7e-8f90-1234-5678-9abcdef01234\",\n \"type\": \"DateField\",\n \"slug\": \"birth-date\",\n \"label\": \"Birth Date\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"formatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"YYYY-MM-DD\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n },\n {\n \"id\": \"5c6d7e8f-9012-3456-789a-bcdef0123456\",\n \"type\": \"OptionField\",\n \"slug\": \"stage\",\n \"label\": \"Stage\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"To Do\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"Doing\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"requireConfirmation\": false,\n \"lockAfterSelection\": false,\n \"allowReselect\": true\n }\n }\n }\n },\n {\n \"id\": \"3e9f8c12-4a5b-6c7d-8e9f-0a1b2c3d4e5f\",\n \"type\": \"FormulaField\",\n \"slug\": \"formula-total\",\n \"label\": \"Formula Total\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"formulaText\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043 * 1.21\",\n \"uiFormatKind\": \"number\",\n \"status\": \"ACTIVE\",\n \"defaultValue\": null,\n \"numberFormatOptions\": {\n \"format\": \"number\",\n \"decimals\": 2,\n \"thousandsSeparator\": true\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"6d7e8f90-1234-5678-9abc-def012345678\",\n \"type\": \"FormulaField\",\n \"slug\": \"formula-period\",\n \"label\": \"Formula Period\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"formulaText\": \"date_format(d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90, \\\"AAAA-MM\\\")\",\n \"uiFormatKind\": \"date\",\n \"status\": \"ACTIVE\",\n \"defaultValue\": null,\n \"dateFormatOptions\": {\n \"format\": \"date\",\n \"dateFormat\": \"DD/MM/YYYY\",\n \"showTime\": false\n },\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n \"type\": \"ReferenceField\",\n \"slug\": \"customer-ref\",\n \"label\": \"Customer\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"SET_NULL\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"7e8f9012-3456-789a-bcde-f01234567890\",\n \"type\": \"ReferenceField\",\n \"slug\": \"company-ref\",\n \"label\": \"Company\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"targetSchema\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"targetDisplayField\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"deleteBehavior\": \"RESTRICT\",\n \"defaultValue\": null,\n \"filterFields\": [],\n \"descriptionFields\": [],\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e\",\n \"type\": \"AutoIncrementalField\",\n \"slug\": \"sequence-code\",\n \"label\": \"Sequence Code\",\n \"required\": false,\n \"system\": true,\n \"config\": {\n \"segmentedByFieldId\": \"45c5da96-0dc2-4cc1-ba61-7660a9c6da32\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"8f901234-5678-9abc-def0-123456789012\",\n \"type\": \"AutoIncrementalField\",\n \"slug\": \"order-number\",\n \"label\": \"Order Number\",\n \"required\": false,\n \"system\": true,\n \"config\": {\n \"segmentedByFieldId\": null,\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"e5f6a7b8-c9d0-1e2f-3a4b-5c6d7e8f9012\",\n \"type\": \"FileField\",\n \"slug\": \"attachment\",\n \"label\": \"Attachment\",\n \"required\": false,\n \"system\": false,\n \"config\": {}\n },\n {\n \"id\": \"f6a7b8c9-d0e1-2f3a-4b5c-6d7e8f901234\",\n \"type\": \"ScheduleField\",\n \"slug\": \"recurrence\",\n \"label\": \"Recurrence\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"monthly\"\n }\n },\n {\n \"id\": \"9012abcd-ef01-2345-6789-abcdef012345\",\n \"type\": \"ScheduleField\",\n \"slug\": \"daily-recurrence\",\n \"label\": \"Daily Recurrence\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"referenceField\": \"c52efe3f-2825-4c60-a7e3-34dd4c1ce043\",\n \"beginningPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"endingPeriodField\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n \"frequency\": \"daily\"\n }\n },\n {\n \"id\": \"a7b8c9d0-e1f2-3a4b-5c6d-7e8f90123456\",\n \"type\": \"MemberField\",\n \"slug\": \"owner\",\n \"label\": \"Owner\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"defaultValue\": null,\n \"conditionalFormatting\": []\n }\n }\n ],\n \"uniqueFields\": [\n \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"1d2e3f4a-5b6c-7d8e-9f01-23456789abcd\"\n ]\n}`,\n },\n ]),\n \"schemas delete\": buildCommandExamples([\n {\n description: \"Delete a schema (also removes it from navigation folders).\",\n command: \"zinkee --json schemas delete contacts\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"deleted\": true\n}`,\n },\n ]),\n \"schemas fields list\": buildCommandExamples([\n {\n description: \"List the fields of a schema (fields are inlined in the schema resource).\",\n command: \"zinkee --json schemas fields list contacts\",\n response: `[\n {\n \"id\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\",\n \"type\": \"TextField\",\n \"slug\": \"contact-name\",\n \"label\": \"Customer Name\",\n \"required\": true,\n \"system\": false,\n \"config\": {\n \"textType\": \"LONG\",\n \"defaultValue\": \"Unknown\",\n \"conditionalFormatting\": []\n }\n },\n {\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": null\n }\n }\n]`,\n },\n ]),\n \"schemas fields get\": buildCommandExamples([\n {\n description: \"Get a schema field (returns the full typed field contract).\",\n command: \"zinkee --json schemas fields get contacts status\",\n response: `{\n \"id\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"type\": \"OptionField\",\n \"slug\": \"status\",\n \"label\": \"Status\",\n \"required\": false,\n \"system\": false,\n \"config\": {\n \"options\": [\n { \"id\": 1, \"name\": \"Open\", \"color\": \"default\" },\n { \"id\": 2, \"name\": \"In Progress\", \"color\": \"warning\" },\n { \"id\": 3, \"name\": \"Done\", \"color\": \"success\" }\n ],\n \"defaultValue\": 1,\n \"conditionalFormatting\": [],\n \"buttonConfig\": {\n \"displayMode\": \"button\",\n \"buttonBehavior\": {\n \"mode\": \"cycle\",\n \"cycleOrder\": [1, 2, 3],\n \"requireConfirmation\": false,\n \"lockAfterSelection\": false,\n \"useFixedLabel\": false,\n \"allowReselect\": true\n }\n }\n }\n}`,\n },\n ]),\n \"schemas fields delete\": buildCommandExamples([\n {\n description: \"Delete a schema field.\",\n command: \"zinkee --json schemas fields delete contacts status\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"slug\": \"status\"\n}`,\n },\n ]),\n \"records list\": buildCommandExamples([\n {\n description: \"List records with default pagination.\",\n command: \"zinkee --json records list contacts\",\n response: `{\n \"records\": [\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n },\n {\n \"recordId\": \"7c9a4b31-e85d-42f7-8b6a-123456789abc\",\n \"values\": {\n \"contact-name\": \"Alan Turing\",\n \"contact-email\": \"alan@example.com\",\n \"status\": 1,\n \"amount\": 890.00\n }\n }\n ],\n \"page\": {\n \"offset\": 0,\n \"limit\": 50,\n \"total\": 2,\n \"count\": 2,\n \"hasMore\": false\n }\n}`,\n },\n {\n description: \"Paginate further into the result set.\",\n command: \"zinkee --json records list contacts --limit 50 --offset 100\",\n },\n ]),\n \"records get\": buildCommandExamples([\n {\n description: \"Get one record by id (values are keyed by field slug).\",\n command: `zinkee --json records get contacts ${SAMPLE_UUID}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"values\": {\n \"contact-name\": \"Ada Lovelace\",\n \"contact-email\": \"ada@example.com\",\n \"status\": 2,\n \"amount\": 1250.50,\n \"due-date\": \"2026-05-15T12:00:00Z\",\n \"owner\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\"\n }\n}`,\n },\n ]),\n \"records delete\": buildCommandExamples([\n {\n description: \"Delete a record.\",\n command: `zinkee --json records delete contacts ${SAMPLE_UUID}`,\n response: `{\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"deleted\": true\n}`,\n },\n ]),\n \"records clear\": buildCommandExamples([\n {\n description:\n \"Delete every record from a schema's table. Heritage rules (CASCADE / SET NULL) propagate to child schemas asynchronously via the CDC pipeline.\",\n command: \"zinkee --json records clear contacts\",\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"cleared\": true\n}`,\n },\n ]),\n \"comments list\": buildCommandExamples([\n {\n description: \"List comments on a record (content is an array of TEXT/MENTION items).\",\n command: `zinkee --json comments list contacts ${SAMPLE_UUID}`,\n response: `[\n {\n \"id\": \"cd8e3b2a-1f5c-4e9a-8b7d-0a2b3c4d5e6f\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"This record needs review.\" }\n ]\n },\n {\n \"id\": \"a1b2c3d4-5e6f-7890-abcd-ef1234567890\",\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"createdAt\": \"2026-04-22T11:30:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"content\": [\n { \"type\": \"TEXT\", \"value\": \"Assigning to \" },\n { \"type\": \"MENTION\", \"value\": \"9f8e7d6c-5b4a-3c2d-1e0f-a1b2c3d4e5f6\" },\n { \"type\": \"TEXT\", \"value\": \" for follow up.\" }\n ]\n }\n]`,\n },\n ]),\n \"logs list\": buildCommandExamples([\n {\n description:\n \"List the change history for a record (CREATE entry plus UPDATE entries with before/after values per field).\",\n command: `zinkee --json logs list contacts ${SAMPLE_UUID}`,\n response: `[\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:00:00Z\",\n \"changeField\": \"\",\n \"change\": {\n \"beforeValue\": null,\n \"afterValue\": null,\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"CREATE\"\n }\n },\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:15:00Z\",\n \"changeField\": \"status\",\n \"change\": {\n \"beforeValue\": \"1\",\n \"afterValue\": \"2\",\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"UPDATE\"\n }\n },\n {\n \"recordId\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-04-22T10:20:00Z\",\n \"changeField\": \"amount\",\n \"change\": {\n \"beforeValue\": \"1000.00\",\n \"afterValue\": \"1250.50\",\n \"author\": \"developer@zinkee.com\",\n \"operation\": \"UPDATE\"\n }\n }\n]`,\n },\n ]),\n \"navigation folders list\": buildCommandExamples([\n {\n description: \"List navigation folders with embedded resources, sorted by order.\",\n command: \"zinkee --json navigation folders list\",\n response: `[\n {\n \"id\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"order\": 1,\n \"name\": \"Sales\",\n \"resources\": [\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer records\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": false,\n \"additionalProperties\": {}\n },\n {\n \"id\": \"5223cbc8-8c6c-4694-93bc-dd176364df9b\",\n \"name\": \"Orders\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": true,\n \"additionalProperties\": {}\n }\n ],\n \"additionalProperties\": {\n \"color\": \"blue\"\n }\n },\n {\n \"id\": \"b8c9d0e1-f2a3-4b5c-6d7e-8f9012345678\",\n \"order\": 2,\n \"name\": \"Operations\",\n \"resources\": [\n {\n \"id\": \"3f8a2c1b-9d4e-4a5b-8c6d-7e8f90123456\",\n \"name\": \"Shipments\",\n \"type\": \"SCHEMA\",\n \"isInSpace\": false,\n \"additionalProperties\": {}\n }\n ],\n \"additionalProperties\": {\n \"color\": \"purple\"\n }\n },\n {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"order\": 99,\n \"name\": \"root\",\n \"resources\": [],\n \"additionalProperties\": {}\n }\n]`,\n },\n ]),\n \"navigation folders get\": buildCommandExamples([\n {\n description: \"Get a navigation folder by exact name or UUID.\",\n command: 'zinkee --json navigation folders get Finance',\n },\n ]),\n \"navigation folders delete\": buildCommandExamples([\n {\n description: \"Delete a navigation folder by exact name or UUID.\",\n command: 'zinkee --json navigation folders delete Finance',\n response: `{\n \"folderId\": \"84a0fca4-37ef-4c83-a8ed-9ef67ad9324a\",\n \"name\": \"Finance Ops\"\n}`,\n },\n ]),\n \"teamspace folders list\": buildCommandExamples([\n {\n description: \"List teamspace folders.\",\n command: \"zinkee --json teamspace folders list\",\n },\n {\n description: \"List teamspace folders with their published resources.\",\n command: \"zinkee --json teamspace folders list --include-resources\",\n response: `[\n {\n \"id\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"name\": \"Shared Dashboards\",\n \"order\": 1,\n \"isRoot\": false,\n \"resourceCount\": 2,\n \"resources\": [\n {\n \"id\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"name\": \"Customer records\",\n \"type\": \"SCHEMA\"\n },\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"type\": \"DISPLAY\"\n }\n ],\n \"additionalProperties\": {}\n }\n]`,\n },\n ]),\n \"teamspace folders get\": buildCommandExamples([\n {\n description: \"Get a teamspace folder by exact name or UUID.\",\n command: 'zinkee --json teamspace folders get \"Shared Dashboards\"',\n },\n ]),\n \"teamspace folders delete\": buildCommandExamples([\n {\n description:\n \"Delete a teamspace folder. Its resources are moved to the returned target folder (root by default).\",\n command: 'zinkee --json teamspace folders delete \"Customer Success\"',\n response: `{\n \"folderId\": \"f45a251d-3ea0-4b41-bfe8-c0f44c8ad54a\",\n \"movedResourceCount\": 3,\n \"targetFolder\": {\n \"id\": \"00000000-0000-0000-0000-000000000000\",\n \"name\": \"root\",\n \"isRoot\": true\n }\n}`,\n },\n ]),\n \"files storage\": buildCommandExamples([\n {\n description: \"Get the storage quota and current usage (bytes).\",\n command: \"zinkee --json files storage\",\n response: `{\n \"maxSize\": 10737418240,\n \"usedSize\": 2147483648\n}`,\n },\n ]),\n \"displays list\": buildCommandExamples([\n {\n description: \"List displays in the workspace with variable and widget counts.\",\n command: \"zinkee --json displays list\",\n response: `[\n {\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"layoutTemplate\": \"widget_row_tabs\",\n \"variableCount\": 3,\n \"widgetCount\": 6\n },\n {\n \"id\": \"6b7c8d9e-0f12-3456-789a-bcdef0123456\",\n \"name\": \"Sales Pipeline\",\n \"layoutTemplate\": \"freeform\",\n \"variableCount\": 1,\n \"widgetCount\": 3\n },\n {\n \"id\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"name\": \"Customer Detail\",\n \"layoutTemplate\": \"grid\",\n \"variableCount\": 0,\n \"widgetCount\": 2\n }\n]`,\n },\n ]),\n \"displays get\": buildCommandExamples([\n {\n description:\n \"Get a display with its layout (tabs/freeformLayouts/slots), variables, widgets, cross-widget filter and navigation targets.\",\n command: \"zinkee --json displays get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n response: `{\n \"id\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"name\": \"Executive Revenue\",\n \"layout\": {\n \"template\": \"widget_row_tabs\",\n \"freeformLayouts\": null,\n \"slots\": null,\n \"tabs\": [\n {\n \"id\": \"tab-main\",\n \"name\": \"Overview\",\n \"orientation\": \"horizontal\",\n \"widgetIds\": [\n \"11111111-1111-4111-a111-111111111111\",\n \"22222222-2222-4222-a222-222222222222\",\n \"33333333-3333-4333-a333-333333333333\"\n ]\n },\n {\n \"id\": \"tab-detail\",\n \"name\": \"Detail\",\n \"orientation\": \"horizontal\",\n \"widgetIds\": [\n \"44444444-4444-4444-a444-444444444444\",\n \"55555555-5555-4555-a555-555555555555\",\n \"66666666-6666-4666-a666-666666666666\"\n ]\n }\n ]\n },\n \"variables\": [\n {\n \"id\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"type\": \"REFERENCE\",\n \"name\": \"Customer\",\n \"source\": {\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"defaultValue\": \"\",\n \"allowMultiple\": false,\n \"staticVariable\": false,\n \"filters\": []\n },\n {\n \"id\": \"bbbbbbbb-2222-4222-a222-222222222222\",\n \"type\": \"DATE\",\n \"name\": \"Period\",\n \"date\": {\n \"mode\": \"dynamic\",\n \"dynamicOption\": \"thisMonth\"\n }\n },\n {\n \"id\": \"cccccccc-3333-4333-a333-333333333333\",\n \"type\": \"MEMBER\",\n \"name\": \"Owner\",\n \"defaultValue\": \"6c8a3e0d-4e5f-4a1b-9c2d-3e4f5a6b7c8d\",\n \"allowMultiple\": false,\n \"staticVariable\": false\n }\n ],\n \"widgets\": [\n {\n \"id\": \"11111111-1111-4111-a111-111111111111\",\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\",\n \"description\": \"All customers\",\n \"icon\": \"users\",\n \"color\": \"blue\"\n },\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n },\n \"query\": {\n \"filters\": [],\n \"sorts\": [\n { \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\", \"direction\": \"ASC\" }\n ]\n },\n \"behavior\": {\n \"readOnly\": false,\n \"hideAddButton\": false,\n \"hideDeleteButton\": false\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"],\n \"columnSize\": { \"contact-name\": 240 }\n }\n }\n ],\n \"crossWidgetFilter\": {\n \"source\": {\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n },\n \"targets\": [\n {\n \"widgetId\": \"22222222-2222-4222-a222-222222222222\",\n \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n ]\n },\n \"navigationTargets\": [\n {\n \"id\": \"nav-target-customer\",\n \"sourceWidgetId\": \"11111111-1111-4111-a111-111111111111\",\n \"targetDisplayId\": \"ef012345-6789-4abc-8def-0123456789ab\",\n \"targetVariableId\": \"aaaaaaaa-1111-4111-a111-111111111111\",\n \"label\": \"Open customer\"\n }\n ]\n}`,\n },\n ]),\n \"displays update\": buildCommandExamples([\n {\n description: \"Rename a display (patch of top-level metadata only).\",\n command:\n 'zinkee --json displays update 0f6f062f-1478-4df2-96a1-c495d037d260 --name \"Pipeline overview (renamed)\"',\n raw: `{\n \"name\": \"Pipeline overview (renamed)\"\n}`,\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\"\n}`,\n },\n ]),\n \"displays delete\": buildCommandExamples([\n {\n description: \"Delete a display.\",\n command: \"zinkee --json displays delete 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays folders list\": buildCommandExamples([\n {\n description: \"List flat display folders (non-root folders plus the root bucket).\",\n command: \"zinkee --json displays folders list\",\n response: `[\n {\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 2\n },\n {\n \"id\": \"8b22282b-3db3-4dd7-87f7-b29365dcf3f6\",\n \"name\": null,\n \"isRoot\": true,\n \"displayCount\": 4\n }\n]`,\n },\n ]),\n \"displays folders create\": buildCommandExamples([\n {\n description: \"Create one flat display folder.\",\n command: 'zinkee --json displays folders create --name \"Executive Dashboards\"',\n raw: `{\n \"name\": \"Executive Dashboards\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 0\n}`,\n },\n ]),\n \"displays folders update\": buildCommandExamples([\n {\n description: \"Rename a display folder. The folder argument accepts a UUID or an exact name.\",\n command:\n 'zinkee --json displays folders update \"Executive Dashboards\" --name \"Executive Dashboards (2026)\"',\n raw: `{\n \"name\": \"Executive Dashboards (2026)\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards (2026)\",\n \"isRoot\": false,\n \"displayCount\": 2\n}`,\n },\n ]),\n \"displays folders delete\": buildCommandExamples([\n {\n description: \"Delete a non-root display folder. Its displays move back to the root folder.\",\n command: 'zinkee --json displays folders delete \"Executive Dashboards\"',\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false,\n \"displayCount\": 2\n}`,\n },\n ]),\n \"displays folders move\": buildCommandExamples([\n {\n description: \"Move one display into a target folder by exact folder name.\",\n command:\n 'zinkee --json displays folders move 0f6f062f-1478-4df2-96a1-c495d037d260 --to \"Executive Dashboards\"',\n raw: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"targetFolderId\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\"\n}`,\n response: `{\n \"id\": \"e7a1c3d2-5f4b-4a6c-9d8e-1f2a3b4c5d6e\",\n \"name\": \"Executive Dashboards\",\n \"isRoot\": false\n}`,\n },\n ]),\n \"displays layout get\": buildCommandExamples([\n {\n description: \"Get the layout block of a display (template + tabs/freeformLayouts/slots).\",\n command: \"zinkee --json displays layout get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays layout update\": buildCommandExamples([\n {\n description: \"Replace the freeform layout of a display.\",\n command:\n `zinkee --json displays layout update 0f6f062f-1478-4df2-96a1-c495d037d260 --template freeform --freeform-layouts '{\"lg\":[{\"i\":\"widget-1\",\"x\":0,\"y\":0,\"w\":6,\"h\":5}]}'`,\n },\n ]),\n \"displays tabs list\": buildCommandExamples([\n {\n description: \"List the tabs of a display (only meaningful when the layout template uses tabs).\",\n command: \"zinkee --json displays tabs list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays tabs delete\": buildCommandExamples([\n {\n description: \"Delete a tab by id.\",\n command: \"zinkee --json displays tabs delete 0f6f062f-1478-4df2-96a1-c495d037d260 tab-main\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"tabId\": \"tab-main\"\n}`,\n },\n ]),\n \"displays variables list\": buildCommandExamples([\n {\n description: \"List the variables of a display.\",\n command: \"zinkee --json displays variables list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays variables get\": buildCommandExamples([\n {\n description: \"Get one variable by id.\",\n command:\n \"zinkee --json displays variables get 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111\",\n },\n ]),\n \"displays variables delete\": buildCommandExamples([\n {\n description: \"Delete a variable.\",\n command:\n \"zinkee --json displays variables delete 0f6f062f-1478-4df2-96a1-c495d037d260 aaaaaaaa-1111-4111-a111-111111111111\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"variableId\": \"aaaaaaaa-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays widgets list\": buildCommandExamples([\n {\n description: \"List the widgets of a display.\",\n command: \"zinkee --json displays widgets list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays widgets get\": buildCommandExamples([\n {\n description: \"Get one widget (returns the canonical typed widget contract).\",\n command:\n \"zinkee --json displays widgets get 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111\",\n response: `{\n \"id\": \"11111111-1111-4111-a111-111111111111\",\n \"type\": \"TABLE_OR_SUBTABLE\",\n \"source\": {\n \"originResourceId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"isOriginSubSchema\": false\n },\n \"placement\": {\n \"layout\": { \"x\": 0, \"y\": 0, \"w\": 12, \"h\": 8 }\n },\n \"presentation\": {\n \"name\": \"Customers\",\n \"description\": \"All customers\",\n \"icon\": \"users\",\n \"color\": \"blue\"\n },\n \"bindings\": {\n \"variableMap\": {\n \"aaaaaaaa-1111-4111-a111-111111111111\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\"\n }\n },\n \"query\": {\n \"filters\": [],\n \"sorts\": [\n { \"fieldId\": \"c60b8526-5835-4c9f-aecd-9a16c7704a34\", \"direction\": \"ASC\" }\n ]\n },\n \"behavior\": {\n \"readOnly\": false,\n \"hideAddButton\": false,\n \"hideDeleteButton\": false\n },\n \"view\": {\n \"fields\": [\"contact-name\", \"status\", \"amount\"],\n \"columnSize\": { \"contact-name\": 240 }\n }\n}`,\n },\n ]),\n \"displays widgets delete\": buildCommandExamples([\n {\n description: \"Delete a widget.\",\n command:\n \"zinkee --json displays widgets delete 0f6f062f-1478-4df2-96a1-c495d037d260 11111111-1111-4111-a111-111111111111\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"widgetId\": \"11111111-1111-4111-a111-111111111111\"\n}`,\n },\n ]),\n \"displays navigation-targets list\": buildCommandExamples([\n {\n description: \"List navigation targets for a display.\",\n command: \"zinkee --json displays navigation-targets list 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays navigation-targets delete\": buildCommandExamples([\n {\n description: \"Delete a navigation target.\",\n command:\n \"zinkee --json displays navigation-targets delete 0f6f062f-1478-4df2-96a1-c495d037d260 nav-target-customer\",\n response: `{\n \"displayId\": \"0f6f062f-1478-4df2-96a1-c495d037d260\",\n \"navigationTargetId\": \"nav-target-customer\"\n}`,\n },\n ]),\n \"displays cross-widget-filter get\": buildCommandExamples([\n {\n description: \"Get the cross-widget filter of a display (can be null if none is set).\",\n command: \"zinkee --json displays cross-widget-filter get 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"displays cross-widget-filter delete\": buildCommandExamples([\n {\n description: \"Delete the cross-widget filter of a display.\",\n command:\n \"zinkee --json displays cross-widget-filter delete 0f6f062f-1478-4df2-96a1-c495d037d260\",\n },\n ]),\n \"automations list\": buildCommandExamples([\n {\n description: \"List automations with summaries.\",\n command: \"zinkee --json automations list\",\n response: `[\n {\n \"id\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"name\": \"Codex Trigger Demo 1774278580\",\n \"description\": \"Demo compleja no-webhook para revisar en frontend.\",\n \"status\": \"active\",\n \"folder\": {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n },\n \"triggerType\": \"record_changed\",\n \"actionTypes\": [\"create_record\", \"http_request\", \"execute_plugin\", \"send_message\"]\n }\n]`,\n },\n {\n description: \"Filter automations by folder, status, and trigger type.\",\n command:\n 'zinkee --json automations list --folder \"Codex Frontend Demo\" --status active --trigger-type record_changed',\n },\n ]),\n \"automations get\": buildCommandExamples([\n {\n description:\n \"Get the full automation document, including trigger, actions and flow.\",\n command: \"zinkee --json automations get automation-1\",\n response: `{\n \"id\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"name\": \"Codex Trigger Demo 1774278580\",\n \"description\": \"Demo compleja no-webhook para revisar en frontend.\",\n \"status\": \"active\",\n \"folder\": {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n },\n \"trigger\": {\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldIds\": [\"4dd04e57-2a01-4c49-8728-9cb288bffb8d\"],\n \"conditions\": [\n {\n \"field\": \"4dd04e57-2a01-4c49-8728-9cb288bffb8d\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n },\n \"actions\": [\n {\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n },\n {\n \"id\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"type\": \"http_request\",\n \"name\": \"Notify ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\"X-Demo\": \"codex\"},\n \"body\": \"{\\\\\"event\\\\\":\\\\\"order.status.changed\\\\\"}\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"variables\": {},\n \"authMode\": \"STORED\",\n \"connectionId\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\"\n }\n },\n {\n \"id\": \"dae13307-057f-4c39-817c-4d2dd5898421\",\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\n \"mode\": \"safe\"\n }\n }\n }\n ],\n \"flow\": {\n \"entryActionIds\": [\"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\"],\n \"transitions\": [\n {\n \"fromActionId\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"toActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\"\n },\n {\n \"fromActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"toActionId\": \"dae13307-057f-4c39-817c-4d2dd5898421\"\n }\n ]\n }\n}`,\n },\n ]),\n \"automations delete\": buildCommandExamples([\n {\n description: \"Delete an automation. The response mirrors the mutation shape.\",\n command: \"zinkee --json automations delete automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations activate\": buildCommandExamples([\n {\n description: \"Activate an automation (transitions it to status=active).\",\n command: \"zinkee --json automations activate automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations deactivate\": buildCommandExamples([\n {\n description: \"Deactivate an automation (transitions it to status=inactive).\",\n command: \"zinkee --json automations deactivate automation-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations folders list\": buildCommandExamples([\n {\n description: \"List flat automation folders (non-root plus the root bucket).\",\n command: \"zinkee --json automations folders list\",\n response: `[\n {\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 2\n },\n {\n \"id\": \"8b22282b-3db3-4dd7-87f7-b29365dcf3f6\",\n \"name\": null,\n \"isRoot\": true,\n \"automationCount\": 3\n }\n]`,\n },\n ]),\n \"automations folders delete\": buildCommandExamples([\n {\n description: \"Delete a non-root automation folder by exact name.\",\n command: 'zinkee --json automations folders delete \"Codex Frontend Demo\"',\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 0\n}`,\n },\n ]),\n \"automations trigger get\": buildCommandExamples([\n {\n description:\n \"Get the trigger subresource. Response shape depends on trigger type; here the scheduled variant.\",\n command: \"zinkee --json automations trigger get automation-1\",\n response: `{\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n}`,\n },\n ]),\n \"automations webhook get\": buildCommandExamples([\n {\n description:\n \"Get the webhook endpoint companion resource (only exists when the trigger is a webhook).\",\n command: \"zinkee --json automations webhook get automation-1\",\n response: `{\n \"endpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"endpointUrl\": \"https://hooks.zinkee.com/webhooks/b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n },\n ]),\n \"automations webhook delete\": buildCommandExamples([\n {\n description: \"Delete the webhook endpoint companion resource (returns no body).\",\n command: \"zinkee --json automations webhook delete automation-1\",\n },\n ]),\n \"automations actions list\": buildCommandExamples([\n {\n description: \"List the ordered actions of an automation.\",\n command: \"zinkee --json automations actions list automation-1\",\n response: `[\n {\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n },\n {\n \"id\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"type\": \"http_request\",\n \"name\": \"Notify ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\"X-Demo\": \"codex\"},\n \"body\": \"{\\\\\"event\\\\\":\\\\\"order.status.changed\\\\\"}\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"variables\": {},\n \"authMode\": \"STORED\",\n \"connectionId\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\"\n }\n },\n {\n \"id\": \"dae13307-057f-4c39-817c-4d2dd5898421\",\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\"mode\": \"safe\"}\n }\n }\n]`,\n },\n ]),\n \"automations actions delete\": buildCommandExamples([\n {\n description: \"Delete one action from an automation.\",\n command: \"zinkee --json automations actions delete automation-1 action-1\",\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n ]),\n \"automations flow get\": buildCommandExamples([\n {\n description: \"Get the flow subresource (entry actions and transitions).\",\n command: \"zinkee --json automations flow get automation-1\",\n response: `{\n \"entryActionIds\": [\"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\"],\n \"transitions\": [\n {\n \"fromActionId\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"toActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\"\n },\n {\n \"fromActionId\": \"784d0971-bd8f-4b05-87eb-3392d1570273\",\n \"toActionId\": \"dae13307-057f-4c39-817c-4d2dd5898421\"\n }\n ]\n}`,\n },\n ]),\n \"automations plugins list\": buildCommandExamples([\n {\n description: \"List active workspace plugins available for execute_plugin actions.\",\n command: \"zinkee --json automations plugins list\",\n response: `[\n {\n \"id\": \"demo-plugin\",\n \"name\": \"Demo Plugin\",\n \"active\": true,\n \"description\": \"Example plugin for automations\",\n \"properties\": {\n \"version\": \"1.0\"\n }\n }\n]`,\n },\n ]),\n \"automations plugins get\": buildCommandExamples([\n {\n description: \"Get one plugin by id.\",\n command: \"zinkee --json automations plugins get demo-plugin\",\n response: `{\n \"id\": \"demo-plugin\",\n \"name\": \"Demo Plugin\",\n \"active\": true,\n \"description\": \"Example plugin for automations\",\n \"properties\": {\n \"version\": \"1.0\"\n }\n}`,\n },\n ]),\n \"automations connections list\": buildCommandExamples([\n {\n description: \"List stored workspace connections (secrets are never returned).\",\n command: \"zinkee --json automations connections list\",\n response: `[\n {\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n }\n }\n]`,\n },\n ]),\n \"automations connections get\": buildCommandExamples([\n {\n description: \"Get one stored connection by id.\",\n command: \"zinkee --json automations connections get connection-1\",\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T09:00:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations connections delete\": buildCommandExamples([\n {\n description: \"Delete one stored connection (returns no body).\",\n command: \"zinkee --json automations connections delete connection-1\",\n },\n ]),\n \"automations create\": buildCommandExamples([\n {\n description:\n \"Create a scheduled automation with description and target folder. Safe first example because it does not depend on workspace schemas.\",\n command:\n 'zinkee --json automations create --name \"Nightly invoice sync\" --description \"Runs every Monday morning\" --folder cdfc14e3-3169-4ffb-8d9b-b11858a9240f --trigger-type scheduled --cron \"0 15 10 * * 1\"',\n raw: `{\n \"name\": \"Nightly invoice sync\",\n \"description\": \"Runs every Monday morning\",\n \"folderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"trigger\": {\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n }\n}`,\n response: `{\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"webhookEndpoint\": null\n}`,\n },\n {\n description:\n \"Create a record-created automation with an 'is not empty' condition. Replace 'leads' and 'status' with real schema/field slugs or UUIDs.\",\n command:\n `zinkee --json automations create --name \"Lead welcome\" --trigger-type record_created --trigger-schema leads --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"name\": \"Lead welcome\",\n \"trigger\": {\n \"type\": \"record_created\",\n \"config\": {\n \"schemaId\": \"leads\",\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n }\n}`,\n },\n {\n description:\n \"Create a record-changed automation watching a single field, with an 'is not empty' condition. Replace 'orders' and 'status' with values from your workspace.\",\n command:\n `zinkee --json automations create --name \"Order status sync\" --trigger-type record_changed --trigger-schema orders --trigger-field status --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"name\": \"Order status sync\",\n \"trigger\": {\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"fieldIds\": [\"status\"],\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n }\n}`,\n },\n ]),\n \"automations update\": buildCommandExamples([\n {\n description:\n \"Update automation description and move it to a folder. Supported patch paths: name, description, folderId.\",\n command:\n 'zinkee --json automations update automation-1 --description \"Updated by an agent\" --folder cdfc14e3-3169-4ffb-8d9b-b11858a9240f',\n raw: `{\n \"set\": {\n \"description\": \"Updated by an agent\",\n \"folderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\"\n }\n}`,\n },\n {\n description:\n \"Clear the folder assignment by combining an explicit unset through the raw payload.\",\n command:\n 'zinkee --json automations update automation-1 --raw \\'{\"unset\":[\"folderId\"]}\\'',\n raw: `{\n \"unset\": [\"folderId\"]\n}`,\n },\n ]),\n \"automations trigger set\": buildCommandExamples([\n {\n description: \"Replace the trigger with a scheduled (cron) trigger.\",\n command:\n 'zinkee --json automations trigger set automation-1 --trigger-type scheduled --cron \"0 15 10 * * 1\"',\n raw: `{\n \"type\": \"scheduled\",\n \"config\": {\n \"cronExpression\": \"0 15 10 * * 1\"\n }\n}`,\n },\n {\n description:\n \"Replace the trigger with a record-created trigger plus an 'is not empty' condition. Agents should provide at least one meaningful condition.\",\n command:\n `zinkee --json automations trigger set automation-1 --trigger-type record_created --trigger-schema orders --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"type\": \"record_created\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Replace the trigger with a record-changed trigger watching one field, with an 'is not empty' condition on that field.\",\n command:\n `zinkee --json automations trigger set automation-1 --trigger-type record_changed --trigger-schema orders --trigger-field status --condition-json '{\"field\":\"status\",\"comparator\":\"ine\",\"values\":[{\"rawValue\":\"\",\"source\":null}]}'`,\n raw: `{\n \"type\": \"record_changed\",\n \"config\": {\n \"schemaId\": \"orders\",\n \"fieldIds\": [\"status\"],\n \"conditions\": [\n {\n \"field\": \"status\",\n \"comparator\": \"ine\",\n \"values\": [{\"rawValue\": \"\", \"source\": null}]\n }\n ]\n }\n}`,\n },\n {\n description: \"Replace the trigger with a webhook trigger that reuses an existing webhook endpoint id.\",\n command:\n \"zinkee --json automations trigger set automation-1 --trigger-type webhook --webhook-endpoint-id b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n raw: `{\n \"type\": \"webhook\",\n \"config\": {\n \"webhookEndpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\"\n }\n}`,\n },\n ]),\n \"automations actions add\": buildCommandExamples([\n {\n description:\n \"Add a create-record action with two literal field mappings. Populate visible fieldMapping entries so the frontend form is complete.\",\n command:\n 'zinkee --json automations actions add automation-1 --type create_record --name \"Create follow-up order\" --target-schema followups --map status=pending --map description=\"Created by automation\"',\n raw: `{\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"pending\",\n \"source\": null\n },\n \"description\": {\n \"rawValue\": \"Created by automation\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Add an update-record action that targets the trigger record. Pair --use-trigger-record with --map to rewrite fields on the record that fired the automation.\",\n command:\n 'zinkee --json automations actions add automation-1 --type update_record --name \"Mark order as processed\" --target-schema orders --use-trigger-record --map status=processed',\n raw: `{\n \"type\": \"update_record\",\n \"name\": \"Mark order as processed\",\n \"config\": {\n \"targetSchemaId\": \"orders\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"processed\",\n \"source\": null\n }\n },\n \"useTriggerRecord\": true\n }\n}`,\n },\n {\n description: \"Add a search-records action scoped to a target schema.\",\n command:\n 'zinkee --json automations actions add automation-1 --type search_records --name \"Find related invoices\" --target-schema orders',\n raw: `{\n \"type\": \"search_records\",\n \"name\": \"Find related invoices\",\n \"config\": {\n \"targetSchemaId\": \"orders\"\n }\n}`,\n },\n {\n description:\n \"Add a search-records action whose condition pulls its value from the trigger payload using --condition-json.\",\n command:\n `zinkee --json automations actions add automation-1 --type search_records --name \"Find duplicates\" --target-schema followups --condition-json '{\"field\":\"email\",\"comparator\":\"eq\",\"values\":[{\"rawValue\":null,\"source\":{\"type\":\"TRIGGER\",\"id\":\"f1e1d000-0000-0000-0000-000000000005\"}}]}'`,\n raw: `{\n \"type\": \"search_records\",\n \"name\": \"Find duplicates\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"conditions\": [\n {\n \"field\": \"email\",\n \"comparator\": \"eq\",\n \"values\": [\n {\n \"rawValue\": null,\n \"source\": {\n \"type\": \"TRIGGER\",\n \"id\": \"f1e1d000-0000-0000-0000-000000000005\"\n }\n }\n ]\n }\n ]\n }\n}`,\n },\n {\n description:\n \"Add an HTTP request action using a stored workspace connection for authentication.\",\n command:\n 'zinkee --json automations actions add automation-1 --type http_request --name \"Notify external ERP\" --method POST --url https://example.com/integrations/order-status --header X-Demo=codex --content-type application/json --timeout-ms 5000 --auth-mode STORED --connection connection-1',\n raw: `{\n \"type\": \"http_request\",\n \"name\": \"Notify external ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"headers\": {\n \"X-Demo\": \"codex\"\n },\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"authMode\": \"STORED\",\n \"connectionId\": \"connection-1\"\n }\n}`,\n },\n {\n description:\n \"Add an execute-plugin action with structured plugin arguments. Replace 'demo-plugin' with an active id from 'zinkee --json automations plugins list'.\",\n command:\n `zinkee --json automations actions add automation-1 --type execute_plugin --name \"Run billing plugin\" --plugin demo-plugin --arg mode=safe --arg-json steps='[\"one\",\"two\"]'`,\n raw: `{\n \"type\": \"execute_plugin\",\n \"name\": \"Run billing plugin\",\n \"config\": {\n \"pluginId\": \"demo-plugin\",\n \"pluginArgs\": {\n \"mode\": \"safe\",\n \"steps\": [\"one\", \"two\"]\n }\n }\n}`,\n },\n {\n description:\n \"Add a send-message action. --to maps to fieldMapping.recipients and --message maps to fieldMapping.body. Values are wrapped in {rawValue, source} like every other automation field mapping; use --map / --map-json for extra keys.\",\n command:\n `zinkee --json automations actions add automation-1 --type send_message --name \"Notify customer\" --to customer@example.com --subject \"Your order status has changed\" --message \"Hello, your order is now processed.\"`,\n raw: `{\n \"type\": \"send_message\",\n \"name\": \"Notify customer\",\n \"config\": {\n \"fieldMapping\": {\n \"recipients\": {\n \"rawValue\": \"customer@example.com\",\n \"source\": null\n },\n \"subject\": {\n \"rawValue\": \"Your order status has changed\",\n \"source\": null\n },\n \"body\": {\n \"rawValue\": \"Hello, your order is now processed.\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Add a generate-document action. The renderer reads the template, writes the file, and stores its id in the target FileField of the target schema.\",\n command:\n 'zinkee --json automations actions add automation-1 --type generate_document --name \"Generate invoice PDF\" --document-template 6c08673e-f8a6-44d2-8c91-d09eca911f8f --target-schema 68d2c7be-4392-42de-b5ae-625ad79cfc3c --target-file-field c8edbde8-a361-4e9f-a39a-2e88971f21a7',\n raw: `{\n \"type\": \"generate_document\",\n \"name\": \"Generate invoice PDF\",\n \"config\": {\n \"documentTemplateId\": \"6c08673e-f8a6-44d2-8c91-d09eca911f8f\",\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"targetFileFieldId\": \"c8edbde8-a361-4e9f-a39a-2e88971f21a7\"\n }\n}`,\n },\n ]),\n \"automations actions update\": buildCommandExamples([\n {\n description:\n \"Replace an update-record action so it targets the trigger record. Conditions are stripped automatically when --use-trigger-record is provided.\",\n command:\n 'zinkee --json automations actions update automation-1 action-1 --type update_record --name \"Update trigger record\" --target-schema followups --map status=ready --use-trigger-record',\n raw: `{\n \"type\": \"update_record\",\n \"name\": \"Update trigger record\",\n \"config\": {\n \"targetSchemaId\": \"followups\",\n \"fieldMapping\": {\n \"status\": {\n \"rawValue\": \"ready\",\n \"source\": null\n }\n },\n \"useTriggerRecord\": true\n }\n}`,\n response: `{\n \"id\": \"a657c49a-8ca1-4ec1-af86-d0dac4fc49b2\",\n \"type\": \"create_record\",\n \"name\": \"Create follow-up order\",\n \"config\": {\n \"targetSchemaId\": \"68d2c7be-4392-42de-b5ae-625ad79cfc3c\",\n \"fieldMapping\": {\n \"34250412-f016-44c0-9f88-37dd1ddb4b13\": {\n \"rawValue\": \"Updated by an agent\",\n \"source\": null\n }\n }\n }\n}`,\n },\n {\n description:\n \"Replace an HTTP request action, keeping it authenticated through a stored connection.\",\n command:\n 'zinkee --json automations actions update automation-1 action-1 --type http_request --name \"Notify external ERP\" --method POST --url https://example.com/integrations/order-status --content-type application/json --timeout-ms 5000 --auth-mode STORED --connection connection-1',\n raw: `{\n \"type\": \"http_request\",\n \"name\": \"Notify external ERP\",\n \"config\": {\n \"method\": \"POST\",\n \"url\": \"https://example.com/integrations/order-status\",\n \"contentType\": \"application/json\",\n \"timeoutMs\": 5000,\n \"authMode\": \"STORED\",\n \"connectionId\": \"connection-1\"\n }\n}`,\n },\n {\n description:\n \"Replace a send-message action. --to maps to fieldMapping.recipients and --message maps to fieldMapping.body; values are wrapped in {rawValue, source}.\",\n command:\n `zinkee --json automations actions update automation-1 action-1 --type send_message --name \"Notify customer\" --to customer@example.com --subject \"Your order status has changed\" --message \"Hello, your order is now processed.\"`,\n raw: `{\n \"type\": \"send_message\",\n \"name\": \"Notify customer\",\n \"config\": {\n \"fieldMapping\": {\n \"recipients\": {\n \"rawValue\": \"customer@example.com\",\n \"source\": null\n },\n \"subject\": {\n \"rawValue\": \"Your order status has changed\",\n \"source\": null\n },\n \"body\": {\n \"rawValue\": \"Hello, your order is now processed.\",\n \"source\": null\n }\n }\n }\n}`,\n },\n ]),\n \"automations flow set\": buildCommandExamples([\n {\n description:\n \"Set one entry action and chain two transitions (action-1 → action-2 → action-3).\",\n command:\n \"zinkee --json automations flow set automation-1 --entry action-1 --transition action-1:action-2 --transition action-2:action-3\",\n raw: `{\n \"entryActionIds\": [\"action-1\"],\n \"transitions\": [\n {\n \"fromActionId\": \"action-1\",\n \"toActionId\": \"action-2\"\n },\n {\n \"fromActionId\": \"action-2\",\n \"toActionId\": \"action-3\"\n }\n ]\n}`,\n },\n ]),\n \"automations webhook set\": buildCommandExamples([\n {\n description:\n \"Create or update the webhook endpoint companion resource with idempotency key, event type filter, and a field mapping. This config is separate from the webhook trigger itself.\",\n command:\n `zinkee --json automations webhook set automation-1 --idempotency-key-path \"$.id\" --event-type-path \"$.type\" --allowed-event-type frontend.demo.created --field-mapping '{\"variable\":\"external_id\",\"jsonPath\":\"$.data.id\"}' --active`,\n raw: `{\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n response: `{\n \"endpointId\": \"b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"automationId\": \"d2df2478-2513-4ecb-a2aa-2cea8c3d614a\",\n \"endpointUrl\": \"https://hooks.zinkee.com/webhooks/b3cb4283-97ab-4d94-9e6f-82d0ee5cee24\",\n \"active\": true,\n \"idempotencyKeyJsonPath\": \"$.id\",\n \"eventTypeJsonPath\": \"$.type\",\n \"allowedEventTypes\": [\"frontend.demo.created\"],\n \"fieldMappings\": [\n {\n \"variable\": \"external_id\",\n \"jsonPath\": \"$.data.id\"\n }\n ]\n}`,\n },\n ]),\n \"automations connections create\": buildCommandExamples([\n {\n description:\n \"Create a stored workspace connection for http_request actions. Secret values are write-only and never returned on read.\",\n command:\n `zinkee --json automations connections create --name \"ERP API Key\" --type api_key --scope workspace --config '{\"headerName\":\"Authorization\"}' --secret apiKey=super-secret --active`,\n raw: `{\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"secret\": {\n \"apiKey\": \"super-secret\"\n },\n \"active\": true\n}`,\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T09:00:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations connections update\": buildCommandExamples([\n {\n description:\n \"Patch an existing stored connection. Use set.secret only when rotating secrets.\",\n command:\n `zinkee --json automations connections update connection-1 --raw '{\"set\":{\"name\":\"ERP API Key Updated\",\"config\":{\"headerName\":\"Authorization\"}}}'`,\n raw: `{\n \"set\": {\n \"name\": \"ERP API Key Updated\",\n \"config\": {\n \"headerName\": \"Authorization\"\n }\n }\n}`,\n response: `{\n \"id\": \"4fc20b5c-9353-4991-b68e-1027cb674ed4\",\n \"name\": \"ERP API Key Updated\",\n \"type\": \"api_key\",\n \"scope\": \"workspace\",\n \"ownerMemberId\": \"6c8a3e0d-7b1f-4c98-a2e9-8b9a2e3f5b14\",\n \"active\": true,\n \"config\": {\n \"headerName\": \"Authorization\"\n },\n \"createdAt\": \"2026-04-21T09:00:00Z\",\n \"updatedAt\": \"2026-04-21T10:15:00Z\",\n \"createdBy\": \"developer@zinkee.com\",\n \"updatedBy\": \"developer@zinkee.com\"\n}`,\n },\n ]),\n \"automations folders create\": buildCommandExamples([\n {\n description: \"Create one flat automation folder.\",\n command: 'zinkee --json automations folders create --name \"Codex Frontend Demo\"',\n raw: `{\n \"name\": \"Codex Frontend Demo\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false,\n \"automationCount\": 0\n}`,\n },\n ]),\n \"automations folders update\": buildCommandExamples([\n {\n description: \"Rename a non-root automation folder. The folder argument accepts a UUID or an exact name.\",\n command:\n 'zinkee --json automations folders update \"Codex Frontend Demo\" --name \"Codex Frontend Demo Updated\"',\n raw: `{\n \"name\": \"Codex Frontend Demo Updated\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo Updated\",\n \"isRoot\": false,\n \"automationCount\": 2\n}`,\n },\n ]),\n \"automations folders move\": buildCommandExamples([\n {\n description: \"Move one automation into a target folder by exact folder name.\",\n command: 'zinkee --json automations folders move automation-1 --to \"Codex Frontend Demo\"',\n raw: `{\n \"automationId\": \"automation-1\",\n \"targetFolderId\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\"\n}`,\n response: `{\n \"id\": \"cdfc14e3-3169-4ffb-8d9b-b11858a9240f\",\n \"name\": \"Codex Frontend Demo\",\n \"isRoot\": false\n}`,\n },\n ]),\n \"document-templates list\": buildCommandExamples([\n {\n description:\n \"List every document template in the workspace. Each asset's link is a relative path to the asset download endpoint, ready to call without composition.\",\n command: \"zinkee --json document-templates list\",\n response: `[\n {\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-20T14:30:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n }\n]`,\n },\n ]),\n \"document-templates get\": buildCommandExamples([\n {\n description:\n \"Look up one template by UUID. The CLI filters the list endpoint locally (the backend does not expose a get-one route).\",\n command:\n \"zinkee --json document-templates get 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-20T14:30:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"creator@example.com\"\n}`,\n },\n {\n description:\n \"Look up by exact template name. Names are unique within the workspace; ambiguity is reported as an error.\",\n command: 'zinkee --json document-templates get \"Quarterly report\"',\n },\n ]),\n \"document-templates create\": buildCommandExamples([\n {\n description:\n \"Typical create: empty template by name. Assets are uploaded afterwards via document-templates assets add.\",\n command: 'zinkee --json document-templates create --name \"Quarterly report\"',\n raw: `{\n \"name\": \"Quarterly report\",\n \"assets\": []\n}`,\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-15T10:00:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"creator@example.com\"\n}`,\n },\n {\n description:\n \"Create with pre-existing asset records via --raw. Used for import/migration flows where the assets already exist elsewhere; the typical UX is to create empty and upload via assets add.\",\n command:\n `zinkee --json document-templates create --raw '{\"name\":\"Annual report\",\"assets\":[{\"id\":\"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\"name\":\"Cover.docx\",\"link\":\"/existing/cover.docx\"},{\"id\":\"3f2e1d0c-9b8a-7654-3210-fedcba987654\",\"name\":\"Appendix.docx\",\"link\":\"/existing/appendix.docx\"}]}'`,\n raw: `{\n \"name\": \"Annual report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Cover.docx\",\n \"link\": \"/existing/cover.docx\"\n },\n {\n \"id\": \"3f2e1d0c-9b8a-7654-3210-fedcba987654\",\n \"name\": \"Appendix.docx\",\n \"link\": \"/existing/appendix.docx\"\n }\n ]\n}`,\n },\n ]),\n \"document-templates update\": buildCommandExamples([\n {\n description:\n \"Rename a template. The template argument accepts a UUID or an exact current name. Only the name is updatable through this endpoint; assets are managed via the assets subcommands.\",\n command:\n 'zinkee --json document-templates update \"Quarterly report\" --name \"Annual report\"',\n raw: `{\n \"name\": \"Annual report\"\n}`,\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Annual report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"Requirements.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-22T09:15:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n}`,\n },\n ]),\n \"document-templates delete\": buildCommandExamples([\n {\n description:\n \"Delete a template and remove its asset files from storage. Record fields that reference previously generated documents are not modified.\",\n command:\n \"zinkee --json document-templates delete 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"deleted\": true\n}`,\n },\n ]),\n \"document-templates assets add\": buildCommandExamples([\n {\n description:\n \"Upload a local file as an asset of a template. The CLI sends a multipart form with a part named \\\"file\\\"; the asset display name defaults to the uploaded filename.\",\n command:\n 'zinkee --json document-templates assets add \"Quarterly report\" ./contract.docx',\n response: `{\n \"id\": \"7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e\",\n \"name\": \"Quarterly report\",\n \"assets\": [\n {\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"name\": \"contract.docx\",\n \"link\": \"/api/v2/document-templates/7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e/assets/9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f/download\"\n }\n ],\n \"createdAt\": \"2026-01-15T10:00:00Z\",\n \"updatedAt\": \"2026-01-22T09:15:00Z\",\n \"createdBy\": \"creator@example.com\",\n \"updatedBy\": \"updater@example.com\"\n}`,\n },\n {\n description:\n \"Override the asset display name with --name (otherwise the uploaded filename is used).\",\n command:\n 'zinkee --json document-templates assets add \"Quarterly report\" ./contract.docx --name \"Customer Contract\"',\n },\n ]),\n \"document-templates assets delete\": buildCommandExamples([\n {\n description: \"Delete one asset from a template and remove its file from storage.\",\n command:\n \"zinkee --json document-templates assets delete 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n response: `{\n \"id\": \"9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f\",\n \"deleted\": true\n}`,\n },\n ]),\n \"document-templates assets download\": buildCommandExamples([\n {\n description:\n \"Download asset bytes to disk. The CLI streams the raw bytes to --output; in --json mode --output is required and the JSON envelope only carries metadata.\",\n command:\n \"zinkee --json document-templates assets download 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f --output ./contract.docx\",\n },\n {\n description:\n \"Stream asset bytes to stdout (omit --json and --output). Useful for piping into other tools.\",\n command:\n \"zinkee document-templates assets download 7c4a8d3f-1b2e-4a5c-9d6e-1f2a3b4c5d6e 9e8d7c6b-5a4f-3e2d-1c0b-9a8b7c6d5e4f > contract.docx\",\n },\n ]),\n};\n\nfunction fallbackExamples(commandName: string): readonly CommandExample[] {\n switch (commandName) {\n default:\n return [];\n }\n}\n\nfunction buildSchemaFieldCreateExamples(type?: string): readonly CommandExample[] {\n const definitions = getSchemaFieldTypeDefinitions();\n const selectedDefinition = resolveSchemaFieldType(type);\n const filteredDefinitions = selectedDefinition\n ? definitions.filter((definition) => definition.key === selectedDefinition.key)\n : definitions;\n\n const flat = filteredDefinitions.flatMap((definition) =>\n definition.examplePayloads.map((example) => ({ definition, example })),\n );\n\n return buildCommandExamples(\n flat.map(({ example }, index) => {\n const slug =\n typeof example.payload.slug === \"string\" ? example.payload.slug : \"field\";\n const command = `zinkee --json schemas fields create contacts --raw '${JSON.stringify(example.payload)}'`;\n\n if (index === 0) {\n return {\n description: example.name,\n command,\n response: `{\n \"schemaId\": \"2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e\",\n \"fieldId\": \"a8f1d7e3-2b5c-4d9e-8a1b-3c4d5e6f7890\",\n \"slug\": \"${slug}\"\n}`,\n };\n }\n\n return {\n description: example.name,\n command,\n };\n }),\n );\n}\n\nexport function getCommandExamples(\n commandName: string,\n filters: { type?: string } = {},\n): readonly CommandExample[] {\n if (commandName === \"schemas fields create\") {\n return buildSchemaFieldCreateExamples(filters.type);\n }\n\n return specificExamples[commandName] ?? fallbackExamples(commandName);\n}\n\nexport function getResolvedCommandExamples(\n commandName: string,\n filters: { type?: string } = {},\n): readonly CommandExample[] {\n return getCommandExamples(commandName, filters);\n}\n","import { commandRegistry } from \"./command-registry.js\";\nimport {\n collectOperandTokens,\n createDefaultOptionMetadata,\n findCommandPath,\n type OptionMetadata,\n} from \"./utils/argv-rewrite.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { getResolvedCommandExamples } from \"./utils/examples.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 getStdout(stdout?: CommandIo): CommandIo {\n return stdout ?? process.stdout;\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 = createDefaultOptionMetadata(),\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, commandRegistry);\n\n if (!cmdPath) {\n throw new CliError(\"invalid_cli_usage\", 'Provide a command after \"--example\".');\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 function showExamples(\n commandName: string,\n json: boolean,\n stdout?: CommandIo,\n filters: { type?: string } = {},\n): void {\n const examples = getResolvedCommandExamples(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 = getStdout(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 { 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 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 type { Writable } from \"node:stream\";\n\nimport { Command } from \"commander\";\n\nimport {\n defaultConfigPath,\n readConfig,\n redactConfig,\n resolveProfile,\n} from \"../config.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterConfigCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions {\n json?: boolean;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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 registerConfigCommands(\n program: Command,\n options: RegisterConfigCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } 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 { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport { parseJsonAssignment, parseKeyValue } from \"../parsers/kv.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, JsonValue, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterAutomationsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createAutomationsApi(\n command: Command,\n filePath: string,\n): { api: AutomationsApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new AutomationsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction collectValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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 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\nfunction parseCondition(input: string): ConditionSpec {\n const firstSeparator = input.indexOf(\":\");\n const secondSeparator = input.indexOf(\":\", firstSeparator + 1);\n\n if (firstSeparator <= 0 || secondSeparator <= firstSeparator + 1) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, received \"${input}\".`,\n );\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 new CliError(\n \"invalid_cli_usage\",\n `Expected condition in the form field:comparator:value, received \"${input}\".`,\n );\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 if (!field || !comparator || !Array.isArray(values) || values.length === 0) {\n throw new CliError(\n \"invalid_cli_usage\",\n `Expected ${label} ${index + 1} to contain \"field\", \"comparator\", and a non-empty \"values\" 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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 folderId: automation.folderId ?? \"\",\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 }));\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\",\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(\"--condition <field:comparator:value>\", \"action condition\", collectValues, [])\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 = getCommandIo(options.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\", \"folderId\", \"triggerType\", \"actionCount\"],\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\";\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 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 selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}`,\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/${selectorValue(automation)}: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/${selectorValue(automation)}:deactivate`,\n { method: \"POST\" },\n );\n }\n\n getTrigger(automation: NormalizedUuidOrSlug): Promise<ApiAutomationTrigger> {\n return this.client.getJson<ApiAutomationTrigger>(\n `/api/v2/automations/${selectorValue(automation)}/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/${selectorValue(automation)}/trigger`,\n jsonOptions(input, \"PUT\"),\n );\n }\n\n listActions(automation: NormalizedUuidOrSlug): Promise<ApiAutomationAction[]> {\n return this.client.getJson<ApiAutomationAction[]>(\n `/api/v2/automations/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/actions/${segment(actionId)}`,\n jsonOptions(input, \"PATCH\"),\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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(automation)}/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/${selectorValue(connection)}`,\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/${selectorValue(connection)}`,\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/${selectorValue(connection)}`,\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","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 profileSource:\n overrides.profile !== undefined\n ? \"flag\"\n : envProfile !== undefined\n ? \"env\"\n : undefined,\n baseUrlSource:\n overrides.baseUrl !== undefined\n ? \"flag\"\n : envBaseUrl !== undefined\n ? \"env\"\n : undefined,\n apiKeySource:\n overrides.apiKey !== undefined\n ? \"flag\"\n : envApiKey !== undefined\n ? \"env\"\n : undefined,\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 profileSource:\n overrides.profile !== undefined\n ? \"flag\"\n : envProfile !== undefined\n ? \"env\"\n : \"config\",\n baseUrlSource:\n overrides.baseUrl !== undefined\n ? \"flag\"\n : envBaseUrl !== undefined\n ? \"env\"\n : \"config\",\n apiKeySource:\n overrides.apiKey !== undefined\n ? \"flag\"\n : envApiKey !== undefined\n ? \"env\"\n : \"config\",\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n CommentsApi,\n type CreateCommentInput,\n} from \"../api/comments.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterCommentsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface CommentCreateCommandOptions {\n text?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n ..._extra: unknown[]\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName })),\n );\n}\n\nfunction 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\nfunction createCommentsApi(\n command: Command,\n filePath: string,\n): { api: CommentsApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new CommentsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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\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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n\nexport function registerCommentsCommands(\n program: Command,\n options: RegisterCommentsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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, filePath);\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, filePath);\n return;\n }\n\n writeLine(stdout, `Created comment \"${String(data.id ?? \"unknown\")}\".`);\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/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/${selectorValue(schema)}/records/${recordId}/comments`,\n jsonOptions(input, \"POST\"),\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DisplaysApi,\n type ApiDisplayFolder,\n type DisplayResource,\n type DisplaySummary,\n} from \"../api/displays.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n parseExpression,\n type ExpressionComparator,\n type ParsedExpression,\n} from \"../parsers/expressions.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\nconst DATE_DYNAMIC_OPTIONS =\n \"today, thisWeek, thisMonth, thisQuarter, thisSemester, thisYear, next7Days, next30Days, next6Months, next12Months, last12Months\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterDisplaysCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface DisplayCreateOptions {\n name: string;\n template: string;\n freeformLayouts?: string;\n freeformLayoutsFile?: string;\n}\n\ninterface DisplayUpdateOptions {\n name?: 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 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 NavigationTargetMutationOptions {\n sourceWidget?: string;\n targetDisplay?: string;\n targetVariable?: string;\n label?: string;\n}\n\ninterface CrossWidgetFilterSetOptions {\n sourceWidget: string;\n sourceField: string;\n target: string[];\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(stdout: CommandIo, commandName: string, data: unknown): void {\n writeLine(stdout, JSON.stringify(buildJsonSuccess(data, { command: commandName })));\n}\n\nfunction toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") {\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\nfunction createDisplaysApi(\n command: Command,\n filePath: string,\n): { api: DisplaysApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\n\n if (!runtime.baseUrl) {\n throw new CliError(\"configuration_error\", `Resolved profile \"${runtime.profile}\" is missing a base URL.`);\n }\n\n return {\n api: new DisplaysApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction ensureWritable(commandName: string, readOnly: boolean, mode: \"write\" | \"destructive\"): 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 { commandMode: mode, executionMode: \"read-only\" },\n );\n }\n}\n\nfunction 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\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 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 parseNonNegativeInteger(input: string): number {\n if (!/^\\d+$/.test(input.trim())) {\n throw new InvalidArgumentError(`Expected a non-negative integer, received \"${input}\".`);\n }\n return Number(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 isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 }));\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 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 buildCrossWidgetFilterBody(options: CrossWidgetFilterSetOptions): Record<string, unknown> {\n return {\n source: {\n widgetId: options.sourceWidget,\n fieldId: options.sourceField,\n },\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\nexport function registerDisplaysCommands(\n program: Command,\n options: RegisterDisplaysCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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(displayRows(data), [\"id\", \"name\", \"layoutTemplate\", \"variableCount\", \"widgetCount\"], stdout);\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 .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({ name: commandOptions.name, layout });\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 .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) throw new CliError(\"invalid_cli_usage\", \"Nothing to update.\");\n const data = await api.updateDisplay(display, { name: commandOptions.name });\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(\"--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(\"--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 ? [item] : [], undefined, stdout);\n });\n cross.command(\"set\").description(\"Set cross widget filter\").argument(\"<display>\", \"display uuid or slug\", parseUuidOrSlugSelector)\n .requiredOption(\"--source-widget <id>\").requiredOption(\"--source-field <id>\").requiredOption(\"--target <widget:field>\", \"repeatable target\", (v, p: string[] = []) => [...p, v], [])\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 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?: Record<string, unknown> | null;\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\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 selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\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/${selectorValue(display)}`);\n }\n\n createDisplay(body: Record<string, unknown>): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\"/api/v2/displays\", jsonOptions(body, \"POST\"));\n }\n\n updateDisplay(\n display: NormalizedUuidOrSlug,\n body: Record<string, unknown>,\n ): Promise<ApiDisplay> {\n return this.client.requestJson<ApiDisplay>(\n `/api/v2/displays/${selectorValue(display)}`,\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/${selectorValue(display)}`,\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/${selectorValue(display)}/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/${selectorValue(display)}/layout`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n listTabs(display: NormalizedUuidOrSlug): Promise<ApiDisplayTab[]> {\n return this.client.getJson<ApiDisplayTab[]>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/variables`,\n );\n }\n\n getVariable(display: NormalizedUuidOrSlug, variableId: string): Promise<ApiDisplayVariable> {\n return this.client.getJson<ApiDisplayVariable>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/widgets`,\n );\n }\n\n getWidget(display: NormalizedUuidOrSlug, widgetId: string): Promise<ApiDisplayWidget> {\n return this.client.getJson<ApiDisplayWidget>(\n `/api/v2/displays/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(display)}/cross-widget-filter`,\n );\n }\n\n setCrossWidgetFilter(\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/${selectorValue(display)}/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/${selectorValue(display)}/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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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 { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n DocumentTemplatesApi,\n type ApiDocumentTemplate,\n type CreateDocumentTemplateInput,\n type UpdateDocumentTemplateInput,\n} from \"../api/document-templates.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport interface RegisterDocumentTemplatesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction writeBinary(stdout: CommandIo, value: ArrayBuffer): void {\n stdout.write(Buffer.from(value));\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createDocumentTemplatesApi(\n command: Command,\n filePath: string,\n): { api: DocumentTemplatesApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new DocumentTemplatesApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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 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 readLocalFile(filePath: string): Buffer {\n try {\n return readFileSync(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\nfunction writeDownloadedFile(outputPath: string, value: ArrayBuffer): void {\n try {\n writeFileSync(outputPath, Buffer.from(value));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n }\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 = getCommandIo(options.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 = readLocalFile(localPath);\n const formData = new FormData();\n formData.append(\"file\", new Blob([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 data = await api.downloadAsset(resolved, assetId);\n\n if (commandOptions.output) {\n writeDownloadedFile(commandOptions.output, data);\n\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: data.byteLength,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded asset to \"${commandOptions.output}\".`);\n return;\n }\n\n writeBinary(stdout, data);\n });\n}\n","import { 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return encodeURIComponent(selector.value);\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\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/${selectorValue(template)}`,\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/${selectorValue(template)}`,\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/${selectorValue(template)}/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/${selectorValue(template)}/assets/${segment(assetId)}`,\n { method: \"DELETE\" },\n );\n }\n\n downloadAsset(\n template: NormalizedUuidOrSlug,\n assetId: string,\n ): Promise<ArrayBuffer> {\n return this.client.requestBinary(\n `/api/v2/document-templates/${selectorValue(template)}/assets/${segment(assetId)}/download`,\n );\n }\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { FilesApi } from \"../api/files.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string | Uint8Array): unknown;\n}\n\nexport interface RegisterFilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface FilesDownloadCommandOptions {\n output?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction writeBinary(stdout: CommandIo, value: ArrayBuffer): void {\n stdout.write(Buffer.from(value));\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createFilesApi(\n command: Command,\n filePath: string,\n): { api: FilesApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new FilesApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readLocalFile(filePath: string): Buffer {\n try {\n return readFileSync(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\nfunction writeDownloadedFile(outputPath: string, value: ArrayBuffer): void {\n try {\n writeFileSync(outputPath, Buffer.from(value));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to write file.\";\n throw new CliError(\n \"invalid_cli_usage\",\n `Failed to write downloaded file to ${outputPath}: ${message}`,\n );\n }\n}\n\nexport function registerFilesCommands(\n program: Command,\n options: RegisterFilesCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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(function action(this: Command, path: string) {\n const { api, json, readOnly } = createFilesApi(this, filePath);\n ensureWritable(\"files upload\", readOnly, \"write\");\n\n const contents = readLocalFile(path);\n const formData = new FormData();\n formData.append(\"file\", new Blob([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(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 return api.downloadFile(fileSelector).then((data) => {\n if (commandOptions.output) {\n writeDownloadedFile(commandOptions.output, data);\n\n if (json) {\n emitJson(\n stdout,\n \"files download\",\n {\n file: fileSelector.value,\n output: commandOptions.output,\n bytes: data.byteLength,\n },\n filePath,\n );\n return;\n }\n\n writeLine(stdout, `Downloaded file to \"${commandOptions.output}\".`);\n return;\n }\n\n writeBinary(stdout, data);\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 (isRecord(data)) {\n printTable([data], Object.keys(data), stdout);\n return;\n }\n\n writeLine(stdout, String(data));\n });\n });\n}\n","import { 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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): Promise<ArrayBuffer> {\n return this.client.requestBinary(`/api/v2/files/${selectorValue(file)}`);\n }\n\n deleteFile(file: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/files/${selectorValue(file)}`,\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 type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { LogsApi } from \"../api/logs.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterLogsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n ..._extra: unknown[]\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName })),\n );\n}\n\nfunction 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\nfunction createLogsApi(\n command: Command,\n filePath: string,\n): { api: LogsApi; json: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new LogsApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\n}\n\nexport function registerLogsCommands(\n program: Command,\n options: RegisterLogsCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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, filePath);\n return;\n }\n\n emitTable(stdout, data);\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/records/${recordId}/logs`,\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport { NavigationApi, type NavigationFolder } from \"../api/navigation.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport { normalizeUuidOrSlug, type NormalizedUuidOrSlug } from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterNavigationCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\n\ninterface FolderMutationOptions {\n name?: string;\n order?: string;\n props?: string;\n propsFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(stdout, JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })));\n}\n\nfunction toConfigurationError(filePath: string, error: unknown): never {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") {\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\nfunction createNavigationApi(\n command: Command,\n filePath: string,\n): { api: NavigationApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\n\n if (!runtime.baseUrl) {\n throw new CliError(\"configuration_error\", `Resolved profile \"${runtime.profile}\" is missing a base URL.`);\n }\n\n return {\n api: new NavigationApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction ensureWritable(commandName: string, readOnly: boolean, mode: \"write\" | \"destructive\"): 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 { commandMode: mode, executionMode: \"read-only\" },\n );\n }\n}\n\nfunction 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\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 = getCommandIo(options.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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(folder)}`,\n jsonOptions(body, \"PATCH\"),\n );\n }\n\n deleteFolder(folder: NormalizedUuidOrSlug): Promise<NavigationFolderMutation> {\n return this.client.requestJson<NavigationFolderMutation>(\n `/api/v2/navigation/folders/${selectorValue(folder)}`,\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 type { Writable } from \"node:stream\";\n\nimport { 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 { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterProfilesCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions {\n json?: boolean;\n}\n\nexport interface DisplayProfile extends ProfileConfig {\n name: string;\n isDefault: boolean;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\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 = getCommandIo(options.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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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 (getGlobalOptions(this).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\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n type ApiRecord,\n type CreateRecordInput,\n type RecordQueryExpression,\n type RecordQueryInput,\n type RecordQueryResult,\n RecordsApi,\n type UpdateRecordInput,\n} from \"../api/records.js\";\nimport { SchemasApi } from \"../api/schemas.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n type ParsedExpression,\n parseExpression,\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 { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterRecordsCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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}\n\ninterface RecordsUpdateCommandOptions extends RecordsCreateCommandOptions {\n unset?: string[];\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction 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, { command: commandName, configPath, ...meta })),\n );\n}\n\nfunction 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\nfunction createRecordsApi(\n command: Command,\n filePath: string,\n): {\n api: RecordsApi;\n schemasApi: SchemasApi;\n json: boolean;\n profile: string;\n readOnly: boolean;\n} {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 const client = new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n });\n\n return {\n api: new RecordsApi(client),\n schemasApi: new SchemasApi(client),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction 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\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 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 isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 buildRecordCreateInput(\n options: RecordsCreateCommandOptions,\n): CreateRecordInput {\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\", or \"--raw-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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 = getCommandIo(options.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 a record\")\n .argument(\"<schema>\", \"schema uuid or slug\", parseUuidOrSlugSelector)\n .option(\"--set <field=value>\", \"set a string field\", collectKeyValueAssignments, [])\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 .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 const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n const data = await api.createRecord(\n resolvedSchema,\n buildRecordCreateInput(commandOptions),\n );\n\n if (json) {\n emitJson(stdout, \"records create\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Created record \"${getRecordIdentifier(data)}\".`);\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(\"--set <field=value>\", \"set a string field\", collectKeyValueAssignments, [])\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 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, schemasApi, json, readOnly } = createRecordsApi(this, filePath);\n ensureWritable(\"records delete\", readOnly, \"destructive\");\n const resolvedSchema = await resolveSchemaSelector(schemasApi, schema);\n\n await api.deleteRecord(resolvedSchema, record);\n const data = {\n schema: resolvedSchema.value,\n record: record.value,\n deleted: true,\n };\n\n if (json) {\n emitJson(stdout, \"records delete\", data, filePath);\n return;\n }\n\n writeLine(stdout, `Deleted record \"${record.value}\" from schema \"${schema.value}\".`);\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 RecordQuerySort {\n field: string;\n direction: \"ASC\" | \"DESC\";\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 interface CreateRecordInput {\n [key: string]: unknown;\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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}/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/${selectorValue(schema)}/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/${selectorValue(schema)}/records/${selectorValue(record)}`,\n );\n }\n\n createRecord(\n schema: NormalizedUuidOrSlug,\n input: CreateRecordInput,\n ): Promise<ApiRecord> {\n return this.client.requestJson<ApiRecord>(\n `/api/v2/schemas/${selectorValue(schema)}/records`,\n jsonOptions(input, \"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/${selectorValue(schema)}/records/${selectorValue(record)}`,\n jsonOptions(input, \"PATCH\"),\n );\n }\n\n deleteRecord(\n schema: NormalizedUuidOrSlug,\n record: NormalizedUuidOrSlug,\n ): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${selectorValue(schema)}/records/${selectorValue(record)}`,\n { method: \"DELETE\" },\n );\n }\n\n clearRecords(schema: NormalizedUuidOrSlug): Promise<Record<string, unknown>> {\n return this.client.requestJson<Record<string, unknown>>(\n `/api/v2/schemas/${selectorValue(schema)}/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 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}\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 required?: boolean;\n}\n\nexport interface UpdateSchemaFieldInput {\n [key: string]: unknown;\n label?: 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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(schema)}`);\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/${selectorValue(schema)}`,\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/${selectorValue(schema)}/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/${selectorValue(schema)}`,\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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\n );\n }\n\n createField(schema: NormalizedUuidOrSlug, input: CreateSchemaFieldInput): Promise<ApiSchemaField> {\n return this.client.requestJson<ApiSchemaField>(\n `/api/v2/schemas/${selectorValue(schema)}/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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\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/${selectorValue(schema)}/fields/${selectorValue(field)}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type { Writable } from \"node:stream\";\n\nimport { 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, ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} from \"../parsers/selectors.js\";\nimport { resolveRuntimeContext } from \"../runtime-context.js\";\nimport type { JsonObject, RuntimeOverrides } from \"../types.js\";\nimport { CliError } from \"../utils/errors.js\";\nimport {\n assertSupportedSchemaFieldType,\n buildSchemaFieldCreateHelpText,\n buildSchemaFieldCreateValidationMessage,\n formatSchemaFieldTypes,\n normalizeSchemaFieldCreatePayload,\n normalizeSchemaFieldUpdatePayload,\n normalizeSchemaFieldType,\n} from \"../utils/schema-fields.js\";\nimport { buildJsonSuccess, printTable } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterSchemasCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\ninterface FieldUpdateCommandOptions {\n label?: string;\n required?: boolean;\n default?: string;\n raw?: string;\n rawFile?: string;\n}\n\nfunction getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createSchemasApi(\n command: Command,\n filePath: string,\n): { api: SchemasApi; json: boolean; profile: string; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new SchemasApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n profile: runtime.profile,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\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 isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\nfunction 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\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 })),\n [\"id\", \"name\", \"slug\", \"auditable\", \"commentable\"],\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 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 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\nfunction isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\n}\n\nexport function registerSchemasCommands(\n program: Command,\n options: RegisterSchemasCommandsOptions = {},\n): void {\n const filePath = options.configPath ?? defaultConfigPath;\n const stdout = getCommandIo(options.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 resolvedFields = await Promise.all(\n selectors.map((selector) => resolveFieldSelector(api, resolvedSchema, selector)),\n );\n const input: SetUniqueFieldsInput = {\n fieldIds: resolvedFields.map((field) => field.value),\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(\"--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(\"--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\", \"--required\", \"--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\";\nimport type { Writable } from \"node:stream\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\n\nimport {\n TeamspaceApi,\n type ApiTeamspaceFolder,\n type CreateTeamspaceFolderInput,\n type UpdateTeamspaceFolderInput,\n} from \"../api/teamspace.js\";\nimport { ApiClient } from \"../client.js\";\nimport { defaultConfigPath, readRuntimeConfig } from \"../config.js\";\nimport {\n normalizeUuidOrSlug,\n type NormalizedUuidOrSlug,\n} 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 } from \"../utils/output.js\";\n\ninterface CommandIo {\n write(chunk: string): unknown;\n}\n\nexport interface RegisterTeamspaceCommandsOptions {\n configPath?: string;\n stdout?: CommandIo;\n}\n\ninterface GlobalOptions extends RuntimeOverrides {}\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 getCommandIo(stdout: CommandIo | undefined): CommandIo {\n return stdout ?? (process.stdout as Writable);\n}\n\nfunction writeLine(stdout: CommandIo, value: string): void {\n stdout.write(`${value}\\n`);\n}\n\nfunction getGlobalOptions(command: Command): GlobalOptions {\n return command.optsWithGlobals<GlobalOptions>();\n}\n\nfunction emitJson(\n stdout: CommandIo,\n commandName: string,\n data: unknown,\n configPath: string,\n): void {\n writeLine(\n stdout,\n JSON.stringify(buildJsonSuccess(data, { command: commandName, configPath })),\n );\n}\n\nfunction 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\nfunction createTeamspaceApi(\n command: Command,\n filePath: string,\n): { api: TeamspaceApi; json: boolean; readOnly: boolean } {\n try {\n const config = readRuntimeConfig(filePath);\n const runtime = resolveRuntimeContext(config, getGlobalOptions(command));\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 api: new TeamspaceApi(\n new ApiClient({\n baseUrl: runtime.baseUrl,\n apiKey: runtime.apiKey,\n }),\n ),\n json: runtime.json,\n readOnly: runtime.readOnly,\n };\n } catch (error) {\n toConfigurationError(filePath, error);\n }\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction 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\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 isEmptyObject(value: object): boolean {\n return Object.keys(value).length === 0;\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 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\nfunction emitTable(stdout: CommandIo, data: unknown): void {\n printTable(toTableRows(data), undefined, stdout);\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 = getCommandIo(options.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\nfunction selectorValue(selector: NormalizedUuidOrSlug): string {\n return selector.value;\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/${selectorValue(folder)}`,\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/${selectorValue(folder)}`,\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":";;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAE9B,OAAO,WAAW;;;ACSlB,IAAM,aAAsC;AAC5C,IAAM,cAAuC;AAEtC,IAAM,kBAAkB;AAAA,EAC7B,eAAe;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,oBAAoB;AAAA,IAClB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,8BAA8B;AAAA,IAC5B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gCAAgC;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,+BAA+B;AAAA,IAC7B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,uBAAuB;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,oCAAoC;AAAA,IAClC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,oCAAoC;AAAA,IAClC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,oCAAoC;AAAA,IAClC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,uCAAuC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,oCAAoC;AAAA,IAClC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,2BAA2B;AAAA,IACzB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,6BAA6B;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,uBAAuB;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACxB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,4BAA4B;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,+BAA+B;AAAA,IAC7B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AACF;;;ACx0BO,IAAM,yBAAyB;AAAA,EACpC,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU;AACZ;AAIA,SAAS,gBAAgB,UAAiD;AACxE,SAAO,OAAO,OAAO,wBAAwB,QAAQ;AACvD;AAQA,SAAS,eAAe,SAA0B;AAChD,QAAM,QAAkB,CAAC;AACzB,MAAI,SAAyB;AAC7B,SAAO,UAAU,OAAO,QAAQ;AAC9B,UAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,aAAS,OAAO;AAAA,EAClB;AACA,SAAO,MAAM,KAAK,GAAG;AACvB;AAEO,SAAS,oBAAoB,SAAkC;AACpE,QAAM,aAAa,oBAAI,IAAY;AACnC,QAAM,eAAe,oBAAI,IAAY;AACrC,QAAM,wBAAwB,oBAAI,IAAyB;AAE3D,WAAS,MAAM,SAAkB,QAAuB;AACtD,UAAM,aAAa,oBAAI,IAAY;AAEnC,eAAW,UAAU,QAAQ,SAAS;AACpC,UAAI,CAAC,OAAO,KAAM;AAElB,UAAI,OAAO,YAAY,OAAO,UAAU;AACtC,mBAAW,IAAI,OAAO,IAAI;AAAA,MAC5B,OAAO;AACL,qBAAa,IAAI,OAAO,IAAI;AAAA,MAC9B;AAEA,UAAI,CAAC,QAAQ;AACX,mBAAW,IAAI,OAAO,IAAI;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ;AACX,4BAAsB,IAAI,eAAe,OAAO,GAAG,UAAU;AAAA,IAC/D;AAEA,eAAW,OAAO,QAAQ,UAAU;AAClC,YAAM,KAAK,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,SAAS,IAAI;AACnB,SAAO,EAAE,YAAY,cAAc,sBAAsB;AAC3D;AAEO,SAAS,8BAA8C;AAC5D,SAAO;AAAA,IACL,YAAY,oBAAI,IAAI;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,cAAc,oBAAI,IAAI;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,uBAAuB,oBAAI,IAAI;AAAA,EACjC;AACF;AAOA,SAAS,YAAY,OAAwB;AAC3C,SAAO,MAAM,SAAS,KAAK,MAAM,WAAW,GAAG;AACjD;AAEA,SAAS,eAAe,OAA0B;AAChD,MAAI,MAAM,WAAW,IAAI,KAAK,MAAM,SAAS,GAAG,GAAG;AACjD,UAAM,QAAQ,MAAM,QAAQ,GAAG;AAC/B,WAAO;AAAA,MACL,UAAU,MAAM,MAAM,GAAG,KAAK;AAAA,MAC9B,aAAa,MAAM,MAAM,QAAQ,CAAC;AAAA,IACpC;AAAA,EACF;AACA,SAAO,EAAE,UAAU,OAAO,aAAa,OAAU;AACnD;AAEA,SAAS,kBAAkB,UAAkB,YAAqC;AAChF,MAAI,WAAW,WAAW,IAAI,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AACA,MAAI,WAAW,aAAa,IAAI,QAAQ,GAAG;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,SAAS,qBACd,UACA,YACA,UAAiC,CAAC,GACf;AACnB,QAAM,WAA8B,CAAC;AACrC,MAAI,IAAI;AACR,SAAO,IAAI,SAAS,QAAQ;AAC1B,UAAM,QAAQ,SAAS,CAAC;AAExB,QAAI,UAAU,MAAM;AAClB;AAAA,IACF;AAEA,QAAI,YAAY,KAAK,GAAG;AACtB,YAAM,EAAE,UAAU,YAAY,IAAI,eAAe,KAAK;AAEtD,UAAI,QAAQ,aAAa,UAAa,aAAa,QAAQ,UAAU;AACnE,aAAK;AACL;AAAA,MACF;AAEA,UAAI,gBAAgB,QAAW;AAC7B,aAAK;AACL;AAAA,MACF;AAEA,YAAM,WAAW,kBAAkB,UAAU,UAAU;AACvD,YAAM,OAAO,SAAS,IAAI,CAAC;AAC3B,UAAI,YAAY,SAAS,UAAa,CAAC,YAAY,IAAI,GAAG;AACxD,aAAK;AAAA,MACP,OAAO;AACL,aAAK;AAAA,MACP;AACA;AAAA,IACF;AAEA,aAAS,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;AACjC,SAAK;AAAA,EACP;AACA,SAAO;AACT;AAQO,SAAS,gBACd,UACA,UACyB;AACzB,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,QAAM,mBAAmB,OAAO,KAAK,QAAQ,EAAE;AAAA,IAC7C,CAAC,MAAM,UAAU,MAAM,MAAM,GAAG,EAAE,SAAS,KAAK,MAAM,GAAG,EAAE;AAAA,EAC7D;AAEA,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACvD,eAAW,eAAe,kBAAkB;AAC1C,YAAM,QAAQ,YAAY,MAAM,GAAG;AACnC,UAAI,QAAQ,MAAM,SAAS,SAAS,OAAQ;AAE5C,UAAI,UAAU;AACd,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,YAAI,SAAS,QAAQ,CAAC,EAAG,UAAU,MAAM,CAAC,GAAG;AAC3C,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AAEA,UAAI,SAAS;AACX,eAAO;AAAA,UACL;AAAA,UACA,gBAAgB,SAAS,KAAK,EAAG;AAAA,UACjC,eAAe,SAAS,QAAQ,MAAM,SAAS,CAAC,EAAG;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,mBACd,MACA,YACA,UACU;AACV,MAAI,KAAK,SAAS,EAAG,QAAO,CAAC,GAAG,IAAI;AAEpC,QAAM,WAAW,KAAK,MAAM,CAAC;AAC7B,QAAM,WAAW,qBAAqB,UAAU,UAAU;AAC1D,QAAM,UAAU,gBAAgB,UAAU,QAAQ;AAElD,MAAI,CAAC,QAAS,QAAO,CAAC,GAAG,IAAI;AAE7B,QAAM,eACJ,WAAW,sBAAsB,IAAI,QAAQ,WAAW,KAAK,oBAAI,IAAY;AAE/E,QAAM,UAAoB,CAAC;AAC3B,QAAM,YAAsB,CAAC;AAC7B,MAAI,IAAI;AAER,SAAO,IAAI,SAAS,QAAQ;AAC1B,UAAM,QAAQ,SAAS,CAAC;AAExB,QAAI,UAAU,MAAM;AAClB,gBAAU,KAAK,GAAG,SAAS,MAAM,CAAC,CAAC;AACnC;AAAA,IACF;AAEA,QAAI,CAAC,YAAY,KAAK,GAAG;AACvB,gBAAU,KAAK,KAAK;AACpB,WAAK;AACL;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,YAAY,IAAI,eAAe,KAAK;AAEtD,QAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC9B,gBAAU,KAAK,KAAK;AACpB,WAAK;AACL;AAAA,IACF;AAEA,UAAM,qBAAqB,IAAI,QAAQ;AACvC,UAAM,oBAAoB,aAAa,IAAI,QAAQ;AAEnD,UAAM,SAAS,sBAAsB,oBAAoB,YAAY;AACrE,WAAO,KAAK,KAAK;AAEjB,UAAM,OAAO,uBAAuB,QAAQ;AAC5C,QAAI,SAAS,WAAW,gBAAgB,QAAW;AACjD,YAAM,OAAO,SAAS,IAAI,CAAC;AAC3B,UAAI,SAAS,UAAa,CAAC,YAAY,IAAI,GAAG;AAC5C,eAAO,KAAK,IAAI;AAChB,aAAK;AACL;AAAA,MACF;AAAA,IACF;AAEA,SAAK;AAAA,EACP;AAEA,SAAO,CAAC,KAAK,CAAC,GAAa,KAAK,CAAC,GAAa,GAAG,SAAS,GAAG,SAAS;AACxE;;;ACtPO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAC/B,OAAO;AAAA,EAEP;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAES;AAAA,EAElB,YACE,MACA,SACA,SACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,MAAM,QAAQ;AACnB,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS,QAAQ;AACtB,SAAK,eAAe,QAAQ;AAC5B,SAAK,eAAe,QAAQ;AAC5B,SAAK,QAAQ,QAAQ;AAAA,EACvB;AACF;AAMA,SAAS,kBAAkB,aAAqC;AAC9D,SAAO,cAAc,mBAAmB,KAAK,WAAW,IAAI;AAC9D;AAEA,SAAS,cAAc,MAAuB;AAC5C,QAAM,UAAU,KAAK,KAAK;AAE1B,SACE,QAAQ,WAAW,GAAG,KACtB,QAAQ,WAAW,GAAG,KACtB,YAAY,UACZ,YAAY,UACZ,YAAY,WACZ,0CAA0C,KAAK,OAAO,KACtD,QAAQ,WAAW,GAAG;AAE1B;AAEA,SAAS,cAAiB,MAAc,KAAa,QAAmB;AACtE,QAAM,UAAU,KAAK,KAAK;AAE1B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,OAAO;AACd,UAAM,IAAI,eAAe,gBAAgB,sCAAsC,MAAM,IAAI,GAAG,KAAK;AAAA,MAC/F;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eAAe,MAAc,aAAqC;AACzE,MAAI,KAAK,KAAK,EAAE,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,kBAAkB,WAAW,KAAK,CAAC,cAAc,IAAI,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBAAsB,OAAoC;AACjE,QAAM,OAAO,oBAAI,IAAa;AAC9B,MAAI,UAAmB;AAEvB,SAAO,WAAW,OAAO,YAAY,YAAY,CAAC,KAAK,IAAI,OAAO,GAAG;AACnE,SAAK,IAAI,OAAO;AAEhB,UAAM,YAAY;AAClB,UAAM,UAAU,OAAO,UAAU,YAAY,WAAW,UAAU,QAAQ,KAAK,IAAI;AACnF,UAAM,OAAO,OAAO,UAAU,SAAS,WAAW,UAAU,OAAO;AAEnE,QAAI,WAAW,YAAY,gBAAgB;AACzC,aAAO,QAAQ,CAAC,QAAQ,SAAS,IAAI,IAAI,GAAG,OAAO,KAAK,IAAI,MAAM;AAAA,IACpE;AAEA,cAAU,UAAU;AAAA,EACtB;AAEA,SAAO;AACT;AAEO,IAAM,YAAN,MAAgB;AAAA,EAGrB,YAA6B,SAA2B;AAA3B;AAC3B,SAAK,YAAY,QAAQ,SAAS;AAAA,EACpC;AAAA,EAJiB;AAAA,EAMjB,MAAM,QAAW,MAAc,OAA0B,CAAC,GAAe;AACvE,WAAO,KAAK,YAAe,MAAM,EAAE,GAAG,MAAM,QAAQ,MAAM,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,YAAe,MAAc,OAA0B,CAAC,GAAe;AAC3E,UAAM,WAAW,MAAM,KAAK,QAAQ,MAAM,MAAM,kBAAkB;AAElE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAMA,QAAO,MAAM,SAAS,KAAK;AACjC,YAAM,KAAK,eAAe,UAAUA,OAAM,MAAM,aAAa;AAAA,IAC/D;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,cAAiB,MAAM,SAAS,KAAK,KAAK,UAAU,KAAK;AAAA,EAClE;AAAA,EAEA,MAAM,cAAc,MAAc,OAA0B,CAAC,GAAyB;AACpF,UAAM,WAAW,MAAM,KAAK,QAAQ,MAAM,IAAI;AAE9C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAM,KAAK,eAAe,UAAU,MAAM,MAAM,eAAe;AAAA,IACjE;AAEA,WAAO,SAAS,YAAY;AAAA,EAC9B;AAAA,EAEQ,SAAS,MAAsB;AACrC,UAAM,iBAAiB,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AAE7D,WAAO,IAAI,IAAI,gBAAgB,KAAK,QAAQ,OAAO,EAAE,SAAS;AAAA,EAChE;AAAA,EAEA,MAAc,QACZ,MACA,MACA,QACmB;AACnB,UAAM,MAAM,KAAK,SAAS,IAAI;AAC9B,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AAExC,QAAI,UAAU,CAAC,QAAQ,IAAI,QAAQ,GAAG;AACpC,cAAQ,IAAI,UAAU,MAAM;AAAA,IAC9B;AAEA,QAAI,KAAK,QAAQ,UAAU,CAAC,QAAQ,IAAI,eAAe,GAAG;AACxD,cAAQ,IAAI,iBAAiB,UAAU,KAAK,QAAQ,MAAM,EAAE;AAAA,IAC9D;AAEA,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,KAAK,aAAa,KAAK,QAAQ;AACjD,QAAI,WAAW;AACf,QAAI;AAEJ,UAAM,gBAAgB,MAAY;AAChC,iBAAW,MAAM;AAAA,IACnB;AAEA,QAAI,KAAK,QAAQ;AACf,UAAI,KAAK,OAAO,SAAS;AACvB,mBAAW,MAAM;AAAA,MACnB,OAAO;AACL,aAAK,OAAO,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,MACrE;AAAA,IACF;AAEA,QAAI,cAAc,QAAW;AAC3B,sBAAgB,WAAW,MAAM;AAC/B,mBAAW;AACX,mBAAW,MAAM;AAAA,MACnB,GAAG,SAAS;AAAA,IACd;AAEA,QAAI;AACF,aAAO,MAAM,KAAK,UAAU,KAAK;AAAA,QAC/B,GAAG;AAAA,QACH;AAAA,QACA,QAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,UAAU;AACZ,cAAM,IAAI,eAAe,WAAW,2BAA2B,SAAS,OAAO;AAAA,UAC7E;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,eAAe,sBAAsB,KAAK;AAChD,YAAM,UAAU,eACZ,sBAAsB,MAAM,IAAI,GAAG,KAAK,YAAY,MACpD,sBAAsB,MAAM,IAAI,GAAG;AAEvC,YAAM,IAAI,eAAe,iBAAiB,SAAS;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,UAAE;AACA,UAAI,kBAAkB,QAAW;AAC/B,qBAAa,aAAa;AAAA,MAC5B;AAEA,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO,oBAAoB,SAAS,aAAa;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,UACA,MACA,MACA,WACgB;AAChB,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,eAAe,eAAe,MAAM,SAAS,QAAQ,IAAI,cAAc,CAAC;AAE9E,WAAO,IAAI,eAAe,cAAc,8BAA8B,SAAS,MAAM,QAAQ,MAAM,IAAI,SAAS,GAAG,KAAK;AAAA,MACtH,KAAK,SAAS;AAAA,MACd;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB;AAAA,MACA,cAAc,iBAAiB,OAAO,OAAO;AAAA,MAC7C,OAAO,IAAI,MAAM,SAAS;AAAA,IAC5B,CAAC;AAAA,EACH;AACF;;;AC5QA,OAAO,WAAW;AA2BlB,SAAS,mBAAmB,OAAwB;AAClD,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,OAAO,UAAU,UAAU;AACxF,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,SAAO,KAAK,UAAU,KAAK;AAC7B;AAEO,SAAS,iBACd,MACA,OAAc,CAAC,GACoB;AACnC,SAAO,EAAE,MAAM,KAAK;AACtB;AAEO,SAAS,eACd,OACA,OAAc,CAAC,GACiB;AAChC,SAAO,EAAE,OAAO,KAAK;AACvB;AAkBA,SAAS,UAAU,QAAqC;AACtD,SAAO,UAAU,QAAQ;AAC3B;AAMO,SAAS,WACd,MACA,MACA,QACM;AACN,MAAI,KAAK,WAAW,GAAG;AACrB,cAAU,MAAM,EAAE,MAAM,eAAe;AACvC;AAAA,EACF;AAEA,QAAM,WAAW,KAAK,CAAC;AAEvB,MAAI,CAAC,UAAU;AACb,cAAU,MAAM,EAAE,MAAM,eAAe;AACvC;AAAA,EACF;AAEA,QAAM,WAAW,CAAC,GAAI,QAAQ,OAAO,KAAK,QAAQ,CAAE;AACpD,QAAM,QAAQ,IAAI,MAAM;AAAA,IACtB,MAAM;AAAA,IACN,UAAU;AAAA,EACZ,CAAC;AAED,aAAW,OAAO,MAAM;AACtB,UAAM,KAAK,SAAS,IAAI,CAAC,YAAY,mBAAmB,IAAI,OAAO,CAAC,CAAC,CAAC;AAAA,EACxE;AAEA,YAAU,MAAM,EAAE,MAAM,GAAG,MAAM,SAAS,CAAC;AAAA,CAAI;AACjD;;;AC9FO,IAAM,yBAAyB;AAAA,EACpC,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,uCAAuC;AAAA,EACvC,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAChB;AAaA,IAAM,kBAAgD;AAAA,EACpD,wBAAwB;AAC1B;AAEO,IAAM,WAAN,cAAuB,MAAM;AAAA,EACzB,OAAO;AAAA,EAEP;AAAA,EAEA;AAAA,EAEA;AAAA,EAET,YACE,MACA,SACA,UAA2B,CAAC,GAC5B,WAAmB,uBAAuB,IAAI,GAC9C;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,WAAW;AAEhB,QAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,SAA0B;AACxB,UAAM,UAA2B;AAAA,MAC/B,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,IACjB;AAEA,QAAI,KAAK,SAAS;AAChB,cAAQ,UAAU,KAAK;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AACF;AAMA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAoC;AACtD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IAAI,QAAQ;AACxE;AAEA,SAAS,WAAW,OAAoC;AACtD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,uBAAuB,OAI9B;AACA,QAAM,UAA2B,CAAC;AAClC,QAAM,OAAyB,CAAC;AAChC,QAAM,eAAe,SAAS,MAAM,YAAY,IAAI,MAAM,eAAe;AACzE,QAAM,YAAY,cAAc;AAChC,QAAM,eAAe,SAAS,SAAS,IAAI,YAAY;AACvD,QAAM,cAAc,SAAS,cAAc,IAAI,IAAI,aAAa,OAAO;AACvE,QAAM,SACJ,WAAW,cAAc,MAAM,KAC/B,WAAW,cAAc,IAAI;AAC/B,QAAM,SAAS,WAAW,cAAc,MAAM;AAC9C,QAAM,YACJ,WAAW,aAAa,SAAS,KACjC,WAAW,cAAc,SAAS,KAClC,WAAW,cAAc,SAAS;AACpC,QAAM,SACJ,WAAW,cAAc,MAAM,KAC/B,WAAW,cAAc,MAAM,KAC/B,MAAM;AACR,QAAM,iBAAiB,WAAW,cAAc,OAAO;AAEvD,MAAI,WAAW,QAAW;AACxB,YAAQ,SAAS;AAAA,EACnB;AAEA,MAAI,WAAW,QAAW;AACxB,YAAQ,SAAS;AAAA,EACnB;AAEA,MAAI,cAAc,QAAW;AAC3B,YAAQ,YAAY;AACpB,SAAK,YAAY;AAAA,EACnB;AAEA,MAAI,WAAW,QAAW;AACxB,YAAQ,SAAS;AACjB,SAAK,SAAS;AAAA,EAChB;AAEA,SAAO;AAAA,IACL,SAAS,kBAAkB,MAAM;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,WAAW,OAA0B;AACnD,MAAI,iBAAiB,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,gBAAgB;AACnC,UAAM,WAAW,uBAAuB,KAAK;AAE7C,WAAO,IAAI,SAAS,MAAM,MAAM,SAAS,SAAS,SAAS,OAAO;AAAA,EACpE;AAEA,MAAI,iBAAiB,OAAO;AAC1B,WAAO,IAAI,SAAS,gBAAgB,MAAM,IAAI,KAAK,iBAAiB,MAAM,OAAO;AAAA,EACnF;AAEA,SAAO,IAAI,SAAS,iBAAiB,eAAe;AACtD;AAEO,SAAS,YAAY,OAAwB;AAClD,SAAO,WAAW,KAAK,EAAE;AAC3B;AAEO,SAAS,kBACd,OACA,OAAc,CAAC,GAC4B;AAC3C,QAAM,WAAW,WAAW,KAAK;AACjC,QAAM,eACJ,iBAAiB,iBACb,uBAAuB,KAAK,EAAE,OAC9B,CAAC;AAEP,SAAO,eAAe,SAAS,OAAO,GAAG,EAAE,GAAG,cAAc,GAAG,KAAK,CAAU;AAChF;AAEO,SAAS,mBAAmB,OAAwB;AACzD,SAAO,WAAW,KAAK,EAAE;AAC3B;AAEO,SAAS,mBACd,OACA,OAAc,CAAC,GACP;AACR,SAAO,KAAK,UAAU,kBAAkB,OAAO,IAAI,CAAC;AACtD;;;ACjKA,SAAS,aAAa,OAAqC;AACzD,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,aAAa,OAAwC;AAC5D,SAAO,aAAa,KAAK,IAAI,QAAQ;AACvC;AAEA,SAAS,cAAc,OAAoC;AACzD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IAAI,QAAQ;AACxE;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AACvD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,GAAG;AACxD,UAAM,SAAS,OAAO,KAAK;AAC3B,QAAI,OAAO,SAAS,MAAM,GAAG;AAC3B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,uBAAuB;AAAA,EAC3B;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ,WAAW;AAAA,IAC7B,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,UAAU,aAAa;AAAA,IACjC,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,oBAAoB;AAAA,YACtB;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,oBAAoB;AAAA,cACpB,gBAAgB;AAAA,YAClB;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,gBAAgB;AAAA,cAChB,oBAAoB;AAAA,cACpB,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,aAAa;AAAA,YACf;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,gBAAgB;AAAA,cAChB,oBAAoB;AAAA,cACpB,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,aAAa;AAAA,YACf;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,gBAAgB;AAAA,YAClB;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,gBAAgB;AAAA,YAClB;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ,WAAW;AAAA,IAC7B,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,UAAU,aAAa;AAAA,IACjC,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,EAAE,IAAI,GAAG,MAAM,OAAO,OAAO,UAAU;AAAA,cACvC,EAAE,IAAI,GAAG,MAAM,UAAU,OAAO,UAAU;AAAA,cAC1C,EAAE,IAAI,GAAG,MAAM,QAAQ,OAAO,SAAS;AAAA,YACzC;AAAA,YACA,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,YACxB,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,EAAE,IAAI,GAAG,MAAM,SAAS,OAAO,UAAU;AAAA,cACzC,EAAE,IAAI,GAAG,MAAM,SAAS,OAAO,UAAU;AAAA,cACzC,EAAE,IAAI,GAAG,MAAM,QAAQ,OAAO,UAAU;AAAA,YAC1C;AAAA,YACA,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,YACxB,cAAc;AAAA,cACZ,aAAa;AAAA,cACb,gBAAgB;AAAA,gBACd,MAAM;AAAA,gBACN,YAAY,CAAC,GAAG,GAAG,CAAC;AAAA,gBACpB,qBAAqB;AAAA,gBACrB,oBAAoB;AAAA,gBACpB,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,EAAE,IAAI,GAAG,MAAM,QAAQ,OAAO,UAAU;AAAA,cACxC,EAAE,IAAI,GAAG,MAAM,eAAe,OAAO,UAAU;AAAA,cAC/C,EAAE,IAAI,GAAG,MAAM,QAAQ,OAAO,UAAU;AAAA,YAC1C;AAAA,YACA,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,YACxB,cAAc;AAAA,cACZ,aAAa;AAAA,cACb,gBAAgB;AAAA,gBACd,MAAM;AAAA,gBACN,qBAAqB;AAAA,gBACrB,qBAAqB;AAAA,gBACrB,eAAe;AAAA,gBACf,aAAa;AAAA,gBACb,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ,WAAW;AAAA,IAC7B,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,aAAa,gBAAgB;AAAA,IACvC,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,oBAAoB;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,oBAAoB;AAAA,YACpB,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,cAAc;AAAA,cACZ;AAAA,gBACE,aAAa;AAAA,gBACb,cAAc;AAAA,gBACd,YAAY;AAAA,gBACZ,OAAO;AAAA,cACT;AAAA,YACF;AAAA,YACA,mBAAmB;AAAA,cACjB;AAAA,gBACE,IAAI;AAAA,gBACJ,WAAW;AAAA,gBACX,SAAS;AAAA,gBACT,QAAQ;AAAA,cACV;AAAA,YACF;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,WAAW,cAAc;AAAA,IACnC,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,aACE;AAAA,YACF,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,aAAa;AAAA,YACb,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,oBAAoB;AAAA,YACtB;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,aACE;AAAA,YACF,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,mBAAmB;AAAA,cACjB,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,YACA,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,aAAa;AAAA,YACb,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,UAAU,aAAa;AAAA,IACjC,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,aAAa;AAAA,IACb,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,oBAAoB;AAAA,YACpB,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,oBAAoB;AAAA,YACpB,uBAAuB,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS,CAAC,YAAY,eAAe;AAAA,IACrC,aACE;AAAA,IACF,UACE;AAAA,IACF,iBAAiB;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,gBAAgB;AAAA,YAChB,sBAAsB;AAAA,YACtB,mBAAmB;AAAA,YACnB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,gBAAgB;AAAA,YAChB,sBAAsB;AAAA,YACtB,mBAAmB;AAAA,YACnB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,6BAA6B,IAAI;AAAA,EACrC,qBAAqB;AAAA,IAAQ,CAAC,eAC5B,WAAW,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,EAAE,YAAY,GAAG,UAAU,CAAU;AAAA,EACrF;AACF;AAEA,IAAM,iCAAiC,IAAI;AAAA,EACzC,qBAAqB,IAAI,CAAC,eAAe,CAAC,WAAW,WAAW,UAAU,CAAU;AACtF;AAEA,IAAM,0BACJ;AAEK,SAAS,gCAAsE;AACpF,SAAO;AACT;AAEO,SAAS,uBAAsD;AACpE,SAAO,qBAAqB,IAAI,CAAC,eAAe,WAAW,GAAG;AAChE;AAEO,SAAS,yBAAiC;AAC/C,SAAO,qBAAqB,EAAE,KAAK,IAAI;AACzC;AAEO,SAAS,uBACd,OACuC;AACvC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SAAO,2BAA2B,IAAI,MAAM,KAAK,EAAE,YAAY,CAAC;AAClE;AAEO,SAAS,kCACd,WACuC;AACvC,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,SAAO,+BAA+B,IAAI,SAAS;AACrD;AAEO,SAAS,yBAAyB,OAAuB;AAC9D,QAAM,aAAa,uBAAuB,KAAK;AAE/C,MAAI,YAAY;AACd,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,SAAS,KAAK,KAAK,KAAK,CAAC,MAAM,SAAS,OAAO,GAAG;AACpD,WAAO,GAAG,MAAM,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;AAAA,EAC1D;AAEA,SAAO;AACT;AAEO,SAAS,+BAA+B,MAAoB;AACjE,MAAI,CAAC,kCAAkC,IAAI,GAAG;AAC5C,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2BAA2B,IAAI,mBAAmB,uBAAuB,CAAC;AAAA,IAC5E;AAAA,EACF;AACF;AASA,SAAS,uBAAuB,SAA4C;AAC1E,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,QAAI,CAAC,aAAa,KAAK,GAAG;AACxB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,KAAK,cAAc,MAAM,EAAE;AACjC,UAAM,OAAO,cAAc,MAAM,IAAI,KAAK,cAAc,MAAM,KAAK;AACnE,UAAM,QAAQ,cAAc,MAAM,KAAK,KAAK;AAE5C,QAAI,OAAO,UAAa,CAAC,MAAM;AAC7B,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,CAAC,EAAE,IAAI,MAAM,MAAM,CAAC;AAAA,EAC7B,CAAC;AACH;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,QAAM,uBAAuB,aAAa,MAAM,oBAAoB,KAAK,CAAC;AAC1E,QAAM,SAAS,aAAa,MAAM,MAAM;AACxC,QAAM,cAAc,MAAM,QAAQ,MAAM,OAAO,IAAI,MAAM,UAAU;AACnE,QAAM,gBAAgB,MAAM,QAAQ,qBAAqB,OAAO,IAC5D,qBAAqB,UACrB,MAAM,QAAQ,QAAQ,OAAO,IAC3B,OAAO,UACP;AACN,QAAM,gBAAgB;AAAA,IACpB,kBACG,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC;AAAA,EACjD;AAEA,MAAI,cAAc,WAAW,GAAG;AAC9B,UAAM,IAAI,SAAS,qBAAqB,uBAAuB;AAAA,EACjE;AAEA,QAAM,EAAE,SAAS,UAAU,sBAAsB,uBAAuB,GAAG,KAAK,IAAI;AACpF,QAAM,eACJ,QAAQ,gBAAgB,MAAM,gBAAgB,qBAAqB;AACrE,QAAM,wBACJ,QAAQ,yBAAyB,qBAAqB;AACxD,QAAM,eAAe,QAAQ,gBAAgB,qBAAqB;AAElE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAI,UAAU,CAAC;AAAA,MACf,SAAS;AAAA,MACT,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,MACrD,GAAI,0BAA0B,SAAY,EAAE,sBAAsB,IAAI,CAAC;AAAA,MACvE,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,0BAA0B,OAA+B;AAChE,QAAM,uBAAuB,aAAa,MAAM,oBAAoB,KAAK,CAAC;AAC1E,QAAM,SAAS,aAAa,MAAM,MAAM,KAAK,CAAC;AAC9C,QAAM,eACJ,OAAO,gBAAgB,MAAM,gBAAgB,qBAAqB;AACpE,QAAM,qBACJ,OAAO,sBACP,MAAM,sBACN,qBAAqB;AACvB,QAAM,iBACJ,OAAO,kBAAkB,MAAM,kBAAkB,qBAAqB;AACxE,QAAM,eACJ,OAAO,gBAAgB,MAAM,gBAAgB,qBAAqB;AACpE,QAAM,eACJ,OAAO,gBAAgB,MAAM,gBAAgB,qBAAqB;AACpE,QAAM,oBACJ,OAAO,qBACP,MAAM,qBACN,qBAAqB;AACvB,QAAM,wBACJ,OAAO,yBACP,MAAM,yBACN,qBAAqB;AAEvB,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,EACL;AAEA,aAAW,SAAS;AAAA,IAClB,GAAG;AAAA,IACH,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,IACrD,GAAI,uBAAuB,SAAY,EAAE,mBAAmB,IAAI,CAAC;AAAA,IACjE,GAAI,mBAAmB,SAAY,EAAE,eAAe,IAAI,CAAC;AAAA,IACzD,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,IACrD,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,IACrD,GAAI,sBAAsB,SAAY,EAAE,kBAAkB,IAAI,CAAC;AAAA,IAC/D,GAAI,0BAA0B,SAAY,EAAE,sBAAsB,IAAI,CAAC;AAAA,EACzE;AAEA,QAAM,mBAAmB,aAAa,WAAW,MAAM,KAAK,CAAC;AAE7D,MACE,CAAC,cAAc,iBAAiB,YAAY,KAC5C,CAAC,cAAc,iBAAiB,kBAAkB,GAClD;AACA,UAAM,aAAa,uBAAuB,WAAW;AACrD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,yFAAyF,WAAW,QAAQ;AAAA,IAC9G;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,6BAA6B,oBAAI,IAAI,CAAC,WAAW,OAAO,CAAC;AAE/D,SAAS,yBAAyB,OAA+B;AAC/D,QAAM,uBAAuB,aAAa,MAAM,oBAAoB,KAAK,CAAC;AAC1E,QAAM,SAAS,aAAa,MAAM,MAAM,KAAK,CAAC;AAC9C,QAAM,iBACJ,OAAO,kBAAkB,MAAM,kBAAkB,qBAAqB;AACxE,QAAM,uBACJ,OAAO,wBACP,MAAM,wBACN,qBAAqB;AACvB,QAAM,oBACJ,OAAO,qBACP,MAAM,qBACN,qBAAqB;AACvB,QAAM,YACJ,OAAO,aAAa,MAAM,aAAa,qBAAqB;AAE9D,QAAM;AAAA,IACJ,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAI,mBAAmB,SAAY,EAAE,eAAe,IAAI,CAAC;AAAA,MACzD,GAAI,yBAAyB,SAAY,EAAE,qBAAqB,IAAI,CAAC;AAAA,MACrE,GAAI,sBAAsB,SAAY,EAAE,kBAAkB,IAAI,CAAC;AAAA,MAC/D,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,mBAAmB,aAAa,WAAW,MAAM,KAAK,CAAC;AAC7D,QAAM,aAAa,uBAAuB,UAAU;AAEpD,MACE,CAAC,cAAc,iBAAiB,cAAc,KAC9C,CAAC,cAAc,iBAAiB,oBAAoB,KACpD,CAAC,cAAc,iBAAiB,iBAAiB,KACjD,CAAC,cAAc,iBAAiB,SAAS,GACzC;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8HAA8H,WAAW,QAAQ;AAAA,IACnJ;AAAA,EACF;AAEA,QAAM,iBAAiB,cAAc,iBAAiB,SAAS;AAC/D,MAAI,CAAC,2BAA2B,IAAI,cAAc,GAAG;AACnD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,gEAAgE,cAAc;AAAA,IAChF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,wBAAwB,OAA+B;AAC9D,QAAM,EAAE,QAAQ,SAAS,GAAG,KAAK,IAAI;AACrC,QAAM,0BAA0B,aAAa,MAAM,oBAAoB;AACvE,QAAM,YAAY,aAAa,MAAM,MAAM;AAC3C,QAAM,EAAE,QAAQ,mBAAmB,GAAG,qBAAqB,IACzD,2BAA2B,CAAC;AAC9B,QAAM,EAAE,QAAQ,eAAe,GAAG,OAAO,IAAI,aAAa,CAAC;AAC3D,QAAM,cACJ,OAAO,eACP,KAAK,eACL,KAAK,cACL,qBAAqB,eACrB,qBAAqB;AAEvB,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,EACL;AAEA,aAAW,SAAS;AAAA,IAClB,GAAG;AAAA,IACH,GAAI,gBAAgB,SAAY,EAAE,YAAY,IAAI,CAAC;AAAA,IACnD,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,OAAO,wBAAwB,SAC/B,EAAE,qBAAqB,OAAO,oBAAoB,IAClD,CAAC;AAAA,IACL,GAAI,OAAO,sBAAsB,SAC7B,EAAE,mBAAmB,OAAO,kBAAkB,IAC9C,CAAC;AAAA,IACL,GAAI,OAAO,0BAA0B,SACjC,EAAE,uBAAuB,OAAO,sBAAsB,IACtD,CAAC;AAAA,EACP;AAEA,QAAM,mBAAmB,aAAa,WAAW,MAAM,KAAK,CAAC;AAE7D,MAAI,CAAC,cAAc,iBAAiB,WAAW,GAAG;AAChD,UAAM,aAAa,uBAAuB,SAAS;AACnD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,6DAA6D,WAAW,QAAQ;AAAA,IAClF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kCAAkC,OAA+B;AAC/E,QAAM,UAAU,cAAc,MAAM,IAAI;AACxC,QAAM,iBAAiB,UAAU,yBAAyB,OAAO,IAAI;AACrE,QAAM,aAAa,kCAAkC,cAAc;AAEnE,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,QAAM,qBAAiC;AAAA,IACrC,GAAG;AAAA,IACH,MAAM,WAAW;AAAA,EACnB;AAEA,UAAQ,WAAW,KAAK;AAAA,IACtB,KAAK;AACH,aAAO,uBAAuB,kBAAkB;AAAA,IAClD,KAAK;AACH,aAAO,0BAA0B,kBAAkB;AAAA,IACrD,KAAK;AACH,aAAO,wBAAwB,kBAAkB;AAAA,IACnD,KAAK;AACH,aAAO,yBAAyB,kBAAkB;AAAA,IACpD,KAAK,mBAAmB;AACtB,YAAM,SAAS,aAAa,mBAAmB,MAAM,KAAK,CAAC;AAC3D,YAAM,qBACJ,OAAO,sBACP,mBAAmB,sBACnB;AACF,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ;AAAA,UACN,GAAG;AAAA,UACH;AAAA,UACA,GAAI,OAAO,0BAA0B,SACjC,EAAE,uBAAuB,OAAO,sBAAsB,IACtD,CAAC;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,kCACd,MACA,OACY;AACZ,QAAM,aAAa,kCAAkC,IAAI;AAEzD,MAAI,YAAY,QAAQ,WAAW;AACjC,WAAO,wBAAwB,KAAK;AAAA,EACtC;AAEA,SAAO;AACT;AAEO,SAAS,iCAAyC;AACvD,QAAM,WAAW,qBAAqB;AAAA,IACpC,CAAC,eACC,OAAO,WAAW,GAAG,KAAK,WAAW,WAAW;AAAA,WAAc,WAAW,QAAQ;AAAA,EACrF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,KAAK,uBAAuB,CAAC;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,wCAAwC,MAAsB;AAC5E,QAAM,aAAa,kCAAkC,IAAI;AAEzD,MAAI,CAAC,YAAY;AACf,WAAO,mCAAmC,IAAI,mBAAmB,uBAAuB,CAAC;AAAA,EAC3F;AAEA,SAAO,mCAAmC,WAAW,GAAG,0BAA0B,WAAW,QAAQ;AACvG;;;AC3+BO,SAAS,oBAAoB,SAAyC;AAC3E,SAAO;AAAA,IACL,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,KAAK,QAAQ;AAAA,IACb,UAAU,QAAQ;AAAA,EACpB;AACF;AAEO,SAAS,qBAAqB,UAAgE;AACnG,SAAO,SAAS,IAAI,CAAC,YAAY,oBAAoB,OAAO,CAAC;AAC/D;AAEA,IAAM,cAAc;AAEpB,IAAM,mBAA8D;AAAA,EAClE,iBAAiB,qBAAqB;AAAA,IACpC;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcZ;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZ;AAAA,EACF,CAAC;AAAA,EACD,mBAAmB,qBAAqB;AAAA,IACtC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ;AAAA,EACF,CAAC;AAAA,EACD,mBAAmB,qBAAqB;AAAA,IACtC;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,EACF,CAAC;AAAA,EACD,eAAe,qBAAqB;AAAA,IAClC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA,IAGZ;AAAA,EACF,CAAC;AAAA,EACD,eAAe,qBAAqB;AAAA,IAClC;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaZ;AAAA,EACF,CAAC;AAAA,EACD,mBAAmB,qBAAqB;AAAA,IACtC;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB,qBAAqB;AAAA,IACrC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB,qBAAqB;AAAA,IACrC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,MAGL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6CZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,EACF,CAAC;AAAA,EACD,yBAAyB,qBAAqB;AAAA,IAC5C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,MAIL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP;AAAA,EACF,CAAC;AAAA,EACD,iBAAiB,qBAAqB;AAAA,IACpC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAmBZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB,qBAAqB;AAAA,IACrC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWP;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB,qBAAqB;AAAA,IACrC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,EACF,CAAC;AAAA,EACD,mBAAmB,qBAAqB;AAAA,IACtC;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB,qBAAqB;AAAA,IACrC;AAAA,MACE,aACE;AAAA,MACF,SAAS,gCAAgC,WAAW;AAAA,IACtD;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aACE;AAAA,MACF,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA,IAGZ;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aACE;AAAA,MACF,SAAS,8BAA8B,WAAW;AAAA,MAClD,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMP;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,MAIL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,EACF,CAAC;AAAA,EACD,4BAA4B,qBAAqB;AAAA,IAC/C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,EACF,CAAC;AAAA,EACD,4BAA4B,qBAAqB;AAAA,IAC/C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,EACF,CAAC;AAAA,EACD,+BAA+B,qBAAqB;AAAA,IAClD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,MAIL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,EACF,CAAC;AAAA,EACD,iCAAiC,qBAAqB;AAAA,IACpD;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,KAAK;AAAA;AAAA;AAAA,MAGL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,EACF,CAAC;AAAA,EACD,mBAAmB,qBAAqB;AAAA,IACtC;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWL,UAAU;AAAA;AAAA;AAAA,IAGZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMP;AAAA,EACF,CAAC;AAAA,EACD,wBAAwB,qBAAqB;AAAA,IAC3C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,MAIL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,EACF,CAAC;AAAA,EACD,wBAAwB,qBAAqB;AAAA,IAC3C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,MAGL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP;AAAA,EACF,CAAC;AAAA,EACD,6BAA6B,qBAAqB;AAAA,IAChD;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,MAKL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMP;AAAA,EACF,CAAC;AAAA,EACD,2BAA2B,qBAAqB;AAAA,IAC9C;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgCP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0CP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyCP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsDP;AAAA,EACF,CAAC;AAAA,EACD,2BAA2B,qBAAqB;AAAA,IAC9C;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBP;AAAA,IACA;AAAA,MACE,aACE;AAAA,MACF,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP;AAAA,EACF,CAAC;AAAA,EACD,sCAAsC,qBAAqB;AAAA,IACzD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP;AAAA,EACF,CAAC;AAAA,EACD,sCAAsC,qBAAqB;AAAA,IACzD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,MAGL,UAAU;AAAA;AAAA;AAAA;AAAA,IAIZ;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA,IAIP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA,IAGP;AAAA,EACF,CAAC;AAAA,EACD,oCAAoC,qBAAqB;AAAA,IACvD;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBP;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SACE;AAAA,MACF,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,qBAAqB;AAAA,IACnC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA4BZ;AAAA,EACF,CAAC;AAAA,EACD,eAAe,qBAAqB;AAAA,IAClC;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["text","Command","isRecord","toStringValue","readFileSync","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","isJsonObject","segment","readFileSync","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","readFileSync","isEmptyObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","segment","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","readRawObject","readFileSync","isEmptyObject","getCommandIo","emitJson","parseUuidOrSlugSelector","ensureWritable","layout","writeLine","readFileSync","writeFileSync","InvalidArgumentError","jsonOptions","selectorValue","segment","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","isEmptyObject","parseJsonValue","readTextFile","readFileSync","readJsonObjectOption","writeFileSync","readFileSync","writeFileSync","basename","InvalidArgumentError","selectorValue","getCommandIo","writeLine","writeBinary","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isRecord","readLocalFile","readFileSync","writeDownloadedFile","writeFileSync","basename","InvalidArgumentError","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","readFileSync","resolveFolder","folderRows","getCommandIo","writeLine","getGlobalOptions","emitJson","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","parseNonNegativeInteger","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","toTableRows","emitTable","readFileSync","InvalidArgumentError","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","resolveSchemaSelector","readFileSync","InvalidArgumentError","jsonOptions","selectorValue","getCommandIo","writeLine","getGlobalOptions","emitJson","toConfigurationError","ensureWritable","parseUuidOrSlugSelector","InvalidArgumentError","parseNonNegativeInteger","isJsonObject","parseRawJsonObject","readRawObject","readFileSync","isEmptyObject","toTableRows","emitTable","resolveFolderSelector","require","Command","mkdirSync","readFileSync","writeFileSync","homedir","basename","dirname","join","join","basename","dirname","readFileSync","mkdirSync","writeFileSync","homedir"]}