瀏覽代碼

Merge branch 'main' into fix/chore-fix

Yeuoly 5 月之前
父節點
當前提交
e4b8220bc2

+ 2 - 0
.github/workflows/vdb-tests.yml

@@ -8,6 +8,8 @@ on:
       - api/core/rag/datasource/**
       - docker/**
       - .github/workflows/vdb-tests.yml
+      - api/poetry.lock
+      - api/pyproject.toml
 
 concurrency:
   group: vdb-tests-${{ github.head_ref || github.run_id }}

+ 1 - 1
api/configs/packaging/__init__.py

@@ -9,7 +9,7 @@ class PackagingInfo(BaseSettings):
 
     CURRENT_VERSION: str = Field(
         description="Dify version",
-        default="0.11.2",
+        default="0.12.1",
     )
 
     COMMIT_SHA: str = Field(

+ 1 - 1
api/controllers/console/app/app.py

@@ -190,7 +190,7 @@ class AppCopyApi(Resource):
             )
             session.commit()
 
-            stmt = select(App).where(App.id == result.app.id)
+            stmt = select(App).where(App.id == result.app_id)
             app = session.scalar(stmt)
 
         return app, 201

+ 3 - 1
api/core/app/apps/advanced_chat/app_generator.py

@@ -138,7 +138,9 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator):
             conversation_id=conversation.id if conversation else None,
             inputs=conversation.inputs
             if conversation
-            else self._prepare_user_inputs(user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.id),
+            else self._prepare_user_inputs(
+                user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.tenant_id
+            ),
             query=query,
             files=file_objs,
             parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL,

+ 3 - 1
api/core/app/apps/agent_chat/app_generator.py

@@ -139,7 +139,9 @@ class AgentChatAppGenerator(MessageBasedAppGenerator):
             conversation_id=conversation.id if conversation else None,
             inputs=conversation.inputs
             if conversation
-            else self._prepare_user_inputs(user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.id),
+            else self._prepare_user_inputs(
+                user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.tenant_id
+            ),
             query=query,
             files=file_objs,
             parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL,

+ 3 - 1
api/core/app/apps/chat/app_generator.py

@@ -142,7 +142,9 @@ class ChatAppGenerator(MessageBasedAppGenerator):
             conversation_id=conversation.id if conversation else None,
             inputs=conversation.inputs
             if conversation
-            else self._prepare_user_inputs(user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.id),
+            else self._prepare_user_inputs(
+                user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.tenant_id
+            ),
             query=query,
             files=file_objs,
             parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL,

+ 1 - 1
api/core/app/apps/completion/app_generator.py

@@ -124,7 +124,7 @@ class CompletionAppGenerator(MessageBasedAppGenerator):
             model_conf=ModelConfigConverter.convert(app_config),
             file_upload_config=file_extra_config,
             inputs=self._prepare_user_inputs(
-                user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.id
+                user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.tenant_id
             ),
             query=query,
             files=file_objs,

+ 25 - 24
api/core/app/task_pipeline/workflow_cycle_manage.py

@@ -3,6 +3,7 @@ import time
 from collections.abc import Mapping, Sequence
 from datetime import UTC, datetime
 from typing import Any, Optional, Union, cast
+from uuid import uuid4
 
 from sqlalchemy.orm import Session
 
@@ -80,38 +81,38 @@ class WorkflowCycleManage:
 
             inputs[f"sys.{key.value}"] = value
 
-        inputs = WorkflowEntry.handle_special_values(inputs)
-
         triggered_from = (
             WorkflowRunTriggeredFrom.DEBUGGING
             if self._application_generate_entity.invoke_from == InvokeFrom.DEBUGGER
             else WorkflowRunTriggeredFrom.APP_RUN
         )
 
+        # handle special values
+        inputs = WorkflowEntry.handle_special_values(inputs)
+
         # init workflow run
-        workflow_run = WorkflowRun()
-        workflow_run_id = self._workflow_system_variables[SystemVariableKey.WORKFLOW_RUN_ID]
-        if workflow_run_id:
-            workflow_run.id = workflow_run_id
-        workflow_run.tenant_id = self._workflow.tenant_id
-        workflow_run.app_id = self._workflow.app_id
-        workflow_run.sequence_number = new_sequence_number
-        workflow_run.workflow_id = self._workflow.id
-        workflow_run.type = self._workflow.type
-        workflow_run.triggered_from = triggered_from.value
-        workflow_run.version = self._workflow.version
-        workflow_run.graph = self._workflow.graph
-        workflow_run.inputs = json.dumps(inputs)
-        workflow_run.status = WorkflowRunStatus.RUNNING.value
-        workflow_run.created_by_role = (
-            CreatedByRole.ACCOUNT.value if isinstance(self._user, Account) else CreatedByRole.END_USER.value
-        )
-        workflow_run.created_by = self._user.id
+        with Session(db.engine, expire_on_commit=False) as session:
+            workflow_run = WorkflowRun()
+            system_id = self._workflow_system_variables[SystemVariableKey.WORKFLOW_RUN_ID]
+            workflow_run.id = system_id or str(uuid4())
+            workflow_run.tenant_id = self._workflow.tenant_id
+            workflow_run.app_id = self._workflow.app_id
+            workflow_run.sequence_number = new_sequence_number
+            workflow_run.workflow_id = self._workflow.id
+            workflow_run.type = self._workflow.type
+            workflow_run.triggered_from = triggered_from.value
+            workflow_run.version = self._workflow.version
+            workflow_run.graph = self._workflow.graph
+            workflow_run.inputs = json.dumps(inputs)
+            workflow_run.status = WorkflowRunStatus.RUNNING
+            workflow_run.created_by_role = (
+                CreatedByRole.ACCOUNT if isinstance(self._user, Account) else CreatedByRole.END_USER
+            )
+            workflow_run.created_by = self._user.id
+            workflow_run.created_at = datetime.now(UTC).replace(tzinfo=None)
 
-        db.session.add(workflow_run)
-        db.session.commit()
-        db.session.refresh(workflow_run)
-        db.session.close()
+            session.add(workflow_run)
+            session.commit()
 
         return workflow_run
 

+ 3 - 3
api/core/ops/ops_trace_manager.py

@@ -445,7 +445,7 @@ class TraceTask:
             "ls_provider": message_data.model_provider,
             "ls_model_name": message_data.model_id,
             "status": message_data.status,
-            "from_end_user_id": message_data.from_account_id,
+            "from_end_user_id": message_data.from_end_user_id,
             "from_account_id": message_data.from_account_id,
             "agent_based": message_data.agent_based,
             "workflow_run_id": message_data.workflow_run_id,
@@ -521,7 +521,7 @@ class TraceTask:
             "ls_provider": message_data.model_provider,
             "ls_model_name": message_data.model_id,
             "status": message_data.status,
-            "from_end_user_id": message_data.from_account_id,
+            "from_end_user_id": message_data.from_end_user_id,
             "from_account_id": message_data.from_account_id,
             "agent_based": message_data.agent_based,
             "workflow_run_id": message_data.workflow_run_id,
@@ -570,7 +570,7 @@ class TraceTask:
             "ls_provider": message_data.model_provider,
             "ls_model_name": message_data.model_id,
             "status": message_data.status,
-            "from_end_user_id": message_data.from_account_id,
+            "from_end_user_id": message_data.from_end_user_id,
             "from_account_id": message_data.from_account_id,
             "agent_based": message_data.agent_based,
             "workflow_run_id": message_data.workflow_run_id,

+ 22 - 16
api/core/workflow/nodes/llm/node.py

@@ -20,6 +20,7 @@ from core.model_runtime.entities import (
 from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage
 from core.model_runtime.entities.message_entities import (
     AssistantPromptMessage,
+    PromptMessageContent,
     PromptMessageRole,
     SystemPromptMessage,
     UserPromptMessage,
@@ -66,7 +67,6 @@ from .entities import (
     ModelConfig,
 )
 from .exc import (
-    FileTypeNotSupportError,
     InvalidContextStructureError,
     InvalidVariableTypeError,
     LLMModeRequiredError,
@@ -137,12 +137,12 @@ class LLMNode(BaseNode[LLMNodeData]):
             query = None
             if self.node_data.memory:
                 query = self.node_data.memory.query_prompt_template
-            if query is None and (
-                query_variable := self.graph_runtime_state.variable_pool.get(
-                    (SYSTEM_VARIABLE_NODE_ID, SystemVariableKey.QUERY)
-                )
-            ):
-                query = query_variable.text
+                if not query and (
+                    query_variable := self.graph_runtime_state.variable_pool.get(
+                        (SYSTEM_VARIABLE_NODE_ID, SystemVariableKey.QUERY)
+                    )
+                ):
+                    query = query_variable.text
 
             prompt_messages, stop = self._fetch_prompt_messages(
                 user_query=query,
@@ -675,7 +675,7 @@ class LLMNode(BaseNode[LLMNodeData]):
                             and ModelFeature.AUDIO not in model_config.model_schema.features
                         )
                     ):
-                        raise FileTypeNotSupportError(type_name=content_item.type)
+                        continue
                     prompt_message_content.append(content_item)
                 if len(prompt_message_content) == 1 and prompt_message_content[0].type == PromptMessageContentType.TEXT:
                     prompt_message.content = prompt_message_content[0].data
@@ -828,14 +828,14 @@ class LLMNode(BaseNode[LLMNodeData]):
         }
 
 
-def _combine_text_message_with_role(*, text: str, role: PromptMessageRole):
+def _combine_message_content_with_role(*, contents: Sequence[PromptMessageContent], role: PromptMessageRole):
     match role:
         case PromptMessageRole.USER:
-            return UserPromptMessage(content=[TextPromptMessageContent(data=text)])
+            return UserPromptMessage(content=contents)
         case PromptMessageRole.ASSISTANT:
-            return AssistantPromptMessage(content=[TextPromptMessageContent(data=text)])
+            return AssistantPromptMessage(content=contents)
         case PromptMessageRole.SYSTEM:
-            return SystemPromptMessage(content=[TextPromptMessageContent(data=text)])
+            return SystemPromptMessage(content=contents)
     raise NotImplementedError(f"Role {role} is not supported")
 
 
@@ -877,7 +877,9 @@ def _handle_list_messages(
                 jinjia2_variables=jinja2_variables,
                 variable_pool=variable_pool,
             )
-            prompt_message = _combine_text_message_with_role(text=result_text, role=message.role)
+            prompt_message = _combine_message_content_with_role(
+                contents=[TextPromptMessageContent(data=result_text)], role=message.role
+            )
             prompt_messages.append(prompt_message)
         else:
             # Get segment group from basic message
@@ -908,12 +910,14 @@ def _handle_list_messages(
             # Create message with text from all segments
             plain_text = segment_group.text
             if plain_text:
-                prompt_message = _combine_text_message_with_role(text=plain_text, role=message.role)
+                prompt_message = _combine_message_content_with_role(
+                    contents=[TextPromptMessageContent(data=plain_text)], role=message.role
+                )
                 prompt_messages.append(prompt_message)
 
             if file_contents:
                 # Create message with image contents
-                prompt_message = UserPromptMessage(content=file_contents)
+                prompt_message = _combine_message_content_with_role(contents=file_contents, role=message.role)
                 prompt_messages.append(prompt_message)
 
     return prompt_messages
@@ -1018,6 +1022,8 @@ def _handle_completion_template(
         else:
             template_text = template.text
         result_text = variable_pool.convert_template(template_text).text
-    prompt_message = _combine_text_message_with_role(text=result_text, role=PromptMessageRole.USER)
+    prompt_message = _combine_message_content_with_role(
+        contents=[TextPromptMessageContent(data=result_text)], role=PromptMessageRole.USER
+    )
     prompt_messages.append(prompt_message)
     return prompt_messages

+ 2 - 2
api/libs/helper.py

@@ -31,12 +31,12 @@ class AppIconUrlField(fields.Raw):
         if obj is None:
             return None
 
-        from models.model import App, IconType
+        from models.model import App, IconType, Site
 
         if isinstance(obj, dict) and "app" in obj:
             obj = obj["app"]
 
-        if isinstance(obj, App) and obj.icon_type == IconType.IMAGE.value:
+        if isinstance(obj, App | Site) and obj.icon_type == IconType.IMAGE.value:
             return file_helpers.get_signed_file_url(obj.icon)
         return None
 

+ 2 - 2
api/models/account.py

@@ -59,8 +59,8 @@ class Account(UserMixin, Base):
         self._current_tenant = tenant
 
     @property
-    def current_tenant_id(self):
-        return self._current_tenant.id
+    def current_tenant_id(self) -> str | None:
+        return self._current_tenant.id if self._current_tenant else None
 
     @current_tenant_id.setter
     def current_tenant_id(self, value: str):

+ 5 - 4
api/models/workflow.py

@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 if TYPE_CHECKING:
     from models.model import AppMode
+from enum import StrEnum
 
 import sqlalchemy as sa
 from sqlalchemy import Index, PrimaryKeyConstraint, func
@@ -318,7 +319,7 @@ class Workflow(Base):
         )
 
 
-class WorkflowRunStatus(Enum):
+class WorkflowRunStatus(StrEnum):
     """
     Workflow Run Status Enum
     """
@@ -397,13 +398,13 @@ class WorkflowRun(Base):
     version = db.Column(db.String(255), nullable=False)
     graph = db.Column(db.Text)
     inputs = db.Column(db.Text)
-    status = db.Column(db.String(255), nullable=False)
-    outputs: Mapped[str] = db.Column(db.Text)
+    status = db.Column(db.String(255), nullable=False)  # running, succeeded, failed, stopped
+    outputs: Mapped[str] = mapped_column(sa.Text, default="{}")
     error = db.Column(db.Text)
     elapsed_time = db.Column(db.Float, nullable=False, server_default=db.text("0"))
     total_tokens = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
     total_steps = db.Column(db.Integer, server_default=db.text("0"))
-    created_by_role = db.Column(db.String(255), nullable=False)
+    created_by_role = db.Column(db.String(255), nullable=False)  # account, end_user
     created_by = db.Column(StringUUID, nullable=False)
     created_at = db.Column(db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)"))
     finished_at = db.Column(db.DateTime)

+ 4 - 3
api/services/conversation_service.py

@@ -1,3 +1,4 @@
+from collections.abc import Callable
 from datetime import UTC, datetime
 from typing import Optional, Union
 
@@ -74,14 +75,14 @@ class ConversationService:
         return InfiniteScrollPagination(data=conversations, limit=limit, has_more=has_more)
 
     @classmethod
-    def _get_sort_params(cls, sort_by: str) -> tuple[str, callable]:
+    def _get_sort_params(cls, sort_by: str):
         if sort_by.startswith("-"):
             return sort_by[1:], desc
         return sort_by, asc
 
     @classmethod
     def _build_filter_condition(
-        cls, sort_field: str, sort_direction: callable, reference_conversation: Conversation, is_next_page: bool = False
+        cls, sort_field: str, sort_direction: Callable, reference_conversation: Conversation, is_next_page: bool = False
     ):
         field_value = getattr(reference_conversation, sort_field)
         if (sort_direction == desc and not is_next_page) or (sort_direction == asc and is_next_page):
@@ -160,5 +161,5 @@ class ConversationService:
         conversation = cls.get_conversation(app_model, conversation_id, user)
 
         conversation.is_deleted = True
-        conversation.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
+        conversation.updated_at = datetime.now(UTC).replace(tzinfo=None)
         db.session.commit()

+ 1 - 1
docker-legacy/docker-compose.chroma.yaml

@@ -1,7 +1,7 @@
 services:
   # Chroma vector store.
   chroma:
-    image: ghcr.io/chroma-core/chroma:0.5.1
+    image: ghcr.io/chroma-core/chroma:0.5.20
     restart: always
     volumes:
       - ./volumes/chroma:/chroma/chroma

+ 3 - 3
docker-legacy/docker-compose.yaml

@@ -2,7 +2,7 @@ version: '3'
 services:
   # API service
   api:
-    image: langgenius/dify-api:0.11.2
+    image: langgenius/dify-api:0.12.1
     restart: always
     environment:
       # Startup mode, 'api' starts the API server.
@@ -227,7 +227,7 @@ services:
   # worker service
   # The Celery worker for processing the queue.
   worker:
-    image: langgenius/dify-api:0.11.2
+    image: langgenius/dify-api:0.12.1
     restart: always
     environment:
       CONSOLE_WEB_URL: ''
@@ -397,7 +397,7 @@ services:
 
   # Frontend web application.
   web:
-    image: langgenius/dify-web:0.11.2
+    image: langgenius/dify-web:0.12.1
     restart: always
     environment:
       # The base URL of console application api server, refers to the Console base URL of WEB service if console domain is

+ 4 - 4
docker/docker-compose.yaml

@@ -291,7 +291,7 @@ x-shared-env: &shared-api-worker-env
 services:
   # API service
   api:
-    image: langgenius/dify-api:0.11.2
+    image: langgenius/dify-api:0.12.1
     restart: always
     environment:
       # Use the shared environment variables.
@@ -311,7 +311,7 @@ services:
   # worker service
   # The Celery worker for processing the queue.
   worker:
-    image: langgenius/dify-api:0.11.2
+    image: langgenius/dify-api:0.12.1
     restart: always
     environment:
       # Use the shared environment variables.
@@ -330,7 +330,7 @@ services:
 
   # Frontend web application.
   web:
-    image: langgenius/dify-web:0.11.2
+    image: langgenius/dify-web:0.12.1
     restart: always
     environment:
       CONSOLE_API_URL: ${CONSOLE_API_URL:-}
@@ -605,7 +605,7 @@ services:
 
   # Chroma vector database
   chroma:
-    image: ghcr.io/chroma-core/chroma:0.5.1
+    image: ghcr.io/chroma-core/chroma:0.5.20
     profiles:
       - chroma
     restart: always

+ 9 - 5
web/app/components/base/divider/index.tsx

@@ -3,17 +3,21 @@ import React from 'react'
 import { type VariantProps, cva } from 'class-variance-authority'
 import classNames from '@/utils/classnames'
 
-const dividerVariants = cva(
-  'bg-divider-regular',
+const dividerVariants = cva('',
   {
     variants: {
       type: {
-        horizontal: 'w-full h-[0.5px] my-2',
+        horizontal: 'w-full h-[0.5px] my-2 ',
         vertical: 'w-[1px] h-full mx-2',
       },
+      bgStyle: {
+        gradient: 'bg-gradient-to-r from-divider-regular to-background-gradient-mask-transparent',
+        solid: 'bg-divider-regular',
+      },
     },
     defaultVariants: {
       type: 'horizontal',
+      bgStyle: 'solid',
     },
   },
 )
@@ -23,9 +27,9 @@ type DividerProps = {
   style?: CSSProperties
 } & VariantProps<typeof dividerVariants>
 
-const Divider: FC<DividerProps> = ({ type, className = '', style }) => {
+const Divider: FC<DividerProps> = ({ type, bgStyle, className = '', style }) => {
   return (
-    <div className={classNames(dividerVariants({ type }), className)} style={style}></div>
+    <div className={classNames(dividerVariants({ type, bgStyle }), className)} style={style}></div>
   )
 }
 

+ 6 - 0
web/app/components/base/ga/index.tsx

@@ -47,6 +47,12 @@ gtag('config', '${gaIdMaps[gaType]}');
         nonce={nonce!}
       >
       </Script>
+      {/* Cookie banner */}
+      <Script
+        id="cookieyes"
+        src='https://cdn-cookieyes.com/client_data/2a645945fcae53f8e025a2b1/script.js'
+        nonce={nonce!}
+      ></Script>
     </>
 
   )

+ 6 - 4
web/app/components/explore/app-list/index.tsx

@@ -14,7 +14,7 @@ import type { App } from '@/models/explore'
 import Category from '@/app/components/explore/category'
 import AppCard from '@/app/components/explore/app-card'
 import { fetchAppDetail, fetchAppList } from '@/service/explore'
-import { importApp } from '@/service/apps'
+import { importDSL } from '@/service/apps'
 import { useTabSearchParams } from '@/hooks/use-tab-searchparams'
 import CreateAppModal from '@/app/components/explore/create-app-modal'
 import AppTypeSelector from '@/app/components/app/type-selector'
@@ -24,6 +24,7 @@ import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
 import { useAppContext } from '@/context/app-context'
 import { getRedirection } from '@/utils/app-redirection'
 import Input from '@/app/components/base/input'
+import { DSLImportMode } from '@/models/app'
 
 type AppsProps = {
   pageType?: PageType
@@ -127,8 +128,9 @@ const Apps = ({
       currApp?.app.id as string,
     )
     try {
-      const app = await importApp({
-        data: export_data,
+      const app = await importDSL({
+        mode: DSLImportMode.YAML_CONTENT,
+        yaml_content: export_data,
         name,
         icon_type,
         icon,
@@ -143,7 +145,7 @@ const Apps = ({
       if (onSuccess)
         onSuccess()
       localStorage.setItem(NEED_REFRESH_APP_LIST_KEY, '1')
-      getRedirection(isCurrentWorkspaceEditor, app, push)
+      getRedirection(isCurrentWorkspaceEditor, { id: app.app_id }, push)
     }
     catch (e) {
       Toast.notify({ type: 'error', message: t('app.newApp.appCreateFailed') })

+ 1 - 1
web/app/components/workflow/nodes/_base/components/memory-config.tsx

@@ -53,7 +53,7 @@ type Props = {
 
 const MEMORY_DEFAULT: Memory = {
   window: { enabled: false, size: WINDOW_SIZE_DEFAULT },
-  query_prompt_template: '',
+  query_prompt_template: '{{#sys.query#}}',
 }
 
 const MemoryConfig: FC<Props> = ({

+ 0 - 15
web/app/signin/layout.tsx

@@ -1,25 +1,10 @@
-import Script from 'next/script'
 import Header from './_header'
 import style from './page.module.css'
 
 import cn from '@/utils/classnames'
-import { IS_CE_EDITION } from '@/config'
 
 export default async function SignInLayout({ children }: any) {
   return <>
-    {!IS_CE_EDITION && (
-      <>
-        <Script strategy="beforeInteractive" async src={'https://www.googletagmanager.com/gtag/js?id=AW-11217955271'}></Script>
-        <Script
-          id="ga-monitor-register"
-          dangerouslySetInnerHTML={{
-            __html: 'window.dataLayer2 = window.dataLayer2 || [];function gtag(){dataLayer2.push(arguments);}gtag(\'js\', new Date());gtag(\'config\', \'AW-11217955271"\');',
-          }}
-        >
-        </Script>
-      </>
-    )}
-
     <div className={cn(
       style.background,
       'flex w-full min-h-screen',

+ 1 - 1
web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "dify-web",
-  "version": "0.11.2",
+  "version": "0.12.1",
   "private": true,
   "engines": {
     "node": ">=18.17.0"

+ 141 - 13
web/themes/dark.css

@@ -85,6 +85,10 @@ html[data-theme="dark"] {
   --color-components-button-secondary-accent-border-hover: #FFFFFF1F;
   --color-components-button-secondary-accent-border-disabled: #FFFFFF0D;
 
+  --color-components-button-indigo-bg: #444CE7;
+  --color-components-button-indigo-bg-hover: #6172F3;
+  --color-components-button-indigo-bg-disabled: #FFFFFF08;
+
   --color-components-checkbox-icon: #FFFFFFF2;
   --color-components-checkbox-icon-disabled: #FFFFFF33;
   --color-components-checkbox-bg: #296DFF;
@@ -95,10 +99,11 @@ html[data-theme="dark"] {
   --color-components-checkbox-border-disabled: #FFFFFF03;
   --color-components-checkbox-bg-unchecked: #FFFFFF08;
   --color-components-checkbox-bg-unchecked-hover: #FFFFFF0D;
+  --color-components-checkbox-bg-disabled-checked: #155AEF33;
 
   --color-components-radio-border-checked: #296DFF;
   --color-components-radio-border-checked-hover: #5289FF;
-  --color-components-radio-border-checked-disabled: #FFFFFF14;
+  --color-components-radio-border-checked-disabled: #155AEF33;
   --color-components-radio-bg-disabled: #FFFFFF08;
   --color-components-radio-border: #FFFFFF66;
   --color-components-radio-border-hover: #FFFFFF99;
@@ -135,6 +140,9 @@ html[data-theme="dark"] {
   --color-components-panel-on-panel-item-bg: #27272B;
   --color-components-panel-on-panel-item-bg-hover: #3A3A40;
   --color-components-panel-on-panel-item-bg-alt: #3A3A40;
+  --color-components-panel-on-panel-item-bg-transparent: #2C2C30F2;
+  --color-components-panel-on-panel-item-bg-hover-transparent: #3A3A4000;
+  --color-components-panel-on-panel-item-bg-destructive-hover-transparent: #FFFBFA00;
 
   --color-components-panel-bg-transparent: #22222500;
 
@@ -208,10 +216,12 @@ html[data-theme="dark"] {
 
   --color-components-actionbar-bg: #222225;
   --color-components-actionbar-border: #C8CEDA14;
+  --color-components-actionbar-bg-accent: #27272B;
+  --color-components-actionbar-border-accent: #5289FF;
 
   --color-components-dropzone-bg-alt: #18181BCC;
   --color-components-dropzone-bg: #18181B66;
-  --color-components-dropzone-bg-accent: #155AEF24;
+  --color-components-dropzone-bg-accent: #155AEF33;
   --color-components-dropzone-border: #C8CEDA24;
   --color-components-dropzone-border-alt: #C8CEDA33;
   --color-components-dropzone-border-accent: #84ABFF;
@@ -228,6 +238,14 @@ html[data-theme="dark"] {
   --color-components-progress-gray-border: #98A2B2;
   --color-components-progress-gray-bg: #C8CEDA05;
 
+  --color-components-progress-warning-progress: #FDB022;
+  --color-components-progress-warning-border: #FDB022;
+  --color-components-progress-warning-bg: #F790090A;
+
+  --color-components-progress-error-progress: #F97066;
+  --color-components-progress-error-border: #F97066;
+  --color-components-progress-error-bg: #F044380A;
+
   --color-components-chat-input-audio-bg: #155AEF33;
   --color-components-chat-input-audio-wave-default: #C8CEDA24;
   --color-components-chat-input-bg-mask-1: #18181B0A;
@@ -236,13 +254,103 @@ html[data-theme="dark"] {
   --color-components-chat-input-audio-wave-active: #84ABFF;
   --color-components-chat-input-audio-bg-alt: #18181BE5;
 
-  --color-components-Avatar-shape-fill-stop-0: #FFFFFFF2;
-  --color-components-Avatar-shape-fill-stop-100: #FFFFFFCC;
-
-  --color-components-Avatar-bg-mask-stop-0: #FFFFFF33;
-  --color-components-Avatar-bg-mask-stop-100: #FFFFFF08;
-
-  --color-components-Avatar-default-avatar-bg: #222225;
+  --color-components-avatar-shape-fill-stop-0: #FFFFFFF2;
+  --color-components-avatar-shape-fill-stop-100: #FFFFFFCC;
+
+  --color-components-avatar-bg-mask-stop-0: #FFFFFF33;
+  --color-components-avatar-bg-mask-stop-100: #FFFFFF08;
+
+  --color-components-avatar-default-avatar-bg: #222225;
+  --color-components-avatar-mask-darkmode-dimmed: #0000001F;
+
+  --color-components-label-gray: #C8CEDA24;
+
+  --color-components-premium-badge-blue-bg-stop-0: #5289FF;
+  --color-components-premium-badge-blue-bg-stop-100: #296DFF;
+  --color-components-premium-badge-blue-stroke-stop-0: #FFFFFF33;
+  --color-components-premium-badge-blue-stroke-stop-100: #296DFF;
+  --color-components-premium-badge-blue-text-stop-0: #EFF4FF;
+  --color-components-premium-badge-blue-text-stop-100: #B2CAFF;
+  --color-components-premium-badge-blue-glow: #004AEB;
+  --color-components-premium-badge-blue-bg-stop-0-hover: #84ABFF;
+  --color-components-premium-badge-blue-bg-stop-100-hover: #004AEB;
+  --color-components-premium-badge-blue-glow-hover: #D1E0FF;
+  --color-components-premium-badge-blue-stroke-stop-0-hover: #FFFFFF80;
+  --color-components-premium-badge-blue-stroke-stop-100-hover: #296DFF;
+
+  --color-components-premium-badge-highlight-stop-0: #FFFFFF1F;
+  --color-components-premium-badge-highlight-stop-100: #FFFFFF33;
+  --color-components-premium-badge-indigo-bg-stop-0: #6172F3;
+  --color-components-premium-badge-indigo-bg-stop-100: #3538CD;
+  --color-components-premium-badge-indigo-stroke-stop-0: #FFFFFF33;
+  --color-components-premium-badge-indigo-stroke-stop-100: #444CE7;
+  --color-components-premium-badge-indigo-text-stop-0: #EEF4FF;
+  --color-components-premium-badge-indigo-text-stop-100: #C7D7FE;
+  --color-components-premium-badge-indigo-glow: #3538CD;
+  --color-components-premium-badge-indigo-glow-hover: #E0EAFF;
+  --color-components-premium-badge-indigo-bg-stop-0-hover: #A4BCFD;
+  --color-components-premium-badge-indigo-bg-stop-100-hover: #3538CD;
+  --color-components-premium-badge-indigo-stroke-stop-0-hover: #FFFFFF80;
+  --color-components-premium-badge-indigo-stroke-stop-100-hover: #444CE7;
+
+  --color-components-premium-badge-grey-bg-stop-0: #676F83;
+  --color-components-premium-badge-grey-bg-stop-100: #495464;
+  --color-components-premium-badge-grey-stroke-stop-0: #FFFFFF1F;
+  --color-components-premium-badge-grey-stroke-stop-100: #495464;
+  --color-components-premium-badge-grey-text-stop-0: #F9FAFB;
+  --color-components-premium-badge-grey-text-stop-100: #E9EBF0;
+  --color-components-premium-badge-grey-glow: #354052;
+  --color-components-premium-badge-grey-glow-hover: #F2F4F7;
+  --color-components-premium-badge-grey-bg-stop-0-hover: #98A2B2;
+  --color-components-premium-badge-grey-bg-stop-100-hover: #354052;
+  --color-components-premium-badge-grey-stroke-stop-0-hover: #FFFFFF80;
+  --color-components-premium-badge-grey-stroke-stop-100-hover: #676F83;
+
+  --color-components-premium-badge-orange-bg-stop-0: #FF692E;
+  --color-components-premium-badge-orange-bg-stop-100: #E04F16;
+  --color-components-premium-badge-orange-stroke-stop-0: #FFFFFF33;
+  --color-components-premium-badge-orange-stroke-stop-100: #FF4405;
+  --color-components-premium-badge-orange-text-stop-0: #FEF6EE;
+  --color-components-premium-badge-orange-text-stop-100: #F9DBAF;
+  --color-components-premium-badge-orange-glow: #B93815;
+  --color-components-premium-badge-orange-glow-hover: #FDEAD7;
+  --color-components-premium-badge-orange-bg-stop-0-hover: #FF692E;
+  --color-components-premium-badge-orange-bg-stop-100-hover: #B93815;
+  --color-components-premium-badge-orange-stroke-stop-0-hover: #FFFFFF80;
+  --color-components-premium-badge-orange-stroke-stop-100-hover: #FF4405;
+
+  --color-components-progress-bar-bg: #C8CEDA14;
+  --color-components-progress-bar-progress: #C8CEDA24;
+  --color-components-progress-bar-border: #FFFFFF08;
+  --color-components-progress-bar-progress-solid: #FFFFFFF2;
+  --color-components-progress-bar-progress-highlight: #C8CEDA33;
+
+  --color-components-icon-bg-red-solid: #D92D20;
+  --color-components-icon-bg-rose-solid: #E31B54;
+  --color-components-icon-bg-pink-solid: #DD2590;
+  --color-components-icon-bg-orange-dark-solid: #FF4405;
+  --color-components-icon-bg-yellow-solid: #EAAA08;
+  --color-components-icon-bg-green-solid: #4CA30D;
+  --color-components-icon-bg-teal-solid: #0E9384;
+  --color-components-icon-bg-blue-light-solid: #0BA5EC;
+  --color-components-icon-bg-blue-solid: #155AEF;
+  --color-components-icon-bg-indigo-solid: #444CE7;
+  --color-components-icon-bg-violet-solid: #7839EE;
+  --color-components-icon-bg-midnight-solid: #5D698D;
+  --color-components-icon-bg-rose-soft: #F63D6833;
+  --color-components-icon-bg-pink-soft: #EE46BC33;
+  --color-components-icon-bg-orange-dark-soft: #FF440533;
+  --color-components-icon-bg-yellow-soft: #EAAA0833;
+  --color-components-icon-bg-green-soft: #66C61C33;
+  --color-components-icon-bg-teal-soft: #15B79E33;
+  --color-components-icon-bg-blue-light-soft: #0BA5EC33;
+  --color-components-icon-bg-blue-soft: #155AEF33;
+  --color-components-icon-bg-indigo-soft: #6172F333;
+  --color-components-icon-bg-violet-soft: #875BF733;
+  --color-components-icon-bg-midnight-soft: #828DAD33;
+  --color-components-icon-bg-red-soft: #F0443833;
+  --color-components-icon-bg-orange-solid: #F79009;
+  --color-components-icon-bg-orange-soft: #F7900933;
 
   --color-text-primary: #FBFBFC;
   --color-text-secondary: #D9D9DE;
@@ -302,6 +410,7 @@ html[data-theme="dark"] {
   --color-background-overlay-alt: #18181B66;
   --color-background-surface-white: #FFFFFFE5;
   --color-background-overlay-destructive: #F044384D;
+  --color-background-overlay-backdrop: #18181BF2;
 
   --color-shadow-shadow-1: #0000000D;
   --color-shadow-shadow-3: #0000001A;
@@ -317,14 +426,20 @@ html[data-theme="dark"] {
   --color-workflow-block-border: #FFFFFF14;
   --color-workflow-block-parma-bg: #FFFFFF0D;
   --color-workflow-block-bg: #27272B;
+  --color-workflow-block-bg-transparent: #27272BF5;
   --color-workflow-block-border-highlight: #C8CEDA33;
 
   --color-workflow-canvas-workflow-dot-color: #8585AD26;
   --color-workflow-canvas-workflow-bg: #1D1D20;
 
-  --color-workflow-link-line-active: #296DFF;
+  --color-workflow-link-line-active: #5289FF;
   --color-workflow-link-line-normal: #676F83;
-  --color-workflow-link-line-handle: #296DFF;
+  --color-workflow-link-line-handle: #5289FF;
+  --color-workflow-link-line-normal-transparent: #676F8333;
+  --color-workflow-link-line-failure-active: #FDB022;
+  --color-workflow-link-line-failure-handle: #FDB022;
+  --color-workflow-link-line-failure-button-bg: #F79009;
+  --color-workflow-link-line-failure-button-hover: #DC6803;
 
   --color-workflow-link-line-success-active: #47CD89;
   --color-workflow-link-line-success-handle: #47CD89;
@@ -341,8 +456,8 @@ html[data-theme="dark"] {
   --color-workflow-display-success-vignette-color: #17B26A40;
   --color-workflow-display-success-bg-line-pattern: #18181BCC;
 
-  --color-workflow-display-glass-1: #FFFFFF03;
-  --color-workflow-display-glass-2: #FFFFFF08;
+  --color-workflow-display-glass-1: #FFFFFF08;
+  --color-workflow-display-glass-2: #FFFFFF0D;
   --color-workflow-display-vignette-dark: #00000066;
   --color-workflow-display-highlight: #FFFFFF1F;
   --color-workflow-display-outline: #18181BF2;
@@ -431,6 +546,7 @@ html[data-theme="dark"] {
   --color-util-colors-orange-orange-500: #EF6820;
   --color-util-colors-orange-orange-600: #F38744;
   --color-util-colors-orange-orange-700: #F7B27A;
+  --color-util-colors-orange-orange-100-transparent: #77291700;
 
   --color-util-colors-pink-pink-50: #4E0D30;
   --color-util-colors-pink-pink-100: #851651;
@@ -606,4 +722,16 @@ html[data-theme="dark"] {
   --color-third-party-LangChain: #FFFFFF;
   --color-third-party-Langfuse: #FFFFFF;
   --color-third-party-Github: #FFFFFF;
+  --color-third-party-Github-tertiary: #C8CEDA99;
+  --color-third-party-Github-secondary: #D9D9DE;
+  --color-third-party-model-bg-openai: #121212;
+  --color-third-party-model-bg-anthropic: #1D1917;
+  --color-third-party-model-bg-default: #0B0B0E;
+
+  --color-third-party-aws: #141F2E;
+  --color-third-party-aws-alt: #192639;
+
+  --color-saas-background: #0B0B0E;
+  --color-saas-pricing-grid-bg: #C8CEDA33;
+
 }

+ 135 - 13
web/themes/light.css

@@ -85,8 +85,12 @@ html[data-theme="light"] {
   --color-components-button-secondary-accent-border-hover: #10182824;
   --color-components-button-secondary-accent-border-disabled: #1018280A;
 
+  --color-components-button-indigo-bg: #444CE7;
+  --color-components-button-indigo-bg-hover: #3538CD;
+  --color-components-button-indigo-bg-disabled: #6172F324;
+
   --color-components-checkbox-icon: #FFFFFF;
-  --color-components-checkbox-icon-disabled: #D0D5DC;
+  --color-components-checkbox-icon-disabled: #FFFFFF80;
   --color-components-checkbox-bg: #155AEF;
   --color-components-checkbox-bg-hover: #004AEB;
   --color-components-checkbox-bg-disabled: #F2F4F7;
@@ -95,10 +99,11 @@ html[data-theme="light"] {
   --color-components-checkbox-border-disabled: #18181B0A;
   --color-components-checkbox-bg-unchecked: #FFFFFF;
   --color-components-checkbox-bg-unchecked-hover: #FFFFFF;
+  --color-components-checkbox-bg-disabled-checked: #B2CAFF;
 
   --color-components-radio-border-checked: #155AEF;
   --color-components-radio-border-checked-hover: #004AEB;
-  --color-components-radio-border-checked-disabled: #F2F4F7;
+  --color-components-radio-border-checked-disabled: #B2CAFF;
   --color-components-radio-bg-disabled: #FFFFFF00;
   --color-components-radio-border: #D0D5DC;
   --color-components-radio-border-hover: #98A2B2;
@@ -135,6 +140,9 @@ html[data-theme="light"] {
   --color-components-panel-on-panel-item-bg: #FFFFFF;
   --color-components-panel-on-panel-item-bg-hover: #F9FAFB;
   --color-components-panel-on-panel-item-bg-alt: #F9FAFB;
+  --color-components-panel-on-panel-item-bg-transparent: #FFFFFFF2;
+  --color-components-panel-on-panel-item-bg-hover-transparent: #F9FAFB00;
+  --color-components-panel-on-panel-item-bg-destructive-hover-transparent: #FEF3F200;
 
   --color-components-panel-bg-transparent: #FFFFFF00;
 
@@ -161,10 +169,10 @@ html[data-theme="light"] {
   --color-components-segmented-control-item-active-accent-bg: #FFFFFF;
   --color-components-segmented-control-item-active-accent-border: #FFFFFF;
 
-  --color-components-option-card-option-bg: #F9FAFB;
+  --color-components-option-card-option-bg: #FCFCFD;
   --color-components-option-card-option-selected-bg: #FFFFFF;
   --color-components-option-card-option-selected-border: #296DFF;
-  --color-components-option-card-option-border: #F2F4F7;
+  --color-components-option-card-option-border: #E9EBF0;
   --color-components-option-card-option-bg-hover: #FFFFFF;
   --color-components-option-card-option-border-hover: #D0D5DC;
 
@@ -208,10 +216,12 @@ html[data-theme="light"] {
 
   --color-components-actionbar-bg: #FFFFFFF2;
   --color-components-actionbar-border: #1018280A;
+  --color-components-actionbar-bg-accent: #F5F7FF;
+  --color-components-actionbar-border-accent: #B2CAFF;
 
   --color-components-dropzone-bg-alt: #F2F4F7;
   --color-components-dropzone-bg: #F9FAFB;
-  --color-components-dropzone-bg-accent: #EFF4FF;
+  --color-components-dropzone-bg-accent: #155AEF24;
   --color-components-dropzone-border: #10182814;
   --color-components-dropzone-border-alt: #10182833;
   --color-components-dropzone-border-accent: #84ABFF;
@@ -228,6 +238,14 @@ html[data-theme="light"] {
   --color-components-progress-gray-border: #98A2B2;
   --color-components-progress-gray-bg: #C8CEDA05;
 
+  --color-components-progress-warning-progress: #F79009;
+  --color-components-progress-warning-border: #F79009;
+  --color-components-progress-warning-bg: #F790090A;
+
+  --color-components-progress-error-progress: #F04438;
+  --color-components-progress-error-border: #F04438;
+  --color-components-progress-error-bg: #F044380A;
+
   --color-components-chat-input-audio-bg: #EFF4FF;
   --color-components-chat-input-audio-wave-default: #155AEF33;
   --color-components-chat-input-bg-mask-1: #FFFFFF03;
@@ -236,13 +254,103 @@ html[data-theme="light"] {
   --color-components-chat-input-audio-wave-active: #296DFF;
   --color-components-chat-input-audio-bg-alt: #FCFCFD;
 
-  --color-components-Avatar-shape-fill-stop-0: #FFFFFF;
-  --color-components-Avatar-shape-fill-stop-100: #FFFFFFE5;
-
-  --color-components-Avatar-bg-mask-stop-0: #FFFFFF1F;
-  --color-components-Avatar-bg-mask-stop-100: #FFFFFF14;
-
-  --color-components-Avatar-default-avatar-bg: #D0D5DC;
+  --color-components-avatar-shape-fill-stop-0: #FFFFFF;
+  --color-components-avatar-shape-fill-stop-100: #FFFFFFE5;
+
+  --color-components-avatar-bg-mask-stop-0: #FFFFFF1F;
+  --color-components-avatar-bg-mask-stop-100: #FFFFFF14;
+
+  --color-components-avatar-default-avatar-bg: #D0D5DC;
+  --color-components-avatar-mask-darkmode-dimmed: #FFFFFF00;
+
+  --color-components-label-gray: #F2F4F7;
+
+  --color-components-premium-badge-blue-bg-stop-0: #5289FF;
+  --color-components-premium-badge-blue-bg-stop-100: #155AEF;
+  --color-components-premium-badge-blue-stroke-stop-0: #FFFFFFF2;
+  --color-components-premium-badge-blue-stroke-stop-100: #155AEF;
+  --color-components-premium-badge-blue-text-stop-0: #F5F7FF;
+  --color-components-premium-badge-blue-text-stop-100: #D1E0FF;
+  --color-components-premium-badge-blue-glow: #00329E;
+  --color-components-premium-badge-blue-bg-stop-0-hover: #296DFF;
+  --color-components-premium-badge-blue-bg-stop-100-hover: #004AEB;
+  --color-components-premium-badge-blue-glow-hover: #84ABFF;
+  --color-components-premium-badge-blue-stroke-stop-0-hover: #FFFFFFF2;
+  --color-components-premium-badge-blue-stroke-stop-100-hover: #00329E;
+
+  --color-components-premium-badge-highlight-stop-0: #FFFFFF1F;
+  --color-components-premium-badge-highlight-stop-100: #FFFFFF4D;
+  --color-components-premium-badge-indigo-bg-stop-0: #8098F9;
+  --color-components-premium-badge-indigo-bg-stop-100: #444CE7;
+  --color-components-premium-badge-indigo-stroke-stop-0: #FFFFFFF2;
+  --color-components-premium-badge-indigo-stroke-stop-100: #6172F3;
+  --color-components-premium-badge-indigo-text-stop-0: #F5F8FF;
+  --color-components-premium-badge-indigo-text-stop-100: #E0EAFF;
+  --color-components-premium-badge-indigo-glow: #2D3282;
+  --color-components-premium-badge-indigo-glow-hover: #A4BCFD;
+  --color-components-premium-badge-indigo-bg-stop-0-hover: #6172F3;
+  --color-components-premium-badge-indigo-bg-stop-100-hover: #2D31A6;
+  --color-components-premium-badge-indigo-stroke-stop-0-hover: #FFFFFFF2;
+  --color-components-premium-badge-indigo-stroke-stop-100-hover: #2D31A6;
+
+  --color-components-premium-badge-grey-bg-stop-0: #98A2B2;
+  --color-components-premium-badge-grey-bg-stop-100: #676F83;
+  --color-components-premium-badge-grey-stroke-stop-0: #FFFFFFF2;
+  --color-components-premium-badge-grey-stroke-stop-100: #676F83;
+  --color-components-premium-badge-grey-text-stop-0: #FCFCFD;
+  --color-components-premium-badge-grey-text-stop-100: #F2F4F7;
+  --color-components-premium-badge-grey-glow: #101828;
+  --color-components-premium-badge-grey-glow-hover: #D0D5DC;
+  --color-components-premium-badge-grey-bg-stop-0-hover: #676F83;
+  --color-components-premium-badge-grey-bg-stop-100-hover: #354052;
+  --color-components-premium-badge-grey-stroke-stop-0-hover: #FFFFFFF2;
+  --color-components-premium-badge-grey-stroke-stop-100-hover: #354052;
+
+  --color-components-premium-badge-orange-bg-stop-0: #FF692E;
+  --color-components-premium-badge-orange-bg-stop-100: #E04F16;
+  --color-components-premium-badge-orange-stroke-stop-0: #FFFFFFF2;
+  --color-components-premium-badge-orange-stroke-stop-100: #E62E05;
+  --color-components-premium-badge-orange-text-stop-0: #FEFAF5;
+  --color-components-premium-badge-orange-text-stop-100: #FDEAD7;
+  --color-components-premium-badge-orange-glow: #772917;
+  --color-components-premium-badge-orange-glow-hover: #F7B27A;
+  --color-components-premium-badge-orange-bg-stop-0-hover: #FF4405;
+  --color-components-premium-badge-orange-bg-stop-100-hover: #B93815;
+  --color-components-premium-badge-orange-stroke-stop-0-hover: #FFFFFFF2;
+  --color-components-premium-badge-orange-stroke-stop-100-hover: #BC1B06;
+
+  --color-components-progress-bar-bg: #155AEF0A;
+  --color-components-progress-bar-progress: #155AEF24;
+  --color-components-progress-bar-border: #1018280A;
+  --color-components-progress-bar-progress-solid: #296DFF;
+  --color-components-progress-bar-progress-highlight: #155AEF33;
+
+  --color-components-icon-bg-red-solid: #D92D20;
+  --color-components-icon-bg-rose-solid: #E31B54;
+  --color-components-icon-bg-pink-solid: #DD2590;
+  --color-components-icon-bg-orange-dark-solid: #FF4405;
+  --color-components-icon-bg-yellow-solid: #EAAA08;
+  --color-components-icon-bg-green-solid: #4CA30D;
+  --color-components-icon-bg-teal-solid: #0E9384;
+  --color-components-icon-bg-blue-light-solid: #0BA5EC;
+  --color-components-icon-bg-blue-solid: #155AEF;
+  --color-components-icon-bg-indigo-solid: #444CE7;
+  --color-components-icon-bg-violet-solid: #7839EE;
+  --color-components-icon-bg-midnight-solid: #828DAD;
+  --color-components-icon-bg-rose-soft: #FFF1F3;
+  --color-components-icon-bg-pink-soft: #FDF2FA;
+  --color-components-icon-bg-orange-dark-soft: #FFF4ED;
+  --color-components-icon-bg-yellow-soft: #FEFBE8;
+  --color-components-icon-bg-green-soft: #F3FEE7;
+  --color-components-icon-bg-teal-soft: #F0FDF9;
+  --color-components-icon-bg-blue-light-soft: #F0F9FF;
+  --color-components-icon-bg-blue-soft: #EFF4FF;
+  --color-components-icon-bg-indigo-soft: #EEF4FF;
+  --color-components-icon-bg-violet-soft: #F5F3FF;
+  --color-components-icon-bg-midnight-soft: #F0F2F5;
+  --color-components-icon-bg-red-soft: #FEF3F2;
+  --color-components-icon-bg-orange-solid: #F79009;
+  --color-components-icon-bg-orange-soft: #FFFAEB;
 
   --color-text-primary: #101828;
   --color-text-secondary: #354052;
@@ -302,6 +410,7 @@ html[data-theme="light"] {
   --color-background-overlay-alt: #10182866;
   --color-background-surface-white: #FFFFFFF2;
   --color-background-overlay-destructive: #F044384D;
+  --color-background-overlay-backdrop: #F2F4F7F2;
 
   --color-shadow-shadow-1: #09090B08;
   --color-shadow-shadow-3: #09090B0D;
@@ -317,6 +426,7 @@ html[data-theme="light"] {
   --color-workflow-block-border: #FFFFFF;
   --color-workflow-block-parma-bg: #F2F4F7;
   --color-workflow-block-bg: #FCFCFD;
+  --color-workflow-block-bg-transparent: #FCFCFDE5;
   --color-workflow-block-border-highlight: #155AEF24;
 
   --color-workflow-canvas-workflow-dot-color: #8585AD26;
@@ -436,6 +546,7 @@ html[data-theme="light"] {
   --color-util-colors-orange-orange-500: #EF6820;
   --color-util-colors-orange-orange-600: #E04F16;
   --color-util-colors-orange-orange-700: #B93815;
+  --color-util-colors-orange-orange-100-transparent: #FDEAD700;
 
   --color-util-colors-pink-pink-50: #FDF2FA;
   --color-util-colors-pink-pink-100: #FCE7F6;
@@ -610,6 +721,17 @@ html[data-theme="light"] {
 
   --color-third-party-LangChain: #1C3C3C;
   --color-third-party-Langfuse: #000000;
-
   --color-third-party-Github: #1B1F24;
+  --color-third-party-Github-tertiary: #1B1F24;
+  --color-third-party-Github-secondary: #1B1F24;
+  --color-third-party-model-bg-openai: #E3E5E8;
+  --color-third-party-model-bg-anthropic: #EEEDE7;
+  --color-third-party-model-bg-default: #F9FAFB;
+
+  --color-third-party-aws: #141F2E;
+  --color-third-party-aws-alt: #0F1824;
+
+  --color-saas-background: #FCFCFD;
+  --color-saas-pricing-grid-bg: #C8CEDA80;
+
 }

+ 130 - 8
web/themes/tailwind-theme-var-define.ts

@@ -85,6 +85,10 @@ const vars = {
   'components-button-secondary-accent-border-hover': 'var(--color-components-button-secondary-accent-border-hover)',
   'components-button-secondary-accent-border-disabled': 'var(--color-components-button-secondary-accent-border-disabled)',
 
+  'components-button-indigo-bg': 'var(--color-components-button-indigo-bg)',
+  'components-button-indigo-bg-hover': 'var(--color-components-button-indigo-bg-hover)',
+  'components-button-indigo-bg-disabled': 'var(--color-components-button-indigo-bg-disabled)',
+
   'components-checkbox-icon': 'var(--color-components-checkbox-icon)',
   'components-checkbox-icon-disabled': 'var(--color-components-checkbox-icon-disabled)',
   'components-checkbox-bg': 'var(--color-components-checkbox-bg)',
@@ -95,6 +99,7 @@ const vars = {
   'components-checkbox-border-disabled': 'var(--color-components-checkbox-border-disabled)',
   'components-checkbox-bg-unchecked': 'var(--color-components-checkbox-bg-unchecked)',
   'components-checkbox-bg-unchecked-hover': 'var(--color-components-checkbox-bg-unchecked-hover)',
+  'components-checkbox-bg-disabled-checked': 'var(--color-components-checkbox-bg-disabled-checked)',
 
   'components-radio-border-checked': 'var(--color-components-radio-border-checked)',
   'components-radio-border-checked-hover': 'var(--color-components-radio-border-checked-hover)',
@@ -135,6 +140,9 @@ const vars = {
   'components-panel-on-panel-item-bg': 'var(--color-components-panel-on-panel-item-bg)',
   'components-panel-on-panel-item-bg-hover': 'var(--color-components-panel-on-panel-item-bg-hover)',
   'components-panel-on-panel-item-bg-alt': 'var(--color-components-panel-on-panel-item-bg-alt)',
+  'components-panel-on-panel-item-bg-transparent': 'var(--color-components-panel-on-panel-item-bg-transparent)',
+  'components-panel-on-panel-item-bg-hover-transparent': 'var(--color-components-panel-on-panel-item-bg-hover-transparent)',
+  'components-panel-on-panel-item-bg-destructive-hover-transparent': 'var(--color-components-panel-on-panel-item-bg-destructive-hover-transparent)',
 
   'components-panel-bg-transparent': 'var(--color-components-panel-bg-transparent)',
 
@@ -208,6 +216,8 @@ const vars = {
 
   'components-actionbar-bg': 'var(--color-components-actionbar-bg)',
   'components-actionbar-border': 'var(--color-components-actionbar-border)',
+  'components-actionbar-bg-accent': 'var(--color-components-actionbar-bg-accent)',
+  'components-actionbar-border-accent': 'var(--color-components-actionbar-border-accent)',
 
   'components-dropzone-bg-alt': 'var(--color-components-dropzone-bg-alt)',
   'components-dropzone-bg': 'var(--color-components-dropzone-bg)',
@@ -228,6 +238,14 @@ const vars = {
   'components-progress-gray-border': 'var(--color-components-progress-gray-border)',
   'components-progress-gray-bg': 'var(--color-components-progress-gray-bg)',
 
+  'components-progress-warning-progress': 'var(--color-components-progress-warning-progress)',
+  'components-progress-warning-border': 'var(--color-components-progress-warning-border)',
+  'components-progress-warning-bg': 'var(--color-components-progress-warning-bg)',
+
+  'components-progress-error-progress': 'var(--color-components-progress-error-progress)',
+  'components-progress-error-border': 'var(--color-components-progress-error-border)',
+  'components-progress-error-bg': 'var(--color-components-progress-error-bg)',
+
   'components-chat-input-audio-bg': 'var(--color-components-chat-input-audio-bg)',
   'components-chat-input-audio-wave-default': 'var(--color-components-chat-input-audio-wave-default)',
   'components-chat-input-bg-mask-1': 'var(--color-components-chat-input-bg-mask-1)',
@@ -236,13 +254,103 @@ const vars = {
   'components-chat-input-audio-wave-active': 'var(--color-components-chat-input-audio-wave-active)',
   'components-chat-input-audio-bg-alt': 'var(--color-components-chat-input-audio-bg-alt)',
 
-  'components-Avatar-shape-fill-stop-0': 'var(--color-components-Avatar-shape-fill-stop-0)',
-  'components-Avatar-shape-fill-stop-100': 'var(--color-components-Avatar-shape-fill-stop-100)',
-
-  'components-Avatar-bg-mask-stop-0': 'var(--color-components-Avatar-bg-mask-stop-0)',
-  'components-Avatar-bg-mask-stop-100': 'var(--color-components-Avatar-bg-mask-stop-100)',
-
-  'components-Avatar-default-avatar-bg': 'var(--color-components-Avatar-default-avatar-bg)',
+  'components-avatar-shape-fill-stop-0': 'var(--color-components-avatar-shape-fill-stop-0)',
+  'components-avatar-shape-fill-stop-100': 'var(--color-components-avatar-shape-fill-stop-100)',
+
+  'components-avatar-bg-mask-stop-0': 'var(--color-components-avatar-bg-mask-stop-0)',
+  'components-avatar-bg-mask-stop-100': 'var(--color-components-avatar-bg-mask-stop-100)',
+
+  'components-avatar-default-avatar-bg': 'var(--color-components-avatar-default-avatar-bg)',
+  'components-avatar-mask-darkmode-dimmed': 'var(--color-components-avatar-mask-darkmode-dimmed)',
+
+  'components-label-gray': 'var(--color-components-label-gray)',
+
+  'components-premium-badge-blue-bg-stop-0': 'var(--color-components-premium-badge-blue-bg-stop-0)',
+  'components-premium-badge-blue-bg-stop-100': 'var(--color-components-premium-badge-blue-bg-stop-100)',
+  'components-premium-badge-blue-stroke-stop-0': 'var(--color-components-premium-badge-blue-stroke-stop-0)',
+  'components-premium-badge-blue-stroke-stop-100': 'var(--color-components-premium-badge-blue-stroke-stop-100)',
+  'components-premium-badge-blue-text-stop-0': 'var(--color-components-premium-badge-blue-text-stop-0)',
+  'components-premium-badge-blue-text-stop-100': 'var(--color-components-premium-badge-blue-text-stop-100)',
+  'components-premium-badge-blue-glow': 'var(--color-components-premium-badge-blue-glow)',
+  'components-premium-badge-blue-bg-stop-0-hover': 'var(--color-components-premium-badge-blue-bg-stop-0-hover)',
+  'components-premium-badge-blue-bg-stop-100-hover': 'var(--color-components-premium-badge-blue-bg-stop-100-hover)',
+  'components-premium-badge-blue-glow-hover': 'var(--color-components-premium-badge-blue-glow-hover)',
+  'components-premium-badge-blue-stroke-stop-0-hover': 'var(--color-components-premium-badge-blue-stroke-stop-0-hover)',
+  'components-premium-badge-blue-stroke-stop-100-hover': 'var(--color-components-premium-badge-blue-stroke-stop-100-hover)',
+
+  'components-premium-badge-highlight-stop-0': 'var(--color-components-premium-badge-highlight-stop-0)',
+  'components-premium-badge-highlight-stop-100': 'var(--color-components-premium-badge-highlight-stop-100)',
+  'components-premium-badge-indigo-bg-stop-0': 'var(--color-components-premium-badge-indigo-bg-stop-0)',
+  'components-premium-badge-indigo-bg-stop-100': 'var(--color-components-premium-badge-indigo-bg-stop-100)',
+  'components-premium-badge-indigo-stroke-stop-0': 'var(--color-components-premium-badge-indigo-stroke-stop-0)',
+  'components-premium-badge-indigo-stroke-stop-100': 'var(--color-components-premium-badge-indigo-stroke-stop-100)',
+  'components-premium-badge-indigo-text-stop-0': 'var(--color-components-premium-badge-indigo-text-stop-0)',
+  'components-premium-badge-indigo-text-stop-100': 'var(--color-components-premium-badge-indigo-text-stop-100)',
+  'components-premium-badge-indigo-glow': 'var(--color-components-premium-badge-indigo-glow)',
+  'components-premium-badge-indigo-glow-hover': 'var(--color-components-premium-badge-indigo-glow-hover)',
+  'components-premium-badge-indigo-bg-stop-0-hover': 'var(--color-components-premium-badge-indigo-bg-stop-0-hover)',
+  'components-premium-badge-indigo-bg-stop-100-hover': 'var(--color-components-premium-badge-indigo-bg-stop-100-hover)',
+  'components-premium-badge-indigo-stroke-stop-0-hover': 'var(--color-components-premium-badge-indigo-stroke-stop-0-hover)',
+  'components-premium-badge-indigo-stroke-stop-100-hover': 'var(--color-components-premium-badge-indigo-stroke-stop-100-hover)',
+
+  'components-premium-badge-grey-bg-stop-0': 'var(--color-components-premium-badge-grey-bg-stop-0)',
+  'components-premium-badge-grey-bg-stop-100': 'var(--color-components-premium-badge-grey-bg-stop-100)',
+  'components-premium-badge-grey-stroke-stop-0': 'var(--color-components-premium-badge-grey-stroke-stop-0)',
+  'components-premium-badge-grey-stroke-stop-100': 'var(--color-components-premium-badge-grey-stroke-stop-100)',
+  'components-premium-badge-grey-text-stop-0': 'var(--color-components-premium-badge-grey-text-stop-0)',
+  'components-premium-badge-grey-text-stop-100': 'var(--color-components-premium-badge-grey-text-stop-100)',
+  'components-premium-badge-grey-glow': 'var(--color-components-premium-badge-grey-glow)',
+  'components-premium-badge-grey-glow-hover': 'var(--color-components-premium-badge-grey-glow-hover)',
+  'components-premium-badge-grey-bg-stop-0-hover': 'var(--color-components-premium-badge-grey-bg-stop-0-hover)',
+  'components-premium-badge-grey-bg-stop-100-hover': 'var(--color-components-premium-badge-grey-bg-stop-100-hover)',
+  'components-premium-badge-grey-stroke-stop-0-hover': 'var(--color-components-premium-badge-grey-stroke-stop-0-hover)',
+  'components-premium-badge-grey-stroke-stop-100-hover': 'var(--color-components-premium-badge-grey-stroke-stop-100-hover)',
+
+  'components-premium-badge-orange-bg-stop-0': 'var(--color-components-premium-badge-orange-bg-stop-0)',
+  'components-premium-badge-orange-bg-stop-100': 'var(--color-components-premium-badge-orange-bg-stop-100)',
+  'components-premium-badge-orange-stroke-stop-0': 'var(--color-components-premium-badge-orange-stroke-stop-0)',
+  'components-premium-badge-orange-stroke-stop-100': 'var(--color-components-premium-badge-orange-stroke-stop-100)',
+  'components-premium-badge-orange-text-stop-0': 'var(--color-components-premium-badge-orange-text-stop-0)',
+  'components-premium-badge-orange-text-stop-100': 'var(--color-components-premium-badge-orange-text-stop-100)',
+  'components-premium-badge-orange-glow': 'var(--color-components-premium-badge-orange-glow)',
+  'components-premium-badge-orange-glow-hover': 'var(--color-components-premium-badge-orange-glow-hover)',
+  'components-premium-badge-orange-bg-stop-0-hover': 'var(--color-components-premium-badge-orange-bg-stop-0-hover)',
+  'components-premium-badge-orange-bg-stop-100-hover': 'var(--color-components-premium-badge-orange-bg-stop-100-hover)',
+  'components-premium-badge-orange-stroke-stop-0-hover': 'var(--color-components-premium-badge-orange-stroke-stop-0-hover)',
+  'components-premium-badge-orange-stroke-stop-100-hover': 'var(--color-components-premium-badge-orange-stroke-stop-100-hover)',
+
+  'components-progress-bar-bg': 'var(--color-components-progress-bar-bg)',
+  'components-progress-bar-progress': 'var(--color-components-progress-bar-progress)',
+  'components-progress-bar-border': 'var(--color-components-progress-bar-border)',
+  'components-progress-bar-progress-solid': 'var(--color-components-progress-bar-progress-solid)',
+  'components-progress-bar-progress-highlight': 'var(--color-components-progress-bar-progress-highlight)',
+
+  'components-icon-bg-red-solid': 'var(--color-components-icon-bg-red-solid)',
+  'components-icon-bg-rose-solid': 'var(--color-components-icon-bg-rose-solid)',
+  'components-icon-bg-pink-solid': 'var(--color-components-icon-bg-pink-solid)',
+  'components-icon-bg-orange-dark-solid': 'var(--color-components-icon-bg-orange-dark-solid)',
+  'components-icon-bg-yellow-solid': 'var(--color-components-icon-bg-yellow-solid)',
+  'components-icon-bg-green-solid': 'var(--color-components-icon-bg-green-solid)',
+  'components-icon-bg-teal-solid': 'var(--color-components-icon-bg-teal-solid)',
+  'components-icon-bg-blue-light-solid': 'var(--color-components-icon-bg-blue-light-solid)',
+  'components-icon-bg-blue-solid': 'var(--color-components-icon-bg-blue-solid)',
+  'components-icon-bg-indigo-solid': 'var(--color-components-icon-bg-indigo-solid)',
+  'components-icon-bg-violet-solid': 'var(--color-components-icon-bg-violet-solid)',
+  'components-icon-bg-midnight-solid': 'var(--color-components-icon-bg-midnight-solid)',
+  'components-icon-bg-rose-soft': 'var(--color-components-icon-bg-rose-soft)',
+  'components-icon-bg-pink-soft': 'var(--color-components-icon-bg-pink-soft)',
+  'components-icon-bg-orange-dark-soft': 'var(--color-components-icon-bg-orange-dark-soft)',
+  'components-icon-bg-yellow-soft': 'var(--color-components-icon-bg-yellow-soft)',
+  'components-icon-bg-green-soft': 'var(--color-components-icon-bg-green-soft)',
+  'components-icon-bg-teal-soft': 'var(--color-components-icon-bg-teal-soft)',
+  'components-icon-bg-blue-light-soft': 'var(--color-components-icon-bg-blue-light-soft)',
+  'components-icon-bg-blue-soft': 'var(--color-components-icon-bg-blue-soft)',
+  'components-icon-bg-indigo-soft': 'var(--color-components-icon-bg-indigo-soft)',
+  'components-icon-bg-violet-soft': 'var(--color-components-icon-bg-violet-soft)',
+  'components-icon-bg-midnight-soft': 'var(--color-components-icon-bg-midnight-soft)',
+  'components-icon-bg-red-soft': 'var(--color-components-icon-bg-red-soft)',
+  'components-icon-bg-orange-solid': 'var(--color-components-icon-bg-orange-solid)',
+  'components-icon-bg-orange-soft': 'var(--color-components-icon-bg-orange-soft)',
 
   'text-primary': 'var(--color-text-primary)',
   'text-secondary': 'var(--color-text-secondary)',
@@ -302,6 +410,7 @@ const vars = {
   'background-overlay-alt': 'var(--color-background-overlay-alt)',
   'background-surface-white': 'var(--color-background-surface-white)',
   'background-overlay-destructive': 'var(--color-background-overlay-destructive)',
+  'background-overlay-backdrop': 'var(--color-background-overlay-backdrop)',
 
   'shadow-shadow-1': 'var(--color-shadow-shadow-1)',
   'shadow-shadow-3': 'var(--color-shadow-shadow-3)',
@@ -317,6 +426,7 @@ const vars = {
   'workflow-block-border': 'var(--color-workflow-block-border)',
   'workflow-block-parma-bg': 'var(--color-workflow-block-parma-bg)',
   'workflow-block-bg': 'var(--color-workflow-block-bg)',
+  'workflow-block-bg-transparent': 'var(--color-workflow-block-bg-transparent)',
   'workflow-block-border-highlight': 'var(--color-workflow-block-border-highlight)',
 
   'workflow-canvas-workflow-dot-color': 'var(--color-workflow-canvas-workflow-dot-color)',
@@ -436,6 +546,7 @@ const vars = {
   'util-colors-orange-orange-500': 'var(--color-util-colors-orange-orange-500)',
   'util-colors-orange-orange-600': 'var(--color-util-colors-orange-orange-600)',
   'util-colors-orange-orange-700': 'var(--color-util-colors-orange-orange-700)',
+  'util-colors-orange-orange-100-transparent': 'var(--color-util-colors-orange-orange-100-transparent)',
 
   'util-colors-pink-pink-50': 'var(--color-util-colors-pink-pink-50)',
   'util-colors-pink-pink-100': 'var(--color-util-colors-pink-pink-100)',
@@ -611,6 +722,17 @@ const vars = {
   'third-party-LangChain': 'var(--color-third-party-LangChain)',
   'third-party-Langfuse': 'var(--color-third-party-Langfuse)',
   'third-party-Github': 'var(--color-third-party-Github)',
-}
+  'third-party-Github-tertiary': 'var(--color-third-party-Github-tertiary)',
+  'third-party-Github-secondary': 'var(--color-third-party-Github-secondary)',
+  'third-party-model-bg-openai': 'var(--color-third-party-model-bg-openai)',
+  'third-party-model-bg-anthropic': 'var(--color-third-party-model-bg-anthropic)',
+  'third-party-model-bg-default': 'var(--color-third-party-model-bg-default)',
+
+  'third-party-aws': 'var(--color-third-party-aws)',
+  'third-party-aws-alt': 'var(--color-third-party-aws-alt)',
 
+  'saas-background': 'var(--color-saas-background)',
+  'saas-pricing-grid-bg': 'var(--color-saas-pricing-grid-bg)',
+
+}
 export default vars