@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
|
@@ -402,7 +402,19 @@ export function isTeamModelAvailableForUi(
|
|
|
402
402
|
return getRuntimeModelAvailability(providerId, trimmed, providerStatus) === 'available';
|
|
403
403
|
}
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
if (!providerStatus) {
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const hasRuntimeModelTruth =
|
|
410
|
+
providerStatus.models.length > 0 ||
|
|
411
|
+
(providerStatus.modelCatalog?.models.length ?? 0) > 0 ||
|
|
412
|
+
(providerStatus.modelAvailability?.length ?? 0) > 0;
|
|
413
|
+
if (!hasRuntimeModelTruth) {
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return getRuntimeModelAvailability(providerId, trimmed, providerStatus) === 'available';
|
|
406
418
|
}
|
|
407
419
|
|
|
408
420
|
export function normalizeExplicitTeamModelForUi(
|
|
@@ -437,7 +449,11 @@ export function normalizeTeamModelForUi(
|
|
|
437
449
|
return isTeamModelAvailableForUi(providerId, trimmed, providerStatus) ? normalized : '';
|
|
438
450
|
}
|
|
439
451
|
|
|
440
|
-
|
|
452
|
+
if (providerId === 'codex' && trimmed === 'gpt-5.4-mini') {
|
|
453
|
+
return '';
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
return isTeamModelAvailableForUi(providerId, trimmed, providerStatus) ? normalized : '';
|
|
441
457
|
}
|
|
442
458
|
|
|
443
459
|
export function getTeamModelSelectionError(
|
package/src/shared/types/api.ts
CHANGED
|
@@ -81,6 +81,7 @@ import type {
|
|
|
81
81
|
TeamProvisioningModelVerificationMode,
|
|
82
82
|
TeamProvisioningPrepareResult,
|
|
83
83
|
TeamProvisioningProgress,
|
|
84
|
+
SystemManagerSummary,
|
|
84
85
|
TeamSummary,
|
|
85
86
|
TeamTask,
|
|
86
87
|
TeamTaskStatus,
|
|
@@ -93,6 +94,7 @@ import type {
|
|
|
93
94
|
ToolApprovalSettings,
|
|
94
95
|
UpdateKanbanPatch,
|
|
95
96
|
} from './team';
|
|
97
|
+
import type { SystemManagerAPI } from './systemManager';
|
|
96
98
|
import type { TerminalAPI } from './terminal';
|
|
97
99
|
import type { WaterfallData } from './visualization';
|
|
98
100
|
import type { RecentProjectsElectronApi } from '@features/recent-projects/contracts';
|
|
@@ -491,8 +493,8 @@ export interface CcSession {
|
|
|
491
493
|
projectId: string;
|
|
492
494
|
sessionKey: string;
|
|
493
495
|
platform: string;
|
|
494
|
-
userName: string;
|
|
495
|
-
chatName: string;
|
|
496
|
+
userName: string | null;
|
|
497
|
+
chatName: string | null;
|
|
496
498
|
active: boolean;
|
|
497
499
|
live: boolean;
|
|
498
500
|
historyCount: number;
|
|
@@ -522,8 +524,122 @@ export interface CcSessionDetail {
|
|
|
522
524
|
history: CcSessionMessage[];
|
|
523
525
|
}
|
|
524
526
|
|
|
527
|
+
export type ConversationTelemetryExportFormat = 'csv' | 'json' | 'markdown' | 'plaintext';
|
|
528
|
+
|
|
529
|
+
export type ConversationTelemetryIncludeContent = 'none' | 'summary' | 'full';
|
|
530
|
+
|
|
531
|
+
export interface ConversationTelemetryQuery {
|
|
532
|
+
teamName?: string;
|
|
533
|
+
platform?: string;
|
|
534
|
+
from?: string;
|
|
535
|
+
to?: string;
|
|
536
|
+
identityType?: 'person' | 'group' | 'unknown';
|
|
537
|
+
identityId?: string;
|
|
538
|
+
includeContent?: ConversationTelemetryIncludeContent;
|
|
539
|
+
includeToolResults?: boolean;
|
|
540
|
+
includeSystemMessages?: boolean;
|
|
541
|
+
limit?: number;
|
|
542
|
+
offset?: number;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export interface ConversationTelemetryMessage {
|
|
546
|
+
role: 'user' | 'assistant' | 'system' | 'tool' | 'unknown';
|
|
547
|
+
timestamp?: string;
|
|
548
|
+
content: string;
|
|
549
|
+
uuid?: string;
|
|
550
|
+
parentUuid?: string | null;
|
|
551
|
+
model?: string;
|
|
552
|
+
requestId?: string;
|
|
553
|
+
usage?: {
|
|
554
|
+
inputTokens: number;
|
|
555
|
+
outputTokens: number;
|
|
556
|
+
cacheReadTokens: number;
|
|
557
|
+
cacheCreationTokens: number;
|
|
558
|
+
totalTokens: number;
|
|
559
|
+
};
|
|
560
|
+
isMeta?: boolean;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
export interface ConversationTelemetryRow {
|
|
564
|
+
teamName: string;
|
|
565
|
+
teamDisplayName: string;
|
|
566
|
+
projectName: string;
|
|
567
|
+
session: {
|
|
568
|
+
ccSessionId?: string;
|
|
569
|
+
sessionKey: string;
|
|
570
|
+
agentSessionId?: string;
|
|
571
|
+
claudeSessionId?: string;
|
|
572
|
+
projectPath?: string;
|
|
573
|
+
jsonlRelPath?: string;
|
|
574
|
+
createdAt?: string;
|
|
575
|
+
updatedAt?: string;
|
|
576
|
+
startTime?: string;
|
|
577
|
+
endTime?: string;
|
|
578
|
+
active?: boolean;
|
|
579
|
+
live?: boolean;
|
|
580
|
+
matchStatus: 'matched' | 'missing-agent-session-id' | 'jsonl-not-found' | 'ambiguous' | 'local-only';
|
|
581
|
+
};
|
|
582
|
+
identity: {
|
|
583
|
+
platform: string;
|
|
584
|
+
type: 'person' | 'group' | 'unknown';
|
|
585
|
+
id?: string;
|
|
586
|
+
userId?: string;
|
|
587
|
+
chatId?: string;
|
|
588
|
+
displayName: string;
|
|
589
|
+
userName?: string;
|
|
590
|
+
chatName?: string;
|
|
591
|
+
confidence: 'exact-id' | 'name-only' | 'allowlist-fallback' | 'session-key-only' | 'missing-id';
|
|
592
|
+
};
|
|
593
|
+
content: {
|
|
594
|
+
messageCount: number;
|
|
595
|
+
userMessageCount: number;
|
|
596
|
+
assistantMessageCount: number;
|
|
597
|
+
toolResultCount: number;
|
|
598
|
+
firstUserMessage?: string;
|
|
599
|
+
firstUserMessageAt?: string;
|
|
600
|
+
lastUserMessage?: string;
|
|
601
|
+
lastUserMessageAt?: string;
|
|
602
|
+
lastMessageRole?: ConversationTelemetryMessage['role'];
|
|
603
|
+
lastMessageContent?: string;
|
|
604
|
+
lastMessageAt?: string;
|
|
605
|
+
text?: string;
|
|
606
|
+
messages?: ConversationTelemetryMessage[];
|
|
607
|
+
};
|
|
608
|
+
usage: {
|
|
609
|
+
inputTokens: number;
|
|
610
|
+
outputTokens: number;
|
|
611
|
+
cacheReadTokens: number;
|
|
612
|
+
cacheCreationTokens: number;
|
|
613
|
+
totalTokens: number;
|
|
614
|
+
assistantTurnsWithUsage: number;
|
|
615
|
+
models: Record<string, number>;
|
|
616
|
+
toolCalls: Record<string, number>;
|
|
617
|
+
usageSource: 'claude-jsonl' | 'missing';
|
|
618
|
+
};
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
export interface ConversationTelemetryResponse {
|
|
622
|
+
rows: ConversationTelemetryRow[];
|
|
623
|
+
nextOffset?: number;
|
|
624
|
+
computedAt: string;
|
|
625
|
+
summary: {
|
|
626
|
+
conversations: number;
|
|
627
|
+
runningConversations: number;
|
|
628
|
+
missingIdentityIds: number;
|
|
629
|
+
unmatchedSessions: number;
|
|
630
|
+
totalTokens: number;
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export interface ConversationTelemetryExportResponse {
|
|
635
|
+
filename: string;
|
|
636
|
+
mimeType: string;
|
|
637
|
+
content: string;
|
|
638
|
+
}
|
|
639
|
+
|
|
525
640
|
export interface TeamsAPI {
|
|
526
641
|
list: () => Promise<TeamSummary[]>;
|
|
642
|
+
ensureSystemManager: () => Promise<SystemManagerSummary>;
|
|
527
643
|
getData: (teamName: string) => Promise<TeamViewSnapshot>;
|
|
528
644
|
getTaskChangePresence: (teamName: string) => Promise<Record<string, TaskChangePresenceState>>;
|
|
529
645
|
setChangePresenceTracking: (teamName: string, enabled: boolean) => Promise<void>;
|
|
@@ -1096,6 +1212,9 @@ export interface ElectronAPI extends RecentProjectsElectronApi {
|
|
|
1096
1212
|
// CLI Installer API
|
|
1097
1213
|
cliInstaller: CliInstallerAPI;
|
|
1098
1214
|
|
|
1215
|
+
// System Manager / Control Console API
|
|
1216
|
+
systemManager: SystemManagerAPI;
|
|
1217
|
+
|
|
1099
1218
|
// Embedded Terminal API (xterm.js + node-pty)
|
|
1100
1219
|
terminal: TerminalAPI;
|
|
1101
1220
|
|
|
@@ -93,6 +93,8 @@ export interface CcProjectSettingsUpdate {
|
|
|
93
93
|
reply_footer?: boolean;
|
|
94
94
|
inject_sender?: boolean;
|
|
95
95
|
platform_allow_from?: Record<string, string>;
|
|
96
|
+
/** 群聊允许的 chat ID,* 表示所有群聊 */
|
|
97
|
+
platform_allow_chat?: Record<string, string>;
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
export interface CcAddPlatformRequest {
|
|
@@ -15,6 +15,10 @@ import type {
|
|
|
15
15
|
McpCatalogItem,
|
|
16
16
|
McpCustomInstallRequest,
|
|
17
17
|
McpInstallRequest,
|
|
18
|
+
McpLibraryEntry,
|
|
19
|
+
McpLibraryImportRequest,
|
|
20
|
+
McpLibraryImportResult,
|
|
21
|
+
McpLibraryUpsertRequest,
|
|
18
22
|
McpSearchResult,
|
|
19
23
|
McpServerDiagnostic,
|
|
20
24
|
} from './mcp';
|
|
@@ -59,6 +63,11 @@ export interface McpCatalogAPI {
|
|
|
59
63
|
installCustom: (request: McpCustomInstallRequest) => Promise<OperationResult>;
|
|
60
64
|
uninstall: (name: string, scope?: string, projectPath?: string) => Promise<OperationResult>;
|
|
61
65
|
githubStars: (repositoryUrls: string[]) => Promise<Record<string, number>>;
|
|
66
|
+
// ── Library (cc-switch style global library of server definitions) ──
|
|
67
|
+
libraryList: () => Promise<McpLibraryEntry[]>;
|
|
68
|
+
libraryUpsert: (request: McpLibraryUpsertRequest) => Promise<McpLibraryEntry>;
|
|
69
|
+
libraryDelete: (id: string) => Promise<void>;
|
|
70
|
+
libraryImport: (request: McpLibraryImportRequest) => Promise<McpLibraryImportResult>;
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
// ── Skills API ─────────────────────────────────────────────────────────────
|
|
@@ -132,3 +132,44 @@ export interface McpSearchResult {
|
|
|
132
132
|
servers: McpCatalogItem[];
|
|
133
133
|
warnings: string[]; // e.g. "Official registry unavailable"
|
|
134
134
|
}
|
|
135
|
+
|
|
136
|
+
// ── MCP Library (cc-switch style: a reusable global library of server defs) ──
|
|
137
|
+
//
|
|
138
|
+
// A saved server definition lives once in the library and can be enabled for
|
|
139
|
+
// any worker (= installed into that worker's project config) without re-typing
|
|
140
|
+
// the command / URL / env each time.
|
|
141
|
+
|
|
142
|
+
export interface McpLibraryEntry {
|
|
143
|
+
id: string; // stable uuid
|
|
144
|
+
name: string; // server name used when installing (`claude mcp add <name>`)
|
|
145
|
+
description?: string;
|
|
146
|
+
installSpec: McpInstallSpec;
|
|
147
|
+
envValues?: Record<string, string>; // saved non-secret defaults
|
|
148
|
+
headers?: McpHeaderDef[];
|
|
149
|
+
createdAt: number;
|
|
150
|
+
updatedAt: number;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Create (omit id) or update (provide id) a library entry. */
|
|
154
|
+
export interface McpLibraryUpsertRequest {
|
|
155
|
+
id?: string;
|
|
156
|
+
name: string;
|
|
157
|
+
description?: string;
|
|
158
|
+
installSpec: McpInstallSpec;
|
|
159
|
+
envValues?: Record<string, string>;
|
|
160
|
+
headers?: McpHeaderDef[];
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Import existing MCP servers from live config into the library.
|
|
165
|
+
* Pulls user-scope servers plus, when a projectPath is given, that worker's
|
|
166
|
+
* project-scope servers. Existing library entries (matched by name) are skipped.
|
|
167
|
+
*/
|
|
168
|
+
export interface McpLibraryImportRequest {
|
|
169
|
+
projectPath?: string;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface McpLibraryImportResult {
|
|
173
|
+
imported: string[];
|
|
174
|
+
skipped: string[];
|
|
175
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface SystemManagerStatus {
|
|
2
|
+
displayName: '控制台';
|
|
3
|
+
defaultWorkDir: string;
|
|
4
|
+
selectedWorkDir: string;
|
|
5
|
+
workflowFolder?: string;
|
|
6
|
+
claudeCommand: 'claude';
|
|
7
|
+
localStatus: 'ready' | 'missing-claude' | 'error';
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface SystemManagerConfig {
|
|
12
|
+
schemaVersion: 1;
|
|
13
|
+
selectedWorkDir: string;
|
|
14
|
+
workflowFolder?: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SystemManagerConfigPatch {
|
|
19
|
+
selectedWorkDir?: string;
|
|
20
|
+
workflowFolder?: string | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface WorkflowPromptSummary {
|
|
24
|
+
id: string;
|
|
25
|
+
label: string;
|
|
26
|
+
filename: string;
|
|
27
|
+
path: string;
|
|
28
|
+
sizeBytes: number;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface WorkflowPromptListResponse {
|
|
33
|
+
folder: string;
|
|
34
|
+
prompts: WorkflowPromptSummary[];
|
|
35
|
+
warnings: string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface WorkflowPromptContentResponse {
|
|
39
|
+
prompt: WorkflowPromptSummary;
|
|
40
|
+
content: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface SystemManagerAPI {
|
|
44
|
+
getStatus: () => Promise<SystemManagerStatus>;
|
|
45
|
+
getConfig: () => Promise<SystemManagerConfig>;
|
|
46
|
+
updateConfig: (patch: SystemManagerConfigPatch) => Promise<SystemManagerConfig>;
|
|
47
|
+
listWorkflowPrompts: (folder: string) => Promise<WorkflowPromptListResponse>;
|
|
48
|
+
readWorkflowPrompt: (folder: string, id: string) => Promise<WorkflowPromptContentResponse>;
|
|
49
|
+
}
|
package/src/shared/types/team.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import type { ExecutionTarget } from './api';
|
|
2
2
|
import type { EnhancedChunk } from '@main/types';
|
|
3
3
|
|
|
4
|
+
export const SYSTEM_MANAGER_TEAM_NAME = 'system-manager';
|
|
5
|
+
export const SYSTEM_MANAGER_DISPLAY_NAME = '控制台';
|
|
6
|
+
export const SYSTEM_MANAGER_BIND_PROJECT = 'my-project';
|
|
7
|
+
|
|
8
|
+
export interface SystemManagerSummary {
|
|
9
|
+
teamName: typeof SYSTEM_MANAGER_TEAM_NAME;
|
|
10
|
+
displayName: typeof SYSTEM_MANAGER_DISPLAY_NAME;
|
|
11
|
+
bindProject: typeof SYSTEM_MANAGER_BIND_PROJECT;
|
|
12
|
+
workDir: string;
|
|
13
|
+
projectPath?: string;
|
|
14
|
+
description: string;
|
|
15
|
+
localStatus: 'ready';
|
|
16
|
+
ccConnectProjectStatus: 'bound' | 'missing';
|
|
17
|
+
feishuStatus: 'unbound' | 'connected' | 'error' | 'unknown';
|
|
18
|
+
}
|
|
19
|
+
|
|
4
20
|
export interface TeamMember {
|
|
5
21
|
name: string;
|
|
6
22
|
agentId?: string;
|
|
@@ -36,6 +52,8 @@ export interface TeamConfig {
|
|
|
36
52
|
managedSources?: string;
|
|
37
53
|
disabledCommands?: string[];
|
|
38
54
|
platformAllowFrom?: Record<string, string>;
|
|
55
|
+
/** 群聊允许的 chat ID(按平台),* 表示所有群聊 */
|
|
56
|
+
platformAllowChat?: Record<string, string>;
|
|
39
57
|
members?: TeamMember[];
|
|
40
58
|
projectPath?: string;
|
|
41
59
|
projectPathHistory?: string[];
|
|
@@ -61,6 +79,8 @@ export interface TeamUpdateConfigRequest {
|
|
|
61
79
|
managedSources?: string;
|
|
62
80
|
disabledCommands?: string[];
|
|
63
81
|
platformAllowFrom?: Record<string, string>;
|
|
82
|
+
/** 群聊允许的 chat ID(按平台),* 表示所有群聊 */
|
|
83
|
+
platformAllowChat?: Record<string, string>;
|
|
64
84
|
executionTarget?: ExecutionTarget;
|
|
65
85
|
leadProviderId?: TeamProviderId;
|
|
66
86
|
leadModel?: string;
|
|
@@ -122,6 +142,13 @@ export interface TeamSummary {
|
|
|
122
142
|
runtimeCandidatePendingCount?: number;
|
|
123
143
|
noRuntimePendingCount?: number;
|
|
124
144
|
permissionPendingCount?: number;
|
|
145
|
+
/** Aggregated session stats from local JSONL files */
|
|
146
|
+
stats?: {
|
|
147
|
+
sessions: number;
|
|
148
|
+
messages: number;
|
|
149
|
+
tokens: number;
|
|
150
|
+
durationMs: number;
|
|
151
|
+
};
|
|
125
152
|
}
|
|
126
153
|
|
|
127
154
|
export type TeamTaskStatus = 'pending' | 'in_progress' | 'completed' | 'deleted';
|
|
@@ -1092,6 +1119,8 @@ export interface TeamViewSnapshot {
|
|
|
1092
1119
|
processes: TeamProcess[];
|
|
1093
1120
|
warnings?: string[];
|
|
1094
1121
|
isAlive?: boolean;
|
|
1122
|
+
/** Bound external platforms (feishu, telegram, etc.) from cc-connect */
|
|
1123
|
+
platforms?: import('./ccConnect').CcProjectPlatform[];
|
|
1095
1124
|
/** cc-connect project name this team is bound to */
|
|
1096
1125
|
bindProject?: string;
|
|
1097
1126
|
/** 团队协作开关:false = 独立作战,true = 可跨团队调度 */
|
|
@@ -40,8 +40,10 @@ export interface TerminalAPI {
|
|
|
40
40
|
write: (ptyId: string, data: string) => void;
|
|
41
41
|
/** Resize PTY terminal (fire-and-forget). */
|
|
42
42
|
resize: (ptyId: string, cols: number, rows: number) => void;
|
|
43
|
-
/** Kill PTY process
|
|
44
|
-
kill: (ptyId: string) => void
|
|
43
|
+
/** Kill PTY process. */
|
|
44
|
+
kill: (ptyId: string) => Promise<void>;
|
|
45
|
+
/** Open command in system Terminal.app (macOS). */
|
|
46
|
+
openExternal: (options: { command: string; args?: string[]; cwd?: string }) => Promise<void>;
|
|
45
47
|
/** Subscribe to PTY data output. Returns cleanup function. */
|
|
46
48
|
onData: (cb: (event: unknown, ptyId: string, data: string) => void) => () => void;
|
|
47
49
|
/** Subscribe to PTY exit events. Returns cleanup function. */
|
|
@@ -106,6 +106,35 @@ export function buildPluginId(pluginName: string, marketplaceName: string): stri
|
|
|
106
106
|
return `${pluginName}@${marketplaceName}`;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Substrings that mark a plugin as "essential" (必装) — recommended/required for
|
|
111
|
+
* the workbench. Matched against both the pluginId and homepage so it works
|
|
112
|
+
* regardless of the marketplace name a plugin is published under.
|
|
113
|
+
*/
|
|
114
|
+
export const ESSENTIAL_PLUGIN_PATTERNS = ['oh-my-claudecode'] as const;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Marketplace plugins that should not be shown in Hermit's plugin store.
|
|
118
|
+
*/
|
|
119
|
+
export const HIDDEN_PLUGIN_PATTERNS = ['codex@openai-codex', 'codex-plugin-cc'] as const;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Whether a plugin is one of the essential plugins surfaced with a 必装 badge and
|
|
123
|
+
* the recommendation banner.
|
|
124
|
+
*/
|
|
125
|
+
export function isEssentialPlugin(plugin: { pluginId: string; homepage?: string }): boolean {
|
|
126
|
+
const haystack = `${plugin.pluginId} ${plugin.homepage ?? ''}`.toLowerCase();
|
|
127
|
+
return ESSENTIAL_PLUGIN_PATTERNS.some((pattern) => haystack.includes(pattern));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Whether a plugin should be hidden from the plugin store catalog.
|
|
132
|
+
*/
|
|
133
|
+
export function isHiddenPluginFromStore(plugin: { pluginId: string; homepage?: string }): boolean {
|
|
134
|
+
const haystack = `${plugin.pluginId} ${plugin.homepage ?? ''}`.toLowerCase();
|
|
135
|
+
return HIDDEN_PLUGIN_PATTERNS.some((pattern) => haystack.includes(pattern));
|
|
136
|
+
}
|
|
137
|
+
|
|
109
138
|
/**
|
|
110
139
|
* Namespaced operation-state key for plugin install/uninstall UI state.
|
|
111
140
|
*/
|
|
@@ -58,12 +58,12 @@ export function createLegacyRuntimeFallbackCliExtensionCapabilities(
|
|
|
58
58
|
export function getCliProviderExtensionCapabilities(
|
|
59
59
|
provider: Pick<CliProviderStatus, 'capabilities'> | null | undefined
|
|
60
60
|
): CliExtensionCapabilities {
|
|
61
|
-
const fallback = createDefaultCliExtensionCapabilities();
|
|
62
61
|
const extensions = provider?.capabilities?.extensions;
|
|
63
62
|
if (!extensions) {
|
|
64
|
-
return
|
|
63
|
+
return createLegacyRuntimeFallbackCliExtensionCapabilities();
|
|
65
64
|
}
|
|
66
65
|
|
|
66
|
+
const fallback = createDefaultCliExtensionCapabilities();
|
|
67
67
|
return {
|
|
68
68
|
plugins: extensions.plugins ?? fallback.plugins,
|
|
69
69
|
mcp: extensions.mcp ?? fallback.mcp,
|