@yancyyu/openhermit 1.5.8 → 1.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +10 -1
  2. package/bin/alias-loader.mjs +51 -0
  3. package/bin/hermit.mjs +14 -5
  4. package/dist-renderer/assets/{ProjectEditorOverlay-BNoDw9T1.js → ProjectEditorOverlay-C5D83Zxv.js} +1 -1
  5. package/dist-renderer/assets/{TeamGraphOverlay-CfGRKQIu.js → TeamGraphOverlay-ajzuM1-u.js} +1 -1
  6. package/dist-renderer/assets/{_basePickBy-Ct8Hm5_h.js → _basePickBy-C9H2zmVj.js} +1 -1
  7. package/dist-renderer/assets/{_baseUniq-BofrAFBx.js → _baseUniq-CpGZGemc.js} +1 -1
  8. package/dist-renderer/assets/{arc-AbJgatzR.js → arc-CbGBDw-m.js} +1 -1
  9. package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-gpniCJVk.js → architectureDiagram-VXUJARFQ-nuKXUIpb.js} +1 -1
  10. package/dist-renderer/assets/{blockDiagram-VD42YOAC-aBbbmONC.js → blockDiagram-VD42YOAC-DHUUE7Jc.js} +1 -1
  11. package/dist-renderer/assets/{c4Diagram-YG6GDRKO-DJio1IsU.js → c4Diagram-YG6GDRKO-OILHhqLM.js} +1 -1
  12. package/dist-renderer/assets/channel-DpUKLLrj.js +1 -0
  13. package/dist-renderer/assets/{chunk-4BX2VUAB-D1_HKao2.js → chunk-4BX2VUAB-dqNpZaQ8.js} +1 -1
  14. package/dist-renderer/assets/{chunk-55IACEB6-NAmVxF4k.js → chunk-55IACEB6-BCoSJQM-.js} +1 -1
  15. package/dist-renderer/assets/{chunk-B4BG7PRW-Ce829laz.js → chunk-B4BG7PRW-BLbg8yVR.js} +1 -1
  16. package/dist-renderer/assets/{chunk-DI55MBZ5-Ct2Le12y.js → chunk-DI55MBZ5-CUUWOs1Q.js} +1 -1
  17. package/dist-renderer/assets/{chunk-FMBD7UC4-Cie3DzKk.js → chunk-FMBD7UC4-D9geTN5P.js} +1 -1
  18. package/dist-renderer/assets/{chunk-QN33PNHL-4f5Yb50e.js → chunk-QN33PNHL-BGT8-BRX.js} +1 -1
  19. package/dist-renderer/assets/{chunk-QZHKN3VN-D9ranl9c.js → chunk-QZHKN3VN-CC8ebGaM.js} +1 -1
  20. package/dist-renderer/assets/{chunk-TZMSLE5B-bdGZWlEy.js → chunk-TZMSLE5B-CajekcT6.js} +1 -1
  21. package/dist-renderer/assets/classDiagram-2ON5EDUG-LL85aSlz.js +1 -0
  22. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-LL85aSlz.js +1 -0
  23. package/dist-renderer/assets/clone-BHWsFzFA.js +1 -0
  24. package/dist-renderer/assets/{cose-bilkent-S5V4N54A-C6tvfcVi.js → cose-bilkent-S5V4N54A-C_x7hSy3.js} +1 -1
  25. package/dist-renderer/assets/{dagre-6UL2VRFP-B-4qcZam.js → dagre-6UL2VRFP-C4Y1k4DZ.js} +1 -1
  26. package/dist-renderer/assets/{diagram-PSM6KHXK-CwT3TLjx.js → diagram-PSM6KHXK-oRIeULoh.js} +1 -1
  27. package/dist-renderer/assets/{diagram-QEK2KX5R-BWH6-ZFd.js → diagram-QEK2KX5R-DwSqw5HF.js} +1 -1
  28. package/dist-renderer/assets/{diagram-S2PKOQOG-DfpPnfi1.js → diagram-S2PKOQOG-DqjGYje2.js} +1 -1
  29. package/dist-renderer/assets/{erDiagram-Q2GNP2WA-BFbEFR4x.js → erDiagram-Q2GNP2WA-CEV5bBgg.js} +1 -1
  30. package/dist-renderer/assets/{flowDiagram-NV44I4VS-Dg3cf5hW.js → flowDiagram-NV44I4VS-BQQkrRyu.js} +1 -1
  31. package/dist-renderer/assets/{ganttDiagram-JELNMOA3-B21y55W5.js → ganttDiagram-JELNMOA3-CLy4WR1G.js} +1 -1
  32. package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-BDV3BJzn.js → gitGraphDiagram-V2S2FVAM-6W3ioQu_.js} +1 -1
  33. package/dist-renderer/assets/{graph-BfaZ4hZt.js → graph-BnLKQvhH.js} +1 -1
  34. package/dist-renderer/assets/{index-CCqtDawH.js → index-B4aiRxoU.js} +1 -1
  35. package/dist-renderer/assets/{index-pMg_LlsS.js → index-B8lKqPVq.js} +1 -1
  36. package/dist-renderer/assets/{index-CZltVMDP.js → index-BRuhNKyU.js} +12 -12
  37. package/dist-renderer/assets/{index-BMXHMpkG.js → index-BufvLVIl.js} +1 -1
  38. package/dist-renderer/assets/{index-Ct0-y9TF.js → index-C1xShqKH.js} +1 -1
  39. package/dist-renderer/assets/{index-CVMSpK8C.js → index-zIOLLI7O.js} +1 -1
  40. package/dist-renderer/assets/{infoDiagram-HS3SLOUP-DvMlS0CL.js → infoDiagram-HS3SLOUP-BoBweEEY.js} +1 -1
  41. package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-DIyMluRv.js → journeyDiagram-XKPGCS4Q-DLL0V5oP.js} +1 -1
  42. package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-CVOx8f-7.js → kanban-definition-3W4ZIXB7-HsFtEDG3.js} +1 -1
  43. package/dist-renderer/assets/{layout-BPKIXUf4.js → layout-ClIooAAq.js} +1 -1
  44. package/dist-renderer/assets/{linear-CScZGLr2.js → linear-r3RJcj8y.js} +1 -1
  45. package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-CmDQ7Wo6.js → mindmap-definition-VGOIOE7T-BA_P1U4V.js} +1 -1
  46. package/dist-renderer/assets/{pieDiagram-ADFJNKIX-DbVClin-.js → pieDiagram-ADFJNKIX-CzPAfkTB.js} +1 -1
  47. package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-CAB0MYcW.js → quadrantDiagram-AYHSOK5B-PvdPWzFJ.js} +1 -1
  48. package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-w2Lfpg3T.js → requirementDiagram-UZGBJVZJ-CHqIL_Od.js} +1 -1
  49. package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-kvG1QoKY.js → sankeyDiagram-TZEHDZUN-ConzpACM.js} +1 -1
  50. package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-DCVBQ23J.js → sequenceDiagram-WL72ISMW-Zryq4oxP.js} +1 -1
  51. package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-ItZ0JBvq.js → stateDiagram-FKZM4ZOC-BA9V7NHF.js} +1 -1
  52. package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-Hpmw4dMm.js → stateDiagram-v2-4FDKWEC3-CGnaujD-.js} +1 -1
  53. package/dist-renderer/assets/{timeline-definition-IT6M3QCI-BzSFaAjV.js → timeline-definition-IT6M3QCI-DPs2ZjMm.js} +1 -1
  54. package/dist-renderer/assets/{treemap-GDKQZRPO-fSz4hQn0.js → treemap-GDKQZRPO-B0lzrLxb.js} +1 -1
  55. package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-CT1kaGlv.js → xychartDiagram-PRI3JC2R-CINGmMxX.js} +1 -1
  56. package/dist-renderer/index.html +1 -1
  57. package/package.json +2 -1
  58. package/src/main/server.ts +993 -764
  59. package/src/main/services/UpdateService.ts +4 -1
  60. package/src/main/services/ccConnect/CcConnectBridge.ts +1 -8
  61. package/src/main/services/ccConnect/CcConnectClient.ts +7 -2
  62. package/src/main/services/teams-mvp/TeamProvisioningService.ts +14 -4
  63. package/src/main/services/teams-mvp/TeamWorkspaceService.ts +11 -6
  64. package/src/renderer/App.tsx +18 -7
  65. package/src/renderer/api/httpClient.ts +136 -42
  66. package/src/renderer/components/chat/ChatHistory.tsx +11 -8
  67. package/src/renderer/components/dashboard/DashboardView.tsx +4 -2
  68. package/src/renderer/components/extensions/ExtensionStoreView.tsx +2 -7
  69. package/src/renderer/components/layout/Sidebar.tsx +3 -1
  70. package/src/renderer/components/schedules/SchedulesView.tsx +15 -13
  71. package/src/renderer/components/settings/SettingsTabs.tsx +2 -1
  72. package/src/renderer/components/settings/hooks/useSettingsHandlers.ts +4 -5
  73. package/src/renderer/components/settings/sections/AdvancedSection.tsx +19 -4
  74. package/src/renderer/components/settings/sections/CliStatusSection.tsx +63 -59
  75. package/src/renderer/components/settings/sections/GeneralSection.tsx +5 -11
  76. package/src/renderer/components/settings/sections/HarnessSection.tsx +30 -15
  77. package/src/renderer/components/settings/sections/PlatformsSection.tsx +110 -51
  78. package/src/renderer/components/sidebar/SidebarSessions.tsx +100 -67
  79. package/src/renderer/components/sidebar/WorkspaceBrowser.tsx +26 -43
  80. package/src/renderer/components/team/CcSessionsSection.tsx +34 -14
  81. package/src/renderer/components/team/TeamDetailView.tsx +150 -148
  82. package/src/renderer/components/team/TeamEmptyState.tsx +27 -16
  83. package/src/renderer/components/team/TeamListView.tsx +4 -2
  84. package/src/renderer/components/team/activity/ActivityItem.tsx +6 -1
  85. package/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +282 -75
  86. package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +2 -1
  87. package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +64 -21
  88. package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +68 -19
  89. package/src/renderer/components/team/dialogs/ProjectPathSelector.tsx +20 -16
  90. package/src/renderer/components/team/dialogs/platformMeta.ts +66 -11
  91. package/src/renderer/components/team/editor/EditorFileTree.tsx +9 -7
  92. package/src/renderer/components/team/kanban/KanbanBoard.tsx +7 -10
  93. package/src/renderer/components/team/kanban/KanbanTaskCard.tsx +1 -3
  94. package/src/renderer/components/team/members/MemberDetailDialog.tsx +1 -5
  95. package/src/renderer/components/team/messages/MessageComposer.tsx +3 -1
  96. package/src/renderer/components/team/messages/MessagesPanel.tsx +34 -26
  97. package/src/renderer/components/team/schedule/CcCronScheduleDialog.tsx +1 -3
  98. package/src/renderer/components/team/schedule/ScheduleSection.tsx +9 -10
  99. package/src/renderer/store/slices/scheduleSlice.ts +4 -1
  100. package/src/renderer/store/slices/teamSlice.ts +3 -1
  101. package/src/shared/types/api.ts +70 -21
  102. package/src/shared/utils/leadDetection.ts +5 -1
  103. package/tsconfig.json +26 -0
  104. package/dist-renderer/assets/channel-CZ8sd5Xf.js +0 -1
  105. package/dist-renderer/assets/classDiagram-2ON5EDUG-CMcfSKj5.js +0 -1
  106. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-CMcfSKj5.js +0 -1
  107. package/dist-renderer/assets/clone-CMuwA8RV.js +0 -1
@@ -363,7 +363,8 @@ export const MessagesPanel = memo(function MessagesPanel({
363
363
  );
364
364
  setTeamSessions(sortedSessions);
365
365
  setSelectedSessionKey((current) => {
366
- if (current && sortedSessions.some((session) => session.sessionKey === current)) return current;
366
+ if (current && sortedSessions.some((session) => session.sessionKey === current))
367
+ return current;
367
368
  return sortedSessions[0]?.sessionKey ?? null;
368
369
  });
369
370
  })
@@ -538,31 +539,35 @@ export const MessagesPanel = memo(function MessagesPanel({
538
539
  if (!selectedSessionDetail) {
539
540
  return [];
540
541
  }
541
- return [...selectedSessionDetail.history].reverse().map((entry, index): InboxMessage => ({
542
- messageId: `${selectedSessionDetail.id}:${index}:${entry.timestamp}`,
543
- from: entry.role === 'user' ? 'user' : selectedSessionDetail.name || teamName,
544
- to: entry.role === 'user' ? selectedSessionDetail.name || teamName : 'user',
545
- text: entry.content,
546
- timestamp: entry.timestamp,
547
- read: true,
548
- source: entry.role === 'user' ? 'user_sent' : 'inbox',
549
- session: {
550
- id: selectedSessionDetail.id,
551
- key: selectedSessionDetail.sessionKey,
552
- platform: selectedSessionDetail.platform,
553
- title:
554
- selectedSession.title ||
555
- selectedSession.chatName ||
556
- selectedSession.userName ||
557
- selectedSession.sessionKey,
558
- chatName: selectedSession.chatName,
559
- userName: selectedSession.userName,
560
- },
561
- }));
542
+ return [...selectedSessionDetail.history].reverse().map(
543
+ (entry, index): InboxMessage => ({
544
+ messageId: `${selectedSessionDetail.id}:${index}:${entry.timestamp}`,
545
+ from: entry.role === 'user' ? 'user' : selectedSessionDetail.name || teamName,
546
+ to: entry.role === 'user' ? selectedSessionDetail.name || teamName : 'user',
547
+ text: entry.content,
548
+ timestamp: entry.timestamp,
549
+ read: true,
550
+ source: entry.role === 'user' ? 'user_sent' : 'inbox',
551
+ session: {
552
+ id: selectedSessionDetail.id,
553
+ key: selectedSessionDetail.sessionKey,
554
+ platform: selectedSessionDetail.platform,
555
+ title:
556
+ selectedSession.title ||
557
+ selectedSession.chatName ||
558
+ selectedSession.userName ||
559
+ selectedSession.sessionKey,
560
+ chatName: selectedSession.chatName,
561
+ userName: selectedSession.userName,
562
+ },
563
+ })
564
+ );
562
565
  }
563
- return newestFirst(effectiveMessages.filter((message) => {
564
- return message.session?.key === selectedSessionKey;
565
- }));
566
+ return newestFirst(
567
+ effectiveMessages.filter((message) => {
568
+ return message.session?.key === selectedSessionKey;
569
+ })
570
+ );
566
571
  }, [
567
572
  effectiveMessages,
568
573
  selectedIsHermitLocalSession,
@@ -683,7 +688,10 @@ export const MessagesPanel = memo(function MessagesPanel({
683
688
  attachments,
684
689
  actionMode,
685
690
  taskRefs,
686
- sessionKey: selectedSessionKey && selectedSessionKey !== '__unassigned__' ? selectedSessionKey : undefined,
691
+ sessionKey:
692
+ selectedSessionKey && selectedSessionKey !== '__unassigned__'
693
+ ? selectedSessionKey
694
+ : undefined,
687
695
  })
688
696
  .then((result) => {
689
697
  if (
@@ -171,9 +171,7 @@ export const CcCronScheduleDialog = ({
171
171
  placeholder="0 9 * * 1-5"
172
172
  className="font-mono"
173
173
  />
174
- <p className="text-xs text-[var(--color-text-muted)]">
175
- 例如工作日 9 点:0 9 * * 1-5
176
- </p>
174
+ <p className="text-xs text-[var(--color-text-muted)]">例如工作日 9 点:0 9 * * 1-5</p>
177
175
  </div>
178
176
 
179
177
  <div className="space-y-1.5">
@@ -189,16 +189,15 @@ const ScheduleRow = ({
189
189
  // =============================================================================
190
190
 
191
191
  export const ScheduleSection = ({ teamName }: ScheduleSectionProps): React.JSX.Element => {
192
- const { schedules, pauseSchedule, resumeSchedule, deleteSchedule, fetchSchedules } =
193
- useStore(
194
- useShallow((s) => ({
195
- schedules: s.schedules.filter((sch) => sch.teamName === teamName),
196
- pauseSchedule: s.pauseSchedule,
197
- resumeSchedule: s.resumeSchedule,
198
- deleteSchedule: s.deleteSchedule,
199
- fetchSchedules: s.fetchSchedules,
200
- }))
201
- );
192
+ const { schedules, pauseSchedule, resumeSchedule, deleteSchedule, fetchSchedules } = useStore(
193
+ useShallow((s) => ({
194
+ schedules: s.schedules.filter((sch) => sch.teamName === teamName),
195
+ pauseSchedule: s.pauseSchedule,
196
+ resumeSchedule: s.resumeSchedule,
197
+ deleteSchedule: s.deleteSchedule,
198
+ fetchSchedules: s.fetchSchedules,
199
+ }))
200
+ );
202
201
 
203
202
  const [dialogOpen, setDialogOpen] = useState(false);
204
203
  const [editingSchedule, setEditingSchedule] = useState<Schedule | null>(null);
@@ -168,7 +168,10 @@ export const createScheduleSlice: StateCreator<AppState, [], [], ScheduleSlice>
168
168
  set((state) => ({
169
169
  scheduleRuns: {
170
170
  ...state.scheduleRuns,
171
- [id]: [run, ...(state.scheduleRuns[id] ?? []).filter((entry) => !entry.id.startsWith('pending-'))],
171
+ [id]: [
172
+ run,
173
+ ...(state.scheduleRuns[id] ?? []).filter((entry) => !entry.id.startsWith('pending-')),
174
+ ],
172
175
  },
173
176
  }));
174
177
  return run;
@@ -3667,7 +3667,9 @@ export const createTeamSlice: StateCreator<AppState, [], [], TeamSlice> = (set,
3667
3667
  page.messages
3668
3668
  );
3669
3669
  const preserveLoadedOlderTail =
3670
- current.olderHydrated && Array.isArray(retainedOlderTail) && retainedOlderTail.length > 0;
3670
+ current.olderHydrated &&
3671
+ Array.isArray(retainedOlderTail) &&
3672
+ retainedOlderTail.length > 0;
3671
3673
  const nextCanonical = headChanged
3672
3674
  ? preserveLoadedOlderTail
3673
3675
  ? mergeTeamMessages(retainedOlderTail, page.messages)
@@ -203,7 +203,9 @@ export interface ConfigAPI {
203
203
  /** Opens native folder selection dialog and returns selected paths */
204
204
  selectFolders: () => Promise<string[]>;
205
205
  /** Browse subdirectories at a given path (server-side, no native dialog) */
206
- browseFolders: (dirPath?: string) => Promise<{ path: string; dirs: string[]; hasParent: boolean }>;
206
+ browseFolders: (
207
+ dirPath?: string
208
+ ) => Promise<{ path: string; dirs: string[]; hasParent: boolean }>;
207
209
  /** Open native dialog to select local Claude root folder */
208
210
  selectClaudeRootFolder: () => Promise<ClaudeRootFolderSelection | null>;
209
211
  /** Get resolved Claude root path info for local mode */
@@ -693,7 +695,11 @@ export interface TeamsAPI {
693
695
  updateToolApprovalSettings: (teamName: string, settings: ToolApprovalSettings) => Promise<void>;
694
696
  readFileForToolApproval: (filePath: string) => Promise<ToolApprovalFileContent>;
695
697
  getTeamSessions: (teamName: string) => Promise<CcSession[]>;
696
- getSessionDetail: (teamName: string, sessionId: string, historyLimit?: number) => Promise<CcSessionDetail>;
698
+ getSessionDetail: (
699
+ teamName: string,
700
+ sessionId: string,
701
+ historyLimit?: number
702
+ ) => Promise<CcSessionDetail>;
697
703
  cancelSession: (teamName: string, sessionId: string) => Promise<void>;
698
704
  }
699
705
 
@@ -959,8 +965,17 @@ export interface ElectronAPI extends RecentProjectsElectronApi {
959
965
 
960
966
  // cc-connect connection config (baseUrl, token, bridgeUrl)
961
967
  hermitConfig: {
962
- get: () => Promise<{ ccBaseUrl: string; ccBridgeUrl: string; ccToken: string; ccTokenSet: boolean }>;
963
- update: (patch: { ccBaseUrl?: string; ccToken?: string; ccBridgeUrl?: string }) => Promise<void>;
968
+ get: () => Promise<{
969
+ ccBaseUrl: string;
970
+ ccBridgeUrl: string;
971
+ ccToken: string;
972
+ ccTokenSet: boolean;
973
+ }>;
974
+ update: (patch: {
975
+ ccBaseUrl?: string;
976
+ ccToken?: string;
977
+ ccBridgeUrl?: string;
978
+ }) => Promise<void>;
964
979
  getRaw: () => Promise<{ path: string; content: string }>;
965
980
  updateRaw: (content: string) => Promise<void>;
966
981
  };
@@ -983,30 +998,64 @@ export interface ElectronAPI extends RecentProjectsElectronApi {
983
998
 
984
999
  // cc-connect setup flows (QR code + manual platform binding)
985
1000
  ccSetup: {
986
- feishuBegin: () => Promise<{ device_code: string; qr_url: string; base_url?: string; interval: number; expires_in: number }>;
987
- feishuPoll: (deviceCode: string, baseUrl?: string) => Promise<{
988
- status: string; base_url?: string; app_id?: string; app_secret?: string;
989
- platform?: string; owner_open_id?: string; slow_down?: boolean; error?: string;
1001
+ feishuBegin: () => Promise<{
1002
+ device_code: string;
1003
+ qr_url: string;
1004
+ base_url?: string;
1005
+ interval: number;
1006
+ expires_in: number;
1007
+ }>;
1008
+ feishuPoll: (
1009
+ deviceCode: string,
1010
+ baseUrl?: string
1011
+ ) => Promise<{
1012
+ status: string;
1013
+ base_url?: string;
1014
+ app_id?: string;
1015
+ app_secret?: string;
1016
+ platform?: string;
1017
+ owner_open_id?: string;
1018
+ slow_down?: boolean;
1019
+ error?: string;
990
1020
  }>;
991
1021
  feishuSave: (params: {
992
- project: string; app_id: string; app_secret: string;
993
- platform_type?: string; owner_open_id?: string;
994
- work_dir?: string; agent_type?: string;
1022
+ project: string;
1023
+ app_id: string;
1024
+ app_secret: string;
1025
+ platform_type?: string;
1026
+ owner_open_id?: string;
1027
+ work_dir?: string;
1028
+ agent_type?: string;
995
1029
  }) => Promise<{ message: string; restart_required: boolean }>;
996
1030
  weixinBegin: (apiUrl?: string) => Promise<{ qr_key: string; qr_url: string }>;
997
- weixinPoll: (qrKey: string, apiUrl?: string) => Promise<{
998
- status: string; bot_token?: string; ilink_bot_id?: string;
999
- base_url?: string; ilink_user_id?: string;
1031
+ weixinPoll: (
1032
+ qrKey: string,
1033
+ apiUrl?: string
1034
+ ) => Promise<{
1035
+ status: string;
1036
+ bot_token?: string;
1037
+ ilink_bot_id?: string;
1038
+ base_url?: string;
1039
+ ilink_user_id?: string;
1000
1040
  }>;
1001
1041
  weixinSave: (params: {
1002
- project: string; token: string; base_url?: string;
1003
- ilink_bot_id?: string; ilink_user_id?: string;
1004
- work_dir?: string; agent_type?: string;
1005
- }) => Promise<{ message: string; restart_required: boolean }>;
1006
- addPlatform: (projectName: string, body: {
1007
- type: string; options?: Record<string, unknown>;
1008
- work_dir?: string; agent_type?: string;
1042
+ project: string;
1043
+ token: string;
1044
+ base_url?: string;
1045
+ ilink_bot_id?: string;
1046
+ ilink_user_id?: string;
1047
+ work_dir?: string;
1048
+ agent_type?: string;
1009
1049
  }) => Promise<{ message: string; restart_required: boolean }>;
1050
+ addPlatform: (
1051
+ projectName: string,
1052
+ body: {
1053
+ type: string;
1054
+ options?: Record<string, unknown>;
1055
+ work_dir?: string;
1056
+ agent_type?: string;
1057
+ }
1058
+ ) => Promise<{ message: string; restart_required: boolean }>;
1010
1059
  };
1011
1060
 
1012
1061
  // Cross-Team Communication API
@@ -53,7 +53,11 @@ export function isLeadMemberRole(role: string | undefined | null): boolean {
53
53
  * Returns true if the member is a team lead, checking both agentType
54
54
  * and the canonical internal lead name as a fallback.
55
55
  */
56
- export function isLeadMember(member: { agentType?: unknown; name?: unknown; role?: unknown }): boolean {
56
+ export function isLeadMember(member: {
57
+ agentType?: unknown;
58
+ name?: unknown;
59
+ role?: unknown;
60
+ }): boolean {
57
61
  const role = typeof member.role === 'string' ? member.role : null;
58
62
  if (isLeadMemberRole(role)) return true;
59
63
  const agentType = typeof member.agentType === 'string' ? member.agentType : null;
package/tsconfig.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2023",
4
+ "module": "ESNext",
5
+ "lib": ["ES2023", "DOM", "DOM.Iterable"],
6
+ "jsx": "react-jsx",
7
+ "strict": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "moduleResolution": "bundler",
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true,
13
+ "noEmit": true,
14
+ "baseUrl": ".",
15
+ "paths": {
16
+ "@claude-teams/agent-graph": ["./packages/agent-graph/src/index.ts"],
17
+ "@features/*": ["./src/features/*"],
18
+ "@main/*": ["./src/main/*"],
19
+ "@renderer/*": ["./src/renderer/*"],
20
+ "@shared/*": ["./src/shared/*"]
21
+ },
22
+ "types": ["node", "vitest/globals"]
23
+ },
24
+ "include": ["src/**/*", "test/**/*"],
25
+ "exclude": ["node_modules", "dist", "dist-standalone"]
26
+ }
@@ -1 +0,0 @@
1
- import{a6 as o,a7 as n}from"./index-CZltVMDP.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-Ce829laz.js";import{_ as i}from"./index-CZltVMDP.js";import"./chunk-FMBD7UC4-Cie3DzKk.js";import"./chunk-55IACEB6-NAmVxF4k.js";import"./chunk-QN33PNHL-4f5Yb50e.js";import"./splashScene-C8lWNnm4.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-Ce829laz.js";import{_ as i}from"./index-CZltVMDP.js";import"./chunk-FMBD7UC4-Cie3DzKk.js";import"./chunk-55IACEB6-NAmVxF4k.js";import"./chunk-QN33PNHL-4f5Yb50e.js";import"./splashScene-C8lWNnm4.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-BofrAFBx.js";var e=4;function a(o){return r(o,e)}export{a as c};