@yancyyu/openhermit 1.6.27 → 1.6.29

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 (101) hide show
  1. package/README.md +7 -1
  2. package/bin/hermit.mjs +2 -2
  3. package/dist-renderer/assets/ProjectEditorOverlay-CQm6jUR1.js +52 -0
  4. package/dist-renderer/assets/{TeamGraphOverlay-DVq8rt6_.js → TeamGraphOverlay-h0WDfifv.js} +1 -1
  5. package/dist-renderer/assets/{_basePickBy-ZbF0pKvS.js → _basePickBy-CgG_tjgX.js} +1 -1
  6. package/dist-renderer/assets/{_baseUniq-BBLBOeXc.js → _baseUniq-DwPTU9lP.js} +1 -1
  7. package/dist-renderer/assets/{arc-wGaEgkCf.js → arc-7nIrGRzY.js} +1 -1
  8. package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-BpMkdC35.js → architectureDiagram-VXUJARFQ-BYhA6Ev2.js} +1 -1
  9. package/dist-renderer/assets/{blockDiagram-VD42YOAC-C8Z1xhG4.js → blockDiagram-VD42YOAC-BVpZUGDg.js} +1 -1
  10. package/dist-renderer/assets/{c4Diagram-YG6GDRKO-CJmlw9LA.js → c4Diagram-YG6GDRKO-DsdreMQ9.js} +1 -1
  11. package/dist-renderer/assets/channel-C0SqeFU7.js +1 -0
  12. package/dist-renderer/assets/{chunk-4BX2VUAB-CHPHiRPP.js → chunk-4BX2VUAB-CcoAs7Jd.js} +1 -1
  13. package/dist-renderer/assets/{chunk-55IACEB6-DyVohOQb.js → chunk-55IACEB6-CGGAOoXd.js} +1 -1
  14. package/dist-renderer/assets/{chunk-B4BG7PRW-p5bffh_R.js → chunk-B4BG7PRW-FhpTEPvD.js} +1 -1
  15. package/dist-renderer/assets/{chunk-DI55MBZ5-BnfGPSUu.js → chunk-DI55MBZ5-DoYySbm1.js} +1 -1
  16. package/dist-renderer/assets/{chunk-FMBD7UC4-B6SCKseX.js → chunk-FMBD7UC4-e9l2tGHG.js} +1 -1
  17. package/dist-renderer/assets/{chunk-QN33PNHL-L12RvLBR.js → chunk-QN33PNHL-DeiXVTCy.js} +1 -1
  18. package/dist-renderer/assets/{chunk-QZHKN3VN-DeH1Kxge.js → chunk-QZHKN3VN-DC2UJLJM.js} +1 -1
  19. package/dist-renderer/assets/{chunk-TZMSLE5B-BWnjzSlI.js → chunk-TZMSLE5B-BHFD9eZI.js} +1 -1
  20. package/dist-renderer/assets/classDiagram-2ON5EDUG-DWew1HpM.js +1 -0
  21. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-DWew1HpM.js +1 -0
  22. package/dist-renderer/assets/clone-Dm-k63Yr.js +1 -0
  23. package/dist-renderer/assets/{cose-bilkent-S5V4N54A-BtzoT5fu.js → cose-bilkent-S5V4N54A-BdybQraU.js} +1 -1
  24. package/dist-renderer/assets/{dagre-6UL2VRFP-CBBvuoUD.js → dagre-6UL2VRFP-DdF3pwM3.js} +1 -1
  25. package/dist-renderer/assets/{diagram-PSM6KHXK-Be9BAKws.js → diagram-PSM6KHXK-B9Ldd3nh.js} +1 -1
  26. package/dist-renderer/assets/{diagram-QEK2KX5R-BDS4PI_i.js → diagram-QEK2KX5R-XEqkrbpu.js} +1 -1
  27. package/dist-renderer/assets/{diagram-S2PKOQOG-2Rameaq7.js → diagram-S2PKOQOG-CipwtY59.js} +1 -1
  28. package/dist-renderer/assets/{erDiagram-Q2GNP2WA-CSIzCEZD.js → erDiagram-Q2GNP2WA-BB-2ISGo.js} +1 -1
  29. package/dist-renderer/assets/{flowDiagram-NV44I4VS-ForEIVM5.js → flowDiagram-NV44I4VS-B8XmJ0u2.js} +1 -1
  30. package/dist-renderer/assets/{ganttDiagram-JELNMOA3-BJrli_xr.js → ganttDiagram-JELNMOA3-D-8XglBb.js} +1 -1
  31. package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-C_4GuLno.js → gitGraphDiagram-V2S2FVAM-DL4ChakD.js} +1 -1
  32. package/dist-renderer/assets/{graph-B1EAT_gw.js → graph-BiFNoBjP.js} +1 -1
  33. package/dist-renderer/assets/{index-eKRmS5kI.js → index-6m1ZAymG.js} +1 -1
  34. package/dist-renderer/assets/index-BhellmRb.css +1 -0
  35. package/dist-renderer/assets/{index-DYdseEwc.js → index-BowUl0Jb.js} +518 -514
  36. package/dist-renderer/assets/{index-DR602dwJ.js → index-Dp3kJTEe.js} +1 -1
  37. package/dist-renderer/assets/{index-Dwr5wu5x.js → index-TOpt_T7A.js} +1 -1
  38. package/dist-renderer/assets/{index-DOA_jbYb.js → index-qNBNjW4K.js} +1 -1
  39. package/dist-renderer/assets/{index-k4tnOFC5.js → index-vAykq1H1.js} +1 -1
  40. package/dist-renderer/assets/{infoDiagram-HS3SLOUP-DjI0uaMz.js → infoDiagram-HS3SLOUP-DRIBfHDi.js} +1 -1
  41. package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-jQ6Thae-.js → journeyDiagram-XKPGCS4Q-BOMiigU4.js} +1 -1
  42. package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-CKw6InbL.js → kanban-definition-3W4ZIXB7-DDxeyjod.js} +1 -1
  43. package/dist-renderer/assets/{layout-Dad20y3V.js → layout-DNANbrI4.js} +1 -1
  44. package/dist-renderer/assets/{linear-vMgo_2Cv.js → linear-DxEJi1yT.js} +1 -1
  45. package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-DYp6YoHL.js → mindmap-definition-VGOIOE7T-nBfGriW8.js} +1 -1
  46. package/dist-renderer/assets/{pieDiagram-ADFJNKIX-BytBecG9.js → pieDiagram-ADFJNKIX-Din5j6sV.js} +1 -1
  47. package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-RUaspLsc.js → quadrantDiagram-AYHSOK5B-DMVK2BEQ.js} +1 -1
  48. package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-rR2B1Use.js → requirementDiagram-UZGBJVZJ-6SC94Gg_.js} +1 -1
  49. package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-BJi5qYhq.js → sankeyDiagram-TZEHDZUN-CD2gghhu.js} +1 -1
  50. package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-BM-wggUb.js → sequenceDiagram-WL72ISMW-BnhkN7nZ.js} +1 -1
  51. package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-BqmcVjnj.js → stateDiagram-FKZM4ZOC-Bn8XdYX-.js} +1 -1
  52. package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-By3JDVbB.js → stateDiagram-v2-4FDKWEC3-1b6sI1_g.js} +1 -1
  53. package/dist-renderer/assets/{timeline-definition-IT6M3QCI-szH0GUyk.js → timeline-definition-IT6M3QCI-CNs3RPoa.js} +1 -1
  54. package/dist-renderer/assets/treemap-GDKQZRPO-DU_yr827.js +162 -0
  55. package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-dwDpvw0w.js → xychartDiagram-PRI3JC2R-B8o5J2f3.js} +1 -1
  56. package/dist-renderer/index.html +2 -2
  57. package/package.json +1 -1
  58. package/src/main/server.ts +800 -163
  59. package/src/main/services/session-intelligence/SessionUsageParser.ts +446 -0
  60. package/src/main/services/session-intelligence/UsageTelemetryService.ts +252 -0
  61. package/src/main/services/teams-mvp/CollaborationBoardService.ts +310 -0
  62. package/src/main/services/teams-mvp/TaskDispatchService.ts +880 -95
  63. package/src/main/services/teams-mvp/TeamProvisioningService.ts +58 -19
  64. package/src/main/services/teams-mvp/TeamWorkspaceService.ts +25 -2
  65. package/src/main/services/teams-mvp/index.ts +3 -0
  66. package/src/renderer/App.tsx +5 -0
  67. package/src/renderer/api/httpClient.ts +67 -0
  68. package/src/renderer/components/dashboard/DashboardView.tsx +6 -105
  69. package/src/renderer/components/layout/PaneContent.tsx +2 -0
  70. package/src/renderer/components/layout/SortableTab.tsx +1 -0
  71. package/src/renderer/components/layout/TabBarActions.tsx +12 -12
  72. package/src/renderer/components/schedules/SchedulesView.tsx +54 -22
  73. package/src/renderer/components/settings/SettingsTabs.tsx +2 -2
  74. package/src/renderer/components/settings/sections/AdvancedSection.tsx +1 -1
  75. package/src/renderer/components/settings/sections/TaskBusSection.tsx +511 -81
  76. package/src/renderer/components/tasks/TasksView.tsx +343 -0
  77. package/src/renderer/components/team/TeamDetailView.tsx +20 -98
  78. package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +1 -1
  79. package/src/renderer/components/team/editor/EditorContextMenu.tsx +8 -23
  80. package/src/renderer/components/team/editor/EditorFileTree.tsx +0 -4
  81. package/src/renderer/components/team/editor/EditorSelectionMenu.tsx +1 -8
  82. package/src/renderer/components/team/editor/ProjectEditorOverlay.tsx +0 -10
  83. package/src/renderer/components/team/kanban/KanbanBoard.tsx +5 -1
  84. package/src/renderer/components/team/members/MemberDetailDialog.tsx +8 -33
  85. package/src/renderer/components/team/messages/MessageComposer.tsx +39 -3
  86. package/src/renderer/components/team/messages/MessagesPanel.tsx +72 -2
  87. package/src/renderer/components/team/messages/StatusBlock.tsx +2 -24
  88. package/src/renderer/components/team/schedule/ScheduleEmptyState.tsx +1 -1
  89. package/src/renderer/components/ui/MentionableTextarea.tsx +0 -1
  90. package/src/renderer/store/slices/scheduleSlice.ts +21 -0
  91. package/src/renderer/store/slices/teamSlice.ts +59 -23
  92. package/src/renderer/types/tabs.ts +1 -0
  93. package/src/shared/types/api.ts +29 -0
  94. package/src/shared/types/team.ts +109 -1
  95. package/dist-renderer/assets/ProjectEditorOverlay-BBwYdXPv.js +0 -57
  96. package/dist-renderer/assets/channel-DJUrwVrK.js +0 -1
  97. package/dist-renderer/assets/classDiagram-2ON5EDUG-blc3DrH7.js +0 -1
  98. package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-blc3DrH7.js +0 -1
  99. package/dist-renderer/assets/clone-BftjWakJ.js +0 -1
  100. package/dist-renderer/assets/index-CWpFqEvz.css +0 -1
  101. package/dist-renderer/assets/treemap-GDKQZRPO-BCMlh-Ex.js +0 -162
@@ -74,9 +74,9 @@ const ScheduleListItem = ({
74
74
  }, [expanded, runs.length, runsLoading, fetchRunHistory, schedule.id]);
75
75
 
76
76
  return (
77
- <div className="rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] font-sans">
77
+ <div className="rounded-xl border border-[var(--color-border-subtle)] bg-white/[0.025] font-sans shadow-[0_14px_32px_rgba(0,0,0,0.14)] transition-colors hover:border-[var(--color-border-emphasis)] hover:bg-white/[0.04]">
78
78
  {/* Main row */}
79
- <div className="flex items-center gap-3 px-4 py-3">
79
+ <div className="flex items-center gap-3 px-4 py-3.5">
80
80
  {/* Expand toggle */}
81
81
  <button
82
82
  type="button"
@@ -106,7 +106,7 @@ const ScheduleListItem = ({
106
106
  {/* Team badge */}
107
107
  <button
108
108
  type="button"
109
- className="flex shrink-0 items-center gap-1.5 rounded-md border border-[var(--color-border)] px-2 py-0.5 text-xs text-[var(--color-text-secondary)] transition-colors hover:border-[var(--color-border-emphasis)] hover:text-[var(--color-text)]"
109
+ className="flex shrink-0 items-center gap-1.5 rounded-full border border-white/10 bg-white/[0.04] px-2.5 py-1 text-xs text-[var(--color-text-secondary)] transition-colors hover:border-[var(--color-border-emphasis)] hover:text-[var(--color-text)]"
110
110
  onClick={() => onTeamClick(schedule.teamName)}
111
111
  >
112
112
  <span className="size-2 shrink-0 rounded-full" style={{ backgroundColor: teamColor }} />
@@ -116,7 +116,7 @@ const ScheduleListItem = ({
116
116
  {/* Next run */}
117
117
  <Tooltip>
118
118
  <TooltipTrigger asChild>
119
- <span className="shrink-0 text-xs text-[var(--color-text-muted)]">
119
+ <span className="shrink-0 rounded-full bg-white/[0.035] px-2 py-1 text-xs text-[var(--color-text-muted)]">
120
120
  下次:{formatNextRun(schedule.nextRunAt)}
121
121
  </span>
122
122
  </TooltipTrigger>
@@ -194,7 +194,7 @@ const ScheduleListItem = ({
194
194
 
195
195
  {/* Expanded: Run history */}
196
196
  {expanded ? (
197
- <div className="border-t border-[var(--color-border)]">
197
+ <div className="border-t border-white/[0.06] bg-black/10">
198
198
  {runsLoading ? (
199
199
  <div className="flex items-center justify-center py-4 text-xs text-[var(--color-text-muted)]">
200
200
  正在加载运行历史...
@@ -328,6 +328,16 @@ export const SchedulesView = (): React.JSX.Element => {
328
328
  });
329
329
  }, [getTeamDisplayName, schedules, teamFilter, searchQuery]);
330
330
 
331
+ const scheduleStats = useMemo(
332
+ () => ({
333
+ total: schedules.length,
334
+ active: schedules.filter((schedule) => schedule.status === 'active').length,
335
+ paused: schedules.filter((schedule) => schedule.status === 'paused').length,
336
+ teams: new Set(schedules.map((schedule) => schedule.teamName)).size,
337
+ }),
338
+ [schedules]
339
+ );
340
+
331
341
  const handleEdit = useCallback((schedule: Schedule) => {
332
342
  setEditingSchedule(schedule);
333
343
  setDialogOpen(true);
@@ -367,18 +377,38 @@ export const SchedulesView = (): React.JSX.Element => {
367
377
 
368
378
  return (
369
379
  <div className="h-full overflow-y-auto bg-[var(--color-surface)]">
370
- <div className="mx-auto w-full max-w-5xl px-6 py-8">
380
+ <div className="mx-auto w-full max-w-6xl px-6 py-8">
371
381
  {/* Header */}
372
- <div className="mb-4">
373
- <div className="flex items-center justify-between">
374
- <div className="flex items-center gap-3">
375
- <Calendar className="size-5 text-[var(--color-text-muted)]" />
376
- <h1 className="text-lg font-semibold text-[var(--color-text)]">计划任务</h1>
377
- {schedules.length > 0 && (
378
- <span className="rounded-full bg-[var(--color-surface-raised)] px-2 py-0.5 text-xs text-[var(--color-text-muted)]">
379
- {schedules.length}
382
+ <div className="mb-5 rounded-2xl border border-[var(--color-border-subtle)] bg-white/[0.025] p-4 shadow-[0_18px_42px_rgba(0,0,0,0.12)]">
383
+ <div className="flex flex-wrap items-start justify-between gap-4">
384
+ <div>
385
+ <div className="flex items-center gap-3">
386
+ <span className="flex size-9 items-center justify-center rounded-xl bg-blue-500/10 text-blue-400">
387
+ <Calendar className="size-4" />
380
388
  </span>
381
- )}
389
+ <div>
390
+ <h1 className="text-lg font-semibold text-[var(--color-text)]">定时任务</h1>
391
+ <p className="mt-0.5 text-xs text-[var(--color-text-muted)]">
392
+ 集中管理所有团队的 Cron 计划、运行状态和历史记录。
393
+ </p>
394
+ </div>
395
+ </div>
396
+ {schedules.length > 0 ? (
397
+ <div className="mt-4 flex flex-wrap gap-2">
398
+ <span className="rounded-full border border-white/10 bg-white/[0.04] px-2.5 py-1 text-xs text-[var(--color-text-secondary)]">
399
+ 全部 {scheduleStats.total}
400
+ </span>
401
+ <span className="rounded-full border border-emerald-400/15 bg-emerald-400/10 px-2.5 py-1 text-xs text-emerald-400">
402
+ 运行中 {scheduleStats.active}
403
+ </span>
404
+ <span className="rounded-full border border-yellow-400/15 bg-yellow-400/10 px-2.5 py-1 text-xs text-yellow-400">
405
+ 已暂停 {scheduleStats.paused}
406
+ </span>
407
+ <span className="rounded-full border border-white/10 bg-white/[0.04] px-2.5 py-1 text-xs text-[var(--color-text-secondary)]">
408
+ 团队 {scheduleStats.teams}
409
+ </span>
410
+ </div>
411
+ ) : null}
382
412
  </div>
383
413
  <Button size="sm" className="gap-1.5" onClick={handleCreate}>
384
414
  <Plus className="size-3.5" />
@@ -388,9 +418,9 @@ export const SchedulesView = (): React.JSX.Element => {
388
418
 
389
419
  {/* Filters row */}
390
420
  {schedules.length > 0 && (
391
- <div className="mt-3 flex items-center gap-3">
421
+ <div className="mt-4 flex flex-wrap items-center gap-3 rounded-xl border border-white/[0.06] bg-black/10 p-2">
392
422
  {/* Search */}
393
- <div className="relative max-w-xs flex-1">
423
+ <div className="relative min-w-[220px] flex-1">
394
424
  <Search className="absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-[var(--color-text-muted)]" />
395
425
  <Input
396
426
  placeholder="搜索计划..."
@@ -470,12 +500,14 @@ export const SchedulesView = (): React.JSX.Element => {
470
500
  </div>
471
501
  ) : schedules.length === 0 ? (
472
502
  /* Global empty state */
473
- <div className="flex flex-col items-center justify-center gap-3 py-16 text-center">
474
- <Calendar className="size-12 text-[var(--color-text-muted)]" />
503
+ <div className="flex flex-col items-center justify-center gap-3 rounded-2xl border border-dashed border-[var(--color-border)] bg-white/[0.02] py-16 text-center">
504
+ <div className="flex size-14 items-center justify-center rounded-2xl bg-blue-500/10 text-blue-400">
505
+ <Calendar className="size-7" />
506
+ </div>
475
507
  <div className="space-y-1.5">
476
- <p className="text-sm font-medium text-[var(--color-text-secondary)]">暂无计划任务</p>
508
+ <p className="text-sm font-medium text-[var(--color-text-secondary)]">暂无定时任务</p>
477
509
  <p className="max-w-sm text-xs text-[var(--color-text-muted)]">
478
- 在任意团队中创建计划,即可使用 Cron 表达式自动执行团队任务。
510
+ 在任意团队中创建计划,即可使用 Cron 表达式自动运行团队。
479
511
  所有团队的计划都会显示在这里。
480
512
  </p>
481
513
  </div>
@@ -486,7 +518,7 @@ export const SchedulesView = (): React.JSX.Element => {
486
518
  </div>
487
519
  ) : filteredSchedules.length === 0 ? (
488
520
  /* No results for current filters */
489
- <div className="flex flex-col items-center justify-center gap-2 py-12 text-center">
521
+ <div className="flex flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-[var(--color-border)] bg-white/[0.02] py-12 text-center">
490
522
  <Search className="size-8 text-[var(--color-text-muted)]" />
491
523
  <p className="text-sm text-[var(--color-text-muted)]">没有符合当前筛选条件的计划</p>
492
524
  <button
@@ -46,9 +46,9 @@ const tabs: TabConfig[] = [
46
46
  },
47
47
  {
48
48
  id: 'task-bus',
49
- label: '任务总线',
49
+ label: '团队总线',
50
50
  icon: Share2,
51
- description: '配置 Redis 消息总线,实现跨主机的团队任务派发和状态同步。',
51
+ description: '配置 Redis 消息总线实现跨主机团队协作,以及团队使用数据的采集和上报。',
52
52
  },
53
53
  {
54
54
  id: 'advanced',
@@ -240,7 +240,7 @@ export const AdvancedSection = ({}: AdvancedSectionProps): React.JSX.Element =>
240
240
  Version {version || '...'}
241
241
  </p>
242
242
  <p className="mt-2 text-xs leading-relaxed" style={{ color: 'var(--color-text-muted)' }}>
243
- 渠道与模型供应商由后端服务统一管理;团队任务通过 MCP 协议分发。
243
+ 渠道与模型供应商由后端服务统一管理;团队内部任务由 harness 自主管理。
244
244
  </p>
245
245
  </div>
246
246
  </div>