@adonis-agora/agent 0.58.0 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/providers/agent_provider.js +1 -1
  3. package/dist/providers/agent_provider.js.map +1 -1
  4. package/dist/src/durable/agent-run-context.d.ts +13 -0
  5. package/dist/src/durable/agent-run-context.d.ts.map +1 -1
  6. package/dist/src/durable/agent-run-context.js +9 -0
  7. package/dist/src/durable/agent-run-context.js.map +1 -1
  8. package/dist/src/durable/agent-run-workflow.d.ts +4 -3
  9. package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
  10. package/dist/src/durable/agent-run-workflow.js +62 -8
  11. package/dist/src/durable/agent-run-workflow.js.map +1 -1
  12. package/dist/src/durable/durable-agent-runner.d.ts +7 -0
  13. package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
  14. package/dist/src/durable/durable-agent-runner.js +44 -12
  15. package/dist/src/durable/durable-agent-runner.js.map +1 -1
  16. package/dist/src/durable/index.d.ts.map +1 -1
  17. package/dist/src/durable/index.js +2 -0
  18. package/dist/src/durable/index.js.map +1 -1
  19. package/dist/src/index.d.ts +1 -1
  20. package/dist/src/index.js +1 -1
  21. package/dist/src/lucid-token-stream-sink.d.ts.map +1 -1
  22. package/dist/src/lucid-token-stream-sink.js +11 -4
  23. package/dist/src/lucid-token-stream-sink.js.map +1 -1
  24. package/dist/src/stores/lucid-confirm-tokens.d.ts.map +1 -1
  25. package/dist/src/stores/lucid-confirm-tokens.js +1 -12
  26. package/dist/src/stores/lucid-confirm-tokens.js.map +1 -1
  27. package/dist/src/stores/lucid-governance-queries.d.ts +1 -1
  28. package/dist/src/stores/lucid-governance-queries.d.ts.map +1 -1
  29. package/dist/src/stores/lucid-governance-queries.js +3 -9
  30. package/dist/src/stores/lucid-governance-queries.js.map +1 -1
  31. package/dist/src/stores/lucid-schema.d.ts +16 -0
  32. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  33. package/dist/src/stores/lucid-schema.js +89 -22
  34. package/dist/src/stores/lucid-schema.js.map +1 -1
  35. package/dist/src/stores/lucid.d.ts +12 -0
  36. package/dist/src/stores/lucid.d.ts.map +1 -1
  37. package/dist/src/stores/lucid.js +39 -22
  38. package/dist/src/stores/lucid.js.map +1 -1
  39. package/dist/src/stores/sql-dialect.d.ts +18 -0
  40. package/dist/src/stores/sql-dialect.d.ts.map +1 -0
  41. package/dist/src/stores/sql-dialect.js +32 -0
  42. package/dist/src/stores/sql-dialect.js.map +1 -0
  43. package/package.json +9 -2
  44. package/skills/agent-personas-agents/SKILL.md +1 -1
@@ -1,3 +1,4 @@
1
+ import { isMySql, portableSql } from './sql-dialect.js';
1
2
  /**
2
3
  * The nine agent table names. They match the cross-adapter snake_case contract the reference Drizzle
3
4
  * store uses, so a dashboard or migration can point at any adapter and see the same physical schema.
@@ -16,6 +17,31 @@ export const AGENT_TABLES = {
16
17
  /** A run's live stream, buffered for replay by the Lucid token sink (`tokenSinks.lucid()`). */
17
18
  streamFrames: 'agent_stream_frame',
18
19
  };
20
+ /**
21
+ * One statement of this module, as `db`'s dialect has to read it. The statements are written once,
22
+ * Postgres/SQLite-style; MySQL needs four things changed, and every one of them used to fail or
23
+ * silently misbehave there:
24
+ *
25
+ * - identifiers in backticks — a `"quoted"` name is a string literal to MySQL, so every statement
26
+ * failed to parse;
27
+ * - `TEXT` as `LONGTEXT` — MySQL's `TEXT` holds 64 KB, and a long answer, a tool's output or a stream
28
+ * frame past that failed the insert;
29
+ * - no `IF NOT EXISTS` on `CREATE INDEX`, which MySQL does not have (the catalog is read first, see
30
+ * {@link existingIndexes});
31
+ * - InnoDB with a case-sensitive collation: the foreign keys need InnoDB, and under MySQL's default
32
+ * `utf8mb4_0900_ai_ci` an actor `alice` read the threads of an actor `ALICE`. Postgres and SQLite
33
+ * compare those exactly; `utf8mb4_bin` makes MySQL do the same.
34
+ */
35
+ export function forDialect(statement, mysql) {
36
+ if (!mysql)
37
+ return statement;
38
+ let out = statement.replaceAll('"', '`').replace(/\bTEXT\b/g, 'LONGTEXT');
39
+ out = out.replace(/^CREATE INDEX IF NOT EXISTS /, 'CREATE INDEX ');
40
+ if (/^CREATE TABLE /.test(out)) {
41
+ out = `${out} ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin`;
42
+ }
43
+ return out;
44
+ }
19
45
  /**
20
46
  * `CREATE TABLE IF NOT EXISTS` for the Lucid token sink's frame buffer, under `table` (the sink takes
21
47
  * a `tableName`). One row per frame of a run's stream, numbered from 1 in write order; the row whose
@@ -71,7 +97,7 @@ export function createTableStatements() {
71
97
  `CREATE INDEX IF NOT EXISTS "${t.threads}_actor_updated_idx" ON "${t.threads}" ("actor_ref", "updated_at")`,
72
98
  `CREATE TABLE IF NOT EXISTS "${t.messages}" (
73
99
  "id" VARCHAR(255) PRIMARY KEY NOT NULL,
74
- "thread_id" VARCHAR(255) NOT NULL REFERENCES "${t.threads}" ("id") ON DELETE CASCADE,
100
+ "thread_id" VARCHAR(255) NOT NULL,
75
101
  "role" VARCHAR(255) NOT NULL,
76
102
  "content" TEXT NOT NULL,
77
103
  "tool_calls" TEXT NULL,
@@ -86,13 +112,15 @@ export function createTableStatements() {
86
112
  "ui" TEXT NULL,
87
113
  "feedback" TEXT NULL,
88
114
  "agent_name" VARCHAR(255) NULL,
89
- "created_at" BIGINT NOT NULL
115
+ "seq" BIGINT NOT NULL DEFAULT 0,
116
+ "created_at" BIGINT NOT NULL,
117
+ FOREIGN KEY ("thread_id") REFERENCES "${t.threads}" ("id") ON DELETE CASCADE
90
118
  )`,
91
119
  `CREATE INDEX IF NOT EXISTS "${t.messages}_thread_created_idx" ON "${t.messages}" ("thread_id", "created_at")`,
92
120
  `CREATE INDEX IF NOT EXISTS "${t.messages}_run_idx" ON "${t.messages}" ("run_id")`,
93
121
  `CREATE TABLE IF NOT EXISTS "${t.toolCalls}" (
94
122
  "id" VARCHAR(255) PRIMARY KEY NOT NULL,
95
- "message_id" VARCHAR(255) NOT NULL REFERENCES "${t.messages}" ("id") ON DELETE CASCADE,
123
+ "message_id" VARCHAR(255) NOT NULL,
96
124
  "tool_name" VARCHAR(255) NOT NULL,
97
125
  "tool_type" VARCHAR(255) NOT NULL,
98
126
  "input" TEXT NULL,
@@ -107,13 +135,14 @@ export function createTableStatements() {
107
135
  "approver" VARCHAR(255) NULL,
108
136
  "expires_at" BIGINT NULL,
109
137
  "remember" INTEGER NULL,
110
- "decided_via" VARCHAR(64) NULL
138
+ "decided_via" VARCHAR(64) NULL,
139
+ FOREIGN KEY ("message_id") REFERENCES "${t.messages}" ("id") ON DELETE CASCADE
111
140
  )`,
112
141
  `CREATE INDEX IF NOT EXISTS "${t.toolCalls}_run_idx" ON "${t.toolCalls}" ("run_id")`,
113
142
  `CREATE INDEX IF NOT EXISTS "${t.toolCalls}_status_created_idx" ON "${t.toolCalls}" ("status", "created_at")`,
114
143
  `CREATE TABLE IF NOT EXISTS "${t.tokenUsage}" (
115
144
  "id" VARCHAR(255) PRIMARY KEY NOT NULL,
116
- "thread_id" VARCHAR(255) NOT NULL REFERENCES "${t.threads}" ("id") ON DELETE CASCADE,
145
+ "thread_id" VARCHAR(255) NOT NULL,
117
146
  "actor_ref" VARCHAR(255) NOT NULL,
118
147
  "message_id" VARCHAR(255) NULL,
119
148
  "model_id" VARCHAR(255) NOT NULL,
@@ -124,7 +153,8 @@ export function createTableStatements() {
124
153
  "cache_read_tokens" INTEGER NULL,
125
154
  "cost_usd" DOUBLE PRECISION NULL,
126
155
  "run_id" VARCHAR(255) NULL,
127
- "created_at" BIGINT NOT NULL
156
+ "created_at" BIGINT NOT NULL,
157
+ FOREIGN KEY ("thread_id") REFERENCES "${t.threads}" ("id") ON DELETE CASCADE
128
158
  )`,
129
159
  `CREATE INDEX IF NOT EXISTS "${t.tokenUsage}_actor_created_idx" ON "${t.tokenUsage}" ("actor_ref", "created_at")`,
130
160
  `CREATE INDEX IF NOT EXISTS "${t.tokenUsage}_run_idx" ON "${t.tokenUsage}" ("run_id")`,
@@ -140,7 +170,7 @@ export function createTableStatements() {
140
170
  )`,
141
171
  `CREATE TABLE IF NOT EXISTS "${t.runs}" (
142
172
  "id" VARCHAR(255) PRIMARY KEY NOT NULL,
143
- "thread_id" VARCHAR(255) NOT NULL REFERENCES "${t.threads}" ("id") ON DELETE CASCADE,
173
+ "thread_id" VARCHAR(255) NOT NULL,
144
174
  "agent_name" VARCHAR(255) NULL,
145
175
  "parent_run_id" VARCHAR(255) NULL,
146
176
  "actor_ref" VARCHAR(255) NOT NULL,
@@ -153,14 +183,15 @@ export function createTableStatements() {
153
183
  "output_tokens" INTEGER NOT NULL DEFAULT 0,
154
184
  "cost_usd" DOUBLE PRECISION NULL,
155
185
  "error" TEXT NULL,
156
- "durable" INTEGER NOT NULL DEFAULT 0
186
+ "durable" INTEGER NOT NULL DEFAULT 0,
187
+ FOREIGN KEY ("thread_id") REFERENCES "${t.threads}" ("id") ON DELETE CASCADE
157
188
  )`,
158
189
  `CREATE INDEX IF NOT EXISTS "${t.runs}_started_idx" ON "${t.runs}" ("started_at")`,
159
190
  `CREATE INDEX IF NOT EXISTS "${t.runs}_actor_started_idx" ON "${t.runs}" ("actor_ref", "started_at")`,
160
191
  `CREATE INDEX IF NOT EXISTS "${t.runs}_status_started_idx" ON "${t.runs}" ("status", "started_at")`,
161
192
  `CREATE TABLE IF NOT EXISTS "${t.queuedMessages}" (
162
193
  "id" VARCHAR(255) PRIMARY KEY NOT NULL,
163
- "thread_id" VARCHAR(255) NOT NULL REFERENCES "${t.threads}" ("id") ON DELETE CASCADE,
194
+ "thread_id" VARCHAR(255) NOT NULL,
164
195
  "actor" TEXT NOT NULL,
165
196
  "content" TEXT NOT NULL,
166
197
  "attachments" TEXT NULL,
@@ -170,7 +201,8 @@ export function createTableStatements() {
170
201
  "interrupt" INTEGER NOT NULL DEFAULT 0,
171
202
  "position" INTEGER NOT NULL,
172
203
  "created_at" BIGINT NOT NULL,
173
- "updated_at" BIGINT NOT NULL
204
+ "updated_at" BIGINT NOT NULL,
205
+ FOREIGN KEY ("thread_id") REFERENCES "${t.threads}" ("id") ON DELETE CASCADE
174
206
  )`,
175
207
  `CREATE INDEX IF NOT EXISTS "${t.queuedMessages}_thread_position_idx" ON "${t.queuedMessages}" ("thread_id", "position")`,
176
208
  // The primary key IS the lock: two confirmations of one token race on the insert and one loses.
@@ -209,6 +241,8 @@ const ADDITIVE_COLUMNS = [
209
241
  { table: AGENT_TABLES.messages, column: 'ui', type: 'TEXT NULL' },
210
242
  { table: AGENT_TABLES.messages, column: 'feedback', type: 'TEXT NULL' },
211
243
  { table: AGENT_TABLES.messages, column: 'agent_name', type: 'VARCHAR(255) NULL' },
244
+ // A message's place in its thread, assigned on append. 0 on a row from before: those sort first.
245
+ { table: AGENT_TABLES.messages, column: 'seq', type: 'BIGINT NOT NULL DEFAULT 0' },
212
246
  { table: AGENT_TABLES.threads, column: 'model', type: 'VARCHAR(255) NULL' },
213
247
  { table: AGENT_TABLES.threads, column: 'queue_pause', type: 'TEXT NULL' },
214
248
  { table: AGENT_TABLES.threads, column: 'default_agent', type: 'VARCHAR(255) NULL' },
@@ -228,7 +262,7 @@ const ADDITIVE_COLUMNS = [
228
262
  */
229
263
  async function hasColumn(db, table, column) {
230
264
  try {
231
- await db.rawQuery(`SELECT "${column}" FROM "${table}" WHERE 1 = 0`);
265
+ await db.rawQuery(portableSql(db, `SELECT "${column}" FROM "${table}" WHERE 1 = 0`));
232
266
  return true;
233
267
  }
234
268
  catch {
@@ -259,6 +293,12 @@ export function rowsOf(result) {
259
293
  * there the first probe succeeds.
260
294
  */
261
295
  async function existingIndexes(db) {
296
+ // MySQL first there: it has no `pg_indexes`, and its own catalog is the only probe that answers.
297
+ const mysqlProbe = 'SELECT index_name AS name FROM information_schema.statistics WHERE table_schema = DATABASE()';
298
+ if (isMySql(db)) {
299
+ const rows = rowsOf(await db.rawQuery(mysqlProbe));
300
+ return new Set(rows.map((row) => String(row.name ?? row.NAME)));
301
+ }
262
302
  const probes = [
263
303
  // Every schema on the search path, not only the first: an unqualified `CREATE INDEX … ON "t"`
264
304
  // finds `t` wherever the path does, so that is where its index has to be looked for.
@@ -279,7 +319,7 @@ async function existingIndexes(db) {
279
319
  /** Does `table` exist? Same zero-row probe as {@link hasColumn}. */
280
320
  async function hasTable(db, table) {
281
321
  try {
282
- await db.rawQuery(`SELECT 1 FROM "${table}" WHERE 1 = 0`);
322
+ await db.rawQuery(portableSql(db, `SELECT 1 FROM "${table}" WHERE 1 = 0`));
283
323
  return true;
284
324
  }
285
325
  catch {
@@ -296,13 +336,39 @@ async function hasTable(db, table) {
296
336
  * lock timeout, a typo — still throws.
297
337
  */
298
338
  async function issue(db, statement, done) {
299
- try {
300
- await db.rawQuery(statement);
339
+ for (let attempt = 1;; attempt += 1) {
340
+ try {
341
+ await db.rawQuery(statement);
342
+ return;
343
+ }
344
+ catch (error) {
345
+ if (await done())
346
+ return;
347
+ // MySQL settles two sessions building the same index at once by rolling one back as a deadlock
348
+ // victim — and the winner's index may not be in the catalog yet when the loser looks. That
349
+ // statement did nothing and is safe to send again; the next try either lands or finds it done.
350
+ if (attempt >= DDL_ATTEMPTS || !isTransientLockFailure(error))
351
+ throw error;
352
+ await new Promise((resolve) => setTimeout(resolve, 25 * attempt));
353
+ }
301
354
  }
302
- catch (error) {
303
- if (!(await done()))
304
- throw error;
355
+ }
356
+ const DDL_ATTEMPTS = 5;
357
+ /** A statement the database rolled back to break a lock conflict: MySQL 1213/1205, Postgres 40P01/40001. */
358
+ function isTransientLockFailure(error) {
359
+ for (let current = error; current !== null && typeof current === 'object';) {
360
+ const { code, errno } = current;
361
+ if (code === 'ER_LOCK_DEADLOCK' ||
362
+ code === 'ER_LOCK_WAIT_TIMEOUT' ||
363
+ errno === 1213 ||
364
+ errno === 1205 ||
365
+ code === '40P01' ||
366
+ code === '40001') {
367
+ return true;
368
+ }
369
+ current = current.cause;
305
370
  }
371
+ return false;
306
372
  }
307
373
  /**
308
374
  * Idempotently provision the nine agent tables through Lucid's async raw runner (`CREATE TABLE IF
@@ -326,6 +392,7 @@ async function issue(db, statement, done) {
326
392
  */
327
393
  export async function createAgentTables(db) {
328
394
  const statements = createTableStatements();
395
+ const mysql = isMySql(db);
329
396
  // Order matters, in three phases rather than one pass. Tables first, then the `run_id` repair, then
330
397
  // indexes — because `createTableStatements` includes `CREATE INDEX ... ON "agent_message" ("run_id")`,
331
398
  // and on a legacy database that index would be issued against a table whose `run_id` the repair has
@@ -335,13 +402,13 @@ export async function createAgentTables(db) {
335
402
  if (!stmt.startsWith('CREATE TABLE'))
336
403
  continue;
337
404
  const table = /^CREATE TABLE IF NOT EXISTS "([^"]+)"/.exec(stmt)?.[1];
338
- await issue(db, stmt, () => hasTable(db, table));
405
+ await issue(db, forDialect(stmt, mysql), () => hasTable(db, table));
339
406
  }
340
407
  const repairs = [];
341
408
  const addColumn = async (table, column, type) => {
342
409
  if (await hasColumn(db, table, column))
343
410
  return;
344
- await issue(db, `ALTER TABLE "${table}" ADD COLUMN "${column}" ${type}`, () => hasColumn(db, table, column));
411
+ await issue(db, forDialect(`ALTER TABLE "${table}" ADD COLUMN "${column}" ${type}`, mysql), () => hasColumn(db, table, column));
345
412
  repairs.push(`${table}.${column}`);
346
413
  };
347
414
  for (const table of RUN_ID_COLUMNS) {
@@ -357,7 +424,7 @@ export async function createAgentTables(db) {
357
424
  const index = /^CREATE INDEX IF NOT EXISTS "([^"]+)"/.exec(stmt)?.[1];
358
425
  if (indexes?.has(index))
359
426
  continue;
360
- await issue(db, stmt, async () => (await existingIndexes(db))?.has(index) ?? false);
427
+ await issue(db, forDialect(stmt, mysql), async () => (await existingIndexes(db))?.has(index) ?? false);
361
428
  }
362
429
  return repairs;
363
430
  }
@@ -383,7 +450,7 @@ export function dropTableStatements() {
383
450
  /** Drop the nine agent tables. Destructive and irreversible — this erases every thread and every ledger row. */
384
451
  export async function dropAgentTables(db) {
385
452
  for (const stmt of dropTableStatements()) {
386
- await db.rawQuery(stmt);
453
+ await db.rawQuery(portableSql(db, stmt));
387
454
  }
388
455
  }
389
456
  function isManager(db) {
@@ -469,6 +536,6 @@ export async function ensureStreamFrameTable(db, table = AGENT_TABLES.streamFram
469
536
  const runner = schemaRunner(db);
470
537
  if (await hasTable(runner, table))
471
538
  return;
472
- await issue(runner, streamFrameTableStatement(table), () => hasTable(runner, table));
539
+ await issue(runner, forDialect(streamFrameTableStatement(table), isMySql(runner)), () => hasTable(runner, table));
473
540
  }
474
541
  //# sourceMappingURL=lucid-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lucid-schema.js","sourceRoot":"","sources":["../../../src/stores/lucid-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid-schema.js","sourceRoot":"","sources":["../../../src/stores/lucid-schema.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,13 @@ export interface LucidRawRunner {
58
58
  export interface LucidDatabaseLike extends LucidClientLike, LucidRawRunner {
59
59
  transaction<T>(callback: (trx: LucidClientLike) => Promise<T>): Promise<T>;
60
60
  }
61
+ /**
62
+ * `query` in the order its messages were appended: `seq`, which append assigns, then `created_at`
63
+ * and `id` for the rows from before `seq` existed (they all hold 0, and so sort first). `created_at`
64
+ * alone could not order a transcript: two messages of one turn routinely share a millisecond, and
65
+ * the database then returned them in either order.
66
+ */
67
+ export declare function inAppendOrder<Q extends LucidQueryBuilderLike>(query: Q, direction: 'asc' | 'desc'): Q;
61
68
  export interface LucidAgentStoreOptions {
62
69
  /**
63
70
  * Provision the agent tables (via {@link ensureAgentTables}) — as the app starts when the agent
@@ -137,6 +144,11 @@ export declare class LucidAgentStore implements AgentStore, ThreadTurnReader, Ch
137
144
  queuePause(threadId: string): Promise<QueuePause | null>;
138
145
  setQueuePause(threadId: string, pause: QueuePause | null): Promise<void>;
139
146
  appendMessage(input: AppendMessageInput): Promise<StoredMessage>;
147
+ /**
148
+ * The next `seq` in a thread: one past its highest. Two appends racing on ONE thread can draw the
149
+ * same number — the turn loop never does that, and the tie then falls back to `created_at`, `id`.
150
+ */
151
+ private nextMessageSeq;
140
152
  setMessageUi(messageId: string, ui: AgentUiComponent[]): Promise<void>;
141
153
  setMessageToolResults(messageId: string, results: ToolResult[]): Promise<void>;
142
154
  truncateFrom(threadId: string, messageId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  import { toolCallApprovalFromRow, } from '../spi/approval-policy.js';
2
2
  import { AGENT_TABLES, ensureAgentTables } from './lucid-schema.js';
3
+ /**
4
+ * `query` in the order its messages were appended: `seq`, which append assigns, then `created_at`
5
+ * and `id` for the rows from before `seq` existed (they all hold 0, and so sort first). `created_at`
6
+ * alone could not order a transcript: two messages of one turn routinely share a millisecond, and
7
+ * the database then returned them in either order.
8
+ */
9
+ export function inAppendOrder(query, direction) {
10
+ return query.orderBy('seq', direction).orderBy('created_at', direction).orderBy('id', direction);
11
+ }
3
12
  function toInt(value) {
4
13
  if (typeof value === 'number')
5
14
  return value;
@@ -164,11 +173,7 @@ export class LucidAgentStore {
164
173
  .first();
165
174
  if (row === null || row === undefined)
166
175
  return null;
167
- const messageRows = await this.db
168
- .from(AGENT_TABLES.messages)
169
- .where('thread_id', threadId)
170
- .orderBy('created_at', 'asc')
171
- .select('*');
176
+ const messageRows = await inAppendOrder(this.db.from(AGENT_TABLES.messages).where('thread_id', threadId), 'asc').select('*');
172
177
  const messages = await this.withApprovals(messageRows.map(rowToMessage));
173
178
  const last = messages[messages.length - 1];
174
179
  return {
@@ -205,11 +210,7 @@ export class LucidAgentStore {
205
210
  async loadTurnWindow(threadId, limit) {
206
211
  if (limit !== undefined && limit <= 0)
207
212
  return [];
208
- const query = this.db
209
- .from(AGENT_TABLES.messages)
210
- .where('thread_id', threadId)
211
- .orderBy('created_at', 'desc')
212
- .orderBy('id', 'desc');
213
+ const query = inAppendOrder(this.db.from(AGENT_TABLES.messages).where('thread_id', threadId), 'desc');
213
214
  if (limit !== undefined)
214
215
  query.limit(limit);
215
216
  const rows = await query.select(...TURN_MESSAGE_COLUMNS);
@@ -260,11 +261,7 @@ export class LucidAgentStore {
260
261
  if (source === null || source === undefined) {
261
262
  throw new Error(`thread ${threadId} not found`);
262
263
  }
263
- const messageRows = await trx
264
- .from(AGENT_TABLES.messages)
265
- .where('thread_id', threadId)
266
- .orderBy('created_at', 'asc')
267
- .select('*');
264
+ const messageRows = await inAppendOrder(trx.from(AGENT_TABLES.messages).where('thread_id', threadId), 'asc').select('*');
268
265
  const cutoff = messageRows.findIndex((m) => String(m.id) === fromMessageId);
269
266
  const kept = cutoff >= 0 ? messageRows.slice(0, cutoff + 1) : messageRows;
270
267
  const id = crypto.randomUUID();
@@ -288,10 +285,12 @@ export class LucidAgentStore {
288
285
  updated_at: now,
289
286
  deleted_at: null,
290
287
  });
291
- for (const m of kept) {
288
+ for (const [index, m] of kept.entries()) {
292
289
  // New message id: the message PK is unique, so a fork copies content under fresh ids.
293
290
  await trx.table(AGENT_TABLES.messages).insert({
294
291
  id: crypto.randomUUID(),
292
+ // Numbered afresh in the order just read, so the copy reads back in the original's order.
293
+ seq: index + 1,
295
294
  thread_id: id,
296
295
  role: m.role,
297
296
  content: m.content,
@@ -393,7 +392,13 @@ export class LucidAgentStore {
393
392
  .where('id', threadId)
394
393
  .whereIn('active_stream_id', holders)
395
394
  .update({ active_stream_id: runId });
396
- return affectedRows(handed) > 0;
395
+ if (affectedRows(handed) > 0) {
396
+ return true;
397
+ }
398
+ // Zero can still be a win: a MySQL connection without FOUND_ROWS reports CHANGED rows, and
399
+ // re-claiming a thread this run already holds changes nothing. The row says who holds it now.
400
+ const held = await this.db.from(AGENT_TABLES.threads).where('id', threadId).first();
401
+ return held !== null && held !== undefined && held.active_stream_id === runId;
397
402
  }
398
403
  async releaseActiveStream(threadId, runId) {
399
404
  await this.init();
@@ -524,8 +529,10 @@ export class LucidAgentStore {
524
529
  await this.init();
525
530
  const id = crypto.randomUUID();
526
531
  const now = Date.now();
532
+ const seq = await this.nextMessageSeq(input.threadId);
527
533
  await this.db.table(AGENT_TABLES.messages).insert({
528
534
  id,
535
+ seq,
529
536
  thread_id: input.threadId,
530
537
  role: input.role,
531
538
  content: input.content,
@@ -567,6 +574,19 @@ export class LucidAgentStore {
567
574
  ...(input.ui !== undefined ? { ui: input.ui } : {}),
568
575
  };
569
576
  }
577
+ /**
578
+ * The next `seq` in a thread: one past its highest. Two appends racing on ONE thread can draw the
579
+ * same number — the turn loop never does that, and the tie then falls back to `created_at`, `id`.
580
+ */
581
+ async nextMessageSeq(threadId) {
582
+ const [last] = await this.db
583
+ .from(AGENT_TABLES.messages)
584
+ .where('thread_id', threadId)
585
+ .orderBy('seq', 'desc')
586
+ .limit(1)
587
+ .select('seq');
588
+ return toInt(last?.seq) + 1;
589
+ }
570
590
  async setMessageUi(messageId, ui) {
571
591
  await this.init();
572
592
  await this.db
@@ -584,11 +604,7 @@ export class LucidAgentStore {
584
604
  async truncateFrom(threadId, messageId) {
585
605
  await this.init();
586
606
  await this.db.transaction(async (trx) => {
587
- const rows = await trx
588
- .from(AGENT_TABLES.messages)
589
- .where('thread_id', threadId)
590
- .orderBy('created_at', 'asc')
591
- .select('id');
607
+ const rows = await inAppendOrder(trx.from(AGENT_TABLES.messages).where('thread_id', threadId), 'asc').select('id');
592
608
  const cutoff = rows.findIndex((m) => String(m.id) === messageId);
593
609
  if (cutoff < 0)
594
610
  return;
@@ -695,6 +711,7 @@ export class LucidAgentStore {
695
711
  .from(AGENT_TABLES.toolCalls)
696
712
  .whereIn('message_id', messages.map((message) => message.id))
697
713
  .orderBy('created_at', 'asc')
714
+ .orderBy('id', 'asc')
698
715
  .select('*');
699
716
  const byMessage = new Map();
700
717
  for (const call of rows) {