django-agent-studio 0.3.0__py3-none-any.whl → 0.3.1__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.
@@ -266,9 +266,8 @@ class DynamicAgentRuntime(AgentRuntime):
266
266
  **model_settings,
267
267
  )
268
268
 
269
- # Emit the final assistant message
270
- if result.final_content:
271
- await ctx.emit(EventType.ASSISTANT_MESSAGE, {"content": result.final_content})
269
+ # Note: run_agentic_loop already emits ASSISTANT_MESSAGE events,
270
+ # so we don't emit here to avoid duplicate messages in the UI.
272
271
 
273
272
  return RunResult(
274
273
  final_output={"response": result.final_content},
@@ -25,9 +25,9 @@
25
25
  <script>
26
26
  // Configuration passed from Django
27
27
  window.STUDIO_CONFIG = {
28
- agentId: {% if agent %}"{{ agent.id }}"{% else %}null{% endif %},
28
+ agentId: {% if agent %}"{{ agent.id|escapejs }}"{% else %}null{% endif %},
29
29
  csrfToken: "{{ csrf_token }}",
30
- builderAgentKey: "{{ builder_agent_key }}",
30
+ builderAgentKey: "{{ builder_agent_key|escapejs }}",
31
31
  };
32
32
  </script>
33
33
 
@@ -15,17 +15,18 @@
15
15
 
16
16
  {% block extra_head %}
17
17
  <style>
18
+ #fullscreen-chat-container {
19
+ display: flex;
20
+ justify-content: center;
21
+ }
22
+
18
23
  #fullscreen-chat-container .cw-container {
19
- position: absolute !important;
20
- top: 0;
21
- left: 0;
22
- right: 0;
23
- bottom: 0;
24
+ position: relative !important;
24
25
  width: 100% !important;
25
26
  height: 100% !important;
26
27
  max-height: none !important;
27
28
  border-radius: 0 !important;
28
- box-shadow: none !important;
29
+ box-shadow: 0 0 20px rgba(0,0,0,0.1) !important;
29
30
  }
30
31
 
31
32
  #fullscreen-chat-container .cw-toggle-btn {
@@ -33,11 +34,7 @@
33
34
  }
34
35
 
35
36
  #fullscreen-chat-container .cw-widget {
36
- position: absolute !important;
37
- top: 0;
38
- left: 0;
39
- right: 0;
40
- bottom: 0;
37
+ position: relative !important;
41
38
  width: 100% !important;
42
39
  height: 100% !important;
43
40
  max-height: none !important;
@@ -75,8 +72,8 @@
75
72
  </div>
76
73
 
77
74
  <!-- Full Screen Chat -->
78
- <div class="flex-1 relative bg-gray-100">
79
- <div id="fullscreen-chat-container" class="absolute inset-0"></div>
75
+ <div class="flex-1 relative bg-gray-100 flex justify-center">
76
+ <div id="fullscreen-chat-container" class="relative w-full max-w-[800px] h-full"></div>
80
77
  </div>
81
78
  </div>
82
79
  {% endblock %}
@@ -86,7 +83,7 @@
86
83
  const { createApp } = Vue;
87
84
 
88
85
  // Use the entry agent's slug for the chat
89
- const agentSlug = "{{ agent.slug }}";
86
+ const agentSlug = "{{ agent.slug|escapejs }}";
90
87
  const backendUrl = window.location.origin;
91
88
 
92
89
  function initChat() {
@@ -98,7 +95,7 @@ function initChat() {
98
95
  containerId: 'fullscreen-chat-container',
99
96
  backendUrl: backendUrl,
100
97
  agentKey: agentSlug,
101
- title: '{{ system.name }}',
98
+ title: '{{ system.name|escapejs }}',
102
99
  primaryColor: '#3b82f6',
103
100
  showClearButton: true,
104
101
  showDebugButton: true,
@@ -81,7 +81,7 @@
81
81
  <script>
82
82
  const { createApp } = Vue;
83
83
 
84
- const agentSlug = "{{ agent.slug }}";
84
+ const agentSlug = "{{ agent.slug|escapejs }}";
85
85
  const backendUrl = window.location.origin;
86
86
 
87
87
  function initChat() {
@@ -93,7 +93,7 @@ function initChat() {
93
93
  containerId: 'fullscreen-chat-container',
94
94
  backendUrl: backendUrl,
95
95
  agentKey: agentSlug,
96
- title: '{{ agent.name }}',
96
+ title: '{{ agent.name|escapejs }}',
97
97
  primaryColor: '#3b82f6',
98
98
  showClearButton: true,
99
99
  showDebugButton: true,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-agent-studio
3
- Version: 0.3.0
3
+ Version: 0.3.1
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
@@ -126,6 +126,7 @@ A visual agent builder and management interface for Django applications. Create,
126
126
 
127
127
  | Version | Date | Changes |
128
128
  |---------|------|---------|
129
+ | **0.3.1** | 2026-01-30 | **Bug Fixes** - Fixed duplicate message emit in dynamic agents, fixed escapejs encoding in templates, added 800px max-width constraint to system test view |
129
130
  | **0.3.0** | 2026-01-29 | **System Listing & Navigation** - Browse and test multi-agent systems from homepage, fixed URL routing for My Systems/My Agents links, system creation now supports optional entry agent |
130
131
  | **0.2.0** | 2026-01-28 | **Multi-Agent Systems** - System management UI, shared memory configuration, memory privacy controls, builder tools for managing agent systems |
131
132
  | **0.1.9** | 2026-01-27 | Spec documents migration, improved builder agent |
@@ -4,7 +4,7 @@ django_agent_studio/urls.py,sha256=4Lge5RtvBNZlpt4UWvKvJgQdgX2_6jRyCrfy8GzIjnY,9
4
4
  django_agent_studio/views.py,sha256=K1fBnGgplJneNBZxQm5zfVz0NLC_OkaJ4jqWT3NqSPI,5327
5
5
  django_agent_studio/agents/__init__.py,sha256=VYL_ato0DtggIo4BGRkyiz9cm1ARPXhhTQFzoG__NVM,800
6
6
  django_agent_studio/agents/builder.py,sha256=dRPQk5-AhUsTBOFxv8H4Uk2X2PfK631jjVJZ1w13GtM,146777
7
- django_agent_studio/agents/dynamic.py,sha256=HiTwH_vy_HQBXag7oaMhEHHfXpA00Bq9XSvO0GQxE_A,25394
7
+ django_agent_studio/agents/dynamic.py,sha256=b2bwvwF9DOjEds4c0748mjKzCWbymcSlR4B9nP9Bk4Q,25367
8
8
  django_agent_studio/api/__init__.py,sha256=vtBwuvBENyFFhFqCWyFsI6cYu4N9ZGqSMmHIRhr9a_U,45
9
9
  django_agent_studio/api/permissions.py,sha256=MutmA8TxZb4ZwGfeEoolK-QI04Gbcxs7DPNzkXe_Bss,5302
10
10
  django_agent_studio/api/serializers.py,sha256=0JJ7J-Rx_iDiZRZF8ja_kiUyRDcpDhRp-O-i1ifw9Zk,18870
@@ -26,13 +26,13 @@ django_agent_studio/static/django_agent_studio/js/builder.js.map,sha256=sVkeGyZs
26
26
  django_agent_studio/static/django_agent_studio/js/style.css,sha256=rigQJy_oHIhgb1_7DwAQ_8G002gQnT0AXUtwxImWj1o,1626515
27
27
  django_agent_studio/templates/django_agent_studio/agent_list.html,sha256=Qw2Jz39qrde69mI4EjhfWyc5elyKcpFYhicrLqOJZzU,4521
28
28
  django_agent_studio/templates/django_agent_studio/base.html,sha256=wSgwaqK1DAIIyYeZWsVvPlpAZyZHBEx3_NGtdRo0J3A,6019
29
- django_agent_studio/templates/django_agent_studio/builder.html,sha256=05thhHGdHaytyD1c15s5SMMWeNVKE8ERLEUp8qdv7Mc,1524
29
+ django_agent_studio/templates/django_agent_studio/builder.html,sha256=yPzb0Pdp0d7Sp7gVkJd7OouDq-toKCA8i7OJLU9x6Z8,1542
30
30
  django_agent_studio/templates/django_agent_studio/home.html,sha256=2YQXJww0JzSRakVt2uMKeSOcAXsF7QT3ef0U14pa-50,6470
31
31
  django_agent_studio/templates/django_agent_studio/system_list.html,sha256=IRWVQHsqtolfSDDPpOSKQNd6a1u9U9iQvTzFJWbm8DE,4026
32
- django_agent_studio/templates/django_agent_studio/system_test.html,sha256=5JZB31SkGjjAfyy77FyrDqf6FRQ495TtgNPFYuGAL-g,3907
33
- django_agent_studio/templates/django_agent_studio/test.html,sha256=h9aTtTD1eYcgG-n410qMSryHdpXyKny0hjiKYAoGsic,3779
34
- django_agent_studio-0.3.0.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
35
- django_agent_studio-0.3.0.dist-info/METADATA,sha256=wE3ibERGn_82zFZjoqdFJIXvSyhh13Mxl_IQeLsopnA,16486
36
- django_agent_studio-0.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
37
- django_agent_studio-0.3.0.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
38
- django_agent_studio-0.3.0.dist-info/RECORD,,
32
+ django_agent_studio/templates/django_agent_studio/system_test.html,sha256=kQAgUTMqAXjYFIcelxq34J2YXmFANWmd4Bz0UoU3fPs,3945
33
+ django_agent_studio/templates/django_agent_studio/test.html,sha256=C4qxjrG8USjO_NBpVnyaDibsxJ9A6kwUHEAKYXN7Jh0,3797
34
+ django_agent_studio-0.3.1.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
35
+ django_agent_studio-0.3.1.dist-info/METADATA,sha256=p7UkoDYVrWfniMIG9O23Ds_GmzWlz_a5fXDkd6mjYF8,16670
36
+ django_agent_studio-0.3.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
37
+ django_agent_studio-0.3.1.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
38
+ django_agent_studio-0.3.1.dist-info/RECORD,,