@yancyyu/openhermit 1.6.37 → 1.6.39
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.
- package/dist-renderer/assets/ProjectEditorOverlay-krO5vQxX.js +58 -0
- package/dist-renderer/assets/{TeamGraphOverlay-DYT3bwFR.js → TeamGraphOverlay-DqhQzcTr.js} +1 -1
- package/dist-renderer/assets/{_basePickBy-Dbt_EU-e.js → _basePickBy-B7kSYPxr.js} +1 -1
- package/dist-renderer/assets/{_baseUniq-DWo68sXI.js → _baseUniq-CnjxqwAk.js} +1 -1
- package/dist-renderer/assets/{arc-DXH1iZQK.js → arc-CLeZuINP.js} +1 -1
- package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-cjffS2Qr.js → architectureDiagram-VXUJARFQ-QKtqaqdY.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-VD42YOAC-BKdZF02Y.js → blockDiagram-VD42YOAC-BqdrzO_f.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-YG6GDRKO-CN27pqaI.js → c4Diagram-YG6GDRKO-gwPlCxDC.js} +1 -1
- package/dist-renderer/assets/channel-DpMHF50r.js +1 -0
- package/dist-renderer/assets/{chunk-4BX2VUAB-CXPCI7g_.js → chunk-4BX2VUAB-C6XLurL4.js} +1 -1
- package/dist-renderer/assets/{chunk-55IACEB6-BGAXQZRC.js → chunk-55IACEB6-Ds6quhEP.js} +1 -1
- package/dist-renderer/assets/{chunk-B4BG7PRW-TPDaA_KQ.js → chunk-B4BG7PRW-5UlA1_e9.js} +1 -1
- package/dist-renderer/assets/{chunk-DI55MBZ5-D1ADe_tq.js → chunk-DI55MBZ5-ywFrqIsY.js} +1 -1
- package/dist-renderer/assets/{chunk-FMBD7UC4-Beimtg3a.js → chunk-FMBD7UC4-C7ifUA17.js} +1 -1
- package/dist-renderer/assets/{chunk-QN33PNHL-OjNBu854.js → chunk-QN33PNHL-BxGCo80U.js} +1 -1
- package/dist-renderer/assets/{chunk-QZHKN3VN-DinqvbH8.js → chunk-QZHKN3VN-B2CuaZs6.js} +1 -1
- package/dist-renderer/assets/{chunk-TZMSLE5B-BfFtlPSZ.js → chunk-TZMSLE5B-Ds1hInvp.js} +1 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-CBYCBVRl.js +1 -0
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-CBYCBVRl.js +1 -0
- package/dist-renderer/assets/clone-DcMF6Psb.js +1 -0
- package/dist-renderer/assets/{cose-bilkent-S5V4N54A-D9z9Dgt7.js → cose-bilkent-S5V4N54A-Cz1GVtLp.js} +1 -1
- package/dist-renderer/assets/{dagre-6UL2VRFP-n1g-DhEE.js → dagre-6UL2VRFP-BrmR-P4h.js} +1 -1
- package/dist-renderer/assets/{diagram-PSM6KHXK-BvxFq-BE.js → diagram-PSM6KHXK-DbNjC5Rg.js} +1 -1
- package/dist-renderer/assets/{diagram-QEK2KX5R-wVnJuwza.js → diagram-QEK2KX5R-qkRX5_Mq.js} +1 -1
- package/dist-renderer/assets/{diagram-S2PKOQOG-B707WJQw.js → diagram-S2PKOQOG-CyL5rCv2.js} +1 -1
- package/dist-renderer/assets/{erDiagram-Q2GNP2WA-C-_1dGHs.js → erDiagram-Q2GNP2WA-Dox3-bA5.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-NV44I4VS-CMTSi3H6.js → flowDiagram-NV44I4VS-BtkaxlDL.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-JELNMOA3-DZ0bNrAA.js → ganttDiagram-JELNMOA3-Dhy_d9GK.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-DNVfGooQ.js → gitGraphDiagram-V2S2FVAM-B5XRhIQA.js} +1 -1
- package/dist-renderer/assets/{graph-865j_tM_.js → graph-CsoEwUhS.js} +1 -1
- package/dist-renderer/assets/{index-C_F9N5x-.js → index-BWPWmJNo.js} +1 -1
- package/dist-renderer/assets/{index-LwDIsXJN.js → index-Bu2R-Se7.js} +586 -740
- package/dist-renderer/assets/index-CnWV3BhG.css +32 -0
- package/dist-renderer/assets/{index-DuUaf8at.js → index-D-3KgskL.js} +1 -1
- package/dist-renderer/assets/{index-BTx1nc4T.js → index-DGEBzLNT.js} +1 -1
- package/dist-renderer/assets/{index-2EW-eu3q.js → index-NhHNs2Oo.js} +1 -1
- package/dist-renderer/assets/{index-4dEMStJj.js → index-h17WuEyf.js} +1 -1
- package/dist-renderer/assets/{infoDiagram-HS3SLOUP-CyqtElLq.js → infoDiagram-HS3SLOUP-hMGmNojH.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-BvjQ0Hm0.js → journeyDiagram-XKPGCS4Q-DXV2rBDl.js} +1 -1
- package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-CJJ-k0zT.js → kanban-definition-3W4ZIXB7-Bf99WLRy.js} +1 -1
- package/dist-renderer/assets/{layout-CnV6rQAG.js → layout-C3XWrpwo.js} +1 -1
- package/dist-renderer/assets/{linear-Cw3UQgyX.js → linear-OEEcn8KN.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-C5tDaGSK.js → mindmap-definition-VGOIOE7T-Dpi3S2x4.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-ADFJNKIX-CiIpPsau.js → pieDiagram-ADFJNKIX-xTPPhtNx.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-C3gtowNj.js → quadrantDiagram-AYHSOK5B-euniyDlz.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-CXBTrAnU.js → requirementDiagram-UZGBJVZJ-D9Uiw4kF.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-wziX77xG.js → sankeyDiagram-TZEHDZUN-CySU4nED.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-sYqopcrj.js → sequenceDiagram-WL72ISMW-JVGpET6V.js} +1 -1
- package/dist-renderer/assets/splashScene-D0YB9uxm.js +17 -0
- package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-Bl1-0_Cp.js → stateDiagram-FKZM4ZOC-B2FY5qqi.js} +1 -1
- package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-DcoMiR8H.js +1 -0
- package/dist-renderer/assets/{timeline-definition-IT6M3QCI-CIRjJUBo.js → timeline-definition-IT6M3QCI-DmycNUUe.js} +1 -1
- package/dist-renderer/assets/{treemap-GDKQZRPO-CVPuNe1n.js → treemap-GDKQZRPO-DPq4gZuB.js} +1 -1
- package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-3nT9yHwp.js → xychartDiagram-PRI3JC2R-J6VVJzRq.js} +1 -1
- package/dist-renderer/index.html +20 -53
- package/package.json +25 -18
- package/src/main/ipc/extensions.ts +30 -50
- package/src/main/server.ts +890 -247
- package/src/main/services/extensions/ExtensionFacadeService.ts +4 -56
- package/src/main/services/extensions/catalog/PluginCatalogService.ts +4 -2
- package/src/main/services/extensions/library/McpLibraryService.ts +243 -0
- package/src/main/services/session-intelligence/ConversationTelemetryService.ts +1101 -0
- package/src/main/services/session-intelligence/LocalSessionScanner.ts +512 -0
- package/src/main/services/session-intelligence/SessionUsageParser.ts +4 -4
- package/src/main/services/session-intelligence/UsageTelemetryService.ts +14 -1
- package/src/main/services/system-manager/SystemManagerConfigService.ts +122 -0
- package/src/main/services/system-manager/SystemManagerPtyService.ts +233 -0
- package/src/main/services/system-manager/WorkflowPromptService.ts +75 -0
- package/src/main/services/teams-mvp/TaskDispatchService.ts +32 -8
- package/src/main/services/teams-mvp/TeamProvisioningService.ts +39 -2
- package/src/main/services/teams-mvp/TeamWorkspaceService.ts +22 -4
- package/src/main/utils/teamProjectResolution.ts +15 -0
- package/src/renderer/App.tsx +8 -4
- package/src/renderer/api/httpClient.ts +174 -38
- package/src/renderer/api/providers.ts +23 -2
- package/src/renderer/assets/participant-avatars/01.svg +3 -0
- package/src/renderer/assets/participant-avatars/02.svg +3 -0
- package/src/renderer/assets/participant-avatars/03.svg +3 -0
- package/src/renderer/assets/participant-avatars/04.svg +3 -0
- package/src/renderer/assets/participant-avatars/05.svg +3 -0
- package/src/renderer/assets/participant-avatars/06.svg +3 -0
- package/src/renderer/assets/participant-avatars/07.svg +3 -0
- package/src/renderer/assets/participant-avatars/08.svg +3 -0
- package/src/renderer/assets/participant-avatars/09.svg +3 -0
- package/src/renderer/assets/participant-avatars/10.svg +3 -0
- package/src/renderer/assets/participant-avatars/11.svg +3 -0
- package/src/renderer/assets/participant-avatars/12.svg +3 -0
- package/src/renderer/assets/participant-avatars/13.svg +3 -0
- package/src/renderer/components/common/TerminalPane.tsx +213 -0
- package/src/renderer/components/dashboard/DashboardView.tsx +9 -36
- package/src/renderer/components/extensions/ExtensionStoreView.tsx +12 -221
- package/src/renderer/components/extensions/ExtensionsSubTabTrigger.tsx +1 -1
- package/src/renderer/components/extensions/mcp/McpLibraryEnableDialog.tsx +305 -0
- package/src/renderer/components/extensions/mcp/McpLibraryEntryDialog.tsx +418 -0
- package/src/renderer/components/extensions/mcp/McpLibraryPanel.tsx +404 -0
- package/src/renderer/components/extensions/plugins/PluginCard.tsx +10 -2
- package/src/renderer/components/extensions/plugins/PluginsPanel.tsx +40 -22
- package/src/renderer/components/extensions/skills/SkillsLibraryPanel.tsx +335 -0
- package/src/renderer/components/layout/PaneContent.tsx +8 -1
- package/src/renderer/components/layout/Sidebar.tsx +11 -54
- package/src/renderer/components/layout/SortableTab.tsx +20 -31
- package/src/renderer/components/layout/TabBar.tsx +1 -1
- package/src/renderer/components/layout/TabContextMenu.tsx +1 -1
- package/src/renderer/components/runtime/ProviderRuntimeSettingsDialog.tsx +768 -157
- package/src/renderer/components/schedules/SchedulesView.tsx +51 -462
- package/src/renderer/components/schedules/calendar/CalendarDayView.tsx +173 -0
- package/src/renderer/components/schedules/calendar/CalendarEventBlock.tsx +113 -0
- package/src/renderer/components/schedules/calendar/CalendarHeader.tsx +148 -0
- package/src/renderer/components/schedules/calendar/CalendarMonthView.tsx +142 -0
- package/src/renderer/components/schedules/calendar/CalendarWeekView.tsx +219 -0
- package/src/renderer/components/schedules/calendar/ScheduleCalendarBoard.tsx +41 -0
- package/src/renderer/components/schedules/calendar/TeamGanttView.tsx +405 -0
- package/src/renderer/components/schedules/calendar/computeOccurrences.ts +234 -0
- package/src/renderer/components/schedules/calendar/index.ts +2 -0
- package/src/renderer/components/schedules/calendar/types.ts +44 -0
- package/src/renderer/components/settings/SettingsTabs.tsx +50 -55
- package/src/renderer/components/settings/SettingsView.tsx +30 -35
- package/src/renderer/components/settings/components/SettingsSectionHeader.tsx +5 -1
- package/src/renderer/components/settings/components/SettingsSelect.tsx +5 -3
- package/src/renderer/components/settings/components/SettingsToggle.tsx +2 -2
- package/src/renderer/components/settings/sections/AdvancedSection.tsx +11 -42
- package/src/renderer/components/settings/sections/CliStatusSection.tsx +71 -112
- package/src/renderer/components/settings/sections/ConfigEditorDialog.tsx +1 -1
- package/src/renderer/components/settings/sections/GeneralSection.tsx +11 -3
- package/src/renderer/components/settings/sections/HarnessSection.tsx +18 -14
- package/src/renderer/components/settings/sections/PlatformsSection.tsx +3 -3
- package/src/renderer/components/settings/sections/TaskBusSection.tsx +33 -40
- package/src/renderer/components/settings/sections/index.ts +0 -1
- package/src/renderer/components/sidebar/SidebarSessions.tsx +182 -4
- package/src/renderer/components/sidebar/SidebarTaskItem.tsx +4 -4
- package/src/renderer/components/sidebar/WorkspaceBrowser.tsx +39 -4
- package/src/renderer/components/splash/splashScene.ts +121 -929
- package/src/renderer/components/system-manager/FolderBrowser.tsx +163 -0
- package/src/renderer/components/system-manager/SystemManagerView.tsx +351 -0
- package/src/renderer/components/tasks/TasksView.tsx +112 -134
- package/src/renderer/components/team/CcSessionsSection.tsx +431 -89
- package/src/renderer/components/team/CollapsibleTeamSection.tsx +17 -32
- package/src/renderer/components/team/TeamDetailView.tsx +325 -114
- package/src/renderer/components/team/TeamListView.tsx +108 -123
- package/src/renderer/components/team/dialogs/CreateTaskDialog.tsx +2 -2
- package/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +84 -306
- package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +259 -342
- package/src/renderer/components/team/dialogs/GlobalTaskDetailDialog.tsx +1 -1
- package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +17 -15
- package/src/renderer/components/team/dialogs/PlatformBindingDialog.tsx +221 -0
- package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +7 -0
- package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +1 -1
- package/src/renderer/components/team/dialogs/RuntimeConfigDialog.tsx +361 -0
- package/src/renderer/components/team/dialogs/platformMeta.ts +122 -11
- package/src/renderer/components/team/dialogs/useTeamEditForm.ts +17 -5
- package/src/renderer/components/team/kanban/KanbanBoard.tsx +9 -9
- package/src/renderer/components/team/members/MemberCard.tsx +14 -47
- package/src/renderer/components/team/members/MemberDetailDialog.tsx +3 -95
- package/src/renderer/components/team/members/MemberDetailStats.tsx +50 -65
- package/src/renderer/components/team/messages/MessageComposer.tsx +8 -110
- package/src/renderer/components/team/messages/MessagesPanel.tsx +131 -114
- package/src/renderer/components/team/schedule/ScheduleStatusBadge.tsx +2 -2
- package/src/renderer/components/team/tools/AddMcpInline.tsx +57 -0
- package/src/renderer/components/team/tools/AddSkillInline.tsx +61 -0
- package/src/renderer/components/team/tools/McpChip.tsx +45 -0
- package/src/renderer/components/team/tools/SkillChip.tsx +35 -0
- package/src/renderer/components/team/tools/ToolsSection.tsx +556 -0
- package/src/renderer/hooks/useExtensionsTabState.ts +3 -114
- package/src/renderer/index.css +39 -22
- package/src/renderer/index.html +17 -50
- package/src/renderer/store/index.ts +2 -1
- package/src/renderer/store/slices/scheduleSlice.ts +1 -1
- package/src/renderer/store/slices/teamSlice.ts +45 -168
- package/src/renderer/utils/claudeCodeOnlyProviders.ts +3 -10
- package/src/renderer/utils/memberHelpers.ts +5 -17
- package/src/renderer/utils/openCodeRuntimeDeliveryDiagnostics.ts +4 -2
- package/src/renderer/utils/providerSlashCommands.ts +0 -5
- package/src/renderer/utils/scheduleFormatters.ts +3 -1
- package/src/renderer/utils/teamMessageFiltering.ts +14 -1
- package/src/renderer/utils/teamModelAvailability.ts +18 -2
- package/src/shared/types/api.ts +121 -2
- package/src/shared/types/ccConnect.ts +2 -0
- package/src/shared/types/extensions/api.ts +9 -0
- package/src/shared/types/extensions/index.ts +4 -0
- package/src/shared/types/extensions/mcp.ts +41 -0
- package/src/shared/types/index.ts +3 -0
- package/src/shared/types/systemManager.ts +49 -0
- package/src/shared/types/team.ts +29 -0
- package/src/shared/types/terminal.ts +4 -2
- package/src/shared/utils/extensionNormalizers.ts +29 -0
- package/src/shared/utils/providerExtensionCapabilities.ts +2 -2
- package/dist-renderer/assets/ProjectEditorOverlay-Va_Vz-zz.js +0 -52
- package/dist-renderer/assets/channel-5dJIx68e.js +0 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-BMGXWJ2d.js +0 -1
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-BMGXWJ2d.js +0 -1
- package/dist-renderer/assets/clone-D7FWfGY9.js +0 -1
- package/dist-renderer/assets/index-B2z_IyRH.css +0 -1
- package/dist-renderer/assets/splashScene-C8lWNnm4.js +0 -1
- package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-DOYYvDbi.js +0 -1
- package/src/main/services/extensions/catalog/GlamaMcpEnrichmentService.ts +0 -190
- package/src/main/services/extensions/catalog/McpCatalogAggregator.ts +0 -150
- package/src/main/services/extensions/catalog/OfficialMcpRegistryService.ts +0 -381
- package/src/main/services/extensions/install/McpInstallService.ts +0 -407
- package/src/main/services/extensions/state/McpInstallationStateService.ts +0 -42
- package/src/renderer/components/extensions/mcp/McpServerCard.tsx +0 -314
- package/src/renderer/components/extensions/mcp/McpServerDetailDialog.tsx +0 -765
- package/src/renderer/components/extensions/mcp/McpServersPanel.tsx +0 -593
- package/src/renderer/components/extensions/skills/SkillDetailDialog.tsx +0 -372
- package/src/renderer/components/extensions/skills/SkillImportDialog.tsx +0 -343
- package/src/renderer/components/extensions/skills/SkillsPanel.tsx +0 -659
|
@@ -14,9 +14,11 @@ function resolveAnthropicFastMode(_opts: {
|
|
|
14
14
|
providerFastModeDefault: boolean;
|
|
15
15
|
}) {
|
|
16
16
|
return {
|
|
17
|
-
showFastModeControl:
|
|
18
|
-
resolvedFastMode:
|
|
19
|
-
|
|
17
|
+
showFastModeControl: true,
|
|
18
|
+
resolvedFastMode:
|
|
19
|
+
_opts.selectedFastMode === 'on' ||
|
|
20
|
+
(_opts.selectedFastMode === 'inherit' && _opts.providerFastModeDefault),
|
|
21
|
+
selectable: true,
|
|
20
22
|
disabledReason: null,
|
|
21
23
|
};
|
|
22
24
|
}
|
|
@@ -179,7 +181,7 @@ function alignProvisioningChecks(
|
|
|
179
181
|
);
|
|
180
182
|
}
|
|
181
183
|
|
|
182
|
-
const WORKSPACE_SCOPED_TEAM_MODE =
|
|
184
|
+
const WORKSPACE_SCOPED_TEAM_MODE = false;
|
|
183
185
|
|
|
184
186
|
// =============================================================================
|
|
185
187
|
// Props — discriminated union
|
|
@@ -1841,7 +1843,7 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
1841
1843
|
openTeamTab(effectiveTeamName, relaunchProjectPath || defaultProjectPath);
|
|
1842
1844
|
closeDialog();
|
|
1843
1845
|
} catch (err) {
|
|
1844
|
-
const message = err instanceof Error ? err.message : '
|
|
1846
|
+
const message = err instanceof Error ? err.message : '重新启动数字员工失败';
|
|
1845
1847
|
setLocalError(message);
|
|
1846
1848
|
console.error('Failed to relaunch team from dialog:', err);
|
|
1847
1849
|
} finally {
|
|
@@ -1997,8 +1999,8 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
1997
1999
|
: isSchedule
|
|
1998
2000
|
? '保存计划失败'
|
|
1999
2001
|
: isRelaunch
|
|
2000
|
-
? '
|
|
2001
|
-
: '
|
|
2002
|
+
? '重新启动数字员工失败'
|
|
2003
|
+
: '启动数字员工失败';
|
|
2002
2004
|
setLocalError(message);
|
|
2003
2005
|
if (isLaunchMode) {
|
|
2004
2006
|
console.error(
|
|
@@ -2036,8 +2038,8 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
2036
2038
|
|
|
2037
2039
|
const dialogTitle = isLaunchMode
|
|
2038
2040
|
? isRelaunch
|
|
2039
|
-
? '
|
|
2040
|
-
: '
|
|
2041
|
+
? '重新启动数字员工'
|
|
2042
|
+
: '启动数字员工'
|
|
2041
2043
|
: isEditing
|
|
2042
2044
|
? '编辑计划'
|
|
2043
2045
|
: '创建计划';
|
|
@@ -2050,7 +2052,7 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
2050
2052
|
</>
|
|
2051
2053
|
) : (
|
|
2052
2054
|
<>
|
|
2053
|
-
通过 Agent CLI
|
|
2055
|
+
通过 Agent CLI 启动数字员工 <span className="font-mono font-medium">{effectiveTeamName}</span>。
|
|
2054
2056
|
</>
|
|
2055
2057
|
)
|
|
2056
2058
|
) : isEditing ? (
|
|
@@ -2063,8 +2065,8 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
2063
2065
|
|
|
2064
2066
|
const submitLabel = isLaunchMode
|
|
2065
2067
|
? isRelaunch
|
|
2066
|
-
? '
|
|
2067
|
-
: '
|
|
2068
|
+
? '重新启动数字员工'
|
|
2069
|
+
: '启动数字员工'
|
|
2068
2070
|
: isEditing
|
|
2069
2071
|
? '保存更改'
|
|
2070
2072
|
: '创建计划';
|
|
@@ -2115,9 +2117,9 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
2115
2117
|
<div className="flex items-start gap-2">
|
|
2116
2118
|
<AlertTriangle className="mt-0.5 size-4 shrink-0" />
|
|
2117
2119
|
<div className="min-w-0 flex-1 space-y-1">
|
|
2118
|
-
<p className="font-medium"
|
|
2120
|
+
<p className="font-medium">重新启动会重置当前数字员工运行实例</p>
|
|
2119
2121
|
<p className="opacity-80">
|
|
2120
|
-
|
|
2122
|
+
系统会停止当前数字员工进程,并使用以下运行时配置重新启动。
|
|
2121
2123
|
如需修改成员或工作流,请先在团队编辑面板中修改。
|
|
2122
2124
|
默认使用全新会话,避免恢复大上下文时触发 API 频率限制。
|
|
2123
2125
|
</p>
|
|
@@ -2417,7 +2419,7 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
|
|
|
2417
2419
|
title={isRelaunch ? '重新启动设置' : '可选启动设置'}
|
|
2418
2420
|
description={
|
|
2419
2421
|
isRelaunch
|
|
2420
|
-
? '
|
|
2422
|
+
? '重新启动数字员工前,请确认成员名单和负责人运行时。'
|
|
2421
2423
|
: '默认只需关注项目路径;需要更多控制时再展开这里。'
|
|
2422
2424
|
}
|
|
2423
2425
|
summary={launchOptionalSummary}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Button } from '@renderer/components/ui/button';
|
|
4
|
+
import {
|
|
5
|
+
Dialog,
|
|
6
|
+
DialogContent,
|
|
7
|
+
DialogDescription,
|
|
8
|
+
DialogHeader,
|
|
9
|
+
DialogTitle,
|
|
10
|
+
} from '@renderer/components/ui/dialog';
|
|
11
|
+
import { Settings2, Smartphone } from 'lucide-react';
|
|
12
|
+
|
|
13
|
+
import { isQRPlatform, platformMeta } from './platformMeta';
|
|
14
|
+
import PlatformManualForm from './PlatformManualForm';
|
|
15
|
+
import PlatformSetupQR from './PlatformSetupQR';
|
|
16
|
+
|
|
17
|
+
interface PlatformOption {
|
|
18
|
+
key: string;
|
|
19
|
+
label: string;
|
|
20
|
+
color: string;
|
|
21
|
+
icon: 'qr' | 'settings';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const PLATFORM_OPTIONS: PlatformOption[] = [
|
|
25
|
+
{
|
|
26
|
+
key: 'feishu',
|
|
27
|
+
label: '飞书 / Lark',
|
|
28
|
+
color: 'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400',
|
|
29
|
+
icon: 'qr',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: 'weixin',
|
|
33
|
+
label: '微信',
|
|
34
|
+
color: 'bg-green-50 dark:bg-green-900/30 text-green-600 dark:text-green-400',
|
|
35
|
+
icon: 'qr',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: 'telegram',
|
|
39
|
+
label: 'Telegram',
|
|
40
|
+
color: 'bg-sky-50 dark:bg-sky-900/30 text-sky-600 dark:text-sky-400',
|
|
41
|
+
icon: 'settings',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: 'discord',
|
|
45
|
+
label: 'Discord',
|
|
46
|
+
color: 'bg-indigo-50 dark:bg-indigo-900/30 text-indigo-600 dark:text-indigo-400',
|
|
47
|
+
icon: 'settings',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: 'slack',
|
|
51
|
+
label: 'Slack',
|
|
52
|
+
color: 'bg-purple-50 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400',
|
|
53
|
+
icon: 'settings',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: 'dingtalk',
|
|
57
|
+
label: '钉钉',
|
|
58
|
+
color: 'bg-orange-50 dark:bg-orange-900/30 text-orange-600 dark:text-orange-400',
|
|
59
|
+
icon: 'settings',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: 'wecom',
|
|
63
|
+
label: '企业微信',
|
|
64
|
+
color: 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-600 dark:text-emerald-400',
|
|
65
|
+
icon: 'settings',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: 'qq',
|
|
69
|
+
label: 'QQ (OneBot)',
|
|
70
|
+
color: 'bg-cyan-50 dark:bg-cyan-900/30 text-cyan-600 dark:text-cyan-400',
|
|
71
|
+
icon: 'settings',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: 'qqbot',
|
|
75
|
+
label: 'QQ Bot (官方)',
|
|
76
|
+
color: 'bg-cyan-50 dark:bg-cyan-900/30 text-cyan-600 dark:text-cyan-400',
|
|
77
|
+
icon: 'settings',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: 'line',
|
|
81
|
+
label: 'LINE',
|
|
82
|
+
color: 'bg-lime-50 dark:bg-lime-900/30 text-lime-600 dark:text-lime-400',
|
|
83
|
+
icon: 'settings',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
key: 'weibo',
|
|
87
|
+
label: '微博',
|
|
88
|
+
color: 'bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400',
|
|
89
|
+
icon: 'settings',
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
type BindingStep = 'platform' | 'qr' | 'form';
|
|
94
|
+
|
|
95
|
+
interface PlatformBindingContentProps {
|
|
96
|
+
projectName: string;
|
|
97
|
+
workDir: string;
|
|
98
|
+
agentType: string;
|
|
99
|
+
onComplete: () => void;
|
|
100
|
+
onCancel: () => void;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function PlatformBindingContent({
|
|
104
|
+
projectName,
|
|
105
|
+
workDir,
|
|
106
|
+
agentType,
|
|
107
|
+
onComplete,
|
|
108
|
+
onCancel,
|
|
109
|
+
}: PlatformBindingContentProps): React.JSX.Element {
|
|
110
|
+
const [step, setStep] = useState<BindingStep>('platform');
|
|
111
|
+
const [selectedPlatform, setSelectedPlatform] = useState('');
|
|
112
|
+
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
setStep('platform');
|
|
115
|
+
setSelectedPlatform('');
|
|
116
|
+
}, [projectName, workDir, agentType]);
|
|
117
|
+
|
|
118
|
+
const handlePlatformSelect = (key: string): void => {
|
|
119
|
+
setSelectedPlatform(key);
|
|
120
|
+
setStep(isQRPlatform(key) ? 'qr' : 'form');
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
if (
|
|
124
|
+
step === 'qr' &&
|
|
125
|
+
(selectedPlatform === 'feishu' || selectedPlatform === 'lark' || selectedPlatform === 'weixin')
|
|
126
|
+
) {
|
|
127
|
+
return (
|
|
128
|
+
<PlatformSetupQR
|
|
129
|
+
platformType={selectedPlatform as 'feishu' | 'lark' | 'weixin'}
|
|
130
|
+
projectName={projectName}
|
|
131
|
+
workDir={workDir}
|
|
132
|
+
agentType={agentType}
|
|
133
|
+
onComplete={onComplete}
|
|
134
|
+
onCancel={() => setStep('platform')}
|
|
135
|
+
/>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (step === 'form' && platformMeta[selectedPlatform]) {
|
|
140
|
+
return (
|
|
141
|
+
<PlatformManualForm
|
|
142
|
+
platformType={selectedPlatform}
|
|
143
|
+
platformMeta={platformMeta[selectedPlatform]}
|
|
144
|
+
projectName={projectName}
|
|
145
|
+
workDir={workDir}
|
|
146
|
+
agentType={agentType}
|
|
147
|
+
onComplete={onComplete}
|
|
148
|
+
onCancel={() => setStep('platform')}
|
|
149
|
+
/>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return (
|
|
154
|
+
<div className="space-y-3 py-2">
|
|
155
|
+
<div className="rounded-md border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2 text-xs text-[var(--color-text-muted)]">
|
|
156
|
+
绑定渠道是可选项,用于将数字员工暴露到飞书、微信等外部平台;不绑定也可以在本机直接运行。
|
|
157
|
+
<br />
|
|
158
|
+
<span className="text-amber-500">⚠️ 绑定新渠道后需要重启服务,将短暂中断所有正在运行的会话。</span>
|
|
159
|
+
</div>
|
|
160
|
+
<div className="grid max-h-80 grid-cols-2 gap-2 overflow-y-auto">
|
|
161
|
+
{PLATFORM_OPTIONS.map(({ key, label, color, icon }) => (
|
|
162
|
+
<button
|
|
163
|
+
key={key}
|
|
164
|
+
type="button"
|
|
165
|
+
onClick={() => handlePlatformSelect(key)}
|
|
166
|
+
className="flex items-center gap-2.5 rounded-xl border border-[var(--color-border)] bg-[var(--color-surface-raised)] p-3 text-left transition-all hover:border-[var(--color-border-emphasis)] hover:bg-[var(--color-accent)]/5"
|
|
167
|
+
>
|
|
168
|
+
<div className={`h-9 w-9 rounded-lg ${color} flex shrink-0 items-center justify-center`}>
|
|
169
|
+
{icon === 'qr' ? <Smartphone size={16} /> : <Settings2 size={16} />}
|
|
170
|
+
</div>
|
|
171
|
+
<div className="min-w-0">
|
|
172
|
+
<div className="truncate text-sm font-medium text-[var(--color-text)]">{label}</div>
|
|
173
|
+
<div className="text-[11px] text-[var(--color-text-muted)]">{icon === 'qr' ? '扫码绑定' : '手动配置'}</div>
|
|
174
|
+
</div>
|
|
175
|
+
</button>
|
|
176
|
+
))}
|
|
177
|
+
</div>
|
|
178
|
+
<div className="flex justify-start pt-2">
|
|
179
|
+
<Button variant="outline" size="sm" onClick={onCancel}>
|
|
180
|
+
取消
|
|
181
|
+
</Button>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
interface PlatformBindingDialogProps extends PlatformBindingContentProps {
|
|
188
|
+
open: boolean;
|
|
189
|
+
onOpenChange: (open: boolean) => void;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function PlatformBindingDialog({
|
|
193
|
+
open,
|
|
194
|
+
onOpenChange,
|
|
195
|
+
projectName,
|
|
196
|
+
workDir,
|
|
197
|
+
agentType,
|
|
198
|
+
onComplete,
|
|
199
|
+
onCancel,
|
|
200
|
+
}: PlatformBindingDialogProps): React.JSX.Element {
|
|
201
|
+
return (
|
|
202
|
+
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
203
|
+
<DialogContent className="w-[calc(100vw-2rem)] max-w-2xl sm:w-[40rem]">
|
|
204
|
+
<DialogHeader>
|
|
205
|
+
<DialogTitle className="text-sm">绑定渠道</DialogTitle>
|
|
206
|
+
<DialogDescription className="text-xs">
|
|
207
|
+
可选:为当前数字员工选择外部平台渠道,绑定后通过 Hermit 对外接收消息。
|
|
208
|
+
</DialogDescription>
|
|
209
|
+
</DialogHeader>
|
|
210
|
+
<PlatformBindingContent
|
|
211
|
+
key={`${projectName}:${workDir}:${agentType}:${open ? 'open' : 'closed'}`}
|
|
212
|
+
projectName={projectName}
|
|
213
|
+
workDir={workDir}
|
|
214
|
+
agentType={agentType}
|
|
215
|
+
onComplete={onComplete}
|
|
216
|
+
onCancel={onCancel}
|
|
217
|
+
/>
|
|
218
|
+
</DialogContent>
|
|
219
|
+
</Dialog>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
@@ -29,6 +29,7 @@ export default function PlatformManualForm({
|
|
|
29
29
|
const [values, setValues] = useState<Record<string, unknown>>({});
|
|
30
30
|
const [showAdvanced, setShowAdvanced] = useState(false);
|
|
31
31
|
const [saving, setSaving] = useState(false);
|
|
32
|
+
const [restarting, setRestarting] = useState(false);
|
|
32
33
|
const [error, setError] = useState('');
|
|
33
34
|
|
|
34
35
|
const basicFields = meta.fields.filter((f) => f.group !== 'advanced');
|
|
@@ -57,11 +58,17 @@ export default function PlatformManualForm({
|
|
|
57
58
|
work_dir: workDir,
|
|
58
59
|
agent_type: agentType,
|
|
59
60
|
});
|
|
61
|
+
// Restart CC Connect to activate the new platform binding
|
|
62
|
+
setRestarting(true);
|
|
63
|
+
try {
|
|
64
|
+
await api.ccSettings.restart();
|
|
65
|
+
} catch { /* best effort */ }
|
|
60
66
|
onComplete();
|
|
61
67
|
} catch (e: unknown) {
|
|
62
68
|
setError(e instanceof Error ? e.message : String(e));
|
|
63
69
|
} finally {
|
|
64
70
|
setSaving(false);
|
|
71
|
+
setRestarting(false);
|
|
65
72
|
}
|
|
66
73
|
};
|
|
67
74
|
|