diff --git a/manifest b/manifest index f337ffd..0ebdf54 100644 --- a/manifest +++ b/manifest @@ -1,2 +1,2 @@ -{"build":774,"description":"apparently this fixes something","files":{"LICENSES":"f3549d84d66eb53dd4a421a4341d77d3d217c1b117d67e3be8f5211adcda0952","autorun.lua":"77fa9e68b5e256691c24d2f3eb3bd230e69d851db48088b451a7e22a6ae1df14","bin/5rot26.lua":"417891a232e325476f980d31d88edc486d526611a6350ce47fd29cca464ebf2c","bin/BSOD.lua":"a2ea9bf1e64dbc2c314e3be71f46e973c0bc2b9c482395120f5d152c6d231e86","bin/b.lua":"5123c6d1bb2b3d6c8e7b4d1b94e60d47c3b6c64c5a0fe8bda8481b718ba00602","bin/build.lua":"a990239e1db05176dd0ba56bc0179eecccd8473d88c6c618d16e72ede270e4c2","bin/ccemux.lua":"239476f58835b86bbcac31ce8af3c3acd3d198a55ab9ada78c62fbf358625a98","bin/chronometer.lua":"db5363993a04382145aef7db2fbe262f0bf10697a589e1e2d2f9ce0f87430dd8","bin/chuck.lua":"571a1eacde435bbd9f54b493149339ac48972a3a4550635b9107da0091fe888a","bin/clear_space.lua":"fc3d52563adaf0491b71227f8b6f615d604063a89830a2ab86a20d10e1a07e97","bin/ctime.lua":"39abe36b15724bcb09f2f901a88a1efb453f8896fe5d07769f434db3bd891652","bin/est.lua":"88ab488c2ded31d67816da8c309a63ac455b461368b3b943aeeb5106b1051cc0","bin/exorcise.lua":"ae25e5939ce52620b0a1e64679a1ac47bcaaff9e323d29c6651bce24a3e58116","bin/factor.lua":"39c2f1709a4258d754278860177c7bb2ea336a8b8392a4c3017c849705e63926","bin/fortune.lua":"64a595afb9ffbaa39622b32379d8dc40d4f1fd36d38027382ed0ae130ad0c59d","bin/game_mode.lua":"f1519969a83e6c7c001d4092cbc7806ea489652ea19022425a893fb4d153572f","bin/grep.lua":"1509bc267867b933e528ab74cfbc2a15fa2df0ec7389df4f9033194ab9037865","bin/hacker.lua":"889e1a47c5ff7470ddf61d87eb7cca9750193976139d513fbe67b7625195d65a","bin/id.lua":"82131679ee35c705458660ac31ab4f5f90169b43f2377fe420a99b1d4c03a4dd","bin/init-screens.lua":"c586a7704030dc1917262f04350e094e1e0ab084793eb1643222498f6436b597","bin/intelligence.lua":"0f14f5a5fb2c6053c19c7a8fa0ba335a69a6fb3b49941c3234dac59795cd3850","bin/kristminer.lua":"7e7f9fe2a6493d584ad6926cda915e02c1c3d800dc209680898ce930d0bb0e6f","bin/livegps.lua":"c3d17d495cda01aa1261e4c4fcd43439b29af422671972117ec34f68e32c5bba","bin/lmatrix.lua":"9d5728b93069d2b763bb8e1dd2a5542995c47daca61f385644431bfc315bc2c4","bin/loading.lua":"c85f7aa1765170325155b921c1fceeb62643f552f12d41b529a22af3a67f5a97","bin/log.lua":"8a553607f81b45e3e0e6d3087735c75fbb38e585d7d1f7a9451b3cb5d0dac330","bin/lyr.lua":"5b17b8cf560ac5dbe4f458d36dff853f51103492952048f233fcad8b319c04e6","bin/maxim.lua":"a68abcb1afae04c9e2177459cd6cb35cf417e4dc80a5bc4580e7cd9b05a44602","bin/norris.lua":"e3105b98d6ac2ba038847fe4a8977db6fbf513b5de6ca3052e7ce20f79d4a314","bin/potatoflight.lua":"2fbb0b6f8d78728d8cb0ec64af1bc598bd00cb55f202378e7acdb86bba71efd1","bin/potatonet.lua":"d58e6aee25190e62a826cc9d195c4aa7e91ac43147d9a8bb8e86d139c7c5bde9","bin/potatoplex.lua":"4399d7cc33004fb21be5a0e2ab8405b8e454c004395844ce7ec42a19965fd415","bin/regset.lua":"423879f14de9efb8192ee718a1d5e129e21f50c50799651b2dcff65287808807","bin/relay.lua":"261ae6c220b83506e3326e8f2b091d246baae458ff0d2ee87512be2c4e35a75d","bin/tau.lua":"45626e749b8734bf466b89f769ec3e5544983a55086c6a165eaabdc0b010b6ac","bin/threat_update.lua":"eb6e27f70718e2d6d00fd7d7dba81e9e11badb718c74bc7fb306464ecfba5bdf","bin/tryhaskell.lua":"07810d85145da65a3e434154c79d5a9d72f2dcbe59c8d6829040fb925df878ec","bin/uninstall.lua":"12744da9213a7dba4e72c3dd0a2ac8b84c3a8315247ee4c9aa9af392dfa50b82","bin/upd.lua":"9ce75f3d428f99263392814596b4f782ea17e7f6096dad6038eac65c3fd68cd5","bin/very-uninstall.lua":"90ff8362f85e0acefff011241b0161499a3dc47fa4f2a4c21f6f0789ab9f19b5","bin/viewsource.lua":"02b4dcdb3cf064e7018117fc68a574b260e21561f1813951e4e1de8f0c9420a6","bin/wipe.lua":"2dbc079215c0c06fda182b8878f533631708d95d6148c65f24c606bc3786e2fb","bin/workspace.lua":"acc8bb6f08b243378b68ab5f611e9a6cc8216b0713343dc93ddaa9101f07ffc5","potatobios.lua":"4a0516ac86363fadda6bc229a88eae2dbac3e41386cfa7f3f5125bd7179de97b","signing-key.tbl":"b32af5229c23af3bc03d538e42751b26044e404a7b1af064ed89894efe421607","startup":"66f6cde7c7376ea573dff31d82ba99cad41ad05ac9c1e63d91e596cfada47c5e","stdlib.hvl":"a6fd2620068f47794a9bbeed77bee3fd4962f848e6dd7c75137b30cd5665272e","update-key.hex":"8d8afb7a45833bb7d68f929421ad60a211d4d73e0ee03b24dc0106ba1de2e1a0","xlib/00_cbor.lua":"cb00cf146c439edc4caf3a6d0913f6454aa421a85b5b40d7b7f4de5cd7f16a80","xlib/01_skynet.lua":"9cb565d639a0acd7c763c3e7422482532cd0bda0cdfcc720089ab4a87e551339","xlib/02_heavlisp.lua":"82cdabd5286058c0ea4f27956f8c1144e198769c8b8ce9e91b26c930d711f710","xlib/03_lolcrypt.lua":"0ca423837248e405898c436fd7f39c1fff63ba1a1c5610f3e9fb36151a698ff5"},"sizes":{"LICENSES":4725,"autorun.lua":110004,"bin/5rot26.lua":1661,"bin/BSOD.lua":104,"bin/b.lua":34,"bin/build.lua":639,"bin/ccemux.lua":1673,"bin/chronometer.lua":1152,"bin/chuck.lua":29,"bin/clear_space.lua":105,"bin/ctime.lua":141,"bin/est.lua":787,"bin/exorcise.lua":208,"bin/factor.lua":4244,"bin/fortune.lua":24,"bin/game_mode.lua":226,"bin/grep.lua":1196,"bin/hacker.lua":8021,"bin/id.lua":548,"bin/init-screens.lua":36,"bin/intelligence.lua":309,"bin/kristminer.lua":5566,"bin/livegps.lua":980,"bin/lmatrix.lua":1005,"bin/loading.lua":7707,"bin/log.lua":379,"bin/lyr.lua":72,"bin/maxim.lua":22,"bin/norris.lua":45,"bin/potatoflight.lua":3417,"bin/potatonet.lua":19,"bin/potatoplex.lua":6584,"bin/regset.lua":314,"bin/relay.lua":3075,"bin/tau.lua":124,"bin/threat_update.lua":1334,"bin/tryhaskell.lua":1867,"bin/uninstall.lua":166,"bin/upd.lua":16,"bin/very-uninstall.lua":80,"bin/viewsource.lua":1275,"bin/wipe.lua":73,"bin/workspace.lua":42971,"potatobios.lua":42986,"signing-key.tbl":190,"startup":13329,"stdlib.hvl":851,"update-key.hex":44,"xlib/00_cbor.lua":15281,"xlib/01_skynet.lua":3286,"xlib/02_heavlisp.lua":15643,"xlib/03_lolcrypt.lua":3206},"timestamp":1711980822} -{"hash":"808ed5f2d5eada006734851bdc27fd04303bb7af2173752fe6c2294d3f7f4965","sig":"019bb70320c22f917526bc4940c8f441f10d713f2d80ed7fbc9fdbd111ba41d0dcdbee70f3a42d13e604"} \ No newline at end of file +{"build":784,"description":"misc fixes to ctime, filesystem, overlays","files":{"LICENSES":"f3549d84d66eb53dd4a421a4341d77d3d217c1b117d67e3be8f5211adcda0952","autorun.lua":"484dfd347bd77a90a5de12267d22167dbaa293a5f634bbd59293e76e916dccd9","bin/5rot26.lua":"417891a232e325476f980d31d88edc486d526611a6350ce47fd29cca464ebf2c","bin/BSOD.lua":"a2ea9bf1e64dbc2c314e3be71f46e973c0bc2b9c482395120f5d152c6d231e86","bin/b.lua":"5123c6d1bb2b3d6c8e7b4d1b94e60d47c3b6c64c5a0fe8bda8481b718ba00602","bin/build.lua":"a990239e1db05176dd0ba56bc0179eecccd8473d88c6c618d16e72ede270e4c2","bin/ccemux.lua":"239476f58835b86bbcac31ce8af3c3acd3d198a55ab9ada78c62fbf358625a98","bin/chronometer.lua":"db5363993a04382145aef7db2fbe262f0bf10697a589e1e2d2f9ce0f87430dd8","bin/chuck.lua":"571a1eacde435bbd9f54b493149339ac48972a3a4550635b9107da0091fe888a","bin/clear_space.lua":"fc3d52563adaf0491b71227f8b6f615d604063a89830a2ab86a20d10e1a07e97","bin/ctime.lua":"c64022ef0ac641ea531567d770adb306d0d632ff7bd2b692f4915021ed6787c0","bin/est.lua":"88ab488c2ded31d67816da8c309a63ac455b461368b3b943aeeb5106b1051cc0","bin/exorcise.lua":"ae25e5939ce52620b0a1e64679a1ac47bcaaff9e323d29c6651bce24a3e58116","bin/factor.lua":"39c2f1709a4258d754278860177c7bb2ea336a8b8392a4c3017c849705e63926","bin/fortune.lua":"64a595afb9ffbaa39622b32379d8dc40d4f1fd36d38027382ed0ae130ad0c59d","bin/game_mode.lua":"f1519969a83e6c7c001d4092cbc7806ea489652ea19022425a893fb4d153572f","bin/grep.lua":"1509bc267867b933e528ab74cfbc2a15fa2df0ec7389df4f9033194ab9037865","bin/hacker.lua":"889e1a47c5ff7470ddf61d87eb7cca9750193976139d513fbe67b7625195d65a","bin/id.lua":"82131679ee35c705458660ac31ab4f5f90169b43f2377fe420a99b1d4c03a4dd","bin/init-screens.lua":"c586a7704030dc1917262f04350e094e1e0ab084793eb1643222498f6436b597","bin/intelligence.lua":"0f14f5a5fb2c6053c19c7a8fa0ba335a69a6fb3b49941c3234dac59795cd3850","bin/kristminer.lua":"7e7f9fe2a6493d584ad6926cda915e02c1c3d800dc209680898ce930d0bb0e6f","bin/livegps.lua":"c3d17d495cda01aa1261e4c4fcd43439b29af422671972117ec34f68e32c5bba","bin/lmatrix.lua":"9d5728b93069d2b763bb8e1dd2a5542995c47daca61f385644431bfc315bc2c4","bin/loading.lua":"c85f7aa1765170325155b921c1fceeb62643f552f12d41b529a22af3a67f5a97","bin/log.lua":"8a553607f81b45e3e0e6d3087735c75fbb38e585d7d1f7a9451b3cb5d0dac330","bin/lyr.lua":"5b17b8cf560ac5dbe4f458d36dff853f51103492952048f233fcad8b319c04e6","bin/maxim.lua":"a68abcb1afae04c9e2177459cd6cb35cf417e4dc80a5bc4580e7cd9b05a44602","bin/norris.lua":"e3105b98d6ac2ba038847fe4a8977db6fbf513b5de6ca3052e7ce20f79d4a314","bin/potatoflight.lua":"2fbb0b6f8d78728d8cb0ec64af1bc598bd00cb55f202378e7acdb86bba71efd1","bin/potatonet.lua":"d58e6aee25190e62a826cc9d195c4aa7e91ac43147d9a8bb8e86d139c7c5bde9","bin/potatoplex.lua":"4399d7cc33004fb21be5a0e2ab8405b8e454c004395844ce7ec42a19965fd415","bin/regset.lua":"423879f14de9efb8192ee718a1d5e129e21f50c50799651b2dcff65287808807","bin/relay.lua":"261ae6c220b83506e3326e8f2b091d246baae458ff0d2ee87512be2c4e35a75d","bin/tau.lua":"45626e749b8734bf466b89f769ec3e5544983a55086c6a165eaabdc0b010b6ac","bin/threat_update.lua":"8f186d04e0845e77a6b5049a8cd182b68f1a5f3c4eb4b3e14ad6a3563ac8dd1e","bin/tryhaskell.lua":"07810d85145da65a3e434154c79d5a9d72f2dcbe59c8d6829040fb925df878ec","bin/uninstall.lua":"12744da9213a7dba4e72c3dd0a2ac8b84c3a8315247ee4c9aa9af392dfa50b82","bin/upd.lua":"9ce75f3d428f99263392814596b4f782ea17e7f6096dad6038eac65c3fd68cd5","bin/very-uninstall.lua":"90ff8362f85e0acefff011241b0161499a3dc47fa4f2a4c21f6f0789ab9f19b5","bin/viewsource.lua":"02b4dcdb3cf064e7018117fc68a574b260e21561f1813951e4e1de8f0c9420a6","bin/wipe.lua":"2dbc079215c0c06fda182b8878f533631708d95d6148c65f24c606bc3786e2fb","bin/workspace.lua":"acc8bb6f08b243378b68ab5f611e9a6cc8216b0713343dc93ddaa9101f07ffc5","potatobios.lua":"cddb8d9db864db346f6f8864bff7bdf56dea72c730d985e625157f289bed763f","signing-key.tbl":"b32af5229c23af3bc03d538e42751b26044e404a7b1af064ed89894efe421607","startup":"a1008f5e11a1c8ec015ac4da3b783b8fb32c08a78f9dfab2b986c44e29b476ea","stdlib.hvl":"a6fd2620068f47794a9bbeed77bee3fd4962f848e6dd7c75137b30cd5665272e","update-key.hex":"8d8afb7a45833bb7d68f929421ad60a211d4d73e0ee03b24dc0106ba1de2e1a0","xlib/00_cbor.lua":"cb00cf146c439edc4caf3a6d0913f6454aa421a85b5b40d7b7f4de5cd7f16a80","xlib/01_skynet.lua":"9cb565d639a0acd7c763c3e7422482532cd0bda0cdfcc720089ab4a87e551339","xlib/02_heavlisp.lua":"82cdabd5286058c0ea4f27956f8c1144e198769c8b8ce9e91b26c930d711f710","xlib/03_lolcrypt.lua":"0ca423837248e405898c436fd7f39c1fff63ba1a1c5610f3e9fb36151a698ff5"},"sizes":{"LICENSES":4725,"autorun.lua":110077,"bin/5rot26.lua":1661,"bin/BSOD.lua":104,"bin/b.lua":34,"bin/build.lua":639,"bin/ccemux.lua":1673,"bin/chronometer.lua":1152,"bin/chuck.lua":29,"bin/clear_space.lua":105,"bin/ctime.lua":1255,"bin/est.lua":787,"bin/exorcise.lua":208,"bin/factor.lua":4244,"bin/fortune.lua":24,"bin/game_mode.lua":226,"bin/grep.lua":1196,"bin/hacker.lua":8021,"bin/id.lua":548,"bin/init-screens.lua":36,"bin/intelligence.lua":309,"bin/kristminer.lua":5566,"bin/livegps.lua":980,"bin/lmatrix.lua":1005,"bin/loading.lua":7707,"bin/log.lua":379,"bin/lyr.lua":72,"bin/maxim.lua":22,"bin/norris.lua":45,"bin/potatoflight.lua":3417,"bin/potatonet.lua":19,"bin/potatoplex.lua":6584,"bin/regset.lua":314,"bin/relay.lua":3075,"bin/tau.lua":124,"bin/threat_update.lua":1353,"bin/tryhaskell.lua":1867,"bin/uninstall.lua":166,"bin/upd.lua":16,"bin/very-uninstall.lua":80,"bin/viewsource.lua":1275,"bin/wipe.lua":73,"bin/workspace.lua":42971,"potatobios.lua":43059,"signing-key.tbl":190,"startup":13489,"stdlib.hvl":851,"update-key.hex":44,"xlib/00_cbor.lua":15281,"xlib/01_skynet.lua":3286,"xlib/02_heavlisp.lua":15643,"xlib/03_lolcrypt.lua":3206},"timestamp":1725356070} +{"hash":"9331d6eb6e7813d7b86843411411c73ba51c6816b185a3407a8bc68eb16c5302","sig":"e62538937494b1a2cf29eee636e36181e31b229613f3bcf58c66b822d7d6a4c54f13f18203f6b37e6d05"} \ No newline at end of file diff --git a/src/bin/ctime.lua b/src/bin/ctime.lua index fd74d74..af10ee0 100644 --- a/src/bin/ctime.lua +++ b/src/bin/ctime.lua @@ -1,3 +1,60 @@ +local prefixes = { + {-12, "p"}, + {-9, "n"}, + {-6, "u"}, + {-3, "m"}, + {0, ""}, + {3, "k"}, + {6, "M"} +} + +local function SI_prefix(value, unit) + local x = math.log(value, 10) + local last + for _, t in ipairs(prefixes) do + if t[1] > x then + break + end + last = t + end + local dp = 2 - math.floor(x - last[1]) + return (("%%.%df%%s%%s"):format(dp)):format(value / 10^(last[1]), last[2], unit) +end + +local w = term.getSize() +local rows = {} for _, info in pairs(process.list()) do - textutils.pagedPrint(("%s %f %f"):format(info.name or info.ID, info.execution_time, info.ctime)) + table.insert(rows, { info.name or tostring(info.ID), SI_prefix(info.execution_time, "s"), SI_prefix(info.ctime, "s") }) +end + +local max_width_per_column = {} + +for _, row in ipairs(rows) do + for i, cell in ipairs(row) do + max_width_per_column[i] = math.max(max_width_per_column[i] or 0, cell:len() + 1) + end +end + +local vw_width = 0 + +for i = #max_width_per_column, 1, -1 do + if i > 1 then + vw_width = vw_width + max_width_per_column[i] + end +end + +local fw_start = w - vw_width + +for _, row in ipairs(rows) do + local s + for i, cell in ipairs(row) do + if i == 1 then + s = cell:sub(1, fw_start - 1) .. (" "):rep((fw_start - 1) - cell:len()) + else + cell = " " .. cell + s = s .. (" "):rep(max_width_per_column[i] - cell:len()) .. cell + end + end + + textutils.pagedPrint(s) end \ No newline at end of file diff --git a/src/bin/threat_update.lua b/src/bin/threat_update.lua index 73a2f14..fffc3b9 100644 --- a/src/bin/threat_update.lua +++ b/src/bin/threat_update.lua @@ -24,7 +24,7 @@ print() print(snd) print() if arg == "headless" then - ccemux.echo "ready" + if ccemux then ccemux.echo "ready" end while true do coroutine.yield() end else print "Press a key to continue..." diff --git a/src/lib/yafss.lua b/src/lib/yafss.lua index 519a4ca..b08fe4f 100644 --- a/src/lib/yafss.lua +++ b/src/lib/yafss.lua @@ -405,30 +405,11 @@ local gf, sf = getfenv, setfenv -- a map of paths to either strings containing their contents or functions returning them -- and a table of extra APIs and partial overrides for existing APIs local function make_environment(API_overrides, current_process) - local env_host = string.format("YAFSS on %s", _HOST) local environment = copy_some_keys(allowed_APIs)(_G) - -- if function is not from within the VM, return env from within sandbox - function environment.getfenv(arg) - local env - if type(arg) == "number" then return gf() end - if not env or type(env._HOST) ~= "string" or not env._HOST == env_host then - return gf() - else - return env - end - end - --[[ -Fix PS#AD2A532C -Allowing `setfenv` to operate on any function meant that privileged code could in some cases be manipulated to leak information or operate undesirably. Due to this, we restrict it, similarly to getfenv. - ]] - function environment.setfenv(fn, env) - local nenv = gf(fn) - if not nenv or type(nenv._HOST) ~= "string" or not nenv._HOST == env_host then - return false - end - return sf(fn, env) - end + -- I sure hope this doesn't readd the security issues! + environment.getfenv = getfenv + environment.setfenv = setfenv local load = load function environment.load(code, file, mode, env) @@ -437,7 +418,6 @@ Allowing `setfenv` to operate on any function meant that privileged code could i environment._G = environment environment._ENV = environment - environment._HOST = env_host function environment.os.shutdown() process.IPC(current_process, "power_state", "shutdown") @@ -485,4 +465,4 @@ local function run(API_overrides, init, logger) end end -return { run = run, create_FS = create_FS } \ No newline at end of file +return { run = run, create_FS = create_FS } diff --git a/src/polychoron.lua b/src/polychoron.lua index 947016d..f042172 100644 --- a/src/polychoron.lua +++ b/src/polychoron.lua @@ -459,13 +459,18 @@ local old_error = error local old_os_shutdown = os.shutdown local old_term_redirect = term.redirect local old_term_native = term.native +local old_printError = printError function error() end function term.redirect() end function term.native() end +function printError() end function os.shutdown() error = old_error _G.error = old_error _ENV.error = old_error + printError = old_printError + _G.printError = old_printError + _ENV.printError = old_printError term.native = old_term_native term.redirect = old_term_redirect os.shutdown = old_os_shutdown diff --git a/src/potatobios.lua b/src/potatobios.lua index c000a61..3fd5b33 100644 --- a/src/potatobios.lua +++ b/src/potatobios.lua @@ -391,6 +391,12 @@ do local native = term.native() local last_redirected + -- horrors + local idmap = {} + local function termid(t) + return idmap[tostring(t.blit)] + end + local ix = 0 process.spawn(function() while true do @@ -408,17 +414,11 @@ do ix = ix + 1 process.queue_in(process.get_running().parent, "term_resize", true) elseif ev == "ipc" and arg2 == "redraw_native" then - potatOS.framebuffers[native.id].redraw() + potatOS.framebuffers[termid(native)].redraw() end end end, "termd") - -- horrors - local idmap = {} - local function termid(t) - return idmap[tostring(t.blit)] - end - local function assignid(t) if not termid(t) then idmap[tostring(t.blit)] = potatOS.gen_uuid() end end @@ -1245,7 +1245,8 @@ function potatOS.llm(prompt, max_tokens, stop_sequences) local res, err = http.post("https://gpt.osmarks.net/v1/completions", json.encode { prompt = prompt, max_tokens = max_tokens, - stop = stop_sequences + stop = stop_sequences, + client = "potatOS" }, {["content-type"]="application/json"}, true) if err then error("Server error: " .. err) -- is this right? I forgot. @@ -1608,7 +1609,7 @@ function potatOS.threat_update() table.insert(out, description) table.insert(out, "") end - return (potatOS.llm(table.concat(out, "\n"), 100, {"\n\n"}):gsub("^\n", ""):gsub("\n$", "")) + return "current threat level is" .. (potatOS.llm(table.concat(out, "\n") .. "\ncurrent threat level is", 100, {"\n\n"}):gsub("^\n", ""):gsub("\n$", "")) end local fixed_context = { diff --git a/website/index.html b/website/index.html index 8f53dcc..bc059c2 100644 --- a/website/index.html +++ b/website/index.html @@ -57,7 +57,7 @@ button {

Welcome to PotatOS!

-Current build: 361bc871 (adjust LLM interface), version 771, built 2024-02-28 19:50:26 (UTC). +Current build: 9331d6eb (misc fixes to ctime, filesystem, overlays), version 784, built 2024-09-03 09:34:30 (UTC).

"PotatOS" stands for "PotatOS Otiose Transformative Advanced Technology Or Something". This repository contains the source code for the latest version of PotatOS, "PotatOS Epenthesis".