// Code generated by cue get go. DO NOT EDIT.

// Package tool defines statefull operation types for cue commands.
//
// This package is only visible in cue files with a _tool.cue or _tool_test.cue
// ending.
//
// CUE configuration files are not influenced by and do not influence anything
// outside the configuration itself: they are hermetic. Tools solve
// two problems: allow outside values such as environment variables,
// file or web contents, random generators etc. to influence configuration,
// and allow configuration to be actionable from within the tooling itself.
// Separating these concerns makes it clear to user when outside influences are
// in play and the tool definition can be strict about what is allowed.
//
// Tools are defined in files ending with _tool.cue. These files have a
// top-level map, "command", which defines all the tools made available through
// the cue command.
//
// The following definitions are for defining commands in tool files:
//
//     // A Command specifies a user-defined command.
//     //
//     // Descriptions are derived from the doc comment, if they are not provided
//     // structurally, using the following format:
//     //
//     //    // short description on one line
//     //    //
//     //    // Usage: <name> usage (optional)
//     //    //
//     //    // long description covering the remainder of the doc comment.
//     //
//     Command: {
//     	// Tasks specifies the things to run to complete a command. Tasks are
//     	// typically underspecified and completed by the particular internal
//     	// handler that is running them. Tasks can be a single task, or a full
//     	// hierarchy of tasks.
//     	//
//     	// Tasks that depend on the output of other tasks are run after such tasks.
//     	// Use `$after` if a task needs to run after another task but does not
//     	// otherwise depend on its output.
//     	Tasks
//
//     	//
//     	// Example:
//     	//     mycmd [-n] names
//     	$usage?: string
//
//     	// short is short description of what the command does.
//     	$short?: string
//
//     	// long is a longer description that spans multiple lines and
//     	// likely contain examples of usage of the command.
//     	$long?: string
//
//     	// TODO: child commands.
//     }
//
//     // Tasks defines a hierarchy of tasks. A command completes if all tasks have
//     // run to completion.
//     Tasks: Task | {
//     	[name=Name]: Tasks
//     }
//
//     // Name defines a valid task or command sname.
//     Name :: =~#"^\PL(\PL|\PN|-(\PL|\PN))*$"#
//
//     // A Task defines a step in the execution of a command.
//     Task: {
//     	$type: "tool.Task" // legacy field 'kind' still supported for now.
//
//     	// kind indicates the operation to run. It must be of the form
//     	// packagePath.Operation.
//     	$id: =~#"\."#
//     }
//
package tool
