django-lucy-assist 1.2.2__py3-none-any.whl → 1.2.4__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.
- {django_lucy_assist-1.2.2.dist-info → django_lucy_assist-1.2.4.dist-info}/METADATA +1 -1
- {django_lucy_assist-1.2.2.dist-info → django_lucy_assist-1.2.4.dist-info}/RECORD +20 -23
- lucy_assist/__init__.py +1 -1
- lucy_assist/admin.py +13 -13
- lucy_assist/conf.py +4 -0
- lucy_assist/constantes.py +79 -29
- lucy_assist/migrations/0001_initial.py +3 -1
- lucy_assist/models/configuration.py +5 -13
- lucy_assist/services/context_service.py +234 -0
- lucy_assist/services/crud_service.py +97 -13
- lucy_assist/services/gitlab_service.py +79 -6
- lucy_assist/services/mistral_service.py +31 -11
- lucy_assist/services/tool_executor_service.py +91 -0
- lucy_assist/services/tools_definition.py +65 -0
- lucy_assist/services/view_discovery_service.py +47 -13
- lucy_assist/static/lucy_assist/css/lucy-assist.css +48 -1
- lucy_assist/static/lucy_assist/js/lucy-assist.js +11 -0
- lucy_assist/templates/lucy_assist/chatbot_sidebar.html +11 -1
- lucy_assist/migrations/0002_configurationlucyassist_prompt_complementaire.py +0 -18
- lucy_assist/migrations/0003_configurationlucyassist_crud_views_mapping.py +0 -18
- lucy_assist/migrations/0004_configurationlucyassist_system_prompt.py +0 -22
- {django_lucy_assist-1.2.2.dist-info → django_lucy_assist-1.2.4.dist-info}/WHEEL +0 -0
- {django_lucy_assist-1.2.2.dist-info → django_lucy_assist-1.2.4.dist-info}/top_level.txt +0 -0
|
@@ -113,9 +113,17 @@
|
|
|
113
113
|
transform: translateX(100%);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
/* Sidebar expanded (80% width) */
|
|
117
|
+
.lucy-sidebar.expanded {
|
|
118
|
+
width: 90vw;
|
|
119
|
+
max-width: 90vw;
|
|
120
|
+
}
|
|
121
|
+
|
|
116
122
|
@media (max-width: 640px) {
|
|
117
|
-
.lucy-sidebar
|
|
123
|
+
.lucy-sidebar,
|
|
124
|
+
.lucy-sidebar.expanded {
|
|
118
125
|
width: 100%;
|
|
126
|
+
max-width: 100vw;
|
|
119
127
|
}
|
|
120
128
|
}
|
|
121
129
|
|
|
@@ -304,6 +312,7 @@
|
|
|
304
312
|
.lucy-messages {
|
|
305
313
|
flex: 1;
|
|
306
314
|
overflow-y: auto;
|
|
315
|
+
overflow-x: hidden;
|
|
307
316
|
padding: 1rem;
|
|
308
317
|
display: flex;
|
|
309
318
|
flex-direction: column;
|
|
@@ -389,6 +398,7 @@
|
|
|
389
398
|
display: flex;
|
|
390
399
|
gap: 0.5rem;
|
|
391
400
|
max-width: 85%;
|
|
401
|
+
min-width: 0;
|
|
392
402
|
}
|
|
393
403
|
|
|
394
404
|
.lucy-message.user {
|
|
@@ -422,6 +432,9 @@
|
|
|
422
432
|
.lucy-message-content {
|
|
423
433
|
display: flex;
|
|
424
434
|
flex-direction: column;
|
|
435
|
+
min-width: 0;
|
|
436
|
+
max-width: 100%;
|
|
437
|
+
overflow: hidden;
|
|
425
438
|
}
|
|
426
439
|
|
|
427
440
|
.lucy-message-bubble {
|
|
@@ -430,6 +443,9 @@
|
|
|
430
443
|
font-size: 0.875rem;
|
|
431
444
|
line-height: 1.5;
|
|
432
445
|
word-wrap: break-word;
|
|
446
|
+
overflow-wrap: break-word;
|
|
447
|
+
max-width: 100%;
|
|
448
|
+
overflow-x: auto;
|
|
433
449
|
}
|
|
434
450
|
|
|
435
451
|
.lucy-message.bot .lucy-message-bubble {
|
|
@@ -897,6 +913,9 @@
|
|
|
897
913
|
border-radius: 0.375rem;
|
|
898
914
|
overflow-x: auto;
|
|
899
915
|
margin: 0.5rem 0;
|
|
916
|
+
max-width: 100%;
|
|
917
|
+
white-space: pre-wrap;
|
|
918
|
+
word-break: break-word;
|
|
900
919
|
}
|
|
901
920
|
|
|
902
921
|
.lucy-message-bubble code {
|
|
@@ -909,6 +928,34 @@
|
|
|
909
928
|
text-decoration: underline;
|
|
910
929
|
}
|
|
911
930
|
|
|
931
|
+
/* Tables in messages */
|
|
932
|
+
.lucy-message-bubble table {
|
|
933
|
+
border-collapse: collapse;
|
|
934
|
+
font-size: 0.75rem;
|
|
935
|
+
margin: 0.5rem 0;
|
|
936
|
+
width: max-content;
|
|
937
|
+
max-width: 100%;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
.lucy-message-bubble th,
|
|
941
|
+
.lucy-message-bubble td {
|
|
942
|
+
border: 1px solid var(--lucy-border);
|
|
943
|
+
padding: 0.25rem 0.5rem;
|
|
944
|
+
text-align: left;
|
|
945
|
+
white-space: nowrap;
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
.lucy-message-bubble th {
|
|
949
|
+
background: var(--lucy-bg-darker);
|
|
950
|
+
font-weight: 600;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
/* Markdown content wrapper for overflow */
|
|
954
|
+
.lucy-message-bubble .markdown-content {
|
|
955
|
+
overflow-x: auto;
|
|
956
|
+
max-width: 100%;
|
|
957
|
+
}
|
|
958
|
+
|
|
912
959
|
/* ========================================
|
|
913
960
|
DOCUMENTATION - COLLAPSE/ACCORDION
|
|
914
961
|
======================================== */
|
|
@@ -9,6 +9,7 @@ function lucyAssist() {
|
|
|
9
9
|
return {
|
|
10
10
|
// État de l'interface
|
|
11
11
|
isOpen: false,
|
|
12
|
+
isExpanded: false,
|
|
12
13
|
isLoading: false,
|
|
13
14
|
showHistory: false,
|
|
14
15
|
showDoc: false,
|
|
@@ -86,6 +87,7 @@ function lucyAssist() {
|
|
|
86
87
|
saveState() {
|
|
87
88
|
const state = {
|
|
88
89
|
isOpen: this.isOpen,
|
|
90
|
+
isExpanded: this.isExpanded,
|
|
89
91
|
currentConversationId: this.currentConversationId,
|
|
90
92
|
showHistory: this.showHistory,
|
|
91
93
|
showDoc: this.showDoc
|
|
@@ -102,6 +104,7 @@ function lucyAssist() {
|
|
|
102
104
|
if (savedState) {
|
|
103
105
|
const state = JSON.parse(savedState);
|
|
104
106
|
this.isOpen = state.isOpen || false;
|
|
107
|
+
this.isExpanded = state.isExpanded || false;
|
|
105
108
|
this.currentConversationId = state.currentConversationId || null;
|
|
106
109
|
this.showHistory = state.showHistory || false;
|
|
107
110
|
this.showDoc = state.showDoc || false;
|
|
@@ -148,6 +151,14 @@ function lucyAssist() {
|
|
|
148
151
|
this.showDoc = false;
|
|
149
152
|
},
|
|
150
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Toggle du mode agrandi (80% de la fenetre)
|
|
156
|
+
*/
|
|
157
|
+
toggleExpanded() {
|
|
158
|
+
this.isExpanded = !this.isExpanded;
|
|
159
|
+
this.saveState();
|
|
160
|
+
},
|
|
161
|
+
|
|
151
162
|
/**
|
|
152
163
|
* Vérifie si c'est le premier lancement
|
|
153
164
|
*/
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
x-transition:leave-start="transform translate-x-0"
|
|
35
35
|
x-transition:leave-end="transform translate-x-full"
|
|
36
36
|
class="lucy-sidebar"
|
|
37
|
-
:class="{ 'hidden': !isOpen }"
|
|
37
|
+
:class="{ 'hidden': !isOpen, 'expanded': isExpanded }"
|
|
38
38
|
style="display: none;"
|
|
39
39
|
x-cloak
|
|
40
40
|
>
|
|
@@ -42,6 +42,16 @@
|
|
|
42
42
|
<div class="lucy-header">
|
|
43
43
|
<span class="lucy-header-title">Lucy Assist</span>
|
|
44
44
|
<div class="lucy-header-actions">
|
|
45
|
+
{# Bouton Agrandir/Reduire #}
|
|
46
|
+
<button
|
|
47
|
+
@click="toggleExpanded()"
|
|
48
|
+
class="lucy-header-btn"
|
|
49
|
+
:class="{ 'active': isExpanded }"
|
|
50
|
+
:title="isExpanded ? 'Reduire la fenetre' : 'Agrandir la fenetre'"
|
|
51
|
+
>
|
|
52
|
+
<i class="fa-solid" :class="isExpanded ? 'fa-compress' : 'fa-expand'"></i>
|
|
53
|
+
</button>
|
|
54
|
+
|
|
45
55
|
{# Bouton Historique #}
|
|
46
56
|
<button
|
|
47
57
|
@click="showHistory = !showHistory; showDoc = false"
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Generated by Django 6.0.1 on 2026-01-27 09:51
|
|
2
|
-
|
|
3
|
-
from django.db import migrations, models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('lucy_assist', '0001_initial'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.AddField(
|
|
14
|
-
model_name='configurationlucyassist',
|
|
15
|
-
name='prompt_complementaire',
|
|
16
|
-
field=models.TextField(blank=True, default=''),
|
|
17
|
-
),
|
|
18
|
-
]
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Generated by Django
|
|
2
|
-
|
|
3
|
-
from django.db import migrations, models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('lucy_assist', '0002_configurationlucyassist_prompt_complementaire'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.AddField(
|
|
14
|
-
model_name='configurationlucyassist',
|
|
15
|
-
name='crud_views_mapping',
|
|
16
|
-
field=models.JSONField(blank=True, default=dict),
|
|
17
|
-
),
|
|
18
|
-
]
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Generated by Django
|
|
2
|
-
|
|
3
|
-
from django.db import migrations, models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('lucy_assist', '0003_configurationlucyassist_crud_views_mapping'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.AddField(
|
|
14
|
-
model_name='configurationlucyassist',
|
|
15
|
-
name='system_prompt',
|
|
16
|
-
field=models.TextField(
|
|
17
|
-
blank=True,
|
|
18
|
-
default='',
|
|
19
|
-
help_text="Prompt système pour l'assistant IA. Initialisé automatiquement si vide."
|
|
20
|
-
),
|
|
21
|
-
),
|
|
22
|
-
]
|
|
File without changes
|
|
File without changes
|