@yancyyu/openhermit 1.6.38 → 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 (243) hide show
  1. package/dist-renderer/assets/ProjectEditorOverlay-CemDOX-3.js +58 -0
  2. package/dist-renderer/assets/{TeamGraphOverlay-ZEDfZyHb.js → TeamGraphOverlay-hPY770Db.js} +1 -1
  3. package/dist-renderer/assets/{_basePickBy-CIhniz70.js → _basePickBy-BHHrJT1i.js} +1 -1
  4. package/dist-renderer/assets/{_baseUniq-cKAW4Q8I.js → _baseUniq-CWErBtke.js} +1 -1
  5. package/dist-renderer/assets/{arc-YmNsoDXW.js → arc-C_o2_Uv8.js} +1 -1
  6. package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-DHEls2sX.js → architectureDiagram-VXUJARFQ-DUW0LI3t.js} +1 -1
  7. package/dist-renderer/assets/{blockDiagram-VD42YOAC-Bpwf1Sbg.js → blockDiagram-VD42YOAC-CWbCE9hQ.js} +1 -1
  8. package/dist-renderer/assets/{c4Diagram-YG6GDRKO-B0IaQ4w5.js → c4Diagram-YG6GDRKO-BjLadrfV.js} +1 -1
  9. package/dist-renderer/assets/channel-DyP9YlCF.js +1 -0
  10. package/dist-renderer/assets/{chunk-4BX2VUAB-DLk-hcFc.js → chunk-4BX2VUAB-CPnvjZl9.js} +1 -1
  11. package/dist-renderer/assets/{chunk-55IACEB6-1XRmX_Zm.js → chunk-55IACEB6-OlL47yXQ.js} +1 -1
  12. package/dist-renderer/assets/{chunk-B4BG7PRW-1waH1DAD.js → chunk-B4BG7PRW-DTasjbm8.js} +1 -1
  13. package/dist-renderer/assets/{chunk-DI55MBZ5-BqpZBtrN.js → chunk-DI55MBZ5-C5_Xaqkk.js} +1 -1
  14. package/dist-renderer/assets/{chunk-FMBD7UC4-Bly7vVym.js → chunk-FMBD7UC4-NdoM4DMR.js} +1 -1
  15. package/dist-renderer/assets/{chunk-QN33PNHL-Ci2QWBAs.js → chunk-QN33PNHL-C8Fybejy.js} +1 -1
  16. package/dist-renderer/assets/{chunk-QZHKN3VN-YCqFW7d-.js → chunk-QZHKN3VN-E98TYFXJ.js} +1 -1
  17. package/dist-renderer/assets/{chunk-TZMSLE5B-B0xGXInl.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-DxcFNQKT.js → cose-bilkent-S5V4N54A-DtQ7fkrs.js} +1 -1
  22. package/dist-renderer/assets/{dagre-6UL2VRFP-DPo_RfZY.js → dagre-6UL2VRFP-CN-nL_z4.js} +1 -1
  23. package/dist-renderer/assets/{diagram-PSM6KHXK-U3hQsFe4.js → diagram-PSM6KHXK-DVJtqmm-.js} +1 -1
  24. package/dist-renderer/assets/{diagram-QEK2KX5R-OrwrAy0V.js → diagram-QEK2KX5R-DlxHxyXh.js} +1 -1
  25. package/dist-renderer/assets/{diagram-S2PKOQOG-CXATPWVw.js → diagram-S2PKOQOG-7dpzO6x6.js} +1 -1
  26. package/dist-renderer/assets/{erDiagram-Q2GNP2WA-B0e8AfMF.js → erDiagram-Q2GNP2WA-GP1TqsHi.js} +1 -1
  27. package/dist-renderer/assets/{flowDiagram-NV44I4VS-CXfzA4jJ.js → flowDiagram-NV44I4VS-C7ZLETuH.js} +1 -1
  28. package/dist-renderer/assets/{ganttDiagram-JELNMOA3-CMr08qVl.js → ganttDiagram-JELNMOA3-CvPB68dH.js} +1 -1
  29. package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-vYFHpPmy.js → gitGraphDiagram-V2S2FVAM-B5yOm3w7.js} +1 -1
  30. package/dist-renderer/assets/{graph-DOe5j8dH.js → graph-smeyY1YZ.js} +1 -1
  31. package/dist-renderer/assets/{index-BySQS7AB.js → index-BJx8XvG1.js} +1 -1
  32. package/dist-renderer/assets/{index-C_okzZXP.js → index-CQaXUAua.js} +1 -1
  33. package/dist-renderer/assets/{index-VJ-MM9xa.js → index-CajRpxO2.js} +1 -1
  34. package/dist-renderer/assets/{index-V7dAKPqd.js → index-ChG4rE-E.js} +587 -705
  35. package/dist-renderer/assets/index-DUd0uw9C.css +32 -0
  36. package/dist-renderer/assets/{index-CzWxVCRL.js → index-IhmXZWqf.js} +1 -1
  37. package/dist-renderer/assets/{index-B2Dy7M2G.js → index-x_JkoDRH.js} +1 -1
  38. package/dist-renderer/assets/{infoDiagram-HS3SLOUP-D_WubR0B.js → infoDiagram-HS3SLOUP-D-hWRQGY.js} +1 -1
  39. package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-w9ca-1TI.js → journeyDiagram-XKPGCS4Q-Bb6W8rUG.js} +1 -1
  40. package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-Jg9p6_pN.js → kanban-definition-3W4ZIXB7-CnHdUX0q.js} +1 -1
  41. package/dist-renderer/assets/{layout-B-z3y17c.js → layout-pqss_zkI.js} +1 -1
  42. package/dist-renderer/assets/{linear-D-RTX5UW.js → linear-B1mFITNh.js} +1 -1
  43. package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-CDQmHOYP.js → mindmap-definition-VGOIOE7T-DTD9q7-D.js} +1 -1
  44. package/dist-renderer/assets/{pieDiagram-ADFJNKIX-D_odsQL7.js → pieDiagram-ADFJNKIX-Df3mhrn7.js} +1 -1
  45. package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-BRsmYWSA.js → quadrantDiagram-AYHSOK5B-B1FZ09vH.js} +1 -1
  46. package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-ChNE_BOV.js → requirementDiagram-UZGBJVZJ-aEO78thZ.js} +1 -1
  47. package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-C8FtpwKc.js → sankeyDiagram-TZEHDZUN-6Ui--jp-.js} +1 -1
  48. package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-DmLCzNcc.js → sequenceDiagram-WL72ISMW-DF4Q1cAM.js} +1 -1
  49. package/dist-renderer/assets/splashScene-D0YB9uxm.js +17 -0
  50. package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-WJBm4bhu.js → stateDiagram-FKZM4ZOC-BqA2BI8C.js} +1 -1
  51. package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-Cs2ZtUD2.js +1 -0
  52. package/dist-renderer/assets/{timeline-definition-IT6M3QCI-BXs_hOJs.js → timeline-definition-IT6M3QCI-DoOkw_A8.js} +1 -1
  53. package/dist-renderer/assets/{treemap-GDKQZRPO-o04MA0G9.js → treemap-GDKQZRPO-DUe26QdD.js} +1 -1
  54. package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-Czj69XRd.js → xychartDiagram-PRI3JC2R-BKCnj5Xn.js} +1 -1
  55. package/dist-renderer/index.html +20 -53
  56. package/package.json +25 -18
  57. package/src/main/ipc/extensions.ts +2 -1
  58. package/src/main/server.ts +873 -221
  59. package/src/main/services/extensions/ExtensionFacadeService.ts +2 -5
  60. package/src/main/services/extensions/catalog/PluginCatalogService.ts +4 -2
  61. package/src/main/services/session-intelligence/ConversationTelemetryService.ts +1101 -0
  62. package/src/main/services/session-intelligence/LocalSessionScanner.ts +512 -0
  63. package/src/main/services/session-intelligence/SessionUsageParser.ts +4 -4
  64. package/src/main/services/system-manager/SystemManagerConfigService.ts +122 -0
  65. package/src/main/services/system-manager/SystemManagerPtyService.ts +233 -0
  66. package/src/main/services/system-manager/WorkflowPromptService.ts +75 -0
  67. package/src/main/services/teams-mvp/TaskDispatchService.ts +5 -6
  68. package/src/main/services/teams-mvp/TeamProvisioningService.ts +39 -2
  69. package/src/main/services/teams-mvp/TeamWorkspaceService.ts +22 -4
  70. package/src/main/utils/teamProjectResolution.ts +15 -0
  71. package/src/renderer/App.tsx +8 -4
  72. package/src/renderer/api/httpClient.ts +68 -18
  73. package/src/renderer/api/providers.ts +23 -2
  74. package/src/renderer/assets/participant-avatars/01.svg +3 -0
  75. package/src/renderer/assets/participant-avatars/02.svg +3 -0
  76. package/src/renderer/assets/participant-avatars/03.svg +3 -0
  77. package/src/renderer/assets/participant-avatars/04.svg +3 -0
  78. package/src/renderer/assets/participant-avatars/05.svg +3 -0
  79. package/src/renderer/assets/participant-avatars/06.svg +3 -0
  80. package/src/renderer/assets/participant-avatars/07.svg +3 -0
  81. package/src/renderer/assets/participant-avatars/08.svg +3 -0
  82. package/src/renderer/assets/participant-avatars/09.svg +3 -0
  83. package/src/renderer/assets/participant-avatars/10.svg +3 -0
  84. package/src/renderer/assets/participant-avatars/11.svg +3 -0
  85. package/src/renderer/assets/participant-avatars/12.svg +3 -0
  86. package/src/renderer/assets/participant-avatars/13.svg +3 -0
  87. package/src/renderer/components/chat/ChatHistoryItem.tsx +1 -1
  88. package/src/renderer/components/chat/items/SubagentItem.tsx +2 -2
  89. package/src/renderer/components/chat/viewers/MermaidDiagram.tsx +2 -2
  90. package/src/renderer/components/common/ErrorBoundary.tsx +1 -1
  91. package/src/renderer/components/common/TerminalPane.tsx +213 -0
  92. package/src/renderer/components/dashboard/CliStatusBanner.tsx +7 -7
  93. package/src/renderer/components/dashboard/DashboardView.tsx +9 -36
  94. package/src/renderer/components/extensions/ExtensionStoreView.tsx +7 -126
  95. package/src/renderer/components/extensions/ExtensionsSubTabTrigger.tsx +1 -1
  96. package/src/renderer/components/extensions/common/ExtensionToast.tsx +3 -3
  97. package/src/renderer/components/extensions/common/SourceBadge.tsx +1 -1
  98. package/src/renderer/components/extensions/mcp/McpLibraryEnableDialog.tsx +305 -0
  99. package/src/renderer/components/extensions/mcp/McpLibraryEntryDialog.tsx +418 -0
  100. package/src/renderer/components/extensions/mcp/McpLibraryPanel.tsx +404 -0
  101. package/src/renderer/components/extensions/plugins/CategoryChips.tsx +1 -1
  102. package/src/renderer/components/extensions/plugins/PluginCard.tsx +6 -6
  103. package/src/renderer/components/extensions/plugins/PluginDetailDialog.tsx +2 -2
  104. package/src/renderer/components/extensions/plugins/PluginsPanel.tsx +34 -21
  105. package/src/renderer/components/extensions/skills/SkillEditorDialog.tsx +1 -1
  106. package/src/renderer/components/extensions/skills/SkillsLibraryPanel.tsx +335 -0
  107. package/src/renderer/components/layout/PaneContent.tsx +8 -1
  108. package/src/renderer/components/layout/PaneResizeHandle.tsx +2 -2
  109. package/src/renderer/components/layout/Sidebar.tsx +13 -56
  110. package/src/renderer/components/layout/SortableTab.tsx +22 -33
  111. package/src/renderer/components/layout/TabBar.tsx +1 -1
  112. package/src/renderer/components/layout/TabContextMenu.tsx +1 -1
  113. package/src/renderer/components/report/sections/CostSection.tsx +2 -2
  114. package/src/renderer/components/report/sections/InsightsSection.tsx +1 -1
  115. package/src/renderer/components/runtime/ProviderRuntimeBackendSelector.tsx +2 -2
  116. package/src/renderer/components/runtime/ProviderRuntimeSettingsDialog.tsx +768 -157
  117. package/src/renderer/components/schedules/SchedulesView.tsx +51 -462
  118. package/src/renderer/components/schedules/calendar/CalendarDayView.tsx +173 -0
  119. package/src/renderer/components/schedules/calendar/CalendarEventBlock.tsx +113 -0
  120. package/src/renderer/components/schedules/calendar/CalendarHeader.tsx +148 -0
  121. package/src/renderer/components/schedules/calendar/CalendarMonthView.tsx +142 -0
  122. package/src/renderer/components/schedules/calendar/CalendarWeekView.tsx +219 -0
  123. package/src/renderer/components/schedules/calendar/ScheduleCalendarBoard.tsx +41 -0
  124. package/src/renderer/components/schedules/calendar/TeamGanttView.tsx +405 -0
  125. package/src/renderer/components/schedules/calendar/computeOccurrences.ts +234 -0
  126. package/src/renderer/components/schedules/calendar/index.ts +2 -0
  127. package/src/renderer/components/schedules/calendar/types.ts +44 -0
  128. package/src/renderer/components/search/CommandPalette.tsx +4 -4
  129. package/src/renderer/components/settings/SettingsTabs.tsx +50 -55
  130. package/src/renderer/components/settings/SettingsView.tsx +30 -35
  131. package/src/renderer/components/settings/components/SettingsSectionHeader.tsx +5 -1
  132. package/src/renderer/components/settings/components/SettingsSelect.tsx +5 -3
  133. package/src/renderer/components/settings/components/SettingsToggle.tsx +2 -2
  134. package/src/renderer/components/settings/sections/AdvancedSection.tsx +11 -42
  135. package/src/renderer/components/settings/sections/CliStatusSection.tsx +72 -113
  136. package/src/renderer/components/settings/sections/ConfigEditorDialog.tsx +1 -1
  137. package/src/renderer/components/settings/sections/GeneralSection.tsx +11 -3
  138. package/src/renderer/components/settings/sections/HarnessSection.tsx +18 -14
  139. package/src/renderer/components/settings/sections/PlatformsSection.tsx +3 -3
  140. package/src/renderer/components/settings/sections/TaskBusSection.tsx +33 -40
  141. package/src/renderer/components/settings/sections/index.ts +0 -1
  142. package/src/renderer/components/sidebar/SessionFiltersPopover.tsx +1 -1
  143. package/src/renderer/components/sidebar/SessionItem.tsx +3 -3
  144. package/src/renderer/components/sidebar/SidebarSessions.tsx +184 -6
  145. package/src/renderer/components/sidebar/SidebarTaskItem.tsx +4 -4
  146. package/src/renderer/components/sidebar/WorkspaceBrowser.tsx +40 -5
  147. package/src/renderer/components/splash/splashScene.ts +121 -929
  148. package/src/renderer/components/system-manager/FolderBrowser.tsx +163 -0
  149. package/src/renderer/components/system-manager/SystemManagerView.tsx +351 -0
  150. package/src/renderer/components/tasks/TasksView.tsx +112 -134
  151. package/src/renderer/components/team/CcSessionsSection.tsx +431 -89
  152. package/src/renderer/components/team/ClaudeLogsFilterPopover.tsx +1 -1
  153. package/src/renderer/components/team/ClaudeLogsPanel.tsx +1 -1
  154. package/src/renderer/components/team/CollapsibleTeamSection.tsx +17 -32
  155. package/src/renderer/components/team/ProcessesSection.tsx +2 -2
  156. package/src/renderer/components/team/TaskTooltip.tsx +2 -2
  157. package/src/renderer/components/team/TeamDetailView.tsx +319 -123
  158. package/src/renderer/components/team/TeamListFilterPopover.tsx +1 -1
  159. package/src/renderer/components/team/TeamListView.tsx +109 -124
  160. package/src/renderer/components/team/TeamSessionsSection.tsx +6 -6
  161. package/src/renderer/components/team/UnreadCommentsBadge.tsx +1 -1
  162. package/src/renderer/components/team/activity/ActivityItem.tsx +9 -9
  163. package/src/renderer/components/team/activity/ActivityTimeline.tsx +5 -5
  164. package/src/renderer/components/team/activity/LeadThoughtsGroup.tsx +3 -3
  165. package/src/renderer/components/team/activity/ReplyQuoteBlock.tsx +4 -4
  166. package/src/renderer/components/team/dialogs/CreateTaskDialog.tsx +4 -4
  167. package/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +84 -306
  168. package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +259 -342
  169. package/src/renderer/components/team/dialogs/GlobalTaskDetailDialog.tsx +1 -1
  170. package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +18 -16
  171. package/src/renderer/components/team/dialogs/PlatformBindingDialog.tsx +221 -0
  172. package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +8 -1
  173. package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +5 -5
  174. package/src/renderer/components/team/dialogs/RuntimeConfigDialog.tsx +361 -0
  175. package/src/renderer/components/team/dialogs/SendMessageDialog.tsx +6 -6
  176. package/src/renderer/components/team/dialogs/SkipPermissionsCheckbox.tsx +6 -6
  177. package/src/renderer/components/team/dialogs/StatusHistoryTimeline.tsx +1 -1
  178. package/src/renderer/components/team/dialogs/TaskAttachments.tsx +1 -1
  179. package/src/renderer/components/team/dialogs/TaskCommentInput.tsx +6 -6
  180. package/src/renderer/components/team/dialogs/TaskCommentsSection.tsx +4 -4
  181. package/src/renderer/components/team/dialogs/TaskDetailDialog.tsx +3 -3
  182. package/src/renderer/components/team/dialogs/platformMeta.ts +122 -11
  183. package/src/renderer/components/team/dialogs/useTeamEditForm.ts +17 -5
  184. package/src/renderer/components/team/editor/EditorFileTree.tsx +4 -4
  185. package/src/renderer/components/team/editor/EditorSearchPanel.tsx +1 -1
  186. package/src/renderer/components/team/editor/MarkdownSplitView.tsx +1 -1
  187. package/src/renderer/components/team/editor/NewFileDialog.tsx +1 -1
  188. package/src/renderer/components/team/editor/ProjectEditorOverlay.tsx +1 -1
  189. package/src/renderer/components/team/editor/SearchInFilesPanel.tsx +1 -1
  190. package/src/renderer/components/team/kanban/KanbanBoard.tsx +9 -9
  191. package/src/renderer/components/team/kanban/KanbanFilterPopover.tsx +4 -4
  192. package/src/renderer/components/team/kanban/KanbanSearchInput.tsx +1 -1
  193. package/src/renderer/components/team/kanban/KanbanSortPopover.tsx +5 -5
  194. package/src/renderer/components/team/kanban/KanbanTaskCard.tsx +4 -4
  195. package/src/renderer/components/team/members/MemberCard.tsx +14 -47
  196. package/src/renderer/components/team/members/MemberDetailDialog.tsx +3 -95
  197. package/src/renderer/components/team/members/MemberDetailStats.tsx +50 -65
  198. package/src/renderer/components/team/members/MemberDraftRow.tsx +1 -1
  199. package/src/renderer/components/team/members/MemberStatsTab.tsx +2 -2
  200. package/src/renderer/components/team/members/MemberWorkspaceTab.tsx +1 -1
  201. package/src/renderer/components/team/messages/MessageComposer.tsx +10 -112
  202. package/src/renderer/components/team/messages/MessagesFilterPopover.tsx +1 -1
  203. package/src/renderer/components/team/messages/MessagesPanel.tsx +136 -119
  204. package/src/renderer/components/team/review/ChangeReviewDialog.tsx +1 -1
  205. package/src/renderer/components/team/schedule/ScheduleStatusBadge.tsx +3 -3
  206. package/src/renderer/components/team/sidebar/TeamSidebarRail.tsx +4 -4
  207. package/src/renderer/components/team/tasks/TaskRow.tsx +1 -1
  208. package/src/renderer/components/team/tools/AddMcpInline.tsx +27 -17
  209. package/src/renderer/components/team/tools/McpChip.tsx +6 -3
  210. package/src/renderer/components/team/tools/SkillChip.tsx +3 -3
  211. package/src/renderer/components/team/tools/ToolsSection.tsx +418 -70
  212. package/src/renderer/components/ui/MemberSelect.tsx +2 -2
  213. package/src/renderer/components/ui/MentionSuggestionList.tsx +2 -2
  214. package/src/renderer/components/ui/MentionableTextarea.tsx +3 -3
  215. package/src/renderer/hooks/useExtensionsTabState.ts +3 -114
  216. package/src/renderer/index.css +56 -39
  217. package/src/renderer/index.html +17 -50
  218. package/src/renderer/store/index.ts +2 -1
  219. package/src/renderer/store/slices/scheduleSlice.ts +1 -1
  220. package/src/renderer/store/slices/teamSlice.ts +45 -168
  221. package/src/renderer/utils/claudeCodeOnlyProviders.ts +3 -10
  222. package/src/renderer/utils/memberHelpers.ts +5 -17
  223. package/src/renderer/utils/openCodeRuntimeDeliveryDiagnostics.ts +4 -2
  224. package/src/renderer/utils/providerSlashCommands.ts +0 -5
  225. package/src/renderer/utils/scheduleFormatters.ts +3 -1
  226. package/src/renderer/utils/teamMessageFiltering.ts +14 -1
  227. package/src/renderer/utils/teamModelAvailability.ts +18 -2
  228. package/src/shared/types/api.ts +121 -2
  229. package/src/shared/types/ccConnect.ts +2 -0
  230. package/src/shared/types/index.ts +3 -0
  231. package/src/shared/types/systemManager.ts +49 -0
  232. package/src/shared/types/team.ts +29 -0
  233. package/src/shared/types/terminal.ts +4 -2
  234. package/src/shared/utils/extensionNormalizers.ts +15 -8
  235. package/src/shared/utils/providerExtensionCapabilities.ts +2 -2
  236. package/dist-renderer/assets/ProjectEditorOverlay-lJZi-9Hp.js +0 -52
  237. package/dist-renderer/assets/channel-yIlSKy0e.js +0 -1
  238. package/dist-renderer/assets/classDiagram-2ON5EDUG-24fHez0s.js +0 -1
  239. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-24fHez0s.js +0 -1
  240. package/dist-renderer/assets/clone-BTNuUva-.js +0 -1
  241. package/dist-renderer/assets/index-Bi6nrZ4z.css +0 -1
  242. package/dist-renderer/assets/splashScene-C8lWNnm4.js +0 -1
  243. package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-_m6iPPUR.js +0 -1
@@ -4,20 +4,11 @@
4
4
  * Global catalog caches are in extensionsSlice (Zustand).
5
5
  */
6
6
 
7
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { useCallback, useMemo, useState } from 'react';
8
8
 
9
- import { api } from '@renderer/api';
9
+ import type { PluginCapability, PluginFilters, PluginSortField } from '@shared/types/extensions';
10
10
 
11
- import type {
12
- McpCatalogItem,
13
- McpSearchResult,
14
- PluginCapability,
15
- PluginFilters,
16
- PluginSortField,
17
- } from '@shared/types/extensions';
18
-
19
- export type ExtensionsSubTab = 'plugins' | 'mcp-servers' | 'skills' | 'env-vars';
20
- export type SkillsSortState = 'name-asc' | 'recent-desc';
11
+ export type ExtensionsSubTab = 'plugins';
21
12
 
22
13
  interface PluginSortState {
23
14
  field: PluginSortField;
@@ -43,90 +34,6 @@ export function useExtensionsTabState() {
43
34
  });
44
35
  const [selectedPluginId, setSelectedPluginId] = useState<string | null>(null);
45
36
 
46
- // ── MCP search (per-tab, calls API directly) ──
47
- const [mcpSearchQuery, setMcpSearchQuery] = useState('');
48
- const [mcpSearchResults, setMcpSearchResults] = useState<McpCatalogItem[]>([]);
49
- const [mcpSearchLoading, setMcpSearchLoading] = useState(false);
50
- const [mcpSearchWarnings, setMcpSearchWarnings] = useState<string[]>([]);
51
- const [selectedMcpServerId, setSelectedMcpServerId] = useState<string | null>(null);
52
-
53
- // ── Skills browse ──
54
- const [skillsSearchQuery, setSkillsSearchQuery] = useState('');
55
- const [skillsInstalledOnly] = useState(false);
56
- const [skillsSort, setSkillsSort] = useState<SkillsSortState>('name-asc');
57
- const [selectedSkillId, setSelectedSkillId] = useState<string | null>(null);
58
-
59
- // ── Debounced MCP search ──
60
- const searchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
61
- const mcpSearchRequestSeqRef = useRef(0);
62
-
63
- // Cleanup timer on unmount
64
- useEffect(() => {
65
- return () => {
66
- if (searchTimerRef.current) {
67
- clearTimeout(searchTimerRef.current);
68
- }
69
- mcpSearchRequestSeqRef.current += 1;
70
- };
71
- }, []);
72
-
73
- useEffect(() => {
74
- if (activeSubTab !== 'plugins' && selectedPluginId !== null) {
75
- setSelectedPluginId(null);
76
- }
77
- if (activeSubTab !== 'mcp-servers' && selectedMcpServerId !== null) {
78
- setSelectedMcpServerId(null);
79
- }
80
- if (activeSubTab !== 'skills' && selectedSkillId !== null) {
81
- setSelectedSkillId(null);
82
- }
83
- }, [activeSubTab, selectedMcpServerId, selectedPluginId, selectedSkillId]);
84
-
85
- const mcpSearch = useCallback((query: string) => {
86
- setMcpSearchQuery(query);
87
- const requestId = ++mcpSearchRequestSeqRef.current;
88
-
89
- if (searchTimerRef.current) {
90
- clearTimeout(searchTimerRef.current);
91
- }
92
-
93
- if (!query.trim()) {
94
- setMcpSearchResults([]);
95
- setMcpSearchWarnings([]);
96
- setMcpSearchLoading(false);
97
- return;
98
- }
99
-
100
- setMcpSearchLoading(true);
101
-
102
- searchTimerRef.current = setTimeout(() => {
103
- if (!api.mcpRegistry) {
104
- if (mcpSearchRequestSeqRef.current === requestId) {
105
- setMcpSearchLoading(false);
106
- }
107
- return;
108
- }
109
-
110
- void api.mcpRegistry.search(query).then(
111
- (result: McpSearchResult) => {
112
- if (mcpSearchRequestSeqRef.current !== requestId) {
113
- return;
114
- }
115
- setMcpSearchResults(result.servers);
116
- setMcpSearchWarnings(result.warnings);
117
- setMcpSearchLoading(false);
118
- },
119
- () => {
120
- if (mcpSearchRequestSeqRef.current !== requestId) {
121
- return;
122
- }
123
- setMcpSearchLoading(false);
124
- setMcpSearchWarnings(['Search failed']);
125
- }
126
- );
127
- }, 300);
128
- }, []);
129
-
130
37
  // ── Plugin filter helpers ──
131
38
  const updatePluginSearch = useCallback((search: string) => {
132
39
  setPluginFilters((prev) => ({ ...prev, search }));
@@ -184,23 +91,5 @@ export function useExtensionsTabState() {
184
91
  toggleInstalledOnly,
185
92
  clearFilters,
186
93
  hasActiveFilters,
187
-
188
- // MCP
189
- mcpSearchQuery,
190
- mcpSearch,
191
- mcpSearchResults,
192
- mcpSearchLoading,
193
- mcpSearchWarnings,
194
- selectedMcpServerId,
195
- setSelectedMcpServerId,
196
-
197
- // Skills
198
- skillsSearchQuery,
199
- setSkillsSearchQuery,
200
- skillsInstalledOnly,
201
- skillsSort,
202
- setSkillsSort,
203
- selectedSkillId,
204
- setSelectedSkillId,
205
94
  };
206
95
  }
@@ -5,30 +5,30 @@
5
5
  /* Theme CSS Custom Properties */
6
6
 
7
7
  :root {
8
- /* Dark theme (default) - Midnight Slate palette (cool indigo undertone) */
9
- --color-surface: #12131a;
10
- /* Main background — deep midnight */
11
- --color-surface-raised: #1c1d26;
12
- /* Active/Selected items — cool slate */
13
- --color-surface-overlay: #1c1d26;
8
+ /* Dark theme (default) - Phosphor Green terminal palette */
9
+ --color-surface: #0a0a0f;
10
+ /* Main background — CRT black */
11
+ --color-surface-raised: #121318;
12
+ /* Active/Selected items — terminal surface */
13
+ --color-surface-overlay: #121318;
14
14
  /* Overlay surfaces */
15
- --color-surface-sidebar: #0c0d13;
16
- /* Sidebar — deepest navy-black */
17
- --color-border: rgba(148, 163, 184, 0.07);
18
- /* Borders — slate-tinted */
19
- --color-border-subtle: rgba(148, 163, 184, 0.05);
15
+ --color-surface-sidebar: #060609;
16
+ /* Sidebar — deepest black */
17
+ --color-border: rgba(74, 222, 128, 0.07);
18
+ /* Borders — phosphor green-tinted */
19
+ --color-border-subtle: rgba(74, 222, 128, 0.04);
20
20
  /* Subtle borders */
21
- --color-border-emphasis: rgba(148, 163, 184, 0.12);
21
+ --color-border-emphasis: rgba(74, 222, 128, 0.14);
22
22
  /* Emphasis borders */
23
- --color-text: #f1f5f9;
24
- --color-text-secondary: #94a3b8;
25
- --color-text-muted: #64748b;
26
- --color-accent: #818cf8;
27
- /* Accent — indigo-400, visible on dark surfaces */
23
+ --color-text: #c8cdd8;
24
+ --color-text-secondary: #7a8190;
25
+ --color-text-muted: #4f5564;
26
+ --color-accent: #4ade80;
27
+ /* Accent — phosphor green */
28
28
  /* Scrollbar colors */
29
- --scrollbar-thumb: rgba(148, 163, 184, 0.15);
30
- --scrollbar-thumb-hover: rgba(148, 163, 184, 0.25);
31
- --scrollbar-thumb-active: rgba(148, 163, 184, 0.35);
29
+ --scrollbar-thumb: rgba(74, 222, 128, 0.12);
30
+ --scrollbar-thumb-hover: rgba(74, 222, 128, 0.22);
31
+ --scrollbar-thumb-active: rgba(74, 222, 128, 0.32);
32
32
  /* Search highlights */
33
33
  --highlight-bg: rgba(202, 138, 4, 0.7);
34
34
  --highlight-bg-inactive: rgba(113, 63, 18, 0.5);
@@ -73,7 +73,7 @@
73
73
  --inline-code-bg: rgba(148, 163, 184, 0.08);
74
74
  --inline-code-text: #e2e8f0;
75
75
  /* URL badge (textarea overlay) */
76
- --url-badge-bg: rgba(37, 99, 235, 0.12);
76
+ --url-badge-bg: rgba(79, 70, 229, 0.12);
77
77
  --url-badge-border: rgba(96, 165, 250, 0.22);
78
78
  --url-badge-text: #bfdbfe;
79
79
  /* Diff viewer */
@@ -195,17 +195,17 @@
195
195
  --card-text-lighter: #e2e8f0;
196
196
  --card-separator: #2a2c38;
197
197
  /* System activity messages */
198
- --system-activity-bg: rgba(59, 130, 246, 0.06);
199
- --system-activity-border: rgba(59, 130, 246, 0.12);
198
+ --system-activity-bg: rgba(99, 102, 241, 0.06);
199
+ --system-activity-border: rgba(99, 102, 241, 0.12);
200
200
  --system-activity-accent: rgba(96, 165, 250, 0.5);
201
201
  /* Cross-team communication */
202
202
  --cross-team-bg: rgba(168, 85, 247, 0.06);
203
203
  --cross-team-border: rgba(168, 85, 247, 0.12);
204
204
  --cross-team-accent: rgba(192, 132, 252, 0.5);
205
205
  /* Info style — banners, status indicators */
206
- --info-bg: rgba(59, 130, 246, 0.08);
207
- --info-border: rgba(59, 130, 246, 0.25);
208
- --info-text: #60a5fa;
206
+ --info-bg: rgba(99, 102, 241, 0.08);
207
+ --info-border: rgba(99, 102, 241, 0.25);
208
+ --info-text: #818cf8;
209
209
  /* Assessment severity colors (badges, health indicators) */
210
210
  --assess-good: #4ade80;
211
211
  --assess-warning: #fbbf24;
@@ -514,7 +514,7 @@
514
514
  --code-header-bg: #eae9e6;
515
515
  --code-border: #d5d3cf;
516
516
  --code-line-number: #a8a5a0;
517
- --code-filename: #2563eb;
517
+ --code-filename: #4f46e5;
518
518
  /* Syntax highlighting - GitHub Light inspired */
519
519
  --syntax-string: #0a3069;
520
520
  --syntax-comment: #6e7781;
@@ -527,8 +527,8 @@
527
527
  --inline-code-bg: rgba(0, 0, 0, 0.05);
528
528
  --inline-code-text: #3a3935;
529
529
  /* URL badge (textarea overlay) - Light mode */
530
- --url-badge-bg: rgba(37, 99, 235, 0.1);
531
- --url-badge-border: rgba(37, 99, 235, 0.25);
530
+ --url-badge-bg: rgba(79, 70, 229, 0.1);
531
+ --url-badge-border: rgba(79, 70, 229, 0.25);
532
532
  --url-badge-text: #1d4ed8;
533
533
  /* Diff viewer - Light mode */
534
534
  --diff-added-bg: rgba(34, 197, 94, 0.18);
@@ -561,7 +561,7 @@
561
561
  --prose-heading: #1c1b19;
562
562
  --prose-body: #2a2925;
563
563
  --prose-muted: #6d6b65;
564
- --prose-link: #2563eb;
564
+ --prose-link: #4f46e5;
565
565
  --prose-code-bg: rgba(0, 0, 0, 0.05);
566
566
  --prose-code-text: #3a3935;
567
567
  --prose-pre-bg: #f0efed;
@@ -605,7 +605,7 @@
605
605
  --badge-warning-text: #ffffff;
606
606
  --badge-success-bg: #16a34a;
607
607
  --badge-success-text: #ffffff;
608
- --badge-info-bg: #2563eb;
608
+ --badge-info-bg: #4f46e5;
609
609
  --badge-info-text: #ffffff;
610
610
  --badge-neutral-bg: #e3e1dd;
611
611
  --badge-neutral-text: #3a3935;
@@ -649,17 +649,17 @@
649
649
  --card-text-lighter: #2a2925;
650
650
  --card-separator: #d5d3cf;
651
651
  /* System activity messages */
652
- --system-activity-bg: rgba(59, 130, 246, 0.08);
653
- --system-activity-border: rgba(59, 130, 246, 0.25);
654
- --system-activity-accent: rgba(37, 99, 235, 0.7);
652
+ --system-activity-bg: rgba(99, 102, 241, 0.08);
653
+ --system-activity-border: rgba(99, 102, 241, 0.25);
654
+ --system-activity-accent: rgba(79, 70, 229, 0.7);
655
655
  /* Cross-team communication */
656
656
  --cross-team-bg: rgba(168, 85, 247, 0.08);
657
657
  --cross-team-border: rgba(168, 85, 247, 0.25);
658
658
  --cross-team-accent: rgba(124, 58, 237, 0.7);
659
659
  /* Info style — banners, status indicators */
660
- --info-bg: rgba(59, 130, 246, 0.1);
661
- --info-border: rgba(37, 99, 235, 0.3);
662
- --info-text: #2563eb;
660
+ --info-bg: rgba(99, 102, 241, 0.1);
661
+ --info-border: rgba(79, 70, 229, 0.3);
662
+ --info-text: #4f46e5;
663
663
  /* Sticky Context button - transparent glass */
664
664
  --context-btn-bg: rgba(0, 0, 0, 0.06);
665
665
  --context-btn-bg-hover: rgba(0, 0, 0, 0.1);
@@ -797,14 +797,31 @@ body {
797
797
  height: 100%;
798
798
  overflow: hidden;
799
799
  font-family:
800
- -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell',
801
- 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
800
+ 'Agave', 'JetBrains Mono', 'Menlo', 'Monaco', 'Consolas',
801
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', monospace;
802
802
  -webkit-font-smoothing: antialiased;
803
803
  -moz-osx-font-smoothing: grayscale;
804
804
  background-color: var(--color-surface);
805
805
  color: var(--color-text);
806
806
  }
807
807
 
808
+ /* Agave font face — yume-style monospace */
809
+ @font-face {
810
+ font-family: 'Agave';
811
+ src: url('/fonts/Agave-Regular.ttf') format('truetype');
812
+ font-weight: 400;
813
+ font-style: normal;
814
+ font-display: swap;
815
+ }
816
+
817
+ @font-face {
818
+ font-family: 'Agave';
819
+ src: url('/fonts/Agave-Bold.ttf') format('truetype');
820
+ font-weight: 700;
821
+ font-style: normal;
822
+ font-display: swap;
823
+ }
824
+
808
825
  body.theme-transitioning {
809
826
  transition:
810
827
  background-color 0.2s ease,
@@ -101,7 +101,7 @@
101
101
  />
102
102
  <title>Hermit</title>
103
103
  <style>
104
- /* Splash: animated gradient background */
104
+ /* Splash: clean dark terminal */
105
105
  #splash {
106
106
  position: fixed;
107
107
  inset: 0;
@@ -112,36 +112,11 @@
112
112
  justify-content: center;
113
113
  overflow: hidden;
114
114
  isolation: isolate;
115
- background: linear-gradient(
116
- 180deg,
117
- #0c0d13 0%,
118
- #1a1535 20%,
119
- #1e1245 35%,
120
- #231740 50%,
121
- #1a1535 65%,
122
- #151230 80%,
123
- #0c0d13 100%
124
- );
125
- background-size: 100% 300%;
126
- animation: splash-bg 6s ease infinite;
127
- transition:
128
- opacity 0.42s ease-out,
129
- filter 0.42s ease-out;
115
+ background: #0a0a0f;
116
+ transition: opacity 0.35s ease-out;
130
117
  }
131
118
  #splash.splash-exiting {
132
119
  opacity: 0;
133
- filter: blur(8px);
134
- }
135
- @keyframes splash-bg {
136
- 0% {
137
- background-position: 50% 0%;
138
- }
139
- 50% {
140
- background-position: 50% 100%;
141
- }
142
- 100% {
143
- background-position: 50% 0%;
144
- }
145
120
  }
146
121
  #splash-noise {
147
122
  position: absolute;
@@ -153,19 +128,14 @@
153
128
  z-index: 0;
154
129
  }
155
130
  #splash-enhanced-canvas {
156
- position: absolute;
157
- inset: 0;
158
- width: 100%;
159
- height: 100%;
160
- pointer-events: none;
161
- z-index: 1;
162
- opacity: 0;
163
- animation: splash-canvas-in 0.62s ease-out 0.08s forwards;
131
+ display: none;
164
132
  }
165
- @keyframes splash-canvas-in {
166
- to {
167
- opacity: 1;
168
- }
133
+ @keyframes splash-term-in {
134
+ to { opacity: 1; }
135
+ }
136
+ @keyframes splash-cursor-blink {
137
+ 0%, 100% { opacity: 1; }
138
+ 50% { opacity: 0; }
169
139
  }
170
140
  #splash-logo,
171
141
  #splash-copy {
@@ -173,10 +143,7 @@
173
143
  z-index: 3;
174
144
  }
175
145
  #splash-logo {
176
- margin-bottom: 18px;
177
- animation:
178
- splash-breathe 3s ease-in-out infinite,
179
- splash-glow 3s ease-in-out infinite;
146
+ display: none;
180
147
  }
181
148
  #splash-copy {
182
149
  display: flex;
@@ -208,13 +175,13 @@
208
175
  #splash-text {
209
176
  font-family:
210
177
  ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
211
- font-size: 15px;
212
- font-weight: 500;
213
- letter-spacing: 0.05em;
214
- color: #a1a1aa;
215
- text-shadow: 0 0 22px rgba(129, 140, 248, 0.26);
178
+ font-size: 13px;
179
+ font-weight: 400;
180
+ letter-spacing: 0.02em;
181
+ color: rgba(148, 163, 184, 0.6);
216
182
  }
217
183
  #splash-tagline {
184
+ display: none;
218
185
  margin-top: 7px;
219
186
  font-family:
220
187
  ui-sans-serif,
@@ -464,7 +431,7 @@
464
431
  />
465
432
  </svg>
466
433
  <div id="splash-copy">
467
- <div id="splash-text">Hermit</div>
434
+ <div id="splash-text">🦀 hermit</div>
468
435
  <div id="splash-tagline"><span>把复杂工作交给团队。</span></div>
469
436
  <div id="splash-loading-hint">正在启动...</div>
470
437
  </div>
@@ -240,6 +240,7 @@ export function initializeNotificationListeners(): () => void {
240
240
  const SESSION_REFRESH_DEBOUNCE_MS = 150;
241
241
  const PROJECT_REFRESH_DEBOUNCE_MS = 300;
242
242
  const TEAM_REFRESH_THROTTLE_MS = 800;
243
+ const TEAM_MESSAGE_REFRESH_THROTTLE_MS = 150;
243
244
  const TEAM_PRESENCE_REFRESH_THROTTLE_MS = 400;
244
245
  const TEAM_MEMBER_SPAWN_REFRESH_THROTTLE_MS = 500;
245
246
  const TEAM_LIST_REFRESH_THROTTLE_MS = 2000;
@@ -297,7 +298,7 @@ export function initializeNotificationListeners(): () => void {
297
298
  const timer = setTimeout(() => {
298
299
  teamMessageRefreshTimers.delete(teamName);
299
300
  void refreshTrackedTeamMessages(teamName);
300
- }, TEAM_REFRESH_THROTTLE_MS);
301
+ }, TEAM_MESSAGE_REFRESH_THROTTLE_MS);
301
302
  teamMessageRefreshTimers.set(teamName, timer);
302
303
  };
303
304
  const buildToolActivityTimerKey = (
@@ -161,7 +161,7 @@ export const createScheduleSlice: StateCreator<AppState, [], [], ScheduleSlice>
161
161
  startedAt: now,
162
162
  executionStartedAt: now,
163
163
  retryCount: 0,
164
- summary: '正在触发 cc-connect runtime...',
164
+ summary: '正在触发运行时...',
165
165
  },
166
166
  ...(state.scheduleRuns[id] ?? []),
167
167
  ],