[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"kimmdy config","$id":"https://raw.githubusercontent.com/graeter-group/kimmdy/main/src/kimmdy/kimmdy-yaml-schema.json","additionalProperties":false,"required":["sequence","changer"],"properties":{"slurm":{"title":"slurm","type":"object","description":"SLURM HPC options","properties":{"N":{"type":"integer","description":"Number of nodes","pytype":"int","default":1},"ntasks_per_node":{"type":"integer","description":"n tasks per node","pytype":"int","default":20},"mincpus":{"type":"integer","description":"mincpus","pytype":"int","default":20},"cpus_per_task":{"type":"integer","description":"cpus per task","pytype":"int","default":1},"gpus":{"type":"integer","description":"n gpus","pytype":"int","default":1},"runcmd":{"type":"string","description":"Command to (re)submit the jobscript. Default is `sbatch`. For local testing replace with an empty string do run the jobscript directly.","pytype":"str","default":"sbatch"},"partition":{"type":"string","description":"HPC partition","pytype":"str","default":"<your-partition>"}},"additionalProperties":false},"dryrun":{"title":"dryrun","description":"Don't run the actual simulations, just print the tasks","type":"boolean","pytype":"bool","default":false},"just_sample":{"title":"just sample","description":"Don't execute the recipes returned by the chosen reaction, just get the rates (and choose one). KIMMDY will exit after reactions have been queried for the first time in the sequence.","type":"boolean","pytype":"bool","default":false},"parameterize_at_setup":{"title":"parameterize_at_setup","description":"parameterize the topology during the setup task","type":"boolean","pytype":"bool","default":true},"cwd":{"title":"cwd","description":"Working directory. Default is current working directory","type":"string","pytype":"Path"},"name":{"title":"name","description":"Used for output folder if `out` is not specified","type":"string","pytype":"str","default":"kimmdy"},"out":{"title":"out","description":"Output folder","type":"string","pytype":"Path"},"log":{"title":"log","type":"object","description":"Settings for logging","additionalProperties":false,"properties":{"file":{"description":"Logfile name (will result in a path relative to `out`)","type":"string","pytype":"str","default":"kimmdy.log"},"level":{"description":"Loglevel","type":"string","pytype":"str","default":"INFO","enum":["DEBUG","INFO","WARNING","ERROR","CRITICAL"]}}},"max_tasks":{"title":"max_tasks","description":"Maximum number of tasks to run. This is useful when a task in the sequence can dymanically add more tasks. 0 means no limit.","type":"integer","pytype":"int","default":0},"max_hours":{"title":"max_hours","description":"Stop KIMMDY after max_hours hours. Set this lower than the limit of your HPC cluster for use with a re-submit jobscript. 0 Means no limit.","type":"integer","pytype":"int","default":0},"kmc":{"title":"kmc","description":"KMC algorithm overwrite. Should be set by the reactions, but can be changed here. Not all reactions may support all algorithms.","type":"string","pytype":"str","enum":["","rfkmc","frm","extrande","extrande_mod","multi_rfkmc","dummy_first"],"default":""},"multi_kmc":{"title":"multi_kmc","description":"Number of reactions to be executed in one step by a `multi` variant of a KMC algorithm.","type":"integer","pytype":"int","default":1},"tau_scale":{"title":"tau_scale","description":"Scaling parameter for tau in the extrande kmc algorithm.","type":"number","pytype":"float","default":"1.0"},"top":{"title":"top","description":"Topology file","type":"string","pytype":"Path","default":"topol.top"},"topology":{"title":"topology","type":"object","description":"Settings for handling the topology file.","properties":{"reactive":{"title":"reactive","type":"object","description":"Specify what moleculetypes will be part of the Reactive moleculetype. By default, solvent and ions are excluded.","properties":{"include":{"description":"Explicitly include a moleculetype or list of moleculetypes as a space-separated string.","type":"string","pytype":"str","default":""},"exclude":{"description":"Explicitly exclude a moleculetype or a list as a space-separated string. For example the lipid moleculetype in a bilayer simulation e.g. `DPPC POPC'`","type":"string","pytype":"str","default":""},"nrexcl":{"description":"Explictly set the nrexcl value for the Reactive moleculetype. By default the value is taken from the first found reactive moleculetype.","type":"integer","pytype":"int"}}}}},"gro":{"title":"gro","description":"Coordinate file","type":"string","pytype":"Path","default":"conf.gro"},"ndx":{"title":"ndx","description":"Gromaxs index file","type":"string","pytype":"Path","default":"index.ndx"},"edissoc":{"title":"edissoc","description":"File with additional dissociation energy terms. This is used for the homolysis and hydrolysis reactions.","type":"string","pytype":"Path","default":"edissoc.dat"},"grompp_prefix":{"title":"grompp_prefix","description":"Prefix command for grompp execution on non MPI compiled clusters, e.g., 'srun --ntasks=1'.","type":"string","pytype":"str","default":""},"gromacs_alias":{"title":"gromacs_alias","description":"Gromacs alias. e.g. `gmx` or `mpirun gmx_mpi`","type":"string","pytype":"str","default":"gmx"},"mdrun_prefix":{"title":"mdrun_prefix","description":"Prefix command for mdrun execution on non MPI compiled clusters, e.g., 'srun --ntasks=1'.","type":"string","pytype":"str","default":""},"gmx_mdrun_flags":{"title":"gmx_mdrun_flags","description":"Flags passed to gmx mdrun. Default `-maxh 24 -dlb yes`","type":"string","pytype":"str","default":"-maxh 24 -dlb yes"},"ff":{"title":"ff","description":"Force field directory (looks for .ff in cwd if not set)","type":"string","pytype":"Path","default":"*.ff"},"residuetypes":{"title":"residuetypes","description":"GROMACS rtp file that contains residuetypes. Looks for `aminoacids.rtp` it not set. KIMMDY will first look in the current working directory and then relative to the forecfield directory.","type":"string","pytype":"Path"},"radicals":{"title":"radicals","description":"space-separated string of radical atom ids, can be empty","type":"string","pytype":"str"},"plumed":{"title":"plumed","description":".dat file containing plumed config","type":"string","pytype":"Path"},"tpr":{"title":"tpr","description":".tpr file of a finished simulation for starting directly with a reaction","type":"string","pytype":"Path"},"trr":{"title":"trr","description":".trr file of a finished simulation for starting directly with a reaction","type":"string","pytype":"Path"},"xtc":{"title":"xtc","description":".xtc file of a finished simulation for starting directly with a reaction","type":"string","pytype":"Path"},"mdp":{"title":"mdp","description":".mdp file of a finished simulation for starting directly with a reaction","type":"string","pytype":"Path"},"edr":{"title":"edr","deprecated":true,"description":"This is deprecated and no longer required."},"restart":{"title":"restart","type":"boolean","description":"Restart or continue from a previous run (in config.out) instead of starting from scratch","pytype":"bool","default":false},"mds":{"title":"mds","type":"object","description":"Settings for MD steps, e.g. mdp files, plumed files, etc.","patternProperties":{".*":{"type":"object","description":"Name of an MD step","properties":{"mdp":{"type":"string","pytype":"Path","description":"MDP file for the MD step"},"use_plumed":{"type":"boolean","pytype":"bool","default":false,"description":"Whether plumed should be used for this run or not"}},"required":["mdp"],"additionalProperties":false}}},"changer":{"title":"changer","type":"object","description":"Settings for applying a reaction recipe","properties":{"coordinates":{"title":"coordinates","type":"object","description":"Settings related to coordinate/geometry changes when applying a recipe","properties":{"md":{"type":"string","description":"MD step from the 'mds' section that is used for relaxation MDs","pytype":"str"},"slow_growth_pairs":{"deprecated":true,"description":"This is deprecated. Specify in `config.changer.coordinates.slow_growth` instead."},"slow_growth":{"type":"string","description":"Whether the chosen MD step is a slow growth/free-energy simulation to relax after applying a reaction recipe. `true` and `yes` are equivalent to `full` for backwards compatibility. `morse_only` disables using pairs to transition non-bonded interactions as well and only uses morse bonds to emulate simple non-bonded interactions. The empty string means no slow growth.","pytype":"str","enum":["yes","true","full","morse_only",""],"default":""}}},"topology":{"title":"topology","type":"object","description":"Settings for parameter changes in the topology file","properties":{"break_plumed":{"type":"boolean","description":"Whether to remove bonds from the plumed.dat input file when applying a reaction recipe that breaks a bond. Unless needed for performance optimization, this can be left at `false`, because the homolysis plugin in kimmdy-reactions also cheeckts to not break non-existing bonds by default (which can be turned off).","pytype":"bool","default":false},"parameterization":{"type":"string","description":"Parameterization scheme that is used on the topology file after changes to it","pytype":"str","enum":["grappa","basic"],"default":"basic"},"parameterization_kwargs":{"type":"object","description":"Keyword argument container for the selected parameterization scheme","additionalProperties":true}},"additionalProperties":false}},"required":["coordinates","topology"]},"sequence":{"title":"sequence","description":"List of tasks. Each task can be a string (the name of the task) or an object with the task name and a multiplicity `mult: <int>`","pytype":"Sequence","type":"array","items":{"oneOf":[{"type":"string"},{"type":"object","properties":{"mult":{"type":"integer","description":"Multiplicity of the task","default":2,"minimum":1},"tasks":{"type":"array","description":"List of tasks","items":{"oneOf":[{"type":"string"},{"type":"object","properties":{"mult":{"type":"integer","description":"Multiplicity of the task","default":2,"minimum":1},"tasks":{"type":"array","description":"List of tasks","items":{"type":"string"}}},"required":["mult","tasks"],"additionalProperties":false}]}}},"required":["mult","tasks"],"additionalProperties":false}]}},"reactions":{"title":"reactions","type":"object","description":"Settings for reactions","additionalProperties":true,"properties":{"homolysis":{"$ref":"https://raw.githubusercontent.com/graeter-group/kimmdy-reactions/main/src/homolysis/kimmdy-yaml-schema.json"},"hat_naive":{"$ref":"https://raw.githubusercontent.com/graeter-group/kimmdy-reactions/main/src/hat_naive/kimmdy-yaml-schema.json"},"dummyreaction":{"$ref":"https://raw.githubusercontent.com/graeter-group/kimmdy-reactions/main/src/dummyreaction/kimmdy-yaml-schema.json"}}},"save_recipes":{"title":"save_recipes","description":"Save recipes as csv during the reactions step","type":"boolean","pytype":"bool","default":true}}}
</schema>

[User] Provide a JSON object that satisfies the schema "kimmdy config". Here are the required top‑level fields: sequence, changer. Return only the valid JSON object.

kimmdy config

slurm

SLURM HPC options

Number of nodes

n tasks per node

mincpus

cpus per task

n gpus

Command to (re)submit the jobscript. Default is `sbatch`. For local testing replace with an empty string do run the jobscript directly.

HPC partition

dryrun

Don't run the actual simulations, just print the tasks

just sample

Don't execute the recipes returned by the chosen reaction, just get the rates (and choose one). KIMMDY will exit after reactions have been queried for the first time in the sequence.

parameterize_at_setup

parameterize the topology during the setup task

cwd

Working directory. Default is current working directory

name

Used for output folder if `out` is not specified

out

Output folder

log

Settings for logging

Logfile name (will result in a path relative to `out`)

Loglevel

max_tasks

Maximum number of tasks to run. This is useful when a task in the sequence can dymanically add more tasks. 0 means no limit.

max_hours

Stop KIMMDY after max_hours hours. Set this lower than the limit of your HPC cluster for use with a re-submit jobscript. 0 Means no limit.

kmc

KMC algorithm overwrite. Should be set by the reactions, but can be changed here. Not all reactions may support all algorithms.

multi_kmc

Number of reactions to be executed in one step by a `multi` variant of a KMC algorithm.

tau_scale

Scaling parameter for tau in the extrande kmc algorithm.

top

Topology file

topology

Settings for handling the topology file.

reactive

Specify what moleculetypes will be part of the Reactive moleculetype. By default, solvent and ions are excluded.

Explicitly include a moleculetype or list of moleculetypes as a space-separated string.

Explicitly exclude a moleculetype or a list as a space-separated string. For example the lipid moleculetype in a bilayer simulation e.g. `DPPC POPC'`

Explictly set the nrexcl value for the Reactive moleculetype. By default the value is taken from the first found reactive moleculetype.

gro

Coordinate file

ndx

Gromaxs index file

edissoc

File with additional dissociation energy terms. This is used for the homolysis and hydrolysis reactions.

grompp_prefix

Prefix command for grompp execution on non MPI compiled clusters, e.g., 'srun --ntasks=1'.

gromacs_alias

Gromacs alias. e.g. `gmx` or `mpirun gmx_mpi`

mdrun_prefix

Prefix command for mdrun execution on non MPI compiled clusters, e.g., 'srun --ntasks=1'.

gmx_mdrun_flags

Flags passed to gmx mdrun. Default `-maxh 24 -dlb yes`

ff

Force field directory (looks for .ff in cwd if not set)

residuetypes

GROMACS rtp file that contains residuetypes. Looks for `aminoacids.rtp` it not set. KIMMDY will first look in the current working directory and then relative to the forecfield directory.

radicals

space-separated string of radical atom ids, can be empty

plumed

.dat file containing plumed config

tpr

.tpr file of a finished simulation for starting directly with a reaction

trr

.trr file of a finished simulation for starting directly with a reaction

xtc

.xtc file of a finished simulation for starting directly with a reaction

mdp

.mdp file of a finished simulation for starting directly with a reaction

edr

This is deprecated and no longer required.

restart

Restart or continue from a previous run (in config.out) instead of starting from scratch

mds

Settings for MD steps, e.g. mdp files, plumed files, etc.

Name of an MD step

MDP file for the MD step

Whether plumed should be used for this run or not

changer

Settings for applying a reaction recipe

coordinates

Settings related to coordinate/geometry changes when applying a recipe

MD step from the 'mds' section that is used for relaxation MDs

This is deprecated. Specify in `config.changer.coordinates.slow_growth` instead.

Whether the chosen MD step is a slow growth/free-energy simulation to relax after applying a reaction recipe. `true` and `yes` are equivalent to `full` for backwards compatibility. `morse_only` disables using pairs to transition non-bonded interactions as well and only uses morse bonds to emulate simple non-bonded interactions. The empty string means no slow growth.

topology

Settings for parameter changes in the topology file

Whether to remove bonds from the plumed.dat input file when applying a reaction recipe that breaks a bond. Unless needed for performance optimization, this can be left at `false`, because the homolysis plugin in kimmdy-reactions also cheeckts to not break non-existing bonds by default (which can be turned off).

Parameterization scheme that is used on the topology file after changes to it

Keyword argument container for the selected parameterization scheme

sequence

List of tasks. Each task can be a string (the name of the task) or an object with the task name and a multiplicity `mult: <int>`

Multiplicity of the task

List of tasks

Multiplicity of the task

List of tasks

reactions

Settings for reactions

save_recipes

Save recipes as csv during the reactions step

Provide a JSON object that satisfies the schema "kimmdy config". Here are the required top‑level fields: sequence, changer. Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://json.schemastore.org/kode-ci-build-1.0.0.json","additionalProperties":false,"definitions":{"env":{"type":"object","required":["name","value"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"\ud658\uacbd\ubcc0\uc218 \uc774\ub984","pattern":"[a-zA-Z_][a-zA-Z_0-9]*"},"value":{"type":"string","description":"\ud658\uacbd\ubcc0\uc218 \uac12"},"branch":{"type":"string","description":"\ud658\uacbd\ubcc0\uc218\ub97c \uc801\uc6a9\ud560 \ube0c\ub79c\uce58"}}},"build-condition":{"type":"object","description":"\ube4c\ub4dc \uc2e4\ud589 \uc870\uac74","additionalProperties":true,"properties":{"push":{"type":"object","description":"Push \uc774\ubca4\ud2b8\uc5d0 \uc758\ud55c \uc870\uac74","properties":{"branches":{"type":"array","items":{"type":"string"},"default":["*"],"description":"Push \ube4c\ub4dc\uc758 branch \uc870\uac74","minItems":1},"tags":{"type":"array","items":{"type":"string"},"default":["*"],"description":"Push \ube4c\ub4dc\uc758 tag \uc870\uac74","minItems":1},"commit":{"type":"object","properties":{"message-contain":{"type":"string","description":"commit message\uc5d0 \uc8fc\uc5b4\uc9c4 \ubb38\uc790\uc5f4\uc744 \ud3ec\ud568\ud55c \uacbd\uc6b0\ub9cc \ube4c\ub4dc"}}},"paths":{"type":"array","items":{"type":"string"},"default":[""],"description":"Push \ube4c\ub4dc\uc758 paths \uc870\uac74","minItems":1}},"dependencies":{"paths":["branches"]},"additionalProperties":false},"pull-request":{"type":"object","description":"PullRequest \uc774\ubca4\ud2b8\uc5d0 \uc758\ud55c \uc870\uac74","properties":{"branches":{"type":"array","items":{"type":"string"},"default":[""],"description":"PR\ube4c\ub4dc\uc758 target \ube0c\ub79c\uce58 \uc870\uac74","minItems":1},"types":{"type":"array","items":{"type":"string","enum":["assigned","unassigned","labeled","unlabeled","opened","edited","closed","reopened","synchronize","converted_to_draft","ready_for_review","locked","unlocked","review_requested","review_request_removed","auto_merge_enabled","auto_merge_disabled"]},"default":["opened","synchronize","reopened"],"description":"PR \uc774\ubca4\ud2b8 \ud0c0\uc785","minItems":1},"paths":{"type":"array","items":{"type":"string"},"default":[""],"description":"PullRequest \ube4c\ub4dc\uc758 paths \uc870\uac74","minItems":1}},"dependencies":{"paths":["branches"]},"additionalProperties":false},"manual":{"type":"object","description":"\uc218\ub3d9\ube4c\ub4dc \ub300\uc0c1\uc744 \uc704\ud55c \uc870\uac74","properties":{"branches":{"type":"array","items":{"type":"string"},"default":[""],"description":"\uc218\ub3d9\ube4c\ub4dc\uc758 \ub300\uc0c1\uc774 \ub418\ub294 \ube0c\ub79c\uce58 \uc870\uac74","minItems":1},"tags":{"type":"array","items":{"type":"string"},"default":[""],"description":"\uc218\ub3d9\ube4c\ub4dc\uc758 \ub300\uc0c1\uc774 \ub418\ub294 \ud0dc\uadf8 \uc870\uac74","minItems":1}},"additionalProperties":false},"schedule":{"type":"object","description":"\uc2a4\ucf00\uc904\uc5d0 \uc758\ud55c \uc870\uac74","required":["cron","branches"],"properties":{"cron":{"type":"string","description":"cron \ud45c\ud604\uc2dd. unix \ud45c\ud604\uc2dd\uacfc quartz \ud45c\ud604\uc2dd \uc0ac\uc6a9\uac00\ub2a5"},"branches":{"type":"array","items":{"type":"string"},"description":"\uc2a4\ucf00\uc904 \ube4c\ub4dc\uc758 branch \uc870\uac74","minItems":1},"zone":{"type":"string","default":["Asia/Seoul"],"description":"\uc2a4\ucf00\uc904 \ube4c\ub4dc zone"},"build-if-changed":{"type":"boolean","default":true,"description":"\ubcc0\uacbd\ub41c \ud30c\uc77c\uc774 \uc788\uc744\ub54c\ub9cc \ube4c\ub4dc"}},"additionalProperties":false}}},"job":{"type":"object","required":["name","execute"],"additionalProperties":true,"properties":{"name":{"type":"string","description":"\uc791\uc5c5 \uc774\ub984","pattern":"[a-zA-Z0-9_-]{1,40}"},"execute":{"type":"array","description":"\uc2e4\ud589\ud560 \uba85\ub839 \ubaa9\ub85d(\uc21c\ucc28\uc2e4\ud589)","items":{"type":"string","default":"echo \"hello world\""},"minItems":1},"set-proxy":{"type":"array","description":"\uc0ac\ub0b4 Proxy \uc124\uc815","default":["shell"],"items":{"type":"string","enum":["shell","gradle","npm","docker","yarn","maven","java","sbt"]}},"no-proxy-hosts":{"type":"array","description":"proxy \uc608\uc678\ud560 host \ubaa9\ub85d (ip, ip/mask, domain)","default":[],"items":{"type":"string"}},"run-on":{"$ref":"#/definitions/run-on"},"artifacts":{"type":"array","description":"artifact\ub85c \uc9c0\uc815\ud560 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac \uacbd\ub85c","default":[],"items":{"type":"string"}},"caches":{"type":"array","description":"\ub2e4\uc74c \ube4c\ub4dc\uc758 \uc18d\ub3c4 \ud5a5\uc0c1\uc744 \uc704\ud55c \uce90\uc2dc \uc124\uc815","default":[],"items":{"type":"object","additionalProperties":false,"required":["key","path"],"properties":{"key":{"type":"string","description":"\uce90\uc2dc \uc2dd\ubcc4\ud0a4 (repo scope)","pattern":"^[a-zA-Z0-9_-]{1,40}$"},"path":{"type":"string","description":"\uce90\uc2dc\ud560 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac \uacbd\ub85c"},"upload":{"type":"boolean","description":"\uce90\uc2dc \uc5c5\ub85c\ub4dc \uc5ec\ubd80","default":true},"download":{"type":"boolean","description":"\uce90\uc2dc \ub2e4\uc6b4\ub85c\ub4dc \uc5ec\ubd80","default":true}}}},"git-clone":{"type":"string","description":"git clone\uc2dc depth\ub97c \uc8fc\uae30\uc704\ud55c \uc635\uc158","default":"shallow","pattern":"^(shallow|deep|shallow:[0-9]+)$"},"max-execution-time":{"type":"string","description":"\ucd5c\ub300 \uc2e4\ud589\uc2dc\uac04 (e.g. '1h', '100m')","default":"1h","pattern":"^([0-9]+)(h|m)$"},"post-process":{"type":"object","description":"\ube4c\ub4dc \ud6c4\ucc98\ub9ac\uae30 \uc124\uc815","additionalProperties":true,"properties":{"app-center-releases":{"$ref":"#/definitions/app-center-releases"},"git-ops":{"$ref":"#/definitions/git-ops"}}},"html-reports":{"type":"array","description":"html report \uc124\uc815. path \uacbd\ub85c\uc758 html \ud30c\uc77c\uc744 \uc5c5\ub85c\ub4dc","default":[],"items":{"type":"object","required":["name","path"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"report \uc774\ub984","pattern":"[a-zA-Z0-9_-]+"},"path":{"type":"string","description":"report \uacbd\ub85c. html \ud655\uc7a5\uc790\ub9cc \uc9c0\uc815 \uac00\ub2a5"}}}}}},"run-on":{"type":"object","description":"\uc2e4\ud589\ud658\uacbd \uc124\uc815","additionalProperties":false,"properties":{"image":{"type":"string","description":"docker image","default":"+@basebox","pattern":"^(\\+@[a-z0-9-]+|\\+\\/[a-z0-9/-]+|[a-z0-9/._-]+)(:[a-z0-9A-Z._-]+)?$"},"resources":{"description":"\uc2e4\ud589\uc5d0 \uc0ac\uc6a9\ud560 \ub9ac\uc18c\uc2a4 \ud06c\uae30 \uc124\uc815","anyOf":[{"type":"string","default":"small","enum":["small","medium","large","xlarge","xxlarge","xxxlarge"]},{"type":"object","required":["cpu","memory"],"properties":{"cpu":{"anyOf":[{"type":"string","default":"1.0","pattern":"^[0-9]+(\\.[0-9]+)?$"},{"type":"number","default":1}],"description":"cpu (e.g. '1.0')","default":"1.0"},"memory":{"type":"string","description":"memory (e.g. '500Mi', '2Gi').","default":"1Gi","pattern":"^([0-9]+)(Mi|Gi)$"}}}]},"use":{"type":"array","description":"\uc2e4\ud589\ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uae30\ub2a5 \uc124\uc815","default":[],"items":{"type":"string","const":"docker"}},"platform":{"type":"string","description":"\uc2e4\ud589\ud658\uacbd \ud50c\ub7ab\ud3fc","default":"k8s","enum":["k8s","macos"]},"selectors":{"type":"array","description":"platform: macos \uc77c\ub54c \uc0ac\uc6a9\ud560 agent\ub97c \uc120\ud0dd","default":[],"items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"agent label \uac12"},"pattern":{"type":"string","default":"*","description":"agent value\ub97c pattern \uc73c\ub85c \uc9c0\uc815"}}}}}},"app-center-releases":{"type":"array","description":"artifact\ub85c \uc9c0\uc815\ub41c .apk/.ipa \ud30c\uc77c\uc744 appcenter\ub85c \ub9b4\ub9ac\uc988","items":{"type":"object","description":"appcenter release \uc124\uc815","required":["app-id"],"additionalProperties":false,"properties":{"app-id":{"type":"string","description":"App ID","pattern":"[a-zA-Z0-9_-]+"},"tags":{"type":"array","description":"\ub9b4\ub9ac\uc988 \uadf8\ub8f9\uc5d0 \ub300\ud55c Tag\ub4e4\uc744 \uc9c0\uc815","items":{"type":"string","description":"\ub9b4\ub9ac\uc988 \uadf8\ub8f9\uc5d0 \ub300\ud55c Tag \uac12","pattern":"[a-zA-Z0-9_-]+"}}}}},"git-ops":{"type":"object","description":"GitOps \ubc29\uc2dd\uc758 K8S Deploy\ub97c \uc704\ud55c manifest repo \uc5c5\ub370\uc774\ud2b8","required":["manifest","update"],"additionalProperties":false,"properties":{"manifest":{"type":"object","description":"K8S manifest repo \uc815\ubcf4","required":["repo","branch"],"additionalProperties":false,"properties":{"repo":{"type":"string","description":"repo('owner/repo')","pattern":"[.a-zA-Z0-9_-]+/[.a-zA-Z0-9_-]+"},"branch":{"type":"string","description":"branch","pattern":"[a-zA-Z0-9/_.@-]+"}}},"update":{"type":"array","description":"manifest repo\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uae30 \uc704\ud55c \uba85\ub839","items":{"type":"string"},"minItems":1},"with-artifacts":{"type":"array","description":"\ube4c\ub4dc \uc791\uc5c5\uc5d0\uc11c manifest reop\ub85c \uc804\ub2ec\ud560 artifacts","items":{"type":"string"}},"sync-git-tag":{"type":"boolean","description":"manifest repo\uc5d0 git tag\ub97c \ub3d9\uae30\ud654\ud560\uc9c0 \uc5ec\ubd80. push tag \ube4c\ub4dc\uc77c\ub54c\ub9cc \ub3d9\uc791","default":false}}}},"properties":{"on":{"$ref":"#/definitions/build-condition","description":"\uc2e4\ud589 \uc870\uac74"},"jobs":{"type":"array","description":"\uc2e4\ud589\ud560 \uc791\uc5c5\ub4e4: \ub3c5\ub9bd\uc801\uc73c\ub85c \ubcd1\ub82c \uc2e4\ud589\ub428","items":{"$ref":"#/definitions/job"}},"environment":{"type":"array","description":"\ud658\uacbd\ubcc0\uc218","items":{"$ref":"#/definitions/env"}}},"required":["jobs"],"title":"KoDE/CI Build Spec","type":"object","description":"KoDE/CI \ube4c\ub4dc \uc2a4\ud399\uc5d0 \uc0ac\uc6a9\ub418\ub294 yaml\uc758 \uc2a4\ud0a4\ub9c8\ub97c \uc815\uc758"}
</schema>

[User] Provide a JSON object that satisfies the schema "KoDE/CI Build Spec". Here are the required top‑level fields: jobs. Return only the valid JSON object.

환경변수 이름

환경변수 값

환경변수를 적용할 브랜치

빌드 실행 조건

Push 이벤트에 의한 조건

Push 빌드의 branch 조건

Push 빌드의 tag 조건

commit message에 주어진 문자열을 포함한 경우만 빌드

Push 빌드의 paths 조건

PullRequest 이벤트에 의한 조건

PR빌드의 target 브랜치 조건

PR 이벤트 타입

PullRequest 빌드의 paths 조건

수동빌드 대상을 위한 조건

수동빌드의 대상이 되는 브랜치 조건

수동빌드의 대상이 되는 태그 조건

스케줄에 의한 조건

cron 표현식. unix 표현식과 quartz 표현식 사용가능

스케줄 빌드의 branch 조건

스케줄 빌드 zone

변경된 파일이 있을때만 빌드

작업 이름

실행할 명령 목록(순차실행)

사내 Proxy 설정

shell gradle npm docker yarn maven java sbt

proxy 예외할 host 목록 (ip, ip/mask, domain)

artifact로 지정할 파일 혹은 디렉토리 경로

다음 빌드의 속도 향상을 위한 캐시 설정

캐시 식별키 (repo scope)

캐시할 파일 혹은 디렉토리 경로

캐시 업로드 여부

캐시 다운로드 여부

git clone시 depth를 주기위한 옵션

최대 실행시간 (e.g. '1h', '100m')

빌드 후처리기 설정

html report 설정. path 경로의 html 파일을 업로드

report 이름

report 경로. html 확장자만 지정 가능

실행환경 설정

docker image

실행에 사용할 리소스 크기 설정

small medium large xlarge xxlarge xxxlarge

cpu (e.g. '1.0')

memory (e.g. '500Mi', '2Gi').

실행환경에서 사용할 기능 설정

실행환경 플랫폼

platform: macos 일때 사용할 agent를 선택

agent label 값

agent value를 pattern 으로 지정

artifact로 지정된 .apk/.ipa 파일을 appcenter로 릴리즈

appcenter release 설정

App ID

릴리즈 그룹에 대한 Tag들을 지정

릴리즈 그룹에 대한 Tag 값

GitOps 방식의 K8S Deploy를 위한 manifest repo 업데이트

K8S manifest repo 정보

repo('owner/repo')

branch

manifest repo를 업데이트하기 위한 명령

빌드 작업에서 manifest reop로 전달할 artifacts

manifest repo에 git tag를 동기화할지 여부. push tag 빌드일때만 동작

실행 조건

실행할 작업들: 독립적으로 병렬 실행됨

환경변수

KoDE/CI Build Spec

KoDE/CI 빌드 스펙에 사용되는 yaml의 스키마를 정의

Provide a JSON object that satisfies the schema "KoDE/CI Build Spec". Here are the required top‑level fields: jobs. Return only the valid JSON object.


[User] Provide a JSON object that satisfies the schema "kong_json_schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

Provide a JSON object that satisfies the schema "kong_json_schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://www.krakend.io/schema/krakend.json","title":"Schema validation for the latest version of KrakenD. Consider sticking to the specific version you are using.","allOf":[{"$ref":"v2.10/krakend.json"}]}
</schema>

[User] Provide a JSON object that satisfies the schema "Schema validation for the latest version of KrakenD. Consider sticking to the specific version you are using.". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

Provide a JSON object that satisfies the schema "Schema validation for the latest version of KrakenD. Consider sticking to the specific version you are using.". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"https://json-schema.org/draft-07/schema#","$id":"https://raw.githubusercontent.com/devantler/ksail/main/schemas/ksail-cluster-schema.json","title":"KSail Cluster","description":"A configuration object for a KSail cluster","type":["object","null"],"properties":{"apiVersion":{"description":"The API version where the KSail Cluster object is defined. [default: ksail.io/v1alpha1]","type":"string"},"kind":{"description":"The KSail Cluster object kind. [default: Cluster]","type":"string"},"metadata":{"description":"The metadata of the KSail Cluster object.","type":"object","properties":{"name":{"description":"The name of the KSail object. [default: ksail-default]","type":"string"}},"required":["name"]},"spec":{"description":"The spec of the KSail Cluster object.","type":"object","properties":{"connection":{"description":"The options for connecting to the KSail cluster.","type":"object","properties":{"kubeconfig":{"description":"The path to the kubeconfig file. [default: ~/.kube/config]","type":"string"},"context":{"description":"The kube context. [default: kind-ksail-default]","type":"string"},"timeout":{"description":"The timeout for operations (10s, 5m, 1h). [default: 5m]","type":"string"}}},"project":{"description":"The options for the KSail project.","type":"object","properties":{"configPath":{"description":"The path to the ksail configuration file. [default: ksail.yaml]","type":"string"},"distributionConfigPath":{"description":"The path to the distribution configuration file. [default: kind.yaml]","type":"string"},"kustomizationPath":{"description":"The path to the root kustomization directory. [default: k8s]","type":"string"},"containerEngine":{"description":"The provider to use for running the KSail cluster. [default: Docker]","enum":["Docker","Podman"]},"distribution":{"description":"The Kubernetes distribution to use. [default: Kind]","enum":["Kind","K3d"]},"deploymentTool":{"description":"The Deployment tool to use. [default: Kubectl]","enum":["Kubectl","Flux"]},"cni":{"description":"The CNI to use. [default: Default]","enum":["Default","Cilium","None"]},"csi":{"description":"The CSI to use. [default: Default]","enum":["Default","LocalPathProvisioner","None"]},"ingressController":{"description":"The Ingress Controller to use. [default: Default]","enum":["Default","Traefik","None"]},"gatewayController":{"description":"The Gateway Controller to use. [default: Default]","enum":["Default","None"]},"metricsServer":{"description":"Whether to install Metrics Server. [default: true]","type":"boolean"},"secretManager":{"description":"Whether to use a secret manager. [default: None]","enum":["None","SOPS"]},"editor":{"description":"The editor to use for viewing files while debugging. [default: Nano]","enum":["Nano","Vim"]},"mirrorRegistries":{"description":"Whether to set up mirror registries for the project. [default: true]","type":"boolean"}}},"deploymentTool":{"description":"The options for the deployment tool.","type":"object","properties":{"flux":{"description":"The options for the Flux deployment tool.","type":"object","properties":{"source":{"description":"The source for reconciling GitOps resources.","type":"object","properties":{"url":{"description":"The URL of the repository. [default: oci://ksail-registry:5000/ksail-registry]","type":"string","format":"uri"}}}}}}},"distribution":{"description":"The options for the distribution.","type":"object","properties":{"showAllClustersInListings":{"description":"Show clusters from all supported distributions. [default: false]","type":"boolean"}}},"secretManager":{"description":"The options for the Secret Manager.","type":"object","properties":{"sops":{"description":"The options for the SOPS secret manager.","type":"object","properties":{"publicKey":{"description":"Public key used for encryption. [default: null]","type":"string"},"inPlace":{"description":"Use in-place decryption/encryption. [default: false]","type":"boolean"},"showAllKeysInListings":{"description":"Show all keys in the listed keys. [default: false]","type":"boolean"},"showPrivateKeysInListings":{"description":"Show private keys in the listed keys. [default: false]","type":"boolean"}}}}},"localRegistry":{"description":"The local registry for storing deployment artifacts.","type":"object","properties":{"name":{"description":"The name of the registry. [default: ksail-registry]","type":"string"},"hostPort":{"description":"The host port of the registry (if applicable). [default: 5555]","type":"integer"},"provider":{"description":"The registry provider. [default: Docker]","enum":["Docker","Podman"]}}},"generator":{"description":"The options for the generator.","type":"object","properties":{"overwrite":{"description":"Overwrite existing files. [default: false]","type":"boolean"}}},"mirrorRegistries":{"description":"The mirror registries to create for the KSail cluster. [default: registry.k8s.io-proxy, docker.io-proxy, ghcr.io-proxy, gcr.io-proxy, mcr.microsoft.com-proxy, quay.io-proxy]","type":"array","items":{"type":["object","null"],"properties":{"proxy":{"description":"A proxy for the registry to use to proxy and cache images.","type":"object","properties":{"url":{"description":"The URL of the upstream registry to proxy and cache images from. [default: https://registry-1.docker.io]","type":"string","format":"uri"}}},"name":{"description":"The name of the registry. [default: ksail-registry]","type":"string"},"hostPort":{"description":"The host port of the registry (if applicable). [default: 5555]","type":"integer"},"provider":{"description":"The registry provider. [default: Docker]","enum":["Docker","Podman"]}}}},"publication":{"description":"Options for publication of manifests.","type":"object","properties":{"publishOnUpdate":{"description":"Publish manifests before applying changes to an existing cluster. [default: true]","type":"boolean"}}},"validation":{"description":"Options for validating the KSail cluster.","type":"object","properties":{"validateOnUp":{"description":"Validate the project files and configuration before creating a new cluster. [default: true]","type":"boolean"},"reconcileOnUp":{"description":"Wait for reconciliation to succeed on a new cluster. [default: true]","type":"boolean"},"validateOnUpdate":{"description":"Validate the project files and configuration before applying changes to an existing cluster. [default: true]","type":"boolean"},"reconcileOnUpdate":{"description":"Wait for reconciliation to succeed on an existing cluster. [default: true]","type":"boolean"},"verbose":{"description":"Verbose output for validation or status checks. [default: false]","type":"boolean"}}}}}}}
</schema>

[User] Provide a JSON object that satisfies the schema "KSail Cluster". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

KSail Cluster

A configuration object for a KSail cluster

The API version where the KSail Cluster object is defined. [default: ksail.io/v1alpha1]

The KSail Cluster object kind. [default: Cluster]

The metadata of the KSail Cluster object.

The name of the KSail object. [default: ksail-default]

The spec of the KSail Cluster object.

The options for connecting to the KSail cluster.

The path to the kubeconfig file. [default: ~/.kube/config]

The kube context. [default: kind-ksail-default]

The timeout for operations (10s, 5m, 1h). [default: 5m]

The options for the KSail project.

The path to the ksail configuration file. [default: ksail.yaml]

The path to the distribution configuration file. [default: kind.yaml]

The path to the root kustomization directory. [default: k8s]

The provider to use for running the KSail cluster. [default: Docker]

The Kubernetes distribution to use. [default: Kind]

The Deployment tool to use. [default: Kubectl]

The CNI to use. [default: Default]

The CSI to use. [default: Default]

The Ingress Controller to use. [default: Default]

The Gateway Controller to use. [default: Default]

Whether to install Metrics Server. [default: true]

Whether to use a secret manager. [default: None]

The editor to use for viewing files while debugging. [default: Nano]

Whether to set up mirror registries for the project. [default: true]

The options for the deployment tool.

The options for the Flux deployment tool.

The source for reconciling GitOps resources.

The URL of the repository. [default: oci://ksail-registry:5000/ksail-registry]

The options for the distribution.

Show clusters from all supported distributions. [default: false]

The options for the Secret Manager.

The options for the SOPS secret manager.

Public key used for encryption. [default: null]

Use in-place decryption/encryption. [default: false]

Show all keys in the listed keys. [default: false]

Show private keys in the listed keys. [default: false]

The local registry for storing deployment artifacts.

The name of the registry. [default: ksail-registry]

The host port of the registry (if applicable). [default: 5555]

The registry provider. [default: Docker]

The options for the generator.

Overwrite existing files. [default: false]

The mirror registries to create for the KSail cluster. [default: registry.k8s.io-proxy, docker.io-proxy, ghcr.io-proxy, gcr.io-proxy, mcr.microsoft.com-proxy, quay.io-proxy]

A proxy for the registry to use to proxy and cache images.

The URL of the upstream registry to proxy and cache images from. [default: https://registry-1.docker.io]

Options for publication of manifests.

Publish manifests before applying changes to an existing cluster. [default: true]

Options for validating the KSail cluster.

Validate the project files and configuration before creating a new cluster. [default: true]

Wait for reconciliation to succeed on a new cluster. [default: true]

Validate the project files and configuration before applying changes to an existing cluster. [default: true]

Wait for reconciliation to succeed on an existing cluster. [default: true]

Verbose output for validation or status checks. [default: false]

Provide a JSON object that satisfies the schema "KSail Cluster". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","title":"ksy schema","description":"the schema for ksy files","type":"object","additionalProperties":false,"properties":{"meta":{"$ref":"#/definitions/MetaSpec","required":["id"]},"doc":{"$ref":"#/definitions/Doc"},"doc-ref":{"$ref":"#/definitions/DocRef"},"params":{"$ref":"#/definitions/ParamsSpec"},"seq":{"description":"identifier for a primary structure described in top-level map","$ref":"#/definitions/Attributes"},"types":{"description":"maps of strings to user-defined types\n\ndeclares types for substructures that can be referenced in the attributes of seq or instances element\n\nwould be directly translated into classes","$ref":"#/definitions/TypesSpec"},"instances":{"description":"Purpose: description of data that lies outside of normal sequential parsing flow (for example, that requires seeking somewhere in the file) or just needs to be loaded only by special request\n\nInfluences: would be translated into distinct methods (that read desired data on demand) in current class","$ref":"#/definitions/InstancesSpec"},"enums":{"description":"allows for the setup of named enums, mappings of integer constants to symbolic names. Can be used with integer attributes using the enum key.\n\nwould be represented as enum-like construct (or closest equivalent, if target language doesn't support enums), nested or namespaced in current type/class","$ref":"#/definitions/EnumsSpec"}},"patternProperties":{"^-.*$":true},"definitions":{"Doc":{"type":"string","description":"used to give a more detailed description of a user-defined type. In most languages, it will be used as a docstring compatible with tools like Javadoc, Doxygen, JSDoc, etc."},"DocRef":{"description":"used to provide reference to original documentation (if the ksy file is actually an implementation of some documented format).\n\nContains:\n1. URL as text,\n2. arbitrary string, or\n3. URL as text + space + arbitrary string","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"MediaWikiPageName":{"type":"string","pattern":"^([a-zA-Z0-9$\\-._~+!*'(),@&;:\\/]|%[0-9a-fA-F]{2})+$","$comment":"hand-crafted regex, it should match any valid URL path"},"IsoIdentifier":{"type":"string","pattern":"^[1-9]\\d*(-[0-9]+)?(:(19|20)\\d{2})?$","$comment":"https://www.wikidata.org/wiki/Property:P503#P1793, but only allow ASCII hyphen (-), not the Unicode en dash"},"LocIdentifier":{"type":"string","pattern":"^fdd\\d{6}$","$comment":"https://www.wikidata.org/wiki/Property:P3266#P1793"},"MimeType":{"type":"string","pattern":"^(application|audio|font|image|model|text|video)/([a-zA-Z0-9]+[.\\-_+])*[a-zA-Z0-9]+[.\\-_+]?$","$comment":"this regex pattern is hand-crafted and not coming from any specification, but it's tested against all registered discrete IANA media types (composite types don't make sense for Kaitai Struct)"},"PronomIdentifier":{"type":"string","pattern":"^(x-)?fmt\\/\\d+$","$comment":"https://www.wikidata.org/wiki/Property:P2748#P1793"},"RfcIdentifier":{"anyOf":[{"type":"integer"},{"type":"string","pattern":"^[1-9]\\d*$","$comment":"https://www.wikidata.org/wiki/Property:P892#P1793"}]},"WikidataIdentifier":{"type":"string","pattern":"^Q[1-9]\\d*$","$comment":"https://www.wikidata.org/wiki/Q43649390#P1793"},"MetaSpec":{"type":"object","additionalProperties":false,"properties":{"id":{"$ref":"#/definitions/Identifier"},"title":{"type":"string"},"application":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"file-extension":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"xref":{"type":"object","additionalProperties":false,"properties":{"forensicswiki":{"description":"article name at [Forensics Wiki](https://forensics.wiki/), which is a CC-BY-SA-licensed wiki with information on digital forensics, file formats and tools\n\nfull link name could be generated as `https://forensics.wiki/` + this value + `/`","anyOf":[{"$ref":"#/definitions/MediaWikiPageName"},{"type":"array","items":{"$ref":"#/definitions/MediaWikiPageName"}}]},"iso":{"description":"ISO/IEC standard number, reference to a standard accepted and published by [ISO](https://www.iso.org/) (International Organization for Standardization).\n\nISO standards typically have clear designations like \"ISO/IEC 15948:2004\", so value should be citing everything except for \"ISO/IEC\", i.e. `15948:2004`","anyOf":[{"$ref":"#/definitions/IsoIdentifier"},{"type":"array","items":{"$ref":"#/definitions/IsoIdentifier"}}]},"justsolve":{"description":"article name at [\"Just Solve the File Format Problem\" wiki](http://fileformats.archiveteam.org/wiki/Main_Page), a wiki that collects information on many file formats\n\nfull link name could be generated as `http://fileformats.archiveteam.org/wiki/` + this value","anyOf":[{"$ref":"#/definitions/MediaWikiPageName"},{"type":"array","items":{"$ref":"#/definitions/MediaWikiPageName"}}]},"loc":{"description":"identifier in [Digital Formats](https://www.loc.gov/preservation/digital/formats/fdd/browse_list.shtml) database of [US Library of Congress](https://www.loc.gov/)\n\nvalue typically looks like `fddXXXXXX`, where `XXXXXX` is a 6-digit identifier","anyOf":[{"$ref":"#/definitions/LocIdentifier"},{"type":"array","items":{"$ref":"#/definitions/LocIdentifier"}}]},"mime":{"description":"MIME type (IANA media type), a string typically used in various Internet protocols to specify format of binary payload\n\nthere is a [central registry of media types](https://www.iana.org/assignments/media-types/media-types.xhtml) managed by IANA\n\nvalue must specify full MIME type (both parts), e.g. `image/png`","anyOf":[{"$ref":"#/definitions/MimeType"},{"type":"array","items":{"$ref":"#/definitions/MimeType"}}]},"pronom":{"description":"format identifier in [PRONOM Technical Registry](https://www.nationalarchives.gov.uk/PRONOM/BasicSearch/proBasicSearch.aspx?status=new) of [UK National Archives](https://www.nationalarchives.gov.uk/), which is a massive file formats database that catalogues many file formats for digital preservation purposes","anyOf":[{"$ref":"#/definitions/PronomIdentifier"},{"type":"array","items":{"$ref":"#/definitions/PronomIdentifier"}}]},"rfc":{"description":"reference to [RFC](https://en.wikipedia.org/wiki/Request_for_Comments), \"Request for Comments\" documents maintained by ISOC (Internet Society)\n\nRFCs are typically treated as global, Internet-wide standards, and, for example, many networking / interoperability protocols are specified in RFCs\n\nvalue should be just raw RFC number, without any prefixes, e.g. `1234`","anyOf":[{"$ref":"#/definitions/RfcIdentifier"},{"type":"array","items":{"$ref":"#/definitions/RfcIdentifier"}}]},"wikidata":{"description":"item identifier at [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page), a global knowledge base\n\nvalue typically follows `Qxxx` pattern, where `xxx` is a number generated by [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page), e.g. `Q535473`","anyOf":[{"$ref":"#/definitions/WikidataIdentifier"},{"type":"array","items":{"$ref":"#/definitions/WikidataIdentifier"}}]}},"patternProperties":{"^.*$":{"anyOf":[{"$ref":"#/definitions/AnyScalar"},{"type":"array","items":{"$ref":"#/definitions/AnyScalar"}}]}}},"license":{"type":"string"},"ks-version":{"anyOf":[{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(\\.(0|[1-9][0-9]*))?$","$comment":"https://github.com/kaitai-io/kaitai_struct_compiler/commit/aa10f0751e7e26fbb48afd1afc6a8a591268f4d9"},{"allOf":[{"type":"number","minimum":0.1},{"not":{"enum":[0.1,0.2,0.3,0.4,0.5]}}]}]},"ks-debug":{"type":"boolean","description":"advise the Kaitai Struct Compiler (KSC) to use debug mode","default":false},"ks-opaque-types":{"type":"boolean","description":"advise the Kaitai Struct Compiler (KSC) to ignore missing types in the .ksy file, and assume that these types are already provided externally by the environment the classes are generated for","default":false},"imports":{"type":"array","description":"list of relative or absolute paths to another `.ksy` files to import (**without** the `.ksy` extension)\n\nthe top-level type of the imported file will be accessible in the current spec under the name specified in the top-level `/meta/id` of the imported file","items":{"type":"string","pattern":"^(.*/)?[a-z][a-z0-9_]*$"}},"encoding":{"type":"string"},"endian":{"anyOf":[{"enum":["le","be"]},{"type":"object","additionalProperties":false,"properties":{"switch-on":{"$ref":"#/definitions/AnyScalar"},"cases":{"type":"object","additionalProperties":false,"patternProperties":{"^.*$":{"enum":["le","be"]}}}},"required":["switch-on","cases"]}]}},"patternProperties":{"^-.*$":true}},"TypeRef":{"anyOf":[{"description":"name of or path to existing type name\n\nif name is single path element, then type resolved in such order:\n- from subtypes of current type\n- current type (so, recursive types is possible)\n- parent type\n\none can reference a nested user-defined type by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_type`)","type":"string","pattern":"^([a-z][a-z0-9_]*::)*[a-z][a-z0-9_]*(\\(.+\\))?$"},{"type":"boolean"},{"type":"null"},{"enum":["u1","u2","u2le","u2be","u4","u4le","u4be","u8","u8le","u8be","s1","s2","s2le","s2be","s4","s4le","s4be","s8","s8le","s8be","f4","f4be","f4le","f8","f8be","f8le","str","strz"]}]},"Attribute":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"contains a string used to identify one attribute among others"},"doc":{"$ref":"#/definitions/Doc"},"doc-ref":{"$ref":"#/definitions/DocRef"},"contents":{"description":"specify fixed contents that the parser should encounter at this point. If the content of the stream doesn't match the given bytes, an error is thrown and it's meaningless to continue parsing","anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/StringOrInteger"}}]},"type":{"description":"defines data type for an attribute\n\nthe type can also be user-defined in the `types` key\n\none can reference a nested user-defined type by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_type`)","anyOf":[{"$ref":"#/definitions/TypeRef"},{"type":"object","additionalProperties":false,"properties":{"switch-on":{"$ref":"#/definitions/AnyScalar"},"cases":{"type":"object","additionalProperties":false,"patternProperties":{"^.*$":{"$ref":"#/definitions/TypeRef"}}}},"required":["switch-on","cases"]}]},"repeat":{"description":"designates repeated attribute in a structure\n\n| Value     | Description\n|-\n| `eos`     | repeat until the end of the current stream\n| `expr`    | repeat as many times as specified in `repeat-expr`\n| `until`   | repeat until the expression in `repeat-until` becomes **`true`**\n\nattribute read as array/list/sequence","enum":["expr","eos","until"]},"repeat-expr":{"description":"specify number of repetitions for repeated attribute","$ref":"#/definitions/StringOrInteger"},"repeat-until":{"description":"specifies a condition to be checked **after** each parsed item, repeating while the expression is `false`\n\none can use `_` in the expression, which is a special **local** variable that references the last read element","anyOf":[{"type":"string"},{"type":"boolean"}]},"if":{"description":"marks the attribute as optional (attribute is parsed only if the condition specified evaluates to `true`)","anyOf":[{"type":"string"},{"type":"boolean"}]},"size":{"description":"the number of bytes to read if `type` isn't defined.\n\ncan also be an expression","$ref":"#/definitions/StringOrInteger"},"size-eos":{"description":"if `true`, reads all the bytes till the end of the stream\n\ndefault is `false`","default":false,"type":"boolean"},"process":{"description":"specifies an algorithm to be applied to the underlying byte buffer of the attribute before parsing\n\ncan be used only if the size is known (either `size`, `size-eos: true` or `terminator` are specified), see [Applying `process` without a size](https://doc.kaitai.io/user_guide.html#_applying_process_without_a_size) in the User Guide\n\n| Value | Description\n|-\n| `xor(key)` |
apply a bitwise XOR (written as `^` in most C-like languages) to every byte of the buffer using the provided `key`

**`key`** is required, and can be either

a single byte value \u2014 will be XORed with every byte of the input stream

make sure that the **`key`** is in range **0-255**, otherwise you may get unexpected results

a byte array \u2014 first byte of the input will be XORed with the first byte of the key, second byte of the input with the second byte of the key, etc.

when the end of the key is reached, it starts again from the first byte

_the output length remains the same as the input length_
\n| `rol(n)`, `ror(n)` |
apply a [bitwise rotation](https://en.wikipedia.org/wiki/Bitwise_operation#bit_rotation) (also known as a [circular shift](https://en.wikipedia.org/wiki/Circular_shift)) by **`n`** bits to every byte of the buffer

`rol` = left circular shift, `ror` = right circular shift

**`n`** is required, and should be in range **0-7** for consistent results (to be safe, use `shift_amount % 8` as the **`n`** parameter, if the value of `shift_amount` itself may not fall into that range)
\n| `zlib` |
apply a _zlib_ decompression to the input buffer, expecting it to be a full-fledged _zlib_ stream, i.e. having a regular 2-byte _zlib_ header.

typical _zlib_ header values:

`78 01` \u2014 low compression

`78 9C` \u2014 default compression

`78 DA` \u2014 best compression

\n|
`{my_custom_processor}(a, b, ...)`

(`{my_custom_processor}` is an arbitrary name matching `[a-z][a-z0-9_.]*`)
 |
use a custom processing routine, which you implement in imperative code in the target language

the generated code will use the class name `{my_custom_processor}` using the naming convention of the target language (in most languages `MyCustomProcessor`, but e.g. `my_custom_processor_t` in C++: check the generated code)

the processing class **must** define the method `public byte[] decode(byte[] src)` and should implement the interface `CustomDecoder` (available in [C++](https://github.com/kaitai-io/kaitai_struct_cpp_stl_runtime/blob/d020781b96ea1e2fe7e0ecf47ff3ae3c829ccd31/kaitai/custom_decoder.h#L8-L12), [C#](https://github.com/kaitai-io/kaitai_struct_csharp_runtime/blob/1b66a9a85f39c52728893400a23504844cc78e34/KaitaiStruct.cs#L24-L37) and [Java](https://github.com/kaitai-io/kaitai_struct_java_runtime/blob/c342c6e836ddba03c9ec33a59034e209bb04a976/src/main/java/io/kaitai/struct/CustomDecoder.java#L26-L39))

you can pass any parameters `(a, b, ...)` to your `{my_custom_processor}` class constructor (**omit** the `()` brackets for parameter-less invocation)

one can reference a class in a different namespace/package like `com.example.my_rle(5, 3)`

see [Custom processing routines](https://doc.kaitai.io/user_guide.html#custom-process) in the User Guide for more info
","type":"string","pattern":"^zlib|(xor|rol|ror)\\(.*\\)$"},"enum":{"description":"name of existing enum field data type becomes given enum","type":"string","pattern":"^([a-z][a-z0-9_]*::)*[a-z][a-z0-9_]*$"},"encoding":{"type":"string"},"pad-right":{"type":"integer","description":"specify a byte which is the string or byte array padded with after the end up to the total size\n\ncan be used only with `size` or `size-eos: true` (when the size is fixed)\n\nwhen `terminator`:\n - isn't specified, then the `pad-right` controls where the string ends (basically acts like a terminator)\n - is specified, padding comes after the terminator, not before. The value is terminated immediately after the terminator occurs, so the `pad-right` has no effect on parsing and is only relevant for serialization"},"terminator":{"type":"integer","description":"string or byte array reading will stop when it encounters this byte\n\ncannot be used with `type: strz` (which already implies `terminator: 0` - null-terminated string)"},"consume":{"type":"boolean","description":"specify if terminator byte should be \"consumed\" when reading\n\nif true: the stream pointer will point to the byte after the terminator byte\n\nif false: the stream pointer will point to the terminator byte itself\n\ndefault is true","default":true},"include":{"type":"boolean","description":"specifies if terminator byte should be considered part of the string read and thus be appended to it\n\ndefault is false","default":false},"eos-error":{"type":"boolean","description":"allows the compiler to ignore the lack of a terminator if eos-error is disabled, string reading will stop at either:\n\n1. terminator being encountered\n\n2. end of stream is reached\n\ndefault is `true`","default":true},"pos":{"description":"specifies position at which the value should be parsed","$ref":"#/definitions/StringOrInteger"},"io":{"type":"string","description":"specifies an IO stream from which a value should be parsed"},"value":{"description":"overrides any reading & parsing. Instead, just calculates function specified in value and returns the result as this instance. Has many purposes"}},"patternProperties":{"^-.*$":true},"allOf":[{"if":{"properties":{"type":{"const":"strz"}},"required":["type"]},"then":{"not":{"required":["terminator"]}}},{"if":{"required":["pad-right"]},"then":{"anyOf":[{"required":["size"]},{"properties":{"size-eos":{"const":true}},"required":["size-eos"]}]}}]},"Attributes":{"type":"array","items":{"$ref":"#/definitions/Attribute"}},"StringOrInteger":{"anyOf":[{"type":"string"},{"type":"integer"}]},"TypeSpec":{"type":"object","additionalProperties":false,"properties":{"meta":{"$ref":"#/definitions/MetaSpec"},"params":{"$ref":"#/definitions/ParamsSpec"},"seq":{"$ref":"#/definitions/Attributes"},"types":{"$ref":"#/definitions/TypesSpec"},"enums":{"$ref":"#/definitions/EnumsSpec"},"instances":{"$ref":"#/definitions/InstancesSpec"},"doc":{"$ref":"#/definitions/Doc"},"doc-ref":{"$ref":"#/definitions/DocRef"}},"patternProperties":{"^-.*$":true}},"TypesSpec":{"type":"object","additionalProperties":false,"patternProperties":{"^[a-z][a-z0-9_]*$":{"$ref":"#/definitions/TypeSpec"}}},"ParamSpec":{"type":"object","additionalProperties":false,"properties":{"id":{"allOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},{"not":{"enum":["true","false","null"]}}]},"type":{"description":"specifies \"pure\" type of the parameter, without any serialization details (like endianness, sizes, encodings)\n\n| Value                  | Description\n|-\n| `u1`, `u2`, `u4`, `u8` | unsigned integer\n| `s1`, `s2`, `s4`, `s8` | signed integer\n| `bX`                   | bit-sized integer (if `X` != 1)\n| `f4`, `f8`             | floating point number\n| `type` key missing
or `bytes` | byte array\n| `str`                  | string\n| `bool` (or `b1`)       | boolean\n| `struct`               | arbitrary KaitaiStruct-compatible user type\n| `io`                   | KaitaiStream-compatible IO stream\n| `any`                  | allow any type (if target language supports that)\n| other identifier       | user-defined type, without parameters
a nested type can be referenced with double colon (e.g. `type: 'foo::bar'`)\n\none can specify arrays by appending `[]` after the type identifier (e.g. `type: u2[]`, `type: 'foo::bar[]'`, `type: struct[]` etc.)","type":"string"},"doc":{"$ref":"#/definitions/Doc"},"doc-ref":{"$ref":"#/definitions/DocRef"},"enum":{"description":"path to an enum type (defined in the `enums` map), which will become the type of the parameter\n\nonly integer-based enums are supported, so `type` must be an integer type (`type: uX`, `type: sX` or `type: bX`) for this property to work\n\nyou can use `enum` with `type: b1` as well: `b1` means a 1-bit **integer** (0 or 1) when used with `enum` (**not** a boolean)\n\none can reference an enum type of a subtype by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_enum`)","type":"string","pattern":"^([a-z][a-z0-9_]*::)*[a-z][a-z0-9_]*$"}},"patternProperties":{"^-.*$":true},"required":["id"]},"ParamsSpec":{"type":"array","items":{"$ref":"#/definitions/ParamSpec"}},"InstancesSpec":{"type":"object","additionalProperties":false,"patternProperties":{"^[a-z][a-z0-9_]*$":{"$ref":"#/definitions/Attribute"}}},"EnumValueSpec":{"anyOf":[{"$ref":"#/definitions/Identifier"},{"type":"object","additionalProperties":false,"properties":{"id":{"$ref":"#/definitions/Identifier"},"doc":{"$ref":"#/definitions/Doc"},"doc-ref":{"$ref":"#/definitions/DocRef"},"-orig-id":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["id"],"patternProperties":{"^-.*$":true}}]},"EnumSpec":{"type":"object","additionalProperties":false,"patternProperties":{"^.*$":{"$ref":"#/definitions/EnumValueSpec"}}},"EnumsSpec":{"type":"object","additionalProperties":false,"patternProperties":{"^[a-z][a-z0-9_]*$":{"$ref":"#/definitions/EnumSpec"}}},"Identifier":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},{"type":"boolean"}]},"AnyScalar":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"integer"},{"type":"boolean"},{"type":"null"}]}}}
</schema>

[User] Provide a JSON object that satisfies the schema "ksy schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

ksy schema

the schema for ksy files

identifier for a primary structure described in top-level map

maps of strings to user-defined types

declares types for substructures that can be referenced in the attributes of seq or instances element

would be directly translated into classes

Purpose: description of data that lies outside of normal sequential parsing flow (for example, that requires seeking somewhere in the file) or just needs to be loaded only by special request

Influences: would be translated into distinct methods (that read desired data on demand) in current class

allows for the setup of named enums, mappings of integer constants to symbolic names. Can be used with integer attributes using the enum key.

would be represented as enum-like construct (or closest equivalent, if target language doesn't support enums), nested or namespaced in current type/class

used to give a more detailed description of a user-defined type. In most languages, it will be used as a docstring compatible with tools like Javadoc, Doxygen, JSDoc, etc.

used to provide reference to original documentation (if the ksy file is actually an implementation of some documented format).

Contains:
1. URL as text,
2. arbitrary string, or
3. URL as text + space + arbitrary string

hand-crafted regex, it should match any valid URL path

https://www.wikidata.org/wiki/Property:P503#P1793, but only allow ASCII hyphen (-), not the Unicode en dash

this regex pattern is hand-crafted and not coming from any specification, but it's tested against all registered discrete IANA media types (composite types don't make sense for Kaitai Struct)

article name at [Forensics Wiki](https://forensics.wiki/), which is a CC-BY-SA-licensed wiki with information on digital forensics, file formats and tools

full link name could be generated as `https://forensics.wiki/` + this value + `/`

ISO/IEC standard number, reference to a standard accepted and published by [ISO](https://www.iso.org/) (International Organization for Standardization).

ISO standards typically have clear designations like "ISO/IEC 15948:2004", so value should be citing everything except for "ISO/IEC", i.e. `15948:2004`

article name at ["Just Solve the File Format Problem" wiki](http://fileformats.archiveteam.org/wiki/Main_Page), a wiki that collects information on many file formats

full link name could be generated as `http://fileformats.archiveteam.org/wiki/` + this value

identifier in [Digital Formats](https://www.loc.gov/preservation/digital/formats/fdd/browse_list.shtml) database of [US Library of Congress](https://www.loc.gov/)

value typically looks like `fddXXXXXX`, where `XXXXXX` is a 6-digit identifier

MIME type (IANA media type), a string typically used in various Internet protocols to specify format of binary payload

there is a [central registry of media types](https://www.iana.org/assignments/media-types/media-types.xhtml) managed by IANA

value must specify full MIME type (both parts), e.g. `image/png`

format identifier in [PRONOM Technical Registry](https://www.nationalarchives.gov.uk/PRONOM/BasicSearch/proBasicSearch.aspx?status=new) of [UK National Archives](https://www.nationalarchives.gov.uk/), which is a massive file formats database that catalogues many file formats for digital preservation purposes

reference to [RFC](https://en.wikipedia.org/wiki/Request_for_Comments), "Request for Comments" documents maintained by ISOC (Internet Society)

RFCs are typically treated as global, Internet-wide standards, and, for example, many networking / interoperability protocols are specified in RFCs

value should be just raw RFC number, without any prefixes, e.g. `1234`

item identifier at [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page), a global knowledge base

value typically follows `Qxxx` pattern, where `xxx` is a number generated by [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page), e.g. `Q535473`

advise the Kaitai Struct Compiler (KSC) to use debug mode

advise the Kaitai Struct Compiler (KSC) to ignore missing types in the .ksy file, and assume that these types are already provided externally by the environment the classes are generated for

list of relative or absolute paths to another `.ksy` files to import (**without** the `.ksy` extension)

the top-level type of the imported file will be accessible in the current spec under the name specified in the top-level `/meta/id` of the imported file

name of or path to existing type name

if name is single path element, then type resolved in such order:
- from subtypes of current type
- current type (so, recursive types is possible)
- parent type

one can reference a nested user-defined type by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_type`)

contains a string used to identify one attribute among others

specify fixed contents that the parser should encounter at this point. If the content of the stream doesn't match the given bytes, an error is thrown and it's meaningless to continue parsing

defines data type for an attribute

the type can also be user-defined in the `types` key

one can reference a nested user-defined type by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_type`)

designates repeated attribute in a structure

| Value     | Description
|-
| `eos`     | repeat until the end of the current stream
| `expr`    | repeat as many times as specified in `repeat-expr`
| `until`   | repeat until the expression in `repeat-until` becomes **`true`**

attribute read as array/list/sequence

specify number of repetitions for repeated attribute

specifies a condition to be checked **after** each parsed item, repeating while the expression is `false`

one can use `_` in the expression, which is a special **local** variable that references the last read element

marks the attribute as optional (attribute is parsed only if the condition specified evaluates to `true`)

the number of bytes to read if `type` isn't defined.

can also be an expression

if `true`, reads all the bytes till the end of the stream

default is `false`

specifies an algorithm to be applied to the underlying byte buffer of the attribute before parsing

can be used only if the size is known (either `size`, `size-eos: true` or `terminator` are specified), see [Applying `process` without a size](https://doc.kaitai.io/user_guide.html#_applying_process_without_a_size) in the User Guide

| Value | Description
|-
| `xor(key)` |
apply a bitwise XOR (written as `^` in most C-like languages) to every byte of the buffer using the provided `key`

**`key`** is required, and can be either

a single byte value — will be XORed with every byte of the input stream

make sure that the **`key`** is in range **0-255**, otherwise you may get unexpected results

a byte array — first byte of the input will be XORed with the first byte of the key, second byte of the input with the second byte of the key, etc.

when the end of the key is reached, it starts again from the first byte

_the output length remains the same as the input length_

| `rol(n)`, `ror(n)` |
apply a [bitwise rotation](https://en.wikipedia.org/wiki/Bitwise_operation#bit_rotation) (also known as a [circular shift](https://en.wikipedia.org/wiki/Circular_shift)) by **`n`** bits to every byte of the buffer

`rol` = left circular shift, `ror` = right circular shift

**`n`** is required, and should be in range **0-7** for consistent results (to be safe, use `shift_amount % 8` as the **`n`** parameter, if the value of `shift_amount` itself may not fall into that range)

| `zlib` |
apply a _zlib_ decompression to the input buffer, expecting it to be a full-fledged _zlib_ stream, i.e. having a regular 2-byte _zlib_ header.

typical _zlib_ header values:

`78 01` — low compression

`78 9C` — default compression

`78 DA` — best compression

|
`{my_custom_processor}(a, b, ...)`

(`{my_custom_processor}` is an arbitrary name matching `[a-z][a-z0-9_.]*`)
 |
use a custom processing routine, which you implement in imperative code in the target language

the generated code will use the class name `{my_custom_processor}` using the naming convention of the target language (in most languages `MyCustomProcessor`, but e.g. `my_custom_processor_t` in C++: check the generated code)

the processing class **must** define the method `public byte[] decode(byte[] src)` and should implement the interface `CustomDecoder` (available in [C++](https://github.com/kaitai-io/kaitai_struct_cpp_stl_runtime/blob/d020781b96ea1e2fe7e0ecf47ff3ae3c829ccd31/kaitai/custom_decoder.h#L8-L12), [C#](https://github.com/kaitai-io/kaitai_struct_csharp_runtime/blob/1b66a9a85f39c52728893400a23504844cc78e34/KaitaiStruct.cs#L24-L37) and [Java](https://github.com/kaitai-io/kaitai_struct_java_runtime/blob/c342c6e836ddba03c9ec33a59034e209bb04a976/src/main/java/io/kaitai/struct/CustomDecoder.java#L26-L39))

you can pass any parameters `(a, b, ...)` to your `{my_custom_processor}` class constructor (**omit** the `()` brackets for parameter-less invocation)

one can reference a class in a different namespace/package like `com.example.my_rle(5, 3)`

see [Custom processing routines](https://doc.kaitai.io/user_guide.html#custom-process) in the User Guide for more info

name of existing enum field data type becomes given enum

specify a byte which is the string or byte array padded with after the end up to the total size

can be used only with `size` or `size-eos: true` (when the size is fixed)

when `terminator`:
 - isn't specified, then the `pad-right` controls where the string ends (basically acts like a terminator)
 - is specified, padding comes after the terminator, not before. The value is terminated immediately after the terminator occurs, so the `pad-right` has no effect on parsing and is only relevant for serialization

string or byte array reading will stop when it encounters this byte

cannot be used with `type: strz` (which already implies `terminator: 0` - null-terminated string)

specify if terminator byte should be "consumed" when reading

if true: the stream pointer will point to the byte after the terminator byte

if false: the stream pointer will point to the terminator byte itself

default is true

specifies if terminator byte should be considered part of the string read and thus be appended to it

default is false

allows the compiler to ignore the lack of a terminator if eos-error is disabled, string reading will stop at either:

1. terminator being encountered

2. end of stream is reached

default is `true`

specifies position at which the value should be parsed

specifies an IO stream from which a value should be parsed

overrides any reading & parsing. Instead, just calculates function specified in value and returns the result as this instance. Has many purposes

specifies "pure" type of the parameter, without any serialization details (like endianness, sizes, encodings)

| Value                  | Description
|-
| `u1`, `u2`, `u4`, `u8` | unsigned integer
| `s1`, `s2`, `s4`, `s8` | signed integer
| `bX`                   | bit-sized integer (if `X` != 1)
| `f4`, `f8`             | floating point number
| `type` key missing
or `bytes` | byte array
| `str`                  | string
| `bool` (or `b1`)       | boolean
| `struct`               | arbitrary KaitaiStruct-compatible user type
| `io`                   | KaitaiStream-compatible IO stream
| `any`                  | allow any type (if target language supports that)
| other identifier       | user-defined type, without parameters
a nested type can be referenced with double colon (e.g. `type: 'foo::bar'`)

one can specify arrays by appending `[]` after the type identifier (e.g. `type: u2[]`, `type: 'foo::bar[]'`, `type: struct[]` etc.)

path to an enum type (defined in the `enums` map), which will become the type of the parameter

only integer-based enums are supported, so `type` must be an integer type (`type: uX`, `type: sX` or `type: bX`) for this property to work

you can use `enum` with `type: b1` as well: `b1` means a 1-bit **integer** (0 or 1) when used with `enum` (**not** a boolean)

one can reference an enum type of a subtype by specifying a relative path to it from the current type, with a double colon as a path delimiter (e.g. `foo::bar::my_enum`)

Provide a JSON object that satisfies the schema "ksy schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-04/schema#","$ref":"#/definitions/Kustomization","definitions":{"ConfigMapArgs":{"description":"ConfigMapArgs contains the metadata of how to generate a configmap","properties":{"KVSources":{"items":{"$ref":"#/definitions/KVSource"},"type":"array"},"behavior":{"enum":["create","replace","merge"]},"env":{"description":"Deprecated.  Use envs instead.","type":"string"},"envs":{"description":"A list of file paths. The contents of each file should be one key=value pair per line","items":{"type":"string"},"type":"array"},"files":{"description":"A list of file sources to use in creating a list of key, value pairs","items":{"type":"string"},"type":"array"},"literals":{"description":"A list of literal pair sources. Each literal source should be a key and literal value, e.g. `key=value`","items":{"type":"string"},"type":"array"},"name":{"description":"Name - actually the partial name - of the generated resource","type":"string"},"namespace":{"description":"Namespace for the configmap, optional","type":"string"},"options":{"$ref":"#/definitions/GeneratorOptions"}},"additionalProperties":false,"type":"object"},"FieldSelector":{"description":"Contains the fieldPath to an object field","properties":{"fieldpath":{"type":"string"}},"additionalProperties":false,"type":"object"},"FieldSpec":{"properties":{"create":{"type":"boolean"},"group":{"type":"string"},"kind":{"type":"string"},"path":{"type":"string"},"version":{"type":"string"}},"type":"object"},"GeneratorOptions":{"description":"GeneratorOptions modify behavior of all ConfigMap and Secret generators","properties":{"annotations":{"description":"Annotations to add to all generated resources","patternProperties":{".*":{"type":"string"}},"type":"object"},"disableNameSuffixHash":{"description":"DisableNameSuffixHash if true disables the default behavior of adding a suffix to the names of generated resources that is a hash of the resource contents","type":"boolean"},"immutable":{"description":"Immutable if true add to all generated resources","type":"boolean"},"labels":{"description":"Labels to add to all generated resources","patternProperties":{".*":{"type":"string"}},"type":"object"}},"additionalProperties":false,"type":"object"},"HelmChart":{"properties":{"name":{"type":"string"},"version":{"type":"string"},"repo":{"type":"string"},"releaseName":{"type":"string"},"namespace":{"type":"string"},"valuesFile":{"type":"string"},"valuesInline":{"type":"object","patternProperties":{".*":{"additionalProperties":true}}},"valuesMerge":{"type":"string","enum":["merge","override","replace"]},"includeCRDs":{"type":"boolean"},"skipHooks":{"type":"boolean"},"additionalValuesFiles":{"type":"array","items":{"type":"string"}},"skipTests":{"type":"boolean"},"apiVersions":{"type":"array","items":{"type":"string"}},"kubeVersion":{"type":"string"},"nameTemplate":{"type":"string"}},"additionalProperties":false,"type":"object"},"Image":{"properties":{"digest":{"type":"string"},"name":{"type":"string"},"newName":{"type":"string"},"newTag":{"type":"string"},"tagSuffix":{"type":"string","description":"UNDOCUMENTED."}},"additionalProperties":false,"type":"object"},"Inventory":{"description":"Inventory appends an object that contains the record of all other objects, which can be used in apply, prune and delete","properties":{"configMap":{"$ref":"#/definitions/NameArgs"},"type":{"type":"string"}},"additionalProperties":false,"type":"object"},"KVSource":{"properties":{"args":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"pluginType":{"type":"string"}},"additionalProperties":false,"type":"object"},"Kustomization":{"properties":{"apiVersion":{"type":"string"},"bases":{"description":"DEPRECATED. Bases are relative paths or git repository URLs specifying a directory containing a kustomization.yaml file.","items":{"type":"string"},"type":"array"},"commonAnnotations":{"description":"CommonAnnotations to add to all objects","patternProperties":{".*":{"type":"string"}},"type":"object"},"buildMetadata":{"description":"BuildMetadata is a list of strings used to toggle different build options","items":{"type":"string"},"type":"array"},"commonLabels":{"description":" CommonLabels to add to all objects and selectors","patternProperties":{".*":{"type":"string"}},"type":"object"},"configMapGenerator":{"description":"ConfigMapGenerator is a list of configmaps to generate from local data (one configMap per list item)","items":{"$ref":"#/definitions/ConfigMapArgs"},"type":"array"},"configurations":{"description":"Configurations is a list of transformer configuration files","items":{"type":"string"},"type":"array"},"crds":{"description":"Crds specifies relative paths to Custom Resource Definition files. This allows custom resources to be recognized as operands, making it possible to add them to the Resources list. CRDs themselves are not modified.","items":{"type":"string"},"type":"array"},"generatorOptions":{"$ref":"#/definitions/GeneratorOptions"},"generators":{"description":"Generators is a list of files containing custom generators","items":{"type":"string"},"type":"array"},"helmCharts":{"description":"HelmCharts is a list of helm chart configuration instances","items":{"$ref":"#/definitions/HelmChart"},"type":"array"},"helmGlobals":{"description":"HelmGlobals contains helm configuration that isn't chart specific","properties":{"chartHome":{"description":"ChartHome is a file path, relative to the kustomization root, to a directory containing a subdirectory for each chart to be included in the kustomization","type":"string"},"configHome":{"description":"ConfigHome defines a value that kustomize should pass to helm via the HELM_CONFIG_HOME environment variable","type":"string"}},"additionalProperties":false,"type":"object"},"images":{"description":"Images is a list of (image name, new name, new tag or digest) for changing image names, tags or digests. This can also be achieved with a patch, but this operator is simpler to specify.","items":{"$ref":"#/definitions/Image"},"type":"array"},"inventory":{"$ref":"#/definitions/Inventory"},"labels":{"description":"Labels to add to all objects but not selectors","items":{"$ref":"#/definitions/Labels"},"type":"array"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/Metadata","description":"Contains metadata about a Resource"},"namePrefix":{"description":"NamePrefix will prefix the names of all resources mentioned in the kustomization file including generated configmaps and secrets","type":"string"},"nameSuffix":{"description":"NameSuffix will suffix the names of all resources mentioned in the kustomization file including generated configmaps and secrets","type":"string"},"namespace":{"description":"Namespace to add to all objects","type":"string"},"replacements":{"type":"array","description":"Substitute field(s) in N target(s) with a field from a source","items":{"oneOf":[{"$ref":"#/definitions/ReplacementsPath"},{"$ref":"#/definitions/ReplacementsInline"}]}},"openapi":{"description":"OpenAPI contains information about what kubernetes schema to use","patternProperties":{".*":{"type":"string"}},"type":"object"},"patches":{"description":"Apply a patch to multiple resources","items":{"oneOf":[{"$ref":"#/definitions/PatchesPatchPath"},{"$ref":"#/definitions/PatchesInlinePatch"}]},"type":"array"},"patchesJson6902":{"description":"JSONPatches is a list of JSONPatch for applying JSON patch. See http://jsonpatch.com","items":{"$ref":"#/definitions/PatchJson6902"},"type":"array"},"patchesStrategicMerge":{"description":" PatchesStrategicMerge specifies the relative path to a file containing a strategic merge patch. URLs and globs are not supported","items":{"type":"string"},"type":"array"},"replicas":{"description":"Replicas is a list of (resource name, count) for changing number of replicas for a resources. It will match any group and kind that has a matching name and that is one of: Deployment, ReplicationController, Replicaset, Statefulset.","items":{"$ref":"#/definitions/Replicas"},"type":"array"},"resources":{"description":"Resources specifies relative paths to files holding YAML representations of kubernetes API objects. URLs and globs not supported.","items":{"type":"string"},"type":"array"},"components":{"description":"Components are relative paths or git repository URLs specifying a directory containing a kustomization.yaml file of Kind Component.","items":{"type":"string"},"type":"array"},"secretGenerator":{"description":"SecretGenerator is a list of secrets to generate from local data (one secret per list item)","items":{"$ref":"#/definitions/SecretArgs"},"type":"array"},"sortOptions":{"description":"sortOptions is used to sort the resources kustomize outputs","oneOf":[{"properties":{"order":{"enum":["legacy"]},"legacySortOptions":{"properties":{"orderFirst":{"type":"array"},"orderLast":{"type":"array"}},"additionalProperties":false,"type":"object"}},"additionalProperties":false,"type":"object"},{"properties":{"order":{"enum":["fifo"]}},"additionalProperties":false,"type":"object"}]},"transformers":{"description":"Transformers is a list of files containing transformers","items":{"type":"string"},"type":"array"},"validators":{"description":"Validators is a list of files containing validators","items":{"type":"string"},"type":"array"},"vars":{"description":"Allows things modified by kustomize to be injected into a container specification. A var is a name (e.g. FOO) associated with a field in a specific resource instance.  The field must contain a value of type string, and defaults to the name field of the instance","items":{"$ref":"#/definitions/Var"},"type":"array"}},"additionalProperties":false,"type":"object"},"Labels":{"properties":{"pairs":{"description":"Pairs contains the key-value pairs for labels to add","patternProperties":{".*":{"type":"string"}}},"includeSelectors":{"description":"IncludeSelectors indicates should transformer include the fieldSpecs for selectors","type":"boolean"},"includeTemplates":{"description":"IncludeTemplates indicates should transformer include the template labels","type":"boolean"},"fields":{"description":"FieldSpec completely specifies a kustomizable field in a k8s API object. It helps define the operands of transformations","items":{"$ref":"#/definitions/FieldSpec"},"type":"array"}},"additionalProperties":false,"type":"object"},"Metadata":{"properties":{"name":{"type":"string"},"namespace":{"type":"string"},"labels":{"patternProperties":{".*":{"type":"string"}},"type":"object"},"annotations":{"patternProperties":{".*":{"type":"string"}},"type":"object"}},"additionalProperties":false,"type":"object"},"NameArgs":{"properties":{"name":{"type":"string"},"namespace":{"type":"string"}},"additionalProperties":false,"type":"object"},"PatchJson6902":{"oneOf":[{"required":["path","target"],"properties":{"path":{"description":"relative file path for a json patch file inside a kustomization","type":"string"},"target":{"$ref":"#/definitions/PatchTarget","description":"Refers to a Kubernetes object that the json patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization"}},"additionalProperties":false,"type":"object"},{"required":["patch","target"],"properties":{"patch":{"description":"inline json patch","type":"string"},"target":{"$ref":"#/definitions/PatchTarget","description":"Refers to a Kubernetes object that the json patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization"}},"additionalProperties":false,"type":"object"},{"required":["op","path"],"properties":{"op":{"description":"The operation","type":"string","enum":["add","remove","replace","move","copy","test"]},"from":{"description":"The source location.","type":"string"},"path":{"description":"The target location.","type":"string"},"value":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]}},"additionalProperties":false,"type":"object"}]},"PatchTarget":{"required":["kind","name","version"],"properties":{"group":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"version":{"type":"string"}},"additionalProperties":false,"type":"object"},"PatchTargetOptional":{"properties":{"group":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"version":{"type":"string"},"labelSelector":{"type":"string"},"annotationSelector":{"type":"string"}},"additionalProperties":false,"type":"object"},"PatchesOptions":{"properties":{"allowNameChange":{"type":"boolean"},"allowKindChange":{"type":"boolean"}},"additionalProperties":false,"type":"object"},"PatchesPatchPath":{"required":["path"],"properties":{"options":{"$ref":"#/definitions/PatchesOptions"},"path":{"type":"string"},"target":{"$ref":"#/definitions/PatchTargetOptional","description":"Refers to a Kubernetes object that the patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization"}},"additionalProperties":false},"PatchesInlinePatch":{"required":["patch"],"properties":{"options":{"$ref":"#/definitions/PatchesOptions"},"patch":{"type":"string"},"target":{"$ref":"#/definitions/PatchTargetOptional","description":"Refers to a Kubernetes object that the patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization"}},"additionalProperties":false},"ReplacementsInline":{"required":["source","targets"],"type":"object","additionalProperties":false,"properties":{"source":{"type":"object","description":"The source of the value","properties":{"group":{"type":"string","description":"The group of the referent"},"version":{"type":"string","description":"The version of the referent"},"kind":{"type":"string","description":"The kind of the referent"},"name":{"type":"string","description":"The name of the referent"},"namespace":{"type":"string","description":"The namespace of the referent"},"fieldPath":{"type":"string","description":"The structured path to the source value"},"options":{"type":"object","properties":{"delimiter":{"type":"string"},"index":{"type":"number"},"create":{"type":"boolean"}}}}},"targets":{"description":"The N fields to write the value to","type":"array","items":{"required":["select"],"type":"object","properties":{"select":{"type":"object","description":"Include objects that match this","properties":{"group":{"type":"string","description":"The group of the referent"},"version":{"type":"string","description":"The version of the referent"},"kind":{"type":"string","description":"The kind of the referent"},"name":{"type":"string","description":"The name of the referent"},"namespace":{"type":"string","description":"The namespace of the referent"}}},"reject":{"type":"array","description":"Exclude objects that match this","items":{"type":"object","description":"Exclude objects that match this","properties":{"group":{"type":"string","description":"The group of the referent"},"version":{"type":"string","description":"The version of the referent"},"kind":{"type":"string","description":"The kind of the referent"},"name":{"type":"string","description":"The name of the referent"},"namespace":{"type":"string","description":"The namespace of the referent"}}}},"fieldPaths":{"type":"array","description":"The structured path(s) to the target nodes","items":{"type":"string","description":"The structured path to the source value"}},"options":{"type":"object","properties":{"delimiter":{"type":"string"},"index":{"type":"number"},"create":{"type":"boolean"}}}}}}}},"ReplacementsPath":{"required":["path"],"type":"object","additionalProperties":false,"properties":{"path":{"type":"string"}}},"Replicas":{"properties":{"name":{"type":"string"},"count":{"type":"number"}},"additionalProperties":false,"type":"object"},"SecretArgs":{"description":"SecretArgs contains the metadata of how to generate a secret","properties":{"KVSources":{"items":{"$ref":"#/definitions/KVSource"},"type":"array"},"behavior":{"enum":["create","replace","merge"]},"env":{"type":"string"},"envs":{"items":{"type":"string"},"type":"array"},"files":{"items":{"type":"string"},"type":"array"},"literals":{"items":{"type":"string"},"type":"array"},"name":{"description":"Name - actually the partial name - of the generated resource","type":"string"},"namespace":{"description":"Namespace for the secret, optional","type":"string"},"options":{"$ref":"#/definitions/GeneratorOptions"},"type":{"description":"Type of the secret, optional","type":"string"}},"additionalProperties":false,"type":"object"},"Target":{"required":["name"],"properties":{"apiVersion":{"type":"string"},"group":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string","description":"UNDOCUMENTED."},"version":{"type":"string"}},"additionalProperties":false,"type":"object"},"Var":{"description":"Represents a variable whose value will be sourced from a field in a Kubernetes object.","required":["name","objref"],"properties":{"fieldref":{"$ref":"#/definitions/FieldSelector","description":"Refers to the field of the object referred to by objref whose value will be extracted for use in replacing $(FOO)"},"name":{"description":"Value of identifier name e.g. FOO used in container args, annotations, Appears in pod template as $(FOO)","type":"string"},"objref":{"$ref":"#/definitions/Target","description":"Refers to a Kubernetes resource under the purview of this kustomization"}},"additionalProperties":false,"type":"object"}},"id":"https://json.schemastore.org/kustomization.json"}
</schema>

[User] Provide a JSON object that satisfies the schema "kustomization". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

ConfigMapArgs contains the metadata of how to generate a configmap

Deprecated.  Use envs instead.

A list of file paths. The contents of each file should be one key=value pair per line

A list of file sources to use in creating a list of key, value pairs

A list of literal pair sources. Each literal source should be a key and literal value, e.g. `key=value`

Name - actually the partial name - of the generated resource

Namespace for the configmap, optional

Contains the fieldPath to an object field

GeneratorOptions modify behavior of all ConfigMap and Secret generators

Annotations to add to all generated resources

DisableNameSuffixHash if true disables the default behavior of adding a suffix to the names of generated resources that is a hash of the resource contents

Immutable if true add to all generated resources

Labels to add to all generated resources

UNDOCUMENTED.

Inventory appends an object that contains the record of all other objects, which can be used in apply, prune and delete

DEPRECATED. Bases are relative paths or git repository URLs specifying a directory containing a kustomization.yaml file.

CommonAnnotations to add to all objects

BuildMetadata is a list of strings used to toggle different build options

CommonLabels to add to all objects and selectors

ConfigMapGenerator is a list of configmaps to generate from local data (one configMap per list item)

Configurations is a list of transformer configuration files

Crds specifies relative paths to Custom Resource Definition files. This allows custom resources to be recognized as operands, making it possible to add them to the Resources list. CRDs themselves are not modified.

Generators is a list of files containing custom generators

HelmCharts is a list of helm chart configuration instances

HelmGlobals contains helm configuration that isn't chart specific

ChartHome is a file path, relative to the kustomization root, to a directory containing a subdirectory for each chart to be included in the kustomization

ConfigHome defines a value that kustomize should pass to helm via the HELM_CONFIG_HOME environment variable

Images is a list of (image name, new name, new tag or digest) for changing image names, tags or digests. This can also be achieved with a patch, but this operator is simpler to specify.

Labels to add to all objects but not selectors

Contains metadata about a Resource

NamePrefix will prefix the names of all resources mentioned in the kustomization file including generated configmaps and secrets

NameSuffix will suffix the names of all resources mentioned in the kustomization file including generated configmaps and secrets

Namespace to add to all objects

Substitute field(s) in N target(s) with a field from a source

OpenAPI contains information about what kubernetes schema to use

Apply a patch to multiple resources

JSONPatches is a list of JSONPatch for applying JSON patch. See http://jsonpatch.com

PatchesStrategicMerge specifies the relative path to a file containing a strategic merge patch. URLs and globs are not supported

Replicas is a list of (resource name, count) for changing number of replicas for a resources. It will match any group and kind that has a matching name and that is one of: Deployment, ReplicationController, Replicaset, Statefulset.

Resources specifies relative paths to files holding YAML representations of kubernetes API objects. URLs and globs not supported.

Components are relative paths or git repository URLs specifying a directory containing a kustomization.yaml file of Kind Component.

SecretGenerator is a list of secrets to generate from local data (one secret per list item)

sortOptions is used to sort the resources kustomize outputs

Transformers is a list of files containing transformers

Validators is a list of files containing validators

Allows things modified by kustomize to be injected into a container specification. A var is a name (e.g. FOO) associated with a field in a specific resource instance.  The field must contain a value of type string, and defaults to the name field of the instance

Pairs contains the key-value pairs for labels to add

IncludeSelectors indicates should transformer include the fieldSpecs for selectors

IncludeTemplates indicates should transformer include the template labels

FieldSpec completely specifies a kustomizable field in a k8s API object. It helps define the operands of transformations

relative file path for a json patch file inside a kustomization

Refers to a Kubernetes object that the json patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization

inline json patch

The operation

The source location.

The target location.

Refers to a Kubernetes object that the patch will be applied to. It must refer to a Kubernetes resource under the purview of this kustomization

The source of the value

The group of the referent

The version of the referent

The kind of the referent

The name of the referent

The namespace of the referent

The structured path to the source value

The N fields to write the value to

Include objects that match this

The group of the referent

The version of the referent

The kind of the referent

The name of the referent

The namespace of the referent

Exclude objects that match this

Exclude objects that match this

The group of the referent

The version of the referent

The kind of the referent

The name of the referent

The namespace of the referent

The structured path(s) to the target nodes

The structured path to the source value

SecretArgs contains the metadata of how to generate a secret

Namespace for the secret, optional

Type of the secret, optional

UNDOCUMENTED.

Represents a variable whose value will be sourced from a field in a Kubernetes object.

Refers to the field of the object referred to by objref whose value will be extracted for use in replacing $(FOO)

Value of identifier name e.g. FOO used in container args, annotations, Appears in pod template as $(FOO)

Refers to a Kubernetes resource under the purview of this kustomization

Provide a JSON object that satisfies the schema "kustomization". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.