diff --git a/package-lock.json b/package-lock.json index 9358015..e3e2b65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "dotenv": "^16.4.5" }, "devDependencies": { - "@types/node": "^22.10.5", + "@types/node": "^22.19.10", "typescript": "^5.7.2" } }, @@ -70,9 +70,9 @@ } }, "node_modules/@types/node": { - "version": "22.19.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz", - "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==", + "version": "22.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.10.tgz", + "integrity": "sha512-tF5VOugLS/EuDlTBijk0MqABfP8UxgYazTLo3uIn3b4yJgg26QRbVYJYsDtHrjdDUIRfP70+VfhTTc+CE1yskw==", "dev": true, "license": "MIT", "dependencies": { @@ -396,6 +396,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -600,6 +601,7 @@ "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.7.tgz", "integrity": "sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==", "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -1170,6 +1172,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 3c3c64a..b863026 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "dotenv": "^16.4.5" }, "devDependencies": { - "@types/node": "^22.10.5", + "@types/node": "^22.19.10", "typescript": "^5.7.2" } } diff --git a/src/services/agent.ts b/src/services/agent.ts index de10ae7..b1c8ea9 100644 --- a/src/services/agent.ts +++ b/src/services/agent.ts @@ -91,10 +91,11 @@ export class AutonomousAgent { console.log(`\n📬 [${new Date().toLocaleTimeString()}] Found ${newMentions.length} new mention(s)!\n`); - // Process each mention - for (const mention of newMentions) { - await this.processMention(mention); - this.processedMentions.add(mention.post.id); + // Process each mention in reverse (oldest first) to maintain chronological Set insertion order + // X API returns mentions newest-first, so we reverse to process oldest→newest + for (let i = newMentions.length - 1; i >= 0; i--) { + await this.processMention(newMentions[i]); + this.processedMentions.add(newMentions[i].post.id); } // Prune oldest entries to prevent unbounded memory growth diff --git a/src/services/xapi.ts b/src/services/xapi.ts index ab6c4b5..3507c24 100644 --- a/src/services/xapi.ts +++ b/src/services/xapi.ts @@ -91,6 +91,11 @@ export class XAPIClient { return null; } + if (!Array.isArray(response.data)) { + console.warn('Unexpected response shape from X API (thread): data is not an array'); + return null; + } + return this.parseThread(response.data); } catch (error) { console.error('Error fetching thread:', error);