django-agent-studio 0.3.3__py3-none-any.whl → 0.3.5__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 (22) hide show
  1. django_agent_studio/agents/dynamic.py +164 -4
  2. django_agent_studio/api/serializers.py +27 -8
  3. django_agent_studio/branding.py +103 -0
  4. django_agent_studio/static/agent-frontend/chat-widget.css +52 -0
  5. django_agent_studio/static/agent-frontend/chat-widget.js +222 -206
  6. django_agent_studio/static/django_agent_studio/js/builder.js +58 -58
  7. django_agent_studio/static/django_agent_studio/js/builder.js.map +1 -1
  8. django_agent_studio/static/django_agent_studio/js/style.css +1 -1
  9. django_agent_studio/templates/django_agent_studio/agent_list.html +31 -28
  10. django_agent_studio/templates/django_agent_studio/base.html +116 -28
  11. django_agent_studio/templates/django_agent_studio/builder.html +1 -1
  12. django_agent_studio/templates/django_agent_studio/collaborators.html +83 -95
  13. django_agent_studio/templates/django_agent_studio/home.html +66 -48
  14. django_agent_studio/templates/django_agent_studio/system_create.html +22 -24
  15. django_agent_studio/templates/django_agent_studio/system_list.html +38 -30
  16. django_agent_studio/templates/django_agent_studio/system_test.html +27 -21
  17. django_agent_studio/templates/django_agent_studio/test.html +22 -17
  18. {django_agent_studio-0.3.3.dist-info → django_agent_studio-0.3.5.dist-info}/METADATA +1 -1
  19. {django_agent_studio-0.3.3.dist-info → django_agent_studio-0.3.5.dist-info}/RECORD +22 -21
  20. {django_agent_studio-0.3.3.dist-info → django_agent_studio-0.3.5.dist-info}/WHEEL +0 -0
  21. {django_agent_studio-0.3.3.dist-info → django_agent_studio-0.3.5.dist-info}/licenses/LICENSE +0 -0
  22. {django_agent_studio-0.3.3.dist-info → django_agent_studio-0.3.5.dist-info}/top_level.txt +0 -0
@@ -1,64 +1,64 @@
1
1
  {% extends "django_agent_studio/base.html" %}
2
2
 
3
- {% block title %}Create System - Agent Studio{% endblock %}
3
+ {% block title %}Create System - {{ studio_app_name }}{% endblock %}
4
4
 
5
5
  {% block breadcrumbs %}
6
6
  <nav class="flex items-center space-x-2 ml-4 text-sm">
7
- <span class="text-gray-400">/</span>
8
- <a href="{% url 'agent_studio:system_list' %}" class="text-gray-500 hover:text-gray-700">My Systems</a>
9
- <span class="text-gray-400">/</span>
10
- <span class="text-gray-600">Create</span>
7
+ <span class="text-white/40">/</span>
8
+ <a href="{% url 'agent_studio:system_list' %}" class="text-white/60 hover:text-white/90 transition-colors">My Systems</a>
9
+ <span class="text-white/40">/</span>
10
+ <span class="text-white/70">Create</span>
11
11
  </nav>
12
12
  {% endblock %}
13
13
 
14
14
  {% block content %}
15
- <div class="h-full p-6 overflow-auto">
15
+ <div class="h-full p-6 overflow-auto bg-gradient-to-br from-slate-50 to-slate-100">
16
16
  <div class="max-w-2xl mx-auto">
17
17
  <!-- Header -->
18
18
  <div class="mb-6">
19
- <h1 class="text-2xl font-bold text-gray-900">🔗 Create New System</h1>
20
- <p class="text-gray-500 mt-1">A system combines multiple agents that work together.</p>
19
+ <h1 class="text-2xl font-bold text-navy">🔗 Create New System</h1>
20
+ <p class="text-slate-500 mt-1">A system combines multiple agents that work together.</p>
21
21
  </div>
22
22
 
23
23
  <!-- Form -->
24
- <div class="bg-white border border-gray-200 rounded-lg p-6">
24
+ <div class="bg-white border border-slate-200 rounded-xl p-6 shadow-sm">
25
25
  <form @submit.prevent="createSystem" class="space-y-6">
26
26
  <!-- Name -->
27
27
  <div>
28
- <label for="name" class="block text-sm font-medium text-gray-700 mb-1">Name *</label>
28
+ <label for="name" class="block text-sm font-medium text-navy mb-1">Name *</label>
29
29
  <input type="text" id="name" v-model="form.name" @input="generateSlug"
30
- class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"
30
+ class="w-full px-4 py-2.5 border border-slate-200 rounded-lg focus:ring-2 focus:ring-cyan/30 focus:border-cyan transition-all"
31
31
  placeholder="My Agent System" required>
32
32
  </div>
33
33
 
34
34
  <!-- Slug -->
35
35
  <div>
36
- <label for="slug" class="block text-sm font-medium text-gray-700 mb-1">Slug *</label>
36
+ <label for="slug" class="block text-sm font-medium text-navy mb-1">Slug *</label>
37
37
  <input type="text" id="slug" v-model="form.slug"
38
- class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 font-mono text-sm"
38
+ class="w-full px-4 py-2.5 border border-slate-200 rounded-lg focus:ring-2 focus:ring-cyan/30 focus:border-cyan font-mono text-sm transition-all"
39
39
  placeholder="my-agent-system" required>
40
- <p class="text-xs text-gray-500 mt-1">URL-friendly identifier (auto-generated from name)</p>
40
+ <p class="text-xs text-slate-400 mt-1">URL-friendly identifier (auto-generated from name)</p>
41
41
  </div>
42
42
 
43
43
  <!-- Description -->
44
44
  <div>
45
- <label for="description" class="block text-sm font-medium text-gray-700 mb-1">Description</label>
45
+ <label for="description" class="block text-sm font-medium text-navy mb-1">Description</label>
46
46
  <textarea id="description" v-model="form.description" rows="3"
47
- class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"
47
+ class="w-full px-4 py-2.5 border border-slate-200 rounded-lg focus:ring-2 focus:ring-cyan/30 focus:border-cyan transition-all"
48
48
  placeholder="Describe what this system does..."></textarea>
49
49
  </div>
50
50
 
51
51
  <!-- Entry Agent -->
52
52
  <div>
53
- <label for="entry_agent" class="block text-sm font-medium text-gray-700 mb-1">Entry Agent</label>
53
+ <label for="entry_agent" class="block text-sm font-medium text-navy mb-1">Entry Agent</label>
54
54
  <select id="entry_agent" v-model="form.entry_agent_id"
55
- class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500">
55
+ class="w-full px-4 py-2.5 border border-slate-200 rounded-lg focus:ring-2 focus:ring-cyan/30 focus:border-cyan transition-all">
56
56
  <option value="">-- Select an agent --</option>
57
57
  {% for agent in agents %}
58
58
  <option value="{{ agent.id }}">{{ agent.icon|default:"🤖" }} {{ agent.name }}</option>
59
59
  {% endfor %}
60
60
  </select>
61
- <p class="text-xs text-gray-500 mt-1">The agent that handles incoming conversations. Sub-agents will be auto-discovered.</p>
61
+ <p class="text-xs text-slate-400 mt-1">The agent that handles incoming conversations. Sub-agents will be auto-discovered.</p>
62
62
  </div>
63
63
 
64
64
  <!-- Error Message -->
@@ -67,11 +67,11 @@
67
67
  </div>
68
68
 
69
69
  <!-- Actions -->
70
- <div class="flex items-center justify-end space-x-3 pt-4 border-t border-gray-200">
70
+ <div class="flex items-center justify-end space-x-3 pt-4 border-t border-slate-100">
71
71
  <a href="{% url 'agent_studio:system_list' %}"
72
- class="px-4 py-2 text-gray-700 hover:text-gray-900">Cancel</a>
72
+ class="px-4 py-2 text-slate-600 hover:text-navy transition-colors">Cancel</a>
73
73
  <button type="submit" :disabled="loading"
74
- class="px-6 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg font-medium disabled:opacity-50">
74
+ class="px-6 py-2.5 bg-navy hover:bg-navy-light text-white rounded-xl font-medium disabled:opacity-50 transition-all hover:shadow-lg">
75
75
  <span v-if="loading">Creating...</span>
76
76
  <span v-else>Create System</span>
77
77
  </button>
@@ -102,7 +102,6 @@ createApp({
102
102
  },
103
103
  methods: {
104
104
  generateSlug() {
105
- // Auto-generate slug from name
106
105
  this.form.slug = this.form.name
107
106
  .toLowerCase()
108
107
  .replace(/[^a-z0-9]+/g, '-')
@@ -145,4 +144,3 @@ createApp({
145
144
  }).use(primevue.config.default).mount('#app');
146
145
  </script>
147
146
  {% endblock %}
148
-
@@ -1,23 +1,24 @@
1
1
  {% extends "django_agent_studio/base.html" %}
2
2
 
3
- {% block title %}My Systems - Agent Studio{% endblock %}
3
+ {% block title %}My Systems - {{ studio_app_name }}{% endblock %}
4
4
 
5
5
  {% block breadcrumbs %}
6
6
  <nav class="flex items-center space-x-2 ml-4 text-sm">
7
- <span class="text-gray-400">/</span>
8
- <span class="text-gray-600">My Systems</span>
7
+ <span class="text-white/40">/</span>
8
+ <span class="text-white/70">My Systems</span>
9
9
  </nav>
10
10
  {% endblock %}
11
11
 
12
12
  {% block content %}
13
- <div class="h-full p-6 overflow-auto">
13
+ <div class="h-full p-6 overflow-auto bg-gradient-to-br from-slate-50 to-slate-100">
14
14
  <div class="max-w-6xl mx-auto">
15
15
  <!-- Header -->
16
16
  <div class="flex items-center justify-between mb-6">
17
- <h1 class="text-2xl font-bold text-gray-900">My Systems</h1>
17
+ <h1 class="text-2xl font-bold text-navy">My Systems</h1>
18
18
  <a href="{% url 'agent_studio:system_create' %}"
19
- class="px-4 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg font-medium text-sm">
20
- + New System
19
+ class="bg-navy hover:bg-navy-light text-white px-4 py-2 rounded-xl flex items-center space-x-2 transition-all hover:shadow-lg hover:-translate-y-0.5 font-medium">
20
+ <i class="pi pi-plus"></i>
21
+ <span>New System</span>
21
22
  </a>
22
23
  </div>
23
24
 
@@ -25,49 +26,54 @@
25
26
  <!-- System Grid -->
26
27
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
27
28
  {% for system in systems %}
28
- <div class="bg-white border border-gray-200 rounded-lg overflow-hidden hover:border-primary-300 hover:shadow-md transition-all">
29
- <div class="p-4">
29
+ <div class="bg-white border border-slate-200 rounded-xl overflow-hidden hover:border-cyan hover:shadow-md transition-all group">
30
+ <div class="p-5">
30
31
  <div class="flex items-center justify-between mb-3">
31
32
  <div class="flex items-center space-x-3">
32
- <span class="text-2xl">🔗</span>
33
+ <div class="w-10 h-10 bg-navy/10 rounded-lg flex items-center justify-center group-hover:bg-cyan/20 transition-colors">
34
+ <span class="text-xl">🔗</span>
35
+ </div>
33
36
  <div>
34
- <h3 class="font-semibold text-gray-800">{{ system.name }}</h3>
35
- <span class="text-xs text-gray-400">{{ system.slug }}</span>
37
+ <h3 class="font-semibold text-navy">{{ system.name }}</h3>
38
+ <span class="text-xs text-slate-400 font-mono">{{ system.slug }}</span>
36
39
  </div>
37
40
  </div>
38
41
  <div class="flex items-center space-x-1">
39
42
  {% if system.is_active %}
40
- <span class="w-2 h-2 bg-green-500 rounded-full" title="Active"></span>
43
+ <span class="w-2 h-2 bg-cyan rounded-full" title="Active"></span>
41
44
  {% else %}
42
- <span class="w-2 h-2 bg-gray-300 rounded-full" title="Inactive"></span>
45
+ <span class="w-2 h-2 bg-slate-300 rounded-full" title="Inactive"></span>
43
46
  {% endif %}
44
47
  </div>
45
48
  </div>
46
- <p class="text-sm text-gray-500 line-clamp-2 mb-3">{{ system.description|default:"No description" }}</p>
49
+ <p class="text-sm text-slate-500 line-clamp-2 mb-3">{{ system.description|default:"No description" }}</p>
47
50
 
48
51
  <!-- Entry Agent Info -->
49
- <div class="bg-gray-50 rounded-lg p-2 mb-3">
52
+ <div class="bg-slate-50 rounded-lg p-3 mb-3 border border-slate-100">
50
53
  <div class="flex items-center space-x-2 text-sm">
51
- <span class="text-gray-400">Entry:</span>
54
+ <span class="text-slate-400 text-xs font-medium uppercase tracking-wide">Entry</span>
52
55
  <span class="text-lg">{{ system.entry_agent.icon|default:"🤖" }}</span>
53
- <span class="text-gray-700 font-medium">{{ system.entry_agent.name }}</span>
56
+ <span class="text-navy font-medium">{{ system.entry_agent.name }}</span>
54
57
  </div>
55
58
  </div>
56
59
 
57
60
  <!-- Member Count -->
58
- <div class="flex items-center justify-between text-xs text-gray-400">
59
- <span>{{ system.members.count }} agent{{ system.members.count|pluralize }}</span>
61
+ <div class="flex items-center justify-between text-xs text-slate-400">
62
+ <span class="flex items-center gap-1">
63
+ <i class="pi pi-users text-xs"></i>
64
+ {{ system.members.count }} agent{{ system.members.count|pluralize }}
65
+ </span>
60
66
  <span>Updated {{ system.updated_at|timesince }} ago</span>
61
67
  </div>
62
68
  </div>
63
- <div class="border-t border-gray-100 px-4 py-3 bg-gray-50 flex items-center justify-between">
69
+ <div class="border-t border-slate-100 px-5 py-3 bg-slate-50/50 flex items-center justify-between">
64
70
  <a href="{% url 'agent_studio:system_collaborators' system.id %}"
65
- class="text-gray-500 hover:text-gray-700 text-sm"
71
+ class="text-slate-400 hover:text-navy text-sm transition-colors"
66
72
  title="Manage collaborators">
67
73
  <i class="pi pi-users"></i>
68
74
  </a>
69
75
  <a href="{% url 'agent_studio:system_test' system.id %}"
70
- class="text-primary-600 hover:text-primary-700 text-sm font-medium">
76
+ class="text-cyan hover:text-cyan-dark text-sm font-medium transition-colors">
71
77
  Test System →
72
78
  </a>
73
79
  </div>
@@ -76,13 +82,16 @@
76
82
  </div>
77
83
  {% else %}
78
84
  <!-- Empty State -->
79
- <div class="text-center py-12">
80
- <div class="text-6xl mb-4">🔗</div>
81
- <h3 class="text-xl font-semibold text-gray-800 mb-2">No systems yet</h3>
82
- <p class="text-gray-500 mb-6">Systems are multi-agent configurations that work together.</p>
85
+ <div class="text-center py-16 bg-white rounded-xl border border-slate-200 border-dashed">
86
+ <div class="w-16 h-16 bg-navy/10 rounded-2xl flex items-center justify-center mx-auto mb-4">
87
+ <span class="text-4xl">🔗</span>
88
+ </div>
89
+ <h3 class="text-xl font-semibold text-navy mb-2">No systems yet</h3>
90
+ <p class="text-slate-500 mb-6">Systems are multi-agent configurations that work together.</p>
83
91
  <a href="{% url 'agent_studio:system_create' %}"
84
- class="inline-block px-6 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg font-medium">
85
- Create Your First System
92
+ class="bg-navy hover:bg-navy-light text-white px-6 py-3 rounded-xl inline-flex items-center space-x-2 transition-all hover:shadow-lg font-medium">
93
+ <i class="pi pi-plus"></i>
94
+ <span>Create Your First System</span>
86
95
  </a>
87
96
  </div>
88
97
  {% endif %}
@@ -101,4 +110,3 @@ createApp({
101
110
  }).use(primevue.config.default).mount('#app');
102
111
  </script>
103
112
  {% endblock %}
104
-
@@ -1,15 +1,15 @@
1
1
  {% extends "django_agent_studio/base.html" %}
2
2
 
3
- {% block title %}Test {{ system.name }} - Agent Studio{% endblock %}
3
+ {% block title %}Test {{ system.name }} - {{ studio_app_name }}{% endblock %}
4
4
 
5
5
  {% block breadcrumbs %}
6
6
  <nav class="flex items-center space-x-2 ml-4 text-sm">
7
- <span class="text-gray-400">/</span>
8
- <a href="{% url 'agent_studio:system_list' %}" class="text-gray-500 hover:text-gray-700">My Systems</a>
9
- <span class="text-gray-400">/</span>
10
- <span class="text-gray-600">{{ system.name }}</span>
11
- <span class="text-gray-400">/</span>
12
- <span class="text-gray-600">Test</span>
7
+ <span class="text-white/40">/</span>
8
+ <a href="{% url 'agent_studio:system_list' %}" class="text-white/60 hover:text-white/90 transition-colors">My Systems</a>
9
+ <span class="text-white/40">/</span>
10
+ <span class="text-white/70">{{ system.name }}</span>
11
+ <span class="text-white/40">/</span>
12
+ <span class="text-white/70">Test</span>
13
13
  </nav>
14
14
  {% endblock %}
15
15
 
@@ -26,7 +26,7 @@
26
26
  height: 100% !important;
27
27
  max-height: none !important;
28
28
  border-radius: 0 !important;
29
- box-shadow: 0 0 20px rgba(0,0,0,0.1) !important;
29
+ box-shadow: 0 4px 20px rgba(0, 20, 46, 0.1) !important;
30
30
  }
31
31
 
32
32
  #fullscreen-chat-container .cw-toggle-btn {
@@ -49,43 +49,51 @@
49
49
  min-height: 0 !important;
50
50
  overflow-y: auto !important;
51
51
  }
52
+
53
+ #fullscreen-chat-container .cw-header {
54
+ background: {{ studio_colors.primary }} !important;
55
+ }
52
56
  </style>
53
57
  {% endblock %}
54
58
 
55
59
  {% block content %}
56
60
  <div class="h-full flex flex-col">
57
61
  <!-- System Info Bar -->
58
- <div class="px-4 py-3 bg-white border-b border-gray-200 flex items-center justify-between">
62
+ <div class="px-5 py-3 bg-white border-b border-slate-200 flex items-center justify-between">
59
63
  <div class="flex items-center space-x-4">
60
- <span class="text-2xl">🔗</span>
64
+ <div class="w-10 h-10 bg-navy/10 rounded-lg flex items-center justify-center">
65
+ <span class="text-xl">🔗</span>
66
+ </div>
61
67
  <div>
62
- <h1 class="font-semibold text-gray-800">{{ system.name }}</h1>
63
- <p class="text-sm text-gray-500">
64
- Entry: {{ agent.icon|default:"🤖" }} {{ agent.name }}
65
- <span class="text-gray-400 mx-2">•</span>
68
+ <h1 class="font-semibold text-navy">{{ system.name }}</h1>
69
+ <p class="text-sm text-slate-500">
70
+ <span class="inline-flex items-center gap-1 bg-cyan/10 text-navy px-2 py-0.5 rounded-full text-xs font-medium">
71
+ {{ agent.icon|default:"🤖" }} {{ agent.name }}
72
+ </span>
73
+ <span class="text-slate-300 mx-2">•</span>
66
74
  {{ system.description|default:"No description"|truncatechars:80 }}
67
75
  </p>
68
76
  </div>
69
77
  </div>
70
78
  <div class="flex items-center space-x-3">
71
79
  <a href="{% url 'agent_studio:system_collaborators' system.id %}"
72
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm"
80
+ class="text-slate-500 hover:text-navy px-3 py-1.5 border border-slate-200 rounded-lg text-sm transition-colors hover:border-cyan"
73
81
  title="Manage collaborators">
74
82
  <i class="pi pi-users"></i>
75
83
  </a>
76
84
  <a href="{% url 'agent_studio:system_list' %}"
77
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm">
85
+ class="text-slate-500 hover:text-navy px-3 py-1.5 border border-slate-200 rounded-lg text-sm transition-colors hover:border-cyan">
78
86
  ← Back to Systems
79
87
  </a>
80
88
  <button @click="clearChat"
81
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm">
89
+ class="text-white bg-navy hover:bg-navy-light px-4 py-1.5 rounded-lg text-sm font-medium transition-all hover:shadow-md">
82
90
  Clear Chat
83
91
  </button>
84
92
  </div>
85
93
  </div>
86
94
 
87
95
  <!-- Full Screen Chat -->
88
- <div class="flex-1 min-h-0 relative bg-gray-100 flex justify-center">
96
+ <div class="flex-1 min-h-0 relative bg-gradient-to-br from-slate-50 to-slate-100 flex justify-center">
89
97
  <div id="fullscreen-chat-container" class="relative w-full max-w-[800px] h-full"></div>
90
98
  </div>
91
99
  </div>
@@ -95,7 +103,6 @@
95
103
  <script>
96
104
  const { createApp } = Vue;
97
105
 
98
- // Use the entry agent's slug for the chat
99
106
  const agentSlug = "{{ agent.slug|escapejs }}";
100
107
  const backendUrl = window.location.origin;
101
108
 
@@ -109,7 +116,7 @@ function initChat() {
109
116
  backendUrl: backendUrl,
110
117
  agentKey: agentSlug,
111
118
  title: '{{ system.name|escapejs }}',
112
- primaryColor: '#3b82f6',
119
+ primaryColor: '{{ studio_chat_primary_color }}',
113
120
  showClearButton: true,
114
121
  showDebugButton: true,
115
122
  showExpandButton: false,
@@ -138,4 +145,3 @@ createApp({
138
145
  }).use(primevue.config.default).mount('#app');
139
146
  </script>
140
147
  {% endblock %}
141
-
@@ -1,15 +1,15 @@
1
1
  {% extends "django_agent_studio/base.html" %}
2
2
 
3
- {% block title %}Test {{ agent.name }} - Agent Studio{% endblock %}
3
+ {% block title %}Test {{ agent.name }} - {{ studio_app_name }}{% endblock %}
4
4
 
5
5
  {% block breadcrumbs %}
6
6
  <nav class="flex items-center space-x-2 ml-4 text-sm">
7
- <span class="text-gray-400">/</span>
8
- <a href="{% url 'agent_studio:agent_list' %}" class="text-gray-500 hover:text-gray-700">My Agents</a>
9
- <span class="text-gray-400">/</span>
10
- <a href="{% url 'agent_studio:agent_edit' agent.id %}" class="text-gray-500 hover:text-gray-700">{{ agent.name }}</a>
11
- <span class="text-gray-400">/</span>
12
- <span class="text-gray-600">Test</span>
7
+ <span class="text-white/40">/</span>
8
+ <a href="{% url 'agent_studio:agent_list' %}" class="text-white/60 hover:text-white/90 transition-colors">My Agents</a>
9
+ <span class="text-white/40">/</span>
10
+ <a href="{% url 'agent_studio:agent_edit' agent.id %}" class="text-white/60 hover:text-white/90 transition-colors">{{ agent.name }}</a>
11
+ <span class="text-white/40">/</span>
12
+ <span class="text-white/70">Test</span>
13
13
  </nav>
14
14
  {% endblock %}
15
15
 
@@ -52,39 +52,45 @@
52
52
  min-height: 0 !important;
53
53
  overflow-y: auto !important;
54
54
  }
55
+
56
+ #fullscreen-chat-container .cw-header {
57
+ background: {{ studio_colors.primary }} !important;
58
+ }
55
59
  </style>
56
60
  {% endblock %}
57
61
 
58
62
  {% block content %}
59
63
  <div class="h-full flex flex-col">
60
64
  <!-- Agent Info Bar -->
61
- <div class="px-4 py-3 bg-white border-b border-gray-200 flex items-center justify-between">
65
+ <div class="px-5 py-3 bg-white border-b border-slate-200 flex items-center justify-between">
62
66
  <div class="flex items-center space-x-4">
63
- <span class="text-2xl">{{ agent.icon|default:"🤖" }}</span>
67
+ <div class="w-10 h-10 bg-cyan/10 rounded-lg flex items-center justify-center">
68
+ <span class="text-xl">{{ agent.icon|default:"🤖" }}</span>
69
+ </div>
64
70
  <div>
65
- <h1 class="font-semibold text-gray-800">{{ agent.name }}</h1>
66
- <p class="text-sm text-gray-500">{{ agent.description|default:"No description"|truncatechars:100 }}</p>
71
+ <h1 class="font-semibold text-navy">{{ agent.name }}</h1>
72
+ <p class="text-sm text-slate-500">{{ agent.description|default:"No description"|truncatechars:100 }}</p>
67
73
  </div>
68
74
  </div>
69
75
  <div class="flex items-center space-x-3">
70
76
  <a href="{% url 'agent_studio:agent_collaborators' agent.id %}"
71
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm"
77
+ class="text-slate-500 hover:text-navy px-3 py-1.5 border border-slate-200 rounded-lg text-sm transition-colors hover:border-cyan"
72
78
  title="Manage collaborators">
73
79
  <i class="pi pi-users"></i>
74
80
  </a>
75
81
  <a href="{% url 'agent_studio:agent_edit' agent.id %}"
76
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm">
82
+ class="text-slate-500 hover:text-navy px-3 py-1.5 border border-slate-200 rounded-lg text-sm transition-colors hover:border-cyan">
77
83
  ← Back to Editor
78
84
  </a>
79
85
  <button @click="clearChat"
80
- class="text-gray-600 hover:text-gray-800 px-3 py-1.5 border border-gray-300 rounded-lg text-sm">
86
+ class="text-white bg-navy hover:bg-navy-light px-4 py-1.5 rounded-lg text-sm font-medium transition-all hover:shadow-md">
81
87
  Clear Chat
82
88
  </button>
83
89
  </div>
84
90
  </div>
85
91
 
86
92
  <!-- Full Screen Chat -->
87
- <div class="flex-1 min-h-0 relative bg-gray-100">
93
+ <div class="flex-1 min-h-0 relative bg-gradient-to-br from-slate-50 to-slate-100">
88
94
  <div id="fullscreen-chat-container" class="absolute inset-0"></div>
89
95
  </div>
90
96
  </div>
@@ -107,7 +113,7 @@ function initChat() {
107
113
  backendUrl: backendUrl,
108
114
  agentKey: agentSlug,
109
115
  title: '{{ agent.name|escapejs }}',
110
- primaryColor: '#3b82f6',
116
+ primaryColor: '{{ studio_chat_primary_color }}',
111
117
  showClearButton: true,
112
118
  showDebugButton: true,
113
119
  showExpandButton: false,
@@ -136,4 +142,3 @@ createApp({
136
142
  }).use(primevue.config.default).mount('#app');
137
143
  </script>
138
144
  {% endblock %}
139
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-agent-studio
3
- Version: 0.3.3
3
+ Version: 0.3.5
4
4
  Summary: Visual agent builder and management studio for Django - build custom GPTs with a two-pane interface
5
5
  Author: Chris Barry
6
6
  License: Business Source License 1.1
@@ -1,13 +1,14 @@
1
1
  django_agent_studio/__init__.py,sha256=E2vGoil7ZmwTebaB5ap9Lt0ptAzqYB5xJpyi4bFbqL8,378
2
2
  django_agent_studio/apps.py,sha256=L89QWn4XOvPBs2z6qHAhaE4uZQpasJntYD75aSd2p_k,607
3
+ django_agent_studio/branding.py,sha256=vg_TydsBeAPji6zz3rIeqq3I_RXvbXVJ4XDFmhner1k,3125
3
4
  django_agent_studio/urls.py,sha256=qoqmIaYx2qB4Ail9AhOzH3XKrMK9T8wxk8Kms2sHbkk,1333
4
5
  django_agent_studio/views.py,sha256=iAO_0oY3vlJdjaVACVXJN2Z784-Tc82PILXQqA2vHDk,15844
5
6
  django_agent_studio/agents/__init__.py,sha256=VYL_ato0DtggIo4BGRkyiz9cm1ARPXhhTQFzoG__NVM,800
6
7
  django_agent_studio/agents/builder.py,sha256=dRPQk5-AhUsTBOFxv8H4Uk2X2PfK631jjVJZ1w13GtM,146777
7
- django_agent_studio/agents/dynamic.py,sha256=b2bwvwF9DOjEds4c0748mjKzCWbymcSlR4B9nP9Bk4Q,25367
8
+ django_agent_studio/agents/dynamic.py,sha256=Fe3qvPm1zwI-1a6B6t4QAcBAy2xkXwquyoeNjWDutsA,31185
8
9
  django_agent_studio/api/__init__.py,sha256=vtBwuvBENyFFhFqCWyFsI6cYu4N9ZGqSMmHIRhr9a_U,45
9
10
  django_agent_studio/api/permissions.py,sha256=MutmA8TxZb4ZwGfeEoolK-QI04Gbcxs7DPNzkXe_Bss,5302
10
- django_agent_studio/api/serializers.py,sha256=qIQ74JzOdJRp_Sh2xtETuRwtRThcpn3EYS14rvAKdHA,23593
11
+ django_agent_studio/api/serializers.py,sha256=TT3-o_ZcGMSLKeQrExg3hl-I1T127uW6rMcKfPIaQzA,24079
11
12
  django_agent_studio/api/urls.py,sha256=xfL3AbTP0GKRYarDExvUoXuz0txhgNCumgjVehSfmTY,9893
12
13
  django_agent_studio/api/views.py,sha256=fECFWpu08ibQpOR-sL7AVCoTh4Ox6cYUEm4lh5GAPsE,90869
13
14
  django_agent_studio/management/__init__.py,sha256=6O9RHMN_xMDrEzKWytpai6QqgTXZVqwRg4h9mIQWtA8,52
@@ -19,22 +20,22 @@ django_agent_studio/models/permissions.py,sha256=NepltvQzeehv5EwcOTqULj8n3N5XGVT
19
20
  django_agent_studio/services/__init__.py,sha256=06cc1eLnAbROTKFxBgvkeCpsYV5cQsyJVGXaE_rcp3M,244
20
21
  django_agent_studio/services/permissions.py,sha256=-cwe0YZCFBFYh_ScXKncsPwEkCfEyIrtOzp8Wt9GSco,7785
21
22
  django_agent_studio/static/agent-frontend/chat-widget-markdown.js,sha256=_TQCux4HPRynCiLKydITO-docIRoi454jLpX0fegAFM,3722
22
- django_agent_studio/static/agent-frontend/chat-widget.css,sha256=qz495hBIVvDj-TtDRAhejfs6LkCQR9mKp8niYDPr2nw,38381
23
- django_agent_studio/static/agent-frontend/chat-widget.js,sha256=Yla8YlsmMtdXZRjN45Fup-4-NTCoM3NgR3yPsA5_Ot4,60548
24
- django_agent_studio/static/django_agent_studio/js/builder.js,sha256=eEUw2z-pNdoU3xv3NhLQ-uDZV7tsf8Bawseg7B7dpCo,413948
25
- django_agent_studio/static/django_agent_studio/js/builder.js.map,sha256=sVkeGyZsBWEr4MKhqAfd3B4JL5n7D6eKc_4ZYUsbKO8,1633363
26
- django_agent_studio/static/django_agent_studio/js/style.css,sha256=rigQJy_oHIhgb1_7DwAQ_8G002gQnT0AXUtwxImWj1o,1626515
27
- django_agent_studio/templates/django_agent_studio/agent_list.html,sha256=pIW6cRQ-i_hKWB_qDUuSBbzZw2qL_qJumhrW8C4Rs14,4931
28
- django_agent_studio/templates/django_agent_studio/base.html,sha256=whRDhBrk-uRkHSdbRNFpp6GBEnV-_lEDFHtaGLqJ3kA,6566
29
- django_agent_studio/templates/django_agent_studio/builder.html,sha256=yPzb0Pdp0d7Sp7gVkJd7OouDq-toKCA8i7OJLU9x6Z8,1542
30
- django_agent_studio/templates/django_agent_studio/collaborators.html,sha256=qPV0YG8V8eFCdK3e--kgxh3iT4jPHAXCxkSzOBkx7bg,19482
31
- django_agent_studio/templates/django_agent_studio/home.html,sha256=ebA-U1HseIzY5pPeXKluzI8vsKOh1owkKZxhys27Yns,6914
32
- django_agent_studio/templates/django_agent_studio/system_create.html,sha256=MOhKMuiR2Iley0J7gvFk9yxLT51BqPrOhk0PbJ-QXjo,6392
33
- django_agent_studio/templates/django_agent_studio/system_list.html,sha256=CN2o3nFpsZHwv6Wva1DkzYaAZnK204Q6FAqVH08L6_0,4666
34
- django_agent_studio/templates/django_agent_studio/system_test.html,sha256=Jo_pbIneXkTuT10lULuWa3i2BhJZv2uE4AClroaSNoE,4466
35
- django_agent_studio/templates/django_agent_studio/test.html,sha256=pACtNyD64KJhPnkpEnixLjdxkbeHbNCBBE1NEruKZ-Q,4320
36
- django_agent_studio-0.3.3.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
37
- django_agent_studio-0.3.3.dist-info/METADATA,sha256=Z7h7mKgUj3VCgjsbwWmgQGH4kjXTR7IFtyEWYHBJiBY,17048
38
- django_agent_studio-0.3.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
39
- django_agent_studio-0.3.3.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
40
- django_agent_studio-0.3.3.dist-info/RECORD,,
23
+ django_agent_studio/static/agent-frontend/chat-widget.css,sha256=hXbF85O9r9NtfGPsfm_j0ydA6eSQunxrSop3wguRQy4,39272
24
+ django_agent_studio/static/agent-frontend/chat-widget.js,sha256=taWJEanfXJjO9HRT3e1eK0428q3g-59s0PN9XsPjYIA,62278
25
+ django_agent_studio/static/django_agent_studio/js/builder.js,sha256=9b5tfVtKLBubzYx1SgfQ_k3DXyGk_hgTsD9CSOXH82M,419987
26
+ django_agent_studio/static/django_agent_studio/js/builder.js.map,sha256=GnCYDH_KCn9sK5ZY_qO7xZrHlK75kDYDagJChrFduy0,1650733
27
+ django_agent_studio/static/django_agent_studio/js/style.css,sha256=UqHhQqLup8c34l76M5YPQczAZs3FM4Z45-x-KbqVoZ8,1630851
28
+ django_agent_studio/templates/django_agent_studio/agent_list.html,sha256=khHjecmMkoUngSQISiFq8uVB7qj0W0loSr4KquggSo0,5475
29
+ django_agent_studio/templates/django_agent_studio/base.html,sha256=c0OKhFtdkhrZkK4K6vsN_yey3a2eOXzLlndPnbfHUnY,10756
30
+ django_agent_studio/templates/django_agent_studio/builder.html,sha256=sc0V661vbe6iOULqsMOgX6fqgDNtyYRx1NobmqX79Us,1551
31
+ django_agent_studio/templates/django_agent_studio/collaborators.html,sha256=9r9uN9NdX_DijWdNUsDnIyGCvYdB25GUCyXkqxPDWI0,19641
32
+ django_agent_studio/templates/django_agent_studio/home.html,sha256=4TSpgQg5fS5qGZHSeuYLF6xs8JoJr0dnEd2DUjHxHE0,8720
33
+ django_agent_studio/templates/django_agent_studio/system_create.html,sha256=0D46_4fxcXYeGicoRVycKHgDWBbOnsrG8N2_wYaXaLA,6492
34
+ django_agent_studio/templates/django_agent_studio/system_list.html,sha256=93gQUcUbgWhPXdo8gyLTdqlceDmII5nOe9wjgW9v1WM,5555
35
+ django_agent_studio/templates/django_agent_studio/system_test.html,sha256=LJvJqqkdO4ua1GvWUV7M1G-NFhRjBy0eRsTKYY1rJkg,4990
36
+ django_agent_studio/templates/django_agent_studio/test.html,sha256=T0ETvqH5v7rUoOhuwbuxdZ2zrka89H4i-efNkwK_2Fc,4740
37
+ django_agent_studio-0.3.5.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
38
+ django_agent_studio-0.3.5.dist-info/METADATA,sha256=yFkAq9cSUGRTvuAAp-Hg6nkDJgw3WcojDW5FMYCHY_8,17048
39
+ django_agent_studio-0.3.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
40
+ django_agent_studio-0.3.5.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
41
+ django_agent_studio-0.3.5.dist-info/RECORD,,