// 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.
//     Command: {
//     	//
//     	// 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: define flags and environment variables.
//
//     	// tasks specifies the list of things to do to run command. Tasks are
//     	// typically underspecified and completed by the particular internal
//     	// handler that is running them. Task de
//     	tasks <name>: Task
//     }
//
//     // A Task defines a step in the execution of a command.
//     Task: {
//     	// kind indicates the operation to run. It must be of the form
//     	// packagePath.Operation.
//     	kind: =~#"\."#
//     }
//
package tool
