@yancyyu/openhermit 1.6.39 → 1.6.40

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 (137) hide show
  1. package/dist-renderer/assets/{ProjectEditorOverlay-krO5vQxX.js → ProjectEditorOverlay-CemDOX-3.js} +3 -3
  2. package/dist-renderer/assets/{TeamGraphOverlay-DqhQzcTr.js → TeamGraphOverlay-hPY770Db.js} +1 -1
  3. package/dist-renderer/assets/{_basePickBy-B7kSYPxr.js → _basePickBy-BHHrJT1i.js} +1 -1
  4. package/dist-renderer/assets/{_baseUniq-CnjxqwAk.js → _baseUniq-CWErBtke.js} +1 -1
  5. package/dist-renderer/assets/{arc-CLeZuINP.js → arc-C_o2_Uv8.js} +1 -1
  6. package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-QKtqaqdY.js → architectureDiagram-VXUJARFQ-DUW0LI3t.js} +1 -1
  7. package/dist-renderer/assets/{blockDiagram-VD42YOAC-BqdrzO_f.js → blockDiagram-VD42YOAC-CWbCE9hQ.js} +1 -1
  8. package/dist-renderer/assets/{c4Diagram-YG6GDRKO-gwPlCxDC.js → c4Diagram-YG6GDRKO-BjLadrfV.js} +1 -1
  9. package/dist-renderer/assets/channel-DyP9YlCF.js +1 -0
  10. package/dist-renderer/assets/{chunk-4BX2VUAB-C6XLurL4.js → chunk-4BX2VUAB-CPnvjZl9.js} +1 -1
  11. package/dist-renderer/assets/{chunk-55IACEB6-Ds6quhEP.js → chunk-55IACEB6-OlL47yXQ.js} +1 -1
  12. package/dist-renderer/assets/{chunk-B4BG7PRW-5UlA1_e9.js → chunk-B4BG7PRW-DTasjbm8.js} +1 -1
  13. package/dist-renderer/assets/{chunk-DI55MBZ5-ywFrqIsY.js → chunk-DI55MBZ5-C5_Xaqkk.js} +1 -1
  14. package/dist-renderer/assets/{chunk-FMBD7UC4-C7ifUA17.js → chunk-FMBD7UC4-NdoM4DMR.js} +1 -1
  15. package/dist-renderer/assets/{chunk-QN33PNHL-BxGCo80U.js → chunk-QN33PNHL-C8Fybejy.js} +1 -1
  16. package/dist-renderer/assets/{chunk-QZHKN3VN-B2CuaZs6.js → chunk-QZHKN3VN-E98TYFXJ.js} +1 -1
  17. package/dist-renderer/assets/{chunk-TZMSLE5B-Ds1hInvp.js → chunk-TZMSLE5B-h4lFgkIq.js} +1 -1
  18. package/dist-renderer/assets/classDiagram-2ON5EDUG-BqffFTae.js +1 -0
  19. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-BqffFTae.js +1 -0
  20. package/dist-renderer/assets/clone-MPcKWs2O.js +1 -0
  21. package/dist-renderer/assets/{cose-bilkent-S5V4N54A-Cz1GVtLp.js → cose-bilkent-S5V4N54A-DtQ7fkrs.js} +1 -1
  22. package/dist-renderer/assets/{dagre-6UL2VRFP-BrmR-P4h.js → dagre-6UL2VRFP-CN-nL_z4.js} +1 -1
  23. package/dist-renderer/assets/{diagram-PSM6KHXK-DbNjC5Rg.js → diagram-PSM6KHXK-DVJtqmm-.js} +1 -1
  24. package/dist-renderer/assets/{diagram-QEK2KX5R-qkRX5_Mq.js → diagram-QEK2KX5R-DlxHxyXh.js} +1 -1
  25. package/dist-renderer/assets/{diagram-S2PKOQOG-CyL5rCv2.js → diagram-S2PKOQOG-7dpzO6x6.js} +1 -1
  26. package/dist-renderer/assets/{erDiagram-Q2GNP2WA-Dox3-bA5.js → erDiagram-Q2GNP2WA-GP1TqsHi.js} +1 -1
  27. package/dist-renderer/assets/{flowDiagram-NV44I4VS-BtkaxlDL.js → flowDiagram-NV44I4VS-C7ZLETuH.js} +1 -1
  28. package/dist-renderer/assets/{ganttDiagram-JELNMOA3-Dhy_d9GK.js → ganttDiagram-JELNMOA3-CvPB68dH.js} +1 -1
  29. package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-B5XRhIQA.js → gitGraphDiagram-V2S2FVAM-B5yOm3w7.js} +1 -1
  30. package/dist-renderer/assets/{graph-CsoEwUhS.js → graph-smeyY1YZ.js} +1 -1
  31. package/dist-renderer/assets/{index-BWPWmJNo.js → index-BJx8XvG1.js} +1 -1
  32. package/dist-renderer/assets/{index-h17WuEyf.js → index-CQaXUAua.js} +1 -1
  33. package/dist-renderer/assets/{index-DGEBzLNT.js → index-CajRpxO2.js} +1 -1
  34. package/dist-renderer/assets/{index-Bu2R-Se7.js → index-ChG4rE-E.js} +35 -35
  35. package/dist-renderer/assets/index-DUd0uw9C.css +32 -0
  36. package/dist-renderer/assets/{index-D-3KgskL.js → index-IhmXZWqf.js} +1 -1
  37. package/dist-renderer/assets/{index-NhHNs2Oo.js → index-x_JkoDRH.js} +1 -1
  38. package/dist-renderer/assets/{infoDiagram-HS3SLOUP-hMGmNojH.js → infoDiagram-HS3SLOUP-D-hWRQGY.js} +1 -1
  39. package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-DXV2rBDl.js → journeyDiagram-XKPGCS4Q-Bb6W8rUG.js} +1 -1
  40. package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-Bf99WLRy.js → kanban-definition-3W4ZIXB7-CnHdUX0q.js} +1 -1
  41. package/dist-renderer/assets/{layout-C3XWrpwo.js → layout-pqss_zkI.js} +1 -1
  42. package/dist-renderer/assets/{linear-OEEcn8KN.js → linear-B1mFITNh.js} +1 -1
  43. package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-Dpi3S2x4.js → mindmap-definition-VGOIOE7T-DTD9q7-D.js} +1 -1
  44. package/dist-renderer/assets/{pieDiagram-ADFJNKIX-xTPPhtNx.js → pieDiagram-ADFJNKIX-Df3mhrn7.js} +1 -1
  45. package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-euniyDlz.js → quadrantDiagram-AYHSOK5B-B1FZ09vH.js} +1 -1
  46. package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-D9Uiw4kF.js → requirementDiagram-UZGBJVZJ-aEO78thZ.js} +1 -1
  47. package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-CySU4nED.js → sankeyDiagram-TZEHDZUN-6Ui--jp-.js} +1 -1
  48. package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-JVGpET6V.js → sequenceDiagram-WL72ISMW-DF4Q1cAM.js} +1 -1
  49. package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-B2FY5qqi.js → stateDiagram-FKZM4ZOC-BqA2BI8C.js} +1 -1
  50. package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-DcoMiR8H.js → stateDiagram-v2-4FDKWEC3-Cs2ZtUD2.js} +1 -1
  51. package/dist-renderer/assets/{timeline-definition-IT6M3QCI-DmycNUUe.js → timeline-definition-IT6M3QCI-DoOkw_A8.js} +1 -1
  52. package/dist-renderer/assets/{treemap-GDKQZRPO-DPq4gZuB.js → treemap-GDKQZRPO-DUe26QdD.js} +1 -1
  53. package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-J6VVJzRq.js → xychartDiagram-PRI3JC2R-BKCnj5Xn.js} +1 -1
  54. package/dist-renderer/index.html +2 -2
  55. package/package.json +1 -1
  56. package/src/renderer/components/chat/ChatHistoryItem.tsx +1 -1
  57. package/src/renderer/components/chat/items/SubagentItem.tsx +2 -2
  58. package/src/renderer/components/chat/viewers/MermaidDiagram.tsx +2 -2
  59. package/src/renderer/components/common/ErrorBoundary.tsx +1 -1
  60. package/src/renderer/components/dashboard/CliStatusBanner.tsx +7 -7
  61. package/src/renderer/components/extensions/ExtensionStoreView.tsx +1 -1
  62. package/src/renderer/components/extensions/common/ExtensionToast.tsx +3 -3
  63. package/src/renderer/components/extensions/common/SourceBadge.tsx +1 -1
  64. package/src/renderer/components/extensions/plugins/CategoryChips.tsx +1 -1
  65. package/src/renderer/components/extensions/plugins/PluginCard.tsx +1 -1
  66. package/src/renderer/components/extensions/plugins/PluginDetailDialog.tsx +2 -2
  67. package/src/renderer/components/extensions/skills/SkillEditorDialog.tsx +1 -1
  68. package/src/renderer/components/layout/PaneResizeHandle.tsx +2 -2
  69. package/src/renderer/components/layout/Sidebar.tsx +2 -2
  70. package/src/renderer/components/layout/SortableTab.tsx +2 -2
  71. package/src/renderer/components/report/sections/CostSection.tsx +2 -2
  72. package/src/renderer/components/report/sections/InsightsSection.tsx +1 -1
  73. package/src/renderer/components/runtime/ProviderRuntimeBackendSelector.tsx +2 -2
  74. package/src/renderer/components/search/CommandPalette.tsx +4 -4
  75. package/src/renderer/components/settings/sections/CliStatusSection.tsx +1 -1
  76. package/src/renderer/components/sidebar/SessionFiltersPopover.tsx +1 -1
  77. package/src/renderer/components/sidebar/SessionItem.tsx +3 -3
  78. package/src/renderer/components/sidebar/SidebarSessions.tsx +2 -2
  79. package/src/renderer/components/sidebar/WorkspaceBrowser.tsx +1 -1
  80. package/src/renderer/components/team/CcSessionsSection.tsx +5 -5
  81. package/src/renderer/components/team/ClaudeLogsFilterPopover.tsx +1 -1
  82. package/src/renderer/components/team/ClaudeLogsPanel.tsx +1 -1
  83. package/src/renderer/components/team/CollapsibleTeamSection.tsx +1 -1
  84. package/src/renderer/components/team/ProcessesSection.tsx +2 -2
  85. package/src/renderer/components/team/TaskTooltip.tsx +2 -2
  86. package/src/renderer/components/team/TeamDetailView.tsx +1 -1
  87. package/src/renderer/components/team/TeamListFilterPopover.tsx +1 -1
  88. package/src/renderer/components/team/TeamListView.tsx +2 -2
  89. package/src/renderer/components/team/TeamSessionsSection.tsx +6 -6
  90. package/src/renderer/components/team/UnreadCommentsBadge.tsx +1 -1
  91. package/src/renderer/components/team/activity/ActivityItem.tsx +9 -9
  92. package/src/renderer/components/team/activity/ActivityTimeline.tsx +5 -5
  93. package/src/renderer/components/team/activity/LeadThoughtsGroup.tsx +3 -3
  94. package/src/renderer/components/team/activity/ReplyQuoteBlock.tsx +4 -4
  95. package/src/renderer/components/team/dialogs/CreateTaskDialog.tsx +2 -2
  96. package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +1 -1
  97. package/src/renderer/components/team/dialogs/PlatformBindingDialog.tsx +1 -1
  98. package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +1 -1
  99. package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +4 -4
  100. package/src/renderer/components/team/dialogs/SendMessageDialog.tsx +6 -6
  101. package/src/renderer/components/team/dialogs/SkipPermissionsCheckbox.tsx +6 -6
  102. package/src/renderer/components/team/dialogs/StatusHistoryTimeline.tsx +1 -1
  103. package/src/renderer/components/team/dialogs/TaskAttachments.tsx +1 -1
  104. package/src/renderer/components/team/dialogs/TaskCommentInput.tsx +6 -6
  105. package/src/renderer/components/team/dialogs/TaskCommentsSection.tsx +4 -4
  106. package/src/renderer/components/team/dialogs/TaskDetailDialog.tsx +3 -3
  107. package/src/renderer/components/team/editor/EditorFileTree.tsx +4 -4
  108. package/src/renderer/components/team/editor/EditorSearchPanel.tsx +1 -1
  109. package/src/renderer/components/team/editor/MarkdownSplitView.tsx +1 -1
  110. package/src/renderer/components/team/editor/NewFileDialog.tsx +1 -1
  111. package/src/renderer/components/team/editor/ProjectEditorOverlay.tsx +1 -1
  112. package/src/renderer/components/team/editor/SearchInFilesPanel.tsx +1 -1
  113. package/src/renderer/components/team/kanban/KanbanFilterPopover.tsx +4 -4
  114. package/src/renderer/components/team/kanban/KanbanSearchInput.tsx +1 -1
  115. package/src/renderer/components/team/kanban/KanbanSortPopover.tsx +5 -5
  116. package/src/renderer/components/team/kanban/KanbanTaskCard.tsx +4 -4
  117. package/src/renderer/components/team/members/MemberDraftRow.tsx +1 -1
  118. package/src/renderer/components/team/members/MemberStatsTab.tsx +2 -2
  119. package/src/renderer/components/team/members/MemberWorkspaceTab.tsx +1 -1
  120. package/src/renderer/components/team/messages/MessageComposer.tsx +2 -2
  121. package/src/renderer/components/team/messages/MessagesFilterPopover.tsx +1 -1
  122. package/src/renderer/components/team/messages/MessagesPanel.tsx +7 -7
  123. package/src/renderer/components/team/review/ChangeReviewDialog.tsx +1 -1
  124. package/src/renderer/components/team/schedule/ScheduleStatusBadge.tsx +1 -1
  125. package/src/renderer/components/team/sidebar/TeamSidebarRail.tsx +4 -4
  126. package/src/renderer/components/team/tasks/TaskRow.tsx +1 -1
  127. package/src/renderer/components/team/tools/SkillChip.tsx +1 -1
  128. package/src/renderer/components/team/tools/ToolsSection.tsx +1 -1
  129. package/src/renderer/components/ui/MemberSelect.tsx +2 -2
  130. package/src/renderer/components/ui/MentionSuggestionList.tsx +2 -2
  131. package/src/renderer/components/ui/MentionableTextarea.tsx +3 -3
  132. package/src/renderer/index.css +17 -17
  133. package/dist-renderer/assets/channel-DpMHF50r.js +0 -1
  134. package/dist-renderer/assets/classDiagram-2ON5EDUG-CBYCBVRl.js +0 -1
  135. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-CBYCBVRl.js +0 -1
  136. package/dist-renderer/assets/clone-DcMF6Psb.js +0 -1
  137. package/dist-renderer/assets/index-CnWV3BhG.css +0 -32
@@ -421,9 +421,9 @@ export const SendMessageDialog = ({
421
421
 
422
422
  <div className={quote ? 'flex flex-col' : 'contents'}>
423
423
  {quote ? (
424
- <div className="relative overflow-hidden rounded-t-md border border-b-0 border-blue-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-blue-500/20 dark:bg-blue-950/20">
424
+ <div className="relative overflow-hidden rounded-t-md border border-b-0 border-indigo-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-indigo-500/20 dark:bg-blue-950/20">
425
425
  {/* Decorative quotation mark */}
426
- <span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-blue-500/[0.08] dark:text-blue-400/[0.08]">
426
+ <span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-indigo-500/[0.08] dark:text-indigo-400/[0.08]">
427
427
  &ldquo;
428
428
  </span>
429
429
 
@@ -431,7 +431,7 @@ export const SendMessageDialog = ({
431
431
  <TooltipTrigger asChild>
432
432
  <button
433
433
  type="button"
434
- className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-blue-400/60 hover:text-blue-600 dark:text-blue-300/40 dark:hover:text-blue-200"
434
+ className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-indigo-400/60 hover:text-indigo-600 dark:text-indigo-300/40 dark:hover:text-blue-200"
435
435
  onClick={() => setQuote(undefined)}
436
436
  >
437
437
  <X size={12} />
@@ -441,7 +441,7 @@ export const SendMessageDialog = ({
441
441
  </Tooltip>
442
442
 
443
443
  <div className="mb-1 flex items-center gap-1.5">
444
- <span className="text-[10px] text-blue-600/70 dark:text-blue-300/60">
444
+ <span className="text-[10px] text-indigo-600/70 dark:text-indigo-300/60">
445
445
  正在回复
446
446
  </span>
447
447
  <MemberBadge name={quote.from} color={colorMap.get(quote.from)} size="sm" />
@@ -458,7 +458,7 @@ export const SendMessageDialog = ({
458
458
  {isQuoteLong ? (
459
459
  <button
460
460
  type="button"
461
- className="mt-0.5 text-[10px] text-blue-500 hover:text-blue-700 dark:text-blue-400/60 dark:hover:text-blue-300"
461
+ className="mt-0.5 text-[10px] text-indigo-500 hover:text-blue-700 dark:text-indigo-400/60 dark:hover:text-indigo-300"
462
462
  onClick={() => setQuoteExpanded((v) => !v)}
463
463
  >
464
464
  {quoteExpanded ? '收起' : '展开'}
@@ -487,7 +487,7 @@ export const SendMessageDialog = ({
487
487
  cornerAction={
488
488
  <button
489
489
  type="button"
490
- className="inline-flex shrink-0 items-center gap-1 rounded-full bg-blue-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-50"
490
+ className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
491
491
  disabled={!canSend}
492
492
  onClick={handleSubmit}
493
493
  >
@@ -33,13 +33,13 @@ export const SkipPermissionsCheckbox: React.FC<SkipPermissionsCheckboxProps> = (
33
33
  <div
34
34
  className="mt-1.5 rounded-md border px-3 py-2 text-xs"
35
35
  style={{
36
- backgroundColor: 'rgba(59, 130, 246, 0.08)',
37
- borderColor: 'rgba(59, 130, 246, 0.2)',
36
+ backgroundColor: 'rgba(99, 102, 241, 0.08)',
37
+ borderColor: 'rgba(99, 102, 241, 0.2)',
38
38
  color: 'var(--color-text-secondary)',
39
39
  }}
40
40
  >
41
41
  <div className="flex items-start gap-2">
42
- <Info className="mt-0.5 size-3.5 shrink-0 text-blue-400" />
42
+ <Info className="mt-0.5 size-3.5 shrink-0 text-indigo-400" />
43
43
  <p>启用自主模式后,所有工具都会直接执行,不再逐次请求确认。处理不可信代码时请谨慎。</p>
44
44
  </div>
45
45
  </div>
@@ -47,13 +47,13 @@ export const SkipPermissionsCheckbox: React.FC<SkipPermissionsCheckboxProps> = (
47
47
  <div
48
48
  className="mt-1.5 rounded-md border px-3 py-2 text-xs"
49
49
  style={{
50
- backgroundColor: 'rgba(59, 130, 246, 0.08)',
51
- borderColor: 'rgba(59, 130, 246, 0.2)',
50
+ backgroundColor: 'rgba(99, 102, 241, 0.08)',
51
+ borderColor: 'rgba(99, 102, 241, 0.2)',
52
52
  color: 'var(--color-text-secondary)',
53
53
  }}
54
54
  >
55
55
  <div className="flex items-start gap-2">
56
- <Info className="mt-0.5 size-3.5 shrink-0 text-blue-400" />
56
+ <Info className="mt-0.5 size-3.5 shrink-0 text-indigo-400" />
57
57
  <p>手动模式:每次工具调用都需要你实时批准或拒绝。</p>
58
58
  </div>
59
59
  </div>
@@ -203,7 +203,7 @@ function dotColorForStatus(status: TeamTaskStatus): string {
203
203
  case 'pending':
204
204
  return 'bg-zinc-500';
205
205
  case 'in_progress':
206
- return 'bg-blue-400';
206
+ return 'bg-indigo-400';
207
207
  case 'completed':
208
208
  return 'bg-emerald-400';
209
209
  case 'deleted':
@@ -241,7 +241,7 @@ export const TaskAttachments = ({
241
241
 
242
242
  {/* Drop zone indicator */}
243
243
  {dragOver ? (
244
- <div className="flex items-center justify-center rounded-md border-2 border-dashed border-blue-500/40 bg-blue-500/5 py-4 text-xs text-blue-400">
244
+ <div className="flex items-center justify-center rounded-md border-2 border-dashed border-indigo-500/40 bg-indigo-500/5 py-4 text-xs text-indigo-400">
245
245
  Drop image here
246
246
  </div>
247
247
  ) : null}
@@ -228,9 +228,9 @@ export const TaskCommentInput = ({
228
228
  return (
229
229
  <div>
230
230
  {replyTo ? (
231
- <div className="relative overflow-hidden rounded-t-md border border-b-0 border-blue-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-blue-500/20 dark:bg-blue-950/20">
231
+ <div className="relative overflow-hidden rounded-t-md border border-b-0 border-indigo-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-indigo-500/20 dark:bg-blue-950/20">
232
232
  {/* Decorative quotation mark */}
233
- <span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-blue-500/[0.08] dark:text-blue-400/[0.08]">
233
+ <span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-indigo-500/[0.08] dark:text-indigo-400/[0.08]">
234
234
  &ldquo;
235
235
  </span>
236
236
 
@@ -238,7 +238,7 @@ export const TaskCommentInput = ({
238
238
  <TooltipTrigger asChild>
239
239
  <button
240
240
  type="button"
241
- className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-blue-400/60 hover:text-blue-600 dark:text-blue-300/40 dark:hover:text-blue-200"
241
+ className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-indigo-400/60 hover:text-indigo-600 dark:text-indigo-300/40 dark:hover:text-blue-200"
242
242
  onClick={onClearReply}
243
243
  >
244
244
  <X size={12} />
@@ -248,7 +248,7 @@ export const TaskCommentInput = ({
248
248
  </Tooltip>
249
249
 
250
250
  <div className="mb-1 flex items-center gap-1.5">
251
- <span className="text-[10px] text-blue-600/70 dark:text-blue-300/60">正在回复</span>
251
+ <span className="text-[10px] text-indigo-600/70 dark:text-indigo-300/60">正在回复</span>
252
252
  <MemberBadge name={replyTo.author} color={colorMap.get(replyTo.author)} size="sm" />
253
253
  </div>
254
254
  <div
@@ -263,7 +263,7 @@ export const TaskCommentInput = ({
263
263
  {replyTo.text.length > LONG_QUOTE_THRESHOLD ? (
264
264
  <button
265
265
  type="button"
266
- className="mt-0.5 text-[10px] text-blue-500 hover:text-blue-700 dark:text-blue-400/60 dark:hover:text-blue-300"
266
+ className="mt-0.5 text-[10px] text-indigo-500 hover:text-blue-700 dark:text-indigo-400/60 dark:hover:text-indigo-300"
267
267
  onClick={() => setQuoteExpanded((v) => !v)}
268
268
  >
269
269
  {quoteExpanded ? '收起' : '展开'}
@@ -390,7 +390,7 @@ export const TaskCommentInput = ({
390
390
  </Tooltip>
391
391
  <button
392
392
  type="button"
393
- className="inline-flex shrink-0 items-center gap-1 rounded-full bg-blue-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-50"
393
+ className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
394
394
  disabled={!canSubmit}
395
395
  onClick={() => void handleSubmit()}
396
396
  >
@@ -223,7 +223,7 @@ export const TaskCommentsSection = ({
223
223
  comment.type === 'review_approved'
224
224
  ? 'border-y border-emerald-500/20 bg-emerald-500/5'
225
225
  : comment.type === 'review_request'
226
- ? 'border-y border-blue-500/20 bg-blue-500/5'
226
+ ? 'border-y border-indigo-500/20 bg-indigo-500/5'
227
227
  : '',
228
228
  ].join(' ')}
229
229
  style={
@@ -244,7 +244,7 @@ export const TaskCommentsSection = ({
244
244
  >
245
245
  <div className="mb-1 flex items-center gap-2 text-[10px] text-[var(--color-text-muted)]">
246
246
  {unreadCommentIds?.has(comment.id) ? (
247
- <span className="size-2 shrink-0 rounded-full bg-blue-500" />
247
+ <span className="size-2 shrink-0 rounded-full bg-indigo-500" />
248
248
  ) : null}
249
249
  <MemberBadge
250
250
  name={comment.author}
@@ -257,7 +257,7 @@ export const TaskCommentsSection = ({
257
257
  已批准
258
258
  </span>
259
259
  ) : comment.type === 'review_request' ? (
260
- <span className="inline-flex items-center gap-0.5 rounded-full bg-blue-500/15 px-1.5 py-0.5 text-[10px] font-medium text-blue-600 dark:text-blue-400">
260
+ <span className="inline-flex items-center gap-0.5 rounded-full bg-indigo-500/15 px-1.5 py-0.5 text-[10px] font-medium text-indigo-600 dark:text-indigo-400">
261
261
  <Eye size={10} />
262
262
  已请求审查
263
263
  </span>
@@ -440,7 +440,7 @@ export const TaskCommentsSection = ({
440
440
  cornerAction={
441
441
  <button
442
442
  type="button"
443
- className="inline-flex shrink-0 items-center gap-1 rounded-full bg-blue-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-50"
443
+ className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
444
444
  disabled={!canSubmit}
445
445
  onClick={() => void handleSubmit()}
446
446
  >
@@ -821,7 +821,7 @@ export const TaskDetailDialog = ({
821
821
  className={`flex items-center justify-between rounded-md px-3 py-2 text-xs ${
822
822
  currentTask.needsClarification === 'user'
823
823
  ? 'border border-red-500/20 bg-red-500/10 text-red-400'
824
- : 'border border-blue-500/20 bg-blue-500/10 text-blue-400'
824
+ : 'border border-indigo-500/20 bg-indigo-500/10 text-indigo-400'
825
825
  }`}
826
826
  >
827
827
  <span className="flex items-center gap-1.5">
@@ -953,7 +953,7 @@ export const TaskDetailDialog = ({
953
953
 
954
954
  {blocksIds.length > 0 ? (
955
955
  <div className="flex flex-wrap items-center gap-1.5">
956
- <span className="inline-flex items-center gap-0.5 text-xs text-blue-600 dark:text-blue-400">
956
+ <span className="inline-flex items-center gap-0.5 text-xs text-indigo-600 dark:text-indigo-400">
957
957
  <ArrowRightFromLine size={12} />
958
958
  阻塞
959
959
  </span>
@@ -971,7 +971,7 @@ export const TaskDetailDialog = ({
971
971
  className={`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${
972
972
  isCompleted
973
973
  ? 'bg-emerald-500/15 text-emerald-700 hover:bg-emerald-500/25 dark:text-emerald-400'
974
- : 'bg-blue-500/15 text-blue-600 hover:bg-blue-500/25 dark:text-blue-400'
974
+ : 'bg-indigo-500/15 text-indigo-600 hover:bg-indigo-500/25 dark:text-indigo-400'
975
975
  } cursor-pointer`}
976
976
  onClick={() => handleDependencyClick(id)}
977
977
  >
@@ -589,7 +589,7 @@ const RootDropZone = React.forwardRef<
589
589
  <div
590
590
  ref={combinedRef}
591
591
  className={`scrollbar-thin h-full overflow-y-auto transition-colors ${
592
- isDropTarget ? 'bg-blue-400/5 ring-1 ring-inset ring-blue-400/30' : ''
592
+ isDropTarget ? 'bg-indigo-400/5 ring-1 ring-inset ring-indigo-400/30' : ''
593
593
  }`}
594
594
  role="tree"
595
595
  >
@@ -709,8 +709,8 @@ const DraggableTreeItem = React.memo(
709
709
  className={`flex h-full cursor-pointer select-none items-center gap-1 truncate px-2 text-xs transition-colors hover:bg-surface-raised ${
710
710
  isSelected ? 'bg-surface-raised text-text' : 'text-text-secondary'
711
711
  } ${isDragging ? 'opacity-30' : ''} ${
712
- isDropTarget ? 'rounded bg-blue-400/10 ring-2 ring-blue-400/50' : ''
713
- } ${isInsideDropTarget && !isDropTarget ? 'border-l-2 border-l-blue-400/40 bg-blue-400/5' : ''}`}
712
+ isDropTarget ? 'rounded bg-indigo-400/10 ring-2 ring-indigo-400/50' : ''
713
+ } ${isInsideDropTarget && !isDropTarget ? 'border-l-2 border-l-indigo-400/40 bg-indigo-400/5' : ''}`}
714
714
  style={{ paddingLeft: `${visualDepth * INDENT_PX + 8}px` }}
715
715
  onClick={handleClick}
716
716
  onKeyDown={handleKeyDown}
@@ -843,7 +843,7 @@ const InlineRenameInput = ({
843
843
  }}
844
844
  onBlur={() => requestAnimationFrame(() => inputRef.current?.focus())}
845
845
  onClick={(e) => e.stopPropagation()}
846
- className="min-w-0 flex-1 rounded border border-blue-400/50 bg-surface px-1 py-0 text-xs text-text outline-none focus:ring-1 focus:ring-blue-400/50"
846
+ className="min-w-0 flex-1 rounded border border-indigo-400/50 bg-surface px-1 py-0 text-xs text-text outline-none focus:ring-1 focus:ring-indigo-400/50"
847
847
  />
848
848
  );
849
849
  };
@@ -76,7 +76,7 @@ const SearchToggleButton = React.memo(function SearchToggleButton({
76
76
  className={cn(
77
77
  'flex size-[22px] items-center justify-center rounded transition-colors',
78
78
  active
79
- ? 'bg-blue-500/20 text-blue-400'
79
+ ? 'bg-indigo-500/20 text-indigo-400'
80
80
  : 'text-[var(--color-text-muted)] hover:bg-[var(--color-surface-raised)] hover:text-[var(--color-text-secondary)]'
81
81
  )}
82
82
  onClick={onClick}
@@ -107,7 +107,7 @@ export const MarkdownSplitView = React.memo(function MarkdownSplitView({
107
107
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- resize handle
108
108
  <div
109
109
  className={`shrink-0 cursor-col-resize border-x border-border transition-colors ${
110
- isResizing ? 'bg-blue-500/50' : 'hover:bg-blue-500/30'
110
+ isResizing ? 'bg-indigo-500/50' : 'hover:bg-indigo-500/30'
111
111
  }`}
112
112
  style={{ width: HANDLE_WIDTH }}
113
113
  onMouseDown={handleMouseDown}
@@ -121,7 +121,7 @@ export const NewFileDialog = ({
121
121
  onKeyDown={handleKeyDown}
122
122
  onBlur={() => requestAnimationFrame(() => inputRef.current?.focus())}
123
123
  placeholder={type === 'file' ? '文件名...' : '文件夹名...'}
124
- className="min-w-0 flex-1 rounded border border-border-emphasis bg-surface px-1.5 py-0.5 text-xs text-text outline-none focus:border-blue-500"
124
+ className="min-w-0 flex-1 rounded border border-border-emphasis bg-surface px-1.5 py-0.5 text-xs text-text outline-none focus:border-indigo-500"
125
125
  aria-label={type === 'file' ? '新文件名' : '新文件夹名'}
126
126
  />
127
127
  </div>
@@ -720,7 +720,7 @@ export const ProjectEditorOverlay = ({
720
720
 
721
721
  {/* External change banner */}
722
722
  {activeTabId && externalChanges[activeTabId] && (
723
- <div className="flex shrink-0 items-center gap-2 border-b border-blue-400/30 bg-blue-100/50 px-3 py-1.5 text-xs text-blue-700 dark:border-blue-500/30 dark:bg-blue-500/10 dark:text-blue-300">
723
+ <div className="flex shrink-0 items-center gap-2 border-b border-indigo-400/30 bg-blue-100/50 px-3 py-1.5 text-xs text-blue-700 dark:border-indigo-500/30 dark:bg-indigo-500/10 dark:text-indigo-300">
724
724
  <RefreshCw className="size-3.5 shrink-0" />
725
725
  <span>
726
726
  {externalChanges[activeTabId] === 'delete'
@@ -193,7 +193,7 @@ export const SearchInFilesPanel = ({
193
193
  onClick={handleCaseSensitiveToggle}
194
194
  className={`rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${
195
195
  caseSensitive
196
- ? 'bg-blue-500/20 text-blue-400'
196
+ ? 'bg-indigo-500/20 text-indigo-400'
197
197
  : 'text-text-muted hover:bg-surface-raised'
198
198
  }`}
199
199
  aria-label="区分大小写"
@@ -91,7 +91,7 @@ export const KanbanFilterPopover = ({
91
91
  >
92
92
  <Filter size={14} />
93
93
  {activeCount > 0 && (
94
- <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-blue-500 text-[10px] font-medium text-white">
94
+ <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
95
95
  {activeCount}
96
96
  </span>
97
97
  )}
@@ -111,7 +111,7 @@ export const KanbanFilterPopover = ({
111
111
  type="button"
112
112
  className={`w-full rounded-md px-2 py-1.5 text-left text-xs transition-colors ${
113
113
  filter.sessionId === null
114
- ? 'bg-blue-500/15 text-blue-300'
114
+ ? 'bg-indigo-500/15 text-indigo-300'
115
115
  : 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
116
116
  }`}
117
117
  onClick={() => handleSessionSelect(null)}
@@ -128,12 +128,12 @@ export const KanbanFilterPopover = ({
128
128
  type="button"
129
129
  className={`flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs transition-colors ${
130
130
  isSelected
131
- ? 'bg-blue-500/15 text-blue-300'
131
+ ? 'bg-indigo-500/15 text-indigo-300'
132
132
  : 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
133
133
  }`}
134
134
  onClick={() => handleSessionSelect(isSelected ? null : session.id)}
135
135
  >
136
- {isLead && <Crown size={11} className="shrink-0 text-blue-400" />}
136
+ {isLead && <Crown size={11} className="shrink-0 text-indigo-400" />}
137
137
  <span className="truncate">{label}</span>
138
138
  </button>
139
139
  );
@@ -228,7 +228,7 @@ const TaskSuggestionItem = React.memo(function TaskSuggestionItem({
228
228
  case 'pending':
229
229
  return 'bg-zinc-500/15 text-zinc-400';
230
230
  case 'in_progress':
231
- return 'bg-blue-500/15 text-blue-400';
231
+ return 'bg-indigo-500/15 text-indigo-400';
232
232
  case 'completed':
233
233
  return 'bg-emerald-500/15 text-emerald-400';
234
234
  case 'deleted':
@@ -66,7 +66,7 @@ export const KanbanSortPopover = ({
66
66
  >
67
67
  <ArrowUpDown size={14} />
68
68
  {isNonDefault && (
69
- <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-blue-500 text-[10px] font-medium text-white">
69
+ <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
70
70
  1
71
71
  </span>
72
72
  )}
@@ -90,7 +90,7 @@ export const KanbanSortPopover = ({
90
90
  className={cn(
91
91
  'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-xs transition-colors',
92
92
  isSelected
93
- ? 'bg-blue-500/15 text-blue-300'
93
+ ? 'bg-indigo-500/15 text-indigo-300'
94
94
  : 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
95
95
  )}
96
96
  onClick={() => onSortChange({ field: option.field })}
@@ -98,7 +98,7 @@ export const KanbanSortPopover = ({
98
98
  <span
99
99
  className={cn(
100
100
  'shrink-0',
101
- isSelected ? 'text-blue-400' : 'text-[var(--color-text-muted)]'
101
+ isSelected ? 'text-indigo-400' : 'text-[var(--color-text-muted)]'
102
102
  )}
103
103
  >
104
104
  {option.icon}
@@ -108,14 +108,14 @@ export const KanbanSortPopover = ({
108
108
  <div
109
109
  className={cn(
110
110
  'text-[10px]',
111
- isSelected ? 'text-blue-300/70' : 'text-[var(--color-text-muted)]'
111
+ isSelected ? 'text-indigo-300/70' : 'text-[var(--color-text-muted)]'
112
112
  )}
113
113
  >
114
114
  {option.description}
115
115
  </div>
116
116
  </div>
117
117
  {isSelected && (
118
- <ArrowDownUp size={12} className="ml-auto shrink-0 text-blue-400" />
118
+ <ArrowDownUp size={12} className="ml-auto shrink-0 text-indigo-400" />
119
119
  )}
120
120
  </button>
121
121
  );
@@ -63,8 +63,8 @@ const DISPATCH_STATUS_STYLE: Record<string, { bg: string; text: string; label: s
63
63
  text: 'text-yellow-600 dark:text-yellow-400',
64
64
  label: '已派发',
65
65
  },
66
- received: { bg: 'bg-blue-500/15', text: 'text-blue-600 dark:text-blue-400', label: '已接收' },
67
- in_progress: { bg: 'bg-blue-500/15', text: 'text-blue-600 dark:text-blue-400', label: '执行中' },
66
+ received: { bg: 'bg-indigo-500/15', text: 'text-indigo-600 dark:text-indigo-400', label: '已接收' },
67
+ in_progress: { bg: 'bg-indigo-500/15', text: 'text-indigo-600 dark:text-indigo-400', label: '执行中' },
68
68
  completed: {
69
69
  bg: 'bg-emerald-500/15',
70
70
  text: 'text-emerald-600 dark:text-emerald-400',
@@ -355,7 +355,7 @@ export const KanbanTaskCard = memo(
355
355
  className={`mt-1 inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium ${
356
356
  task.needsClarification === 'user'
357
357
  ? 'bg-red-500/15 text-red-400'
358
- : 'bg-blue-500/15 text-blue-600 dark:text-blue-400'
358
+ : 'bg-indigo-500/15 text-indigo-600 dark:text-indigo-400'
359
359
  }`}
360
360
  >
361
361
  <HelpCircle size={10} />
@@ -392,7 +392,7 @@ export const KanbanTaskCard = memo(
392
392
 
393
393
  {hasBlocks ? (
394
394
  <div className="mb-2 flex flex-wrap items-center gap-1">
395
- <span className="inline-flex items-center gap-0.5 text-[10px] text-blue-600 dark:text-blue-400">
395
+ <span className="inline-flex items-center gap-0.5 text-[10px] text-indigo-600 dark:text-indigo-400">
396
396
  <ArrowRightFromLine size={10} />
397
397
  阻塞
398
398
  </span>
@@ -295,7 +295,7 @@ export const MemberDraftRow = ({
295
295
  )}
296
296
  工作流
297
297
  {!workflowExpanded && workflowDraft.value.trim() ? (
298
- <span className="absolute -right-1 -top-1 size-2 rounded-full bg-blue-500" />
298
+ <span className="absolute -right-1 -top-1 size-2 rounded-full bg-indigo-500" />
299
299
  ) : null}
300
300
  </Button>
301
301
  ) : null}
@@ -188,7 +188,7 @@ const ToolUsageBars = ({
188
188
  </span>
189
189
  <div className="h-3.5 flex-1 overflow-hidden rounded-sm bg-[var(--color-surface-raised)]">
190
190
  <div
191
- className="h-full rounded-sm bg-blue-500/40"
191
+ className="h-full rounded-sm bg-indigo-500/40"
192
192
  style={{ width: `${(count / maxCount) * 100}%` }}
193
193
  />
194
194
  </div>
@@ -241,7 +241,7 @@ const FilesTouchedSection = ({
241
241
  Files Touched ({validFiles.length})
242
242
  </p>
243
243
  {onShowAll && (
244
- <button className="text-[10px] text-blue-400 hover:text-blue-300" onClick={onShowAll}>
244
+ <button className="text-[10px] text-indigo-400 hover:text-indigo-300" onClick={onShowAll}>
245
245
  View All Changes
246
246
  </button>
247
247
  )}
@@ -90,7 +90,7 @@ export const MemberWorkspaceTab = ({
90
90
  </div>
91
91
  {onViewAllChanges && (
92
92
  <button
93
- className="flex items-center gap-1 text-[10px] text-blue-400 hover:text-blue-300"
93
+ className="flex items-center gap-1 text-[10px] text-indigo-400 hover:text-indigo-300"
94
94
  onClick={onViewAllChanges}
95
95
  >
96
96
  <FileDiff size={10} />
@@ -550,7 +550,7 @@ export const MessageComposer = ({
550
550
  </span>
551
551
  ) : null}
552
552
  {isSelected ? (
553
- <Check size={12} className="ml-auto shrink-0 text-blue-400" />
553
+ <Check size={12} className="ml-auto shrink-0 text-indigo-400" />
554
554
  ) : null}
555
555
  </button>
556
556
  );
@@ -640,7 +640,7 @@ export const MessageComposer = ({
640
640
  <span className="inline-flex">
641
641
  <button
642
642
  type="button"
643
- className="inline-flex shrink-0 items-center gap-1 rounded-full bg-blue-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-50"
643
+ className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
644
644
  disabled={!canSend}
645
645
  onClick={handleSend}
646
646
  >
@@ -122,7 +122,7 @@ export const MessagesFilterPopover = ({
122
122
  >
123
123
  <Filter size={14} />
124
124
  {activeCount > 0 && (
125
- <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-blue-500 text-[10px] font-medium text-white">
125
+ <span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
126
126
  {activeCount}
127
127
  </span>
128
128
  )}
@@ -566,7 +566,7 @@ export const MessagesPanel = memo(function MessagesPanel({
566
566
  className={cn(
567
567
  'shrink-0 rounded-full border px-2 py-0.5 transition-colors',
568
568
  quickParticipantFilter === null
569
- ? 'border-blue-500/40 bg-blue-500/10 text-blue-500'
569
+ ? 'border-indigo-500/40 bg-indigo-500/10 text-indigo-500'
570
570
  : 'border-[var(--color-border)] text-[var(--color-text-muted)] hover:text-[var(--color-text)]'
571
571
  )}
572
572
  onClick={() => setParticipantFilter(null)}
@@ -580,7 +580,7 @@ export const MessagesPanel = memo(function MessagesPanel({
580
580
  className={cn(
581
581
  'shrink-0 rounded-full border px-2 py-0.5 transition-colors',
582
582
  quickParticipantFilter === participant
583
- ? 'border-blue-500/40 bg-blue-500/10 text-blue-500'
583
+ ? 'border-indigo-500/40 bg-indigo-500/10 text-indigo-500'
584
584
  : 'border-[var(--color-border)] text-[var(--color-text-muted)] hover:text-[var(--color-text)]'
585
585
  )}
586
586
  onClick={() =>
@@ -1056,7 +1056,7 @@ export const MessagesPanel = memo(function MessagesPanel({
1056
1056
  <TooltipTrigger asChild>
1057
1057
  <Badge
1058
1058
  variant="secondary"
1059
- className="bg-blue-500/20 px-1.5 py-0.5 text-[10px] font-normal leading-none text-blue-600 dark:text-blue-400"
1059
+ className="bg-indigo-500/20 px-1.5 py-0.5 text-[10px] font-normal leading-none text-indigo-600 dark:text-indigo-400"
1060
1060
  >
1061
1061
  {messagesUnreadCount} 条新消息
1062
1062
  </Badge>
@@ -1069,7 +1069,7 @@ export const MessagesPanel = memo(function MessagesPanel({
1069
1069
  <TooltipTrigger asChild>
1070
1070
  <button
1071
1071
  type="button"
1072
- className="flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-blue-400 transition-colors hover:bg-blue-500/10"
1072
+ className="flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-indigo-400 transition-colors hover:bg-indigo-500/10"
1073
1073
  onClick={handleMarkAllRead}
1074
1074
  >
1075
1075
  <CheckCheck size={12} />
@@ -1291,7 +1291,7 @@ export const MessagesPanel = memo(function MessagesPanel({
1291
1291
  <TooltipTrigger asChild>
1292
1292
  <Badge
1293
1293
  variant="secondary"
1294
- className="bg-blue-500/20 px-1 py-0 text-[9px] font-normal leading-none text-blue-600 dark:text-blue-400"
1294
+ className="bg-indigo-500/20 px-1 py-0 text-[9px] font-normal leading-none text-indigo-600 dark:text-indigo-400"
1295
1295
  >
1296
1296
  {messagesUnreadCount} 条新消息
1297
1297
  </Badge>
@@ -1309,7 +1309,7 @@ export const MessagesPanel = memo(function MessagesPanel({
1309
1309
  <Button
1310
1310
  variant="ghost"
1311
1311
  size="sm"
1312
- className="size-[22px] p-0 text-blue-400 hover:bg-blue-500/10 hover:text-blue-300"
1312
+ className="size-[22px] p-0 text-indigo-400 hover:bg-indigo-500/10 hover:text-indigo-300"
1313
1313
  onClick={handleMarkAllRead}
1314
1314
  aria-label="将全部消息标为已读"
1315
1315
  >
@@ -1542,7 +1542,7 @@ export const MessagesPanel = memo(function MessagesPanel({
1542
1542
  <TooltipTrigger asChild>
1543
1543
  <button
1544
1544
  type="button"
1545
- className="pointer-events-auto flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-blue-400 transition-colors hover:bg-blue-500/10"
1545
+ className="pointer-events-auto flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-indigo-400 transition-colors hover:bg-indigo-500/10"
1546
1546
  onClick={(e) => {
1547
1547
  e.stopPropagation();
1548
1548
  handleMarkAllRead();
@@ -106,7 +106,7 @@ export const ChangeReviewDialog: React.FC<ChangeReviewDialogProps> = ({
106
106
  ? 'flex items-center gap-2 rounded-md bg-emerald-500/5 px-3 py-2 font-mono text-xs text-emerald-400'
107
107
  : status === 'deleted'
108
108
  ? 'flex items-center gap-2 rounded-md bg-red-500/5 px-3 py-2 font-mono text-xs text-red-400'
109
- : 'flex items-center gap-2 rounded-md bg-blue-500/5 px-3 py-2 font-mono text-xs text-blue-400'
109
+ : 'flex items-center gap-2 rounded-md bg-indigo-500/5 px-3 py-2 font-mono text-xs text-indigo-400'
110
110
  }
111
111
  >
112
112
  <span className="w-12 shrink-0 text-center font-sans text-[10px] uppercase tracking-wide opacity-60">
@@ -36,7 +36,7 @@ export const ScheduleStatusBadge = ({ status }: ScheduleStatusBadgeProps): React
36
36
 
37
37
  const RUN_STATUS_CONFIG: Record<ScheduleRunStatus, { label: string; className: string }> = {
38
38
  pending: { label: '等待中', className: 'text-zinc-400' },
39
- warming_up: { label: '预热中', className: 'text-blue-400' },
39
+ warming_up: { label: '预热中', className: 'text-indigo-400' },
40
40
  warm: { label: '已预热', className: 'text-cyan-400' },
41
41
  running: { label: '运行中', className: 'text-emerald-400' },
42
42
  completed: { label: '已完成', className: 'text-emerald-400' },
@@ -30,14 +30,14 @@ export const TeamSidebarRail = memo(function TeamSidebarRail({
30
30
  const [logsOpen, setLogsOpen] = useState(false);
31
31
  const logsSeparator = logsOpen ? (
32
32
  <div
33
- className={`group relative h-3 shrink-0 cursor-row-resize ${isLogsResizing ? 'bg-blue-500/10' : ''}`}
33
+ className={`group relative h-3 shrink-0 cursor-row-resize ${isLogsResizing ? 'bg-indigo-500/10' : ''}`}
34
34
  onMouseDown={onLogsResizeMouseDown}
35
35
  >
36
36
  <div
37
37
  className={`absolute inset-x-0 top-1/2 h-0.5 -translate-y-1/2 transition-colors ${
38
38
  isLogsResizing
39
- ? 'bg-blue-500'
40
- : 'bg-[var(--color-text-muted)]/35 group-hover:bg-blue-500/90'
39
+ ? 'bg-indigo-500'
40
+ : 'bg-[var(--color-text-muted)]/35 group-hover:bg-indigo-500/90'
41
41
  }`}
42
42
  />
43
43
  </div>
@@ -60,7 +60,7 @@ export const TeamSidebarRail = memo(function TeamSidebarRail({
60
60
  <MessagesPanel position="sidebar" {...messagesPanelProps} />
61
61
  </div>
62
62
  <div
63
- className={`absolute inset-y-0 right-0 z-20 w-1 cursor-col-resize transition-colors hover:bg-blue-500/30 ${isResizing ? 'bg-blue-500/40' : ''}`}
63
+ className={`absolute inset-y-0 right-0 z-20 w-1 cursor-col-resize transition-colors hover:bg-indigo-500/30 ${isResizing ? 'bg-indigo-500/40' : ''}`}
64
64
  onMouseDown={onResizeMouseDown}
65
65
  />
66
66
  </div>
@@ -53,7 +53,7 @@ export const TaskRow = ({ task }: TaskRowProps): React.JSX.Element => {
53
53
  </td>
54
54
  <td className="px-3 py-2 text-xs">
55
55
  {blocksIds.length > 0 ? (
56
- <span className="text-blue-600 dark:text-blue-400">
56
+ <span className="text-indigo-600 dark:text-indigo-400">
57
57
  {blocksIds.map((id) => `#${deriveTaskDisplayId(id)}`).join(', ')}
58
58
  </span>
59
59
  ) : (
@@ -17,7 +17,7 @@ export const SkillChip = ({ skill, onRemove }: SkillChipProps): React.JSX.Elemen
17
17
  <div className="group inline-flex items-center gap-1.5 rounded-full bg-[var(--color-bg-secondary)] px-2.5 py-1 text-xs transition-colors hover:bg-[var(--color-bg-secondary-hover)]">
18
18
  <span className="max-w-[120px] truncate text-[var(--color-text)]">{skill.name}</span>
19
19
  {skill.scope && (
20
- <span className="rounded bg-blue-500/20 px-1 py-0.5 text-[10px] text-blue-400">
20
+ <span className="rounded bg-indigo-500/20 px-1 py-0.5 text-[10px] text-indigo-400">
21
21
  {skill.scope === 'project' ? '项目' : '用户'}
22
22
  </span>
23
23
  )}