diff --git a/deploy/k8s/prod/configs/gateway-config.yaml b/deploy/k8s/prod/configs/gateway-config.yaml
index bd71adb5..190c5158 100644
--- a/deploy/k8s/prod/configs/gateway-config.yaml
+++ b/deploy/k8s/prod/configs/gateway-config.yaml
@@ -50,7 +50,7 @@ data:
namespace: sandbox
service_namespace: ai
in_cluster: true
- sandbox_image: git.dxod.org/dexorder/dexorder/ai-sandbox:27c603e
+ sandbox_image: git.dxod.org/dexorder/dexorder/ai-sandbox:7649811
sidecar_image: git.dxod.org/dexorder/dexorder/ai-lifecycle-sidecar:latest
image_pull_policy: Always
storage_class: ceph-block
diff --git a/web/src/components/ChatPanel.vue b/web/src/components/ChatPanel.vue
index abd392fb..2949bd1c 100644
--- a/web/src/components/ChatPanel.vue
+++ b/web/src/components/ChatPanel.vue
@@ -59,6 +59,8 @@ let toolCallMessageId: string | null = null
let lastSentMessageId: string | null = null
let streamingBuffer = ''
const isAgentProcessing = ref(false)
+const isStopHovered = ref(false)
+const isStopPressed = ref(false)
const addToolCallBubble = (label: string) => {
removeToolCallBubble()
@@ -653,10 +655,26 @@ onUnmounted(() => {
v-if="isAgentProcessing"
slot="send-icon"
@click.stop="stopAgent"
- class="stop-btn"
+ @mouseenter="isStopHovered = true"
+ @mouseleave="isStopHovered = false; isStopPressed = false"
+ @mousedown="isStopPressed = true"
+ @mouseup="isStopPressed = false"
+ :style="{
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ width: '100%',
+ height: '100%',
+ cursor: 'pointer',
+ borderRadius: '6px',
+ transition: 'transform 0.1s ease, box-shadow 0.15s ease',
+ transform: isStopPressed ? 'scale(0.88)' : isStopHovered ? 'scale(1.12)' : 'scale(1)',
+ boxShadow: isStopPressed ? '0 0 4px rgba(242,54,69,0.25)' : isStopHovered ? '0 0 10px rgba(242,54,69,0.5)' : 'none',
+ }"
>
@@ -664,29 +682,6 @@ onUnmounted(() => {