@nextclaw/ui 0.26.1 → 0.26.3

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 (141) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/.vite/manifest.json +366 -365
  3. package/dist/assets/{account-panel-ZM2qzKF4.js → account-panel-DIdHjKG-.js} +1 -1
  4. package/dist/assets/{api-Cjq-o1VN.js → api-DkLJrSCd.js} +2 -2
  5. package/dist/assets/app-presenter-provider-Co8uKOyW.js +124 -0
  6. package/dist/assets/{appearance-settings-page-B4zouKzg.js → appearance-settings-page-DI8aDY2G.js} +1 -1
  7. package/dist/assets/{book-open-AteA89HX.js → book-open-BPMkKSci.js} +1 -1
  8. package/dist/assets/{card-BLXvBstA.js → card-Bqu8zWLq.js} +1 -1
  9. package/dist/assets/{channels-list-page-fj8kMo-T.js → channels-list-page-CCIaTQu7.js} +1 -1
  10. package/dist/assets/{circle-dashed-LSYZTzM7.js → circle-dashed-B48a0t6p.js} +1 -1
  11. package/dist/assets/{client-DudCRJw4.js → client-imrVphQb.js} +1 -1
  12. package/dist/assets/{config-split-page-G7Kt2BnV.js → config-split-page-Bd-bGKsw.js} +1 -1
  13. package/dist/assets/{confirm-dialog-DShT64F6.js → confirm-dialog-10Qb3dpZ.js} +1 -1
  14. package/dist/assets/context-menu-CRqH2SEk.js +1 -0
  15. package/dist/assets/{createLucideIcon-D7hvIHV-.js → createLucideIcon-B4xj2I2g.js} +1 -1
  16. package/dist/assets/{desktop-capabilities-page-CzqzFZUY.js → desktop-capabilities-page-CFcT2g8-.js} +1 -1
  17. package/dist/assets/{desktop-update-config-CgeQ0Ffo.js → desktop-update-config-CRJd_An1.js} +1 -1
  18. package/dist/assets/{dialog-C7glmAQJ.js → dialog-BgL3vKJQ.js} +2 -2
  19. package/dist/assets/doc-browser-52t2_rSF.js +1 -0
  20. package/dist/assets/{doc-browser-context-BlhBAOLH.js → doc-browser-context-DH4aWvkS.js} +1 -1
  21. package/dist/assets/{download-BYgECE0n.js → download-Cr337h4W.js} +1 -1
  22. package/dist/assets/{es2015-CsjAAQ6X.js → es2015-D-CRf3_Z.js} +1 -1
  23. package/dist/assets/{extensions-qYL-NpL3.js → extensions-CsmJPz7g.js} +1 -1
  24. package/dist/assets/{eye-BBuTzJ53.js → eye-DrQRSAfJ.js} +1 -1
  25. package/dist/assets/{form-actions-CLGWO52v.js → form-actions-BEeWTGUZ.js} +1 -1
  26. package/dist/assets/{i18n-qBGEbcW6.js → i18n-OGmF0Ws_.js} +2 -2
  27. package/dist/assets/{keyboard-shortcuts-settings-page-B-wK_6zG.js → keyboard-shortcuts-settings-page-DQU56SrW.js} +1 -1
  28. package/dist/assets/loader-circle-DbOQWT9C.js +1 -0
  29. package/dist/assets/login-page-DW1AZXqX.js +1 -0
  30. package/dist/assets/{login-page-Cd84lpVV.js → login-page-sgivRYG1.js} +1 -1
  31. package/dist/assets/main-B-oxUq-o.js +2 -0
  32. package/dist/assets/main-BpL6OjwM.css +1 -0
  33. package/dist/assets/main-i18n-catalog.config-Bpu5GcwF.js +1 -0
  34. package/dist/assets/mcp-marketplace-page-DSLRpJEB.js +1 -0
  35. package/dist/assets/{model-config-page-D0DQlSDa.js → model-config-page-CDQBhmVr.js} +1 -1
  36. package/dist/assets/{navigation-link-32iM1-e6.js → navigation-link-D3pzNHeA.js} +1 -1
  37. package/dist/assets/panel-app-BYfQu_TS.js +1 -0
  38. package/dist/assets/panel-app-i18n-catalog.config-D44qmtfk.js +1 -0
  39. package/dist/assets/{panelStandalone-C9EKaApN.js → panelStandalone-CGkYeMK5.js} +2 -2
  40. package/dist/assets/panelStandalone-D-mhAGNa.css +1 -0
  41. package/dist/assets/{privacy-settings-page-Bxxx12OO.js → privacy-settings-page-CjoAkoDt.js} +1 -1
  42. package/dist/assets/projects-C7Zxpcoi.js +1 -0
  43. package/dist/assets/{provider-models-C3frdXeW.js → provider-models-YW7rIeOD.js} +1 -1
  44. package/dist/assets/{provider-scoped-model-input-CYetrPYZ.js → provider-scoped-model-input-axJ-pTEu.js} +1 -1
  45. package/dist/assets/{providers-config-page-DESB1h8g.js → providers-config-page-_QhBXQ4M.js} +1 -1
  46. package/dist/assets/{puzzle-CWHfFyYN.js → puzzle--RLCeYML.js} +1 -1
  47. package/dist/assets/{pwa-CiGUjpcd.js → pwa-DcizGowz.js} +1 -1
  48. package/dist/assets/{refresh-cw-y3L6PyLt.js → refresh-cw-syCVj_nw.js} +1 -1
  49. package/dist/assets/remote-BLQU7aY5.js +1 -0
  50. package/dist/assets/{rotate-cw-CNE9qSHi.js → rotate-cw-BlH9El3x.js} +1 -1
  51. package/dist/assets/{runtime-config-page-5o98T-TD.js → runtime-config-page-Cco9dS73.js} +1 -1
  52. package/dist/assets/{save-B0p5a0ET.js → save-BWynuRQ2.js} +1 -1
  53. package/dist/assets/{search-config-page-CpGcnIzi.js → search-config-page-Cc74_SAU.js} +1 -1
  54. package/dist/assets/{secrets-config-page-C4VTiW3r.js → secrets-config-page-raYDzlFC.js} +1 -1
  55. package/dist/assets/security-config-aE_jOwy-.js +1 -0
  56. package/dist/assets/{select-CctTN205.js → select-6Uq4chZW.js} +1 -1
  57. package/dist/assets/{service-apps-panel-CKE5HKNY.js → service-apps-panel-jBWAa4qZ.js} +1 -1
  58. package/dist/assets/{settings-2-EPflrNk6.js → settings-2-COvVf1XX.js} +1 -1
  59. package/dist/assets/{status-dot-CensgJZC.js → status-dot-DZlxa5zW.js} +1 -1
  60. package/dist/assets/{tag-chip-Bjzb4-qW.js → tag-chip-DXHtZ8AS.js} +1 -1
  61. package/dist/assets/{theme-provider-hlle7Skk.js → theme-provider-C5PCDBPB.js} +1 -1
  62. package/dist/assets/{trash-2-C5KH5Rw9.js → trash-2-DazgBvmJ.js} +1 -1
  63. package/dist/assets/{use-config-CPl_F79t.js → use-config-DRRGF9Zb.js} +1 -1
  64. package/dist/assets/{use-desktop-capabilities-CEg9-DrQ.js → use-desktop-capabilities-CdfOUjdE.js} +1 -1
  65. package/dist/assets/{use-viewport-layout-CPZUmTPi.js → use-viewport-layout-DdxVnCYc.js} +1 -1
  66. package/dist/assets/x-CQIp_nJT.js +1 -0
  67. package/dist/index.html +34 -34
  68. package/dist/panel-standalone.html +11 -11
  69. package/package.json +8 -8
  70. package/src/app/components/layout/page-layout.tsx +5 -2
  71. package/src/app/configs/__tests__/app-navigation.config.test.ts +10 -0
  72. package/src/app/configs/app-navigation.config.ts +6 -2
  73. package/src/app/styles/charcoal-theme.css +1 -1
  74. package/src/app/styles/design-system.css +8 -2
  75. package/src/app/styles/island-theme.css +1 -1
  76. package/src/features/agents/components/agent-details-dialog.tsx +1 -1
  77. package/src/features/agents/components/agents-page.tsx +5 -3
  78. package/src/features/apps/components/app-package-card.tsx +7 -6
  79. package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +3 -3
  80. package/src/features/chat/components/conversation/chat-conversation-header.tsx +4 -4
  81. package/src/features/chat/components/layout/chat-page-shell.tsx +1 -1
  82. package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +12 -5
  83. package/src/features/chat/features/session/components/chat-mobile-session-row.tsx +1 -1
  84. package/src/features/chat/features/session/components/session-header/__tests__/chat-session-header-actions.test.tsx +1 -1
  85. package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +3 -5
  86. package/src/features/chat/features/session/components/session-header/chat-session-header-menu-item.tsx +4 -3
  87. package/src/features/chat/features/session/components/session-header/chat-session-title-switcher.tsx +1 -1
  88. package/src/features/chat/features/workspace/components/project-files/workspace-project-files-toolbar.tsx +3 -1
  89. package/src/features/cron/components/cron-config.tsx +1 -0
  90. package/src/features/cron/components/cron-job-row.tsx +4 -4
  91. package/src/features/inbox/components/inbox-delivery-content.tsx +1 -1
  92. package/src/features/inbox/pages/inbox-page.tsx +24 -28
  93. package/src/features/marketplace/components/marketplace-page-parts.tsx +4 -3
  94. package/src/features/marketplace/components/marketplace-page.tsx +2 -2
  95. package/src/features/panel-apps/components/panel-app-open-standalone-menu-item.tsx +3 -1
  96. package/src/features/projects/components/project-overview.tsx +1 -1
  97. package/src/features/projects/pages/project-home-page.tsx +11 -2
  98. package/src/features/projects/pages/projects-page.test.tsx +4 -2
  99. package/src/platforms/mobile/components/mobile-app-shell.tsx +1 -1
  100. package/src/platforms/mobile/components/mobile-bottom-nav.tsx +8 -7
  101. package/src/platforms/mobile/components/mobile-settings-shell.tsx +24 -23
  102. package/src/platforms/mobile/components/mobile-topbar.tsx +10 -11
  103. package/src/shared/components/doc-browser/__tests__/doc-browser.test.tsx +34 -2
  104. package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +36 -5
  105. package/src/shared/components/doc-browser/doc-browser.tsx +5 -1
  106. package/src/shared/components/settings/settings-page.tsx +1 -1
  107. package/src/shared/components/ui/actions/__tests__/icon-action-button.test.tsx +5 -5
  108. package/src/shared/components/ui/actions/action-feedback.ts +8 -0
  109. package/src/shared/components/ui/actions/icon-action-button.tsx +13 -12
  110. package/src/shared/components/ui/button.tsx +1 -1
  111. package/src/shared/components/ui/context-menu/context-menu-items.tsx +4 -3
  112. package/src/shared/components/ui/dialog.tsx +4 -3
  113. package/src/shared/components/ui/input.tsx +1 -0
  114. package/src/shared/components/ui/select.tsx +2 -1
  115. package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +5 -3
  116. package/src/shared/components/ui/tabs.tsx +2 -2
  117. package/src/shared/components/ui/textarea.tsx +1 -0
  118. package/src/shared/components/workbench/workbench-surface-toolbar.tsx +3 -4
  119. package/src/shared/components/workbench/workbench-surface.tsx +2 -2
  120. package/src/shared/lib/i18n/locales/en-US/agents.json +2 -0
  121. package/src/shared/lib/i18n/locales/en-US/core.json +1 -0
  122. package/src/shared/lib/i18n/locales/en-US/desktop-update.json +1 -1
  123. package/src/shared/lib/i18n/locales/zh-CN/agents.json +2 -0
  124. package/src/shared/lib/i18n/locales/zh-CN/core.json +1 -0
  125. package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +1 -1
  126. package/dist/assets/app-presenter-provider-C02YPoMr.js +0 -124
  127. package/dist/assets/context-menu-rd7b_kVD.js +0 -1
  128. package/dist/assets/doc-browser-dBiR9Qi0.js +0 -1
  129. package/dist/assets/loader-circle-BA7EMkih.js +0 -1
  130. package/dist/assets/login-page-VdMyNkFf.js +0 -1
  131. package/dist/assets/main-CR0SrTBf.js +0 -2
  132. package/dist/assets/main-DXH6EdXI.css +0 -1
  133. package/dist/assets/main-i18n-catalog.config-Btp_OowF.js +0 -1
  134. package/dist/assets/mcp-marketplace-page-jacRwiI-.js +0 -1
  135. package/dist/assets/panel-app-CC0bVSu4.js +0 -1
  136. package/dist/assets/panel-app-i18n-catalog.config-LUSBp5Ce.js +0 -1
  137. package/dist/assets/panelStandalone-Y91OJkgV.css +0 -1
  138. package/dist/assets/projects-D56yAPNT.js +0 -1
  139. package/dist/assets/remote-DiGFV8nP.js +0 -1
  140. package/dist/assets/security-config-C5-RQVpS.js +0 -1
  141. package/dist/assets/x--xxUvHKW.js +0 -1
@@ -40,6 +40,7 @@ const DialogContent = React.forwardRef<
40
40
  data-theme-overlay="dialog"
41
41
  className={cn(
42
42
  "fixed left-[50%] top-[50%] z-[var(--z-modal,10050)] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 rounded-2xl border border-border bg-popover p-6 text-popover-foreground shadow-xl duration-base data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
43
+ "max-md:max-w-[calc(100vw-1.5rem)] max-h-[calc(100dvh-1.5rem)] max-md:max-h-[calc(100dvh-env(safe-area-inset-top,0px)-env(safe-area-inset-bottom,0px)-1.5rem)] overflow-y-auto overscroll-contain",
43
44
  className
44
45
  )}
45
46
  {...props}
@@ -48,7 +49,7 @@ const DialogContent = React.forwardRef<
48
49
  }}
49
50
  >
50
51
  {children}
51
- <DialogPrimitive.Close className="absolute right-4 top-4 rounded-lg p-1 opacity-70 transition-all duration-fast hover:bg-[var(--interaction-hover)] hover:text-accent-foreground hover:opacity-100 focus:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none">
52
+ <DialogPrimitive.Close className="absolute right-1 top-1 flex h-11 w-11 items-center justify-center rounded-lg opacity-70 transition-all duration-fast hover:bg-[var(--interaction-hover)] hover:text-accent-foreground hover:opacity-100 focus:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none sm:right-4 sm:top-4 sm:h-6 sm:w-6">
52
53
  <X className="h-4 w-4 text-muted-foreground" />
53
54
  <span className="sr-only">Close</span>
54
55
  </DialogPrimitive.Close>
@@ -63,7 +64,7 @@ const DialogHeader = ({
63
64
  }: React.HTMLAttributes<HTMLDivElement>) => (
64
65
  <div
65
66
  className={cn(
66
- "flex flex-col space-y-2 text-center sm:text-left",
67
+ "flex flex-col space-y-2 pr-7 text-left",
67
68
  className
68
69
  )}
69
70
  {...props}
@@ -77,7 +78,7 @@ const DialogFooter = ({
77
78
  }: React.HTMLAttributes<HTMLDivElement>) => (
78
79
  <div
79
80
  className={cn(
80
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-3",
81
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end sm:gap-3",
81
82
  className
82
83
  )}
83
84
  {...props}
@@ -10,6 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
10
10
  type={type}
11
11
  className={cn(
12
12
  'flex h-9 w-full rounded-xl border border-border/75 bg-card px-3.5 py-2 text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground/55 placeholder:font-normal transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50',
13
+ 'max-md:min-h-[var(--control-touch-size)] max-md:text-base',
13
14
  className
14
15
  )}
15
16
  ref={ref}
@@ -26,6 +26,7 @@ const SelectTrigger = React.forwardRef<
26
26
  ref={ref}
27
27
  className={cn(
28
28
  "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-xl border border-border/75 bg-card px-3 py-2 text-sm text-foreground ring-offset-background placeholder:text-muted-foreground transition-colors focus:outline-none focus:ring-0 focus:border-border disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
29
+ 'max-md:min-h-[var(--control-touch-size)]',
29
30
  className
30
31
  )}
31
32
  {...props}
@@ -120,7 +121,7 @@ const SelectItem = React.forwardRef<
120
121
  <SelectPrimitive.Item
121
122
  ref={ref}
122
123
  className={cn(
123
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 hover:bg-[var(--interaction-hover)]",
124
+ "relative flex max-md:min-h-[var(--control-touch-size)] w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 hover:bg-[var(--interaction-hover)]",
124
125
  className
125
126
  )}
126
127
  {...props}
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import { MoreVertical, X } from "lucide-react";
3
3
  import {
4
4
  IconActionButton,
5
+ IconActionGroup,
5
6
  type IconActionButtonProps,
6
7
  } from "@/shared/components/ui/actions/icon-action-button";
7
8
  import {
@@ -305,13 +306,14 @@ export function CompactTabStrip({
305
306
  ))}
306
307
  </div>
307
308
  </div>
308
- <div
309
- className={cn("flex shrink-0 items-center gap-1", actionsClassName)}
309
+ <IconActionGroup
310
+ className={actionsClassName}
310
311
  data-testid={actionsTestId}
311
312
  onPointerDown={(event) => event.stopPropagation()}
312
313
  >
313
314
  {actions.map((action) => (
314
315
  <IconActionButton
316
+ size="sm"
315
317
  key={action.key}
316
318
  icon={action.icon}
317
319
  label={action.label}
@@ -320,7 +322,7 @@ export function CompactTabStrip({
320
322
  className={actionButtonClassName}
321
323
  />
322
324
  ))}
323
- </div>
325
+ </IconActionGroup>
324
326
  </div>
325
327
  );
326
328
  }
@@ -63,7 +63,7 @@ export function TabsList({ children, className }: TabsListProps) {
63
63
  role="tablist"
64
64
  onKeyDown={handleKeyDown}
65
65
  className={cn(
66
- 'inline-flex h-9 items-center justify-center rounded-xl bg-muted p-1 text-muted-foreground',
66
+ 'inline-flex h-9 max-md:h-auto items-center justify-center rounded-xl bg-muted p-1 text-muted-foreground',
67
67
  className
68
68
  )}
69
69
  >
@@ -87,7 +87,7 @@ export function TabsTrigger({ value, children, className }: TabsTriggerProps) {
87
87
  tabIndex={isActive ? 0 : -1}
88
88
  data-state={isActive ? 'active' : 'inactive'}
89
89
  className={cn(
90
- 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-[13px] font-medium transition-all duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none disabled:opacity-50',
90
+ 'inline-flex max-md:min-h-[var(--control-touch-size)] items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-[13px] font-medium transition-all duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none disabled:opacity-50',
91
91
  isActive
92
92
  ? 'bg-card text-foreground shadow-sm'
93
93
  : 'text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground',
@@ -8,6 +8,7 @@ export const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
8
8
  <textarea
9
9
  className={cn(
10
10
  "flex min-h-28 w-full rounded-xl border border-border/75 bg-card px-3.5 py-2.5 text-sm text-foreground placeholder:text-muted-foreground/55 placeholder:font-normal transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50",
11
+ 'max-md:text-base',
11
12
  className,
12
13
  )}
13
14
  ref={ref}
@@ -7,7 +7,7 @@ import {
7
7
  PictureInPicture2,
8
8
  X,
9
9
  } from "lucide-react";
10
- import { IconActionButton } from "@/shared/components/ui/actions/icon-action-button";
10
+ import { IconActionButton, IconActionGroup } from "@/shared/components/ui/actions/icon-action-button";
11
11
  import { t } from "@/shared/lib/i18n";
12
12
  import type { WorkbenchSurfaceState } from "./types/workbench-surface.types";
13
13
 
@@ -33,8 +33,7 @@ export function WorkbenchSurfaceToolbar({
33
33
  onOpenMain?: () => void;
34
34
  }) {
35
35
  return (
36
- <div
37
- className="flex shrink-0 items-center gap-0.5"
36
+ <IconActionGroup
38
37
  data-workbench-actions=""
39
38
  >
40
39
  {onOpenMain && (
@@ -97,6 +96,6 @@ export function WorkbenchSurfaceToolbar({
97
96
  label={closeLabel}
98
97
  onClick={onClose}
99
98
  />
100
- </div>
99
+ </IconActionGroup>
101
100
  );
102
101
  }
@@ -265,8 +265,8 @@ export function WorkbenchSurface({
265
265
  }}
266
266
  >
267
267
  <header
268
- className="flex min-h-10 shrink-0 select-none items-center gap-2 border-b border-border/60 bg-muted/30 px-2"
269
- style={{ touchAction: floating ? "none" : undefined }}
268
+ className="flex min-h-10 shrink-0 select-none items-center gap-1 border-b border-border/60 bg-muted/30 px-2"
269
+ style={{ touchAction: floating ? "none" : undefined, paddingTop: isCompact ? "env(safe-area-inset-top, 0px)" : undefined }}
270
270
  onPointerDown={(event) => startInteraction(event)}
271
271
  onDoubleClick={(event) => {
272
272
  if (!isCompact && !blocksDrag(event.target))
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "agentsPageTitle": "Agents",
3
+ "mobileAgents": "Agents",
4
+ "mobileNavigation": "Main navigation",
3
5
  "agentsPageDescription": "Manage conversational agent identities. Each agent owns its home directory, setup, memory, and skills.",
4
6
  "agentsHeroEyebrow": "Agent Gallery",
5
7
  "agentsHeroTitle": "Give every agent the presence of a real collaborator",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "refresh": "Refresh",
2
3
  "chat": "Chat",
3
4
  "model": "Model",
4
5
  "searchChannels": "Search Channels",
@@ -4,7 +4,7 @@
4
4
  "runtimeUpdatesPageDescription": "NextClaw checks every two hours; you choose when to start each update.",
5
5
  "runtimeUpdatesUnavailableTitle": "Updates Are Currently Unavailable",
6
6
  "runtimeUpdatesUnavailableDescription": "This runtime environment does not currently expose an update host.",
7
- "runtimeUpdatesUnavailableHint": "The update entry appears automatically once the host supports updates.",
7
+ "runtimeUpdatesUnavailableHint": "Update using the method you used to install NextClaw. An update button will appear when in-app updates are supported.",
8
8
  "runtimeUpdatesHostVersion": "Host Version",
9
9
  "runtimeUpdatesDownloadedBannerDescription": "Version {version} has finished downloading and is ready to finish updating.",
10
10
  "runtimeUpdatesActionsDescription": "Check manually, then complete the update in one action whenever you are ready.",
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "agentsPageTitle": "Agent 管理",
3
+ "mobileAgents": "Agent",
4
+ "mobileNavigation": "主导航",
3
5
  "agentsPageDescription": "管理可对话的 Agent 身份。每个 Agent 都有自己的主目录、设定、记忆与技能。",
4
6
  "agentsHeroEyebrow": "Agent 管理台",
5
7
  "agentsHeroTitle": "让每个 Agent 都像真正的协作者一样存在",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "refresh": "刷新",
2
3
  "chat": "对话",
3
4
  "model": "模型",
4
5
  "searchChannels": "搜索渠道",
@@ -4,7 +4,7 @@
4
4
  "runtimeUpdatesPageDescription": "系统每两小时自动检查新版本;发现更新后,由你决定何时开始更新。",
5
5
  "runtimeUpdatesUnavailableTitle": "当前环境暂不支持更新",
6
6
  "runtimeUpdatesUnavailableDescription": "这个运行环境暂时没有可用的更新宿主。",
7
- "runtimeUpdatesUnavailableHint": "更新入口会在宿主支持后自动出现,不需要前端单独区分环境。",
7
+ "runtimeUpdatesUnavailableHint": "请使用安装 NextClaw 时的方式更新;支持应用内更新后,更新按钮会自动出现。",
8
8
  "runtimeUpdatesHostVersion": "宿主版本",
9
9
  "runtimeUpdatesDownloadedBannerDescription": "版本 {version} 已下载完成,可以继续完成更新。",
10
10
  "runtimeUpdatesActionsDescription": "你可以手动检查,并在准备好之后一次完成更新。",