SubtaskExecutor

Utilities for executing subtasks sequentially

subtask execution

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