[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#","allOf":[{"$ref":"https://json.schemastore.org/tsconfig#/definitions/compilerOptionsDefinition"},{"properties":{"controllerPathGlobs":{"description":"An array of path globs that point to your route controllers that you would like to have tsoa include.","items":{"type":"string"},"type":"array"},"entryFile":{"description":"The entry point to your API","type":"string"},"ignore":{"description":"Directories to ignore during TypeScript metadata scan","items":{"type":"string"},"type":"array"},"noImplicitAdditionalProperties":{"description":"Modes that allow you to prevent input data from entering into your API. This will document your decision in the swagger.yaml and it will turn on excess-property validation (at runtime) in your routes.","enum":["ignore","silently-remove-extras","throw-on-extras"],"type":"string"},"routes":{"$ref":"#/definitions/RoutesConfig","description":"Route generation configuration object"},"spec":{"$ref":"#/definitions/SpecConfig","description":"Swagger generation configuration object"}}}],"definitions":{"RoutesConfig":{"properties":{"authenticationModule":{"description":"Authentication Module for express, hapi and koa","type":"string"},"basePath":{"description":"Base API path; e.g. the '/v1' in https://myapi.com/v1","type":"string"},"iocModule":{"description":"IOC module; e.g. './inversify/ioc' where IOC container named `iocContainer` is defined (https://github.com/inversify/InversifyJS)","type":"string"},"middleware":{"description":"Middleware provider.","enum":["express","hapi","koa"],"type":"string"},"middlewareTemplate":{"description":"Override the Middleware template","type":"string"},"routesDir":{"description":"Routes directory; generated routes.ts (which contains the generated code wiring up routes using middleware of choice) will be dropped here","type":"string"},"routesFileName":{"description":"Routes filename; the filename of the generated route file ('routes.ts' by default)","type":"string"}},"type":"object"},"SpecConfig":{"properties":{"basePath":{"description":"Base API path; e.g. the 'v1' in https://myapi.com/v1","type":"string"},"contact":{"description":"Contact Information","properties":{"email":{"default":"npm package author email","description":"The email address of the contact person/organization.","type":"string"},"name":{"default":"npm package author","description":"The identifying name of the contact person/organization.","type":"string"},"url":{"default":"npm package author url","description":"API Info url\nThe URL pointing to the contact information.","type":"string"}},"type":"object"},"description":{"description":"API description; defaults to npm package description","type":"string"},"host":{"description":"API host, expressTemplate.g. localhost:3000 or myapi.com","type":"string"},"license":{"description":"API license; defaults to npm package license","type":"string"},"name":{"description":"API name; defaults to npm package name","type":"string"},"outputDirectory":{"description":"Generated SwaggerConfig.json will output here","type":"string"},"schemes":{"items":{"enum":["http","https","ws","wss"],"type":"string"},"type":"array"},"securityDefinitions":{"additionalProperties":{"anyOf":[{"$ref":"#/definitions/Swagger.BasicSecurity3"},{"$ref":"#/definitions/Swagger.BasicSecurity"},{"$ref":"#/definitions/Swagger.ApiKeySecurity"},{"$ref":"#/definitions/Swagger.OAuth2Security3"},{"$ref":"#/definitions/Swagger.OAuth2ImplicitSecurity"},{"$ref":"#/definitions/Swagger.OAuth2PasswordSecurity"},{"$ref":"#/definitions/Swagger.OAuth2ApplicationSecurity"},{"$ref":"#/definitions/Swagger.OAuth2AccessCodeSecurity"}]},"description":"Security Definitions Object\nA declaration of the security schemes available to be used in the\nspecification. This does not enforce the security schemes on the operations\nand only serves to provide the relevant details for each scheme.","type":"object"},"spec":{"description":"Extend generated swagger spec with this object\nNote that generated properties will always take precedence over what get specified here"},"specMerging":{"default":"'immediate'","description":"Alter how the spec is merged to generated swagger spec.\nPossible values:\n  - 'immediate' is overriding top level elements only thus you can not append a new path or alter an existing value without erasing same level elements.\n  - 'recursive' proceed to a deep merge and will concat every branches or override or create new values if needed. @see https://www.npmjs.com/package/merge\n  - 'deepmerge' uses `deepmerge` to merge, which will concat object branches and concat arrays as well @see https://www.npmjs.com/package/deepmerge\nThe default is set to immediate so it is not breaking previous versions.","enum":["deepmerge","immediate","recursive"],"type":"string"},"specVersion":{"description":"Major OpenAPI version to generate; defaults to version 2 when not specified\nPossible values:\n  - 2: generates OpenAPI version 2.\n  - 3: generates OpenAPI version 3.","enum":[2,3],"type":"number"},"tags":{"description":"Swagger Tags Information for your API","items":{"$ref":"#/definitions/Swagger.Tag"},"type":"array"},"version":{"description":"API version number; defaults to npm package version","type":"string"},"yaml":{"type":"boolean"}},"type":"object"},"Swagger.ApiKeySecurity":{"properties":{"description":{"type":"string"},"in":{"enum":["header","query"],"type":"string"},"name":{"type":"string"},"type":{"enum":["apiKey"],"type":"string"}},"type":"object"},"Swagger.BasicSecurity":{"properties":{"description":{"type":"string"},"type":{"enum":["basic"],"type":"string"}},"type":"object"},"Swagger.BasicSecurity3":{"properties":{"description":{"type":"string"},"scheme":{"enum":["basic"],"type":"string"},"type":{"enum":["http"],"type":"string"}},"type":"object"},"Swagger.ExternalDocs":{"properties":{"description":{"type":"string"},"url":{"type":"string"}},"type":"object"},"Swagger.OAuth2AccessCodeSecurity":{"properties":{"authorizationUrl":{"type":"string"},"description":{"type":"string"},"flow":{"enum":["accessCode"],"type":"string"},"scopes":{"$ref":"#/definitions/Swagger.OAuthScope"},"tokenUrl":{"type":"string"},"type":{"enum":["oauth2"],"type":"string"}},"type":"object"},"Swagger.OAuth2ApplicationSecurity":{"properties":{"description":{"type":"string"},"flow":{"enum":["application"],"type":"string"},"scopes":{"$ref":"#/definitions/Swagger.OAuthScope"},"tokenUrl":{"type":"string"},"type":{"enum":["oauth2"],"type":"string"}},"type":"object"},"Swagger.OAuth2ImplicitSecurity":{"properties":{"authorizationUrl":{"type":"string"},"description":{"type":"string"},"flow":{"enum":["implicit"],"type":"string"},"scopes":{"$ref":"#/definitions/Swagger.OAuthScope"},"type":{"enum":["oauth2"],"type":"string"}},"type":"object"},"Swagger.OAuth2PasswordSecurity":{"properties":{"description":{"type":"string"},"flow":{"enum":["password"],"type":"string"},"scopes":{"$ref":"#/definitions/Swagger.OAuthScope"},"tokenUrl":{"type":"string"},"type":{"enum":["oauth2"],"type":"string"}},"type":"object"},"Swagger.OAuth2Security3":{"properties":{"description":{"type":"string"},"flows":{"$ref":"#/definitions/Swagger.OAuthFlow"},"type":{"enum":["oauth2"],"type":"string"}},"type":"object"},"Swagger.OAuth2SecurityFlow3":{"properties":{"authorizationUrl":{"type":"string"},"description":{"type":"string"},"scopes":{"$ref":"#/definitions/Swagger.OAuthScope"},"tokenUrl":{"type":"string"}},"type":"object"},"Swagger.OAuthFlow":{"properties":{"authorizationCode":{"$ref":"#/definitions/Swagger.OAuth2SecurityFlow3"},"clientCredentials":{"$ref":"#/definitions/Swagger.OAuth2SecurityFlow3"},"implicit":{"$ref":"#/definitions/Swagger.OAuth2SecurityFlow3"},"password":{"$ref":"#/definitions/Swagger.OAuth2SecurityFlow3"}},"type":"object"},"Swagger.OAuthScope":{"additionalProperties":{"type":"string"},"type":"object"},"Swagger.Tag":{"properties":{"description":{"type":"string"},"externalDocs":{"$ref":"#/definitions/Swagger.ExternalDocs"},"name":{"type":"string"}},"type":"object"}},"description":"JSON Schema for the tsoa configuration file","id":"https://json.schemastore.org/tsoa","title":"tsoa","type":"object"}
</schema>

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

An array of path globs that point to your route controllers that you would like to have tsoa include.

The entry point to your API

Directories to ignore during TypeScript metadata scan

Modes that allow you to prevent input data from entering into your API. This will document your decision in the swagger.yaml and it will turn on excess-property validation (at runtime) in your routes.

Route generation configuration object

Swagger generation configuration object

Authentication Module for express, hapi and koa

Base API path; e.g. the '/v1' in https://myapi.com/v1

IOC module; e.g. './inversify/ioc' where IOC container named `iocContainer` is defined (https://github.com/inversify/InversifyJS)

Middleware provider.

Override the Middleware template

Routes directory; generated routes.ts (which contains the generated code wiring up routes using middleware of choice) will be dropped here

Routes filename; the filename of the generated route file ('routes.ts' by default)

Base API path; e.g. the 'v1' in https://myapi.com/v1

Contact Information

The email address of the contact person/organization.

The identifying name of the contact person/organization.

API Info url
The URL pointing to the contact information.

API description; defaults to npm package description

API host, expressTemplate.g. localhost:3000 or myapi.com

API license; defaults to npm package license

API name; defaults to npm package name

Generated SwaggerConfig.json will output here

Security Definitions Object
A declaration of the security schemes available to be used in the
specification. This does not enforce the security schemes on the operations
and only serves to provide the relevant details for each scheme.

Extend generated swagger spec with this object
Note that generated properties will always take precedence over what get specified here

Alter how the spec is merged to generated swagger spec.
Possible values:
  - 'immediate' is overriding top level elements only thus you can not append a new path or alter an existing value without erasing same level elements.
  - 'recursive' proceed to a deep merge and will concat every branches or override or create new values if needed. @see https://www.npmjs.com/package/merge
  - 'deepmerge' uses `deepmerge` to merge, which will concat object branches and concat arrays as well @see https://www.npmjs.com/package/deepmerge
The default is set to immediate so it is not breaking previous versions.

Major OpenAPI version to generate; defaults to version 2 when not specified
Possible values:
  - 2: generates OpenAPI version 2.
  - 3: generates OpenAPI version 3.

Swagger Tags Information for your API

API version number; defaults to npm package version

JSON Schema for the tsoa configuration file

tsoa

Provide a JSON object that satisfies the schema "tsoa". 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>
{"$id":"https://raw.githubusercontent.com/spectral-discord/TSON/main/schema/tson.json","$schema":"http://json-schema.org/draft-07/schema#","title":"TSON Schema","type":"object","properties":{"tunings":{"type":"array","description":"List of tuning objects","minItems":1,"uniqueItems":true,"items":{"type":"object","properties":{"name":{"type":"string","description":"The tuning's name"},"description":{"type":"string","description":"A description of the tuning"},"id":{"type":"string","description":"A unique identifier for the tuning"},"scales":{"type":"array","description":"List of scale objects","minItems":1,"items":{"type":"object","properties":{"notes":{"type":"array","description":"A list of the scale's notes","minItems":1,"uniqueItems":true,"items":{"oneOf":[{"type":"object","properties":{"frequency ratio":{"description":"The note's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"ratio":{"description":"The note's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"name":{"type":"string","description":"The note's name"}},"additionalProperties":true,"if":{"propertyNames":{"enum":["ratio","frequency ratio"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["ratio"]},{"required":["frequency ratio"]}]}},{"description":"The note's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]}]}},"reference":{"type":"object","description":"A reference frequency that is used to map the note's frequency ratios to real frequencies values (ie., in Hz).\nCan be either a number (optionally appended with \" Hz\") or an object containing a frequency and an optional note that references one of the note names from the scale's notes list.\nIf no note name is provided, the reference frequency will be mapped to the frequency ratio \"1\".","properties":{"frequency":{"description":"The reference frequency - a number, optionally with \" Hz\" appended","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"note":{"type":"string","description":"The name of the note that should be mapped onto the reference frequency"}},"required":["frequency"],"additionalProperties":true},"repeat ratio":{"description":"The frequency ratio at which the scale's notes will repeat","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"repeat":{"description":"The frequency ratio at which the scale's notes will repeat","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"max frequency":{"description":"A maximum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped above the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"max":{"description":"A maximum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped above the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"maximum":{"description":"A maximum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped above the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"min frequency":{"description":"A minimum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped below the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"minimum":{"description":"A minimum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped below the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"min":{"description":"A minimum frequency for the scale.\nWhen mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped below the provided frequency.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^(0*[1-9][0-9]*(\\.[0-9]+)?|0+\\.[0-9]*[1-9][0-9]*)( Hz)?$"}]},"spectrum":{"type":"string","description":"The spectrum of the tones that should be used for this tuning.\nThis enables multiple, scale-dependent spectra to be used within a single tuning."}},"required":["notes","reference"],"additionalProperties":true,"allOf":[{"not":{"required":["repeat","repeat ratio"]}},{"oneOf":[{"required":["min"]},{"required":["minimum"]},{"required":["min frequency"]},{"not":{"oneOf":[{"required":["min"]},{"required":["minimum"]},{"required":["min frequency"]},{"required":["min","minimum"]},{"required":["min","min frequency"]},{"required":["minimum","min frequency"]}]}}]},{"oneOf":[{"required":["max"]},{"required":["maximum"]},{"required":["max frequency"]},{"not":{"oneOf":[{"required":["max"]},{"required":["maximum"]},{"required":["max frequency"]},{"required":["max","maximum"]},{"required":["max","max frequency"]},{"required":["maximum","max frequency"]}]}}]}]}}},"required":["id","scales"],"additionalProperties":true}},"spectra":{"type":"array","description":"A list of spectrum objects","minItems":1,"uniqueItems":true,"items":{"type":"object","properties":{"name":{"type":"string","description":"The spectrum's name"},"description":{"type":"string","description":"A description of the spectrum"},"id":{"type":"string","description":"A unique identifier for the spectrum"},"partial distribution":{"type":"array","description":"A list of partials that should be used to reconstruct the spectrum","minItems":1,"uniqueItems":true,"items":{"type":"object","properties":{"frequency ratio":{"description":"The partial's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"ratio":{"description":"The partial's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"amplitude weight":{"description":"The partial's amplitude weight.\nThis determines how much the partial contributes to the overall power (ie., loudness) of the reconstructed spectrum.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"weight":{"description":"The partial's amplitude weight.\nThis determines how much the partial contributes to the overall power (ie., loudness) of the reconstructed spectrum.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]}},"additionalProperties":true,"allOf":[{"if":{"propertyNames":{"enum":["frequency ratio","ratio"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["frequency ratio"]},{"required":["ratio"]}]}},{"if":{"propertyNames":{"enum":["amplitude weight","weight"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["amplitude weight"]},{"required":["weight"]}]}}]}},"partials":{"type":"array","description":"A list of partials that should be used to reconstruct the spectrum","minItems":1,"uniqueItems":true,"items":{"type":"object","properties":{"frequency ratio":{"description":"The partial's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"ratio":{"description":"The partial's frequency ratio","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"amplitude weight":{"description":"The partial's amplitude weight.\nThis determines how much the partial contributes to the overall power (ie., loudness) of the reconstructed spectrum.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]},"weight":{"description":"The partial's amplitude weight.\nThis determines how much the partial contributes to the overall power (ie., loudness) of the reconstructed spectrum.","anyOf":[{"type":"number","exclusiveMinimum":0.0,"rules":[{"name":"sign","args":{"sign":"positive"}}]},{"type":"string","pattern":"^([1234567890.,+\\-*/^%()e ]|(pi)|(tau)|(abs)|(log))+$"}]}},"additionalProperties":true,"allOf":[{"if":{"propertyNames":{"enum":["frequency ratio","ratio"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["frequency ratio"]},{"required":["ratio"]}]}},{"if":{"propertyNames":{"enum":["amplitude weight","weight"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["amplitude weight"]},{"required":["weight"]}]}}]}}},"required":["id"],"additionalProperties":true,"if":{"propertyNames":{"enum":["partials","partial distribution"]},"minProperties":2},"then":false,"else":{"oneOf":[{"required":["partials"]},{"required":["partial distribution"]}]}}},"sets":{"type":"array","description":"A list of set objects","minItems":1,"uniqueItems":true,"items":{"type":"object","properties":{"id":{"type":"string","description":"A unique identifier for the set"},"name":{"type":"string","description":"The set's name"},"description":{"type":"string","description":"A description of the set"},"members":{"type":"array","description":"A list of set member objects","minItems":1,"items":{"type":"object","properties":{"tuning":{"type":"string","description":"A reference of a tuning's ID"},"spectrum":{"type":"string","description":"A reference of a spectrum's ID"},"override scale spectra":{"type":"boolean","description":"If true, the set's spectrum should be applied to all scales in the set's tuning, overriding any spectra that are references by the scales."}},"additionalProperties":true}}},"required":["id","members"],"additionalProperties":true}}},"additionalProperties":true,"anyOf":[{"required":["tunings"]},{"required":["spectra"]},{"required":["sets"]}]}
</schema>

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

TSON Schema

List of tuning objects

The tuning's name

A description of the tuning

A unique identifier for the tuning

List of scale objects

A list of the scale's notes

The note's frequency ratio

The note's frequency ratio

The note's name

The note's frequency ratio

A reference frequency that is used to map the note's frequency ratios to real frequencies values (ie., in Hz).
Can be either a number (optionally appended with " Hz") or an object containing a frequency and an optional note that references one of the note names from the scale's notes list.
If no note name is provided, the reference frequency will be mapped to the frequency ratio "1".

The reference frequency - a number, optionally with " Hz" appended

The name of the note that should be mapped onto the reference frequency

The frequency ratio at which the scale's notes will repeat

A maximum frequency for the scale.
When mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped above the provided frequency.

A minimum frequency for the scale.
When mapping the scale's notes onto actual frequencies, notes from this scale will not be mapped below the provided frequency.

The spectrum of the tones that should be used for this tuning.
This enables multiple, scale-dependent spectra to be used within a single tuning.

A list of spectrum objects

The spectrum's name

A description of the spectrum

A unique identifier for the spectrum

A list of partials that should be used to reconstruct the spectrum

The partial's frequency ratio

The partial's frequency ratio

The partial's amplitude weight.
This determines how much the partial contributes to the overall power (ie., loudness) of the reconstructed spectrum.

The partial's frequency ratio

The partial's frequency ratio

A list of set objects

A unique identifier for the set

The set's name

A description of the set

A list of set member objects

A reference of a tuning's ID

A reference of a spectrum's ID

If true, the set's spectrum should be applied to all scales in the set's tuning, overriding any spectra that are references by the scales.

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


[User] Provide a JSON object that satisfies the schema "tunnelhub". Here are the required top‑level fields: service, package, configuration. Return only the valid JSON object.

runtimeEngine entrypoint runtime memorySize

Provide a JSON object that satisfies the schema "tunnelhub". Here are the required top‑level fields: service, package, configuration. 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>
{"$defs":{"argClause":{"additionalProperties":false,"description":"A command-line argument definition for the task.","properties":{"type":{"$ref":"#/$defs/type","title":"type"},"usage":{"description":"A one-line summary of the argument.","title":"usage","type":"string"},"values":{"description":"A predefined set of acceptable values to provide for the argument.","items":{"$ref":"#/$defs/value"},"title":"values","type":"array"}},"type":"object"},"argsClause":{"additionalProperties":{"$ref":"#/$defs/argClause"},"description":"The set of command-line arguments that must be provided to the task.","type":"object"},"commandClause":{"description":"The command or commands to execute using the global interpreter.","oneOf":[{"$ref":"#/$defs/commandItem"},{"items":{"$ref":"#/$defs/commandItem"},"type":"array"}]},"commandItem":{"description":"The command to execute using the global interpreter.","oneOf":[{"type":"string"},{"additionalProperties":false,"properties":{"dir":{"title":"dir","type":"string"},"exec":{"description":"The command to execute using the global interpreter.","title":"exec","type":"string"},"print":{"description":"The text that will be printed when the command is executed.","title":"print","type":"string"},"quiet":{"default":false,"description":"Whether to silence the text/hint before execution.\nCommand output will still be printed.\n","title":"quiet","type":"boolean"}},"required":["exec"],"type":"object"}]},"defaultClause":{"description":"The default value to use if the value is not otherwise set.\nIf multiple values are provided, the first `when` that evaluates to true will be used as the default value, with an omitted `when` always considered true.\n","oneOf":[{"$ref":"#/$defs/defaultItem"},{"items":{"$ref":"#/$defs/defaultItem"},"type":"array"}],"title":"default"},"defaultItem":{"description":"A default value to use if the value is not otherwise set.\nIf a `when` clause is provided, the value will be used if and only if the condition evaluates to true.\n","oneOf":[{"$ref":"#/$defs/value"},{"additionalProperties":false,"oneOf":[{"required":["command"]},{"required":["value"]}],"properties":{"command":{"description":"A command to run via the global interpreter.\nThe value of stdout will be used as the value.\n","title":"command","type":"string"},"value":{"$ref":"#/$defs/value","title":"value"},"when":{"$ref":"#/$defs/whenClause","title":"when"}},"type":"object"}]},"envFile":{"description":"A file to load environment variables from.\nFile paths specified are relative to the configuration file.\n","oneOf":[{"type":"string"},{"additionalProperties":false,"properties":{"path":{"description":"The path to an environment file relative to the configuration file.\n","type":"string"},"required":{"default":true,"description":"Whether the file is required to exist.","type":"boolean"}},"required":["path"],"type":"object"}]},"envFileClause":{"description":"The files to load environment variables from.\nIf no value is specified, environment variables will be read from an optional `.env` file automatically.\n","oneOf":[{"$ref":"#/$defs/envFile"},{"items":{"$ref":"#/$defs/envFile"},"type":"array"}]},"option":{"additionalProperties":false,"allOf":[{"not":{"required":["private","environment"]}},{"not":{"required":["private","required"]}},{"not":{"required":["private","short"]}},{"not":{"required":["private","values"]}},{"not":{"required":["required","default"]}}],"description":"A command-line option for the task.\nOptions may be set by CLI flag, environment variable, or a configured default value, in that order.\n","properties":{"default":{"$ref":"#/$defs/defaultClause","title":"default"},"environment":{"description":"An environment variable that can be used to set the value.","title":"environment","type":"string"},"private":{"default":false,"description":"Whether the option is configurable by CLI or environment variable.","title":"private","type":"boolean"},"required":{"default":false,"title":"required","type":"boolean"},"rewrite":{"description":"The text to use for interpolation for boolean values.","title":"rewrite","type":"string"},"short":{"description":"The one-letter option name.\nShort flags can be passed using a single hyphen (e.g., -a) or combined with other short flags (e.g., -abc).\n","maxLength":1,"minLength":1,"title":"short","type":"string"},"type":{"$ref":"#/$defs/type","title":"type"},"usage":{"description":"A one-line summary of the option.","title":"usage","type":"string"},"values":{"description":"A predefined set of acceptable values to provide for the option.","items":{"$ref":"#/$defs/value"},"title":"values","type":"array"}},"type":"object"},"optionsClause":{"additionalProperties":{"$ref":"#/$defs/option"},"description":"The set of command-line options that may be provided to the task.","type":"object"},"runClause":{"anyOf":[{"$ref":"#/$defs/runItem"},{"items":{"$ref":"#/$defs/runItem"},"type":"array"}],"description":"The behavior of the task."},"runItem":{"oneOf":[{"$ref":"#/$defs/commandClause"},{"additionalProperties":false,"oneOf":[{"required":["command"]},{"required":["set-environment"]},{"required":["task"]}],"properties":{"command":{"$ref":"#/$defs/commandClause","title":"run command"},"set-environment":{"$ref":"#/$defs/setEnvironmentClause","title":"run set environment"},"task":{"$ref":"#/$defs/subTaskClause","title":"run sub-task"},"when":{"$ref":"#/$defs/whenClause","title":"run when"}},"type":"object"}]},"setEnvironmentClause":{"additionalProperties":{"type":["string","null"]},"description":"The environment variables to either set or unset.","type":"object"},"stringOrArray":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"subTaskClause":{"description":"A sub-task to run as a part of the outer task definition.","oneOf":[{"type":"string"},{"additionalProperties":false,"properties":{"args":{"description":"The argument values to pass to the sub-task.","items":{"$ref":"#/$defs/value"},"title":"sub-task args","type":"array"},"name":{"description":"The name of the sub-task to run.","title":"sub-task name","type":"string"},"options":{"additionalProperties":{"$ref":"#/$defs/value"},"description":"The option values to pass to the sub-task.","title":"sub-task options","type":"object"}},"required":["name"],"type":"object"}]},"taskClause":{"description":"The task definition.","oneOf":[{"$ref":"#/$defs/taskInclude"},{"$ref":"#/$defs/taskItem"}]},"taskInclude":{"additionalProperties":false,"properties":{"include":{"description":"The relative file path to the yaml task definition.\n","title":"task include","type":"string"}},"required":["include"],"type":"object"},"taskItem":{"additionalProperties":false,"properties":{"args":{"$ref":"#/$defs/argsClause","title":"task args"},"description":{"description":"The full description of the task. This may be a multi-line value.\n","title":"task description","type":"string"},"finally":{"$ref":"#/$defs/runClause","description":"Logic to execute after a task's run logic has completed, whether or not that task was successful.\n","title":"task finally"},"options":{"$ref":"#/$defs/optionsClause","title":"task options"},"private":{"default":false,"description":"Whether the task can be ran directly.","title":"task private","type":"boolean"},"quiet":{"default":false,"description":"Whether to silence the text/hint before execution.\nCommand output will still be printed.","title":"task quiet","type":"boolean"},"run":{"$ref":"#/$defs/runClause","title":"task run"},"source":{"$ref":"#/$defs/stringOrArray","description":"File patterns used as inputs for the task using glob syntax.\nIf all target patterns exist and have newer timestamps than the newest source pattern, the task will be skipped. Otherwise, the task will execute as normal.\n","title":"task source"},"target":{"$ref":"#/$defs/stringOrArray","description":"File patterns used as outputs for the task using glob syntax.\nIf all target patterns exist and have newer timestamps than the newest source pattern, the task will be skipped. Otherwise, the task will execute as normal.\n","title":"task target"},"usage":{"description":"A one-line summary of the task.","title":"task usage","type":"string"}},"required":["run"],"type":"object"},"tasksClause":{"additionalProperties":{"$ref":"#/$defs/taskClause"},"description":"The list of defined tasks available.","type":"object"},"type":{"description":"The type of the value.\n","enum":["int","integer","float","float64","double","bool","boolean","string"]},"value":{"description":"The value of an arg or option.","oneOf":[{"type":"number"},{"type":"boolean"},{"type":"string"}]},"valueList":{"description":"A set of possible values for an arg or option.","oneOf":[{"$ref":"#/$defs/value"},{"items":{"$ref":"#/$defs/value"},"type":"array"}]},"whenClause":{"description":"A condition that controls whether its outer clause runs or not.\nEach individual item in the list of when clauses must pass for the check to be considered successful.\n","oneOf":[{"$ref":"#/$defs/whenItem"},{"items":{"$ref":"#/$defs/whenItem"},"type":"array"}]},"whenItem":{"oneOf":[{"$ref":"#/$defs/value"},{"additionalProperties":false,"minProperties":1,"properties":{"command":{"$ref":"#/$defs/stringOrArray","description":"A command to run via the global interpreter.\nThe when clause will be considered a success if any of the commands exit with a status code of 0.\n","title":"when command"},"environment":{"additionalProperties":{"$ref":"#/$defs/stringOrArray"},"description":"A set of environment variable values to check.\nThe when clause will be considered a success if any environment variable matches any of the provided values.\n","title":"when environment","type":"object"},"equal":{"additionalProperties":{"$ref":"#/$defs/valueList"},"description":"A set of arg or option values to check.\nThe when clause will be considered a success if any arg or option matches any of the provided values.\n","title":"when equal","type":"object"},"exists":{"$ref":"#/$defs/stringOrArray","description":"A set of files to check for existence.\nThe when clause will be considered a success if any of the files exist.\n","title":"when exists"},"not-equal":{"additionalProperties":{"$ref":"#/$defs/valueList"},"description":"A set of arg or option values to check negatively.\nThe when clause will be considered a success if any of the arg or option values do not match any of the provided values.\n","title":"when not equal","type":"object"},"not-exists":{"$ref":"#/$defs/stringOrArray","description":"A set of files to check for non-existence.\nThe when clause will be considered a success if any of the files do not exist.\n","title":"when not exists"},"os":{"$ref":"#/$defs/stringOrArray","description":"A set of operating systems to check against.\nThe when clause will be considered a success if the current OS matches any of the provided operating systems.\n","title":"when os"}},"type":"object"}]}},"$id":"https://github.com/rliebz/tusk/blob/main/tusk.schema.json","$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"env-file":{"$ref":"#/$defs/envFileClause","title":"env-file"},"interpreter":{"default":"sh -c","description":"The interpreter to use for commands.\nThe interpreter is specified as an executable, which can either be an absolute path or available on the user's PATH, followed by a series of optional arguments.\nThe commands specified in individual tasks will be passed as the final argument.\n","examples":["node -e","python3 -c"],"title":"interpreter","type":"string"},"name":{"default":"tusk","description":"The alias name to display in help text when using shell aliases to create a custom named CLI application.\n","title":"name","type":"string"},"options":{"$ref":"#/$defs/optionsClause","description":"Shared options available to all tasks.\nAny shared variables referenced by a task will be exposed by command-line when invoking that task. Shared variables referenced by a sub-task will be evaluated as needed, but not exposed by command-line.\nTasks that define an argument or option with the same name as a shared task will overwrite the value of the shared option for the length of that task, not including sub-tasks.\n","title":"shared options"},"tasks":{"$ref":"#/$defs/tasksClause","title":"tasks"},"usage":{"default":"the modern task runner","description":"The usage text to display in help text when using shell aliases to create a custom named CLI application.\n","title":"usage","type":"string"}},"title":"JSON schema for tusk configuration files","type":"object"}
</schema>

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

A command-line argument definition for the task.

type

A one-line summary of the argument.

usage

A predefined set of acceptable values to provide for the argument.

values

The set of command-line arguments that must be provided to the task.

The command or commands to execute using the global interpreter.

The command to execute using the global interpreter.

dir

exec

The text that will be printed when the command is executed.

print

Whether to silence the text/hint before execution.
Command output will still be printed.

quiet

The default value to use if the value is not otherwise set.
If multiple values are provided, the first `when` that evaluates to true will be used as the default value, with an omitted `when` always considered true.

default

A default value to use if the value is not otherwise set.
If a `when` clause is provided, the value will be used if and only if the condition evaluates to true.

A command to run via the global interpreter.
The value of stdout will be used as the value.

command

value

when

A file to load environment variables from.
File paths specified are relative to the configuration file.

The path to an environment file relative to the configuration file.

Whether the file is required to exist.

The files to load environment variables from.
If no value is specified, environment variables will be read from an optional `.env` file automatically.

A command-line option for the task.
Options may be set by CLI flag, environment variable, or a configured default value, in that order.

default

An environment variable that can be used to set the value.

environment

Whether the option is configurable by CLI or environment variable.

private

required

The text to use for interpolation for boolean values.

rewrite

The one-letter option name.
Short flags can be passed using a single hyphen (e.g., -a) or combined with other short flags (e.g., -abc).

short

type

A one-line summary of the option.

usage

A predefined set of acceptable values to provide for the option.

values

The set of command-line options that may be provided to the task.

The behavior of the task.

run command

run set environment

run sub-task

run when

The environment variables to either set or unset.

A sub-task to run as a part of the outer task definition.

The argument values to pass to the sub-task.

sub-task args

The name of the sub-task to run.

sub-task name

The option values to pass to the sub-task.

sub-task options

The task definition.

The relative file path to the yaml task definition.

task include

task args

The full description of the task. This may be a multi-line value.

task description

Logic to execute after a task's run logic has completed, whether or not that task was successful.

task finally

task options

Whether the task can be ran directly.

task private

task quiet

task run

File patterns used as inputs for the task using glob syntax.
If all target patterns exist and have newer timestamps than the newest source pattern, the task will be skipped. Otherwise, the task will execute as normal.

task source

File patterns used as outputs for the task using glob syntax.
If all target patterns exist and have newer timestamps than the newest source pattern, the task will be skipped. Otherwise, the task will execute as normal.

task target

A one-line summary of the task.

task usage

The list of defined tasks available.

The type of the value.

int integer float float64 double bool boolean string

The value of an arg or option.

A set of possible values for an arg or option.

A condition that controls whether its outer clause runs or not.
Each individual item in the list of when clauses must pass for the check to be considered successful.

A command to run via the global interpreter.
The when clause will be considered a success if any of the commands exit with a status code of 0.

when command

A set of environment variable values to check.
The when clause will be considered a success if any environment variable matches any of the provided values.

when environment

A set of arg or option values to check.
The when clause will be considered a success if any arg or option matches any of the provided values.

when equal

A set of files to check for existence.
The when clause will be considered a success if any of the files exist.

when exists

A set of arg or option values to check negatively.
The when clause will be considered a success if any of the arg or option values do not match any of the provided values.

when not equal

A set of files to check for non-existence.
The when clause will be considered a success if any of the files do not exist.

when not exists

A set of operating systems to check against.
The when clause will be considered a success if the current OS matches any of the provided operating systems.

when os

env-file

The interpreter to use for commands.
The interpreter is specified as an executable, which can either be an absolute path or available on the user's PATH, followed by a series of optional arguments.
The commands specified in individual tasks will be passed as the final argument.

interpreter

The alias name to display in help text when using shell aliases to create a custom named CLI application.

name

Shared options available to all tasks.
Any shared variables referenced by a task will be exposed by command-line when invoking that task. Shared variables referenced by a sub-task will be evaluated as needed, but not exposed by command-line.
Tasks that define an argument or option with the same name as a shared task will overwrite the value of the shared option for the length of that task, not including sub-tasks.

shared options

tasks

The usage text to display in help text when using shell aliases to create a custom named CLI application.

usage

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