qalita 2.3.2__py3-none-any.whl → 2.5.2__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 (95) hide show
  1. qalita/__main__.py +213 -9
  2. qalita/commands/{agent.py → worker.py} +89 -89
  3. qalita/internal/config.py +26 -19
  4. qalita/internal/utils.py +1 -1
  5. qalita/web/app.py +97 -14
  6. qalita/web/blueprints/context.py +13 -60
  7. qalita/web/blueprints/dashboard.py +35 -76
  8. qalita/web/blueprints/helpers.py +154 -63
  9. qalita/web/blueprints/sources.py +29 -61
  10. qalita/web/blueprints/{agents.py → workers.py} +108 -185
  11. qalita-2.5.2.dist-info/METADATA +66 -0
  12. qalita-2.5.2.dist-info/RECORD +24 -0
  13. {qalita-2.3.2.dist-info → qalita-2.5.2.dist-info}/WHEEL +1 -1
  14. qalita-2.5.2.dist-info/entry_points.txt +2 -0
  15. qalita/web/blueprints/studio.py +0 -1294
  16. qalita/web/public/chatgpt.svg +0 -3
  17. qalita/web/public/claude.png +0 -0
  18. qalita/web/public/favicon.ico +0 -0
  19. qalita/web/public/gemini.png +0 -0
  20. qalita/web/public/logo-no-slogan.png +0 -0
  21. qalita/web/public/logo-white-no-slogan.svg +0 -11
  22. qalita/web/public/mistral.svg +0 -1
  23. qalita/web/public/noise.webp +0 -0
  24. qalita/web/public/ollama.png +0 -0
  25. qalita/web/public/platform.png +0 -0
  26. qalita/web/public/sources-logos/alloy-db.png +0 -0
  27. qalita/web/public/sources-logos/amazon-athena.png +0 -0
  28. qalita/web/public/sources-logos/amazon-rds.png +0 -0
  29. qalita/web/public/sources-logos/api.svg +0 -2
  30. qalita/web/public/sources-logos/avro.svg +0 -20
  31. qalita/web/public/sources-logos/azure-database-mysql.png +0 -0
  32. qalita/web/public/sources-logos/azure-database-postgresql.png +0 -0
  33. qalita/web/public/sources-logos/azure-sql-database.png +0 -0
  34. qalita/web/public/sources-logos/azure-sql-managed-instance.png +0 -0
  35. qalita/web/public/sources-logos/azure-synapse-analytics.png +0 -0
  36. qalita/web/public/sources-logos/azure_blob.svg +0 -1
  37. qalita/web/public/sources-logos/bigquery.png +0 -0
  38. qalita/web/public/sources-logos/cassandra.svg +0 -254
  39. qalita/web/public/sources-logos/clickhouse.png +0 -0
  40. qalita/web/public/sources-logos/cloud-sql.png +0 -0
  41. qalita/web/public/sources-logos/cockroach-db.png +0 -0
  42. qalita/web/public/sources-logos/csv.svg +0 -1
  43. qalita/web/public/sources-logos/database.svg +0 -3
  44. qalita/web/public/sources-logos/databricks.png +0 -0
  45. qalita/web/public/sources-logos/duckdb.png +0 -0
  46. qalita/web/public/sources-logos/elasticsearch.svg +0 -1
  47. qalita/web/public/sources-logos/excel.svg +0 -1
  48. qalita/web/public/sources-logos/file.svg +0 -1
  49. qalita/web/public/sources-logos/folder.svg +0 -6
  50. qalita/web/public/sources-logos/gcs.png +0 -0
  51. qalita/web/public/sources-logos/hdfs.svg +0 -1
  52. qalita/web/public/sources-logos/ibm-db2.png +0 -0
  53. qalita/web/public/sources-logos/json.png +0 -0
  54. qalita/web/public/sources-logos/maria-db.png +0 -0
  55. qalita/web/public/sources-logos/mongodb.svg +0 -1
  56. qalita/web/public/sources-logos/mssql.svg +0 -1
  57. qalita/web/public/sources-logos/mysql.svg +0 -7
  58. qalita/web/public/sources-logos/oracle.svg +0 -4
  59. qalita/web/public/sources-logos/parquet.svg +0 -16
  60. qalita/web/public/sources-logos/picture.png +0 -0
  61. qalita/web/public/sources-logos/postgresql.svg +0 -22
  62. qalita/web/public/sources-logos/questdb.png +0 -0
  63. qalita/web/public/sources-logos/redshift.png +0 -0
  64. qalita/web/public/sources-logos/s3.svg +0 -34
  65. qalita/web/public/sources-logos/sap-hana.png +0 -0
  66. qalita/web/public/sources-logos/sftp.png +0 -0
  67. qalita/web/public/sources-logos/single-store.png +0 -0
  68. qalita/web/public/sources-logos/snowflake.png +0 -0
  69. qalita/web/public/sources-logos/sqlite.svg +0 -104
  70. qalita/web/public/sources-logos/sqlserver.png +0 -0
  71. qalita/web/public/sources-logos/starburst.png +0 -0
  72. qalita/web/public/sources-logos/stream.png +0 -0
  73. qalita/web/public/sources-logos/teradata.png +0 -0
  74. qalita/web/public/sources-logos/timescale.png +0 -0
  75. qalita/web/public/sources-logos/xls.svg +0 -1
  76. qalita/web/public/sources-logos/xlsx.svg +0 -1
  77. qalita/web/public/sources-logos/yugabyte-db.png +0 -0
  78. qalita/web/public/studio-logo.svg +0 -10
  79. qalita/web/public/studio.css +0 -304
  80. qalita/web/public/studio.png +0 -0
  81. qalita/web/public/styles.css +0 -682
  82. qalita/web/templates/dashboard.html +0 -373
  83. qalita/web/templates/navbar.html +0 -40
  84. qalita/web/templates/sources/added.html +0 -57
  85. qalita/web/templates/sources/edit.html +0 -411
  86. qalita/web/templates/sources/select-source.html +0 -128
  87. qalita/web/templates/studio/agent-panel.html +0 -828
  88. qalita/web/templates/studio/context-panel.html +0 -300
  89. qalita/web/templates/studio/index.html +0 -79
  90. qalita/web/templates/studio/navbar.html +0 -14
  91. qalita/web/templates/studio/view-panel.html +0 -529
  92. qalita-2.3.2.dist-info/METADATA +0 -58
  93. qalita-2.3.2.dist-info/RECORD +0 -101
  94. qalita-2.3.2.dist-info/entry_points.txt +0 -3
  95. {qalita-2.3.2.dist-info → qalita-2.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,682 +0,0 @@
1
- :root {
2
- --brand: #111827;
3
- --accent: #0ea5e9;
4
- --primary: #06b6d4;
5
- --primary-600: #0891b2;
6
- --danger: #b91c1c;
7
- --danger-600: #991b1b;
8
- --bg1: #f8fafc;
9
- --bg2: #eef2f7;
10
- --text: #1f2937;
11
- --muted: #6b7280;
12
- }
13
-
14
- * {
15
- box-sizing: border-box;
16
- }
17
-
18
- body {
19
- font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
20
- margin: 0;
21
- color: var(--text);
22
- background: linear-gradient(180deg, var(--bg1), var(--bg2));
23
- }
24
-
25
- /* Topbar */
26
- .topbar {
27
- position: sticky;
28
- top: 0;
29
- z-index: 10;
30
- background: white;
31
- border-bottom: 1px solid #e5e7eb;
32
- width: 100%;
33
- }
34
-
35
- .brand {
36
- max-width: 1400px;
37
- margin: 0 auto;
38
- padding: 12px 20px;
39
- display: flex;
40
- align-items: center;
41
- justify-content: space-between;
42
- gap: 10px;
43
- }
44
-
45
- .brand img {
46
- height: 28px;
47
- width: auto;
48
- }
49
-
50
- .brand span {
51
- font-weight: 700;
52
- letter-spacing: .2px;
53
- color: var(--brand);
54
- }
55
-
56
- .brand .left {
57
- display: flex;
58
- align-items: center;
59
- gap: 10px;
60
- }
61
-
62
- .brand .right a {
63
- color: var(--accent);
64
- text-decoration: none;
65
- font-weight: 600;
66
- }
67
-
68
- .brand .right a:hover {
69
- text-decoration: underline;
70
- }
71
-
72
- /* context select */
73
- .ctx-select {
74
- appearance: none;
75
- background: transparent;
76
- color: var(--text);
77
- border: 1px solid #e5e7eb;
78
- border-radius: 8px;
79
- padding: 6px 10px;
80
- font-size: 14px;
81
- }
82
-
83
- .studio .ctx-select {
84
- border-color: var(--studio-border);
85
- color: var(--studio-text);
86
- }
87
-
88
- /* Layout */
89
- .container {
90
- max-width: 1400px;
91
- margin: 24px auto;
92
- padding: 0 20px;
93
- }
94
-
95
- .container-form {
96
- max-width: 1024px;
97
- margin: 24px auto;
98
- padding: 0 20px;
99
- }
100
-
101
- .grid {
102
- display: grid;
103
- grid-template-columns: 1fr;
104
- gap: 20px;
105
- align-items: start;
106
- }
107
-
108
- @media (min-width: 1024px) {
109
- .grid {
110
- grid-template-columns: 2fr 1fr;
111
- }
112
- }
113
-
114
- /* Two equal columns variant */
115
- .grid.equal-2 {
116
- grid-template-columns: 1fr;
117
- max-width: 890px;
118
- }
119
-
120
- @media (min-width: 1024px) {
121
- .grid.equal-2 {
122
- grid-template-columns: 1fr 1fr;
123
- }
124
- }
125
-
126
- /* Three equal columns variant */
127
- .grid.equal-3 {
128
- grid-template-columns: 1fr;
129
- max-width: 1330px;
130
- align-items: stretch;
131
- }
132
-
133
- @media (min-width: 1024px) {
134
- .grid.equal-3 {
135
- grid-template-columns: 1fr 1fr 1fr;
136
- }
137
- }
138
-
139
- h1,
140
- h2 {
141
- color: var(--brand);
142
- }
143
-
144
- h2 {
145
- font-size: 18px;
146
- margin: 0 0 12px;
147
- }
148
-
149
- .card {
150
- background: white;
151
- border: 1px solid #e5e7eb;
152
- border-radius: 12px;
153
- padding: 16px;
154
- box-shadow: 0 2px 14px rgba(0, 0, 0, .04);
155
- }
156
-
157
- /* Tables */
158
- table {
159
- width: 100%;
160
- border-collapse: collapse;
161
- }
162
-
163
- th,
164
- td {
165
- padding: 10px 8px;
166
- border-bottom: 1px solid #e5e7eb;
167
- text-align: left;
168
- }
169
-
170
- th {
171
- color: var(--muted);
172
- font-weight: 700;
173
- font-size: 12px;
174
- text-transform: uppercase;
175
- letter-spacing: .4px;
176
- }
177
-
178
- tbody tr {
179
- transition: background-color .12s ease-in;
180
- }
181
-
182
- tbody tr:hover {
183
- background: #f1f5f9;
184
- }
185
-
186
- /* Show row actions only on hover */
187
- .card table tbody tr td .actions {
188
- opacity: 0;
189
- pointer-events: none;
190
- transition: opacity .12s ease-in;
191
- }
192
-
193
- .card table tbody tr:hover td .actions {
194
- opacity: 1;
195
- pointer-events: auto;
196
- }
197
-
198
- /* Buttons & actions */
199
- .actions {
200
- display: flex;
201
- gap: 8px;
202
- align-items: center;
203
- flex-wrap: nowrap;
204
- }
205
-
206
- .btn {
207
- background: var(--primary);
208
- color: white;
209
- border: 1px solid var(--primary);
210
- border-radius: 8px;
211
- cursor: pointer;
212
- text-decoration: none;
213
- display: inline-flex;
214
- align-items: center;
215
- justify-content: center;
216
- white-space: nowrap;
217
- font-size: 14px;
218
- line-height: 1;
219
- min-height: 36px;
220
- padding: 0 14px;
221
- gap: 6px;
222
- }
223
-
224
- .btn:visited {
225
- color: white;
226
- }
227
-
228
- button.btn {
229
- border-width: 1px;
230
- }
231
-
232
- .inline {
233
- display: inline;
234
- }
235
-
236
- form.inline {
237
- display: inline;
238
- margin: 0;
239
- }
240
-
241
- .btn.secondary {
242
- background: transparent;
243
- color: var(--primary);
244
- border-color: var(--primary);
245
- }
246
-
247
- .btn.secondary:visited {
248
- color: var(--primary);
249
- }
250
-
251
- .btn:hover {
252
- background: var(--primary-600);
253
- border-color: var(--primary-600);
254
- }
255
-
256
- .btn.secondary:hover {
257
- background: rgba(6, 182, 212, 0.1);
258
- }
259
-
260
- .btn.danger {
261
- background: var(--danger);
262
- color: #fff;
263
- border-color: var(--danger);
264
- }
265
-
266
- .btn.danger:hover {
267
- background: var(--danger-600);
268
- border-color: var(--danger-600);
269
- }
270
-
271
- .btn.danger {
272
- background: #b91c1c;
273
- }
274
-
275
- .btn.light {
276
- background: #ffffff;
277
- color: #000000;
278
- border-color: #e5e7eb;
279
- box-shadow: 0 2px 10px rgba(17, 24, 39, 0.1);
280
- }
281
-
282
- .btn.light:hover {
283
- box-shadow: 0 4px 14px rgba(17, 24, 39, 0.2);
284
- }
285
-
286
- .btn.blue {
287
- background: #0072A2;
288
- color: #ffffff;
289
- border-color: #0072A2;
290
- box-shadow: 0 2px 10px rgba(17, 24, 39, 0.1);
291
- }
292
-
293
- .btn.blue:hover {
294
- background: #02638d;
295
- box-shadow: 0 4px 14px rgba(17, 24, 39, 0.2);
296
- }
297
-
298
- .btn.black-white {
299
- background: #fff;
300
- color: #000;
301
- border-color: #fff;
302
- }
303
-
304
- .btn.black-white:visited {
305
- color: #000;
306
- }
307
-
308
- .btn.black-white:hover {
309
- background: #fff;
310
- color: #000;
311
- border-color: #000;
312
- }
313
-
314
- .muted {
315
- color: var(--muted);
316
- }
317
-
318
- .subtle {
319
- color: var(--muted);
320
- font-size: 12px;
321
- }
322
-
323
- .mb-12 {
324
- margin-bottom: 12px;
325
- }
326
-
327
- /* Studio CTA */
328
- .studio-cta {
329
- position: relative;
330
- border-radius: 0 0 16px 16px;
331
- padding: 20px;
332
- background: linear-gradient(320deg, #002341, #0b8bba);
333
- overflow: hidden;
334
- height: 100%;
335
- }
336
-
337
- .studio-cta .noise {
338
- pointer-events: none;
339
- position: absolute;
340
- inset: 0;
341
- mix-blend-mode: soft-light;
342
- opacity: .9;
343
- background-image: url('/static/noise.webp');
344
- background-size: 125px 125px;
345
- z-index: 1;
346
- }
347
-
348
- .studio-cta .inner {
349
- position: relative;
350
- z-index: 2;
351
- display: flex;
352
- flex-direction: column;
353
- justify-content: space-between;
354
- height: 100%;
355
- gap: 12px;
356
- }
357
-
358
- .studio-cta .header {
359
- display: flex;
360
- align-items: start;
361
- justify-content: space-between;
362
- gap: 12px;
363
- }
364
-
365
- .studio-cta .title {
366
- display: flex;
367
- align-items: center;
368
- gap: 10px;
369
- }
370
-
371
- .studio-cta h3 {
372
- margin: 0;
373
- font-size: 22px;
374
- color: #fff;
375
- }
376
-
377
- .studio-cta .badge {
378
- background: #fff;
379
- color: #000;
380
- font-weight: 700;
381
- font-size: 12px;
382
- padding: 6px 10px;
383
- border-radius: 8px;
384
- text-transform: uppercase;
385
- }
386
-
387
- .studio-cta p {
388
- margin: 0;
389
- color: #fff;
390
- }
391
-
392
- /* Platform CTA */
393
- .platform-cta {
394
- position: relative;
395
- border-radius: 0 0 16px 16px;
396
- padding: 20px;
397
- background: linear-gradient(320deg, #007893, #17bccf);
398
- overflow: hidden;
399
- height: 100%;
400
- }
401
-
402
- .platform-cta .noise {
403
- pointer-events: none;
404
- position: absolute;
405
- inset: 0;
406
- mix-blend-mode: soft-light;
407
- opacity: .9;
408
- background-image: url('/static/noise.webp');
409
- background-size: 125px 125px;
410
- z-index: 1;
411
- }
412
-
413
- .platform-cta .inner {
414
- position: relative;
415
- z-index: 2;
416
- display: flex;
417
- flex-direction: column;
418
- justify-content: space-between;
419
- height: 100%;
420
- gap: 12px;
421
- }
422
-
423
- .platform-cta .header {
424
- display: flex;
425
- align-items: start;
426
- justify-content: space-between;
427
- gap: 12px;
428
- }
429
-
430
- .platform-cta .title {
431
- display: flex;
432
- align-items: center;
433
- gap: 10px;
434
- }
435
-
436
- .platform-cta h3 {
437
- margin: 0;
438
- font-size: 22px;
439
- color: #fff;
440
- }
441
-
442
- .platform-cta .badge {
443
- background: #fff;
444
- color: #000;
445
- font-weight: 700;
446
- font-size: 12px;
447
- padding: 6px 10px;
448
- border-radius: 8px;
449
- text-transform: uppercase;
450
- }
451
-
452
- .platform-cta p {
453
- margin: 0;
454
- color: #fff;
455
- }
456
-
457
- /* Documentation CTA */
458
- .documentation-cta {
459
- position: relative;
460
- border-radius: 0 0 16px 16px;
461
- padding: 20px;
462
- background: linear-gradient(320deg, #6b7273, #15282b);
463
- overflow: hidden;
464
- height: 100%;
465
- }
466
-
467
- .documentation-cta .noise {
468
- pointer-events: none;
469
- position: absolute;
470
- inset: 0;
471
- mix-blend-mode: soft-light;
472
- opacity: .9;
473
- background-image: url('/static/noise.webp');
474
- background-size: 125px 125px;
475
- z-index: 1;
476
- }
477
-
478
- .documentation-cta .inner {
479
- position: relative;
480
- z-index: 2;
481
- display: flex;
482
- flex-direction: column;
483
- justify-content: space-between;
484
- height: 100%;
485
- gap: 12px;
486
- }
487
-
488
- .documentation-cta .header {
489
- display: flex;
490
- align-items: start;
491
- justify-content: space-between;
492
- gap: 12px;
493
- }
494
-
495
- .documentation-cta .title {
496
- display: flex;
497
- align-items: center;
498
- gap: 10px;
499
- }
500
-
501
- .documentation-cta h3 {
502
- margin: 0;
503
- font-size: 22px;
504
- color: #fff;
505
- }
506
-
507
- .documentation-cta p {
508
- margin: 0;
509
- color: #fff;
510
- }
511
-
512
- /* Type/visibility icons */
513
- .type-cell {
514
- align-items: center;
515
- gap: 6px;
516
- }
517
-
518
- .type-cell img {
519
- width: 20px;
520
- height: 20px;
521
- max-width: 24px;
522
- border-radius: 4px;
523
- }
524
-
525
- .type-field {
526
- display: flex;
527
- align-items: center;
528
- gap: 10px;
529
- }
530
-
531
- .type-icon {
532
- width: 24px;
533
- height: 24px;
534
- max-width: 28px;
535
- object-fit: contain;
536
- border-radius: 4px;
537
- }
538
-
539
- .vis-field {
540
- display: flex;
541
- align-items: center;
542
- gap: 10px;
543
- }
544
-
545
- .vis-icon {
546
- width: 18px;
547
- height: 18px;
548
- object-fit: contain;
549
- border-radius: 4px;
550
- }
551
-
552
- /* Badges */
553
- .badge {
554
- display: inline-flex;
555
- align-items: center;
556
- gap: 6px;
557
- }
558
-
559
- .badge.badge-private {
560
- color: #374151;
561
- }
562
-
563
- .badge.badge-internal {
564
- color: #0ea5e9;
565
- }
566
-
567
- .badge.badge-public {
568
- color: #16a34a;
569
- }
570
-
571
- .badge.badge-valid {
572
- color: #059669;
573
- }
574
-
575
- .badge.badge-invalid {
576
- color: #b91c1c;
577
- }
578
-
579
- /* Forms */
580
- label {
581
- display: block;
582
- font-weight: 600;
583
- margin-top: 14px;
584
- }
585
-
586
- input[type=text],
587
- input[type=number],
588
- input[type=password],
589
- select,
590
- textarea {
591
- width: 100%;
592
- padding: 10px 12px;
593
- border: 1px solid #d1d5db;
594
- border-radius: 8px;
595
- margin-top: 6px;
596
- background: #ffffff;
597
- }
598
-
599
- .row {
600
- display: grid;
601
- grid-template-columns: 1fr 1fr;
602
- gap: 12px;
603
- }
604
-
605
- .hidden {
606
- display: none;
607
- }
608
-
609
- /* File inputs (for legacy add form) */
610
- input[type=file].file-input {
611
- padding: 0;
612
- }
613
-
614
- input[type=file].file-input::file-selector-button {
615
- background: var(--brand);
616
- color: #fff;
617
- border: 0;
618
- padding: 9px 12px;
619
- margin-right: 10px;
620
- border-radius: 8px;
621
- cursor: pointer;
622
- }
623
-
624
- @supports (-webkit-appearance: none) {
625
- input[type=file].file-input::-webkit-file-upload-button {
626
- background: var(--brand);
627
- color: #fff;
628
- border: 0;
629
- padding: 9px 12px;
630
- margin-right: 10px;
631
- border-radius: 8px;
632
- cursor: pointer;
633
- }
634
- }
635
-
636
- /* Footer */
637
- .footer {
638
- margin-top: 24px;
639
- border-top: 1px solid #e5e7eb;
640
- background: #ffffff;
641
- width: 100%;
642
- }
643
-
644
- .footer .inner {
645
- max-width: 1400px;
646
- margin: 0 auto;
647
- padding: 12px 20px;
648
- display: flex;
649
- align-items: center;
650
- justify-content: space-between;
651
- color: var(--muted);
652
- font-size: 12px;
653
- }
654
-
655
- .footer a {
656
- color: var(--accent);
657
- text-decoration: none;
658
- }
659
-
660
- .footer a:hover {
661
- text-decoration: underline;
662
- }
663
-
664
- /* Alerts */
665
- .alert {
666
- border: 1px solid;
667
- border-radius: 8px;
668
- padding: 10px 12px;
669
- margin-bottom: 12px;
670
- }
671
-
672
- .alert-error {
673
- border-color: var(--danger);
674
- background: #fef2f2;
675
- color: #7f1d1d;
676
- }
677
-
678
- .alert-info {
679
- border-color: var(--accent);
680
- background: #eff6ff;
681
- color: #1e3a8a;
682
- }