@clawpump/claw-agent 0.1.4 → 0.1.6

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 (1214) hide show
  1. package/agent/.dockerignore +67 -0
  2. package/agent/.envrc +1 -1
  3. package/agent/.gitattributes +8 -0
  4. package/agent/AGENTS.md +216 -4
  5. package/agent/CONTRIBUTING.md +46 -8
  6. package/agent/Dockerfile +78 -35
  7. package/agent/MANIFEST.in +2 -0
  8. package/agent/README.md +12 -5
  9. package/agent/README.ur-pk.md +261 -0
  10. package/agent/README.zh-CN.md +11 -8
  11. package/agent/SECURITY.md +5 -4
  12. package/agent/acp_adapter/provenance.py +127 -0
  13. package/agent/acp_adapter/server.py +112 -5
  14. package/agent/acp_adapter/session.py +1 -6
  15. package/agent/acp_registry/agent.json +2 -2
  16. package/agent/agent/account_usage.py +313 -1
  17. package/agent/agent/agent_init.py +140 -37
  18. package/agent/agent/agent_runtime_helpers.py +342 -83
  19. package/agent/agent/anthropic_adapter.py +320 -33
  20. package/agent/agent/auxiliary_client.py +525 -105
  21. package/agent/agent/background_review.py +157 -19
  22. package/agent/agent/bedrock_adapter.py +71 -6
  23. package/agent/agent/billing_view.py +295 -0
  24. package/agent/agent/chat_completion_helpers.py +229 -4
  25. package/agent/agent/codex_responses_adapter.py +86 -10
  26. package/agent/agent/codex_runtime.py +153 -1
  27. package/agent/agent/coding_context.py +738 -0
  28. package/agent/agent/context_compressor.py +392 -44
  29. package/agent/agent/context_references.py +34 -1
  30. package/agent/agent/conversation_compression.py +159 -22
  31. package/agent/agent/conversation_loop.py +643 -908
  32. package/agent/agent/copilot_acp_client.py +4 -11
  33. package/agent/agent/credential_pool.py +5 -3
  34. package/agent/agent/credits_tracker.py +794 -0
  35. package/agent/agent/curator.py +91 -18
  36. package/agent/agent/curator_backup.py +26 -10
  37. package/agent/agent/display.py +42 -1
  38. package/agent/agent/error_classifier.py +52 -3
  39. package/agent/agent/errors.py +3 -0
  40. package/agent/agent/file_safety.py +0 -17
  41. package/agent/agent/gemini_native_adapter.py +31 -1
  42. package/agent/agent/i18n.py +48 -4
  43. package/agent/agent/image_gen_provider.py +74 -5
  44. package/agent/agent/image_routing.py +29 -0
  45. package/agent/agent/insights.py +8 -17
  46. package/agent/agent/lsp/install.py +3 -0
  47. package/agent/agent/memory_manager.py +326 -31
  48. package/agent/agent/message_content.py +50 -0
  49. package/agent/agent/model_metadata.py +214 -3
  50. package/agent/agent/moonshot_schema.py +8 -1
  51. package/agent/agent/onboarding.py +60 -0
  52. package/agent/agent/prompt_builder.py +327 -37
  53. package/agent/agent/redact.py +1 -0
  54. package/agent/agent/runtime_cwd.py +34 -5
  55. package/agent/agent/secret_scope.py +205 -0
  56. package/agent/agent/secret_sources/bitwarden.py +34 -2
  57. package/agent/agent/skill_commands.py +90 -1
  58. package/agent/agent/skill_preprocessing.py +1 -0
  59. package/agent/agent/skill_utils.py +209 -36
  60. package/agent/agent/ssl_guard.py +94 -0
  61. package/agent/agent/system_prompt.py +133 -5
  62. package/agent/agent/tool_executor.py +496 -70
  63. package/agent/agent/transports/anthropic.py +83 -21
  64. package/agent/agent/transports/chat_completions.py +94 -5
  65. package/agent/agent/transports/codex.py +67 -2
  66. package/agent/agent/transports/codex_app_server.py +1 -0
  67. package/agent/agent/transports/codex_app_server_session.py +30 -0
  68. package/agent/agent/transports/types.py +12 -0
  69. package/agent/agent/turn_context.py +408 -0
  70. package/agent/agent/turn_finalizer.py +428 -0
  71. package/agent/agent/turn_retry_state.py +68 -0
  72. package/agent/agent/usage_pricing.py +3 -0
  73. package/agent/apps/bootstrap-installer/package.json +6 -5
  74. package/agent/apps/bootstrap-installer/src/routes/failure.tsx +12 -5
  75. package/agent/apps/bootstrap-installer/src/routes/progress.tsx +1 -3
  76. package/agent/apps/bootstrap-installer/src/store.ts +3 -2
  77. package/agent/apps/bootstrap-installer/src-tauri/src/bootstrap.rs +172 -7
  78. package/agent/apps/bootstrap-installer/src-tauri/src/events.rs +14 -1
  79. package/agent/apps/bootstrap-installer/src-tauri/src/paths.rs +29 -0
  80. package/agent/apps/bootstrap-installer/src-tauri/src/powershell.rs +93 -3
  81. package/agent/apps/bootstrap-installer/src-tauri/src/update.rs +695 -39
  82. package/agent/apps/bootstrap-installer/tsconfig.json +3 -4
  83. package/agent/apps/desktop/DESIGN.md +167 -0
  84. package/agent/apps/desktop/README.md +20 -16
  85. package/agent/apps/desktop/assets/icon.icns +0 -0
  86. package/agent/apps/desktop/assets/icon.ico +0 -0
  87. package/agent/apps/desktop/assets/icon.png +0 -0
  88. package/agent/apps/desktop/electron/backend-env.cjs +112 -0
  89. package/agent/apps/desktop/electron/backend-env.test.cjs +111 -0
  90. package/agent/apps/desktop/electron/backend-probes.test.cjs +3 -1
  91. package/agent/apps/desktop/electron/backend-ready.cjs +66 -0
  92. package/agent/apps/desktop/electron/bootstrap-platform.cjs +52 -0
  93. package/agent/apps/desktop/electron/bootstrap-platform.test.cjs +59 -1
  94. package/agent/apps/desktop/electron/bootstrap-runner.cjs +176 -38
  95. package/agent/apps/desktop/electron/bootstrap-runner.test.cjs +112 -1
  96. package/agent/apps/desktop/electron/connection-config.cjs +288 -0
  97. package/agent/apps/desktop/electron/connection-config.test.cjs +396 -0
  98. package/agent/apps/desktop/electron/dashboard-token.cjs +99 -0
  99. package/agent/apps/desktop/electron/dashboard-token.test.cjs +142 -0
  100. package/agent/apps/desktop/electron/desktop-uninstall.cjs +232 -0
  101. package/agent/apps/desktop/electron/desktop-uninstall.test.cjs +246 -0
  102. package/agent/apps/desktop/electron/entitlements.mac.inherit.plist +2 -0
  103. package/agent/apps/desktop/electron/fs-read-dir.cjs +109 -0
  104. package/agent/apps/desktop/electron/fs-read-dir.test.cjs +364 -0
  105. package/agent/apps/desktop/electron/gateway-ws-probe.cjs +188 -0
  106. package/agent/apps/desktop/electron/gateway-ws-probe.test.cjs +122 -0
  107. package/agent/apps/desktop/electron/git-root.cjs +54 -0
  108. package/agent/apps/desktop/electron/git-root.test.cjs +40 -0
  109. package/agent/apps/desktop/electron/git-worktrees.cjs +174 -0
  110. package/agent/apps/desktop/electron/hardening.cjs +123 -28
  111. package/agent/apps/desktop/electron/hardening.test.cjs +163 -0
  112. package/agent/apps/desktop/electron/main.cjs +3121 -331
  113. package/agent/apps/desktop/electron/oauth-net-request.cjs +20 -0
  114. package/agent/apps/desktop/electron/oauth-net-request.test.cjs +34 -0
  115. package/agent/apps/desktop/electron/preload.cjs +52 -2
  116. package/agent/apps/desktop/electron/session-windows.cjs +124 -0
  117. package/agent/apps/desktop/electron/session-windows.test.cjs +199 -0
  118. package/agent/apps/desktop/electron/update-rebuild.cjs +29 -0
  119. package/agent/apps/desktop/electron/update-rebuild.test.cjs +55 -0
  120. package/agent/apps/desktop/electron/update-remote.cjs +56 -0
  121. package/agent/apps/desktop/electron/update-remote.test.cjs +78 -0
  122. package/agent/apps/desktop/electron/vscode-marketplace.cjs +331 -0
  123. package/agent/apps/desktop/electron/vscode-marketplace.test.cjs +113 -0
  124. package/agent/apps/desktop/electron/windows-child-process.test.cjs +57 -0
  125. package/agent/apps/desktop/electron/windows-user-env.cjs +76 -0
  126. package/agent/apps/desktop/electron/windows-user-env.test.cjs +90 -0
  127. package/agent/apps/desktop/electron/workspace-cwd.cjs +38 -0
  128. package/agent/apps/desktop/electron/workspace-cwd.test.cjs +45 -0
  129. package/agent/apps/desktop/eslint.config.mjs +0 -3
  130. package/agent/apps/desktop/index.html +27 -2
  131. package/agent/apps/desktop/package.json +31 -11
  132. package/agent/apps/desktop/pr-assets/session-source-folders.png +0 -0
  133. package/agent/apps/desktop/public/apple-touch-icon.png +0 -0
  134. package/agent/apps/desktop/public/nous-girl.jpg +0 -0
  135. package/agent/apps/desktop/scripts/assert-dist-built.cjs +70 -0
  136. package/agent/apps/desktop/scripts/assert-dist-built.test.cjs +84 -0
  137. package/agent/apps/desktop/scripts/before-pack.cjs +78 -0
  138. package/agent/apps/desktop/scripts/before-pack.test.cjs +53 -0
  139. package/agent/apps/desktop/scripts/diag-scroll-reset.mjs +229 -0
  140. package/agent/apps/desktop/scripts/patch-electron-builder-mac-binary.cjs +64 -0
  141. package/agent/apps/desktop/scripts/run-electron-builder.cjs +57 -0
  142. package/agent/apps/desktop/src/app/agents/index.tsx +53 -45
  143. package/agent/apps/desktop/src/app/artifacts/index.tsx +102 -83
  144. package/agent/apps/desktop/src/app/chat/chat-drop-overlay.tsx +29 -8
  145. package/agent/apps/desktop/src/app/chat/chat-swap-overlay.tsx +47 -0
  146. package/agent/apps/desktop/src/app/chat/composer/attachments.tsx +81 -45
  147. package/agent/apps/desktop/src/app/chat/composer/completion-drawer.tsx +13 -24
  148. package/agent/apps/desktop/src/app/chat/composer/context-menu.tsx +138 -88
  149. package/agent/apps/desktop/src/app/chat/composer/controls.tsx +138 -90
  150. package/agent/apps/desktop/src/app/chat/composer/enter-submit-dom-race.test.tsx +218 -0
  151. package/agent/apps/desktop/src/app/chat/composer/focus.ts +32 -0
  152. package/agent/apps/desktop/src/app/chat/composer/help-hint.tsx +38 -25
  153. package/agent/apps/desktop/src/app/chat/composer/hooks/use-live-completion-adapter.ts +7 -0
  154. package/agent/apps/desktop/src/app/chat/composer/hooks/use-mic-recorder.ts +22 -12
  155. package/agent/apps/desktop/src/app/chat/composer/hooks/use-slash-completions.ts +142 -14
  156. package/agent/apps/desktop/src/app/chat/composer/hooks/use-voice-conversation.ts +14 -11
  157. package/agent/apps/desktop/src/app/chat/composer/hooks/use-voice-recorder.ts +9 -6
  158. package/agent/apps/desktop/src/app/chat/composer/ime-composition-dom-repro.test.tsx +108 -0
  159. package/agent/apps/desktop/src/app/chat/composer/index.tsx +930 -180
  160. package/agent/apps/desktop/src/app/chat/composer/inline-refs.ts +136 -32
  161. package/agent/apps/desktop/src/app/chat/composer/model-pill.tsx +86 -0
  162. package/agent/apps/desktop/src/app/chat/composer/queue-panel.tsx +54 -75
  163. package/agent/apps/desktop/src/app/chat/composer/rich-editor.test.ts +117 -1
  164. package/agent/apps/desktop/src/app/chat/composer/rich-editor.ts +117 -6
  165. package/agent/apps/desktop/src/app/chat/composer/slash-nav-dom-repro.test.tsx +186 -0
  166. package/agent/apps/desktop/src/app/chat/composer/status-stack/index.tsx +202 -0
  167. package/agent/apps/desktop/src/app/chat/composer/status-stack/status-row.tsx +155 -0
  168. package/agent/apps/desktop/src/app/chat/composer/text-utils.test.ts +104 -0
  169. package/agent/apps/desktop/src/app/chat/composer/text-utils.ts +37 -9
  170. package/agent/apps/desktop/src/app/chat/composer/trigger-popover.test.tsx +50 -0
  171. package/agent/apps/desktop/src/app/chat/composer/trigger-popover.tsx +105 -40
  172. package/agent/apps/desktop/src/app/chat/composer/types.ts +5 -0
  173. package/agent/apps/desktop/src/app/chat/composer/url-dialog.tsx +11 -15
  174. package/agent/apps/desktop/src/app/chat/composer/voice-activity.tsx +8 -4
  175. package/agent/apps/desktop/src/app/chat/hooks/use-composer-actions.test.ts +57 -0
  176. package/agent/apps/desktop/src/app/chat/hooks/use-composer-actions.ts +70 -16
  177. package/agent/apps/desktop/src/app/chat/hooks/use-file-drop-zone.ts +52 -16
  178. package/agent/apps/desktop/src/app/chat/index.tsx +234 -81
  179. package/agent/apps/desktop/src/app/chat/perf-probe.tsx +69 -21
  180. package/agent/apps/desktop/src/app/chat/right-rail/preview-console.tsx +44 -40
  181. package/agent/apps/desktop/src/app/chat/right-rail/preview-file.tsx +71 -25
  182. package/agent/apps/desktop/src/app/chat/right-rail/preview-pane.test.tsx +40 -1
  183. package/agent/apps/desktop/src/app/chat/right-rail/preview-pane.tsx +55 -53
  184. package/agent/apps/desktop/src/app/chat/right-rail/preview.tsx +35 -17
  185. package/agent/apps/desktop/src/app/chat/scroll-to-bottom-button.test.tsx +67 -0
  186. package/agent/apps/desktop/src/app/chat/scroll-to-bottom-button.tsx +74 -0
  187. package/agent/apps/desktop/src/app/chat/sidebar/cron-jobs-section.tsx +356 -0
  188. package/agent/apps/desktop/src/app/chat/sidebar/index.tsx +1189 -364
  189. package/agent/apps/desktop/src/app/chat/sidebar/load-more-row.tsx +30 -0
  190. package/agent/apps/desktop/src/app/chat/sidebar/order.test.ts +21 -0
  191. package/agent/apps/desktop/src/app/chat/sidebar/order.ts +17 -0
  192. package/agent/apps/desktop/src/app/chat/sidebar/profile-switcher.tsx +524 -0
  193. package/agent/apps/desktop/src/app/chat/sidebar/session-actions-menu.tsx +80 -45
  194. package/agent/apps/desktop/src/app/chat/sidebar/session-row.tsx +120 -25
  195. package/agent/apps/desktop/src/app/chat/sidebar/virtual-session-list.tsx +7 -13
  196. package/agent/apps/desktop/src/app/chat/sidebar/workspace-groups.test.ts +149 -0
  197. package/agent/apps/desktop/src/app/chat/sidebar/workspace-groups.ts +326 -0
  198. package/agent/apps/desktop/src/app/chat/thread-loading.ts +7 -2
  199. package/agent/apps/desktop/src/app/command-center/index.tsx +320 -581
  200. package/agent/apps/desktop/src/app/command-palette/index.tsx +681 -0
  201. package/agent/apps/desktop/src/app/command-palette/marketplace-theme-page.tsx +157 -0
  202. package/agent/apps/desktop/src/app/cron/index.tsx +392 -324
  203. package/agent/apps/desktop/src/app/cron/job-state.ts +29 -0
  204. package/agent/apps/desktop/src/app/desktop-controller.tsx +618 -123
  205. package/agent/apps/desktop/src/app/floating-hud.ts +22 -0
  206. package/agent/apps/desktop/src/app/gateway/hooks/use-gateway-boot.test.tsx +265 -0
  207. package/agent/apps/desktop/src/app/gateway/hooks/use-gateway-boot.ts +260 -14
  208. package/agent/apps/desktop/src/app/gateway/hooks/use-gateway-request.ts +48 -4
  209. package/agent/apps/desktop/src/app/hooks/use-keybinds.ts +270 -0
  210. package/agent/apps/desktop/src/app/hooks/use-refresh-hotkey.ts +45 -0
  211. package/agent/apps/desktop/src/app/layout-constants.ts +19 -0
  212. package/agent/apps/desktop/src/app/messaging/index.tsx +136 -241
  213. package/agent/apps/desktop/src/app/messaging/platform-icon.tsx +95 -0
  214. package/agent/apps/desktop/src/app/model-visibility-overlay.tsx +31 -0
  215. package/agent/apps/desktop/src/app/overlays/overlay-search-input.tsx +18 -62
  216. package/agent/apps/desktop/src/app/overlays/overlay-split-layout.tsx +59 -7
  217. package/agent/apps/desktop/src/app/overlays/overlay-view.tsx +9 -5
  218. package/agent/apps/desktop/src/app/page-search-shell.tsx +42 -20
  219. package/agent/apps/desktop/src/app/profiles/create-profile-dialog.tsx +165 -0
  220. package/agent/apps/desktop/src/app/profiles/delete-profile-dialog.tsx +65 -0
  221. package/agent/apps/desktop/src/app/profiles/index.tsx +174 -199
  222. package/agent/apps/desktop/src/app/profiles/rename-profile-dialog.tsx +125 -0
  223. package/agent/apps/desktop/src/app/right-sidebar/files/dnd-manager.ts +27 -0
  224. package/agent/apps/desktop/src/app/right-sidebar/files/ipc.test.ts +100 -0
  225. package/agent/apps/desktop/src/app/right-sidebar/files/ipc.ts +12 -18
  226. package/agent/apps/desktop/src/app/right-sidebar/files/remote-picker.tsx +177 -0
  227. package/agent/apps/desktop/src/app/right-sidebar/files/tree.tsx +35 -21
  228. package/agent/apps/desktop/src/app/right-sidebar/files/use-project-tree.test.ts +75 -3
  229. package/agent/apps/desktop/src/app/right-sidebar/files/use-project-tree.ts +152 -5
  230. package/agent/apps/desktop/src/app/right-sidebar/index.test.tsx +75 -0
  231. package/agent/apps/desktop/src/app/right-sidebar/index.tsx +166 -129
  232. package/agent/apps/desktop/src/app/right-sidebar/store.ts +19 -4
  233. package/agent/apps/desktop/src/app/right-sidebar/terminal/buffer.ts +65 -0
  234. package/agent/apps/desktop/src/app/right-sidebar/terminal/index.tsx +29 -34
  235. package/agent/apps/desktop/src/app/right-sidebar/terminal/persistent.tsx +18 -6
  236. package/agent/apps/desktop/src/app/right-sidebar/terminal/selection.ts +93 -32
  237. package/agent/apps/desktop/src/app/right-sidebar/terminal/use-terminal-session.ts +381 -119
  238. package/agent/apps/desktop/src/app/routes.ts +9 -0
  239. package/agent/apps/desktop/src/app/session/hooks/use-cwd-actions.ts +17 -7
  240. package/agent/apps/desktop/src/app/session/hooks/use-message-stream.ts +365 -47
  241. package/agent/apps/desktop/src/app/session/hooks/use-model-controls.test.tsx +198 -0
  242. package/agent/apps/desktop/src/app/session/hooks/use-model-controls.ts +70 -34
  243. package/agent/apps/desktop/src/app/session/hooks/use-prompt-actions.test.tsx +1061 -0
  244. package/agent/apps/desktop/src/app/session/hooks/use-prompt-actions.ts +1143 -165
  245. package/agent/apps/desktop/src/app/session/hooks/use-route-resume.test.tsx +341 -2
  246. package/agent/apps/desktop/src/app/session/hooks/use-route-resume.ts +176 -5
  247. package/agent/apps/desktop/src/app/session/hooks/use-session-actions.test.tsx +259 -0
  248. package/agent/apps/desktop/src/app/session/hooks/use-session-actions.ts +452 -149
  249. package/agent/apps/desktop/src/app/session/hooks/use-session-state-cache.test.tsx +327 -0
  250. package/agent/apps/desktop/src/app/session/hooks/use-session-state-cache.ts +133 -4
  251. package/agent/apps/desktop/src/app/session-picker-overlay.tsx +32 -0
  252. package/agent/apps/desktop/src/app/session-switcher.tsx +107 -0
  253. package/agent/apps/desktop/src/app/settings/about-settings.tsx +45 -36
  254. package/agent/apps/desktop/src/app/settings/appearance-settings.tsx +243 -162
  255. package/agent/apps/desktop/src/app/settings/config-settings.tsx +86 -66
  256. package/agent/apps/desktop/src/app/settings/constants.ts +459 -122
  257. package/agent/apps/desktop/src/app/settings/credential-key-ui.tsx +373 -0
  258. package/agent/apps/desktop/src/app/settings/env-credentials.tsx +198 -0
  259. package/agent/apps/desktop/src/app/settings/env-var-actions-menu.tsx +136 -0
  260. package/agent/apps/desktop/src/app/settings/field-copy.ts +56 -0
  261. package/agent/apps/desktop/src/app/settings/gateway-settings.tsx +385 -72
  262. package/agent/apps/desktop/src/app/settings/helpers.test.ts +156 -1
  263. package/agent/apps/desktop/src/app/settings/helpers.ts +30 -2
  264. package/agent/apps/desktop/src/app/settings/index.tsx +118 -84
  265. package/agent/apps/desktop/src/app/settings/keys-settings.tsx +62 -419
  266. package/agent/apps/desktop/src/app/settings/mcp-settings.tsx +65 -60
  267. package/agent/apps/desktop/src/app/settings/model-settings.test.tsx +129 -5
  268. package/agent/apps/desktop/src/app/settings/model-settings.tsx +370 -65
  269. package/agent/apps/desktop/src/app/settings/notifications-settings.tsx +150 -0
  270. package/agent/apps/desktop/src/app/settings/primitives.tsx +5 -11
  271. package/agent/apps/desktop/src/app/settings/provider-config-panel.test.tsx +142 -0
  272. package/agent/apps/desktop/src/app/settings/provider-config-panel.tsx +182 -0
  273. package/agent/apps/desktop/src/app/settings/providers-settings.test.tsx +171 -0
  274. package/agent/apps/desktop/src/app/settings/providers-settings.tsx +471 -0
  275. package/agent/apps/desktop/src/app/settings/sessions-settings.tsx +183 -71
  276. package/agent/apps/desktop/src/app/settings/toolset-config-panel.test.tsx +135 -1
  277. package/agent/apps/desktop/src/app/settings/toolset-config-panel.tsx +180 -57
  278. package/agent/apps/desktop/src/app/settings/types.ts +9 -6
  279. package/agent/apps/desktop/src/app/settings/uninstall-section.tsx +185 -0
  280. package/agent/apps/desktop/src/app/settings/use-deep-link-highlight.ts +60 -0
  281. package/agent/apps/desktop/src/app/shell/app-shell.tsx +59 -13
  282. package/agent/apps/desktop/src/app/shell/gateway-menu-panel.tsx +37 -32
  283. package/agent/apps/desktop/src/app/shell/hooks/use-overlay-routing.ts +6 -3
  284. package/agent/apps/desktop/src/app/shell/hooks/use-statusbar-items.tsx +212 -53
  285. package/agent/apps/desktop/src/app/shell/keybind-panel.tsx +215 -0
  286. package/agent/apps/desktop/src/app/shell/model-edit-submenu.test.tsx +84 -0
  287. package/agent/apps/desktop/src/app/shell/model-edit-submenu.tsx +244 -0
  288. package/agent/apps/desktop/src/app/shell/model-menu-panel.tsx +392 -0
  289. package/agent/apps/desktop/src/app/shell/statusbar-controls.tsx +23 -33
  290. package/agent/apps/desktop/src/app/shell/titlebar-controls.tsx +79 -95
  291. package/agent/apps/desktop/src/app/shell/titlebar.ts +8 -2
  292. package/agent/apps/desktop/src/app/skills/index.test.tsx +11 -0
  293. package/agent/apps/desktop/src/app/skills/index.tsx +79 -64
  294. package/agent/apps/desktop/src/app/types.ts +85 -0
  295. package/agent/apps/desktop/src/app/updates-overlay.tsx +110 -105
  296. package/agent/apps/desktop/src/components/assistant-ui/ansi-text.tsx +34 -0
  297. package/agent/apps/desktop/src/components/assistant-ui/block-direction.test.tsx +129 -0
  298. package/agent/apps/desktop/src/components/assistant-ui/clarify-tool.tsx +102 -81
  299. package/agent/apps/desktop/src/components/assistant-ui/directive-text.tsx +92 -15
  300. package/agent/apps/desktop/src/components/assistant-ui/markdown-text.test.ts +38 -0
  301. package/agent/apps/desktop/src/components/assistant-ui/markdown-text.tsx +304 -45
  302. package/agent/apps/desktop/src/components/assistant-ui/message-render-boundary.test.tsx +80 -0
  303. package/agent/apps/desktop/src/components/assistant-ui/message-render-boundary.tsx +48 -0
  304. package/agent/apps/desktop/src/components/assistant-ui/streaming.test.tsx +142 -90
  305. package/agent/apps/desktop/src/components/assistant-ui/thread-list.tsx +337 -0
  306. package/agent/apps/desktop/src/components/assistant-ui/thread.tsx +667 -190
  307. package/agent/apps/desktop/src/components/assistant-ui/tool-approval-group.test.tsx +299 -0
  308. package/agent/apps/desktop/src/components/assistant-ui/tool-approval.test.tsx +133 -0
  309. package/agent/apps/desktop/src/components/assistant-ui/tool-approval.tsx +239 -0
  310. package/agent/apps/desktop/src/components/assistant-ui/tool-fallback-model.test.ts +31 -0
  311. package/agent/apps/desktop/src/components/assistant-ui/tool-fallback-model.ts +152 -134
  312. package/agent/apps/desktop/src/components/assistant-ui/tool-fallback.tsx +142 -150
  313. package/agent/apps/desktop/src/components/assistant-ui/tooltip-icon-button.tsx +14 -12
  314. package/agent/apps/desktop/src/components/assistant-ui/user-message-edit.test.tsx +141 -0
  315. package/agent/apps/desktop/src/components/assistant-ui/user-message-text.tsx +152 -0
  316. package/agent/apps/desktop/src/components/boot-failure-overlay.tsx +150 -33
  317. package/agent/apps/desktop/src/components/boot-failure-reauth.test.ts +100 -0
  318. package/agent/apps/desktop/src/components/boot-failure-reauth.ts +81 -0
  319. package/agent/apps/desktop/src/components/brand-mark.tsx +19 -0
  320. package/agent/apps/desktop/src/components/chat/code-card.tsx +1 -1
  321. package/agent/apps/desktop/src/components/chat/composer-dock.ts +31 -0
  322. package/agent/apps/desktop/src/components/chat/diff-lines.tsx +1 -1
  323. package/agent/apps/desktop/src/components/chat/disclosure-row.tsx +13 -3
  324. package/agent/apps/desktop/src/components/chat/expandable-block.tsx +52 -0
  325. package/agent/apps/desktop/src/components/chat/generated-image-result.tsx +174 -0
  326. package/agent/apps/desktop/src/components/chat/image-generation-placeholder.tsx +70 -37
  327. package/agent/apps/desktop/src/components/chat/intro.tsx +8 -7
  328. package/agent/apps/desktop/src/components/chat/preview-attachment.tsx +4 -2
  329. package/agent/apps/desktop/src/components/chat/shiki-highlighter.test.ts +37 -0
  330. package/agent/apps/desktop/src/components/chat/shiki-highlighter.tsx +96 -22
  331. package/agent/apps/desktop/src/components/chat/status-row.tsx +70 -0
  332. package/agent/apps/desktop/src/components/chat/status-section.tsx +42 -0
  333. package/agent/apps/desktop/src/components/chat/terminal-output.tsx +54 -0
  334. package/agent/apps/desktop/src/components/chat/zoomable-image.tsx +70 -109
  335. package/agent/apps/desktop/src/components/desktop-install-overlay.tsx +154 -84
  336. package/agent/apps/desktop/src/components/desktop-onboarding-overlay.test.tsx +38 -8
  337. package/agent/apps/desktop/src/components/desktop-onboarding-overlay.tsx +789 -233
  338. package/agent/apps/desktop/src/components/error-boundary.tsx +77 -0
  339. package/agent/apps/desktop/src/components/gateway-connecting-overlay.test.tsx +144 -0
  340. package/agent/apps/desktop/src/components/gateway-connecting-overlay.tsx +7 -1
  341. package/agent/apps/desktop/src/components/haptics-provider.tsx +24 -0
  342. package/agent/apps/desktop/src/components/language-switcher.test.tsx +53 -0
  343. package/agent/apps/desktop/src/components/language-switcher.tsx +175 -0
  344. package/agent/apps/desktop/src/components/model-picker.tsx +42 -40
  345. package/agent/apps/desktop/src/components/model-visibility-dialog.tsx +166 -0
  346. package/agent/apps/desktop/src/components/notifications.tsx +48 -27
  347. package/agent/apps/desktop/src/components/pane-shell/index.ts +1 -1
  348. package/agent/apps/desktop/src/components/pane-shell/pane-shell.tsx +146 -9
  349. package/agent/apps/desktop/src/components/prompt-overlays.tsx +234 -0
  350. package/agent/apps/desktop/src/components/session-picker.tsx +108 -0
  351. package/agent/apps/desktop/src/components/ui/action-status.tsx +25 -0
  352. package/agent/apps/desktop/src/components/ui/badge.tsx +35 -0
  353. package/agent/apps/desktop/src/components/ui/button.tsx +37 -13
  354. package/agent/apps/desktop/src/components/ui/confirm-dialog.tsx +109 -0
  355. package/agent/apps/desktop/src/components/ui/control.ts +25 -0
  356. package/agent/apps/desktop/src/components/ui/copy-button.test.tsx +36 -0
  357. package/agent/apps/desktop/src/components/ui/copy-button.tsx +38 -27
  358. package/agent/apps/desktop/src/components/ui/dialog.tsx +39 -11
  359. package/agent/apps/desktop/src/components/ui/dropdown-menu.tsx +98 -24
  360. package/agent/apps/desktop/src/components/ui/error-state.tsx +50 -0
  361. package/agent/apps/desktop/src/components/ui/fade-text.tsx +9 -2
  362. package/agent/apps/desktop/src/components/ui/{braille-spinner.tsx → glyph-spinner.tsx} +15 -13
  363. package/agent/apps/desktop/src/components/ui/input.tsx +5 -2
  364. package/agent/apps/desktop/src/components/ui/kbd.tsx +83 -12
  365. package/agent/apps/desktop/src/components/ui/log-view.tsx +19 -0
  366. package/agent/apps/desktop/src/components/ui/pagination.tsx +12 -5
  367. package/agent/apps/desktop/src/components/ui/popover.tsx +44 -0
  368. package/agent/apps/desktop/src/components/ui/search-field.tsx +80 -0
  369. package/agent/apps/desktop/src/components/ui/segmented-control.tsx +51 -0
  370. package/agent/apps/desktop/src/components/ui/select.tsx +10 -3
  371. package/agent/apps/desktop/src/components/ui/sheet.tsx +8 -2
  372. package/agent/apps/desktop/src/components/ui/sidebar.tsx +18 -25
  373. package/agent/apps/desktop/src/components/ui/switch.tsx +38 -15
  374. package/agent/apps/desktop/src/components/ui/textarea.tsx +4 -11
  375. package/agent/apps/desktop/src/components/ui/tool-icon.tsx +65 -0
  376. package/agent/apps/desktop/src/components/ui/tooltip.tsx +31 -4
  377. package/agent/apps/desktop/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
  378. package/agent/apps/desktop/src/fonts/JetBrainsMono-Italic.woff2 +0 -0
  379. package/agent/apps/desktop/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
  380. package/agent/apps/desktop/src/global.d.ts +181 -4
  381. package/agent/apps/desktop/src/hermes.test.ts +60 -0
  382. package/agent/apps/desktop/src/hermes.ts +190 -13
  383. package/agent/apps/desktop/src/hooks/use-image-download.ts +85 -0
  384. package/agent/apps/desktop/src/hooks/use-resize-observer.ts +13 -4
  385. package/agent/apps/desktop/src/hooks/use-worktree-info.ts +68 -0
  386. package/agent/apps/desktop/src/i18n/catalog.ts +12 -0
  387. package/agent/apps/desktop/src/i18n/context.test.tsx +232 -0
  388. package/agent/apps/desktop/src/i18n/context.tsx +183 -0
  389. package/agent/apps/desktop/src/i18n/define-locale.ts +41 -0
  390. package/agent/apps/desktop/src/i18n/en.ts +1921 -0
  391. package/agent/apps/desktop/src/i18n/index.ts +20 -0
  392. package/agent/apps/desktop/src/i18n/ja.ts +2053 -0
  393. package/agent/apps/desktop/src/i18n/languages.test.ts +43 -0
  394. package/agent/apps/desktop/src/i18n/languages.ts +86 -0
  395. package/agent/apps/desktop/src/i18n/runtime.test.ts +75 -0
  396. package/agent/apps/desktop/src/i18n/runtime.ts +53 -0
  397. package/agent/apps/desktop/src/i18n/types.ts +1559 -0
  398. package/agent/apps/desktop/src/i18n/zh-hant.ts +1992 -0
  399. package/agent/apps/desktop/src/i18n/zh.ts +2099 -0
  400. package/agent/apps/desktop/src/lib/ansi.test.ts +123 -0
  401. package/agent/apps/desktop/src/lib/ansi.ts +186 -0
  402. package/agent/apps/desktop/src/lib/chat-messages.test.ts +79 -0
  403. package/agent/apps/desktop/src/lib/chat-messages.ts +68 -29
  404. package/agent/apps/desktop/src/lib/chat-runtime.test.ts +65 -1
  405. package/agent/apps/desktop/src/lib/chat-runtime.ts +39 -3
  406. package/agent/apps/desktop/src/lib/completion-sound.ts +519 -0
  407. package/agent/apps/desktop/src/lib/desktop-fs.test.ts +116 -0
  408. package/agent/apps/desktop/src/lib/desktop-fs.ts +113 -0
  409. package/agent/apps/desktop/src/lib/desktop-slash-commands.test.ts +89 -6
  410. package/agent/apps/desktop/src/lib/desktop-slash-commands.ts +270 -131
  411. package/agent/apps/desktop/src/lib/external-link.test.tsx +27 -0
  412. package/agent/apps/desktop/src/lib/external-link.tsx +9 -2
  413. package/agent/apps/desktop/src/lib/gateway-events.test.ts +27 -0
  414. package/agent/apps/desktop/src/lib/gateway-events.ts +16 -0
  415. package/agent/apps/desktop/src/lib/gateway-ws-url.test.ts +78 -0
  416. package/agent/apps/desktop/src/lib/gateway-ws-url.ts +91 -0
  417. package/agent/apps/desktop/src/lib/generated-images.test.ts +97 -0
  418. package/agent/apps/desktop/src/lib/generated-images.ts +116 -0
  419. package/agent/apps/desktop/src/lib/haptics.ts +17 -0
  420. package/agent/apps/desktop/src/lib/icons.ts +10 -2
  421. package/agent/apps/desktop/src/lib/keybinds/actions.ts +137 -0
  422. package/agent/apps/desktop/src/lib/keybinds/combo.test.ts +86 -0
  423. package/agent/apps/desktop/src/lib/keybinds/combo.ts +195 -0
  424. package/agent/apps/desktop/src/lib/local-preview.ts +23 -2
  425. package/agent/apps/desktop/src/lib/markdown-preprocess.ts +20 -7
  426. package/agent/apps/desktop/src/lib/media.remote.test.ts +90 -0
  427. package/agent/apps/desktop/src/lib/media.ts +40 -1
  428. package/agent/apps/desktop/src/lib/model-status-label.test.ts +59 -0
  429. package/agent/apps/desktop/src/lib/model-status-label.ts +122 -0
  430. package/agent/apps/desktop/src/lib/mutable-ref.ts +6 -0
  431. package/agent/apps/desktop/src/lib/profile-color.ts +58 -0
  432. package/agent/apps/desktop/src/lib/query-client.ts +13 -0
  433. package/agent/apps/desktop/src/lib/remend-tail.test.ts +105 -0
  434. package/agent/apps/desktop/src/lib/remend-tail.ts +108 -0
  435. package/agent/apps/desktop/src/lib/session-export.ts +6 -3
  436. package/agent/apps/desktop/src/lib/session-ids.test.ts +44 -0
  437. package/agent/apps/desktop/src/lib/session-ids.ts +26 -0
  438. package/agent/apps/desktop/src/lib/session-search.test.ts +66 -0
  439. package/agent/apps/desktop/src/lib/session-search.ts +21 -0
  440. package/agent/apps/desktop/src/lib/session-source.ts +126 -0
  441. package/agent/apps/desktop/src/lib/storage.test.ts +25 -0
  442. package/agent/apps/desktop/src/lib/storage.ts +35 -1
  443. package/agent/apps/desktop/src/lib/todos.test.ts +46 -1
  444. package/agent/apps/desktop/src/lib/todos.ts +37 -0
  445. package/agent/apps/desktop/src/lib/tool-result-summary.ts +5 -1
  446. package/agent/apps/desktop/src/lib/update-copy.test.ts +38 -0
  447. package/agent/apps/desktop/src/lib/update-copy.ts +44 -0
  448. package/agent/apps/desktop/src/lib/use-enter-animation.ts +2 -2
  449. package/agent/apps/desktop/src/lib/yolo-session.ts +50 -0
  450. package/agent/apps/desktop/src/main.tsx +19 -19
  451. package/agent/apps/desktop/src/store/boot.ts +4 -3
  452. package/agent/apps/desktop/src/store/clarify.test.ts +81 -0
  453. package/agent/apps/desktop/src/store/clarify.ts +50 -13
  454. package/agent/apps/desktop/src/store/command-palette.ts +20 -0
  455. package/agent/apps/desktop/src/store/compaction.test.ts +53 -0
  456. package/agent/apps/desktop/src/store/compaction.ts +38 -0
  457. package/agent/apps/desktop/src/store/completion-sound.ts +32 -0
  458. package/agent/apps/desktop/src/store/composer-input-history.test.ts +147 -0
  459. package/agent/apps/desktop/src/store/composer-input-history.ts +158 -0
  460. package/agent/apps/desktop/src/store/composer-queue.test.ts +68 -0
  461. package/agent/apps/desktop/src/store/composer-queue.ts +76 -0
  462. package/agent/apps/desktop/src/store/composer-status.test.ts +99 -0
  463. package/agent/apps/desktop/src/store/composer-status.ts +277 -0
  464. package/agent/apps/desktop/src/store/composer.test.ts +106 -0
  465. package/agent/apps/desktop/src/store/composer.ts +116 -0
  466. package/agent/apps/desktop/src/store/cron.ts +19 -0
  467. package/agent/apps/desktop/src/store/gateway.ts +280 -6
  468. package/agent/apps/desktop/src/store/keybinds.ts +143 -0
  469. package/agent/apps/desktop/src/store/layout.ts +107 -9
  470. package/agent/apps/desktop/src/store/model-presets.test.ts +51 -0
  471. package/agent/apps/desktop/src/store/model-presets.ts +86 -0
  472. package/agent/apps/desktop/src/store/model-visibility.test.ts +99 -0
  473. package/agent/apps/desktop/src/store/model-visibility.ts +161 -0
  474. package/agent/apps/desktop/src/store/native-notifications.test.ts +192 -0
  475. package/agent/apps/desktop/src/store/native-notifications.ts +203 -0
  476. package/agent/apps/desktop/src/store/notifications.ts +10 -7
  477. package/agent/apps/desktop/src/store/onboarding.test.ts +271 -1
  478. package/agent/apps/desktop/src/store/onboarding.ts +268 -38
  479. package/agent/apps/desktop/src/store/preview.ts +10 -1
  480. package/agent/apps/desktop/src/store/profile.test.ts +89 -0
  481. package/agent/apps/desktop/src/store/profile.ts +395 -0
  482. package/agent/apps/desktop/src/store/prompts.test.ts +127 -0
  483. package/agent/apps/desktop/src/store/prompts.ts +117 -0
  484. package/agent/apps/desktop/src/store/session-switcher.test.ts +115 -0
  485. package/agent/apps/desktop/src/store/session-switcher.ts +128 -0
  486. package/agent/apps/desktop/src/store/session-sync.ts +25 -0
  487. package/agent/apps/desktop/src/store/session.test.ts +268 -2
  488. package/agent/apps/desktop/src/store/session.ts +392 -18
  489. package/agent/apps/desktop/src/store/subagents.ts +3 -0
  490. package/agent/apps/desktop/src/store/system-actions.ts +48 -0
  491. package/agent/apps/desktop/src/store/thread-scroll.ts +58 -5
  492. package/agent/apps/desktop/src/store/todos.test.ts +47 -0
  493. package/agent/apps/desktop/src/store/todos.ts +64 -0
  494. package/agent/apps/desktop/src/store/tool-dismiss.ts +45 -0
  495. package/agent/apps/desktop/src/store/translucency.ts +38 -0
  496. package/agent/apps/desktop/src/store/updates.test.ts +187 -2
  497. package/agent/apps/desktop/src/store/updates.ts +268 -18
  498. package/agent/apps/desktop/src/store/windows.test.ts +143 -0
  499. package/agent/apps/desktop/src/store/windows.ts +115 -0
  500. package/agent/apps/desktop/src/styles.css +510 -119
  501. package/agent/apps/desktop/src/themes/color.ts +142 -0
  502. package/agent/apps/desktop/src/themes/context.tsx +128 -75
  503. package/agent/apps/desktop/src/themes/install.test.ts +119 -0
  504. package/agent/apps/desktop/src/themes/install.ts +95 -0
  505. package/agent/apps/desktop/src/themes/presets.test.ts +33 -0
  506. package/agent/apps/desktop/src/themes/presets.ts +13 -4
  507. package/agent/apps/desktop/src/themes/profile-theme.test.ts +41 -0
  508. package/agent/apps/desktop/src/themes/types.ts +35 -0
  509. package/agent/apps/desktop/src/themes/user-themes.test.ts +63 -0
  510. package/agent/apps/desktop/src/themes/user-themes.ts +122 -0
  511. package/agent/apps/desktop/src/themes/vscode.test.ts +171 -0
  512. package/agent/apps/desktop/src/themes/vscode.ts +343 -0
  513. package/agent/apps/desktop/src/types/hermes.ts +138 -1
  514. package/agent/apps/desktop/tsconfig.json +2 -2
  515. package/agent/apps/desktop/vite.config.ts +18 -0
  516. package/agent/apps/shared/package.json +1 -1
  517. package/agent/apps/shared/src/json-rpc-gateway.ts +63 -2
  518. package/agent/apps/shared/tsconfig.json +2 -2
  519. package/agent/cli-config.yaml.example +78 -1
  520. package/agent/cli.py +2294 -3146
  521. package/agent/cron/blueprint_catalog.py +713 -0
  522. package/agent/cron/jobs.py +226 -110
  523. package/agent/cron/scheduler.py +468 -193
  524. package/agent/cron/scheduler_provider.py +177 -0
  525. package/agent/cron/scripts/__init__.py +1 -0
  526. package/agent/cron/scripts/classify_items.py +226 -0
  527. package/agent/cron/suggestion_catalog.py +154 -0
  528. package/agent/cron/suggestions.py +257 -0
  529. package/agent/docs/chronos-managed-cron-contract.md +196 -0
  530. package/agent/docs/design/profile-builder.md +146 -0
  531. package/agent/docs/middleware/README.md +260 -0
  532. package/agent/docs/observability/README.md +316 -0
  533. package/agent/docs/plans/2026-06-09-003-fix-telegram-stream-overflow-continuations-plan.md +240 -0
  534. package/agent/docs/rca-ssl-cacert-post-git-pull.md +54 -0
  535. package/agent/docs/relay-connector-contract.md +285 -0
  536. package/agent/gateway/authz_mixin.py +536 -0
  537. package/agent/gateway/channel_directory.py +65 -3
  538. package/agent/gateway/config.py +222 -12
  539. package/agent/gateway/display_config.py +10 -0
  540. package/agent/gateway/hooks.py +17 -0
  541. package/agent/gateway/kanban_watchers.py +1146 -0
  542. package/agent/gateway/message_timestamps.py +166 -0
  543. package/agent/gateway/platforms/ADDING_A_PLATFORM.md +29 -0
  544. package/agent/gateway/platforms/api_server.py +216 -38
  545. package/agent/gateway/platforms/base.py +210 -58
  546. package/agent/gateway/platforms/email.py +122 -12
  547. package/agent/gateway/platforms/feishu.py +80 -11
  548. package/agent/gateway/platforms/feishu_meeting_invite.py +212 -0
  549. package/agent/gateway/platforms/matrix.py +1498 -297
  550. package/agent/gateway/platforms/qqbot/adapter.py +6 -0
  551. package/agent/gateway/platforms/signal.py +8 -0
  552. package/agent/gateway/platforms/slack.py +308 -12
  553. package/agent/gateway/platforms/telegram.py +831 -24
  554. package/agent/gateway/platforms/webhook.py +109 -21
  555. package/agent/gateway/platforms/weixin.py +113 -2
  556. package/agent/gateway/platforms/whatsapp.py +94 -288
  557. package/agent/gateway/platforms/whatsapp_cloud.py +1956 -0
  558. package/agent/gateway/platforms/whatsapp_common.py +367 -0
  559. package/agent/gateway/platforms/yuanbao.py +608 -191
  560. package/agent/gateway/platforms/yuanbao_proto.py +232 -23
  561. package/agent/gateway/relay/__init__.py +375 -0
  562. package/agent/gateway/relay/adapter.py +222 -0
  563. package/agent/gateway/relay/auth.py +168 -0
  564. package/agent/gateway/relay/descriptor.py +118 -0
  565. package/agent/gateway/relay/transport.py +101 -0
  566. package/agent/gateway/relay/ws_transport.py +327 -0
  567. package/agent/gateway/response_filters.py +53 -0
  568. package/agent/gateway/rich_sent_store.py +80 -0
  569. package/agent/gateway/run.py +2940 -5001
  570. package/agent/gateway/session.py +109 -8
  571. package/agent/gateway/session_context.py +22 -4
  572. package/agent/gateway/slash_commands.py +3854 -0
  573. package/agent/gateway/status.py +141 -21
  574. package/agent/gateway/stream_consumer.py +288 -31
  575. package/agent/hermes-already-has-routines.md +1 -1
  576. package/agent/hermes_cli/__init__.py +62 -17
  577. package/agent/hermes_cli/_parser.py +30 -0
  578. package/agent/hermes_cli/_subprocess_compat.py +61 -0
  579. package/agent/hermes_cli/active_sessions.py +320 -0
  580. package/agent/hermes_cli/auth.py +707 -59
  581. package/agent/hermes_cli/auth_commands.py +39 -22
  582. package/agent/hermes_cli/backup.py +109 -7
  583. package/agent/hermes_cli/banner.py +88 -0
  584. package/agent/hermes_cli/blueprint_cmd.py +318 -0
  585. package/agent/hermes_cli/clawpump_cli.py +3 -3
  586. package/agent/hermes_cli/cli_agent_setup_mixin.py +684 -0
  587. package/agent/hermes_cli/cli_commands_mixin.py +2293 -0
  588. package/agent/hermes_cli/commands.py +216 -91
  589. package/agent/hermes_cli/config.py +967 -130
  590. package/agent/hermes_cli/container_boot.py +76 -11
  591. package/agent/hermes_cli/cron.py +5 -11
  592. package/agent/hermes_cli/curator.py +21 -0
  593. package/agent/hermes_cli/dashboard_auth/__init__.py +2 -0
  594. package/agent/hermes_cli/dashboard_auth/base.py +62 -0
  595. package/agent/hermes_cli/dashboard_auth/cookies.py +32 -19
  596. package/agent/hermes_cli/dashboard_auth/login_page.py +156 -6
  597. package/agent/hermes_cli/dashboard_auth/middleware.py +28 -4
  598. package/agent/hermes_cli/dashboard_auth/prefix.py +46 -2
  599. package/agent/hermes_cli/dashboard_auth/public_paths.py +6 -0
  600. package/agent/hermes_cli/dashboard_auth/routes.py +158 -2
  601. package/agent/hermes_cli/dashboard_auth/ws_tickets.py +85 -11
  602. package/agent/hermes_cli/dashboard_register.py +427 -0
  603. package/agent/hermes_cli/debug.py +155 -50
  604. package/agent/hermes_cli/distribution.py +227 -0
  605. package/agent/hermes_cli/doctor.py +255 -14
  606. package/agent/hermes_cli/dump.py +60 -6
  607. package/agent/hermes_cli/env_loader.py +33 -0
  608. package/agent/hermes_cli/gateway.py +755 -103
  609. package/agent/hermes_cli/gateway_enroll.py +250 -0
  610. package/agent/hermes_cli/gateway_windows.py +254 -11
  611. package/agent/hermes_cli/gui_uninstall.py +285 -0
  612. package/agent/hermes_cli/inventory.py +105 -4
  613. package/agent/hermes_cli/kanban.py +58 -71
  614. package/agent/hermes_cli/kanban_db.py +391 -14
  615. package/agent/hermes_cli/kanban_decompose.py +2 -2
  616. package/agent/hermes_cli/kanban_specify.py +3 -1
  617. package/agent/hermes_cli/logs.py +2 -0
  618. package/agent/hermes_cli/main.py +2889 -5287
  619. package/agent/hermes_cli/managed_scope.py +214 -0
  620. package/agent/hermes_cli/managed_uv.py +254 -0
  621. package/agent/hermes_cli/mcp_catalog.py +6 -3
  622. package/agent/hermes_cli/mcp_config.py +145 -21
  623. package/agent/hermes_cli/mcp_security.py +96 -0
  624. package/agent/hermes_cli/mcp_startup.py +32 -3
  625. package/agent/hermes_cli/memory_providers.py +149 -0
  626. package/agent/hermes_cli/memory_setup.py +97 -42
  627. package/agent/hermes_cli/middleware.py +313 -0
  628. package/agent/hermes_cli/model_catalog.py +31 -0
  629. package/agent/hermes_cli/model_cost_guard.py +134 -0
  630. package/agent/hermes_cli/model_normalize.py +2 -1
  631. package/agent/hermes_cli/model_setup_flows.py +2759 -0
  632. package/agent/hermes_cli/model_switch.py +242 -27
  633. package/agent/hermes_cli/models.py +284 -44
  634. package/agent/hermes_cli/nous_account.py +33 -6
  635. package/agent/hermes_cli/nous_billing.py +406 -0
  636. package/agent/hermes_cli/nous_subscription.py +202 -5
  637. package/agent/hermes_cli/platforms.py +1 -0
  638. package/agent/hermes_cli/plugins.py +218 -18
  639. package/agent/hermes_cli/plugins_cmd.py +249 -105
  640. package/agent/hermes_cli/portal_cli.py +56 -16
  641. package/agent/hermes_cli/profile_distribution.py +6 -1
  642. package/agent/hermes_cli/profiles.py +283 -32
  643. package/agent/hermes_cli/provider_catalog.py +170 -0
  644. package/agent/hermes_cli/providers.py +4 -1
  645. package/agent/hermes_cli/pty_bridge.py +53 -4
  646. package/agent/hermes_cli/runtime_provider.py +216 -34
  647. package/agent/hermes_cli/secret_prompt.py +4 -4
  648. package/agent/hermes_cli/secrets_cli.py +24 -0
  649. package/agent/hermes_cli/send_cmd.py +28 -2
  650. package/agent/hermes_cli/service_manager.py +166 -19
  651. package/agent/hermes_cli/session_listing.py +97 -0
  652. package/agent/hermes_cli/setup.py +158 -94
  653. package/agent/hermes_cli/setup_whatsapp_cloud.py +541 -0
  654. package/agent/hermes_cli/skills_config.py +8 -2
  655. package/agent/hermes_cli/skills_hub.py +149 -7
  656. package/agent/hermes_cli/status.py +2 -2
  657. package/agent/hermes_cli/subcommands/__init__.py +18 -0
  658. package/agent/hermes_cli/subcommands/_shared.py +29 -0
  659. package/agent/hermes_cli/subcommands/acp.py +52 -0
  660. package/agent/hermes_cli/subcommands/auth.py +109 -0
  661. package/agent/hermes_cli/subcommands/backup.py +38 -0
  662. package/agent/hermes_cli/subcommands/claw.py +92 -0
  663. package/agent/hermes_cli/subcommands/config.py +49 -0
  664. package/agent/hermes_cli/subcommands/cron.py +163 -0
  665. package/agent/hermes_cli/subcommands/dashboard.py +143 -0
  666. package/agent/hermes_cli/subcommands/debug.py +77 -0
  667. package/agent/hermes_cli/subcommands/doctor.py +35 -0
  668. package/agent/hermes_cli/subcommands/dump.py +28 -0
  669. package/agent/hermes_cli/subcommands/gateway.py +332 -0
  670. package/agent/hermes_cli/subcommands/gui.py +63 -0
  671. package/agent/hermes_cli/subcommands/hooks.py +77 -0
  672. package/agent/hermes_cli/subcommands/import_cmd.py +31 -0
  673. package/agent/hermes_cli/subcommands/insights.py +25 -0
  674. package/agent/hermes_cli/subcommands/login.py +78 -0
  675. package/agent/hermes_cli/subcommands/logout.py +28 -0
  676. package/agent/hermes_cli/subcommands/logs.py +78 -0
  677. package/agent/hermes_cli/subcommands/mcp.py +108 -0
  678. package/agent/hermes_cli/subcommands/memory.py +53 -0
  679. package/agent/hermes_cli/subcommands/model.py +72 -0
  680. package/agent/hermes_cli/subcommands/pairing.py +36 -0
  681. package/agent/hermes_cli/subcommands/plugins.py +94 -0
  682. package/agent/hermes_cli/subcommands/postinstall.py +23 -0
  683. package/agent/hermes_cli/subcommands/profile.py +203 -0
  684. package/agent/hermes_cli/subcommands/prompt_size.py +36 -0
  685. package/agent/hermes_cli/subcommands/security.py +62 -0
  686. package/agent/hermes_cli/subcommands/setup.py +58 -0
  687. package/agent/hermes_cli/subcommands/skills.py +298 -0
  688. package/agent/hermes_cli/subcommands/slack.py +60 -0
  689. package/agent/hermes_cli/subcommands/status.py +28 -0
  690. package/agent/hermes_cli/subcommands/tools.py +95 -0
  691. package/agent/hermes_cli/subcommands/uninstall.py +41 -0
  692. package/agent/hermes_cli/subcommands/update.py +70 -0
  693. package/agent/hermes_cli/subcommands/version.py +18 -0
  694. package/agent/hermes_cli/subcommands/webhook.py +76 -0
  695. package/agent/hermes_cli/subcommands/whatsapp.py +22 -0
  696. package/agent/hermes_cli/suggestions_cmd.py +153 -0
  697. package/agent/hermes_cli/telegram_managed_bot.py +358 -0
  698. package/agent/hermes_cli/tips.py +3 -4
  699. package/agent/hermes_cli/tools_config.py +155 -28
  700. package/agent/hermes_cli/uninstall.py +231 -35
  701. package/agent/hermes_cli/web_server.py +6188 -975
  702. package/agent/hermes_cli/win_pty_bridge.py +179 -0
  703. package/agent/hermes_cli/write_approval_commands.py +209 -0
  704. package/agent/hermes_constants.py +164 -33
  705. package/agent/hermes_logging.py +74 -2
  706. package/agent/hermes_state.py +919 -106
  707. package/agent/hermes_time.py +20 -0
  708. package/agent/locales/af.yaml +23 -0
  709. package/agent/locales/de.yaml +23 -0
  710. package/agent/locales/en.yaml +20 -0
  711. package/agent/locales/es.yaml +23 -0
  712. package/agent/locales/fr.yaml +23 -0
  713. package/agent/locales/ga.yaml +23 -0
  714. package/agent/locales/hu.yaml +23 -0
  715. package/agent/locales/it.yaml +23 -0
  716. package/agent/locales/ja.yaml +23 -0
  717. package/agent/locales/ko.yaml +23 -0
  718. package/agent/locales/pt.yaml +23 -0
  719. package/agent/locales/ru.yaml +23 -0
  720. package/agent/locales/tr.yaml +23 -0
  721. package/agent/locales/uk.yaml +23 -0
  722. package/agent/locales/zh-hant.yaml +23 -0
  723. package/agent/locales/zh.yaml +23 -0
  724. package/agent/model_tools.py +204 -40
  725. package/agent/optional-mcps/clawpump/manifest.yaml +15 -5
  726. package/agent/optional-mcps/clawpump-stdio/manifest.yaml +14 -4
  727. package/agent/optional-mcps/unreal-engine/manifest.yaml +54 -0
  728. package/agent/optional-skills/blockchain/hyperliquid/SKILL.md +2 -2
  729. package/agent/optional-skills/blockchain/hyperliquid/scripts/hyperliquid_client.py +1 -1
  730. package/agent/optional-skills/creative/kanban-video-orchestrator/SKILL.md +1 -1
  731. package/agent/optional-skills/creative/kanban-video-orchestrator/assets/setup.sh.tmpl +4 -3
  732. package/agent/optional-skills/creative/kanban-video-orchestrator/references/kanban-setup.md +6 -4
  733. package/agent/optional-skills/creative/kanban-video-orchestrator/references/tool-matrix.md +2 -2
  734. package/agent/{skills/software-development → optional-skills/devops}/hermes-s6-container-supervision/SKILL.md +2 -0
  735. package/agent/optional-skills/devops/watchers/SKILL.md +1 -1
  736. package/agent/optional-skills/devops/watchers/scripts/watch_github.py +2 -1
  737. package/agent/optional-skills/payments/mpp-agent/SKILL.md +124 -0
  738. package/agent/optional-skills/payments/stripe-link-cli/SKILL.md +184 -0
  739. package/agent/optional-skills/payments/stripe-projects/SKILL.md +120 -0
  740. package/agent/optional-skills/productivity/canvas/SKILL.md +1 -1
  741. package/agent/optional-skills/productivity/canvas/scripts/canvas_api.py +4 -1
  742. package/agent/optional-skills/productivity/shop/SKILL.md +224 -0
  743. package/agent/optional-skills/productivity/shop/references/catalog-mcp.md +236 -0
  744. package/agent/optional-skills/productivity/shop/references/direct-api.md +278 -0
  745. package/agent/optional-skills/productivity/shop/references/legal.md +3 -0
  746. package/agent/optional-skills/productivity/shop/references/safety.md +36 -0
  747. package/agent/optional-skills/productivity/shopify/SKILL.md +1 -1
  748. package/agent/optional-skills/productivity/siyuan/SKILL.md +1 -1
  749. package/agent/optional-skills/productivity/telephony/SKILL.md +4 -4
  750. package/agent/optional-skills/productivity/telephony/scripts/telephony.py +15 -15
  751. package/agent/optional-skills/security/1password/SKILL.md +1 -1
  752. package/agent/{skills/red-teaming → optional-skills/security}/godmode/SKILL.md +3 -4
  753. package/agent/{skills/red-teaming → optional-skills/security}/godmode/scripts/auto_jailbreak.py +3 -1
  754. package/agent/optional-skills/software-development/rest-graphql-debug/SKILL.md +1 -1
  755. package/agent/{skills → optional-skills}/software-development/subagent-driven-development/SKILL.md +5 -5
  756. package/agent/package-lock.json +4082 -7907
  757. package/agent/package.json +18 -3
  758. package/agent/plugins/browser/firecrawl/provider.py +4 -1
  759. package/agent/plugins/cron/__init__.py +344 -0
  760. package/agent/plugins/cron/chronos/__init__.py +241 -0
  761. package/agent/plugins/cron/chronos/_nas_client.py +123 -0
  762. package/agent/plugins/cron/chronos/plugin.yaml +9 -0
  763. package/agent/plugins/cron/chronos/verify.py +103 -0
  764. package/agent/plugins/dashboard_auth/basic/__init__.py +491 -0
  765. package/agent/plugins/dashboard_auth/basic/plugin.yaml +7 -0
  766. package/agent/plugins/dashboard_auth/nous/__init__.py +12 -14
  767. package/agent/plugins/dashboard_auth/self_hosted/__init__.py +736 -0
  768. package/agent/plugins/dashboard_auth/self_hosted/plugin.yaml +8 -0
  769. package/agent/plugins/disk-cleanup/disk_cleanup.py +100 -20
  770. package/agent/plugins/google_meet/audio_bridge.py +4 -0
  771. package/agent/plugins/google_meet/meet_bot.py +7 -1
  772. package/agent/plugins/hermes-achievements/dashboard/dist/index.js +9 -15
  773. package/agent/plugins/image_gen/fal/__init__.py +35 -6
  774. package/agent/plugins/image_gen/krea/__init__.py +56 -13
  775. package/agent/plugins/image_gen/openai/__init__.py +122 -24
  776. package/agent/plugins/image_gen/openai-codex/__init__.py +28 -2
  777. package/agent/plugins/image_gen/xai/__init__.py +92 -12
  778. package/agent/plugins/kanban/dashboard/dist/index.js +63 -48
  779. package/agent/plugins/kanban/dashboard/plugin_api.py +39 -35
  780. package/agent/plugins/memory/__init__.py +48 -5
  781. package/agent/plugins/memory/byterover/__init__.py +1 -0
  782. package/agent/plugins/memory/hindsight/README.md +1 -1
  783. package/agent/plugins/memory/hindsight/__init__.py +138 -24
  784. package/agent/plugins/memory/hindsight/plugin.yaml +1 -1
  785. package/agent/plugins/memory/honcho/README.md +13 -10
  786. package/agent/plugins/memory/honcho/cli.py +247 -122
  787. package/agent/plugins/memory/honcho/client.py +112 -102
  788. package/agent/plugins/memory/openviking/README.md +12 -1
  789. package/agent/plugins/memory/openviking/__init__.py +2281 -107
  790. package/agent/plugins/memory/openviking/plugin.yaml +1 -2
  791. package/agent/plugins/memory/supermemory/README.md +22 -10
  792. package/agent/plugins/memory/supermemory/__init__.py +142 -37
  793. package/agent/plugins/memory/supermemory/plugin.yaml +1 -1
  794. package/agent/plugins/model-providers/anthropic/__init__.py +1 -0
  795. package/agent/plugins/model-providers/bedrock/__init__.py +1 -0
  796. package/agent/plugins/model-providers/copilot-acp/__init__.py +1 -0
  797. package/agent/plugins/model-providers/custom/__init__.py +8 -2
  798. package/agent/plugins/model-providers/kimi-coding/__init__.py +16 -7
  799. package/agent/plugins/model-providers/minimax/__init__.py +60 -8
  800. package/agent/plugins/model-providers/opencode-zen/__init__.py +12 -3
  801. package/agent/plugins/model-providers/openrouter/__init__.py +75 -4
  802. package/agent/plugins/model-providers/xiaomi/__init__.py +2 -0
  803. package/agent/plugins/model-providers/zai/__init__.py +1 -0
  804. package/agent/plugins/observability/langfuse/__init__.py +147 -14
  805. package/agent/plugins/observability/nemo_relay/README.md +559 -0
  806. package/agent/plugins/observability/nemo_relay/__init__.py +962 -0
  807. package/agent/plugins/observability/nemo_relay/plugin.yaml +20 -0
  808. package/agent/plugins/platforms/discord/adapter.py +932 -61
  809. package/agent/plugins/platforms/discord/voice_mixer.py +379 -0
  810. package/agent/plugins/platforms/google_chat/adapter.py +9 -3
  811. package/agent/plugins/platforms/google_chat/oauth.py +1 -1
  812. package/agent/plugins/platforms/homeassistant/__init__.py +3 -0
  813. package/agent/{gateway/platforms/homeassistant.py → plugins/platforms/homeassistant/adapter.py} +128 -0
  814. package/agent/plugins/platforms/homeassistant/plugin.yaml +22 -0
  815. package/agent/plugins/platforms/irc/adapter.py +4 -1
  816. package/agent/plugins/platforms/line/adapter.py +16 -1
  817. package/agent/plugins/platforms/mattermost/adapter.py +100 -24
  818. package/agent/plugins/platforms/photon/README.md +179 -0
  819. package/agent/plugins/platforms/photon/__init__.py +4 -0
  820. package/agent/plugins/platforms/photon/adapter.py +1586 -0
  821. package/agent/plugins/platforms/photon/auth.py +1046 -0
  822. package/agent/plugins/platforms/photon/cli.py +439 -0
  823. package/agent/plugins/platforms/photon/plugin.yaml +88 -0
  824. package/agent/plugins/platforms/photon/sidecar/README.md +52 -0
  825. package/agent/plugins/platforms/photon/sidecar/index.mjs +720 -0
  826. package/agent/plugins/platforms/photon/sidecar/package-lock.json +1730 -0
  827. package/agent/plugins/platforms/photon/sidecar/package.json +25 -0
  828. package/agent/plugins/platforms/photon/sidecar/patch-spectrum-mixed-attachments.mjs +155 -0
  829. package/agent/plugins/platforms/raft/__init__.py +3 -0
  830. package/agent/plugins/platforms/raft/adapter.py +774 -0
  831. package/agent/plugins/platforms/raft/plugin.yaml +19 -0
  832. package/agent/plugins/platforms/simplex/adapter.py +777 -220
  833. package/agent/plugins/platforms/simplex/plugin.yaml +21 -2
  834. package/agent/plugins/platforms/teams/adapter.py +175 -5
  835. package/agent/plugins/plugin_utils.py +135 -0
  836. package/agent/plugins/video_gen/fal/__init__.py +10 -3
  837. package/agent/plugins/web/searxng/provider.py +15 -2
  838. package/agent/plugins/web/xai/provider.py +2 -2
  839. package/agent/providers/base.py +22 -3
  840. package/agent/pyproject.toml +115 -21
  841. package/agent/run_agent.py +733 -39
  842. package/agent/scripts/build_skills_index.py +51 -19
  843. package/agent/scripts/check_subprocess_stdin.py +177 -0
  844. package/agent/scripts/contributor_audit.py +2 -0
  845. package/agent/scripts/docker_config_migrate.py +67 -0
  846. package/agent/scripts/install.cmd +3 -3
  847. package/agent/scripts/install.ps1 +580 -154
  848. package/agent/scripts/install.sh +402 -185
  849. package/agent/scripts/lib/node-bootstrap.sh +39 -4
  850. package/agent/scripts/release.py +183 -0
  851. package/agent/scripts/run_tests.sh +1 -0
  852. package/agent/scripts/run_tests_parallel.py +18 -23
  853. package/agent/scripts/whatsapp-bridge/bridge.js +25 -4
  854. package/agent/setup.py +59 -0
  855. package/agent/skills/autonomous-ai-agents/codex/SKILL.md +19 -0
  856. package/agent/skills/autonomous-ai-agents/hermes-agent/SKILL.md +10 -3
  857. package/agent/skills/{mcp/native-mcp/SKILL.md → autonomous-ai-agents/hermes-agent/references/native-mcp.md} +0 -13
  858. package/agent/skills/{devops/webhook-subscriptions/SKILL.md → autonomous-ai-agents/hermes-agent/references/webhooks.md} +1 -11
  859. package/agent/skills/clawpump/SKILL.md +53 -5
  860. package/agent/skills/devops/kanban-orchestrator/SKILL.md +1 -0
  861. package/agent/skills/devops/kanban-worker/SKILL.md +1 -0
  862. package/agent/skills/github/github-auth/SKILL.md +2 -2
  863. package/agent/skills/github/github-auth/scripts/gh-env.sh +2 -2
  864. package/agent/skills/github/github-code-review/SKILL.md +2 -2
  865. package/agent/skills/github/github-issues/SKILL.md +2 -2
  866. package/agent/skills/github/github-pr-workflow/SKILL.md +2 -2
  867. package/agent/skills/github/github-repo-management/SKILL.md +2 -2
  868. package/agent/skills/media/gif-search/SKILL.md +1 -1
  869. package/agent/skills/media/youtube-content/SKILL.md +10 -7
  870. package/agent/skills/media/youtube-content/scripts/fetch_transcript.py +3 -3
  871. package/agent/skills/note-taking/obsidian/SKILL.md +1 -1
  872. package/agent/skills/productivity/airtable/SKILL.md +2 -2
  873. package/agent/skills/productivity/google-workspace/scripts/setup.py +33 -7
  874. package/agent/skills/productivity/notion/SKILL.md +2 -2
  875. package/agent/skills/productivity/teams-meeting-pipeline/SKILL.md +1 -1
  876. package/agent/skills/research/llm-wiki/SKILL.md +1 -1
  877. package/agent/skills/social-media/xurl/SKILL.md +9 -0
  878. package/agent/skills/software-development/hermes-agent-skill-authoring/SKILL.md +1 -1
  879. package/agent/skills/software-development/plan/SKILL.md +285 -5
  880. package/agent/skills/software-development/requesting-code-review/SKILL.md +2 -2
  881. package/agent/skills/software-development/simplify-code/SKILL.md +212 -0
  882. package/agent/skills/software-development/spike/SKILL.md +2 -2
  883. package/agent/skills/software-development/systematic-debugging/SKILL.md +1 -1
  884. package/agent/skills/software-development/test-driven-development/SKILL.md +1 -1
  885. package/agent/tools/approval.py +302 -4
  886. package/agent/tools/async_delegation.py +386 -0
  887. package/agent/tools/blueprints.py +325 -0
  888. package/agent/tools/browser_cdp_tool.py +3 -3
  889. package/agent/tools/browser_tool.py +34 -6
  890. package/agent/tools/checkpoint_manager.py +31 -1
  891. package/agent/tools/clarify_tool.py +55 -5
  892. package/agent/tools/code_execution_tool.py +31 -14
  893. package/agent/tools/computer_use/cua_backend.py +81 -3
  894. package/agent/tools/computer_use/tool.py +79 -5
  895. package/agent/tools/computer_use/vision_routing.py +55 -3
  896. package/agent/tools/credential_files.py +31 -12
  897. package/agent/tools/cronjob_tools.py +30 -20
  898. package/agent/tools/delegate_tool.py +356 -31
  899. package/agent/tools/env_probe.py +1 -0
  900. package/agent/tools/environments/docker.py +163 -8
  901. package/agent/tools/environments/file_sync.py +2 -1
  902. package/agent/tools/environments/local.py +74 -23
  903. package/agent/tools/environments/singularity.py +4 -1
  904. package/agent/tools/environments/ssh.py +78 -11
  905. package/agent/tools/file_operations.py +277 -41
  906. package/agent/tools/file_tools.py +166 -28
  907. package/agent/tools/image_generation_tool.py +515 -29
  908. package/agent/tools/kanban_tools.py +99 -0
  909. package/agent/tools/lazy_deps.py +33 -2
  910. package/agent/tools/mcp_oauth.py +5 -5
  911. package/agent/tools/mcp_oauth_manager.py +7 -5
  912. package/agent/tools/mcp_tool.py +840 -33
  913. package/agent/tools/memory_tool.py +335 -38
  914. package/agent/tools/osv_check.py +15 -1
  915. package/agent/tools/process_registry.py +155 -11
  916. package/agent/tools/read_extract.py +248 -0
  917. package/agent/tools/read_terminal_tool.py +93 -0
  918. package/agent/tools/schema_sanitizer.py +38 -0
  919. package/agent/tools/send_message_tool.py +163 -49
  920. package/agent/tools/session_search_tool.py +189 -7
  921. package/agent/tools/skill_manager_tool.py +202 -3
  922. package/agent/tools/skill_usage.py +52 -4
  923. package/agent/tools/skills_hub.py +184 -44
  924. package/agent/tools/skills_sync.py +232 -5
  925. package/agent/tools/skills_tool.py +125 -11
  926. package/agent/tools/terminal_tool.py +148 -26
  927. package/agent/tools/tirith_security.py +2 -0
  928. package/agent/tools/todo_tool.py +32 -1
  929. package/agent/tools/transcription_tools.py +13 -5
  930. package/agent/tools/tts_tool.py +332 -38
  931. package/agent/tools/url_safety.py +52 -1
  932. package/agent/tools/vision_tools.py +124 -39
  933. package/agent/tools/voice_mode.py +4 -3
  934. package/agent/tools/web_tools.py +45 -15
  935. package/agent/tools/write_approval.py +493 -0
  936. package/agent/toolsets.py +34 -10
  937. package/agent/trajectory_compressor.py +81 -10
  938. package/agent/tui_gateway/entry.py +43 -6
  939. package/agent/tui_gateway/server.py +3335 -330
  940. package/agent/tui_gateway/slash_worker.py +61 -0
  941. package/agent/tui_gateway/ws.py +67 -9
  942. package/agent/ui-tui/eslint.config.mjs +0 -4
  943. package/agent/ui-tui/package.json +6 -6
  944. package/agent/ui-tui/packages/hermes-ink/package.json +1 -1
  945. package/agent/ui-tui/packages/hermes-ink/src/ink/app-mouse.test.ts +34 -1
  946. package/agent/ui-tui/packages/hermes-ink/src/ink/app-rawmode-mouse.test.ts +91 -0
  947. package/agent/ui-tui/packages/hermes-ink/src/ink/components/App.tsx +35 -2
  948. package/agent/ui-tui/packages/hermes-ink/src/ink/events/input-event.ts +4 -11
  949. package/agent/ui-tui/packages/hermes-ink/src/ink/parse-keypress.test.ts +23 -57
  950. package/agent/ui-tui/packages/hermes-ink/src/ink/parse-keypress.ts +11 -135
  951. package/agent/ui-tui/packages/hermes-ink/src/ink/termio/tokenize.test.ts +185 -0
  952. package/agent/ui-tui/packages/hermes-ink/src/ink/termio/tokenize.ts +37 -3
  953. package/agent/ui-tui/packages/hermes-ink/src/utils/execFileNoThrow.ts +5 -5
  954. package/agent/ui-tui/src/__tests__/appChromeStatusRule.test.tsx +217 -0
  955. package/agent/ui-tui/src/__tests__/appChromeStatusRuleDevCredits.test.tsx +73 -0
  956. package/agent/ui-tui/src/__tests__/approvalAction.test.ts +11 -0
  957. package/agent/ui-tui/src/__tests__/billingCommand.test.ts +301 -0
  958. package/agent/ui-tui/src/__tests__/blockLayout.test.ts +122 -0
  959. package/agent/ui-tui/src/__tests__/brandingMcpCount.test.ts +111 -0
  960. package/agent/ui-tui/src/__tests__/completionApply.test.ts +51 -0
  961. package/agent/ui-tui/src/__tests__/createGatewayEventHandler.test.ts +487 -2
  962. package/agent/ui-tui/src/__tests__/createSlashHandler.test.ts +54 -0
  963. package/agent/ui-tui/src/__tests__/creditsCommand.test.ts +144 -0
  964. package/agent/ui-tui/src/__tests__/gatewayClient.test.ts +120 -99
  965. package/agent/ui-tui/src/__tests__/gracefulExit.test.ts +11 -0
  966. package/agent/ui-tui/src/__tests__/memoryMonitor.test.ts +102 -0
  967. package/agent/ui-tui/src/__tests__/paths.test.ts +41 -1
  968. package/agent/ui-tui/src/__tests__/terminalModes.test.ts +22 -0
  969. package/agent/ui-tui/src/__tests__/text.test.ts +23 -0
  970. package/agent/ui-tui/src/__tests__/textInputFastEcho.test.ts +37 -0
  971. package/agent/ui-tui/src/__tests__/turnControllerNotice.test.ts +43 -0
  972. package/agent/ui-tui/src/__tests__/useInputHandlers.test.ts +38 -1
  973. package/agent/ui-tui/src/__tests__/virtualHeights.test.ts +8 -0
  974. package/agent/ui-tui/src/app/createGatewayEventHandler.ts +102 -7
  975. package/agent/ui-tui/src/app/interfaces.ts +64 -1
  976. package/agent/ui-tui/src/app/overlayStore.ts +18 -2
  977. package/agent/ui-tui/src/app/slash/commands/billing.ts +332 -0
  978. package/agent/ui-tui/src/app/slash/commands/core.ts +31 -2
  979. package/agent/ui-tui/src/app/slash/commands/credits.ts +57 -0
  980. package/agent/ui-tui/src/app/slash/commands/ops.ts +28 -0
  981. package/agent/ui-tui/src/app/slash/commands/session.ts +32 -4
  982. package/agent/ui-tui/src/app/slash/registry.ts +4 -0
  983. package/agent/ui-tui/src/app/turnController.ts +145 -2
  984. package/agent/ui-tui/src/app/uiStore.ts +2 -0
  985. package/agent/ui-tui/src/app/useInputHandlers.ts +42 -4
  986. package/agent/ui-tui/src/app/useMainApp.ts +54 -8
  987. package/agent/ui-tui/src/app/useSessionLifecycle.ts +40 -31
  988. package/agent/ui-tui/src/app/useSubmission.ts +23 -31
  989. package/agent/ui-tui/src/components/appChrome.tsx +112 -5
  990. package/agent/ui-tui/src/components/appLayout.tsx +9 -0
  991. package/agent/ui-tui/src/components/appOverlays.tsx +25 -1
  992. package/agent/ui-tui/src/components/billingOverlay.tsx +684 -0
  993. package/agent/ui-tui/src/components/branding.tsx +15 -3
  994. package/agent/ui-tui/src/components/messageLine.tsx +25 -3
  995. package/agent/ui-tui/src/components/pluginsHub.tsx +238 -0
  996. package/agent/ui-tui/src/components/prompts.tsx +31 -17
  997. package/agent/ui-tui/src/components/streamingAssistant.tsx +63 -55
  998. package/agent/ui-tui/src/components/textInput.tsx +16 -0
  999. package/agent/ui-tui/src/config/env.ts +12 -0
  1000. package/agent/ui-tui/src/config/limits.ts +13 -0
  1001. package/agent/ui-tui/src/domain/blockLayout.ts +146 -0
  1002. package/agent/ui-tui/src/domain/paths.ts +24 -0
  1003. package/agent/ui-tui/src/domain/slash.ts +40 -0
  1004. package/agent/ui-tui/src/entry.tsx +35 -4
  1005. package/agent/ui-tui/src/gatewayClient.ts +22 -10
  1006. package/agent/ui-tui/src/gatewayTypes.ts +130 -1
  1007. package/agent/ui-tui/src/lib/gracefulExit.ts +24 -4
  1008. package/agent/ui-tui/src/lib/memory.test.ts +162 -0
  1009. package/agent/ui-tui/src/lib/memory.ts +60 -1
  1010. package/agent/ui-tui/src/lib/memoryMonitor.ts +79 -4
  1011. package/agent/ui-tui/src/lib/osc52.ts +1 -1
  1012. package/agent/ui-tui/src/lib/text.test.ts +32 -1
  1013. package/agent/ui-tui/src/lib/text.ts +29 -2
  1014. package/agent/ui-tui/src/lib/virtualHeights.ts +13 -0
  1015. package/agent/ui-tui/src/types.ts +5 -0
  1016. package/agent/ui-tui/tsconfig.build.json +0 -1
  1017. package/agent/ui-tui/tsconfig.json +2 -1
  1018. package/agent/utils.py +66 -2
  1019. package/agent/uv.lock +308 -696
  1020. package/agent/web/index.html +2 -2
  1021. package/agent/web/package.json +11 -6
  1022. package/agent/web/public/claw-bg.webp +0 -0
  1023. package/agent/web/public/claw-logo.webp +0 -0
  1024. package/agent/web/src/App.tsx +138 -48
  1025. package/agent/web/src/components/AutomationBlueprints.tsx +225 -0
  1026. package/agent/web/src/components/Backdrop.tsx +15 -0
  1027. package/agent/web/src/components/ChatSessionList.tsx +260 -0
  1028. package/agent/web/src/components/ChatSidebar.tsx +262 -78
  1029. package/agent/web/src/components/ConfirmDialog.tsx +122 -0
  1030. package/agent/web/src/components/ModelPickerDialog.tsx +111 -16
  1031. package/agent/web/src/components/ModelReloadConfirm.tsx +40 -0
  1032. package/agent/web/src/components/ProfileScopeBanner.tsx +30 -0
  1033. package/agent/web/src/components/ProfileSwitcher.tsx +67 -0
  1034. package/agent/web/src/components/ReasoningPicker.tsx +167 -0
  1035. package/agent/web/src/components/SkillEditorDialog.tsx +215 -0
  1036. package/agent/web/src/components/ThemeSwitcher.tsx +119 -4
  1037. package/agent/web/src/components/ToolsetConfigDrawer.tsx +457 -0
  1038. package/agent/web/src/contexts/PageHeaderProvider.tsx +7 -4
  1039. package/agent/web/src/contexts/ProfileProvider.tsx +137 -0
  1040. package/agent/web/src/contexts/SystemActions.tsx +6 -8
  1041. package/agent/web/src/contexts/profile-context.ts +19 -0
  1042. package/agent/web/src/contexts/useProfileScope.ts +6 -0
  1043. package/agent/web/src/i18n/af.ts +5 -4
  1044. package/agent/web/src/i18n/de.ts +5 -4
  1045. package/agent/web/src/i18n/en.ts +58 -4
  1046. package/agent/web/src/i18n/es.ts +5 -3
  1047. package/agent/web/src/i18n/fr.ts +5 -3
  1048. package/agent/web/src/i18n/ga.ts +5 -4
  1049. package/agent/web/src/i18n/hu.ts +5 -4
  1050. package/agent/web/src/i18n/it.ts +5 -4
  1051. package/agent/web/src/i18n/ja.ts +5 -4
  1052. package/agent/web/src/i18n/ko.ts +5 -4
  1053. package/agent/web/src/i18n/pt.ts +5 -3
  1054. package/agent/web/src/i18n/ru.ts +5 -4
  1055. package/agent/web/src/i18n/tr.ts +5 -4
  1056. package/agent/web/src/i18n/types.ts +59 -1
  1057. package/agent/web/src/i18n/uk.ts +5 -3
  1058. package/agent/web/src/i18n/zh-hant.ts +5 -4
  1059. package/agent/web/src/i18n/zh.ts +5 -4
  1060. package/agent/web/src/index.css +2 -2
  1061. package/agent/web/src/lib/api.ts +819 -52
  1062. package/agent/web/src/lib/dashboard-flags.ts +16 -7
  1063. package/agent/web/src/lib/reasoning-effort.test.ts +48 -0
  1064. package/agent/web/src/lib/reasoning-effort.ts +36 -0
  1065. package/agent/web/src/lib/session-refresh.test.ts +21 -0
  1066. package/agent/web/src/lib/session-refresh.ts +26 -0
  1067. package/agent/web/src/pages/ChannelsPage.tsx +529 -68
  1068. package/agent/web/src/pages/ChatPage.tsx +249 -56
  1069. package/agent/web/src/pages/ConfigPage.tsx +11 -1
  1070. package/agent/web/src/pages/CronPage.tsx +219 -31
  1071. package/agent/web/src/pages/EnvPage.tsx +25 -6
  1072. package/agent/web/src/pages/FilesPage.tsx +525 -0
  1073. package/agent/web/src/pages/McpPage.tsx +80 -3
  1074. package/agent/web/src/pages/ModelsPage.tsx +97 -12
  1075. package/agent/web/src/pages/PluginsPage.tsx +1 -1
  1076. package/agent/web/src/pages/ProfileBuilderPage.tsx +611 -0
  1077. package/agent/web/src/pages/ProfilesPage.tsx +1038 -172
  1078. package/agent/web/src/pages/SessionsPage.tsx +144 -13
  1079. package/agent/web/src/pages/SkillsPage.tsx +851 -70
  1080. package/agent/web/src/pages/SystemPage.tsx +340 -4
  1081. package/agent/web/src/pages/WalletPage.tsx +401 -0
  1082. package/agent/web/src/pages/WebhooksPage.tsx +145 -15
  1083. package/agent/web/src/pages/X402Page.tsx +207 -0
  1084. package/agent/web/src/plugins/registry.ts +28 -11
  1085. package/agent/web/src/plugins/sdk.d.ts +160 -0
  1086. package/agent/web/src/themes/context.tsx +112 -5
  1087. package/agent/web/src/themes/fonts.ts +167 -0
  1088. package/agent/web/src/themes/index.ts +7 -0
  1089. package/agent/web/tsconfig.app.json +0 -1
  1090. package/agent/web/vite.config.ts +1 -8
  1091. package/agent/web/vitest.config.ts +16 -0
  1092. package/package.json +1 -1
  1093. package/agent/apps/desktop/package-lock.json +0 -18363
  1094. package/agent/apps/desktop/src/app/chat/composer/skin-slash-popover.tsx +0 -56
  1095. package/agent/apps/desktop/src/components/assistant-ui/thread-virtualizer.tsx +0 -382
  1096. package/agent/apps/desktop/src/components/assistant-ui/todo-tool.tsx +0 -109
  1097. package/agent/apps/desktop/src/components/chat/generated-image-context.tsx +0 -19
  1098. package/agent/optional-skills/productivity/shop-app/SKILL.md +0 -340
  1099. package/agent/skills/autonomous-ai-agents/kanban-codex-lane/SKILL.md +0 -277
  1100. package/agent/skills/autonomous-ai-agents/kanban-codex-lane/templates/pmb-codex-lane-prompt.md +0 -57
  1101. package/agent/skills/diagramming/DESCRIPTION.md +0 -3
  1102. package/agent/skills/domain/DESCRIPTION.md +0 -24
  1103. package/agent/skills/gifs/DESCRIPTION.md +0 -3
  1104. package/agent/skills/inference-sh/DESCRIPTION.md +0 -19
  1105. package/agent/skills/mcp/DESCRIPTION.md +0 -3
  1106. package/agent/skills/media/spotify/SKILL.md +0 -135
  1107. package/agent/skills/mlops/training/DESCRIPTION.md +0 -3
  1108. package/agent/skills/mlops/vector-databases/DESCRIPTION.md +0 -3
  1109. package/agent/skills/productivity/linear/SKILL.md +0 -380
  1110. package/agent/skills/productivity/linear/scripts/linear_api.py +0 -445
  1111. package/agent/skills/software-development/debugging-hermes-tui-commands/SKILL.md +0 -152
  1112. package/agent/skills/software-development/writing-plans/SKILL.md +0 -297
  1113. package/agent/ui-tui/package-lock.json +0 -7449
  1114. package/agent/ui-tui/packages/hermes-ink/package-lock.json +0 -1289
  1115. package/agent/web/package-lock.json +0 -8887
  1116. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/PORT_NOTES.md +0 -0
  1117. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/SKILL.md +0 -0
  1118. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/prompts/system.md +0 -0
  1119. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/palettes/macaron.md +0 -0
  1120. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/palettes/mono-ink.md +0 -0
  1121. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/palettes/neon.md +0 -0
  1122. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/palettes/warm.md +0 -0
  1123. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/prompt-construction.md +0 -0
  1124. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/style-presets.md +0 -0
  1125. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/blueprint.md +0 -0
  1126. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/chalkboard.md +0 -0
  1127. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/editorial.md +0 -0
  1128. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/elegant.md +0 -0
  1129. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/fantasy-animation.md +0 -0
  1130. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/flat-doodle.md +0 -0
  1131. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/flat.md +0 -0
  1132. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/ink-notes.md +0 -0
  1133. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/intuition-machine.md +0 -0
  1134. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/minimal.md +0 -0
  1135. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/nature.md +0 -0
  1136. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/notion.md +0 -0
  1137. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/pixel-art.md +0 -0
  1138. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/playful.md +0 -0
  1139. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/retro.md +0 -0
  1140. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/scientific.md +0 -0
  1141. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/screen-print.md +0 -0
  1142. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/sketch-notes.md +0 -0
  1143. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/sketch.md +0 -0
  1144. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/vector-illustration.md +0 -0
  1145. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/vintage.md +0 -0
  1146. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/warm.md +0 -0
  1147. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles/watercolor.md +0 -0
  1148. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/styles.md +0 -0
  1149. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/usage.md +0 -0
  1150. /package/agent/{skills → optional-skills}/creative/baoyu-article-illustrator/references/workflow.md +0 -0
  1151. /package/agent/{skills → optional-skills}/creative/baoyu-comic/PORT_NOTES.md +0 -0
  1152. /package/agent/{skills → optional-skills}/creative/baoyu-comic/SKILL.md +0 -0
  1153. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/analysis-framework.md +0 -0
  1154. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/chalk.md +0 -0
  1155. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/ink-brush.md +0 -0
  1156. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/ligne-claire.md +0 -0
  1157. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/manga.md +0 -0
  1158. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/minimalist.md +0 -0
  1159. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/art-styles/realistic.md +0 -0
  1160. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/auto-selection.md +0 -0
  1161. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/base-prompt.md +0 -0
  1162. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/character-template.md +0 -0
  1163. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/cinematic.md +0 -0
  1164. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/dense.md +0 -0
  1165. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/four-panel.md +0 -0
  1166. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/mixed.md +0 -0
  1167. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/splash.md +0 -0
  1168. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/standard.md +0 -0
  1169. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/layouts/webtoon.md +0 -0
  1170. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/ohmsha-guide.md +0 -0
  1171. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/partial-workflows.md +0 -0
  1172. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/presets/concept-story.md +0 -0
  1173. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/presets/four-panel.md +0 -0
  1174. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/presets/ohmsha.md +0 -0
  1175. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/presets/shoujo.md +0 -0
  1176. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/presets/wuxia.md +0 -0
  1177. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/storyboard-template.md +0 -0
  1178. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/action.md +0 -0
  1179. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/dramatic.md +0 -0
  1180. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/energetic.md +0 -0
  1181. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/neutral.md +0 -0
  1182. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/romantic.md +0 -0
  1183. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/vintage.md +0 -0
  1184. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/tones/warm.md +0 -0
  1185. /package/agent/{skills → optional-skills}/creative/baoyu-comic/references/workflow.md +0 -0
  1186. /package/agent/{skills → optional-skills}/creative/creative-ideation/SKILL.md +0 -0
  1187. /package/agent/{skills → optional-skills}/creative/creative-ideation/references/full-prompt-library.md +0 -0
  1188. /package/agent/{skills → optional-skills}/creative/pixel-art/ATTRIBUTION.md +0 -0
  1189. /package/agent/{skills → optional-skills}/creative/pixel-art/SKILL.md +0 -0
  1190. /package/agent/{skills → optional-skills}/creative/pixel-art/references/palettes.md +0 -0
  1191. /package/agent/{skills → optional-skills}/creative/pixel-art/scripts/__init__.py +0 -0
  1192. /package/agent/{skills → optional-skills}/creative/pixel-art/scripts/palettes.py +0 -0
  1193. /package/agent/{skills → optional-skills}/creative/pixel-art/scripts/pixel_art.py +0 -0
  1194. /package/agent/{skills → optional-skills}/creative/pixel-art/scripts/pixel_art_video.py +0 -0
  1195. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/SKILL.md +0 -0
  1196. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/references/analysis-modules.md +0 -0
  1197. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/references/methods-guide.md +0 -0
  1198. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/templates/abliteration-config.yaml +0 -0
  1199. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/templates/analysis-study.yaml +0 -0
  1200. /package/agent/{skills/mlops/inference → optional-skills/mlops}/obliteratus/templates/batch-abliteration.yaml +0 -0
  1201. /package/agent/{skills → optional-skills}/mlops/research/DESCRIPTION.md +0 -0
  1202. /package/agent/{skills → optional-skills}/mlops/research/dspy/SKILL.md +0 -0
  1203. /package/agent/{skills → optional-skills}/mlops/research/dspy/references/examples.md +0 -0
  1204. /package/agent/{skills → optional-skills}/mlops/research/dspy/references/modules.md +0 -0
  1205. /package/agent/{skills → optional-skills}/mlops/research/dspy/references/optimizers.md +0 -0
  1206. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/references/jailbreak-templates.md +0 -0
  1207. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/references/refusal-detection.md +0 -0
  1208. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/scripts/godmode_race.py +0 -0
  1209. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/scripts/load_godmode.py +0 -0
  1210. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/scripts/parseltongue.py +0 -0
  1211. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/templates/prefill-subtle.json +0 -0
  1212. /package/agent/{skills/red-teaming → optional-skills/security}/godmode/templates/prefill.json +0 -0
  1213. /package/agent/{skills → optional-skills}/software-development/subagent-driven-development/references/context-budget-discipline.md +0 -0
  1214. /package/agent/{skills → optional-skills}/software-development/subagent-driven-development/references/gates-taxonomy.md +0 -0
@@ -0,0 +1,1992 @@
1
+ import { defineFieldCopy } from '@/app/settings/field-copy'
2
+
3
+ import { defineLocale } from './define-locale'
4
+
5
+ export const zhHant = defineLocale({
6
+ common: {
7
+ apply: '套用',
8
+ back: '返回',
9
+ save: '儲存',
10
+ saving: '儲存中…',
11
+ cancel: '取消',
12
+ change: '變更',
13
+ choose: '選擇',
14
+ clear: '清除',
15
+ close: '關閉',
16
+ collapse: '收合',
17
+ confirm: '確認',
18
+ connect: '連線',
19
+ connecting: '連線中',
20
+ continue: '繼續',
21
+ copied: '已複製',
22
+ copy: '複製',
23
+ copyFailed: '複製失敗',
24
+ delete: '刪除',
25
+ docs: '文件',
26
+ done: '完成',
27
+ error: '錯誤',
28
+ failed: '失敗',
29
+ free: '免費',
30
+ loading: '載入中…',
31
+ notSet: '未設定',
32
+ refresh: '重新整理',
33
+ remove: '移除',
34
+ replace: '取代',
35
+ retry: '重試',
36
+ run: '執行',
37
+ send: '傳送',
38
+ set: '設定',
39
+ skip: '略過',
40
+ update: '更新',
41
+ on: '開啟',
42
+ off: '關閉'
43
+ },
44
+
45
+ boot: {
46
+ ready: 'Hermes Desktop 已就緒',
47
+ desktopBootFailedWithMessage: message => `桌面啟動失敗:${message}`,
48
+ steps: {
49
+ connectingGateway: '正在連線桌面閘道',
50
+ loadingSettings: '正在載入 Hermes 設定',
51
+ loadingSessions: '正在載入最近工作階段',
52
+ startingDesktopConnection: '正在啟動桌面連線',
53
+ startingHermesDesktop: '正在啟動 Hermes Desktop…'
54
+ },
55
+ errors: {
56
+ backgroundExited: 'Hermes 背景程序已結束。',
57
+ backgroundExitedDuringStartup: 'Hermes 背景程序在啟動期間結束。',
58
+ backendStopped: '後端已停止',
59
+ desktopBootFailed: '桌面啟動失敗',
60
+ gatewaySignInRequired: '需要閘道登入',
61
+ ipcBridgeUnavailable: '桌面 IPC 橋接器不可用。'
62
+ },
63
+ failure: {
64
+ title: 'Hermes 無法啟動',
65
+ description: '背景閘道未啟動。請嘗試下面的復原步驟。這裡的操作不會刪除您的聊天或設定。',
66
+ remoteTitle: '需要重新登入遠端閘道',
67
+ remoteDescription: '您的遠端閘道工作階段已過期。請重新登入以重新連線。這裡的操作不會刪除您的聊天或設定。',
68
+ retry: '重試',
69
+ repairInstall: '修復安裝',
70
+ useLocalGateway: '使用本機閘道',
71
+ openLogs: '開啟記錄',
72
+ repairHint: '修復會重新執行安裝程式,在新機器上可能需要幾分鐘。',
73
+ remoteSignInHint: '開啟閘道登入視窗。使用本機閘道可切換至內建後端。',
74
+ hideRecentLogs: '隱藏最近記錄',
75
+ showRecentLogs: '顯示最近記錄',
76
+ signedInTitle: '已登入',
77
+ signedInMessage: '正在重新連線至遠端閘道…',
78
+ signInIncompleteTitle: '登入未完成',
79
+ signInIncompleteMessage: '登入視窗在驗證完成前關閉。',
80
+ signInFailed: '登入失敗',
81
+ signInToRemoteGateway: '登入遠端閘道',
82
+ signInWithProvider: provider => `使用 ${provider} 登入`,
83
+ identityProvider: '您的身分提供方'
84
+ }
85
+ },
86
+
87
+ notifications: {
88
+ region: '通知',
89
+ hide: '隱藏',
90
+ show: '顯示',
91
+ more: count => `另外 ${count} 則通知`,
92
+ clearAll: '全部清除',
93
+ dismiss: '關閉通知',
94
+ details: '詳細資訊',
95
+ copyDetail: '複製詳情',
96
+ copyDetailFailed: '無法複製通知詳情',
97
+ backendOutOfDateTitle: '後端版本過舊',
98
+ backendOutOfDateMessage: '您的 Hermes 後端早於目前的桌面版本,可能無法正常運作。請更新以保持一致。',
99
+ updateHermes: '更新 Hermes',
100
+ updateReadyTitle: '有可用更新',
101
+ updateReadyMessage: count => `有 ${count} 項新變更可用。`,
102
+ seeWhatsNew: '查看新增內容',
103
+ errors: {
104
+ elevenLabsNeedsKey: 'ElevenLabs STT 需要 ELEVENLABS_API_KEY。',
105
+ elevenLabsRejectedKey: 'ElevenLabs 拒絕了該 API 金鑰 (401)。',
106
+ methodNotAllowed: '桌面後端拒絕了該請求 (405 Method Not Allowed)。請嘗試重新啟動 Hermes Desktop。',
107
+ microphonePermission: '麥克風權限已被拒絕。',
108
+ openaiRejectedApiKey: 'OpenAI 拒絕了該 API 金鑰。',
109
+ openaiRejectedApiKeyWithStatus: status => `OpenAI 拒絕了該 API 金鑰 (${status} invalid_api_key)。`,
110
+ openaiTtsNeedsKey: 'OpenAI TTS 需要 VOICE_TOOLS_OPENAI_KEY 或 OPENAI_API_KEY。'
111
+ },
112
+ voice: {
113
+ configureSpeechToText: '設定語音轉文字後即可使用語音模式。',
114
+ couldNotStartSession: '無法啟動語音工作階段',
115
+ microphoneAccessDenied: '麥克風存取被拒絕。',
116
+ microphoneConstraintsUnsupported: '此裝置不支援目前的麥克風限制條件。',
117
+ microphoneFailed: '麥克風發生錯誤',
118
+ microphoneInUse: '麥克風正被其他應用程式使用中。',
119
+ microphonePermissionDenied: '麥克風權限被拒絕。',
120
+ microphoneStartFailed: '無法開始麥克風錄音。',
121
+ microphoneUnsupported: '目前執行環境不支援麥克風錄音。',
122
+ noMicrophone: '找不到麥克風。',
123
+ noSpeechDetected: '未偵測到語音',
124
+ playbackFailed: '語音播放失敗',
125
+ recordingFailed: '語音錄製失敗',
126
+ transcriptionFailed: '語音轉寫失敗',
127
+ transcriptionUnavailable: '語音轉寫暫不可用。',
128
+ tryRecordingAgain: '請再錄製一次。',
129
+ unavailable: '語音不可用'
130
+ },
131
+ native: {
132
+ approvalTitle: '需要核准',
133
+ approveAction: '核准',
134
+ rejectAction: '拒絕',
135
+ inputTitle: '需要輸入',
136
+ inputBody: 'Hermes 正在等待你的回應。',
137
+ turnDoneTitle: 'Hermes 已完成',
138
+ turnDoneBody: '回覆已就緒。',
139
+ turnErrorTitle: '本輪失敗',
140
+ backgroundDoneTitle: '背景工作已完成',
141
+ backgroundFailedTitle: '背景工作失敗'
142
+ }
143
+ },
144
+
145
+ titlebar: {
146
+ hideSidebar: '隱藏側邊欄',
147
+ showSidebar: '顯示側邊欄',
148
+ search: '搜尋',
149
+ searchTitle: '搜尋工作階段、檢視和動作',
150
+ swapSidebarSides: '交換側邊欄位置',
151
+ swapSidebarSidesTitle: '交換工作階段欄和檔案瀏覽器的位置',
152
+ hideRightSidebar: '隱藏右側邊欄',
153
+ showRightSidebar: '顯示右側邊欄',
154
+ muteHaptics: '靜音觸感回饋',
155
+ unmuteHaptics: '開啟觸感回饋',
156
+ openSettings: '開啟設定'
157
+ },
158
+
159
+ language: {
160
+ label: '語言',
161
+ description: '選擇桌面介面的語言。',
162
+ saving: '正在儲存語言…',
163
+ saveError: '語言更新失敗',
164
+ switchTo: '切換語言',
165
+ searchPlaceholder: '搜尋語言…',
166
+ noResults: '找不到語言'
167
+ },
168
+
169
+ settings: {
170
+ closeSettings: '關閉設定',
171
+ exportConfig: '匯出設定',
172
+ importConfig: '匯入設定',
173
+ resetToDefaults: '恢復預設值',
174
+ resetConfirm: '要將所有設定恢復為 Hermes 預設值嗎?',
175
+ exportFailed: '匯出失敗',
176
+ resetFailed: '重設失敗',
177
+ nav: {
178
+ providers: '提供方',
179
+ providerAccounts: '帳號',
180
+ providerApiKeys: 'API 金鑰',
181
+ gateway: '閘道',
182
+ apiKeys: '工具與金鑰',
183
+ keysTools: '工具',
184
+ keysSettings: '設定',
185
+ mcp: 'MCP',
186
+ archivedChats: '已封存聊天',
187
+ about: '關於',
188
+ notifications: '通知'
189
+ },
190
+ notifications: {
191
+ title: '通知',
192
+ intro: '原生桌面通知,與應用程式內提示不同。設定會依裝置保存,每台電腦各自獨立。',
193
+ enableAll: '啟用通知',
194
+ enableAllDesc: '總開關。關閉後會靜音下方所有通知。',
195
+ focusedHint: '完成提醒僅在 Hermes 位於背景時觸發。',
196
+ kinds: {
197
+ approval: {
198
+ label: '需要核准',
199
+ description: '有指令正在等待你核准或拒絕。'
200
+ },
201
+ input: {
202
+ label: '需要輸入',
203
+ description: 'Hermes 提出了問題,或需要密碼或密鑰。'
204
+ },
205
+ turnDone: {
206
+ label: '回覆就緒',
207
+ description: 'Hermes 在背景時完成了一輪對話。'
208
+ },
209
+ turnError: {
210
+ label: '本輪失敗',
211
+ description: '本輪以錯誤結束。'
212
+ },
213
+ backgroundDone: {
214
+ label: '背景工作完成',
215
+ description: '背景終端機指令已完成。'
216
+ }
217
+ },
218
+ test: '傳送測試通知',
219
+ testTitle: 'Hermes',
220
+ testBody: '通知運作正常。',
221
+ testSent: '測試已傳送。若沒有出現,請檢查系統通知權限與專注模式/勿擾模式。',
222
+ testUnsupported: '此系統不支援原生通知。',
223
+ completionSoundTitle: '完成提示音',
224
+ completionSoundDesc: '代理回合結束時播放。可在此選擇預設並預覽。',
225
+ completionSoundPreview: '預覽'
226
+ },
227
+ sections: {
228
+ model: '模型',
229
+ chat: '聊天',
230
+ appearance: '外觀',
231
+ workspace: '工作區',
232
+ safety: '安全性',
233
+ memory: '記憶與上下文',
234
+ voice: '語音',
235
+ advanced: '進階'
236
+ },
237
+ searchPlaceholder: {
238
+ about: '關於 Hermes Desktop',
239
+ config: '搜尋設定…',
240
+ gateway: '閘道連線…',
241
+ keys: '搜尋 API 金鑰…',
242
+ mcp: '搜尋 MCP 伺服器…',
243
+ sessions: '搜尋已封存工作階段…'
244
+ },
245
+ modeOptions: {
246
+ light: { label: '明亮', description: '明亮的桌面介面' },
247
+ dark: { label: '深色', description: '降低眩光的工作區' },
248
+ system: { label: '跟隨系統', description: '跟隨作業系統外觀' }
249
+ },
250
+ appearance: {
251
+ title: '外觀',
252
+ intro: '這些是僅限桌面端的顯示偏好。模式控制亮度;主題控制強調色與聊天介面樣式。',
253
+ colorMode: '色彩模式',
254
+ colorModeDesc: '選擇固定模式,或讓 Hermes 跟隨系統設定。',
255
+ toolViewTitle: '工具呼叫顯示',
256
+ toolViewDesc: '產品模式會隱藏原始工具 payload;技術模式會顯示完整輸入/輸出。',
257
+ translucencyTitle: '視窗透明',
258
+ translucencyDesc: '讓整個視窗透出桌面。僅支援 macOS 與 Windows。',
259
+ product: '產品',
260
+ productDesc: '易讀的工具活動與精簡摘要。',
261
+ technical: '技術',
262
+ technicalDesc: '包含原始工具參數、結果與底層細節。',
263
+ themeTitle: '主題',
264
+ themeDesc: '僅限桌面端的調色盤。所選模式會套用在其上。',
265
+ themeProfileNote: profile => `已為「${profile}」設定檔儲存——每個設定檔保留各自的主題。`,
266
+ installTitle: '從 VS Code 安裝',
267
+ installDesc: '貼上 Marketplace 擴充功能 ID(例如 dracula-theme.theme-dracula),將其配色主題轉換為桌面調色盤。',
268
+ installPlaceholder: 'publisher.extension',
269
+ installButton: '安裝',
270
+ installing: '安裝中…',
271
+ installError: '無法安裝該主題。',
272
+ installed: name => `已安裝「${name}」。`,
273
+ removeTheme: '移除主題',
274
+ importedBadge: '已匯入'
275
+ },
276
+ fieldLabels: defineFieldCopy({
277
+ model: '預設模型',
278
+ modelContextLength: '上下文視窗',
279
+ fallbackProviders: '備用模型',
280
+ toolsets: '已啟用工具集',
281
+ timezone: '時區',
282
+ display: {
283
+ personality: '人格',
284
+ showReasoning: '推理區塊'
285
+ },
286
+ agent: {
287
+ maxTurns: '最大代理步數',
288
+ imageInputMode: '圖片附件',
289
+ apiMaxRetries: 'API 重試次數',
290
+ serviceTier: '服務層級',
291
+ toolUseEnforcement: '工具使用強制'
292
+ },
293
+ terminal: {
294
+ cwd: '工作目錄',
295
+ backend: '執行後端',
296
+ timeout: '指令逾時',
297
+ persistentShell: '持久化 Shell',
298
+ envPassthrough: '環境變數傳遞',
299
+ dockerImage: 'Docker 映像',
300
+ singularityImage: 'Singularity 映像',
301
+ modalImage: 'Modal 映像',
302
+ daytonaImage: 'Daytona 映像'
303
+ },
304
+ fileReadMaxChars: '檔案讀取上限',
305
+ toolOutput: {
306
+ maxBytes: '終端機輸出上限',
307
+ maxLines: '檔案頁面上限',
308
+ maxLineLength: '行長上限'
309
+ },
310
+ codeExecution: {
311
+ mode: '程式碼執行模式'
312
+ },
313
+ approvals: {
314
+ mode: '批准模式',
315
+ timeout: '批准逾時',
316
+ mcpReloadConfirm: '確認 MCP 重新載入'
317
+ },
318
+ commandAllowlist: '指令允許清單',
319
+ security: {
320
+ redactSecrets: '遮蔽密鑰',
321
+ allowPrivateUrls: '允許私有 URL'
322
+ },
323
+ browser: {
324
+ allowPrivateUrls: '瀏覽器私有 URL',
325
+ autoLocalForPrivateUrls: '私有 URL 使用本機瀏覽器'
326
+ },
327
+ checkpoints: {
328
+ enabled: '檔案檢查點',
329
+ maxSnapshots: '檢查點上限'
330
+ },
331
+ voice: {
332
+ recordKey: '語音快捷鍵',
333
+ maxRecordingSeconds: '最長錄音時間',
334
+ autoTts: '朗讀回覆'
335
+ },
336
+ stt: {
337
+ enabled: '語音轉文字',
338
+ provider: '語音轉文字提供方',
339
+ local: {
340
+ model: '本機轉寫模型',
341
+ language: '轉寫語言'
342
+ },
343
+ openai: {
344
+ model: 'OpenAI STT 模型'
345
+ },
346
+ groq: {
347
+ model: 'Groq STT 模型'
348
+ },
349
+ mistral: {
350
+ model: 'Mistral STT 模型'
351
+ },
352
+ elevenlabs: {
353
+ modelId: 'ElevenLabs STT 模型',
354
+ languageCode: 'ElevenLabs 語言',
355
+ tagAudioEvents: '標記音訊事件',
356
+ diarize: '說話者分離'
357
+ }
358
+ },
359
+ tts: {
360
+ provider: '文字轉語音提供方',
361
+ edge: {
362
+ voice: 'Edge 語音'
363
+ },
364
+ openai: {
365
+ model: 'OpenAI TTS 模型',
366
+ voice: 'OpenAI 語音'
367
+ },
368
+ elevenlabs: {
369
+ voiceId: 'ElevenLabs 語音',
370
+ modelId: 'ElevenLabs 模型'
371
+ },
372
+ xai: {
373
+ voiceId: 'xAI (Grok) 語音',
374
+ language: 'xAI 語言'
375
+ },
376
+ minimax: {
377
+ model: 'MiniMax TTS 模型',
378
+ voiceId: 'MiniMax 語音'
379
+ },
380
+ mistral: {
381
+ model: 'Mistral TTS 模型',
382
+ voiceId: 'Mistral 語音'
383
+ },
384
+ gemini: {
385
+ model: 'Gemini TTS 模型',
386
+ voice: 'Gemini 語音'
387
+ },
388
+ neutts: {
389
+ model: 'NeuTTS 模型',
390
+ device: 'NeuTTS 裝置'
391
+ },
392
+ kittentts: {
393
+ model: 'KittenTTS 模型',
394
+ voice: 'KittenTTS 語音'
395
+ },
396
+ piper: {
397
+ voice: 'Piper 語音'
398
+ }
399
+ },
400
+ memory: {
401
+ memoryEnabled: '持久記憶',
402
+ userProfileEnabled: '使用者設定檔',
403
+ memoryCharLimit: '記憶預算',
404
+ userCharLimit: '設定檔預算',
405
+ provider: '記憶提供方'
406
+ },
407
+ context: {
408
+ engine: '上下文引擎'
409
+ },
410
+ compression: {
411
+ enabled: '自動壓縮',
412
+ threshold: '壓縮閾值',
413
+ targetRatio: '壓縮目標',
414
+ protectLastN: '保護最近訊息'
415
+ },
416
+ delegation: {
417
+ model: '子代理模型',
418
+ provider: '子代理提供方',
419
+ maxIterations: '子代理輪次上限',
420
+ maxConcurrentChildren: '平行子代理',
421
+ childTimeoutSeconds: '子代理逾時',
422
+ reasoningEffort: '子代理推理強度'
423
+ },
424
+ updates: {
425
+ nonInteractiveLocalChanges: '應用程式內更新的本機變更'
426
+ }
427
+ }),
428
+ fieldDescriptions: defineFieldCopy({
429
+ model: '除非你在輸入框選擇其他模型,否則新聊天會使用此模型。',
430
+ modelContextLength: '保留 0 會使用所選模型偵測到的上下文視窗。',
431
+ fallbackProviders: '預設模型失敗時要嘗試的備用 provider:model 項目。',
432
+ display: {
433
+ personality: '新工作階段的預設助手風格。',
434
+ showReasoning: '後端提供推理內容時顯示該區塊。'
435
+ },
436
+ timezone: 'Hermes 需要本機時間上下文時使用。留空則使用系統時區。',
437
+ agent: {
438
+ imageInputMode: '控制圖片附件如何傳送給模型。',
439
+ maxTurns: 'Hermes 停止一次執行前的工具呼叫輪次上限。'
440
+ },
441
+ terminal: {
442
+ cwd: '工具與終端機操作的預設專案資料夾。',
443
+ persistentShell: '後端支援時,在指令之間保留 Shell 狀態。',
444
+ envPassthrough: '傳入工具執行的環境變數。'
445
+ },
446
+ codeExecution: {
447
+ mode: '程式碼執行被限制在目前專案中的嚴格程度。'
448
+ },
449
+ fileReadMaxChars: 'Hermes 單次檔案讀取可讀取的最大字元數。',
450
+ approvals: {
451
+ mode: 'Hermes 如何處理需要明確批准的指令。',
452
+ timeout: '批准提示逾時前等待的時間。'
453
+ },
454
+ security: {
455
+ redactSecrets: '盡可能從模型可見內容中隱藏偵測到的密鑰。'
456
+ },
457
+ checkpoints: {
458
+ enabled: '在檔案編輯前建立可回復的快照。'
459
+ },
460
+ memory: {
461
+ memoryEnabled: '儲存有助於未來工作階段的持久記憶。',
462
+ userProfileEnabled: '維護一份精簡的使用者偏好設定檔。'
463
+ },
464
+ context: {
465
+ engine: '長對話接近上下文上限時的管理策略。'
466
+ },
467
+ compression: {
468
+ enabled: '對話變大時摘要較早的上下文。'
469
+ },
470
+ voice: {
471
+ autoTts: '自動朗讀助手回覆。'
472
+ },
473
+ stt: {
474
+ enabled: '啟用本機或提供方支援的語音轉寫。',
475
+ elevenlabs: {
476
+ languageCode: '可選的 ISO-639-3 語言代碼。留空讓 ElevenLabs 自動偵測。'
477
+ }
478
+ },
479
+ updates: {
480
+ nonInteractiveLocalChanges:
481
+ 'Hermes 從應用程式內更新自身時,保留本機原始碼變更(stash)或丟棄(discard)。終端機更新一律會詢問。'
482
+ }
483
+ }),
484
+ about: {
485
+ heading: 'Hermes Desktop',
486
+ version: value => `版本 ${value}`,
487
+ versionUnavailable: '版本不可用',
488
+ updates: '更新',
489
+ checkNow: '立即檢查',
490
+ checking: '檢查中…',
491
+ seeWhatsNew: '查看新增內容',
492
+ releaseNotes: '發行說明',
493
+ onLatest: '你已是最新版本。',
494
+ installing: '正在安裝更新。',
495
+ cantUpdate: '此版本無法從應用程式內自行更新。',
496
+ cantReach: '無法連線到更新伺服器。',
497
+ tapCheck: '點選「立即檢查」以尋找更新。',
498
+ updateReady: count => `新更新已就緒(包含 ${count} 項變更)。`,
499
+ lastChecked: age => `上次檢查:${age}`,
500
+ justNowSuffix: ' · 剛剛',
501
+ automaticUpdates: '自動更新',
502
+ automaticUpdatesDesc: 'Hermes 會在背景自動檢查更新,並在有可用更新時通知你。',
503
+ branchCommit: (branch, commit) => `分支 ${branch} · 提交 ${commit}`,
504
+ never: '從未',
505
+ justNow: '剛剛',
506
+ minAgo: count => `${count} 分鐘前`,
507
+ hoursAgo: count => `${count} 小時前`,
508
+ daysAgo: count => `${count} 天前`
509
+ },
510
+ config: {
511
+ none: '無',
512
+ noneParen: '(無)',
513
+ notSet: '未設定',
514
+ commaSeparated: '逗號分隔的值',
515
+ loading: '正在載入 Hermes 設定...',
516
+ emptyTitle: '無可設定項目',
517
+ emptyDesc: '此區段沒有可調整的設定。',
518
+ failedLoad: '設定載入失敗',
519
+ autosaveFailed: '自動儲存失敗',
520
+ imported: '設定已匯入',
521
+ invalidJson: '設定 JSON 無效'
522
+ },
523
+ credentials: {
524
+ pasteKey: '貼上金鑰',
525
+ pasteLabelKey: label => `貼上 ${label} 金鑰`,
526
+ optional: '選填',
527
+ enterValueFirst: '請先輸入一個值。',
528
+ couldNotSave: '無法儲存憑證。',
529
+ remove: '移除',
530
+ or: '或',
531
+ escToCancel: '按 esc 取消',
532
+ getKey: '取得金鑰',
533
+ saving: '儲存中'
534
+ },
535
+ envActions: {
536
+ actionsFor: label => `${label} 的動作`,
537
+ credentialActions: '憑證動作',
538
+ docs: '文件',
539
+ hideValue: '隱藏值',
540
+ revealValue: '顯示值',
541
+ replace: '取代',
542
+ set: '設定',
543
+ clear: '清除'
544
+ },
545
+ gateway: {
546
+ loading: '正在載入閘道設定...',
547
+ unavailableTitle: '閘道設定不可用',
548
+ unavailableDesc: '桌面 IPC 橋接器未公開閘道設定。',
549
+ title: '閘道連線',
550
+ envOverride: '環境變數覆寫',
551
+ intro:
552
+ 'Hermes Desktop 預設會啟動自己的本機閘道。如果您希望此應用程式控制另一台機器或可信代理後面已執行的 Hermes 後端,請使用遠端閘道。在下方按設定檔指定各自的遠端主機。',
553
+ appliesTo: '套用至',
554
+ allProfiles: '全部設定檔',
555
+ defaultConnection: '預設連線適用於所有沒有自訂覆寫的設定檔。',
556
+ profileConnection: profile => `僅當「${profile}」為作用中設定檔時使用此連線。設為本機可繼承預設連線。`,
557
+ envOverrideTitle: '環境變數正在控制此桌面工作階段。',
558
+ envOverrideDesc: '取消設定 HERMES_DESKTOP_REMOTE_URL 和 HERMES_DESKTOP_REMOTE_TOKEN 後才會使用下方儲存的設定。',
559
+ localTitle: '本機閘道',
560
+ localDesc: '在 localhost 啟動私有 Hermes 後端。這是預設方式,可離線使用。',
561
+ remoteTitle: '遠端閘道',
562
+ remoteDesc:
563
+ '將此桌面殼層連線至遠端 Hermes 後端。託管閘道使用 OAuth 或帳號密碼;自託管閘道也可使用工作階段 Token。',
564
+ remoteUrlTitle: '遠端 URL',
565
+ remoteUrlDesc: '遠端儀表板後端的基礎 URL。支援路徑前綴,例如 /hermes。',
566
+ probing: '正在檢查此閘道的驗證方式…',
567
+ probeError: '暫時無法連線此閘道。請檢查 URL;閘道回應後將顯示驗證方式。',
568
+ signedIn: '已登入',
569
+ signIn: '登入',
570
+ signOut: '登出',
571
+ signInWith: provider => `使用 ${provider} 登入`,
572
+ authTitle: '驗證',
573
+ authSignedInPassword: '此閘道使用帳號和密碼。您已登入,工作階段會自動重新整理。',
574
+ authSignedInOauth: '此閘道使用 OAuth。您已登入,工作階段會自動重新整理。',
575
+ authNeedsPassword: '此閘道使用帳號和密碼。請登入以授權此桌面應用程式。',
576
+ authNeedsOauth: provider => `此閘道使用 OAuth。請使用 ${provider} 登入以授權此桌面應用程式。`,
577
+ tokenTitle: '工作階段 Token',
578
+ tokenDesc: '用於 REST 和 WebSocket 存取的儀表板工作階段 Token。留空則保留已儲存的 Token。',
579
+ existingToken: value => `現有 Token ${value}`,
580
+ savedToken: '已儲存',
581
+ pasteSessionToken: '貼上工作階段 Token',
582
+ testRemote: '測試遠端',
583
+ saveForRestart: '儲存至下次重新啟動',
584
+ saveAndReconnect: '儲存並重新連線',
585
+ diagnostics: '診斷',
586
+ diagnosticsDesc: '在檔案管理員中顯示 desktop.log,閘道啟動失敗時很有用。',
587
+ openLogs: '開啟記錄',
588
+ incompleteTitle: '遠端閘道設定不完整',
589
+ incompleteSignIn: '切換至遠端前,請輸入遠端 URL 並完成登入。',
590
+ incompleteToken: '切換至遠端前,請輸入遠端 URL 和工作階段 Token。',
591
+ incompleteSignInTest: '測試前,請輸入遠端 URL 並完成登入。',
592
+ incompleteTokenTest: '測試前,請輸入遠端 URL 和工作階段 Token。',
593
+ enterUrlFirst: '請先輸入遠端 URL。',
594
+ restartingTitle: '閘道連線正在重新啟動',
595
+ savedTitle: '閘道設定已儲存',
596
+ restartingMessage: 'Hermes Desktop 將使用已儲存的設定重新連線。',
597
+ savedMessage: '已儲存,下次重新啟動後生效。',
598
+ connectedTo: (baseUrl, version) => `已連線至 ${baseUrl}${version ? ` · Hermes ${version}` : ''}`,
599
+ reachableTitle: '遠端閘道可連線',
600
+ signedOutTitle: '已登出',
601
+ signedOutMessage: '已清除遠端閘道工作階段。',
602
+ failedLoad: '閘道設定載入失敗',
603
+ signInFailed: '登入失敗',
604
+ signOutFailed: '登出失敗',
605
+ testFailed: '遠端閘道測試失敗',
606
+ applyFailed: '無法套用閘道設定',
607
+ saveFailed: '無法儲存閘道設定'
608
+ },
609
+ keys: {
610
+ loading: '正在載入 API 金鑰和憑證...',
611
+ failedLoad: 'API 金鑰載入失敗',
612
+ empty: '此類別尚未有任何設定。'
613
+ },
614
+ mcp: {
615
+ loading: '正在載入 MCP 伺服器...',
616
+ failedLoad: 'MCP 設定載入失敗',
617
+ nameRequiredTitle: '需要名稱',
618
+ nameRequiredMessage: '請為此 MCP 伺服器提供設定鍵。',
619
+ objectRequired: '伺服器設定必須是 JSON 物件',
620
+ invalidJson: 'MCP JSON 無效',
621
+ saveFailed: '儲存失敗',
622
+ removeFailed: '移除失敗',
623
+ gatewayUnavailableTitle: '閘道不可用',
624
+ gatewayUnavailableMessage: '重新載入 MCP 前請先重新連線閘道。',
625
+ reloadedTitle: 'MCP 工具已重新載入',
626
+ reloadedMessage: '新的工具 Schema 將套用至後續回合。',
627
+ reloadFailed: 'MCP 重新載入失敗',
628
+ savedTitle: 'MCP 伺服器已儲存',
629
+ savedMessage: name => `${name} 會在 MCP 重新載入後生效。`,
630
+ newServer: '新伺服器',
631
+ reload: '重新載入 MCP',
632
+ reloading: '重新載入中...',
633
+ emptyTitle: '沒有 MCP 伺服器',
634
+ emptyDesc: '新增 stdio 或 HTTP 伺服器以公開 MCP 工具。',
635
+ disabled: '已停用',
636
+ editServer: '編輯伺服器',
637
+ name: '名稱',
638
+ serverJson: '伺服器 JSON',
639
+ remove: '移除',
640
+ saveServer: '儲存伺服器'
641
+ },
642
+ model: {
643
+ loading: '正在載入模型設定...',
644
+ appliesDesc: '套用至新工作階段。可在輸入框的模型選擇器中臨時切換目前對話。',
645
+ provider: '提供方',
646
+ model: '模型',
647
+ applying: '套用中...',
648
+ auxiliaryTitle: '輔助模型',
649
+ resetAllToMain: '全部重設為主要模型',
650
+ auxiliaryDesc: '輔助任務預設使用主要模型。您可以為任何任務指定專用模型。',
651
+ setToMain: '設為主要模型',
652
+ change: '變更',
653
+ autoUseMain: '自動 · 使用主要模型',
654
+ providerDefault: '(提供方預設)',
655
+ tasks: {
656
+ vision: { label: '視覺', hint: '圖片分析' },
657
+ web_extract: { label: '網頁擷取', hint: '頁面摘要' },
658
+ compression: { label: '壓縮', hint: '上下文壓縮' },
659
+ skills_hub: { label: '技能中心', hint: '技能搜尋' },
660
+ approval: { label: '核准', hint: '智慧自動核准' },
661
+ mcp: { label: 'MCP', hint: 'MCP 工具路由' },
662
+ title_generation: { label: '標題生成', hint: '工作階段標題' },
663
+ curator: { label: '策展器', hint: '技能使用審查' }
664
+ }
665
+ },
666
+ providers: {
667
+ connectAccount: '連結帳號',
668
+ haveApiKey: '改用 API 金鑰?',
669
+ intro: '使用訂閱登入,無需複製 API 金鑰。Hermes 會在應用程式中為您完成瀏覽器登入。',
670
+ connected: '已連線',
671
+ collapse: '收合',
672
+ connectAnother: '連結其他提供方',
673
+ otherProviders: '其他提供方',
674
+ removeConfirm: provider => `移除 ${provider}?`,
675
+ removeKeyManaged: provider => `${provider} 由 API 金鑰設定。請從 API Keys 中移除。`,
676
+ removedTitle: '帳號已移除',
677
+ removedMessage: provider => `${provider} 已移除。`,
678
+ failedRemove: provider => `無法移除 ${provider}`,
679
+ noProviderKeys: '沒有可用的提供方 API 金鑰。',
680
+ searchKeys: '搜尋提供方…',
681
+ noKeysMatch: '沒有符合的提供方。',
682
+ loading: '正在載入提供方...'
683
+ },
684
+ sessions: {
685
+ loading: '正在載入已封存工作階段…',
686
+ archivedTitle: '已封存工作階段',
687
+ archivedIntro: '已封存的聊天會從側邊欄隱藏,但保留全部訊息。在側邊欄 Ctrl/⌘ 點擊聊天即可封存。',
688
+ emptyArchivedTitle: '暫無封存',
689
+ emptyArchivedDesc: '封存一個聊天後會顯示在這裡。',
690
+ unarchive: '取消封存',
691
+ deletePermanently: '永久刪除',
692
+ messages: count => `${count} 則訊息`,
693
+ restored: '已還原',
694
+ deleteConfirm: title => `永久刪除「${title}」?此操作無法復原。`,
695
+ defaultDirTitle: '預設專案目錄',
696
+ defaultDirDesc: '新工作階段預設從此資料夾開始,除非您選擇其他目錄。留空則使用您的家目錄。',
697
+ defaultDirUpdated: '預設專案目錄已更新',
698
+ defaultsTo: label => `預設使用 ${label}。`,
699
+ change: '變更',
700
+ choose: '選擇',
701
+ clear: '清除',
702
+ notSet: '未設定',
703
+ failedLoad: '無法載入已封存工作階段',
704
+ unarchiveFailed: '取消封存失敗',
705
+ deleteFailed: '刪除失敗',
706
+ updateDirFailed: '無法更新預設目錄',
707
+ clearDirFailed: '無法清除預設目錄'
708
+ },
709
+ toolsets: {
710
+ loadingConfig: '正在載入設定',
711
+ savedTitle: '憑證已儲存',
712
+ savedMessage: key => `${key} 已更新。`,
713
+ removedTitle: '憑證已移除',
714
+ removedMessage: key => `${key} 已移除。`,
715
+ failedSave: key => `儲存 ${key} 失敗`,
716
+ failedRemove: key => `移除 ${key} 失敗`,
717
+ failedReveal: key => `顯示 ${key} 失敗`,
718
+ removeConfirm: key => `從 .env 中移除 ${key}?`,
719
+ set: '已設定',
720
+ notSet: '未設定',
721
+ selectedTitle: '已選擇提供方',
722
+ selectedMessage: provider => `${provider} 現在處於作用中狀態。`,
723
+ failedSelect: provider => `選擇 ${provider} 失敗`,
724
+ failedLoad: '工具設定載入失敗',
725
+ noProviderOptions: '此工具集沒有提供方選項;啟用後即可使用目前設定。',
726
+ noProviders: '此工具集目前沒有可用提供方。',
727
+ ready: '就緒',
728
+ nousIncluded: '包含在 Nous 訂閱中;登入 Nous Portal 即可啟用。',
729
+ noApiKeyRequired: '不需要 API 金鑰。',
730
+ postSetupHint: step => `此後端需要一次性安裝 (${step})。將在此機器上執行,可能需要幾分鐘。`,
731
+ postSetupRun: '執行設定',
732
+ postSetupRunning: '安裝中…',
733
+ postSetupStarting: '啟動中…',
734
+ postSetupCompleteTitle: '設定完成',
735
+ postSetupCompleteMessage: step => `已安裝 ${step}。`,
736
+ postSetupErrorTitle: '設定完成但有錯誤',
737
+ postSetupErrorMessage: step => `請檢查 ${step} 日誌。`,
738
+ postSetupFailed: step => `執行 ${step} 設定失敗`
739
+ }
740
+ },
741
+
742
+ skills: {
743
+ tabSkills: '技能',
744
+ tabToolsets: '工具集',
745
+ all: '全部',
746
+ searchSkills: '搜尋技能...',
747
+ searchToolsets: '搜尋工具集...',
748
+ refresh: '重新整理技能',
749
+ refreshing: '正在重新整理技能',
750
+ loading: '正在載入功能…',
751
+ noSkillsTitle: '找不到技能',
752
+ noSkillsDesc: '請嘗試更廣泛的搜尋或不同類別。',
753
+ noToolsetsTitle: '找不到工具集',
754
+ noToolsetsDesc: '請嘗試更廣泛的搜尋詞。',
755
+ noDescription: '無可用描述。',
756
+ configured: '已設定',
757
+ needsKeys: '需要金鑰',
758
+ toolsetsEnabled: (enabled, total) => `已啟用 ${enabled}/${total} 個工具集`,
759
+ configureToolset: label => `設定 ${label}`,
760
+ toggleToolset: label => `切換 ${label} 工具集`,
761
+ skillsLoadFailed: '技能載入失敗',
762
+ toolsetsRefreshFailed: '工具集重新整理失敗',
763
+ skillEnabled: '技能已啟用',
764
+ skillDisabled: '技能已停用',
765
+ toolsetEnabled: '工具集已啟用',
766
+ toolsetDisabled: '工具集已停用',
767
+ appliesToNewSessions: name => `${name} 將套用至新工作階段。`,
768
+ failedToUpdate: name => `更新 ${name} 失敗`
769
+ },
770
+
771
+ agents: {
772
+ close: '關閉代理',
773
+ title: '派生樹',
774
+ subtitle: '目前回合的子代理即時活動。',
775
+ emptyTitle: '暫無活躍子代理',
776
+ emptyDesc: '當某個回合派發任務時,子代理會在此即時顯示進度。',
777
+ running: '執行中',
778
+ failed: '失敗',
779
+ done: '完成',
780
+ streaming: '串流傳輸中',
781
+ files: '檔案',
782
+ moreFiles: count => `還有 ${count} 個檔案`,
783
+ delegation: index => `派發 ${index}`,
784
+ workers: count => `${count} 個工作單元`,
785
+ workersActive: count => `${count} 個活躍`,
786
+ agentsCount: count => `${count} 個代理`,
787
+ activeCount: count => `${count} 個活躍`,
788
+ failedCount: count => `${count} 個失敗`,
789
+ toolsCount: count => `${count} 個工具`,
790
+ filesCount: count => `${count} 個檔案`,
791
+ updatedAgo: age => `更新於 ${age}`,
792
+ ageNow: '剛才',
793
+ ageSeconds: seconds => `${seconds} 秒前`,
794
+ ageMinutes: minutes => `${minutes} 分鐘前`,
795
+ ageHours: hours => `${hours} 小時前`,
796
+ durationSeconds: seconds => `${seconds} 秒`,
797
+ durationMinutes: (minutes, seconds) => `${minutes} 分 ${seconds} 秒`,
798
+ tokensK: k => `${k}k 詞元`,
799
+ tokens: value => `${value} 詞元`
800
+ },
801
+
802
+ commandCenter: {
803
+ close: '關閉命令中心',
804
+ paletteTitle: '命令面板',
805
+ back: '返回',
806
+ searchPlaceholder: '搜尋工作階段、檢視和動作',
807
+ goTo: '前往',
808
+ goToSession: '前往工作階段',
809
+ commandCenter: '命令中心',
810
+ appearance: '外觀',
811
+ settings: '設定',
812
+ changeTheme: '變更主題...',
813
+ changeColorMode: '變更色彩模式...',
814
+ installTheme: {
815
+ title: '安裝主題...',
816
+ placeholder: '搜尋 VS Code Marketplace...',
817
+ loading: '正在搜尋 Marketplace...',
818
+ error: '無法連接到 Marketplace。',
819
+ empty: '沒有符合的主題。',
820
+ install: '安裝',
821
+ installing: '安裝中...',
822
+ installed: '已安裝',
823
+ installs: count => `${count} 次安裝`
824
+ },
825
+ settingsFields: '設定欄位',
826
+ mcpServers: 'MCP 伺服器',
827
+ archivedChats: '已封存聊天',
828
+ sections: { sessions: '工作階段', system: '系統', usage: '使用量' },
829
+ sectionDescriptions: {
830
+ sessions: '搜尋和管理工作階段',
831
+ system: '狀態、記錄和系統動作',
832
+ usage: '一段時間內的詞元、費用和技能活動'
833
+ },
834
+ nav: {
835
+ newChat: { title: '新工作階段', detail: '開始新的工作階段' },
836
+ settings: { title: '設定', detail: '設定 Hermes 桌面端' },
837
+ skills: { title: '技能與工具', detail: '啟用技能、工具集和提供方' },
838
+ messaging: { title: '訊息平台', detail: '設定 Telegram、Slack、Discord 等' },
839
+ artifacts: { title: '成品', detail: '瀏覽產生的輸出' }
840
+ },
841
+ sectionEntries: {
842
+ sessions: { title: '工作階段面板', detail: '搜尋、釘選和管理工作階段' },
843
+ system: { title: '系統面板', detail: '閘道狀態、記錄、重新啟動/更新' },
844
+ usage: { title: '使用量面板', detail: '詞元、費用和技能活動' }
845
+ },
846
+ providerNavigate: '導覽',
847
+ providerSessions: '工作階段',
848
+ refresh: '重新整理',
849
+ refreshing: '重新整理中…',
850
+ noResults: '找不到相符的結果。',
851
+ pinSession: '釘選工作階段',
852
+ unpinSession: '取消釘選',
853
+ exportSession: '匯出工作階段',
854
+ deleteSession: '刪除工作階段',
855
+ noSessions: '暫無工作階段。',
856
+ gatewayRunning: '訊息閘道執行中',
857
+ gatewayStopped: '訊息閘道已停止',
858
+ hermesActiveSessions: (version, count) => `Hermes ${version} · 活躍工作階段 ${count}`,
859
+ restartGateway: '重新啟動閘道',
860
+ gatewayRestartFailed: '閘道重新啟動失敗。',
861
+ updateHermes: '更新 Hermes',
862
+ actionRunning: '執行中',
863
+ actionDone: '完成',
864
+ actionFailed: '失敗',
865
+ actionStartedWaiting: '動作已啟動,等待狀態…',
866
+ loadingStatus: '正在載入狀態…',
867
+ recentLogs: '最近記錄',
868
+ noLogs: '尚未載入記錄。',
869
+ days: count => `${count} 天`,
870
+ statSessions: '工作階段',
871
+ statApiCalls: 'API 呼叫',
872
+ statTokens: '輸入/輸出詞元',
873
+ statCost: '預估費用',
874
+ actualCost: cost => `實際 ${cost}`,
875
+ loadingUsage: '正在載入使用量…',
876
+ noUsage: period => `最近 ${period} 天暫無使用量。`,
877
+ retry: '重試',
878
+ dailyTokens: '每日詞元',
879
+ input: '輸入',
880
+ output: '輸出',
881
+ noDailyActivity: '暫無每日活動。',
882
+ topModels: '常用模型',
883
+ noModelUsage: '暫無模型使用量。',
884
+ topSkills: '常用技能',
885
+ noSkillActivity: '暫無技能活動。',
886
+ actions: count => `${count} 次動作`
887
+ },
888
+
889
+ messaging: {
890
+ search: '搜尋訊息平台…',
891
+ loading: '正在載入訊息平台…',
892
+ loadFailed: '訊息平台載入失敗',
893
+ states: {
894
+ connected: '已連線',
895
+ connecting: '連線中',
896
+ disabled: '已停用',
897
+ fatal: '錯誤',
898
+ gateway_stopped: '訊息閘道已停止',
899
+ not_configured: '需要設定',
900
+ pending_restart: '需要重新啟動',
901
+ retrying: '重試中',
902
+ startup_failed: '啟動失敗'
903
+ },
904
+ unknown: '未知',
905
+ hintPendingRestart: '在狀態列重新啟動閘道以套用此變更。',
906
+ hintGatewayStopped: '在狀態列啟動閘道以建立連線。',
907
+ credentialsSet: '憑證已設定',
908
+ needsSetup: '需要設定',
909
+ gatewayStopped: '訊息閘道已停止',
910
+ getCredentials: '取得您的憑證',
911
+ openSetupGuide: '開啟設定指南',
912
+ required: '必填',
913
+ recommended: '建議',
914
+ advanced: count => `進階 (${count})`,
915
+ noTokenNeeded: '此平台不需要在此填寫 Token。請按照上方設定指南操作,然後在下方啟用。',
916
+ enabled: '已啟用',
917
+ disabled: '已停用',
918
+ unsavedChanges: '有未儲存的變更',
919
+ saving: '儲存中…',
920
+ saveChanges: '儲存變更',
921
+ saved: '已儲存',
922
+ replaceValue: '取代目前值',
923
+ openDocs: '開啟文件',
924
+ clearField: key => `清除 ${key}`,
925
+ enableAria: name => `啟用 ${name}`,
926
+ disableAria: name => `停用 ${name}`,
927
+ platformEnabled: name => `${name} 已啟用`,
928
+ platformDisabled: name => `${name} 已停用`,
929
+ restartToApply: '此變更將在閘道重新啟動後生效。',
930
+ setupSaved: name => `${name} 設定已儲存`,
931
+ restartToReconnect: '新憑證將在閘道重新啟動後生效。',
932
+ keyCleared: key => `${key} 已清除`,
933
+ setupUpdated: name => `${name} 設定已更新。`,
934
+ failedUpdate: name => `更新 ${name} 失敗`,
935
+ failedSave: name => `儲存 ${name} 失敗`,
936
+ failedClear: key => `清除 ${key} 失敗`,
937
+ fieldCopy: {
938
+ TELEGRAM_BOT_TOKEN: {
939
+ label: 'Bot Token',
940
+ help: '用 @BotFather 建立機器人,然後貼上它給您的 Token。',
941
+ placeholder: '貼上 Telegram bot Token'
942
+ },
943
+ TELEGRAM_ALLOWED_USERS: {
944
+ label: '允許的 Telegram 使用者 ID',
945
+ help: '建議設定。來自 @userinfobot 的逗號分隔數字 ID。不設定則任何人都能私訊您的機器人。'
946
+ },
947
+ TELEGRAM_PROXY: { label: '代理 URL', help: '僅在 Telegram 被封鎖的網路中需要。' },
948
+ DISCORD_BOT_TOKEN: {
949
+ label: 'Bot Token',
950
+ help: '在 Discord 開發者入口網站建立應用程式,新增機器人,然後貼上其 Token。'
951
+ },
952
+ DISCORD_ALLOWED_USERS: { label: '允許的 Discord 使用者 ID', help: '建議設定。逗號分隔的 Discord 使用者 ID。' },
953
+ DISCORD_REPLY_TO_MODE: { label: '回覆方式', help: 'first、all 或 off。' },
954
+ DISCORD_ALLOW_ALL_USERS: {
955
+ label: '允許所有 Discord 使用者',
956
+ help: '僅供開發使用。為 true 時,任何人都可以私訊機器人,不需要允許清單。'
957
+ },
958
+ DISCORD_HOME_CHANNEL: {
959
+ label: '主頻道 ID',
960
+ help: '機器人主動傳送訊息的頻道(cron 輸出、提醒等)。'
961
+ },
962
+ DISCORD_HOME_CHANNEL_NAME: {
963
+ label: '主頻道名稱',
964
+ help: '記錄和狀態輸出中顯示的主頻道名稱。'
965
+ },
966
+ BLUEBUBBLES_ALLOW_ALL_USERS: { label: '允許所有 iMessage 使用者', help: '為 true 時略過 BlueBubbles 允許清單。' },
967
+ MATTERMOST_ALLOW_ALL_USERS: { label: '允許所有 Mattermost 使用者' },
968
+ MATTERMOST_HOME_CHANNEL: { label: '主頻道' },
969
+ QQ_ALLOW_ALL_USERS: { label: '允許所有 QQ 使用者' },
970
+ QQBOT_HOME_CHANNEL: { label: 'QQ 主頻道', help: 'cron 傳遞的預設頻道或群組。' },
971
+ QQBOT_HOME_CHANNEL_NAME: { label: 'QQ 主頻道名稱' },
972
+ SLACK_BOT_TOKEN: {
973
+ label: 'Slack bot Token',
974
+ help: '安裝 Slack 應用程式後,在 OAuth & Permissions 中找到 bot Token。',
975
+ placeholder: '貼上 Slack bot Token'
976
+ },
977
+ SLACK_APP_TOKEN: {
978
+ label: 'Slack app Token',
979
+ help: 'Socket Mode 需要 app 層級 Token。',
980
+ placeholder: '貼上 Slack app Token'
981
+ },
982
+ SLACK_ALLOWED_USERS: { label: '允許的 Slack 使用者 ID', help: '建議設定。逗號分隔的 Slack 使用者 ID。' },
983
+ MATTERMOST_URL: { label: '伺服器 URL', placeholder: 'https://mattermost.example.com' },
984
+ MATTERMOST_TOKEN: { label: 'Bot Token' },
985
+ MATTERMOST_ALLOWED_USERS: { label: '允許的使用者 ID', help: '建議設定。逗號分隔的 Mattermost 使用者 ID。' },
986
+ MATRIX_HOMESERVER: { label: 'Homeserver URL', placeholder: 'https://matrix.org' },
987
+ MATRIX_ACCESS_TOKEN: { label: '存取 Token' },
988
+ MATRIX_USER_ID: { label: 'Bot 使用者 ID', placeholder: '@hermes:example.org' },
989
+ MATRIX_ALLOWED_USERS: {
990
+ label: '允許的 Matrix 使用者 ID',
991
+ help: '建議設定。@user:server 格式的逗號分隔使用者 ID。'
992
+ },
993
+ SIGNAL_HTTP_URL: {
994
+ label: 'Signal 橋接 URL',
995
+ placeholder: 'http://127.0.0.1:8080',
996
+ help: '執行中的 signal-cli REST 橋接的 URL。'
997
+ },
998
+ SIGNAL_ACCOUNT: { label: '電話號碼', help: '在 signal-cli 橋接中註冊的號碼。' },
999
+ SIGNAL_ALLOWED_USERS: { label: '允許的 Signal 使用者', help: '建議設定。逗號分隔的 Signal 識別碼。' },
1000
+ WHATSAPP_ENABLED: {
1001
+ label: '啟用 WhatsApp 橋接',
1002
+ help: '由下方切換開關自動設定。除非確知需要,否則請勿變更。'
1003
+ },
1004
+ WHATSAPP_MODE: { label: '橋接模式' },
1005
+ WHATSAPP_ALLOWED_USERS: {
1006
+ label: '允許的 WhatsApp 使用者',
1007
+ help: '建議設定。逗號分隔的電話號碼或 WhatsApp ID。'
1008
+ }
1009
+ },
1010
+ platformIntro: {}
1011
+ },
1012
+
1013
+ profiles: {
1014
+ close: '關閉設定檔',
1015
+ nameHint: '小寫字母、數字、連字號和底線。必須以字母或數字開頭。',
1016
+ title: '設定檔',
1017
+ count: count => `${count} 個設定檔`,
1018
+ loading: '正在載入設定檔…',
1019
+ newProfile: '新增設定檔',
1020
+ allProfiles: '全部設定檔',
1021
+ showAllProfiles: '顯示全部設定檔',
1022
+ switchToProfile: name => `切換至 ${name}`,
1023
+ manageProfiles: '管理設定檔...',
1024
+ actionsFor: name => `${name} 的動作`,
1025
+ color: '顏色...',
1026
+ colorFor: name => `${name} 的顏色`,
1027
+ setColor: color => `設定顏色 ${color}`,
1028
+ autoColor: '自動',
1029
+ noProfiles: '找不到設定檔。',
1030
+ selectPrompt: '選擇一個設定檔以檢視其詳細資訊。',
1031
+ refresh: '重新整理設定檔',
1032
+ refreshing: '正在重新整理設定檔',
1033
+ default: '預設',
1034
+ skills: count => `${count} 個技能`,
1035
+ env: 'env',
1036
+ defaultBadge: '預設',
1037
+ rename: '重新命名',
1038
+ copySetup: '複製安裝指令',
1039
+ copying: '複製中…',
1040
+ modelLabel: '模型',
1041
+ skillsLabel: '技能',
1042
+ notSet: '未設定',
1043
+ soulDesc: '內建於此設定檔的系統提示詞與角色指令。',
1044
+ soulOptional: '選填',
1045
+ soulPlaceholder: mode => `此設定檔的系統提示詞 / 角色說明。\n留空則保留${mode}預設值。`,
1046
+ soulPlaceholderCloned: '複製的',
1047
+ soulPlaceholderEmpty: '空的',
1048
+ unsavedChanges: '有未儲存的變更',
1049
+ loadingSoul: '正在載入 SOUL.md…',
1050
+ emptySoul: '空的 SOUL.md — 開始撰寫角色設定…',
1051
+ saving: '儲存中…',
1052
+ saveSoul: '儲存 SOUL.md',
1053
+ deleteTitle: '刪除設定檔?',
1054
+ deleteDescPrefix: '這將刪除 ',
1055
+ deleteDescMid: ' 並移除其 ',
1056
+ deleteDescSuffix: ' 目錄。此操作無法復原。',
1057
+ deleting: '刪除中…',
1058
+ createDesc: '設定檔是獨立的 Hermes 環境:各自擁有獨立的設定、技能和 SOUL.md。',
1059
+ nameLabel: '名稱',
1060
+ cloneFrom: '複製來源',
1061
+ cloneFromNone: '無(空白)',
1062
+ cloneFromDesc: '從選取的來源設定檔複製設定、技能和 SOUL.md。',
1063
+ cloneFromDefault: '從預設設定檔複製設定',
1064
+ cloneFromDefaultDesc: '從您的預設設定檔複製設定、技能和 SOUL.md。',
1065
+ invalidName: hint => `設定檔名稱無效。${hint}`,
1066
+ nameRequired: '名稱為必填',
1067
+ creating: '建立中…',
1068
+ createAction: '建立設定檔',
1069
+ renameTitle: '重新命名設定檔',
1070
+ renameDescPrefix: '重新命名會更新設定檔目錄以及 ',
1071
+ renameDescSuffix: ' 中的所有包裝指令碼。',
1072
+ newNameLabel: '新名稱',
1073
+ renaming: '重新命名中…',
1074
+ created: '已建立',
1075
+ renamed: '已重新命名',
1076
+ deleted: '已刪除',
1077
+ setupCopied: '安裝指令已複製',
1078
+ soulSaved: 'SOUL.md 已儲存',
1079
+ failedLoad: '載入設定檔失敗',
1080
+ failedDelete: '刪除設定檔失敗',
1081
+ failedCopy: '複製安裝指令失敗',
1082
+ failedLoadSoul: '載入 SOUL.md 失敗',
1083
+ failedSaveSoul: '儲存 SOUL.md 失敗',
1084
+ failedCreate: '建立設定檔失敗',
1085
+ failedRename: '重新命名設定檔失敗'
1086
+ },
1087
+
1088
+ cron: {
1089
+ close: '關閉排程',
1090
+ search: '搜尋排程工作…',
1091
+ loading: '正在載入排程工作…',
1092
+ states: {
1093
+ enabled: '已啟用',
1094
+ scheduled: '已排程',
1095
+ running: '執行中',
1096
+ paused: '已暫停',
1097
+ disabled: '已停用',
1098
+ error: '錯誤',
1099
+ completed: '已完成'
1100
+ },
1101
+ deliveryLabels: {
1102
+ local: '此桌面',
1103
+ telegram: 'Telegram',
1104
+ discord: 'Discord',
1105
+ slack: 'Slack',
1106
+ email: '電子郵件'
1107
+ },
1108
+ scheduleLabels: {
1109
+ daily: '每天',
1110
+ weekdays: '工作日',
1111
+ weekly: '每週',
1112
+ monthly: '每月',
1113
+ hourly: '每小時',
1114
+ 'every-15-minutes': '每 15 分鐘',
1115
+ custom: '自訂'
1116
+ },
1117
+ scheduleHints: {
1118
+ daily: '每天上午 9:00',
1119
+ weekdays: '週一至週五上午 9:00',
1120
+ weekly: '每週一上午 9:00',
1121
+ monthly: '每月第一天上午 9:00',
1122
+ hourly: '每個整點',
1123
+ 'every-15-minutes': '每 15 分鐘',
1124
+ custom: 'Cron 語法或自然語言'
1125
+ },
1126
+ days: {
1127
+ '0': '週日',
1128
+ '1': '週一',
1129
+ '2': '週二',
1130
+ '3': '週三',
1131
+ '4': '週四',
1132
+ '5': '週五',
1133
+ '6': '週六',
1134
+ '7': '週日'
1135
+ },
1136
+ dayFallback: value => `第 ${value} 天`,
1137
+ everyDayAt: time => `每天 ${time}`,
1138
+ weekdaysAt: time => `工作日 ${time}`,
1139
+ everyDayOfWeekAt: (day, time) => `每${day} ${time}`,
1140
+ monthlyOnDayAt: (dayOfMonth, time) => `每月 ${dayOfMonth} 日 ${time}`,
1141
+ topOfHour: '每個整點',
1142
+ everyHourAt: minute => `每小時的 :${minute}`,
1143
+ newCron: '新排程工作',
1144
+ emptyDescNew: '按 cron 表達式排程一個提示詞。Hermes 會執行它,並將結果傳送至您選擇的目的地。',
1145
+ emptyDescSearch: '請嘗試更廣泛的搜尋詞。',
1146
+ emptyTitleNew: '暫無排程工作',
1147
+ emptyTitleSearch: '無相符項目',
1148
+ last: '上次:',
1149
+ next: '下次:',
1150
+ noRuns: '尚無執行',
1151
+ manage: '管理',
1152
+ showRuns: '顯示執行記錄',
1153
+ hideRuns: '隱藏執行記錄',
1154
+ runHistory: '執行記錄',
1155
+ actionsFor: title => `${title} 的動作`,
1156
+ actionsTitle: '排程工作動作',
1157
+ resume: '繼續',
1158
+ pause: '暫停',
1159
+ resumeTitle: '繼續',
1160
+ pauseTitle: '暫停',
1161
+ triggerNow: '立即觸發',
1162
+ edit: '編輯排程工作',
1163
+ deleteTitle: '刪除排程工作?',
1164
+ deleteDescPrefix: '這將永久移除 ',
1165
+ deleteDescSuffix: '。它會立即停止觸發。',
1166
+ deleting: '刪除中…',
1167
+ resumed: '排程工作已繼續',
1168
+ paused: '排程工作已暫停',
1169
+ triggered: '排程工作已觸發',
1170
+ deleted: '排程工作已刪除',
1171
+ created: '排程工作已建立',
1172
+ updated: '排程工作已更新',
1173
+ failedLoad: '載入排程工作失敗',
1174
+ failedUpdate: '更新排程工作失敗',
1175
+ failedTrigger: '觸發排程工作失敗',
1176
+ failedDelete: '刪除排程工作失敗',
1177
+ failedSave: '儲存排程工作失敗',
1178
+ editTitle: '編輯排程工作',
1179
+ createTitle: '新排程工作',
1180
+ editDesc: '更新排程、提示詞或傳遞目標。變更將在下次執行時生效。',
1181
+ createDesc: '排程一個提示詞以自動執行。使用 cron 語法或類似「每 15 分鐘」的自然語言。',
1182
+ nameLabel: '名稱',
1183
+ namePlaceholder: '例如:每日摘要',
1184
+ promptLabel: '提示詞',
1185
+ promptPlaceholder: '代理每次執行時應做什麼?',
1186
+ frequencyLabel: '頻率',
1187
+ deliverLabel: '傳遞至',
1188
+ customScheduleLabel: '自訂排程',
1189
+ customPlaceholder: '0 9 * * * 或 weekdays at 9am',
1190
+ customHint: 'Cron 表達式,或類似「每小時」「工作日上午 9 點」的短語。',
1191
+ optional: '選填',
1192
+ promptScheduleRequired: '提示詞和排程為必填項目。',
1193
+ saveChanges: '儲存變更',
1194
+ createAction: '建立排程工作'
1195
+ },
1196
+
1197
+ artifacts: {
1198
+ search: '搜尋成品…',
1199
+ refresh: '重新整理成品',
1200
+ refreshing: '正在重新整理成品',
1201
+ indexing: '正在索引最近工作階段的成品',
1202
+ tabAll: '全部',
1203
+ tabImages: '圖片',
1204
+ tabFiles: '檔案',
1205
+ tabLinks: '連結',
1206
+ noArtifactsTitle: '找不到成品',
1207
+ noArtifactsDesc: '當工作階段產生圖片和檔案輸出時,它們會顯示在這裡。',
1208
+ failedLoad: '成品載入失敗',
1209
+ openFailed: '開啟失敗',
1210
+ itemsImage: '張圖片',
1211
+ itemsLink: '個連結',
1212
+ itemsFile: '個檔案',
1213
+ itemsGeneric: '項',
1214
+ zero: '0',
1215
+ rangeOf: (start, end, total) => `${start}-${end},共 ${total}`,
1216
+ goToPage: (itemLabel, page) => `前往${itemLabel}第 ${page} 頁`,
1217
+ colTitleLink: '連結標題',
1218
+ colTitleFile: '名稱',
1219
+ colTitleDefault: '標題 / 名稱',
1220
+ colLocationLink: 'URL',
1221
+ colLocationFile: '路徑',
1222
+ colLocationDefault: '位置',
1223
+ colSession: '工作階段',
1224
+ kindImage: '圖片',
1225
+ kindFile: '檔案',
1226
+ kindLink: '連結',
1227
+ chat: '聊天',
1228
+ copyUrl: '複製 URL',
1229
+ copyPath: '複製路徑'
1230
+ },
1231
+
1232
+ sidebar: {
1233
+ nav: {
1234
+ 'new-session': '新工作階段',
1235
+ skills: '技能與工具',
1236
+ messaging: '訊息平台',
1237
+ artifacts: '成品'
1238
+ },
1239
+ searchAria: '搜尋工作階段',
1240
+ searchPlaceholder: '搜尋工作階段…',
1241
+ clearSearch: '清除搜尋',
1242
+ noMatch: query => `沒有工作階段符合「${query}」。`,
1243
+ results: '結果',
1244
+ pinned: '已釘選',
1245
+ sessions: '工作階段',
1246
+ cronJobs: '排程任務',
1247
+ groupAriaGrouped: '以單一清單顯示工作階段',
1248
+ groupAriaUngrouped: '依工作區分組工作階段',
1249
+ groupTitleGrouped: '取消分組',
1250
+ groupTitleUngrouped: '依工作區分組',
1251
+ allPinned: '這裡的全部已釘選。取消釘選某個聊天即可在最近中顯示。',
1252
+ shiftClickHint: 'Shift + 點擊聊天以釘選 · 拖曳以重新排序',
1253
+ noWorkspace: '無工作區',
1254
+ newSessionIn: label => `在 ${label} 中新建工作階段`,
1255
+ reorderWorkspace: label => `重新排序工作區 ${label}`,
1256
+ showMoreIn: (count, label) => `在 ${label} 中再顯示 ${count} 個`,
1257
+ loading: '載入中…',
1258
+ loadMore: '載入更多',
1259
+ loadCount: step => `再載入 ${step} 個`,
1260
+ row: {
1261
+ pin: '釘選',
1262
+ unpin: '取消釘選',
1263
+ copyId: '複製 ID',
1264
+ export: '匯出',
1265
+ rename: '重新命名',
1266
+ archive: '封存',
1267
+ newWindow: '新視窗',
1268
+ copyIdFailed: '無法複製工作階段 ID',
1269
+ actionsFor: title => `${title} 的動作`,
1270
+ sessionActions: '工作階段動作',
1271
+ sessionRunning: '工作階段執行中',
1272
+ needsInput: '需要您的輸入',
1273
+ waitingForAnswer: '等待您的回答',
1274
+ handoffOrigin: platform => `從 ${platform} 轉接`,
1275
+ renamed: '已重新命名',
1276
+ renameFailed: '重新命名失敗',
1277
+ renameTitle: '重新命名工作階段',
1278
+ renameDesc: '為此聊天取一個好記的標題。留空則清除。',
1279
+ untitledPlaceholder: '未命名工作階段',
1280
+ ageNow: '剛才',
1281
+ ageDay: '天',
1282
+ ageHour: '時',
1283
+ ageMin: '分'
1284
+ }
1285
+ },
1286
+
1287
+ composer: {
1288
+ message: '訊息',
1289
+ wakingProfile: profile => `正在喚醒 ${profile}…`,
1290
+ placeholderStarting: '正在啟動 Hermes...',
1291
+ placeholderReconnecting: '正在重新連線至 Hermes…',
1292
+ placeholderFollowUp: '傳送後續訊息',
1293
+ newSessionPlaceholders: [
1294
+ '我們要建立什麼?',
1295
+ '給 Hermes 一個任務',
1296
+ '您在想什麼?',
1297
+ '描述您需要什麼',
1298
+ '我們該處理什麼?',
1299
+ '盡管問',
1300
+ '從一個目標開始'
1301
+ ],
1302
+ followUpPlaceholders: [
1303
+ '傳送後續訊息',
1304
+ '補充更多脈絡',
1305
+ '細化此請求',
1306
+ '下一步是什麼?',
1307
+ '繼續推進',
1308
+ '再深入一點',
1309
+ '調整或繼續'
1310
+ ],
1311
+ startVoice: '開始語音對話',
1312
+ queueMessage: '排隊訊息',
1313
+ stop: '停止',
1314
+ send: '傳送',
1315
+ speaking: '說話中',
1316
+ transcribing: '轉寫中',
1317
+ thinking: '思考中',
1318
+ muted: '已靜音',
1319
+ listening: '聆聽中',
1320
+ muteMic: '麥克風靜音',
1321
+ unmuteMic: '取消麥克風靜音',
1322
+ stopListening: '停止聆聽並傳送',
1323
+ stopShort: '停止',
1324
+ endConversation: '結束語音對話',
1325
+ endShort: '結束',
1326
+ stopDictation: '停止聽寫',
1327
+ transcribingDictation: '正在轉寫聽寫',
1328
+ voiceDictation: '語音聽寫',
1329
+ lookupLoading: '查詢中…',
1330
+ lookupNoMatches: '沒有相符項目。',
1331
+ lookupTry: '試試',
1332
+ lookupOr: '或',
1333
+ commonCommands: '常用指令',
1334
+ hotkeys: '快捷鍵',
1335
+ helpFooter: '開啟完整面板 · 退格鍵關閉',
1336
+ commandDescs: {
1337
+ '/help': '指令與快捷鍵的完整清單',
1338
+ '/clear': '開始新工作階段',
1339
+ '/resume': '繼續之前的工作階段',
1340
+ '/details': '控制對話記錄的詳細程度',
1341
+ '/copy': '複製所選內容或最後一條助手訊息',
1342
+ '/quit': '結束 hermes'
1343
+ },
1344
+ hotkeyDescs: {
1345
+ 'composer.mention': '參照檔案、資料夾、URL、git',
1346
+ 'composer.slash': '斜線指令面板',
1347
+ 'composer.help': '此快速說明(刪除以關閉)',
1348
+ 'composer.sendNewline': '傳送 · Shift+Enter 換行',
1349
+ 'composer.sendQueued': '傳送下一個排隊的回合',
1350
+ 'keybinds.openPanel': '所有鍵盤快捷鍵',
1351
+ 'composer.cancel': '關閉彈出視窗 · 取消執行',
1352
+ 'composer.history': '循環彈出視窗 / 歷史記錄'
1353
+ },
1354
+ attachUrlTitle: '附加 URL',
1355
+ attachUrlDesc: 'Hermes 將擷取該頁面並作為此回合的脈絡。',
1356
+ urlPlaceholder: 'https://example.com/post',
1357
+ urlHintPre: '請輸入完整 URL,例如 ',
1358
+ attach: '附加',
1359
+ queued: count => `${count} 個排隊中`,
1360
+ attachmentOnly: '僅附件回合',
1361
+ emptyTurn: '空回合',
1362
+ attachments: count => `${count} 個附件`,
1363
+ editingInComposer: '在輸入框中編輯',
1364
+ editingQueuedInComposer: '在輸入框中編輯排隊回合',
1365
+ queueEdit: '編輯',
1366
+ queueSendNext: '下一個',
1367
+ queueSend: '傳送',
1368
+ queueDelete: '刪除',
1369
+ queueStuckTitle: '佇列訊息未送出',
1370
+ queueStuckBody: '佇列中的對話多次傳送失敗。它仍在佇列中,請重試傳送。',
1371
+ previewUnavailable: '預覽不可用',
1372
+ previewLabel: label => `預覽 ${label}`,
1373
+ couldNotPreview: label => `無法預覽 ${label}`,
1374
+ removeAttachment: label => `移除 ${label}`,
1375
+ dictating: '聽寫中',
1376
+ preparingAudio: '正在準備音訊',
1377
+ speakingResponse: '正在朗讀回覆',
1378
+ readingAloud: '朗讀中',
1379
+ themeSuggestions: '桌面主題建議',
1380
+ noMatchingThemes: '沒有相符的主題。',
1381
+ themeTryPre: '試試 ',
1382
+ themeTryPost: '。',
1383
+ attachLabel: '附加',
1384
+ files: '檔案…',
1385
+ folder: '資料夾…',
1386
+ images: '圖片…',
1387
+ pasteImage: '貼上圖片',
1388
+ url: 'URL…',
1389
+ promptSnippets: '提示詞片段…',
1390
+ tipPre: '提示:輸入 ',
1391
+ tipPost: ' 以行內參照檔案。',
1392
+ snippetsTitle: '提示詞片段',
1393
+ snippetsDesc: '選擇一個起始提示詞放入輸入框。',
1394
+ dropFiles: '拖曳檔案以附加',
1395
+ dropSession: '拖曳以連結此聊天',
1396
+ snippets: {
1397
+ codeReview: {
1398
+ label: '程式碼審查',
1399
+ description: '審查目前的變更是否有回歸、遺漏的邊緣情況和缺少的測試。',
1400
+ text: '請審查這部分是否有錯誤、回歸和缺少的測試。'
1401
+ },
1402
+ implementationPlan: {
1403
+ label: '實作計劃',
1404
+ description: '在動程式碼之前先勾勒方案,讓 diff 保持聚焦。',
1405
+ text: '請在修改程式碼前制定一個簡潔的實作計劃。'
1406
+ },
1407
+ explainThis: {
1408
+ label: '解釋這段',
1409
+ description: '說明所選程式碼的運作方式,並連結到關鍵檔案。',
1410
+ text: '請解釋這是如何運作的,並告訴我關鍵檔案在哪裡。'
1411
+ }
1412
+ }
1413
+ },
1414
+
1415
+ statusStack: {
1416
+ agents: '代理',
1417
+ background: count => `${count} 個背景任務`,
1418
+ subagents: count => `${count} 個子代理`,
1419
+ todos: (done, total) => `任務 ${done}/${total}`,
1420
+ running: '執行中',
1421
+ stop: '停止',
1422
+ dismiss: '關閉',
1423
+ exit: code => `結束碼 ${code}`
1424
+ },
1425
+
1426
+ updates: {
1427
+ stages: {
1428
+ idle: '準備中…',
1429
+ prepare: '準備中…',
1430
+ fetch: '下載中…',
1431
+ pull: '快完成了…',
1432
+ pydeps: '收尾中…',
1433
+ restart: '正在重新啟動 Hermes…',
1434
+ manual: '從終端機更新',
1435
+ error: '更新已暫停'
1436
+ },
1437
+ checking: '正在檢查更新…',
1438
+ checkFailedTitle: '無法檢查更新',
1439
+ tryAgain: '重試',
1440
+ notAvailableTitle: '更新不可用',
1441
+ unsupportedMessage: '此版本的 Hermes 無法在應用程式內自行更新。',
1442
+ connectionRetry: '請檢查網路連線後重試。',
1443
+ latestBody: '您正在執行最新版本。',
1444
+ latestBodyBackend: '後端正在執行最新版本。',
1445
+ allSetTitle: '已是最新版本',
1446
+ availableTitle: '有可用更新',
1447
+ availableBody: '新版 Hermes 已可安裝。',
1448
+ availableTitleBackend: '後端有可用更新',
1449
+ availableBodyBackend: '已連接的 Hermes 後端有新版本可安裝。',
1450
+ availableBodyNoChangelog: '已有新版本可用。此安裝方式無法顯示更新日誌。',
1451
+ updateNow: '立即更新',
1452
+ maybeLater: '稍後再說',
1453
+ moreChanges: count => `另有 ${count} 項變更。`,
1454
+ manualTitle: '從終端機更新',
1455
+ manualBody: '您是從命令列安裝的 Hermes,因此更新也需要在那裡執行。請將此指令貼到終端機:',
1456
+ manualPickedUp: '下次啟動 Hermes 時會使用新版本。',
1457
+ copy: '複製',
1458
+ copied: '已複製',
1459
+ done: '完成',
1460
+ applyingBody: 'Hermes 更新程式會在自己的視窗中接管,並在完成後重新開啟 Hermes。',
1461
+ applyingBodyBackend: '遠端後端正在套用更新並將重新啟動。恢復後 Hermes 會自動重新連線。',
1462
+ applyingClose: 'Hermes 將關閉以套用更新。',
1463
+ errorTitle: '更新未完成',
1464
+ errorBody: '沒有資料遺失。您可以現在重試。',
1465
+ notNow: '暫不',
1466
+ applyStatus: {
1467
+ preparing: '正在更新後端…',
1468
+ pulling: '後端更新中…',
1469
+ restarting: '後端正在重新啟動以載入更新…',
1470
+ notAvailable: '此後端無法更新。',
1471
+ failed: '後端更新失敗。',
1472
+ noReturn: '後端未恢復連線。更新可能未完成——請檢查後端主機。'
1473
+ }
1474
+ },
1475
+
1476
+ install: {
1477
+ stageStates: {
1478
+ pending: '等待中',
1479
+ running: '安裝中',
1480
+ succeeded: '完成',
1481
+ skipped: '已略過',
1482
+ failed: '失敗'
1483
+ },
1484
+ oneTimeTitle: 'Hermes 需要一次性安裝',
1485
+ unsupportedDesc: platform =>
1486
+ `${platform} 暫不支援自動首次啟動安裝。請開啟終端機並執行下面的指令,然後重新啟動此應用程式。之後啟動會略過此步驟。`,
1487
+ installCommand: '安裝指令',
1488
+ copyCommand: '複製指令',
1489
+ viewDocs: '檢視安裝文件',
1490
+ installTo: '將安裝至',
1491
+ retryAfterRun: '我已執行 -- 重試',
1492
+ failedTitle: '安裝失敗',
1493
+ settingUpTitle: '正在設定 Hermes Agent',
1494
+ finishingTitle: '正在收尾',
1495
+ failedDesc:
1496
+ '某個安裝步驟失敗。在 Windows 上,如果另一個 Hermes CLI 或桌面執行個體正在執行,可能會出現這種情況。請停止正在執行的 Hermes 執行個體後重試。可查看下方的詳細資訊或 desktop 記錄中的完整記錄。',
1497
+ activeDesc: '這是一次性設定。Hermes 安裝程式正在下載相依套件並設定您的電腦。之後啟動會略過此步驟。',
1498
+ progress: (completed, total) => `${completed}/${total} 個步驟已完成`,
1499
+ currentStage: stage => ` -- 目前:${stage}`,
1500
+ fetchingManifest: '正在取得安裝程式 manifest...',
1501
+ error: '錯誤',
1502
+ hideOutput: '隱藏安裝程式輸出',
1503
+ showOutput: '顯示安裝程式輸出',
1504
+ lines: count => `${count} 行`,
1505
+ noOutput: '暫無輸出。',
1506
+ cancelling: '取消中...',
1507
+ cancelInstall: '取消安裝',
1508
+ transcriptSaved: '完整記錄已儲存至',
1509
+ copiedOutput: '已複製!',
1510
+ copyOutput: '複製輸出',
1511
+ reloadRetry: '重新載入並重試'
1512
+ },
1513
+
1514
+ onboarding: {
1515
+ headerTitle: '開始設定 Hermes Agent',
1516
+ headerDesc: '連線模型提供方即可開始聊天。大多數選項只需一次點擊。',
1517
+ preparingInstall: 'Hermes 正在完成安裝。首次執行通常不到一分鐘。',
1518
+ starting: '正在啟動 Hermes…',
1519
+ lookingUpProviders: '正在查詢提供方...',
1520
+ collapse: '收合',
1521
+ otherProviders: '其他提供方',
1522
+ haveApiKey: '我有 API 金鑰',
1523
+ chooseLater: '稍後再選擇提供方',
1524
+ recommended: '建議',
1525
+ connected: '已連線',
1526
+ featuredPitch: '一個訂閱,300+ 前沿模型 — 執行 Hermes 的建議方式',
1527
+ openRouterPitch: '一個金鑰,數百個模型 — 穩定的預設選擇',
1528
+ apiKeyOptions: {
1529
+ openrouter: { short: '一個金鑰,多個模型', description: '用一個金鑰存取數百個模型。適合新安裝的預設選擇。' },
1530
+ openai: { short: 'GPT 等級模型', description: '直接存取 OpenAI 模型。' },
1531
+ gemini: { short: 'Gemini 模型', description: '直接存取 Google Gemini 模型。' },
1532
+ xai: { short: 'Grok 模型', description: '直接存取 xAI Grok 模型。' },
1533
+ local: {
1534
+ short: '自託管',
1535
+ description: '將 Hermes 指向本機或自託管的 OpenAI 相容端點(vLLM、llama.cpp、Ollama 等)。'
1536
+ }
1537
+ },
1538
+ backToSignIn: '返回登入',
1539
+ getKey: '取得金鑰',
1540
+ replaceCurrent: '取代目前值',
1541
+ pasteApiKey: '貼上 API 金鑰',
1542
+ couldNotSave: '無法儲存憑證。',
1543
+ connecting: '連線中',
1544
+ update: '更新',
1545
+ flowSubtitles: {
1546
+ pkce: '開啟瀏覽器登入,然後回到這裡繼續',
1547
+ device_code: '在瀏覽器中開啟驗證頁面 — Hermes 會自動連線',
1548
+ loopback: '開啟瀏覽器登入 — Hermes 會自動連線',
1549
+ external: '先在終端機登入一次,然後回來繼續聊天'
1550
+ },
1551
+ startingSignIn: provider => `正在為 ${provider} 啟動登入...`,
1552
+ verifyingCode: provider => `正在透過 ${provider} 驗證您的代碼...`,
1553
+ connectedProvider: provider => `${provider} 已連線`,
1554
+ connectedPicking: provider => `${provider} 已連線。正在選擇預設模型...`,
1555
+ signInFailed: '登入失敗,請重試。',
1556
+ pickDifferentProvider: '選擇其他提供方',
1557
+ signInWith: provider => `使用 ${provider} 登入`,
1558
+ openedBrowser: provider => `已在瀏覽器中開啟 ${provider}。`,
1559
+ authorizeThere: '請在那裡授權 Hermes。',
1560
+ copyAuthCode: '複製授權碼並貼到下方。',
1561
+ pasteAuthCode: '貼上授權碼',
1562
+ reopenAuthPage: '重新開啟授權頁面',
1563
+ autoBrowser: provider => `已在瀏覽器中開啟 ${provider}。請在那裡授權 Hermes,連線會自動完成,無需複製或貼上。`,
1564
+ reopenSignInPage: '重新開啟登入頁面',
1565
+ waitingAuthorize: '等待您授權...',
1566
+ externalPending: provider => `${provider} 透過自己的 CLI 登入。請在終端機執行此指令,然後回來選擇「我已登入」:`,
1567
+ signedIn: '我已登入',
1568
+ deviceCodeOpened: provider => `已在瀏覽器中開啟 ${provider}。請在那裡輸入此代碼:`,
1569
+ reopenVerification: '重新開啟驗證頁面',
1570
+ copy: '複製',
1571
+ defaultModel: '預設模型',
1572
+ freeTier: '免費層',
1573
+ pro: 'Pro',
1574
+ free: '免費',
1575
+ price: (input, output) => `${input} 輸入 / ${output} 輸出 每 Mtok`,
1576
+ change: '變更',
1577
+ startChatting: '開始',
1578
+ docs: provider => `${provider} 文件`
1579
+ },
1580
+
1581
+ modelPicker: {
1582
+ title: '切換模型',
1583
+ current: '目前:',
1584
+ unknown: '(未知)',
1585
+ search: '篩選提供方和模型...',
1586
+ noModels: '找不到模型。',
1587
+ addProvider: '新增提供方',
1588
+ loadFailed: '無法載入模型',
1589
+ noAuthenticatedProviders: '沒有已驗證的提供方。',
1590
+ pro: 'Pro',
1591
+ proNeedsSubscription: 'Pro 模型需要付費 Nous 訂閱。',
1592
+ free: '免費',
1593
+ freeTier: '免費層',
1594
+ priceTitle: '每百萬 Token 的輸入/輸出價格'
1595
+ },
1596
+
1597
+ modelVisibility: {
1598
+ title: '模型',
1599
+ search: '搜尋模型',
1600
+ noAuthenticatedProviders: '沒有已驗證的提供方。',
1601
+ addProvider: '新增提供方…'
1602
+ },
1603
+
1604
+ shell: {
1605
+ windowControls: '視窗控制項',
1606
+ paneControls: '窗格控制項',
1607
+ appControls: '應用程式控制項',
1608
+ modelMenu: {
1609
+ search: '搜尋模型',
1610
+ noModels: '找不到模型',
1611
+ editModels: '編輯模型…',
1612
+ refreshModels: '重新整理模型',
1613
+ fast: '快速',
1614
+ medium: '中'
1615
+ },
1616
+ modelOptions: {
1617
+ noOptions: '此模型沒有可用選項',
1618
+ options: '選項',
1619
+ thinking: '思考',
1620
+ fast: '快速',
1621
+ effort: '推理強度',
1622
+ minimal: '最小',
1623
+ low: '低',
1624
+ medium: '中',
1625
+ high: '高',
1626
+ max: '最高',
1627
+ updateFailed: '模型選項更新失敗',
1628
+ fastFailed: '快速模式更新失敗'
1629
+ },
1630
+ gatewayMenu: {
1631
+ gateway: '閘道',
1632
+ connected: '已連線',
1633
+ connecting: '連線中',
1634
+ offline: '離線',
1635
+ inferenceReady: '推論已就緒',
1636
+ inferenceNotReady: '推論未就緒',
1637
+ checkingInference: '正在檢查推論',
1638
+ disconnected: '已中斷連線',
1639
+ openSystem: '開啟系統面板',
1640
+ connection: label => `連線:${label}`,
1641
+ recentActivity: '最近活動',
1642
+ viewAllLogs: '查看全部記錄 →',
1643
+ messagingPlatforms: '訊息平台'
1644
+ },
1645
+ statusbar: {
1646
+ unknown: '未知',
1647
+ restart: '重新啟動',
1648
+ update: '更新',
1649
+ updateInProgress: '更新中',
1650
+ commitsBehind: (count, branch) => `落後 ${branch} ${count} 個提交`,
1651
+ desktopVersion: version => `Hermes Desktop v${version}`,
1652
+ backendVersion: version => `後端 v${version}`,
1653
+ clientLabel: version => `用戶端 v${version}`,
1654
+ backendLabel: version => `後端 v${version}`,
1655
+ commit: sha => `提交 ${sha}`,
1656
+ branch: branch => `分支 ${branch}`,
1657
+ closeCommandCenter: '關閉命令中心',
1658
+ openCommandCenter: '開啟命令中心',
1659
+ showTerminal: '顯示終端機',
1660
+ hideTerminal: '隱藏終端機',
1661
+ gateway: '閘道',
1662
+ gatewayReady: '就緒',
1663
+ gatewayNeedsSetup: '需要設定',
1664
+ gatewayChecking: '檢查中',
1665
+ gatewayConnecting: '連線中',
1666
+ gatewayOffline: '離線',
1667
+ gatewayRestarting: '重新啟動中…',
1668
+ gatewayTitle: 'Hermes 推論閘道狀態',
1669
+ agents: '代理',
1670
+ closeAgents: '關閉代理',
1671
+ openAgents: '開啟代理',
1672
+ subagents: count => `${count} 個子代理`,
1673
+ failed: count => `${count} 個失敗`,
1674
+ running: count => `${count} 個執行中`,
1675
+ cron: '排程',
1676
+ openCron: '開啟排程工作',
1677
+ turnRunning: '執行中',
1678
+ currentTurnElapsed: '目前回合已用時間',
1679
+ contextUsage: '上下文使用量',
1680
+ session: '工作階段',
1681
+ runtimeSessionElapsed: '執行時工作階段已用時間',
1682
+ yoloOn: 'YOLO 已開啟 — 自動核准危險指令。點擊關閉。Shift+點擊可全域切換。',
1683
+ yoloOff: 'YOLO 已關閉 — 點擊自動核准危險指令。Shift+點擊可全域切換。',
1684
+ modelNone: '無',
1685
+ noModel: '無模型',
1686
+ switchModel: '切換模型',
1687
+ openModelPicker: '開啟模型選擇器',
1688
+ modelTitle: (provider, model) => `模型 · ${provider}:${model}`,
1689
+ providerModelTitle: (provider, model) => `${provider} · ${model}`
1690
+ }
1691
+ },
1692
+
1693
+ rightSidebar: {
1694
+ aria: '右側邊欄',
1695
+ panelsAria: '右側邊欄面板',
1696
+ files: '檔案系統',
1697
+ terminal: '終端機',
1698
+ noFolderSelected: '未選擇資料夾',
1699
+ changeCwdTitle: '變更工作目錄',
1700
+ remotePickerTitle: '選擇遠端資料夾',
1701
+ remotePickerDescription: '瀏覽已連線後端上的資料夾。',
1702
+ remotePickerSelect: '選擇資料夾',
1703
+ folderTip: cwd => `${cwd} — 點擊以變更資料夾`,
1704
+ openFolder: '開啟資料夾',
1705
+ refreshTree: '重新整理檔案樹',
1706
+ collapseAll: '收合所有資料夾',
1707
+ previewUnavailable: '預覽不可用',
1708
+ couldNotPreview: path => `無法預覽 ${path}`,
1709
+ noProjectTitle: '沒有專案',
1710
+ noProjectBody: '從狀態列設定工作目錄後即可瀏覽檔案。',
1711
+ unreadableTitle: '無法讀取',
1712
+ unreadableBody: error => `無法讀取此資料夾 (${error})。`,
1713
+ emptyTitle: '空資料夾',
1714
+ emptyBody: '此資料夾是空的。',
1715
+ treeErrorTitle: '檔案樹錯誤',
1716
+ treeErrorBody: '檔案樹在渲染此資料夾時發生錯誤。',
1717
+ tryAgain: '重試',
1718
+ loadingTree: '正在載入檔案樹',
1719
+ loadingFiles: '正在載入檔案',
1720
+ terminalHide: '隱藏終端機',
1721
+ addToChat: '新增至聊天'
1722
+ },
1723
+
1724
+ preview: {
1725
+ tab: '預覽',
1726
+ closeTab: label => `關閉 ${label}`,
1727
+ closePane: '關閉預覽窗格',
1728
+ loading: '正在載入預覽',
1729
+ unavailable: '預覽不可用',
1730
+ opening: '開啟中...',
1731
+ hide: '隱藏',
1732
+ openPreview: '開啟預覽',
1733
+ sourceLineTitle: '點擊選取 · shift 點擊擴展 · 拖曳至輸入框',
1734
+ source: '原始碼',
1735
+ renderedPreview: '預覽',
1736
+ unknownSize: '大小未知',
1737
+ binaryTitle: '這看起來像二進位檔案',
1738
+ binaryBody: label => `預覽 ${label} 可能會顯示無法讀取的文字。`,
1739
+ largeTitle: '此檔案較大',
1740
+ largeBody: (label, size) => `${label} 大小為 ${size}。Hermes 只會顯示前 512 KB。`,
1741
+ previewAnyway: '仍然預覽',
1742
+ truncated: '顯示前 512 KB。',
1743
+ noInlineTitle: '沒有行內預覽',
1744
+ noInlineBody: mimeType => `${mimeType || '此檔案類型'} 仍可作為脈絡附件。`,
1745
+ console: {
1746
+ deselect: '取消選取項目',
1747
+ select: '選取項目',
1748
+ copyFailed: '無法複製主控台輸出',
1749
+ copyEntry: '複製此項目',
1750
+ sendEntry: '將此項目傳送至聊天',
1751
+ messages: count => `${count} 則主控台訊息`,
1752
+ resize: '調整預覽主控台大小',
1753
+ title: '預覽主控台',
1754
+ selected: count => `已選取 ${count} 個`,
1755
+ sendToChat: '傳送至聊天',
1756
+ copySelected: '複製所選至剪貼簿',
1757
+ copyAll: '全部複製至剪貼簿',
1758
+ copy: '複製',
1759
+ clear: '清除',
1760
+ empty: '暫無主控台訊息。',
1761
+ promptHeader: '預覽主控台:',
1762
+ sentTitle: '已傳送至聊天',
1763
+ sentMessage: count => `已將 ${count} 條記錄新增至輸入框`
1764
+ },
1765
+ web: {
1766
+ appFailedToBoot: '預覽應用程式啟動失敗',
1767
+ serverNotFound: '找不到伺服器',
1768
+ failedToLoad: '預覽載入失敗',
1769
+ tryAgain: '重試',
1770
+ restarting: 'Hermes 正在重新啟動...',
1771
+ askRestart: '請 Hermes 重新啟動伺服器',
1772
+ lookingRestart: taskId => `Hermes 正在尋找要重新啟動的預覽伺服器 (${taskId})`,
1773
+ restartingTitle: '正在重新啟動預覽伺服器',
1774
+ restartingMessage: 'Hermes 正在背景執行。可在預覽主控台查看進度。',
1775
+ startRestartFailed: message => `無法啟動伺服器重新啟動:${message}`,
1776
+ restartFailed: '伺服器重新啟動失敗',
1777
+ hideConsole: '隱藏預覽主控台',
1778
+ showConsole: '顯示預覽主控台',
1779
+ hideDevTools: '隱藏預覽 DevTools',
1780
+ openDevTools: '開啟預覽 DevTools',
1781
+ finishedRestarting: message => `Hermes 已完成預覽伺服器重新啟動${message ? `:${message}` : ''}`,
1782
+ failedRestarting: message => `伺服器重新啟動失敗:${message}`,
1783
+ unknownError: '未知錯誤',
1784
+ restartedTitle: '預覽伺服器已重新啟動',
1785
+ reloadingNow: '正在重新載入預覽。',
1786
+ restartFailedTitle: '預覽重新啟動失敗',
1787
+ restartFailedMessage: 'Hermes 無法重新啟動伺服器。',
1788
+ stillWorking: 'Hermes 仍在執行,但尚未收到重新啟動結果。伺服器指令可能正在前台執行。',
1789
+ workspaceReloading: '工作區已變更,正在重新載入預覽',
1790
+ fileChanged: url => `檔案已變更,正在重新載入預覽:${url}`,
1791
+ filesChanged: (count, url) => `${count} 個檔案變更,正在重新載入預覽:${url}`,
1792
+ watchFailed: message => `無法監看預覽檔案:${message}`,
1793
+ moduleMimeDescription:
1794
+ '模組指令碼使用了錯誤的 MIME 類型。這通常表示靜態檔案伺服器正在服務 Vite/React 應用程式,而不是專案開發伺服器。',
1795
+ loadFailedConsole: (code, message) => `載入失敗${code ? ` (${code})` : ''}:${message}`,
1796
+ unreachableDescription: '無法連線至預覽頁面。',
1797
+ openTarget: url => `開啟 ${url}`,
1798
+ fallbackTitle: '預覽'
1799
+ }
1800
+ },
1801
+
1802
+ assistant: {
1803
+ thread: {
1804
+ loadingSession: '正在載入工作階段',
1805
+ showEarlier: '顯示較早的訊息',
1806
+ loadingResponse: 'Hermes 正在載入回覆',
1807
+ thinking: '思考中',
1808
+ today: time => `今天,${time}`,
1809
+ yesterday: time => `昨天,${time}`,
1810
+ copy: '複製',
1811
+ refresh: '重新整理',
1812
+ moreActions: '更多動作',
1813
+ branchNewChat: '在新聊天中分支',
1814
+ dismissError: '关闭错误',
1815
+ readAloudFailed: '朗讀失敗',
1816
+ preparingAudio: '正在準備音訊...',
1817
+ stopReading: '停止朗讀',
1818
+ readAloud: '朗讀',
1819
+ editMessage: '編輯訊息',
1820
+ stop: '停止',
1821
+ restorePrevious: '還原至上一個檢查點',
1822
+ restoreCheckpoint: '還原檢查點',
1823
+ restoreFromHere: '還原檢查點 — 從此提示重新執行',
1824
+ restoreTitle: '還原至此檢查點?',
1825
+ restoreBody: '此提示之後的所有訊息將從對話中移除,並從此處重新執行該提示。',
1826
+ restoreConfirm: '還原並重新執行',
1827
+ restoreNext: '還原至下一個檢查點',
1828
+ goForward: '前進',
1829
+ sendEdited: '傳送編輯後的訊息',
1830
+ attachingFile: '正在附加…'
1831
+ },
1832
+ approval: {
1833
+ gatewayDisconnected: 'Hermes 閘道未連線',
1834
+ sendFailed: '無法傳送核准回應',
1835
+ run: '執行',
1836
+ command: '指令',
1837
+ moreOptions: '更多核准選項',
1838
+ allowSession: '允許本工作階段',
1839
+ alwaysAllowMenu: '一律允許…',
1840
+ jumpToApproval: '需要核准',
1841
+ reject: '拒絕',
1842
+ alwaysTitle: '一律允許此指令?',
1843
+ alwaysDescription: pattern =>
1844
+ `這會將「${pattern}」模式加入永久允許清單(~/.hermes/config.yaml)。Hermes 對類似指令將不再詢問,包括目前工作階段和未來工作階段。`,
1845
+ alwaysAllow: '一律允許'
1846
+ },
1847
+ clarify: {
1848
+ notReady: '澄清請求尚未就緒',
1849
+ gatewayDisconnected: 'Hermes 閘道未連線',
1850
+ sendFailed: '無法傳送澄清回應',
1851
+ loadingQuestion: '正在載入問題…',
1852
+ other: '其他(輸入您的答案)',
1853
+ placeholder: '輸入您的答案…',
1854
+ shortcutSuffix: ' 傳送',
1855
+ back: '返回',
1856
+ skip: '略過',
1857
+ send: '傳送'
1858
+ },
1859
+ tool: {
1860
+ code: '程式碼',
1861
+ copyCode: '複製程式碼',
1862
+ renderingImage: '正在渲染圖片',
1863
+ copyOutput: '複製輸出',
1864
+ copyCommand: '複製指令',
1865
+ copyContent: '複製內容',
1866
+ copyUrl: '複製 URL',
1867
+ copyResults: '複製結果',
1868
+ copyQuery: '複製查詢',
1869
+ copyFile: '複製檔案',
1870
+ copyPath: '複製路徑',
1871
+ outputAlt: '工具輸出',
1872
+ rawResponse: '原始回應',
1873
+ copyActivity: '複製活動',
1874
+ recoveredOne: '在 1 個失敗步驟後已復原',
1875
+ recoveredMany: count => `在 ${count} 個失敗步驟後已復原`,
1876
+ failedOne: '1 個步驟失敗',
1877
+ failedMany: count => `${count} 個步驟失敗`,
1878
+ statusRunning: '執行中',
1879
+ statusError: '錯誤',
1880
+ statusRecovered: '已復原',
1881
+ statusDone: '完成'
1882
+ }
1883
+ },
1884
+
1885
+ prompts: {
1886
+ gatewayDisconnected: 'Hermes 閘道未連線',
1887
+ sudoSendFailed: '無法傳送 sudo 密碼',
1888
+ secretSendFailed: '無法傳送密鑰',
1889
+ sudoTitle: '管理員密碼',
1890
+ sudoDesc: 'Hermes 需要您的 sudo 密碼來執行特權指令。它只會傳送給您的本機代理。',
1891
+ sudoPlaceholder: 'sudo 密碼',
1892
+ secretTitle: '需要密鑰',
1893
+ secretDesc: 'Hermes 需要一個憑證才能繼續。',
1894
+ secretPlaceholder: '密鑰值'
1895
+ },
1896
+
1897
+ desktop: {
1898
+ audioReadFailed: '無法讀取錄製的音訊',
1899
+ sessionUnavailable: '工作階段不可用',
1900
+ createSessionFailed: '無法建立新工作階段',
1901
+ promptFailed: '提示詞傳送失敗',
1902
+ providerCredentialRequired: '傳送第一則訊息前請先新增提供方憑證。',
1903
+ emptySlashCommand: '空的斜線指令',
1904
+ desktopCommands: '桌面端指令',
1905
+ skillCommandsAvailable: count => `${count} 個技能指令可用。`,
1906
+ warningLine: message => `警告:${message}`,
1907
+ yoloArmed: '此聊天已啟用 YOLO',
1908
+ yoloOff: 'YOLO 已關閉',
1909
+ yoloSystem: active => `此工作階段 YOLO ${active ? '已開啟' : '已關閉'}`,
1910
+ yoloTitle: 'YOLO',
1911
+ yoloToggleFailed: '無法切換 YOLO',
1912
+ profileStatus: current => `設定檔:${current}。使用 /profile <name> 或「新工作階段」選擇器在其他設定檔中開始聊天。`,
1913
+ unknownProfile: '未知設定檔',
1914
+ noProfileNamed: (target, available) => `沒有名為「${target}」的設定檔。可用的:${available}`,
1915
+ newChatsProfile: name => `新聊天將使用設定檔 ${name}。`,
1916
+ setProfileFailed: '設定設定檔失敗',
1917
+ sttDisabled: '設定中已停用語音轉文字。',
1918
+ stopFailed: '停止失敗',
1919
+ regenerateFailed: '重新生成失敗',
1920
+ editFailed: '編輯失敗',
1921
+ resumeFailed: '繼續失敗',
1922
+ resumeStrandedTitle: '無法載入此工作階段',
1923
+ resumeStrandedBody: '與此工作階段的連線失敗,自動重試已停止。請確認閘道正在執行,然後重試。',
1924
+ resumeRetry: '重試',
1925
+ nothingToBranch: '沒有可分支的內容',
1926
+ branchNeedsChat: '分支前請先開始或繼續一個聊天。',
1927
+ sessionBusy: '工作階段忙碌中',
1928
+ branchStopCurrent: '分支此聊天前請先停止目前回合。',
1929
+ branchNoText: '此訊息沒有可用於分支的文字。',
1930
+ branchTitle: '分支',
1931
+ branchFailed: '分支失敗',
1932
+ deleteFailed: '刪除失敗',
1933
+ archived: '已封存',
1934
+ archiveFailed: '封存失敗',
1935
+ cwdChangeFailed: '工作目錄變更失敗',
1936
+ cwdStagedTitle: '工作目錄已暫存',
1937
+ cwdStagedMessage: '重新啟動桌面後端後,工作目錄變更才會套用至此作用中工作階段。',
1938
+ modelSwitchFailed: '模型切換失敗',
1939
+ sessionExported: '工作階段已匯出',
1940
+ sessionExportFailed: '無法匯出工作階段',
1941
+ imageSaved: '圖片已儲存',
1942
+ downloadStarted: '下載已開始',
1943
+ restartToUseSaveImage: '重新啟動 Hermes Desktop 後可使用儲存圖片。',
1944
+ restartToSaveImages: '重新啟動 Hermes Desktop 以儲存圖片',
1945
+ imageDownloadFailed: '圖片下載失敗',
1946
+ openImage: '開啟圖片',
1947
+ downloadImage: '下載圖片',
1948
+ savingImage: '正在儲存圖片',
1949
+ imagePreviewFailed: '圖片預覽失敗',
1950
+ imageAttach: '附加圖片',
1951
+ imageWriteFailed: '無法將圖片寫入磁碟。',
1952
+ imageAttachFailed: '附加圖片失敗',
1953
+ attachImages: '附加圖片',
1954
+ clipboard: '剪貼簿',
1955
+ noClipboardImage: '剪貼簿中沒有圖片',
1956
+ clipboardPasteFailed: '剪貼簿貼上失敗',
1957
+ dropFiles: '拖曳檔案',
1958
+ handoff: {
1959
+ pickPlatform: '選擇目標平台',
1960
+ success: platform => `已移交到 ${platform}。隨時可在此處恢復。`,
1961
+ systemNote: platform => `↻ 已移交到 ${platform} — 隨時可在此處恢復。`,
1962
+ failed: error => `移交失敗:${error}`,
1963
+ timedOut: '等待閘道逾時。`hermes gateway` 是否正在執行?'
1964
+ }
1965
+ },
1966
+
1967
+ errors: {
1968
+ genericFailure: '發生錯誤',
1969
+ boundaryTitle: '介面出現問題',
1970
+ boundaryDesc: '此檢視遇到意外錯誤。您的聊天和設定是安全的。',
1971
+ reloadWindow: '重新載入視窗',
1972
+ openLogs: '開啟記錄'
1973
+ },
1974
+
1975
+ ui: {
1976
+ search: {
1977
+ clear: '清除搜尋'
1978
+ },
1979
+ pagination: {
1980
+ label: '分頁',
1981
+ previous: '上一頁',
1982
+ previousAria: '前往上一頁',
1983
+ next: '下一頁',
1984
+ nextAria: '前往下一頁'
1985
+ },
1986
+ sidebar: {
1987
+ title: '側邊欄',
1988
+ description: '顯示行動裝置側邊欄。',
1989
+ toggle: '切換側邊欄'
1990
+ }
1991
+ }
1992
+ })