@yancyyu/openhermit 1.6.41 → 1.6.43
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/README.md +98 -89
- package/bin/hermit.mjs +96 -0
- package/dist-renderer/assets/{ProjectEditorOverlay-Br0X83Jf.js → ProjectEditorOverlay-C98qSs7-.js} +1 -1
- package/dist-renderer/assets/{TeamGraphOverlay-DHMTbZPZ.js → TeamGraphOverlay-CsBbZwcL.js} +1 -1
- package/dist-renderer/assets/{_basePickBy-DzIiX7yH.js → _basePickBy-ZOyLWjMK.js} +1 -1
- package/dist-renderer/assets/{_baseUniq-6hZuzTLU.js → _baseUniq-DBb726rt.js} +1 -1
- package/dist-renderer/assets/{arc-CXgO6fx_.js → arc-CdiTaR_R.js} +1 -1
- package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-DKWgtDHr.js → architectureDiagram-VXUJARFQ-Cz3sc5TH.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-VD42YOAC-DOMUcC40.js → blockDiagram-VD42YOAC-DE4c-KJ3.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-YG6GDRKO-B_k2L7qX.js → c4Diagram-YG6GDRKO-CmTMDTrV.js} +1 -1
- package/dist-renderer/assets/channel-KTpqi9eT.js +1 -0
- package/dist-renderer/assets/{chunk-4BX2VUAB-BeD_ccFy.js → chunk-4BX2VUAB-rhHy3tFl.js} +1 -1
- package/dist-renderer/assets/{chunk-55IACEB6-ClZfkA5w.js → chunk-55IACEB6-fLZBzuo_.js} +1 -1
- package/dist-renderer/assets/{chunk-B4BG7PRW-5XluxXsn.js → chunk-B4BG7PRW-DOzxQhim.js} +1 -1
- package/dist-renderer/assets/{chunk-DI55MBZ5-BzIjjNVm.js → chunk-DI55MBZ5-COQCcXC5.js} +1 -1
- package/dist-renderer/assets/{chunk-FMBD7UC4-HgH3MK_H.js → chunk-FMBD7UC4-IKU9U_Y4.js} +1 -1
- package/dist-renderer/assets/{chunk-QN33PNHL-WeC5T3Ba.js → chunk-QN33PNHL-D6WV154X.js} +1 -1
- package/dist-renderer/assets/{chunk-QZHKN3VN-Cu1ApHfW.js → chunk-QZHKN3VN-D90_2DQp.js} +1 -1
- package/dist-renderer/assets/{chunk-TZMSLE5B-BOhlynJM.js → chunk-TZMSLE5B-BQEil57G.js} +1 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-lpzulY5X.js +1 -0
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-lpzulY5X.js +1 -0
- package/dist-renderer/assets/clone-CriGymY9.js +1 -0
- package/dist-renderer/assets/{cose-bilkent-S5V4N54A-DGZSihDQ.js → cose-bilkent-S5V4N54A-6WiK6U2P.js} +1 -1
- package/dist-renderer/assets/{dagre-6UL2VRFP-CnxwCbku.js → dagre-6UL2VRFP-DF4MMuTn.js} +1 -1
- package/dist-renderer/assets/{diagram-PSM6KHXK-DsIhoxdI.js → diagram-PSM6KHXK-CcF1eZ7E.js} +1 -1
- package/dist-renderer/assets/{diagram-QEK2KX5R-Cmh9KUF5.js → diagram-QEK2KX5R-DYlOVPQB.js} +1 -1
- package/dist-renderer/assets/{diagram-S2PKOQOG-CKxV456A.js → diagram-S2PKOQOG-BHXWsZOP.js} +1 -1
- package/dist-renderer/assets/{erDiagram-Q2GNP2WA-EnvYjOjc.js → erDiagram-Q2GNP2WA-GjmuBx8d.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-NV44I4VS-BmNeWY_A.js → flowDiagram-NV44I4VS-BuS7YVHk.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-JELNMOA3-D30fyK-u.js → ganttDiagram-JELNMOA3-3Teu5tAa.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-CrUNiYg1.js → gitGraphDiagram-V2S2FVAM-BiLdCYu5.js} +1 -1
- package/dist-renderer/assets/{graph-CY1gTfTb.js → graph-CDP_R8ct.js} +1 -1
- package/dist-renderer/assets/{index-CaEbzwAU.js → index-BSZdT-g-.js} +1 -1
- package/dist-renderer/assets/{index-D5K-SjBG.js → index-BhWvMqsz.js} +1 -1
- package/dist-renderer/assets/{index-9_hO4N1e.js → index-C2_AupSj.js} +1 -1
- package/dist-renderer/assets/{index-59r209c1.js → index-C5ujiwAR.js} +580 -588
- package/dist-renderer/assets/index-CIS2CTK9.css +1 -0
- package/dist-renderer/assets/{index-DMR9B1UP.js → index-CVNjLwkq.js} +1 -1
- package/dist-renderer/assets/{index-BC2hXmg_.js → index-CwG3se0q.js} +1 -1
- package/dist-renderer/assets/{infoDiagram-HS3SLOUP-By_XUlcD.js → infoDiagram-HS3SLOUP-DLHUFo72.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-BM1LJE9m.js → journeyDiagram-XKPGCS4Q-BE07RpJD.js} +1 -1
- package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-DHIW3aTA.js → kanban-definition-3W4ZIXB7-DDHZy4NB.js} +1 -1
- package/dist-renderer/assets/{layout-DAKiL_Mo.js → layout-5nA5wUxO.js} +1 -1
- package/dist-renderer/assets/{linear-DwOaRYea.js → linear-BtF1i2qN.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-b7bJ2cha.js → mindmap-definition-VGOIOE7T-Z1Ui9Sqy.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-ADFJNKIX-DxyL9Zr2.js → pieDiagram-ADFJNKIX-LCjxckWv.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-CR33pHlF.js → quadrantDiagram-AYHSOK5B-BOwKjSco.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-BAiSRSlh.js → requirementDiagram-UZGBJVZJ-pChP8Znd.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-C8JmDjoa.js → sankeyDiagram-TZEHDZUN-DifZ2qpo.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-c1d0Wi1m.js → sequenceDiagram-WL72ISMW-CJg-WYyY.js} +1 -1
- package/dist-renderer/assets/{splashScene-D0YB9uxm.js → splashScene-94xWCzLA.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-nT8BiH2O.js → stateDiagram-FKZM4ZOC-DWHOoFdv.js} +1 -1
- package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-CGYZOoMb.js +1 -0
- package/dist-renderer/assets/{timeline-definition-IT6M3QCI-DpoRepUA.js → timeline-definition-IT6M3QCI-CPgokIo8.js} +1 -1
- package/dist-renderer/assets/{treemap-GDKQZRPO-C41UJeIH.js → treemap-GDKQZRPO-DAVqSR9L.js} +1 -1
- package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-KMjGARKN.js → xychartDiagram-PRI3JC2R-CCOcGbrD.js} +1 -1
- package/dist-renderer/chat-community-qr.jpg +0 -0
- package/dist-renderer/fonts/Agave-Bold.ttf +0 -0
- package/dist-renderer/fonts/Agave-Regular.ttf +0 -0
- package/dist-renderer/icon.png +0 -0
- package/dist-renderer/icon.rar +0 -0
- package/dist-renderer/index.html +3 -3
- package/package.json +21 -26
- package/src/features/worker-society/core/application/WorkerSocietyService.test.ts +802 -0
- package/src/features/worker-society/core/application/WorkerSocietyService.ts +428 -0
- package/src/features/worker-society/core/application/fakes.ts +101 -0
- package/src/features/worker-society/core/application/ports.ts +70 -0
- package/src/features/worker-society/core/domain/models/society.ts +141 -0
- package/src/features/worker-society/core/domain/policies/societyPolicies.test.ts +739 -0
- package/src/features/worker-society/core/domain/policies/societyPolicies.ts +496 -0
- package/src/features/worker-society/main/adapters/input/societyMcp.test.ts +317 -0
- package/src/features/worker-society/main/adapters/input/societyMcp.ts +257 -0
- package/src/features/worker-society/main/adapters/input/societyRoutes.test.ts +695 -0
- package/src/features/worker-society/main/adapters/input/societyRoutes.ts +194 -0
- package/src/features/worker-society/main/composition/societyComposition.test.ts +74 -0
- package/src/features/worker-society/main/composition/societyComposition.ts +70 -0
- package/src/features/worker-society/main/composition/workerSocietyPlugin.test.ts +69 -0
- package/src/features/worker-society/main/composition/workerSocietyPlugin.ts +67 -0
- package/src/features/worker-society/main/infrastructure/crossTeamMessageGateway.test.ts +132 -0
- package/src/features/worker-society/main/infrastructure/crossTeamMessageGateway.ts +84 -0
- package/src/features/worker-society/main/infrastructure/fsStores.test.ts +216 -0
- package/src/features/worker-society/main/infrastructure/fsStores.ts +113 -0
- package/src/features/worker-society/main/infrastructure/mergingProfileStore.test.ts +195 -0
- package/src/features/worker-society/main/infrastructure/mergingProfileStore.ts +96 -0
- package/src/features/worker-society/renderer/SocietyGraph.tsx +166 -0
- package/src/features/worker-society/renderer/SocietyNodeLabels.tsx +139 -0
- package/src/features/worker-society/renderer/SocietyNodeOverlay.tsx +339 -0
- package/src/features/worker-society/renderer/SocietyView.tsx +437 -0
- package/src/features/worker-society/renderer/index.ts +11 -0
- package/src/features/worker-society/renderer/societyApi.test.ts +259 -0
- package/src/features/worker-society/renderer/societyApi.ts +144 -0
- package/src/features/worker-society/renderer/societyGraphAdapter.test.ts +321 -0
- package/src/features/worker-society/renderer/societyGraphAdapter.ts +240 -0
- package/src/features/worker-society/renderer/societyOverlayActions.test.ts +57 -0
- package/src/features/worker-society/renderer/societyOverlayActions.ts +49 -0
- package/src/features/worker-society/renderer/societyStore.test.ts +218 -0
- package/src/features/worker-society/renderer/societyStore.ts +146 -0
- package/src/features/worker-society/renderer/societyViewUtils.test.ts +81 -0
- package/src/features/worker-society/renderer/societyViewUtils.ts +68 -0
- package/src/main/ipc/extensions.ts +27 -0
- package/src/main/server.ts +1731 -539
- package/src/main/services/ccConnect/CcConnectBridge.ts +26 -11
- package/src/main/services/ccConnect/CcConnectClient.ts +9 -2
- package/src/main/services/ccConnect/workDirReconcile.test.ts +57 -0
- package/src/main/services/ccConnect/workDirReconcile.ts +36 -0
- package/src/main/services/direct-cli/DirectCliSessionManager.test.ts +397 -0
- package/src/main/services/direct-cli/DirectCliSessionManager.ts +508 -0
- package/src/main/services/direct-cli/DirectCliSessionStore.test.ts +79 -0
- package/src/main/services/direct-cli/DirectCliSessionStore.ts +97 -0
- package/src/main/services/direct-cli/__tests__/directCliMessageId.test.ts +40 -0
- package/src/main/services/direct-cli/directCliMessageId.ts +21 -0
- package/src/main/services/direct-cli/index.ts +17 -0
- package/src/main/services/extensions/capability-packs/CapabilityPackLoaderService.ts +637 -0
- package/src/main/services/extensions/catalog/PluginCatalogService.ts +2 -2
- package/src/main/services/loop-assets/LoopAssetsScannerService.ts +657 -0
- package/src/main/services/runtime/providerAwareCliEnv.ts +33 -5
- package/src/main/services/session-intelligence/LocalSessionScanner.ts +156 -71
- package/src/main/services/session-intelligence/SessionUsageParser.ts +103 -8
- package/src/main/services/session-intelligence/UsageTelemetryService.ts +11 -0
- package/src/main/services/session-intelligence/__tests__/teamSessionListMapper.test.ts +104 -0
- package/src/main/services/session-intelligence/teamSessionListMapper.ts +78 -0
- package/src/main/services/system-manager/AdminLoopInitializer.ts +95 -0
- package/src/main/services/system-manager/BuiltinWorkflowSeeder.ts +744 -0
- package/src/main/services/system-manager/SystemManagerConfigService.ts +19 -1
- package/src/main/services/system-manager/WorkflowPromptService.ts +58 -5
- package/src/main/services/system-manager/__tests__/AdminLoopInitializer.test.ts +129 -0
- package/src/main/services/system-manager/__tests__/SystemManagerConfigService.test.ts +60 -0
- package/src/main/services/teams-mvp/CollaborationBoardService.ts +2 -0
- package/src/main/services/teams-mvp/OpsRunbookContext.ts +60 -0
- package/src/main/services/teams-mvp/TaskDispatchService.test.ts +305 -0
- package/src/main/services/teams-mvp/TaskDispatchService.ts +250 -131
- package/src/main/services/teams-mvp/TeamProvisioningService.ts +12 -2
- package/src/main/services/teams-mvp/TeamWorkspaceService.test.ts +207 -0
- package/src/main/services/teams-mvp/TeamWorkspaceService.ts +104 -51
- package/src/main/services/teams-mvp/index.ts +6 -0
- package/src/main/utils/externalPlatformSessionRouting.ts +92 -0
- package/src/main/utils/toolApprovalRules.ts +151 -0
- package/src/renderer/App.tsx +24 -89
- package/src/renderer/api/httpClient.ts +132 -52
- package/src/renderer/api/providers.ts +5 -16
- package/src/renderer/components/chat/CommunityChatView.tsx +81 -0
- package/src/renderer/components/dashboard/DashboardView.tsx +130 -84
- package/src/renderer/components/extensions/ExtensionStoreView.tsx +39 -5
- package/src/renderer/components/extensions/ExtensionsSubTabTrigger.tsx +2 -1
- package/src/renderer/components/extensions/capability-packs/CapabilityPacksPanel.tsx +170 -0
- package/src/renderer/components/layout/PaneContent.tsx +10 -2
- package/src/renderer/components/layout/SortableTab.tsx +4 -0
- package/src/renderer/components/layout/TabBarActions.tsx +13 -16
- package/src/renderer/components/runtime/ProviderRuntimeSettingsDialog.tsx +4 -135
- package/src/renderer/components/schedules/SchedulesView.tsx +22 -14
- package/src/renderer/components/schedules/calendar/CalendarEventBlock.tsx +7 -6
- package/src/renderer/components/settings/SettingsTabs.tsx +24 -21
- package/src/renderer/components/settings/SettingsView.tsx +22 -13
- package/src/renderer/components/settings/components/SettingRow.tsx +13 -5
- package/src/renderer/components/settings/components/SettingsSectionCard.tsx +53 -0
- package/src/renderer/components/settings/components/SettingsSectionHeader.tsx +10 -6
- package/src/renderer/components/settings/components/SettingsSelect.tsx +12 -9
- package/src/renderer/components/settings/components/SettingsToggle.tsx +6 -5
- package/src/renderer/components/settings/components/index.ts +1 -0
- package/src/renderer/components/settings/sections/AdvancedSection.tsx +78 -59
- package/src/renderer/components/settings/sections/CliStatusSection.tsx +32 -44
- package/src/renderer/components/settings/sections/ConfigEditorDialog.tsx +1 -1
- package/src/renderer/components/settings/sections/GeneralSection.tsx +216 -186
- package/src/renderer/components/settings/sections/PlatformsSection.tsx +25 -17
- package/src/renderer/components/settings/sections/TaskBusSection.tsx +63 -22
- package/src/renderer/components/sidebar/SidebarSessions.tsx +120 -80
- package/src/renderer/components/sidebar/SidebarTaskItem.tsx +1 -1
- package/src/renderer/components/splash/splashScene.ts +6 -2
- package/src/renderer/components/system-manager/SystemManagerView.tsx +169 -255
- package/src/renderer/components/tasks/TasksView.tsx +63 -37
- package/src/renderer/components/team/CcSessionsSection.tsx +124 -89
- package/src/renderer/components/team/HarnessBrandLogos.tsx +318 -0
- package/src/renderer/components/team/HarnessSelect.tsx +25 -26
- package/src/renderer/components/team/TeamDetailView.tsx +137 -153
- package/src/renderer/components/team/TeamEmptyState.tsx +9 -37
- package/src/renderer/components/team/TeamListView.tsx +144 -30
- package/src/renderer/components/team/__tests__/CcSessionsSection.hasLocalFile.test.tsx +128 -0
- package/src/renderer/components/team/activity/ActivityItem.tsx +21 -9
- package/src/renderer/components/team/activity/ActivityTimeline.tsx +2 -2
- package/src/renderer/components/team/dialogs/AdvancedCliSection.tsx +1 -1
- package/src/renderer/components/team/dialogs/CreateTaskDialog.tsx +13 -10
- package/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +189 -57
- package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +9 -157
- package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +19 -15
- package/src/renderer/components/team/dialogs/PlatformBindingDialog.tsx +48 -10
- package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +11 -12
- package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +39 -37
- package/src/renderer/components/team/dialogs/RuntimeConfigDialog.tsx +434 -64
- package/src/renderer/components/team/dialogs/SendMessageDialog.tsx +12 -10
- package/src/renderer/components/team/dialogs/TaskDetailDialog.tsx +2 -2
- package/src/renderer/components/team/dialogs/__tests__/CreateTeamDialog.bindProject.test.tsx +399 -0
- package/src/renderer/components/team/dialogs/__tests__/CreateTeamDialog.chineseRepro.test.tsx +253 -0
- package/src/renderer/components/team/dialogs/platformAllowUtils.ts +91 -0
- package/src/renderer/components/team/dialogs/teammateRuntimeCompatibility.tsx +1 -1
- package/src/renderer/components/team/kanban/KanbanTaskCard.test.tsx +41 -0
- package/src/renderer/components/team/kanban/KanbanTaskCard.tsx +41 -86
- package/src/renderer/components/team/loop-console/LoopCommandComposer.tsx +310 -0
- package/src/renderer/components/team/loop-console/LoopConsolePanel.tsx +372 -0
- package/src/renderer/components/team/loop-console/loopSendIntent.test.ts +85 -0
- package/src/renderer/components/team/loop-console/loopSendIntent.ts +221 -0
- package/src/renderer/components/team/loop-console/useLeadSessionToolActivity.ts +74 -0
- package/src/renderer/components/team/loop-console/useLoopCommandSuggestions.ts +165 -0
- package/src/renderer/components/team/loop-console/useLoopConsoleController.ts +266 -0
- package/src/renderer/components/team/members/LeadModelRow.test.tsx +1 -1
- package/src/renderer/components/team/members/LeadModelRow.tsx +5 -3
- package/src/renderer/components/team/members/MemberDetailDialog.tsx +11 -0
- package/src/renderer/components/team/members/MemberDetailStats.tsx +13 -3
- package/src/renderer/components/team/members/MemberDraftRow.test.tsx +1 -1
- package/src/renderer/components/team/members/MemberDraftRow.tsx +1 -1
- package/src/renderer/components/team/members/MemberMessagesTab.tsx +2 -2
- package/src/renderer/components/team/members/MemberStatsTab.tsx +1 -1
- package/src/renderer/components/team/messages/MessageComposer.tsx +150 -44
- package/src/renderer/components/team/messages/MessagesFilterPopover.tsx +2 -2
- package/src/renderer/components/team/messages/MessagesPanel.tsx +34 -28
- package/src/renderer/components/team/schedule/CcCronScheduleDialog.tsx +6 -6
- package/src/renderer/components/team/taskLogs/ExactTaskLogCard.tsx +2 -2
- package/src/renderer/components/team/taskLogs/TaskLogStreamSection.tsx +1 -1
- package/src/renderer/components/terminal/TerminalPanel.tsx +2 -3
- package/src/renderer/components/ui/MentionableTextarea.tsx +5 -1
- package/src/renderer/constants/teamColors.ts +5 -5
- package/src/renderer/hooks/useExtensionsTabState.ts +1 -1
- package/src/renderer/hooks/useMentionDetection.ts +5 -1
- package/src/renderer/hooks/useProjectWorkflowCommands.ts +57 -0
- package/src/renderer/hooks/useTeamSuggestions.ts +2 -0
- package/src/renderer/index.css +19 -2
- package/src/renderer/main.tsx +7 -1
- package/src/renderer/store/index.ts +18 -1
- package/src/renderer/store/slices/extensionsSlice.ts +83 -0
- package/src/renderer/store/slices/tabSlice.ts +61 -0
- package/src/renderer/store/slices/teamSlice.ts +138 -9
- package/src/renderer/types/mention.ts +8 -0
- package/src/renderer/types/tabs.ts +3 -1
- package/src/renderer/utils/__tests__/bindProjectSlug.test.ts +69 -0
- package/src/renderer/utils/__tests__/groupTransformer.test.ts +148 -0
- package/src/renderer/utils/__tests__/initialRoute.test.ts +101 -0
- package/src/renderer/utils/__tests__/leadToolActivity.test.ts +124 -0
- package/src/renderer/utils/__tests__/mergeTeamMessages.test.ts +81 -0
- package/src/renderer/utils/__tests__/teamMessageFiltering.test.ts +213 -0
- package/src/renderer/utils/__tests__/teamMessageKey.test.ts +75 -0
- package/src/renderer/utils/__tests__/workflowCommandExecution.test.ts +173 -0
- package/src/renderer/utils/__tests__/workflowCommandSuggestions.test.ts +59 -0
- package/src/renderer/utils/bindProjectSlug.ts +57 -0
- package/src/renderer/utils/capabilityCommandExecution.ts +113 -0
- package/src/renderer/utils/initialRoute.ts +89 -0
- package/src/renderer/utils/leadToolActivity.ts +117 -0
- package/src/renderer/utils/loopShortcutSuggestions.ts +106 -0
- package/src/renderer/utils/mentionSuggestions.ts +1 -1
- package/src/renderer/utils/slashCommandRegistry.ts +231 -0
- package/src/renderer/utils/teamMentionDirective.ts +31 -0
- package/src/renderer/utils/workflowCommandExecution.ts +96 -0
- package/src/renderer/utils/workflowCommandSuggestions.ts +49 -0
- package/src/shared/types/api.ts +79 -4
- package/src/shared/types/ccConnect.ts +1 -0
- package/src/shared/types/extensions/api.ts +19 -0
- package/src/shared/types/extensions/capabilityPack.ts +118 -0
- package/src/shared/types/extensions/index.ts +29 -1
- package/src/shared/types/index.ts +6 -0
- package/src/shared/types/loopAssets.ts +54 -0
- package/src/shared/types/providers.ts +0 -16
- package/src/shared/types/systemManager.ts +26 -1
- package/src/shared/types/team.ts +43 -3
- package/src/shared/types/terminal.ts +2 -36
- package/src/shared/types/worker.test.ts +28 -0
- package/src/shared/types/worker.ts +3 -0
- package/src/shared/utils/__tests__/effortLevels.test.ts +88 -0
- package/src/shared/utils/__tests__/providerBackend.test.ts +88 -0
- package/src/shared/utils/__tests__/providerLaunchArgs.test.ts +220 -0
- package/src/shared/utils/claudeStreamJson.test.ts +187 -0
- package/src/shared/utils/claudeStreamJson.ts +153 -0
- package/src/shared/utils/providerLaunchArgs.ts +217 -0
- package/src/shared/utils/slashCommands.ts +10 -0
- package/src/types/node-pty.d.ts +8 -0
- package/dist-renderer/assets/channel-D0XS_akr.js +0 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-D13Ffs0U.js +0 -1
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-D13Ffs0U.js +0 -1
- package/dist-renderer/assets/clone-B1ZrxI1D.js +0 -1
- package/dist-renderer/assets/index-iyjkpSus.css +0 -32
- package/dist-renderer/assets/stateDiagram-v2-4FDKWEC3-Dmibmlso.js +0 -1
- package/src/main/services/system-manager/SystemManagerPtyService.ts +0 -233
- package/src/renderer/components/common/TerminalPane.tsx +0 -213
- package/src/renderer/components/team/dialogs/useTeamEditForm.ts +0 -292
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider launch argument resolver.
|
|
3
|
+
*
|
|
4
|
+
* Converts the provider/runtime fields of a {@link ProviderLaunchInput} (mirrors the
|
|
5
|
+
* relevant subset of `TeamLaunchRequest`) into concrete CLI arguments plus a map of
|
|
6
|
+
* validation issues. This is the pure resolution step that turns "the user picked
|
|
7
|
+
* provider X, model Y, effort Z" into the actual `--model`/`--effort`/... flags the
|
|
8
|
+
* agent CLI understands.
|
|
9
|
+
*
|
|
10
|
+
* It composes the existing provider building blocks rather than reimplementing them:
|
|
11
|
+
* - {@link inferTeamProviderIdFromModel} — infer provider when only a model is known.
|
|
12
|
+
* - {@link migrateProviderBackendId} — normalize/legacy-migrate the backend id.
|
|
13
|
+
* - {@link isTeamEffortLevelForProvider} — validate effort per provider.
|
|
14
|
+
* - {@link resolveAnthropicLaunchModel} — resolve the Anthropic model (incl. `[1m]`
|
|
15
|
+
* extended-context suffix and `limitContext` behavior).
|
|
16
|
+
* - {@link parseCliArgs} / {@link PROTECTED_CLI_FLAGS} — shell-split + protect the
|
|
17
|
+
* flags the app manages automatically.
|
|
18
|
+
*
|
|
19
|
+
* The function is pure (no IO) so it is trivially testable.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { resolveAnthropicLaunchModel } from './anthropicLaunchModel';
|
|
23
|
+
import { parseCliArgs } from './cliArgsParser';
|
|
24
|
+
import { isTeamEffortLevelForProvider } from './effortLevels';
|
|
25
|
+
import { migrateProviderBackendId } from './providerBackend';
|
|
26
|
+
import { isDefaultProviderModelSelection } from './providerModelSelection';
|
|
27
|
+
import { inferTeamProviderIdFromModel } from './teamProvider';
|
|
28
|
+
|
|
29
|
+
import type {
|
|
30
|
+
EffortLevel,
|
|
31
|
+
TeamFastMode,
|
|
32
|
+
TeamProviderBackendId,
|
|
33
|
+
TeamProviderId,
|
|
34
|
+
} from '@shared/types';
|
|
35
|
+
|
|
36
|
+
export interface ProviderLaunchInput {
|
|
37
|
+
providerId?: TeamProviderId;
|
|
38
|
+
providerBackendId?: string | null;
|
|
39
|
+
model?: string | null;
|
|
40
|
+
effort?: EffortLevel | null;
|
|
41
|
+
fastMode?: TeamFastMode | null;
|
|
42
|
+
/** When true, limit context window (strips `[1m]` from Anthropic models). */
|
|
43
|
+
limitContext?: boolean;
|
|
44
|
+
/** When true, start a fresh session (no `--resume`). */
|
|
45
|
+
clearContext?: boolean;
|
|
46
|
+
/** When false, run WITHOUT `--dangerously-skip-permissions`. Default: true. */
|
|
47
|
+
skipPermissions?: boolean;
|
|
48
|
+
/** Worktree name → CLI `--worktree <name>`. */
|
|
49
|
+
worktree?: string;
|
|
50
|
+
/** Raw custom CLI args string, shell-split and appended (protected flags dropped). */
|
|
51
|
+
extraCliArgs?: string;
|
|
52
|
+
/** Runtime-known available launch models (used to pick a concrete default). */
|
|
53
|
+
availableLaunchModels?: Iterable<string>;
|
|
54
|
+
/** Runtime-provided default launch model. */
|
|
55
|
+
defaultLaunchModel?: string | null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ProviderLaunchResolution {
|
|
59
|
+
/** Ordered CLI argument tokens to append to the agent command line. */
|
|
60
|
+
providerArgs: string[];
|
|
61
|
+
/** Non-fatal validation problems keyed by a short field name. */
|
|
62
|
+
connectionIssues: Record<string, string>;
|
|
63
|
+
/** The provider id actually used (given or inferred from model). */
|
|
64
|
+
resolvedProviderId: TeamProviderId | undefined;
|
|
65
|
+
/** The migrated/normalized backend id. */
|
|
66
|
+
resolvedProviderBackendId: TeamProviderBackendId | undefined;
|
|
67
|
+
/** The concrete model id to pass to `--model`, or null when none resolved. */
|
|
68
|
+
resolvedModel: string | null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Resolve a non-Anthropic provider model. For providers other than Anthropic we do
|
|
73
|
+
* not apply the `[1m]` extended-context convention; we just honor an explicit model
|
|
74
|
+
* selection and return null when the user left it at the provider default.
|
|
75
|
+
*/
|
|
76
|
+
function resolveNonAnthropicLaunchModel(model: string | null | undefined): string | null {
|
|
77
|
+
const trimmed = model?.trim();
|
|
78
|
+
if (!trimmed || isDefaultProviderModelSelection(trimmed)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return trimmed;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Resolve provider launch fields into CLI args + validation issues.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* resolveProviderLaunchArgs({ providerId: 'anthropic', model: 'opus', effort: 'high' })
|
|
89
|
+
* // → { providerArgs: ['--model', 'opus[1m]', '--effort', 'high', '--dangerously-skip-permissions'], ... }
|
|
90
|
+
*/
|
|
91
|
+
export function resolveProviderLaunchArgs(
|
|
92
|
+
input: ProviderLaunchInput = {}
|
|
93
|
+
): ProviderLaunchResolution {
|
|
94
|
+
const connectionIssues: Record<string, string> = {};
|
|
95
|
+
|
|
96
|
+
// 1. Resolve provider id — explicit wins, otherwise infer from the model.
|
|
97
|
+
const providerId = input.providerId ?? inferTeamProviderIdFromModel(input.model ?? undefined);
|
|
98
|
+
|
|
99
|
+
// 2. Migrate/normalize the backend id (handles legacy codex backends).
|
|
100
|
+
const resolvedProviderBackendId = migrateProviderBackendId(
|
|
101
|
+
providerId,
|
|
102
|
+
input.providerBackendId ?? null
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
// 3. Resolve the concrete model.
|
|
106
|
+
let resolvedModel: string | null;
|
|
107
|
+
if (providerId === 'anthropic') {
|
|
108
|
+
resolvedModel = resolveAnthropicLaunchModel({
|
|
109
|
+
selectedModel: input.model ?? undefined,
|
|
110
|
+
limitContext: input.limitContext,
|
|
111
|
+
availableLaunchModels: input.availableLaunchModels,
|
|
112
|
+
defaultLaunchModel: input.defaultLaunchModel ?? null,
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
resolvedModel = resolveNonAnthropicLaunchModel(input.model ?? null);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 4. Validate effort against the resolved provider.
|
|
119
|
+
const effort = input.effort ?? null;
|
|
120
|
+
// Capture the raw effort string before the type guard: in the guard's false
|
|
121
|
+
// branch `effort` narrows to `never`, so we need a stable value for the message.
|
|
122
|
+
const effortValue = effort ?? '';
|
|
123
|
+
let resolvedEffort: EffortLevel | null = null;
|
|
124
|
+
if (effort) {
|
|
125
|
+
if (isTeamEffortLevelForProvider(effort, providerId)) {
|
|
126
|
+
resolvedEffort = effort;
|
|
127
|
+
} else {
|
|
128
|
+
connectionIssues.effort = `Effort "${effortValue}" is not valid for provider "${
|
|
129
|
+
providerId ?? 'unknown'
|
|
130
|
+
}"; dropped.`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// 5. Build the ordered CLI args. Track the flags we actually emit so the
|
|
135
|
+
// extra-args merge (step 6) only drops genuine conflicts.
|
|
136
|
+
const providerArgs: string[] = [];
|
|
137
|
+
const emittedValueFlags = new Set<string>();
|
|
138
|
+
const emittedBooleanFlags = new Set<string>();
|
|
139
|
+
|
|
140
|
+
if (resolvedModel) {
|
|
141
|
+
providerArgs.push('--model', resolvedModel);
|
|
142
|
+
emittedValueFlags.add('--model');
|
|
143
|
+
} else if (providerId === 'codex') {
|
|
144
|
+
// Codex requires an explicit model to launch deterministically.
|
|
145
|
+
connectionIssues.model =
|
|
146
|
+
'Codex provider has no resolved model; the runtime default will be used.';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (resolvedEffort) {
|
|
150
|
+
providerArgs.push('--effort', resolvedEffort);
|
|
151
|
+
emittedValueFlags.add('--effort');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// skipPermissions defaults to true at the launch layer (see TeamLaunchRequest),
|
|
155
|
+
// but this resolver is a low-level primitive also used for non-launch commands
|
|
156
|
+
// (e.g. `claude mcp list`). We therefore emit --dangerously-skip-permissions only
|
|
157
|
+
// when the caller explicitly opts in, keeping the MCP diagnostic path unaffected.
|
|
158
|
+
if (input.skipPermissions === true) {
|
|
159
|
+
providerArgs.push('--dangerously-skip-permissions');
|
|
160
|
+
emittedBooleanFlags.add('--dangerously-skip-permissions');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const worktree = input.worktree?.trim();
|
|
164
|
+
if (worktree) {
|
|
165
|
+
providerArgs.push('--worktree', worktree);
|
|
166
|
+
emittedValueFlags.add('--worktree');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// 6. Merge extra CLI args, dropping duplicates of flags we already emitted.
|
|
170
|
+
// Value-taking emitted flags drop both the flag and its following value token;
|
|
171
|
+
// boolean emitted flags drop only the flag itself. Flags we did NOT emit are
|
|
172
|
+
// always preserved (the user's explicit choice stands).
|
|
173
|
+
const extraRaw = input.extraCliArgs?.trim();
|
|
174
|
+
if (extraRaw) {
|
|
175
|
+
const tokens = parseCliArgs(extraRaw);
|
|
176
|
+
let recordedConflict = false;
|
|
177
|
+
const noteConflict = (token: string): void => {
|
|
178
|
+
if (!recordedConflict) {
|
|
179
|
+
connectionIssues.extraCliArgs = `Custom CLI args included a managed flag ("${token}") that conflicts with provider settings; dropped.`;
|
|
180
|
+
recordedConflict = true;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
// Walk the tokens with a skip-next flag so we never mutate the loop counter
|
|
184
|
+
// (value-flag conflicts drop both the flag and its following value token).
|
|
185
|
+
let skipNext = false;
|
|
186
|
+
for (const token of tokens) {
|
|
187
|
+
if (skipNext) {
|
|
188
|
+
skipNext = false;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (emittedValueFlags.has(token)) {
|
|
192
|
+
noteConflict(token);
|
|
193
|
+
skipNext = true;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (emittedBooleanFlags.has(token)) {
|
|
197
|
+
noteConflict(token);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
providerArgs.push(token);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// clearContext is informational here: it tells the launcher NOT to add --resume.
|
|
205
|
+
// We surface it as a resolved flag rather than an arg so callers can branch on it.
|
|
206
|
+
if (input.clearContext) {
|
|
207
|
+
// No arg emitted; consumed by the launcher when deciding whether to add --resume.
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
providerArgs,
|
|
212
|
+
connectionIssues,
|
|
213
|
+
resolvedProviderId: providerId,
|
|
214
|
+
resolvedProviderBackendId,
|
|
215
|
+
resolvedModel,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
@@ -44,6 +44,11 @@ export const KNOWN_SLASH_COMMANDS: readonly KnownSlashCommandDefinition[] = [
|
|
|
44
44
|
command: '/plan',
|
|
45
45
|
description: 'Enter plan mode with an optional task description.',
|
|
46
46
|
},
|
|
47
|
+
{
|
|
48
|
+
name: 'loop',
|
|
49
|
+
command: '/loop',
|
|
50
|
+
description: 'Run a prompt or slash command repeatedly as a Loop.',
|
|
51
|
+
},
|
|
47
52
|
{
|
|
48
53
|
name: 'model',
|
|
49
54
|
command: '/model',
|
|
@@ -69,6 +74,11 @@ export const KNOWN_SLASH_COMMANDS: readonly KnownSlashCommandDefinition[] = [
|
|
|
69
74
|
command: '/usage',
|
|
70
75
|
description: 'Show plan usage limits and rate-limit status.',
|
|
71
76
|
},
|
|
77
|
+
{
|
|
78
|
+
name: 'workers',
|
|
79
|
+
command: '/workers',
|
|
80
|
+
description: 'List currently discoverable digital workers.',
|
|
81
|
+
},
|
|
72
82
|
] as const;
|
|
73
83
|
|
|
74
84
|
const KNOWN_SLASH_COMMANDS_BY_NAME = new Map(
|
package/src/types/node-pty.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ambient type stub for the optional native addon `node-pty`.
|
|
3
|
+
*
|
|
4
|
+
* `node-pty` is an OPTIONAL runtime dependency — `ClaudeDoctorProbe` loads it via
|
|
5
|
+
* a guarded `require()` and degrades gracefully when it is absent. It is NOT in
|
|
6
|
+
* `package.json`, so without this declaration `import type { IPty } from 'node-pty'`
|
|
7
|
+
* fails typecheck. The shapes here cover only the surface the probe uses.
|
|
8
|
+
*/
|
|
1
9
|
declare module 'node-pty' {
|
|
2
10
|
export interface IPty {
|
|
3
11
|
pid: number;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a6 as o,a7 as n}from"./index-59r209c1.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-5XluxXsn.js";import{_ as i}from"./index-59r209c1.js";import"./chunk-FMBD7UC4-HgH3MK_H.js";import"./chunk-55IACEB6-ClZfkA5w.js";import"./chunk-QN33PNHL-WeC5T3Ba.js";import"./splashScene-D0YB9uxm.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-5XluxXsn.js";import{_ as i}from"./index-59r209c1.js";import"./chunk-FMBD7UC4-HgH3MK_H.js";import"./chunk-55IACEB6-ClZfkA5w.js";import"./chunk-QN33PNHL-WeC5T3Ba.js";import"./splashScene-D0YB9uxm.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as r}from"./_baseUniq-6hZuzTLU.js";var e=4;function a(o){return r(o,e)}export{a as c};
|