kairo-code 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl

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 (50) hide show
  1. kairo/backend/api/agents.py +337 -16
  2. kairo/backend/app.py +84 -4
  3. kairo/backend/config.py +4 -2
  4. kairo/backend/models/agent.py +216 -2
  5. kairo/backend/models/api_key.py +4 -1
  6. kairo/backend/models/task.py +31 -0
  7. kairo/backend/models/user_provider_key.py +26 -0
  8. kairo/backend/schemas/agent.py +249 -2
  9. kairo/backend/schemas/api_key.py +3 -0
  10. kairo/backend/services/agent/__init__.py +52 -0
  11. kairo/backend/services/agent/agent_alerts_evaluation_service.py +224 -0
  12. kairo/backend/services/agent/agent_alerts_service.py +201 -0
  13. kairo/backend/services/agent/agent_commands_service.py +142 -0
  14. kairo/backend/services/agent/agent_crud_service.py +150 -0
  15. kairo/backend/services/agent/agent_events_service.py +103 -0
  16. kairo/backend/services/agent/agent_heartbeat_service.py +207 -0
  17. kairo/backend/services/agent/agent_metrics_rollup_service.py +248 -0
  18. kairo/backend/services/agent/agent_metrics_service.py +259 -0
  19. kairo/backend/services/agent/agent_service.py +315 -0
  20. kairo/backend/services/agent/agent_setup_service.py +180 -0
  21. kairo/backend/services/agent/constants.py +28 -0
  22. kairo/backend/services/agent_service.py +18 -102
  23. kairo/backend/services/api_key_service.py +23 -3
  24. kairo/backend/services/byok_service.py +204 -0
  25. kairo/backend/services/chat_service.py +398 -63
  26. kairo/backend/services/deep_search_service.py +159 -0
  27. kairo/backend/services/email_service.py +418 -19
  28. kairo/backend/services/few_shot_service.py +223 -0
  29. kairo/backend/services/post_processor.py +261 -0
  30. kairo/backend/services/rag_service.py +150 -0
  31. kairo/backend/services/task_service.py +119 -0
  32. kairo/backend/tests/__init__.py +1 -0
  33. kairo/backend/tests/e2e/__init__.py +1 -0
  34. kairo/backend/tests/e2e/agents/__init__.py +1 -0
  35. kairo/backend/tests/e2e/agents/conftest.py +389 -0
  36. kairo/backend/tests/e2e/agents/test_agent_alerts.py +802 -0
  37. kairo/backend/tests/e2e/agents/test_agent_commands.py +456 -0
  38. kairo/backend/tests/e2e/agents/test_agent_crud.py +455 -0
  39. kairo/backend/tests/e2e/agents/test_agent_events.py +415 -0
  40. kairo/backend/tests/e2e/agents/test_agent_heartbeat.py +520 -0
  41. kairo/backend/tests/e2e/agents/test_agent_metrics.py +587 -0
  42. kairo/backend/tests/e2e/agents/test_agent_setup.py +349 -0
  43. kairo/migrations/versions/010_agent_dashboard.py +246 -0
  44. {kairo_code-0.1.0.dist-info → kairo_code-0.2.0.dist-info}/METADATA +1 -1
  45. {kairo_code-0.1.0.dist-info → kairo_code-0.2.0.dist-info}/RECORD +50 -16
  46. {kairo_code-0.1.0.dist-info → kairo_code-0.2.0.dist-info}/top_level.txt +1 -0
  47. kairo_migrations/env.py +92 -0
  48. kairo_migrations/versions/001_add_agent_dashboard_extensions.py +450 -0
  49. {kairo_code-0.1.0.dist-info → kairo_code-0.2.0.dist-info}/WHEEL +0 -0
  50. {kairo_code-0.1.0.dist-info → kairo_code-0.2.0.dist-info}/entry_points.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  image-service/main.py,sha256=3ziQic10tQpA-CE15B6wFomihGk-1tKsguaNEtiEYNc,6221
2
2
  infra/chat/app/main.py,sha256=mpMMDJ25_fQzA1UgCbpm_wDDGy2nHCh_IkiHmpgQVXM,3034
3
3
  kairo/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- kairo/backend/app.py,sha256=ST0EEwqyzDQtzLg_WsxWv7Se1ueCmxdYJCgEYgg1Bq4,11729
5
- kairo/backend/config.py,sha256=SwLVZCBv2_IHqHHWNIDrH7aol_nspCyxpowqaLWeehw,7652
4
+ kairo/backend/app.py,sha256=keiq6-BNN3heX-Hf0C8JVDgr0R31oovAqZOoPhAgboc,15278
5
+ kairo/backend/config.py,sha256=VnfbrSzXx9cdl0HICINU44sX3mHUr3YSC6TeWpiWLgI,7810
6
6
  kairo/backend/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- kairo/backend/api/agents.py,sha256=KuzmMYfoyzMpjJQi_nLZuAngfU1wZhMOPX-ueGC1LyE,3282
7
+ kairo/backend/api/agents.py,sha256=dNqXUpmHTVu9aXR09cG5iPhfXE5gwxw7f4ezk_e8Zvg,14467
8
8
  kairo/backend/api/api_keys.py,sha256=vmAgXWPBGOFSJS5c_7iqPTMrjz93csOfj3lWK-ndCYA,2950
9
9
  kairo/backend/api/auth.py,sha256=liWYqS3RiUx6MJyYCi4BL34-ftIWU53KiAI0W5Em0Uo,4248
10
10
  kairo/backend/api/billing.py,sha256=b19HjcPqGoJK-cSNjzX883OraPS1XRCl4O3FZp5GdGs,1639
@@ -34,8 +34,8 @@ kairo/backend/core/logging.py,sha256=2vGup6l5CRpOZv6tiYCuSN5mL2q83zimzMOphsOK-Js
34
34
  kairo/backend/core/rate_limit.py,sha256=6uy_YLAoDoWI396c7ZiSGQVrhw956rU3zOSsWVniMCI,2583
35
35
  kairo/backend/core/security.py,sha256=3Ca3CjFtypUqZj3MhXPH5y5vQq_or8FY4SB2pI_qnJc,910
36
36
  kairo/backend/models/__init__.py,sha256=JtEDWDiIe8ObFh6XZQe80_084Eq9fKeK0j2NAdLnh6M,884
37
- kairo/backend/models/agent.py,sha256=ypi08noNOwDAkU0iB4He53rIfEmQiqzKS6Lj25Abslg,1353
38
- kairo/backend/models/api_key.py,sha256=p2BBoZ9nZueh9MKNrflbP82lrzN8K17qVK1NMUm6mhk,1125
37
+ kairo/backend/models/agent.py,sha256=fdRwOwmIXxtCT8eQO9-74TAL-1DLiXVuMdmTfwswHmo,12823
38
+ kairo/backend/models/api_key.py,sha256=lC_4iAvemr_oxyOMX_QWGYxiee7Y2OmMp-uiN_sineM,1274
39
39
  kairo/backend/models/api_usage.py,sha256=BzGBuhVRX1duJIwI-TwcqhgPnUgGigTb6sR1qlBXkIA,1046
40
40
  kairo/backend/models/audit_log.py,sha256=rWWGDP3Jt_QC9cCEUuk9A2cq8mAySLbRsLcn4lm2_qc,1135
41
41
  kairo/backend/models/conversation.py,sha256=JciX2Faei0rlmjp6nen77_OLodX09lD7cLR0_I38alA,2013
@@ -44,12 +44,14 @@ kairo/backend/models/feature_flag.py,sha256=M8oqsQ8PEmd-lTkyh56mBt9t8VTMghWTdJST
44
44
  kairo/backend/models/image_generation.py,sha256=nRKhTYD7kB0gzukcReQ2yEBj0mxehRrdfewPHeu_yVA,929
45
45
  kairo/backend/models/incident.py,sha256=lJV2TI9KS5sScJ7lAZThQQ4dwrk9vxTEU8UdvwoeV58,1304
46
46
  kairo/backend/models/project.py,sha256=RKh-A_hdC220mb4HyUU95DyHVanEo6vQ_3zb2lGItdA,1014
47
+ kairo/backend/models/task.py,sha256=fG2YrhLAkQJMnabCg8Yr_MYydb4tEuzhwWwuGQtyaGU,1319
47
48
  kairo/backend/models/uptime_record.py,sha256=xo2MeLobdLM4dcfrMe0AUrcIy2MXKVoFHyOgNUHp3SQ,944
48
49
  kairo/backend/models/usage.py,sha256=AoeeqmcME5swYc__XZVeagbRkjIGZpT1pzehbIR39xI,902
49
50
  kairo/backend/models/user.py,sha256=g2PzKb92sAACNdYFbMFg9LRs3i7-vpeHglli9qVb6No,1795
51
+ kairo/backend/models/user_provider_key.py,sha256=z_90F44cLYo2an66vYS1J_LQ3UQcxdOtFP0WkdL5bXI,1123
50
52
  kairo/backend/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- kairo/backend/schemas/agent.py,sha256=GW-aAR3o0c3YvQ0BhqOQ6XtMMkYY0JvtV_CyiHCrRl8,1129
52
- kairo/backend/schemas/api_key.py,sha256=_jiXIB9NKoQJsFYyTqY9RKTaVKiAsQ6XjGQa9e__nyQ,682
53
+ kairo/backend/schemas/agent.py,sha256=dyJjxJgQzuXsRsQKV5lHtDy0ydL1C9wMfZnz9VxNLm4,8785
54
+ kairo/backend/schemas/api_key.py,sha256=qXaEBdXIs3Z_UH0UMXqMzRHAtD-Bk2vZ4nIcTCGEDH8,788
53
55
  kairo/backend/schemas/auth.py,sha256=vkZwfcYLcg2_-w6--TV_QQA3AeJU2In6G0IhvFemCMI,1259
54
56
  kairo/backend/schemas/chat.py,sha256=hy3UKCsxfkpo8CD4VB55LZTDW8uhB6ANLgOCMkO_ZeA,824
55
57
  kairo/backend/schemas/conversation.py,sha256=oA53Zd0SSyRej9QmjNuagLTnJ6bck3icxExtK2bcuvE,801
@@ -66,19 +68,25 @@ kairo/backend/schemas/admin/stats.py,sha256=bz8ucXHLzhGx6x1FdcpFOOJ5-q3Wf8W2VfnP
66
68
  kairo/backend/schemas/admin/system.py,sha256=pQxCHqfLLda6fZPx7GkuGgheBtoqqhlLR-N7eIK96B0,834
67
69
  kairo/backend/schemas/admin/users.py,sha256=U2iZ0X1jwQZszfVjrtmfJs2p8n2X_6vmsUQ3VtubuRg,1252
68
70
  kairo/backend/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- kairo/backend/services/agent_service.py,sha256=2GL98WaNA60KYdkDIV4ThhAotXs3C5K5UHhTK-e6Tog,3988
70
- kairo/backend/services/api_key_service.py,sha256=faCUc4fgOpqVO7xcYK2ukcXzwpATnphzJemioh9_so4,2061
71
+ kairo/backend/services/agent_service.py,sha256=FvskzgW68Fl6V3nQCk9BSiP6E1MKLhfjAx8xR5_cupk,961
72
+ kairo/backend/services/api_key_service.py,sha256=gkoArntF4KMhHNcb8Cwn2YZ4L8LJsHLNl7AVN1lSIQI,2866
71
73
  kairo/backend/services/api_usage_service.py,sha256=VJBf8ONBQHsv-4kPApDcqwnqYryD5IW6sbu5WBs_Puc,4383
72
74
  kairo/backend/services/auth_service.py,sha256=uT_-aSY9KCWq-vGwFLaUYdB0KcQkGbIwYO8GDzkcppo,3899
73
- kairo/backend/services/chat_service.py,sha256=6axD27G47yk0T_5f3o3d6_va7hRkl_d3T4YvKRsNxbU,19894
75
+ kairo/backend/services/byok_service.py,sha256=Hyc5MNpT4RvdZ2knRJYbED7JstaLk6GFUrtiYIpEhOE,7420
76
+ kairo/backend/services/chat_service.py,sha256=1aqggbecuphOJldYUGD2yS0tq1g8vl1o4mvkrQ8hzsY,34427
74
77
  kairo/backend/services/conversation_service.py,sha256=YaaIGozZ2-4SYzrZO8VKQinBgEKd4Who1_ZbrOZcKCU,9618
78
+ kairo/backend/services/deep_search_service.py,sha256=pCjSNvDFwd-f3omm239vItpCqpmczIEMCTnv8EboTdU,5653
75
79
  kairo/backend/services/device_auth_service.py,sha256=U5dowR5a-TQMUkYXAac3Db-njGeeOCwcDah-7rRJJ4k,6723
76
- kairo/backend/services/email_service.py,sha256=qGCncALOxz6YAzSPpBbBVi9-9ySp7paNzdhqW2HBZB4,2215
80
+ kairo/backend/services/email_service.py,sha256=X56Db97WhsEDMnfrbaEMVVPanIl6B5oMs-5llomK2dE,22326
81
+ kairo/backend/services/few_shot_service.py,sha256=bgMEncGJBhwcwYYYeDgFVGSxV4COE8UGeUGDPrLwJq0,5934
77
82
  kairo/backend/services/image_service.py,sha256=Nth-l5CCZF8vLi7bxS0Ee6JASkvrax8XTwoi9qautFY,6247
78
83
  kairo/backend/services/llm_service.py,sha256=Smfuui-0DhBVl2nojSiEdKicAXGuD4lyMpCqy5bZw30,7532
84
+ kairo/backend/services/post_processor.py,sha256=dXKq550WtdonLUFk8Bgsy6_YoBlpO4B-RoiR0IyM4WY,10349
79
85
  kairo/backend/services/project_service.py,sha256=Hv290eiqrW-CmdMqcH0wQlc8Y3-lCs1b3tvHzWysVso,3565
86
+ kairo/backend/services/rag_service.py,sha256=ZLeaR_WnARHwPaKdl2LI-gfBBYZcNLiHPoypJnC5GHM,5261
80
87
  kairo/backend/services/status_service.py,sha256=A9hmDxACQMNDkNf_gHwYswhJ8I-Kw_MZROt3NRx-KB8,6706
81
88
  kairo/backend/services/stripe_service.py,sha256=FHbAk5wiSZ1h6nI7pxfpqIm7jGMvde7h_7a2sY_0Hbw,3299
89
+ kairo/backend/services/task_service.py,sha256=VUeMNN2Fmr4rBwTdQCL3VHtA0dnC9T742hJDO9hSQzw,4317
82
90
  kairo/backend/services/usage_service.py,sha256=kN3wZy4tiAol1071rjhHP1LeZ8H8w5WJpV_B0BBOwUw,5263
83
91
  kairo/backend/services/web_search_service.py,sha256=RWxMFIXHCfzAX4MbWWIxxfGZh96WwScHyV1s1MXRTLo,3790
84
92
  kairo/backend/services/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -88,6 +96,29 @@ kairo/backend/services/admin/incident_service.py,sha256=-VY2EUrLaCVtzwHiYe77tR_j
88
96
  kairo/backend/services/admin/stats_service.py,sha256=EAIrNxX6WMs6eGvmQbn69T0utgEj7VVIWCieRODD774,10867
89
97
  kairo/backend/services/admin/system_service.py,sha256=B5_ejfbKukG-auuSAPxUTn8PYAoakliLYgK58HZXP20,4887
90
98
  kairo/backend/services/admin/user_service.py,sha256=8FdUQJczYrr5ArSD0mYedaaLxdpxJQ-wZT7TRk26sVg,5526
99
+ kairo/backend/services/agent/__init__.py,sha256=6PWZm-y_I0mqRL_8m1cEbPTaX67vlxVpPLQOfQw5DkE,2019
100
+ kairo/backend/services/agent/agent_alerts_evaluation_service.py,sha256=KKDNRdeC6MYjmTmM71-yxUAGYp06aXy7A-IqZLBJjHw,8199
101
+ kairo/backend/services/agent/agent_alerts_service.py,sha256=j2cpUSL6GNlaMf9V_grmRhi2e16FO-tBRpUmeiu2VBk,7398
102
+ kairo/backend/services/agent/agent_commands_service.py,sha256=S27xZcu10Xc7m40zKvm8KpD1wOXLckWzaxKLXQGQCK0,4384
103
+ kairo/backend/services/agent/agent_crud_service.py,sha256=MNaYt1Kx5Ao0nTFAJ6rADRP0fxoTI7mlFTn07nIT82c,5397
104
+ kairo/backend/services/agent/agent_events_service.py,sha256=T_-ud-0XPWfwbIZYjbCKinpH57A-MOnlpzlCqLvkH3A,3055
105
+ kairo/backend/services/agent/agent_heartbeat_service.py,sha256=5Qm18WT_dNGFQvj2EcZllG5d2lmilPeGMY6SjDbGO6A,7119
106
+ kairo/backend/services/agent/agent_metrics_rollup_service.py,sha256=ZIHeqPqaOeBYdukZG58HvNjppFhBk8JRS85YknUlyck,9926
107
+ kairo/backend/services/agent/agent_metrics_service.py,sha256=mNFqJQkv6lBtwsvNVmmfaq_hX7Du-FSTL5o_sSI8754,9047
108
+ kairo/backend/services/agent/agent_service.py,sha256=XJN2CBozZhc0uaO6nMvMRfBe3klj8nS0iVykEjn1LqY,12062
109
+ kairo/backend/services/agent/agent_setup_service.py,sha256=n8McqgHFHyI4ofDcJEamZkwDUDmTtYAu9s98HMOUjUY,5371
110
+ kairo/backend/services/agent/constants.py,sha256=zdFI9O11nkngxtLKVSavV3D3k5x_Ll3l05iUx7MOGHE,686
111
+ kairo/backend/tests/__init__.py,sha256=Wk73Io62J15BtlLVIzxmASDWaaJkQLevS4BLK5LDAQg,16
112
+ kairo/backend/tests/e2e/__init__.py,sha256=Cc1tgvaXbFpdCvqR4Uu4QCq91Hhq6OhgdAvj1od6uxk,27
113
+ kairo/backend/tests/e2e/agents/__init__.py,sha256=A0-r1C0--QyjbCp4cJWTbzujjlIOGBDI5sUWGvjjiKk,33
114
+ kairo/backend/tests/e2e/agents/conftest.py,sha256=QBR4MwmEc8l8uzIAHSiBRXeDwAkZ4OUErAfNbxKFnfE,12465
115
+ kairo/backend/tests/e2e/agents/test_agent_alerts.py,sha256=x06u4LIf8B4_Pb6BCycdniCPof-15SzYwrWR5mQCwwo,25883
116
+ kairo/backend/tests/e2e/agents/test_agent_commands.py,sha256=xkDg8Z1tFHuwS6TDoBPkTfuNd950e_86_HdMDy-h7A4,14621
117
+ kairo/backend/tests/e2e/agents/test_agent_crud.py,sha256=UpqLroPITVXrBDQPIx_CujOslnQa2QCxTmK2OFGBzr4,15000
118
+ kairo/backend/tests/e2e/agents/test_agent_events.py,sha256=m6yejUKp1V_992psd1r6WBxUeGsyWs3yCdxEljFEFB8,13694
119
+ kairo/backend/tests/e2e/agents/test_agent_heartbeat.py,sha256=5S2bf2no6CMRKnczcCk6IZeY5UCiqqVuhnfV74N6TmY,16768
120
+ kairo/backend/tests/e2e/agents/test_agent_metrics.py,sha256=faWw2vfzEuyR7FJPRHuyhxr6wcLg-PSrBmWF8b8W9Oo,20055
121
+ kairo/backend/tests/e2e/agents/test_agent_setup.py,sha256=c3WN1Gh9xyuEXDqfXW-6gry0IMeQYgD_kSEvjUc-aQ0,11633
91
122
  kairo/migrations/env.py,sha256=VyojhMx2P_oa_deY-2IN9t1cz8NngWkKgPWzaRjrXUk,1650
92
123
  kairo/migrations/versions/001_initial.py,sha256=fSc3r0lFgFdYlWXjNW7FpY7XnG2BVw7fR20pxb6Wnjg,1669
93
124
  kairo/migrations/versions/002_usage_tracking_and_indexes.py,sha256=TfsM875Zs2S4XlRjdtq5AMhqq2Yt1XN9zvqwsfFRW3E,2148
@@ -98,6 +129,7 @@ kairo/migrations/versions/006_add_image_generation.py,sha256=6Rw-gVK2amSFJIKyZdj
98
129
  kairo/migrations/versions/007_add_admin_portal.py,sha256=EEtMIXkjNLqy7ncbZkW5A8V98n14KXuMGFMe8zAxqYM,3642
99
130
  kairo/migrations/versions/008_add_device_code_auth.py,sha256=SxlsexrI-3jQ34LOXghl_mhmnYIHicwILcOWM2ONdnc,2762
100
131
  kairo/migrations/versions/009_add_status_page.py,sha256=5ZT_FO2JNYYEh9nDLUnL7k5JcwVELwTSO8S1vHNSfzo,2842
132
+ kairo/migrations/versions/010_agent_dashboard.py,sha256=zUzyp16tARp66i1AcPauJ7dWgCFy9xL3cTSfy1Ielf8,13966
101
133
  kairo/tools/extract_claude_data.py,sha256=CoKWoQCVsBLAvIQhJ-UCQTDlJJYSvXqCcsPE8pPWSV8,14994
102
134
  kairo/tools/filter_claude_data.py,sha256=hCaY86RMW0EOztLBhGv-ifbdCmSlyROfQbmjl1QKoDQ,10170
103
135
  kairo/tools/generate_curated_data.py,sha256=62DOhEgNtYjbyVdfozHqD0MWdBEj4CZwniH4RfBXdSI,5096
@@ -137,8 +169,10 @@ kairo_code/tools/definitions.py,sha256=4egUnMyKUXXTBo7n0sBszT3Enns5C9Q5CoLmDwntf
137
169
  kairo_code/tools/files.py,sha256=JAkL8HdN9aa2bcDXUB1PjqDFoCY3Rmf1oRZpBOtIFAk,9824
138
170
  kairo_code/tools/review.py,sha256=VmUS4IpHlmfzV1fBgKwZ-FabTwUqCZYGo9IcF96ZuAk,15119
139
171
  kairo_code/tools/search.py,sha256=En0yRvnzMqj0575nG6y-Pe9RzZaF8SMgfr_VCEOQ-gw,5570
140
- kairo_code-0.1.0.dist-info/METADATA,sha256=n9xgE0r9QvoN5-q9adyam6aa5zgKmBSzvick6UVXEAA,397
141
- kairo_code-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
142
- kairo_code-0.1.0.dist-info/entry_points.txt,sha256=a41_OEwYk_C4gksWIUawsNRgysInOhrw8xL8QX9cLhI,52
143
- kairo_code-0.1.0.dist-info/top_level.txt,sha256=iUE60TMhhtOEEuqXlEEmxaJ1_qvVR4vNiK1JKXyijLU,37
144
- kairo_code-0.1.0.dist-info/RECORD,,
172
+ kairo_migrations/env.py,sha256=e6GCMVJbH0U-t8mf7ZWKArgPlvXcTdK8vL1ufujZp2k,2376
173
+ kairo_migrations/versions/001_add_agent_dashboard_extensions.py,sha256=lw_Rk2d2JBTMdW4TqUKPrtSyUF8TP-cXI_CR0vVXt88,24324
174
+ kairo_code-0.2.0.dist-info/METADATA,sha256=ch2gTmSH8PpOjVxLsGsL2Px034JZ9WgDmDQq5H9ZLQY,397
175
+ kairo_code-0.2.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
176
+ kairo_code-0.2.0.dist-info/entry_points.txt,sha256=a41_OEwYk_C4gksWIUawsNRgysInOhrw8xL8QX9cLhI,52
177
+ kairo_code-0.2.0.dist-info/top_level.txt,sha256=q3-v1_MnuMqcVhXyFXXCIndW-X-HAY0uj4QRgNoVp9E,54
178
+ kairo_code-0.2.0.dist-info/RECORD,,
@@ -2,3 +2,4 @@ image-service
2
2
  infra
3
3
  kairo
4
4
  kairo_code
5
+ kairo_migrations
@@ -0,0 +1,92 @@
1
+ """
2
+ Alembic Environment Configuration for Kairo Agent Dashboard
3
+
4
+ This configures Alembic to work with async SQLAlchemy and PostgreSQL.
5
+ """
6
+
7
+ import asyncio
8
+ from logging.config import fileConfig
9
+
10
+ from alembic import context
11
+ from sqlalchemy import pool
12
+ from sqlalchemy.engine import Connection
13
+ from sqlalchemy.ext.asyncio import async_engine_from_config
14
+
15
+ # Import your models
16
+ from kairo_models import Base
17
+
18
+ # Alembic Config object
19
+ config = context.config
20
+
21
+ # Set up logging
22
+ if config.config_file_name is not None:
23
+ fileConfig(config.config_file_name)
24
+
25
+ # Target metadata for 'autogenerate' support
26
+ target_metadata = Base.metadata
27
+
28
+
29
+ def run_migrations_offline() -> None:
30
+ """
31
+ Run migrations in 'offline' mode.
32
+
33
+ This configures the context with just a URL and not an Engine,
34
+ though an Engine is acceptable here as well. By skipping the Engine
35
+ creation we don't even need a DBAPI to be available.
36
+
37
+ Calls to context.execute() here emit the given string to the
38
+ script output.
39
+ """
40
+ url = config.get_main_option("sqlalchemy.url")
41
+ context.configure(
42
+ url=url,
43
+ target_metadata=target_metadata,
44
+ literal_binds=True,
45
+ dialect_opts={"paramstyle": "named"},
46
+ )
47
+
48
+ with context.begin_transaction():
49
+ context.run_migrations()
50
+
51
+
52
+ def do_run_migrations(connection: Connection) -> None:
53
+ """Run migrations with the given connection."""
54
+ context.configure(
55
+ connection=connection,
56
+ target_metadata=target_metadata,
57
+ compare_type=True,
58
+ compare_server_default=True,
59
+ )
60
+
61
+ with context.begin_transaction():
62
+ context.run_migrations()
63
+
64
+
65
+ async def run_async_migrations() -> None:
66
+ """
67
+ Run migrations in 'online' mode with async engine.
68
+
69
+ In this scenario we need to create an Engine and associate a
70
+ connection with the context.
71
+ """
72
+ connectable = async_engine_from_config(
73
+ config.get_section(config.config_ini_section, {}),
74
+ prefix="sqlalchemy.",
75
+ poolclass=pool.NullPool,
76
+ )
77
+
78
+ async with connectable.connect() as connection:
79
+ await connection.run_sync(do_run_migrations)
80
+
81
+ await connectable.dispose()
82
+
83
+
84
+ def run_migrations_online() -> None:
85
+ """Run migrations in 'online' mode."""
86
+ asyncio.run(run_async_migrations())
87
+
88
+
89
+ if context.is_offline_mode():
90
+ run_migrations_offline()
91
+ else:
92
+ run_migrations_online()