pub struct TaskFile {
pub env: Vec<(String, String)>,
pub tasks: Vec<Task>,
pub warnings: Vec<String>,
}Expand description
A parsed task file: the tasks, any file-level environment hoisted to all of
them (an Env: under a section heading applies to every task regardless
of where in the document it appears; hoisting is not positional), and any
parse warnings (an unterminated fence, a duplicate task, an unknown fence
language). Parsing is infallible. A malformed file still yields what it can,
so an embedder should surface warnings rather than trust silence.
Fields§
§env: Vec<(String, String)>§tasks: Vec<Task>§warnings: Vec<String>Implementations§
Source§impl TaskFile
impl TaskFile
Sourcepub fn task(&self, name: &str) -> Option<&Task>
pub fn task(&self, name: &str) -> Option<&Task>
Find a task by name. The match is exact and case-sensitive, against the heading text as written. The first definition wins if a name is duplicated (a warning is recorded).
Sourcepub fn agent_tasks(&self) -> impl Iterator<Item = &Task>
pub fn agent_tasks(&self) -> impl Iterator<Item = &Task>
The tasks that opted in to an agent or MCP surface via Agent: allow. A
caller exposing tasks to an agent should list and run only these. The
flag is advisory data on Task, so this iterator is the enforcement point,
not the field. (Direct field access bypasses the gate by design; the gate
lives at the surface that chooses what to expose.)
Sourcepub fn invocation(
&self,
task: &Task,
args: &BTreeMap<String, String>,
cwd: &Path,
task_file_dir: Option<&Path>,
) -> Result<Invocation, MissingArg>
pub fn invocation( &self, task: &Task, args: &BTreeMap<String, String>, cwd: &Path, task_file_dir: Option<&Path>, ) -> Result<Invocation, MissingArg>
Build the invocation for task, given args mapping each name to a value
(from TaskFile::bind or an embedder’s prompts). It substitutes
{{ arg }} in the script and Dir:, exports the args and env, and resolves
the working directory this way:
- With no
Dir:, the task runs incwd, the invocation directory, so an inherited or global task acts on your current repo rather than on the directory the task file happens to live in. - A relative
Dir:resolves againsttask_file_dir, the file that defined the task (Nonefalls back tocwd).Dir: .pins the task to the task file’s own directory, the inverse of just’s[no-cd]. - An absolute
Dir:is used verbatim.
Missing optional and variadic args are filled from their defaults, so a
partial args map is fine; only a missing required arg is an error.
The call is pure and cheap, with no filesystem or process access, so it is
safe to call straight from a UI event handler or render path. Build the
Invocation here and run it elsewhere.
Sourcepub fn bind(
task: &Task,
positional: &[String],
) -> Result<BTreeMap<String, String>, MissingArg>
pub fn bind( task: &Task, positional: &[String], ) -> Result<BTreeMap<String, String>, MissingArg>
Bind positional argument values (for example, from the CLI) to a task’s
declared Args:, applying defaults and collecting a trailing *variadic
from the rest. This feeds TaskFile::invocation and errors on a missing
required arg.