From 5b46662f2a264e98a917c9328d1f968e2275396f Mon Sep 17 00:00:00 2001 From: Guillaume ARM Date: Tue, 9 Jun 2026 05:42:53 +0200 Subject: [PATCH] fix(ai): sort sessions by recency --- apis/libai.lua | 12 +++++++++++- manifest.json | 2 +- packages/index.json | 4 ++-- packages/trapos-ai/ccpm.json | 2 +- packages/trapos/ccpm.json | 2 +- programs/ai.lua | 2 +- tests/ai.lua | 16 ++++++++++++---- 7 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apis/libai.lua b/apis/libai.lua index e9337b5..ed4f656 100644 --- a/apis/libai.lua +++ b/apis/libai.lua @@ -1,4 +1,4 @@ -local _VERSION = '0.4.0'; +local _VERSION = '0.4.1'; local PING_PROMPT = 'reply with exactly: pong'; @@ -56,6 +56,13 @@ local function extractTextParts(parts) return table.concat(texts, ''); end +local function sessionTime(session) + if type(session) ~= 'table' or type(session.time) ~= 'table' then + return 0; + end + return tonumber(session.time.updated or session.time.created) or 0; +end + local function createAi(opts) opts = opts or {}; @@ -153,6 +160,9 @@ local function createAi(opts) if type(decoded) ~= 'table' then return false, 'reponse invalide'; end + table.sort(decoded, function(a, b) + return sessionTime(a) > sessionTime(b); + end); return true, decoded; end diff --git a/manifest.json b/manifest.json index f2520f4..18a9e3f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "TrapOS", - "version": "0.5.4", + "version": "0.5.5", "branch": "next", "packages": [ "trapos" diff --git a/packages/index.json b/packages/index.json index 51163c2..b77ae39 100644 --- a/packages/index.json +++ b/packages/index.json @@ -5,7 +5,7 @@ "trapos-boot": "0.2.1", "trapos-net": "0.2.0", "trapos-ui": "0.2.1", - "trapos-ai": "0.4.0", - "trapos": "0.5.4" + "trapos-ai": "0.4.1", + "trapos": "0.5.5" } } diff --git a/packages/trapos-ai/ccpm.json b/packages/trapos-ai/ccpm.json index 9ac6dfe..15906b7 100644 --- a/packages/trapos-ai/ccpm.json +++ b/packages/trapos-ai/ccpm.json @@ -1,6 +1,6 @@ { "name": "trapos-ai", - "version": "0.4.0", + "version": "0.4.1", "description": "TrapOS AI client for opencode serve", "dependencies": ["trapos-core"], "files": [ diff --git a/packages/trapos/ccpm.json b/packages/trapos/ccpm.json index 76d125a..db334d0 100644 --- a/packages/trapos/ccpm.json +++ b/packages/trapos/ccpm.json @@ -1,6 +1,6 @@ { "name": "trapos", - "version": "0.5.4", + "version": "0.5.5", "description": "TrapOS full install meta-package", "dependencies": ["trapos-boot", "trapos-net", "trapos-ui", "trapos-test", "trapos-ai"], "files": [], diff --git a/programs/ai.lua b/programs/ai.lua index f64d9ec..4f9cd8d 100644 --- a/programs/ai.lua +++ b/programs/ai.lua @@ -1,4 +1,4 @@ -local _VERSION = '0.4.0'; +local _VERSION = '0.4.1'; local createAi = require('/apis/libai'); diff --git a/tests/ai.lua b/tests/ai.lua index 1fd8be8..f45ea5a 100644 --- a/tests/ai.lua +++ b/tests/ai.lua @@ -104,8 +104,13 @@ end); -- listSessions -- -testlib.test('listSessions returns parsed session list', function() - local sessions = { { id = 'ses_1', title = 'hello' }, { id = 'ses_2', title = 'world' } }; +testlib.test('listSessions returns newest sessions first', function() + local sessions = { + { id = 'ses_old', title = 'old', time = { updated = 10 } }, + { id = 'ses_created', title = 'created', time = { created = 20 } }, + { id = 'ses_new', title = 'new', time = { updated = 30 } }, + { id = 'ses_missing', title = 'missing' }, + }; local httpStub = fakeHttp({}, { response(200, textutils.serializeJSON(sessions)) }); local settingsStub = fakeSettings({ ['opencc.server_url'] = 'http://host' }); local ai = createAi({ http = httpStub, settings = settingsStub }); @@ -113,8 +118,11 @@ testlib.test('listSessions returns parsed session list', function() local ok, result = ai.listSessions(); testlib.assertTrue(ok, tostring(result)); - testlib.assertEquals(#result, 2); - testlib.assertEquals(result[1].id, 'ses_1'); + testlib.assertEquals(#result, 4); + testlib.assertEquals(result[1].id, 'ses_new'); + testlib.assertEquals(result[2].id, 'ses_created'); + testlib.assertEquals(result[3].id, 'ses_old'); + testlib.assertEquals(result[4].id, 'ses_missing'); end); testlib.test('listSessions fails when server_url missing', function()