SubtaskExecutor
Utilities for executing subtasks sequentially
Library Implementation
-- SubtaskExecutor.lua
-- Execute subtasks with tracking and error handling
local SubtaskExecutor = {}
-- Execute a subtask by index
function SubtaskExecutor.execute(state, index)
if not state.subtasks or not state.subtasks[index] then
return false, "Invalid subtask index: " .. tostring(index)
end
local subtask = state.subtasks[index]
if subtask.status == "COMPLETE" then
return true, "Subtask already complete"
end
-- Mark as executing
subtask.status = "EXECUTING"
-- Execute the subtask (would call actual subtask implementation)
-- For now, just mark as complete
-- In real implementation: success, result = executeSubtaskImpl(subtask.name, state.data)
subtask.status = "COMPLETE"
subtask.result = "Success"
-- Store result in task state
state.subtaskResults[subtask.name] = subtask.result
return true, "Subtask " .. subtask.name .. " completed"
end
-- Execute next pending subtask
function SubtaskExecutor.executeNext(state)
for i, subtask in ipairs(state.subtasks) do
if subtask.status == "PENDING" then
return SubtaskExecutor.execute(state, i)
end
end
return true, "No pending subtasks"
end
-- Get current subtask being executed
function SubtaskExecutor.getCurrentSubtask(state)
for i, subtask in ipairs(state.subtasks) do
if subtask.status == "EXECUTING" then
return i, subtask
end
end
return nil, nil
end
-- Get execution progress (0.0 to 1.0)
function SubtaskExecutor.getProgress(state)
if not state.subtasks or #state.subtasks == 0 then
return 1.0
end
local completed = 0
for _, subtask in ipairs(state.subtasks) do
if subtask.status == "COMPLETE" then
completed = completed + 1
end
end
return completed / #state.subtasks
end
return SubtaskExecutor
1891 characters
Usage Example
-- Usage example:
local SubtaskExecutor = require("SubtaskExecutor")
function tick()
if taskState.current == "EXECUTING" then
local idx, subtask = SubtaskExecutor.getCurrentSubtask(taskState)
if not idx then
-- No current subtask, execute next
local success, msg = SubtaskExecutor.executeNext(taskState)
if not success then
return "FAILURE", msg
end
else
-- Continue executing current subtask
-- Check if it's done...
end
-- Check overall progress
local progress = SubtaskExecutor.getProgress(taskState)
if progress >= 1.0 then
return "COMPLETE", "All subtasks completed"
end
end
return "CONTINUE", "Executing"
end
Quick Reference
Import Statement
local SubtaskExecutor = require("SubtaskExecutor")
Category
subtask execution
Key Features
- Execute subtasks sequentially
- Track subtask status and results
- Calculate execution progress
- Handle subtask errors