@open-mercato/ai-assistant 0.6.1-develop.3291.1.6fad645fd0 → 0.6.1

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 (135) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/AGENTS.md +30 -4
  3. package/dist/frontend/components/AiChatButton.js +3 -2
  4. package/dist/frontend/components/AiChatButton.js.map +2 -2
  5. package/dist/modules/ai_assistant/__integration__/TC-AI-AGENT-LOOP-001-006.spec.js +364 -0
  6. package/dist/modules/ai_assistant/__integration__/TC-AI-AGENT-LOOP-001-006.spec.js.map +7 -0
  7. package/dist/modules/ai_assistant/__integration__/TC-AI-RUNTIME-OVERRIDES-006-model-picker.spec.js +7 -7
  8. package/dist/modules/ai_assistant/__integration__/TC-AI-RUNTIME-OVERRIDES-006-model-picker.spec.js.map +2 -2
  9. package/dist/modules/ai_assistant/__integration__/TC-AI-TOKEN-USAGE-001-005.spec.js +182 -0
  10. package/dist/modules/ai_assistant/__integration__/TC-AI-TOKEN-USAGE-001-005.spec.js.map +7 -0
  11. package/dist/modules/ai_assistant/api/ai/agents/[agentId]/loop-override/route.js +316 -0
  12. package/dist/modules/ai_assistant/api/ai/agents/[agentId]/loop-override/route.js.map +7 -0
  13. package/dist/modules/ai_assistant/api/ai/agents/[agentId]/models/route.js +8 -7
  14. package/dist/modules/ai_assistant/api/ai/agents/[agentId]/models/route.js.map +2 -2
  15. package/dist/modules/ai_assistant/api/ai/chat/route.js +43 -20
  16. package/dist/modules/ai_assistant/api/ai/chat/route.js.map +2 -2
  17. package/dist/modules/ai_assistant/api/settings/route.js +4 -3
  18. package/dist/modules/ai_assistant/api/settings/route.js.map +2 -2
  19. package/dist/modules/ai_assistant/api/usage/daily/route.js +111 -0
  20. package/dist/modules/ai_assistant/api/usage/daily/route.js.map +7 -0
  21. package/dist/modules/ai_assistant/api/usage/sessions/[sessionId]/route.js +108 -0
  22. package/dist/modules/ai_assistant/api/usage/sessions/[sessionId]/route.js.map +7 -0
  23. package/dist/modules/ai_assistant/api/usage/sessions/route.js +153 -0
  24. package/dist/modules/ai_assistant/api/usage/sessions/route.js.map +7 -0
  25. package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js +335 -38
  26. package/dist/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.js.map +2 -2
  27. package/dist/modules/ai_assistant/backend/config/ai-assistant/allowlist/AiTenantAllowlistPageClient.js +2 -7
  28. package/dist/modules/ai_assistant/backend/config/ai-assistant/allowlist/AiTenantAllowlistPageClient.js.map +2 -2
  29. package/dist/modules/ai_assistant/backend/config/ai-assistant/playground/AiPlaygroundPageClient.js +44 -35
  30. package/dist/modules/ai_assistant/backend/config/ai-assistant/playground/AiPlaygroundPageClient.js.map +2 -2
  31. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/AiUsageStatsPageClient.js +282 -0
  32. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/AiUsageStatsPageClient.js.map +7 -0
  33. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/page.js +10 -0
  34. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/page.js.map +7 -0
  35. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/page.meta.js +25 -0
  36. package/dist/modules/ai_assistant/backend/config/ai-assistant/usage/page.meta.js.map +7 -0
  37. package/dist/modules/ai_assistant/cli.js +12 -0
  38. package/dist/modules/ai_assistant/cli.js.map +2 -2
  39. package/dist/modules/ai_assistant/components/AiAssistantSettingsPageClient.js.map +1 -1
  40. package/dist/modules/ai_assistant/data/entities.js +177 -1
  41. package/dist/modules/ai_assistant/data/entities.js.map +2 -2
  42. package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js +104 -2
  43. package/dist/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.js.map +2 -2
  44. package/dist/modules/ai_assistant/data/repositories/AiTokenUsageRepository.js +168 -0
  45. package/dist/modules/ai_assistant/data/repositories/AiTokenUsageRepository.js.map +7 -0
  46. package/dist/modules/ai_assistant/events.js +8 -0
  47. package/dist/modules/ai_assistant/events.js.map +2 -2
  48. package/dist/modules/ai_assistant/i18n/de.json +74 -1
  49. package/dist/modules/ai_assistant/i18n/en.json +74 -1
  50. package/dist/modules/ai_assistant/i18n/es.json +75 -2
  51. package/dist/modules/ai_assistant/i18n/pl.json +74 -1
  52. package/dist/modules/ai_assistant/lib/agent-policy.js.map +2 -2
  53. package/dist/modules/ai_assistant/lib/agent-runtime.js +588 -23
  54. package/dist/modules/ai_assistant/lib/agent-runtime.js.map +3 -3
  55. package/dist/modules/ai_assistant/lib/agent-tools.js +6 -1
  56. package/dist/modules/ai_assistant/lib/agent-tools.js.map +2 -2
  57. package/dist/modules/ai_assistant/lib/ai-agent-definition.js.map +2 -2
  58. package/dist/modules/ai_assistant/lib/model-factory.js +63 -22
  59. package/dist/modules/ai_assistant/lib/model-factory.js.map +2 -2
  60. package/dist/modules/ai_assistant/lib/token-usage-recorder.js +78 -0
  61. package/dist/modules/ai_assistant/lib/token-usage-recorder.js.map +7 -0
  62. package/dist/modules/ai_assistant/lib/usage-serialization.js +33 -0
  63. package/dist/modules/ai_assistant/lib/usage-serialization.js.map +7 -0
  64. package/dist/modules/ai_assistant/migrations/Migration20260508160000_ai_agent_loop_overrides.js +25 -0
  65. package/dist/modules/ai_assistant/migrations/Migration20260508160000_ai_agent_loop_overrides.js.map +7 -0
  66. package/dist/modules/ai_assistant/migrations/Migration20260508170000_ai_token_usage.js +88 -0
  67. package/dist/modules/ai_assistant/migrations/Migration20260508170000_ai_token_usage.js.map +7 -0
  68. package/dist/modules/ai_assistant/setup.js +34 -0
  69. package/dist/modules/ai_assistant/setup.js.map +2 -2
  70. package/dist/modules/ai_assistant/workers/ai-token-usage-prune.js +114 -0
  71. package/dist/modules/ai_assistant/workers/ai-token-usage-prune.js.map +7 -0
  72. package/generated/entities/ai_agent_runtime_override/index.ts +7 -0
  73. package/generated/entities/ai_token_usage_daily/index.ts +16 -0
  74. package/generated/entities/ai_token_usage_event/index.ts +19 -0
  75. package/generated/entities.ids.generated.ts +2 -0
  76. package/generated/entity-fields-registry.ts +47 -1
  77. package/package.json +15 -7
  78. package/src/frontend/components/AiChatButton.tsx +3 -2
  79. package/src/modules/ai_assistant/__integration__/TC-AI-AGENT-LOOP-001-006.spec.ts +521 -0
  80. package/src/modules/ai_assistant/__integration__/TC-AI-RUNTIME-OVERRIDES-006-model-picker.spec.ts +8 -8
  81. package/src/modules/ai_assistant/__integration__/TC-AI-TOKEN-USAGE-001-005.spec.ts +231 -0
  82. package/src/modules/ai_assistant/__tests__/events.test.ts +4 -3
  83. package/src/modules/ai_assistant/__tests__/settings-page-logic.test.ts +5 -5
  84. package/src/modules/ai_assistant/__tests__/token-usage-recorder.test.ts +109 -0
  85. package/src/modules/ai_assistant/api/ai/agents/[agentId]/loop-override/route.ts +388 -0
  86. package/src/modules/ai_assistant/api/ai/agents/[agentId]/models/__tests__/route.test.ts +5 -0
  87. package/src/modules/ai_assistant/api/ai/agents/[agentId]/models/route.ts +8 -7
  88. package/src/modules/ai_assistant/api/ai/chat/__tests__/route.test.ts +102 -5
  89. package/src/modules/ai_assistant/api/ai/chat/route.ts +55 -18
  90. package/src/modules/ai_assistant/api/settings/route.ts +5 -3
  91. package/src/modules/ai_assistant/api/usage/daily/__tests__/route.test.ts +159 -0
  92. package/src/modules/ai_assistant/api/usage/daily/route.ts +126 -0
  93. package/src/modules/ai_assistant/api/usage/sessions/[sessionId]/__tests__/route.test.ts +143 -0
  94. package/src/modules/ai_assistant/api/usage/sessions/[sessionId]/route.ts +130 -0
  95. package/src/modules/ai_assistant/api/usage/sessions/__tests__/route.test.ts +123 -0
  96. package/src/modules/ai_assistant/api/usage/sessions/route.ts +184 -0
  97. package/src/modules/ai_assistant/backend/config/ai-assistant/agents/AiAgentSettingsPageClient.tsx +372 -16
  98. package/src/modules/ai_assistant/backend/config/ai-assistant/allowlist/AiTenantAllowlistPageClient.tsx +1 -4
  99. package/src/modules/ai_assistant/backend/config/ai-assistant/playground/AiPlaygroundPageClient.tsx +26 -9
  100. package/src/modules/ai_assistant/backend/config/ai-assistant/usage/AiUsageStatsPageClient.tsx +469 -0
  101. package/src/modules/ai_assistant/backend/config/ai-assistant/usage/page.meta.ts +23 -0
  102. package/src/modules/ai_assistant/backend/config/ai-assistant/usage/page.tsx +12 -0
  103. package/src/modules/ai_assistant/cli.ts +18 -0
  104. package/src/modules/ai_assistant/components/AiAssistantSettingsPageClient.tsx +1 -1
  105. package/src/modules/ai_assistant/data/entities.ts +237 -0
  106. package/src/modules/ai_assistant/data/repositories/AiAgentRuntimeOverrideRepository.ts +135 -3
  107. package/src/modules/ai_assistant/data/repositories/AiTokenUsageRepository.ts +213 -0
  108. package/src/modules/ai_assistant/data/repositories/__tests__/AiAgentRuntimeOverrideRepository.test.ts +223 -0
  109. package/src/modules/ai_assistant/data/repositories/__tests__/AiTokenUsageRepository.test.ts +58 -0
  110. package/src/modules/ai_assistant/events.ts +8 -0
  111. package/src/modules/ai_assistant/i18n/de.json +74 -1
  112. package/src/modules/ai_assistant/i18n/en.json +74 -1
  113. package/src/modules/ai_assistant/i18n/es.json +75 -2
  114. package/src/modules/ai_assistant/i18n/pl.json +74 -1
  115. package/src/modules/ai_assistant/lib/__tests__/agent-runtime-loop-phase0.test.ts +439 -0
  116. package/src/modules/ai_assistant/lib/__tests__/agent-runtime-loop-phase1.test.ts +243 -0
  117. package/src/modules/ai_assistant/lib/__tests__/agent-runtime-loop-phase2.test.ts +388 -0
  118. package/src/modules/ai_assistant/lib/__tests__/agent-runtime-loop-phase3.test.ts +359 -0
  119. package/src/modules/ai_assistant/lib/__tests__/agent-runtime-phase4a.test.ts +2 -2
  120. package/src/modules/ai_assistant/lib/__tests__/agent-runtime.test.ts +2 -1
  121. package/src/modules/ai_assistant/lib/__tests__/max-steps-budget.integration.test.ts +12 -13
  122. package/src/modules/ai_assistant/lib/__tests__/model-factory.test.ts +77 -14
  123. package/src/modules/ai_assistant/lib/agent-policy.ts +9 -0
  124. package/src/modules/ai_assistant/lib/agent-runtime.ts +1148 -43
  125. package/src/modules/ai_assistant/lib/agent-tools.ts +5 -1
  126. package/src/modules/ai_assistant/lib/ai-agent-definition.ts +289 -2
  127. package/src/modules/ai_assistant/lib/model-factory.ts +128 -43
  128. package/src/modules/ai_assistant/lib/token-usage-recorder.ts +122 -0
  129. package/src/modules/ai_assistant/lib/usage-serialization.ts +29 -0
  130. package/src/modules/ai_assistant/migrations/.snapshot-open-mercato.json +791 -0
  131. package/src/modules/ai_assistant/migrations/Migration20260508160000_ai_agent_loop_overrides.ts +25 -0
  132. package/src/modules/ai_assistant/migrations/Migration20260508170000_ai_token_usage.ts +89 -0
  133. package/src/modules/ai_assistant/setup.ts +49 -0
  134. package/src/modules/ai_assistant/workers/__tests__/ai-token-usage-prune.test.ts +144 -0
  135. package/src/modules/ai_assistant/workers/ai-token-usage-prune.ts +188 -0
@@ -533,6 +533,118 @@
533
533
  "enumItems": [],
534
534
  "mappedType": "uuid"
535
535
  },
536
+ "loop_active_tools_json": {
537
+ "name": "loop_active_tools_json",
538
+ "type": "jsonb",
539
+ "unsigned": false,
540
+ "autoincrement": false,
541
+ "primary": false,
542
+ "nullable": true,
543
+ "unique": false,
544
+ "length": null,
545
+ "precision": null,
546
+ "scale": null,
547
+ "default": null,
548
+ "comment": null,
549
+ "enumItems": [],
550
+ "mappedType": "json"
551
+ },
552
+ "loop_disabled": {
553
+ "name": "loop_disabled",
554
+ "type": "boolean",
555
+ "unsigned": false,
556
+ "autoincrement": false,
557
+ "primary": false,
558
+ "nullable": true,
559
+ "unique": false,
560
+ "length": null,
561
+ "precision": null,
562
+ "scale": null,
563
+ "default": null,
564
+ "comment": null,
565
+ "enumItems": [],
566
+ "mappedType": "boolean"
567
+ },
568
+ "loop_max_steps": {
569
+ "name": "loop_max_steps",
570
+ "type": "int",
571
+ "unsigned": false,
572
+ "autoincrement": false,
573
+ "primary": false,
574
+ "nullable": true,
575
+ "unique": false,
576
+ "length": null,
577
+ "precision": null,
578
+ "scale": null,
579
+ "default": null,
580
+ "comment": null,
581
+ "enumItems": [],
582
+ "mappedType": "integer"
583
+ },
584
+ "loop_max_tokens": {
585
+ "name": "loop_max_tokens",
586
+ "type": "int",
587
+ "unsigned": false,
588
+ "autoincrement": false,
589
+ "primary": false,
590
+ "nullable": true,
591
+ "unique": false,
592
+ "length": null,
593
+ "precision": null,
594
+ "scale": null,
595
+ "default": null,
596
+ "comment": null,
597
+ "enumItems": [],
598
+ "mappedType": "integer"
599
+ },
600
+ "loop_max_tool_calls": {
601
+ "name": "loop_max_tool_calls",
602
+ "type": "int",
603
+ "unsigned": false,
604
+ "autoincrement": false,
605
+ "primary": false,
606
+ "nullable": true,
607
+ "unique": false,
608
+ "length": null,
609
+ "precision": null,
610
+ "scale": null,
611
+ "default": null,
612
+ "comment": null,
613
+ "enumItems": [],
614
+ "mappedType": "integer"
615
+ },
616
+ "loop_max_wall_clock_ms": {
617
+ "name": "loop_max_wall_clock_ms",
618
+ "type": "int",
619
+ "unsigned": false,
620
+ "autoincrement": false,
621
+ "primary": false,
622
+ "nullable": true,
623
+ "unique": false,
624
+ "length": null,
625
+ "precision": null,
626
+ "scale": null,
627
+ "default": null,
628
+ "comment": null,
629
+ "enumItems": [],
630
+ "mappedType": "integer"
631
+ },
632
+ "loop_stop_when_json": {
633
+ "name": "loop_stop_when_json",
634
+ "type": "jsonb",
635
+ "unsigned": false,
636
+ "autoincrement": false,
637
+ "primary": false,
638
+ "nullable": true,
639
+ "unique": false,
640
+ "length": null,
641
+ "precision": null,
642
+ "scale": null,
643
+ "default": null,
644
+ "comment": null,
645
+ "enumItems": [],
646
+ "mappedType": "json"
647
+ },
536
648
  "model_id": {
537
649
  "name": "model_id",
538
650
  "type": "varchar(256)",
@@ -1333,6 +1445,685 @@
1333
1445
  "checks": [],
1334
1446
  "foreignKeys": {},
1335
1447
  "comment": null
1448
+ },
1449
+ {
1450
+ "name": "ai_token_usage_daily",
1451
+ "schema": "public",
1452
+ "columns": {
1453
+ "agent_id": {
1454
+ "name": "agent_id",
1455
+ "type": "text",
1456
+ "unsigned": false,
1457
+ "autoincrement": false,
1458
+ "primary": false,
1459
+ "nullable": false,
1460
+ "unique": false,
1461
+ "length": null,
1462
+ "precision": null,
1463
+ "scale": null,
1464
+ "default": null,
1465
+ "comment": null,
1466
+ "enumItems": [],
1467
+ "mappedType": "text"
1468
+ },
1469
+ "cached_input_tokens": {
1470
+ "name": "cached_input_tokens",
1471
+ "type": "bigint",
1472
+ "unsigned": false,
1473
+ "autoincrement": false,
1474
+ "primary": false,
1475
+ "nullable": false,
1476
+ "unique": false,
1477
+ "length": null,
1478
+ "precision": null,
1479
+ "scale": null,
1480
+ "default": null,
1481
+ "comment": null,
1482
+ "enumItems": [],
1483
+ "mappedType": "bigint"
1484
+ },
1485
+ "created_at": {
1486
+ "name": "created_at",
1487
+ "type": "timestamptz(6)",
1488
+ "unsigned": false,
1489
+ "autoincrement": false,
1490
+ "primary": false,
1491
+ "nullable": false,
1492
+ "unique": false,
1493
+ "length": 6,
1494
+ "precision": null,
1495
+ "scale": null,
1496
+ "default": null,
1497
+ "comment": null,
1498
+ "enumItems": [],
1499
+ "mappedType": "datetime"
1500
+ },
1501
+ "day": {
1502
+ "name": "day",
1503
+ "type": "date",
1504
+ "unsigned": false,
1505
+ "autoincrement": false,
1506
+ "primary": false,
1507
+ "nullable": false,
1508
+ "unique": false,
1509
+ "length": null,
1510
+ "precision": null,
1511
+ "scale": null,
1512
+ "default": null,
1513
+ "comment": null,
1514
+ "enumItems": [],
1515
+ "mappedType": "date"
1516
+ },
1517
+ "id": {
1518
+ "name": "id",
1519
+ "type": "uuid",
1520
+ "unsigned": false,
1521
+ "autoincrement": false,
1522
+ "primary": true,
1523
+ "nullable": false,
1524
+ "unique": false,
1525
+ "length": null,
1526
+ "precision": null,
1527
+ "scale": null,
1528
+ "default": "gen_random_uuid()",
1529
+ "comment": null,
1530
+ "enumItems": [],
1531
+ "mappedType": "uuid"
1532
+ },
1533
+ "input_tokens": {
1534
+ "name": "input_tokens",
1535
+ "type": "bigint",
1536
+ "unsigned": false,
1537
+ "autoincrement": false,
1538
+ "primary": false,
1539
+ "nullable": false,
1540
+ "unique": false,
1541
+ "length": null,
1542
+ "precision": null,
1543
+ "scale": null,
1544
+ "default": null,
1545
+ "comment": null,
1546
+ "enumItems": [],
1547
+ "mappedType": "bigint"
1548
+ },
1549
+ "model_id": {
1550
+ "name": "model_id",
1551
+ "type": "text",
1552
+ "unsigned": false,
1553
+ "autoincrement": false,
1554
+ "primary": false,
1555
+ "nullable": false,
1556
+ "unique": false,
1557
+ "length": null,
1558
+ "precision": null,
1559
+ "scale": null,
1560
+ "default": null,
1561
+ "comment": null,
1562
+ "enumItems": [],
1563
+ "mappedType": "text"
1564
+ },
1565
+ "organization_id": {
1566
+ "name": "organization_id",
1567
+ "type": "uuid",
1568
+ "unsigned": false,
1569
+ "autoincrement": false,
1570
+ "primary": false,
1571
+ "nullable": true,
1572
+ "unique": false,
1573
+ "length": null,
1574
+ "precision": null,
1575
+ "scale": null,
1576
+ "default": null,
1577
+ "comment": null,
1578
+ "enumItems": [],
1579
+ "mappedType": "uuid"
1580
+ },
1581
+ "output_tokens": {
1582
+ "name": "output_tokens",
1583
+ "type": "bigint",
1584
+ "unsigned": false,
1585
+ "autoincrement": false,
1586
+ "primary": false,
1587
+ "nullable": false,
1588
+ "unique": false,
1589
+ "length": null,
1590
+ "precision": null,
1591
+ "scale": null,
1592
+ "default": null,
1593
+ "comment": null,
1594
+ "enumItems": [],
1595
+ "mappedType": "bigint"
1596
+ },
1597
+ "provider_id": {
1598
+ "name": "provider_id",
1599
+ "type": "text",
1600
+ "unsigned": false,
1601
+ "autoincrement": false,
1602
+ "primary": false,
1603
+ "nullable": false,
1604
+ "unique": false,
1605
+ "length": null,
1606
+ "precision": null,
1607
+ "scale": null,
1608
+ "default": null,
1609
+ "comment": null,
1610
+ "enumItems": [],
1611
+ "mappedType": "text"
1612
+ },
1613
+ "reasoning_tokens": {
1614
+ "name": "reasoning_tokens",
1615
+ "type": "bigint",
1616
+ "unsigned": false,
1617
+ "autoincrement": false,
1618
+ "primary": false,
1619
+ "nullable": false,
1620
+ "unique": false,
1621
+ "length": null,
1622
+ "precision": null,
1623
+ "scale": null,
1624
+ "default": null,
1625
+ "comment": null,
1626
+ "enumItems": [],
1627
+ "mappedType": "bigint"
1628
+ },
1629
+ "session_count": {
1630
+ "name": "session_count",
1631
+ "type": "bigint",
1632
+ "unsigned": false,
1633
+ "autoincrement": false,
1634
+ "primary": false,
1635
+ "nullable": false,
1636
+ "unique": false,
1637
+ "length": null,
1638
+ "precision": null,
1639
+ "scale": null,
1640
+ "default": null,
1641
+ "comment": null,
1642
+ "enumItems": [],
1643
+ "mappedType": "bigint"
1644
+ },
1645
+ "step_count": {
1646
+ "name": "step_count",
1647
+ "type": "bigint",
1648
+ "unsigned": false,
1649
+ "autoincrement": false,
1650
+ "primary": false,
1651
+ "nullable": false,
1652
+ "unique": false,
1653
+ "length": null,
1654
+ "precision": null,
1655
+ "scale": null,
1656
+ "default": null,
1657
+ "comment": null,
1658
+ "enumItems": [],
1659
+ "mappedType": "bigint"
1660
+ },
1661
+ "tenant_id": {
1662
+ "name": "tenant_id",
1663
+ "type": "uuid",
1664
+ "unsigned": false,
1665
+ "autoincrement": false,
1666
+ "primary": false,
1667
+ "nullable": false,
1668
+ "unique": false,
1669
+ "length": null,
1670
+ "precision": null,
1671
+ "scale": null,
1672
+ "default": null,
1673
+ "comment": null,
1674
+ "enumItems": [],
1675
+ "mappedType": "uuid"
1676
+ },
1677
+ "turn_count": {
1678
+ "name": "turn_count",
1679
+ "type": "bigint",
1680
+ "unsigned": false,
1681
+ "autoincrement": false,
1682
+ "primary": false,
1683
+ "nullable": false,
1684
+ "unique": false,
1685
+ "length": null,
1686
+ "precision": null,
1687
+ "scale": null,
1688
+ "default": null,
1689
+ "comment": null,
1690
+ "enumItems": [],
1691
+ "mappedType": "bigint"
1692
+ },
1693
+ "updated_at": {
1694
+ "name": "updated_at",
1695
+ "type": "timestamptz(6)",
1696
+ "unsigned": false,
1697
+ "autoincrement": false,
1698
+ "primary": false,
1699
+ "nullable": false,
1700
+ "unique": false,
1701
+ "length": 6,
1702
+ "precision": null,
1703
+ "scale": null,
1704
+ "default": null,
1705
+ "comment": null,
1706
+ "enumItems": [],
1707
+ "mappedType": "datetime"
1708
+ }
1709
+ },
1710
+ "indexes": [
1711
+ {
1712
+ "columnNames": [
1713
+ "id"
1714
+ ],
1715
+ "composite": false,
1716
+ "constraint": true,
1717
+ "keyName": "ai_token_usage_daily_pkey",
1718
+ "primary": true,
1719
+ "unique": true
1720
+ },
1721
+ {
1722
+ "columnNames": [],
1723
+ "composite": false,
1724
+ "constraint": false,
1725
+ "keyName": "ai_token_usage_daily_tenant_day_agent_model_null_org_uq",
1726
+ "primary": false,
1727
+ "unique": false,
1728
+ "expression": "create unique index \"ai_token_usage_daily_tenant_day_agent_model_null_org_uq\" on \"ai_token_usage_daily\" (\"tenant_id\", \"day\", \"agent_id\", \"model_id\") where \"organization_id\" is null"
1729
+ },
1730
+ {
1731
+ "columnNames": [],
1732
+ "composite": false,
1733
+ "constraint": false,
1734
+ "keyName": "ai_token_usage_daily_tenant_day_agent_model_org_uq",
1735
+ "primary": false,
1736
+ "unique": false,
1737
+ "expression": "create unique index \"ai_token_usage_daily_tenant_day_agent_model_org_uq\" on \"ai_token_usage_daily\" (\"tenant_id\", \"day\", \"agent_id\", \"model_id\", \"organization_id\") where \"organization_id\" is not null"
1738
+ },
1739
+ {
1740
+ "columnNames": [
1741
+ "tenant_id",
1742
+ "day"
1743
+ ],
1744
+ "composite": true,
1745
+ "constraint": false,
1746
+ "keyName": "ai_token_usage_daily_tenant_day_idx",
1747
+ "primary": false,
1748
+ "unique": false
1749
+ }
1750
+ ],
1751
+ "checks": [],
1752
+ "foreignKeys": {},
1753
+ "comment": null
1754
+ },
1755
+ {
1756
+ "name": "ai_token_usage_events",
1757
+ "schema": "public",
1758
+ "columns": {
1759
+ "agent_id": {
1760
+ "name": "agent_id",
1761
+ "type": "text",
1762
+ "unsigned": false,
1763
+ "autoincrement": false,
1764
+ "primary": false,
1765
+ "nullable": false,
1766
+ "unique": false,
1767
+ "length": null,
1768
+ "precision": null,
1769
+ "scale": null,
1770
+ "default": null,
1771
+ "comment": null,
1772
+ "enumItems": [],
1773
+ "mappedType": "text"
1774
+ },
1775
+ "cached_input_tokens": {
1776
+ "name": "cached_input_tokens",
1777
+ "type": "int",
1778
+ "unsigned": false,
1779
+ "autoincrement": false,
1780
+ "primary": false,
1781
+ "nullable": true,
1782
+ "unique": false,
1783
+ "length": null,
1784
+ "precision": null,
1785
+ "scale": null,
1786
+ "default": null,
1787
+ "comment": null,
1788
+ "enumItems": [],
1789
+ "mappedType": "integer"
1790
+ },
1791
+ "created_at": {
1792
+ "name": "created_at",
1793
+ "type": "timestamptz(6)",
1794
+ "unsigned": false,
1795
+ "autoincrement": false,
1796
+ "primary": false,
1797
+ "nullable": false,
1798
+ "unique": false,
1799
+ "length": 6,
1800
+ "precision": null,
1801
+ "scale": null,
1802
+ "default": null,
1803
+ "comment": null,
1804
+ "enumItems": [],
1805
+ "mappedType": "datetime"
1806
+ },
1807
+ "finish_reason": {
1808
+ "name": "finish_reason",
1809
+ "type": "text",
1810
+ "unsigned": false,
1811
+ "autoincrement": false,
1812
+ "primary": false,
1813
+ "nullable": true,
1814
+ "unique": false,
1815
+ "length": null,
1816
+ "precision": null,
1817
+ "scale": null,
1818
+ "default": null,
1819
+ "comment": null,
1820
+ "enumItems": [],
1821
+ "mappedType": "text"
1822
+ },
1823
+ "id": {
1824
+ "name": "id",
1825
+ "type": "uuid",
1826
+ "unsigned": false,
1827
+ "autoincrement": false,
1828
+ "primary": true,
1829
+ "nullable": false,
1830
+ "unique": false,
1831
+ "length": null,
1832
+ "precision": null,
1833
+ "scale": null,
1834
+ "default": "gen_random_uuid()",
1835
+ "comment": null,
1836
+ "enumItems": [],
1837
+ "mappedType": "uuid"
1838
+ },
1839
+ "input_tokens": {
1840
+ "name": "input_tokens",
1841
+ "type": "int",
1842
+ "unsigned": false,
1843
+ "autoincrement": false,
1844
+ "primary": false,
1845
+ "nullable": false,
1846
+ "unique": false,
1847
+ "length": null,
1848
+ "precision": null,
1849
+ "scale": null,
1850
+ "default": null,
1851
+ "comment": null,
1852
+ "enumItems": [],
1853
+ "mappedType": "integer"
1854
+ },
1855
+ "loop_abort_reason": {
1856
+ "name": "loop_abort_reason",
1857
+ "type": "text",
1858
+ "unsigned": false,
1859
+ "autoincrement": false,
1860
+ "primary": false,
1861
+ "nullable": true,
1862
+ "unique": false,
1863
+ "length": null,
1864
+ "precision": null,
1865
+ "scale": null,
1866
+ "default": null,
1867
+ "comment": null,
1868
+ "enumItems": [],
1869
+ "mappedType": "text"
1870
+ },
1871
+ "model_id": {
1872
+ "name": "model_id",
1873
+ "type": "text",
1874
+ "unsigned": false,
1875
+ "autoincrement": false,
1876
+ "primary": false,
1877
+ "nullable": false,
1878
+ "unique": false,
1879
+ "length": null,
1880
+ "precision": null,
1881
+ "scale": null,
1882
+ "default": null,
1883
+ "comment": null,
1884
+ "enumItems": [],
1885
+ "mappedType": "text"
1886
+ },
1887
+ "module_id": {
1888
+ "name": "module_id",
1889
+ "type": "text",
1890
+ "unsigned": false,
1891
+ "autoincrement": false,
1892
+ "primary": false,
1893
+ "nullable": false,
1894
+ "unique": false,
1895
+ "length": null,
1896
+ "precision": null,
1897
+ "scale": null,
1898
+ "default": null,
1899
+ "comment": null,
1900
+ "enumItems": [],
1901
+ "mappedType": "text"
1902
+ },
1903
+ "organization_id": {
1904
+ "name": "organization_id",
1905
+ "type": "uuid",
1906
+ "unsigned": false,
1907
+ "autoincrement": false,
1908
+ "primary": false,
1909
+ "nullable": true,
1910
+ "unique": false,
1911
+ "length": null,
1912
+ "precision": null,
1913
+ "scale": null,
1914
+ "default": null,
1915
+ "comment": null,
1916
+ "enumItems": [],
1917
+ "mappedType": "uuid"
1918
+ },
1919
+ "output_tokens": {
1920
+ "name": "output_tokens",
1921
+ "type": "int",
1922
+ "unsigned": false,
1923
+ "autoincrement": false,
1924
+ "primary": false,
1925
+ "nullable": false,
1926
+ "unique": false,
1927
+ "length": null,
1928
+ "precision": null,
1929
+ "scale": null,
1930
+ "default": null,
1931
+ "comment": null,
1932
+ "enumItems": [],
1933
+ "mappedType": "integer"
1934
+ },
1935
+ "provider_id": {
1936
+ "name": "provider_id",
1937
+ "type": "text",
1938
+ "unsigned": false,
1939
+ "autoincrement": false,
1940
+ "primary": false,
1941
+ "nullable": false,
1942
+ "unique": false,
1943
+ "length": null,
1944
+ "precision": null,
1945
+ "scale": null,
1946
+ "default": null,
1947
+ "comment": null,
1948
+ "enumItems": [],
1949
+ "mappedType": "text"
1950
+ },
1951
+ "reasoning_tokens": {
1952
+ "name": "reasoning_tokens",
1953
+ "type": "int",
1954
+ "unsigned": false,
1955
+ "autoincrement": false,
1956
+ "primary": false,
1957
+ "nullable": true,
1958
+ "unique": false,
1959
+ "length": null,
1960
+ "precision": null,
1961
+ "scale": null,
1962
+ "default": null,
1963
+ "comment": null,
1964
+ "enumItems": [],
1965
+ "mappedType": "integer"
1966
+ },
1967
+ "session_id": {
1968
+ "name": "session_id",
1969
+ "type": "uuid",
1970
+ "unsigned": false,
1971
+ "autoincrement": false,
1972
+ "primary": false,
1973
+ "nullable": false,
1974
+ "unique": false,
1975
+ "length": null,
1976
+ "precision": null,
1977
+ "scale": null,
1978
+ "default": null,
1979
+ "comment": null,
1980
+ "enumItems": [],
1981
+ "mappedType": "uuid"
1982
+ },
1983
+ "step_index": {
1984
+ "name": "step_index",
1985
+ "type": "int",
1986
+ "unsigned": false,
1987
+ "autoincrement": false,
1988
+ "primary": false,
1989
+ "nullable": false,
1990
+ "unique": false,
1991
+ "length": null,
1992
+ "precision": null,
1993
+ "scale": null,
1994
+ "default": null,
1995
+ "comment": null,
1996
+ "enumItems": [],
1997
+ "mappedType": "integer"
1998
+ },
1999
+ "tenant_id": {
2000
+ "name": "tenant_id",
2001
+ "type": "uuid",
2002
+ "unsigned": false,
2003
+ "autoincrement": false,
2004
+ "primary": false,
2005
+ "nullable": false,
2006
+ "unique": false,
2007
+ "length": null,
2008
+ "precision": null,
2009
+ "scale": null,
2010
+ "default": null,
2011
+ "comment": null,
2012
+ "enumItems": [],
2013
+ "mappedType": "uuid"
2014
+ },
2015
+ "turn_id": {
2016
+ "name": "turn_id",
2017
+ "type": "uuid",
2018
+ "unsigned": false,
2019
+ "autoincrement": false,
2020
+ "primary": false,
2021
+ "nullable": false,
2022
+ "unique": false,
2023
+ "length": null,
2024
+ "precision": null,
2025
+ "scale": null,
2026
+ "default": null,
2027
+ "comment": null,
2028
+ "enumItems": [],
2029
+ "mappedType": "uuid"
2030
+ },
2031
+ "updated_at": {
2032
+ "name": "updated_at",
2033
+ "type": "timestamptz(6)",
2034
+ "unsigned": false,
2035
+ "autoincrement": false,
2036
+ "primary": false,
2037
+ "nullable": false,
2038
+ "unique": false,
2039
+ "length": 6,
2040
+ "precision": null,
2041
+ "scale": null,
2042
+ "default": null,
2043
+ "comment": null,
2044
+ "enumItems": [],
2045
+ "mappedType": "datetime"
2046
+ },
2047
+ "user_id": {
2048
+ "name": "user_id",
2049
+ "type": "uuid",
2050
+ "unsigned": false,
2051
+ "autoincrement": false,
2052
+ "primary": false,
2053
+ "nullable": false,
2054
+ "unique": false,
2055
+ "length": null,
2056
+ "precision": null,
2057
+ "scale": null,
2058
+ "default": null,
2059
+ "comment": null,
2060
+ "enumItems": [],
2061
+ "mappedType": "uuid"
2062
+ }
2063
+ },
2064
+ "indexes": [
2065
+ {
2066
+ "columnNames": [
2067
+ "id"
2068
+ ],
2069
+ "composite": false,
2070
+ "constraint": true,
2071
+ "keyName": "ai_token_usage_events_pkey",
2072
+ "primary": true,
2073
+ "unique": true
2074
+ },
2075
+ {
2076
+ "columnNames": [
2077
+ "tenant_id",
2078
+ "agent_id",
2079
+ "created_at"
2080
+ ],
2081
+ "composite": true,
2082
+ "constraint": false,
2083
+ "keyName": "ai_token_usage_events_tenant_agent_created_idx",
2084
+ "primary": false,
2085
+ "unique": false
2086
+ },
2087
+ {
2088
+ "columnNames": [
2089
+ "tenant_id",
2090
+ "created_at"
2091
+ ],
2092
+ "composite": true,
2093
+ "constraint": false,
2094
+ "keyName": "ai_token_usage_events_tenant_created_idx",
2095
+ "primary": false,
2096
+ "unique": false
2097
+ },
2098
+ {
2099
+ "columnNames": [
2100
+ "tenant_id",
2101
+ "model_id",
2102
+ "created_at"
2103
+ ],
2104
+ "composite": true,
2105
+ "constraint": false,
2106
+ "keyName": "ai_token_usage_events_tenant_model_created_idx",
2107
+ "primary": false,
2108
+ "unique": false
2109
+ },
2110
+ {
2111
+ "columnNames": [
2112
+ "tenant_id",
2113
+ "session_id",
2114
+ "turn_id",
2115
+ "step_index"
2116
+ ],
2117
+ "composite": true,
2118
+ "constraint": false,
2119
+ "keyName": "ai_token_usage_events_tenant_session_turn_step_idx",
2120
+ "primary": false,
2121
+ "unique": false
2122
+ }
2123
+ ],
2124
+ "checks": [],
2125
+ "foreignKeys": {},
2126
+ "comment": null
1336
2127
  }
1337
2128
  ],
1338
2129
  "views": [],