ai_co_discuss 0.3.38 → 0.3.40

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.
@@ -1328,3 +1328,169 @@ UPDATE free_chain_holds SET names=replace(replace(names,'"Gemini"','"Antigravity
1328
1328
  UPDATE room_creations SET request_text=replace(replace(request_text,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE request_text LIKE '%"Gemini%';
1329
1329
  UPDATE session_start_submissions SET request_json=replace(replace(request_json,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE request_json LIKE '%"Gemini%';
1330
1330
  UPDATE scheduler_decision_inputs SET input=replace(replace(input,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE input LIKE '%"Gemini%';
1331
+ -- Room event log: an append-only record of each room state change, written by the triggers below so every code path
1332
+ -- is covered and later edits cannot forget it. State tables are overwritten in place; this log keeps the order of
1333
+ -- what happened (which request was created under which message, why it was cancelled, which batch handed back) so the
1334
+ -- timeline page can list and replay it. `at` is epoch milliseconds; `data` holds ids, names resolve at read time.
1335
+ CREATE TABLE IF NOT EXISTS room_events (
1336
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1337
+ room_id TEXT NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
1338
+ at INTEGER NOT NULL,
1339
+ kind TEXT NOT NULL,
1340
+ data TEXT NOT NULL DEFAULT '{}'
1341
+ );
1342
+ CREATE INDEX IF NOT EXISTS room_events_room ON room_events(room_id,id);
1343
+ DROP TRIGGER IF EXISTS event_message_posted;
1344
+ CREATE TRIGGER event_message_posted AFTER INSERT ON messages
1345
+ BEGIN
1346
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'message.posted',
1347
+ json_object('message_id',NEW.id,'author',NEW.author,'source',NEW.source,'reply_to',NEW.reply_to,'text',substr(NEW.text,1,80)));
1348
+ END;
1349
+ DROP TRIGGER IF EXISTS event_message_withdrawn;
1350
+ CREATE TRIGGER event_message_withdrawn AFTER INSERT ON message_withdrawals
1351
+ BEGIN
1352
+ INSERT INTO room_events (room_id,at,kind,data) SELECT room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'message.withdrawn',
1353
+ json_object('message_id',NEW.message_id,'kind',NEW.kind) FROM messages WHERE id=NEW.message_id;
1354
+ END;
1355
+ DROP TRIGGER IF EXISTS event_room_rewound;
1356
+ CREATE TRIGGER event_room_rewound AFTER INSERT ON room_rewinds
1357
+ BEGIN
1358
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'room.rewound',
1359
+ json_object('rewind_id',NEW.id,'message_id',NEW.message_id));
1360
+ END;
1361
+ DROP TRIGGER IF EXISTS event_member_joined;
1362
+ CREATE TRIGGER event_member_joined AFTER INSERT ON room_members
1363
+ BEGIN
1364
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'member.joined',
1365
+ json_object('member_id',NEW.id,'role',NEW.role,'status',NEW.status,'adapter',NEW.adapter));
1366
+ END;
1367
+ DROP TRIGGER IF EXISTS event_member_changed;
1368
+ CREATE TRIGGER event_member_changed AFTER UPDATE OF role,status ON room_members
1369
+ WHEN OLD.role IS NOT NEW.role OR OLD.status IS NOT NEW.status
1370
+ BEGIN
1371
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'member.changed',
1372
+ json_object('member_id',NEW.id,'role',NEW.role,'status',NEW.status,'from_role',OLD.role,'from_status',OLD.status));
1373
+ END;
1374
+ DROP TRIGGER IF EXISTS event_request_created;
1375
+ CREATE TRIGGER event_request_created AFTER INSERT ON member_requests
1376
+ BEGIN
1377
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'request.created',
1378
+ json_object('request_id',NEW.id,'member_id',NEW.member_id,'message_id',NEW.message_id,'purpose',NEW.purpose,
1379
+ 'created_by',NEW.created_by,'chain_id',NEW.chain_id,'batch_id',NEW.batch_id,'status',NEW.status));
1380
+ END;
1381
+ DROP TRIGGER IF EXISTS event_request_changed;
1382
+ CREATE TRIGGER event_request_changed AFTER UPDATE OF status,execution_id,answer_id ON member_requests
1383
+ WHEN OLD.status IS NOT NEW.status OR OLD.execution_id IS NOT NEW.execution_id OR OLD.answer_id IS NOT NEW.answer_id
1384
+ BEGIN
1385
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'request.changed',
1386
+ json_object('request_id',NEW.id,'member_id',NEW.member_id,'message_id',NEW.message_id,'status',NEW.status,
1387
+ 'from_status',OLD.status,'execution_id',NEW.execution_id,'answer_id',NEW.answer_id));
1388
+ END;
1389
+ DROP TRIGGER IF EXISTS event_request_cancel_reason;
1390
+ CREATE TRIGGER event_request_cancel_reason AFTER INSERT ON request_cancel_reasons
1391
+ BEGIN
1392
+ INSERT INTO room_events (room_id,at,kind,data) SELECT room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'request.cancel_reason',
1393
+ json_object('request_id',NEW.request_id,'member_id',member_id,'reason',NEW.reason) FROM member_requests WHERE id=NEW.request_id;
1394
+ END;
1395
+ DROP TRIGGER IF EXISTS event_execution_created;
1396
+ CREATE TRIGGER event_execution_created AFTER INSERT ON member_executions
1397
+ BEGIN
1398
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'execution.created',
1399
+ json_object('execution_id',NEW.id,'member_id',NEW.member_id,'status',NEW.status));
1400
+ END;
1401
+ DROP TRIGGER IF EXISTS event_execution_changed;
1402
+ CREATE TRIGGER event_execution_changed AFTER UPDATE OF status ON member_executions
1403
+ WHEN OLD.status IS NOT NEW.status
1404
+ BEGIN
1405
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'execution.changed',
1406
+ json_object('execution_id',NEW.id,'member_id',NEW.member_id,'status',NEW.status,'from_status',OLD.status,'result',substr(NEW.result,1,200)));
1407
+ END;
1408
+ DROP TRIGGER IF EXISTS event_execution_retry;
1409
+ CREATE TRIGGER event_execution_retry AFTER INSERT ON execution_retries
1410
+ BEGIN
1411
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'execution.retry',
1412
+ json_object('execution_id',NEW.execution_id,'attempt',NEW.attempt,'retry_at',NEW.retry_at,'reason',substr(NEW.reason,1,200),'stopped',NEW.stopped));
1413
+ END;
1414
+ DROP TRIGGER IF EXISTS event_execution_retry_changed;
1415
+ CREATE TRIGGER event_execution_retry_changed AFTER UPDATE ON execution_retries
1416
+ WHEN OLD.attempt IS NOT NEW.attempt OR OLD.stopped IS NOT NEW.stopped
1417
+ BEGIN
1418
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'execution.retry',
1419
+ json_object('execution_id',NEW.execution_id,'attempt',NEW.attempt,'retry_at',NEW.retry_at,'reason',substr(NEW.reason,1,200),'stopped',NEW.stopped));
1420
+ END;
1421
+ DROP TRIGGER IF EXISTS event_execution_late_answer;
1422
+ CREATE TRIGGER event_execution_late_answer AFTER INSERT ON late_answers
1423
+ BEGIN
1424
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'execution.late_answer',
1425
+ json_object('execution_id',NEW.execution_id,'text',substr(NEW.text,1,80)));
1426
+ END;
1427
+ DROP TRIGGER IF EXISTS event_batch_opened;
1428
+ CREATE TRIGGER event_batch_opened AFTER INSERT ON free_batches
1429
+ BEGIN
1430
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'batch.opened',
1431
+ json_object('batch_id',NEW.batch_id,'chain_id',NEW.chain_id,'host_id',NEW.host_id));
1432
+ END;
1433
+ DROP TRIGGER IF EXISTS event_batch_settled;
1434
+ CREATE TRIGGER event_batch_settled AFTER UPDATE OF settled ON free_batches
1435
+ WHEN OLD.settled IS NOT NEW.settled
1436
+ BEGIN
1437
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'batch.settled',
1438
+ json_object('batch_id',NEW.batch_id,'chain_id',NEW.chain_id,'settled',NEW.settled));
1439
+ END;
1440
+ DROP TRIGGER IF EXISTS event_batch_handoff;
1441
+ CREATE TRIGGER event_batch_handoff AFTER INSERT ON free_handoffs
1442
+ BEGIN
1443
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'batch.handoff',
1444
+ json_object('batch_id',NEW.batch_id));
1445
+ END;
1446
+ DROP TRIGGER IF EXISTS event_queue_added;
1447
+ CREATE TRIGGER event_queue_added AFTER INSERT ON free_queue
1448
+ BEGIN
1449
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'queue.added',
1450
+ json_object('queue_id',NEW.id,'message_id',NEW.message_id,'member_id',NEW.member_id));
1451
+ END;
1452
+ DROP TRIGGER IF EXISTS event_queue_removed;
1453
+ CREATE TRIGGER event_queue_removed AFTER DELETE ON free_queue
1454
+ BEGIN
1455
+ INSERT INTO room_events (room_id,at,kind,data) SELECT OLD.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'queue.removed',
1456
+ json_object('queue_id',OLD.id,'message_id',OLD.message_id,'member_id',OLD.member_id) WHERE EXISTS (SELECT 1 FROM rooms WHERE id=OLD.room_id);
1457
+ END;
1458
+ DROP TRIGGER IF EXISTS event_chain_held;
1459
+ CREATE TRIGGER event_chain_held AFTER INSERT ON free_chain_holds
1460
+ BEGIN
1461
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'chain.held',
1462
+ json_object('chain_id',NEW.chain_id,'message_id',NEW.message_id,'names',NEW.names,'handoff',NEW.handoff,'extra_rounds',NEW.extra_rounds));
1463
+ END;
1464
+ DROP TRIGGER IF EXISTS event_chain_released;
1465
+ CREATE TRIGGER event_chain_released AFTER DELETE ON free_chain_holds
1466
+ BEGIN
1467
+ INSERT INTO room_events (room_id,at,kind,data) SELECT OLD.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'chain.released',
1468
+ json_object('chain_id',OLD.chain_id,'message_id',OLD.message_id) WHERE EXISTS (SELECT 1 FROM rooms WHERE id=OLD.room_id);
1469
+ END;
1470
+ DROP TRIGGER IF EXISTS event_scheduler_decided;
1471
+ CREATE TRIGGER event_scheduler_decided AFTER INSERT ON scheduler_decisions
1472
+ BEGIN
1473
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'scheduler.decided',
1474
+ json_object('decision_id',NEW.id,'after_message_id',NEW.after_message_id,'kind',NEW.kind,'label',NEW.label,
1475
+ 'confidence',NEW.confidence,'applied',NEW.applied,'provider',NEW.provider));
1476
+ END;
1477
+ DROP TRIGGER IF EXISTS event_scheduler_applied;
1478
+ CREATE TRIGGER event_scheduler_applied AFTER UPDATE OF applied ON scheduler_decisions
1479
+ WHEN OLD.applied IS NOT NEW.applied
1480
+ BEGIN
1481
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'scheduler.applied',
1482
+ json_object('decision_id',NEW.id,'label',NEW.label,'applied',NEW.applied));
1483
+ END;
1484
+ DROP TRIGGER IF EXISTS event_discussion_created;
1485
+ CREATE TRIGGER event_discussion_created AFTER INSERT ON discussion_sessions
1486
+ BEGIN
1487
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'discussion.created',
1488
+ json_object('session_id',NEW.id,'status',NEW.status,'goal',substr(NEW.goal,1,80)));
1489
+ END;
1490
+ DROP TRIGGER IF EXISTS event_discussion_changed;
1491
+ CREATE TRIGGER event_discussion_changed AFTER UPDATE OF status ON discussion_sessions
1492
+ WHEN OLD.status IS NOT NEW.status
1493
+ BEGIN
1494
+ INSERT INTO room_events (room_id,at,kind,data) VALUES (NEW.room_id,CAST((julianday('now')-2440587.5)*86400000 AS INTEGER),'discussion.changed',
1495
+ json_object('session_id',NEW.id,'status',NEW.status,'from_status',OLD.status));
1496
+ END;