-- Inventory Manager - Opus autorun script -- Detects configured role and launches the appropriate program at boot local fs = _G.fs local kernel = _G.kernel local os = _G.os local peripheral = _G.peripheral local shell = _ENV.shell local BASE = 'packages/inventory-manager' local CFG = 'usr/config/inventory-manager' ------------------------------------------------- -- Determine role from config files written during install ------------------------------------------------- local function cfgExists(name) return fs.exists(fs.combine(CFG, name)) or fs.exists(fs.combine(BASE, name)) end local role if cfgExists('.manager_config') then role = 'manager' elseif cfgExists('.client_config') then role = 'client' elseif cfgExists('.webbridge_config') then role = 'bridge' elseif cfgExists('.miner_config') then role = 'miner' elseif _G.turtle then role = 'turtle' end if not role then return end ------------------------------------------------- -- Register reboot listener as a kernel hook -- Allows remote reboot via modem (channel 4205) ------------------------------------------------- local SYSTEM_CHANNEL = 4205 local modem = peripheral.find('modem') if modem then modem.open(SYSTEM_CHANNEL) kernel.hook('modem_message', function(_, data) -- data = { side, channel, replyChannel, message, distance } if data[2] == SYSTEM_CHANNEL and type(data[4]) == 'table' and data[4].type == 'reboot' then local target = data[4].target or 'all' if target == 'all' or target == role or target == tostring(os.getComputerID()) then os.reboot() end end end) end ------------------------------------------------- -- Launch the program for this role ------------------------------------------------- local programs = { manager = 'inventoryManager.lua', client = 'inventoryClient.lua', bridge = 'inventoryWebBridge.lua', turtle = 'craftingTurtle.lua', miner = 'miningTurtle.lua', } local program = fs.combine(BASE, programs[role]) if shell.openForegroundTab then shell.openForegroundTab(program) -- Client role also runs the dropper controller if role == 'client' then local dropper = fs.combine(BASE, 'dropperController.lua') if fs.exists(dropper) then shell.openTab(dropper) end end else -- No multishell — run directly (blocks boot) shell.run(program) end