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.
- package/.agents/skills/discuss-host/references/discussion.md +4 -0
- package/.agents/skills/discuss-host/references/free.md +9 -1
- package/.agents/skills/discuss-host/references/workflow-draft.md +38 -0
- package/.agents/skills/discuss-participant/SKILL.md +2 -0
- package/.agents/skills/discuss-participant/references/free.md +1 -1
- package/README.md +139 -138
- package/backend/free_room.py +79 -5
- package/backend/identity.py +40 -31
- package/backend/schema.sql +166 -0
- package/backend/server.py +2555 -2458
- package/docs/runner.md +9 -1
- package/package.json +86 -86
- package/runner/adapters/antigravity_cli.mjs +324 -320
- package/runner/adapters/api.mjs +313 -299
- package/runner/adapters/claude.mjs +384 -313
- package/runner/adapters/cli.mjs +2 -1
- package/runner/discuss.py +21 -4
- package/runner/discussion_launch.mjs +1437 -1351
- package/runner/discussion_runner.mjs +233 -230
- package/runner/free_runner.mjs +907 -882
- package/runner/remote_launch.mjs +4 -2
- package/runner/workflows.mjs +321 -0
- package/web/app.js +4261 -4183
- package/web/markdown.js +2 -2
- package/web/modern.css +1 -1
- package/web/modern.js +5254 -4024
package/backend/schema.sql
CHANGED
|
@@ -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;
|