@surething/cockpit 1.0.254 → 1.0.255

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 (208) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +3 -3
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/prerender-manifest.json +3 -3
  5. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  6. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next-prod/server/app/_global-error.html +1 -1
  8. package/.next-prod/server/app/_global-error.rsc +1 -1
  9. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next-prod/server/app/_not-found.html +2 -2
  18. package/.next-prod/server/app/_not-found.rsc +3 -3
  19. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  20. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  22. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  25. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  26. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  27. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  28. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  29. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  30. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  31. package/.next-prod/server/app/api/chat/pty-input/route.js.nft.json +1 -1
  32. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  33. package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
  34. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  35. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  37. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  39. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  41. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  43. package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
  45. package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  47. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  49. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  51. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  53. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  55. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  57. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  59. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  61. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  63. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  65. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  67. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
  69. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  71. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  73. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  75. package/.next-prod/server/app/api/global-state/route.js +1 -1
  76. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  77. package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
  79. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  81. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  83. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  85. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  87. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  89. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  91. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  93. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  95. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  97. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  99. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  101. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  103. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  105. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  107. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/project-state/route.js +1 -1
  109. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  111. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  113. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  115. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  117. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  119. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  121. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/prompts/config/route.js.nft.json +1 -1
  123. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  125. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  127. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  129. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  133. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  134. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  135. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  136. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  139. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/review/route.js +1 -1
  141. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/scheduled-tasks/route.js +3 -2
  145. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  146. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  149. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  151. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  156. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  157. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  158. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  159. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  160. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  161. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  162. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  163. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  164. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  165. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  166. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  167. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
  168. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  169. package/.next-prod/server/app/m/page.js +1 -1
  170. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  171. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  172. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  173. package/.next-prod/server/app/page.js.nft.json +1 -1
  174. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  175. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  176. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  177. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  178. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  179. package/.next-prod/server/app-paths-manifest.json +3 -3
  180. package/.next-prod/server/chunks/6548.js +1 -0
  181. package/.next-prod/server/chunks/9419.js +5 -3
  182. package/.next-prod/server/chunks/9658.js +8 -8
  183. package/.next-prod/server/chunks/9830.js +1 -1
  184. package/.next-prod/server/middleware-build-manifest.js +1 -1
  185. package/.next-prod/server/pages/404.html +2 -2
  186. package/.next-prod/server/pages/500.html +1 -1
  187. package/.next-prod/server/server-reference-manifest.json +1 -1
  188. package/.next-prod/static/chunks/6260-d083071702689ed3.js +25 -0
  189. package/.next-prod/static/chunks/6784-11dddca80af27810.js +0 -0
  190. package/.next-prod/static/chunks/{9530-870e97119b45f025.js → 9530-71cba64daec9add7.js} +1 -1
  191. package/.next-prod/static/chunks/app/m/{page-6c37d1fb9db9b9d6.js → page-56faaf1f36f2588e.js} +1 -1
  192. package/.next-prod/static/css/7a396fd0cfd8a652.css +1 -0
  193. package/.next-prod/trace +14 -14
  194. package/.next-prod/trace-build +1 -1
  195. package/dist/{chunk-H3JSYJCZ.mjs → chunk-ALNGHUH4.mjs} +20 -2
  196. package/dist/{chunk-HIW2SGCF.mjs → chunk-LEWYJIIE.mjs} +1 -1
  197. package/dist/{chunk-7G4OXJJ4.mjs → chunk-UBB3LJGR.mjs} +4 -0
  198. package/dist/httpApi.mjs +2 -2
  199. package/dist/scheduledTasks.mjs +2432 -20
  200. package/dist/{server-O434I7QD.mjs → server-D7CF4MB3.mjs} +2 -2
  201. package/dist/wsServer.mjs +4 -4
  202. package/package.json +1 -1
  203. package/.next-prod/server/chunks/6038.js +0 -1
  204. package/.next-prod/static/chunks/6260-f566ccfbd8e8809c.js +0 -25
  205. package/.next-prod/static/chunks/6784-d35737ae5f04a2d2.js +0 -0
  206. package/.next-prod/static/css/05889d4d244bd7d5.css +0 -1
  207. /package/.next-prod/static/{xXMzxSYQCcHCrntVXcycC → JD1OQjo1JkC0HtJ7Nawnu}/_buildManifest.js +0 -0
  208. /package/.next-prod/static/{xXMzxSYQCcHCrntVXcycC → JD1OQjo1JkC0HtJ7Nawnu}/_ssgManifest.js +0 -0
@@ -10,7 +10,7 @@ import {
10
10
  setRunAbort,
11
11
  startRun,
12
12
  updateGlobalState
13
- } from "./chunk-H3JSYJCZ.mjs";
13
+ } from "./chunk-ALNGHUH4.mjs";
14
14
  import {
15
15
  AgentError,
16
16
  AppRuntime,
@@ -34,6 +34,7 @@ import {
34
34
  getDeepseekBuiltinSessionPath,
35
35
  getDeepseekSessionPath,
36
36
  getOllamaSessionPath,
37
+ getSessionFilePath,
37
38
  mutateJsonFile,
38
39
  notePendingRecord,
39
40
  readJsonFile,
@@ -41,7 +42,7 @@ import {
41
42
  settlePendingRecord,
42
43
  withFileLock,
43
44
  writeJsonFile
44
- } from "./chunk-7G4OXJJ4.mjs";
45
+ } from "./chunk-UBB3LJGR.mjs";
45
46
  import {
46
47
  __export
47
48
  } from "./chunk-7P6ASYW6.mjs";
@@ -3177,23 +3178,35 @@ function readSessionMessages(root, cwd, sessionId) {
3177
3178
  }
3178
3179
  }
3179
3180
  const messages = [];
3181
+ let assistantParts = [];
3182
+ const flushAssistant = () => {
3183
+ const parts = assistantParts.filter((p) => p.type !== "text" || String(p.text || "").length > 0);
3184
+ assistantParts = [];
3185
+ if (parts.length === 0) return;
3186
+ if (parts.length === 1 && parts[0].type === "text") {
3187
+ messages.push({ role: "assistant", content: String(parts[0].text || "") });
3188
+ } else {
3189
+ messages.push({ role: "assistant", content: parts });
3190
+ }
3191
+ };
3180
3192
  for (const entry of transcriptEntries) {
3181
3193
  if (entry.type === "user" && entry.message?.role === "user" && Array.isArray(entry.message.content)) {
3182
3194
  const text = entry.message.content.filter((b) => b.type === "text").map((b) => b.text || "").join("\n");
3195
+ flushAssistant();
3196
+ if (!text) continue;
3183
3197
  messages.push({ role: "user", content: text });
3184
3198
  continue;
3185
3199
  }
3186
3200
  if (entry.type === "assistant" && Array.isArray(entry.message?.content)) {
3187
- const parts = [];
3188
3201
  for (const block of entry.message.content) {
3189
3202
  if (block.type === "text") {
3190
- parts.push({ type: "text", text: block.text || "" });
3203
+ assistantParts.push({ type: "text", text: block.text || "" });
3191
3204
  } else if (block.type === "tool_use") {
3192
3205
  const toolCallId = block.id || "";
3193
3206
  if (!toolCallId) continue;
3194
3207
  if (!toolResultIds.has(toolCallId)) continue;
3195
3208
  const toolName = block.name || toolNameById.get(toolCallId) || "tool";
3196
- parts.push({
3209
+ assistantParts.push({
3197
3210
  type: "tool-call",
3198
3211
  toolCallId,
3199
3212
  toolName,
@@ -3201,13 +3214,6 @@ function readSessionMessages(root, cwd, sessionId) {
3201
3214
  });
3202
3215
  }
3203
3216
  }
3204
- if (parts.length === 1 && parts[0].type === "text") {
3205
- messages.push({ role: "assistant", content: String(parts[0].text || "") });
3206
- } else if (parts.length > 0) {
3207
- messages.push({ role: "assistant", content: parts });
3208
- } else {
3209
- messages.push({ role: "assistant", content: "" });
3210
- }
3211
3217
  continue;
3212
3218
  }
3213
3219
  if (entry.type === "user" && Array.isArray(entry.message?.content)) {
@@ -3218,6 +3224,7 @@ function readSessionMessages(root, cwd, sessionId) {
3218
3224
  const toolCallId = tr.tool_use_id || "";
3219
3225
  if (!toolCallId) continue;
3220
3226
  if (!toolCallIds.has(toolCallId)) continue;
3227
+ flushAssistant();
3221
3228
  const toolName = toolNameById.get(toolCallId) || "tool";
3222
3229
  messages.push({
3223
3230
  role: "tool",
@@ -3233,6 +3240,7 @@ function readSessionMessages(root, cwd, sessionId) {
3233
3240
  }
3234
3241
  }
3235
3242
  }
3243
+ flushAssistant();
3236
3244
  return messages;
3237
3245
  }
3238
3246
  function appendSessionLine(root, cwd, sessionId, line) {
@@ -17368,6 +17376,15 @@ ${summary}`;
17368
17376
  }
17369
17377
 
17370
17378
  // packages/feature/agent/src/server/engines/builtinAgent/stream.ts
17379
+ function formatToolError(error48) {
17380
+ if (error48 instanceof Error) return error48.message || String(error48);
17381
+ if (typeof error48 === "string") return error48;
17382
+ try {
17383
+ return JSON.stringify(error48);
17384
+ } catch {
17385
+ return String(error48);
17386
+ }
17387
+ }
17371
17388
  async function consumeStream(fullStream, safeEnqueue, _sessionId, opts) {
17372
17389
  let text = "";
17373
17390
  const toolCalls = [];
@@ -17415,7 +17432,7 @@ async function consumeStream(fullStream, safeEnqueue, _sessionId, opts) {
17415
17432
  }
17416
17433
  case "tool-result": {
17417
17434
  const content = String(part.output);
17418
- opts?.onToolResult?.(part.toolCallId, content);
17435
+ opts?.onToolResult?.(part.toolCallId, content, false);
17419
17436
  safeEnqueue(
17420
17437
  `data: ${JSON.stringify({
17421
17438
  type: "user",
@@ -17424,6 +17441,27 @@ async function consumeStream(fullStream, safeEnqueue, _sessionId, opts) {
17424
17441
  }
17425
17442
  })}
17426
17443
 
17444
+ `
17445
+ );
17446
+ break;
17447
+ }
17448
+ // A tool that threw (or whose input failed schema validation) emits `tool-error`,
17449
+ // never `tool-result`. Skipping it left the tool_use dangling in the transcript;
17450
+ // on the NEXT turn that call was dropped on replay, the assistant message it lived
17451
+ // in became empty, and the provider rejected the whole request with
17452
+ // "Invalid assistant message: content or tool_calls must be set" — a permanently
17453
+ // unusable session. Every tool call must close with a result line, success or not.
17454
+ case "tool-error": {
17455
+ const content = formatToolError(part.error);
17456
+ opts?.onToolResult?.(part.toolCallId, content, true);
17457
+ safeEnqueue(
17458
+ `data: ${JSON.stringify({
17459
+ type: "user",
17460
+ message: {
17461
+ content: [{ type: "tool_result", tool_use_id: part.toolCallId, content, is_error: true }]
17462
+ }
17463
+ })}
17464
+
17427
17465
  `
17428
17466
  );
17429
17467
  break;
@@ -17542,13 +17580,13 @@ async function runBuiltinAgent(ctx, config2) {
17542
17580
  } catch {
17543
17581
  }
17544
17582
  },
17545
- onToolResult: (toolUseId, content) => {
17583
+ onToolResult: (toolUseId, content, isError) => {
17546
17584
  try {
17547
17585
  pendingToolCalls.delete(toolUseId);
17548
17586
  appendToolResult(sessionsRoot, cwd, sid, toolUseId, content, {
17549
17587
  uuid: randomUUID3(),
17550
17588
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
17551
- is_error: false
17589
+ is_error: Boolean(isError)
17552
17590
  });
17553
17591
  } catch {
17554
17592
  }
@@ -18018,8 +18056,2366 @@ function getEngineSpec(engine) {
18018
18056
  return SPECS[engine ?? "claude"];
18019
18057
  }
18020
18058
 
18059
+ // packages/shared/i18n/src/index.ts
18060
+ import i18n from "i18next";
18061
+
18062
+ // packages/shared/i18n/locales/en.json
18063
+ var en_default2 = {
18064
+ common: {
18065
+ save: "Save",
18066
+ cancel: "Cancel",
18067
+ delete: "Delete",
18068
+ close: "Close",
18069
+ copy: "Copy",
18070
+ edit: "Edit",
18071
+ file: "File",
18072
+ codeMap: "Code Map",
18073
+ diff: "Diff",
18074
+ confirm: "Confirm",
18075
+ loading: "Loading...",
18076
+ search: "Search",
18077
+ refresh: "Refresh",
18078
+ retry: "Retry",
18079
+ submit: "Submit",
18080
+ copied: "Copied",
18081
+ saved: "Saved",
18082
+ failed: "Failed",
18083
+ noMatch: "No matches",
18084
+ noData: "No data",
18085
+ done: "Done",
18086
+ justNow: "just now",
18087
+ minutesAgo: "{{count}}m ago",
18088
+ hoursAgo: "{{count}}h ago",
18089
+ daysAgo: "{{count}}d ago",
18090
+ monthsAgo: "{{count}}mo ago",
18091
+ yearsAgo: "{{count}}y ago",
18092
+ saveFailed: "Save failed",
18093
+ copyFailed: "Copy failed",
18094
+ deleteFailed: "Delete failed",
18095
+ operationFailed: "Operation failed",
18096
+ copiedPath: "Path copied",
18097
+ copyPath: "Copy path",
18098
+ openInConsole: "Open in Console bubble",
18099
+ copyAbsPath: "Copy absolute path",
18100
+ loadMore: "Load more",
18101
+ noResult: "No results",
18102
+ selected: "Selected",
18103
+ selectAll: "Select all",
18104
+ hint: "Notice",
18105
+ confirmBtn: "OK",
18106
+ cancelBtn: "Cancel",
18107
+ preview: "Preview",
18108
+ readable: "Readable",
18109
+ previous: "Previous",
18110
+ next: "Next",
18111
+ all: "All",
18112
+ input: "Input",
18113
+ result: "Result",
18114
+ line: "Line",
18115
+ lines: "lines",
18116
+ running: "Running",
18117
+ connecting: "Connecting",
18118
+ connected: "Connected",
18119
+ connectionFailed: "Connection failed",
18120
+ builtin: "Built-in",
18121
+ global: "Global",
18122
+ project: "Project",
18123
+ current: "Current"
18124
+ },
18125
+ htmlApps: {
18126
+ addTooltip: "Add to HTML panel",
18127
+ added: "Added to HTML panel",
18128
+ alreadyAdded: "Already added",
18129
+ addFailed: "Failed to add"
18130
+ },
18131
+ skills: {
18132
+ addTooltip: "Add to Skills panel",
18133
+ added: "Added to Skills panel",
18134
+ alreadyAdded: "Already added",
18135
+ addFailed: "Failed to add",
18136
+ title: "Skills",
18137
+ searchPlaceholder: "Search skills...",
18138
+ clearSearch: "Clear",
18139
+ addSkill: "Add Skill",
18140
+ emptyNoSkills: 'No skills yet. Click "Add Skill" to add one.',
18141
+ emptyNoMatch: "No skills match your search.",
18142
+ pathLabel: "Absolute path to SKILL.md",
18143
+ pathPlaceholder: "/Users/you/.../skills/foo/SKILL.md",
18144
+ add: "Add",
18145
+ adding: "Adding...",
18146
+ invalid: "Invalid",
18147
+ copyPath: "Copy path",
18148
+ noDescription: "No description",
18149
+ previewTitle: "Skill Preview",
18150
+ source: "Source",
18151
+ cannotRead: "File cannot be read."
18152
+ },
18153
+ toast: {
18154
+ savedSuccess: "Saved",
18155
+ saveFailed: "Save failed",
18156
+ copiedName: "Copied: {{name}}",
18157
+ copyFailed: "Copy failed",
18158
+ deleteFailed: "Delete failed",
18159
+ operationFailed: "Operation failed",
18160
+ staged: "Staged",
18161
+ stageFailed: "Stage failed",
18162
+ unstaged: "Unstaged",
18163
+ unstageFailed: "Unstage failed",
18164
+ stagedNFiles: "Staged {{count}} files",
18165
+ unstagedNFiles: "Unstaged {{count}} files",
18166
+ discardFailed: "Discard failed",
18167
+ discardedNFiles: "Discarded changes in {{count}} files",
18168
+ stagedAllFiles: "All files staged",
18169
+ deletedFile: "File deleted",
18170
+ discardedChanges: "Changes discarded",
18171
+ pastedFile: "Pasted: {{name}}",
18172
+ pasteFailed: "Paste failed",
18173
+ noFileToPaste: "No file to paste",
18174
+ createdFile: "Created: {{name}}",
18175
+ createFailed: "Create failed",
18176
+ movedToTrash: "Moved to trash: {{name}}",
18177
+ copiedPageUrl: "Page URL copied",
18178
+ copiedDirPath: "Directory path copied",
18179
+ switchedToBranch: "Switched to {{branch}}",
18180
+ switchBranchFailed: "Branch switch failed",
18181
+ loadBranchFailed: "Failed to load branches",
18182
+ copiedCommand: "Copied: {{command}}",
18183
+ copiedMessage: "Message copied",
18184
+ copiedUrl: "URL copied",
18185
+ copiedOutput: "Output copied",
18186
+ copiedCmd: "Command copied",
18187
+ copiedComment: "Comment copied",
18188
+ copiedAllComments: "All comments copied",
18189
+ copiedFileContent: "File content copied",
18190
+ copiedQA: "Copied {{count}} Q&A",
18191
+ copiedAllQA: "All Q&A copied",
18192
+ sentQA: "Sent to AI",
18193
+ readFileFailed: "Failed to read file",
18194
+ reviewCreated: "Review created, link copied",
18195
+ reviewUpdated: "Review updated, link copied",
18196
+ reviewCreateFailed: "Failed to create review",
18197
+ sharingClosed: "Sharing disabled",
18198
+ sharingCloseFailed: "Failed to disable sharing",
18199
+ linkCopied: "Link copied",
18200
+ addCommentFailed: "Failed to add comment",
18201
+ deleteCommentFailed: "Failed to delete comment",
18202
+ editCommentFailed: "Failed to edit comment",
18203
+ addReplyFailed: "Failed to add reply",
18204
+ deleteReplyFailed: "Failed to delete reply",
18205
+ editReplyFailed: "Failed to edit reply",
18206
+ disconnected: "Disconnected: {{id}}",
18207
+ pluginReloading: "Reloading extension...",
18208
+ worktreeCreateSuccess: "Worktree created: {{name}}",
18209
+ worktreeCreateFailed: "Failed to create worktree",
18210
+ worktreeLoadFailed: "Failed to load worktree list",
18211
+ worktreeDeleted: "Worktree deleted",
18212
+ worktreeDeleteFailed: "Failed to delete worktree",
18213
+ worktreeLocked: "Locked",
18214
+ worktreeUnlocked: "Unlocked"
18215
+ },
18216
+ workspace: {
18217
+ selectProject: "Select a project to start",
18218
+ searchProjectPath: "Search project path...",
18219
+ loadingProjects: "Loading projects...",
18220
+ projectNotFound: "No projects found",
18221
+ sessions: "{{count}} sessions",
18222
+ loadingSessions: "Loading sessions...",
18223
+ noSessions: "No sessions",
18224
+ loadingText: "Loading...",
18225
+ openProject: "Open Project",
18226
+ expandSidebar: "Expand sidebar",
18227
+ collapseSidebar: "Collapse sidebar",
18228
+ notes: "Notes",
18229
+ skills: "Skills",
18230
+ settings: "Settings",
18231
+ help: "Help",
18232
+ updateAvailable: "v{{version}} available",
18233
+ copyUpgradeCommand: "Copy cockpit update",
18234
+ viewChangelog: "View changelog",
18235
+ upgradeCommandCopied: "Copied `cockpit update`",
18236
+ projectNotes: "Project Notes",
18237
+ closeProject: "Close project"
18238
+ },
18239
+ mobile: {
18240
+ useDesktop: "Desktop",
18241
+ messagePlaceholder: "Message\u2026",
18242
+ send: "Send",
18243
+ stop: "Stop",
18244
+ enableNotifications: "Enable notifications",
18245
+ disableNotifications: "Disable notifications",
18246
+ notifyError: "Could not enable notifications"
18247
+ },
18248
+ sessions: {
18249
+ recentSessions: "Recent Sessions",
18250
+ runningCount: "{{count}} running",
18251
+ unreadCount: "{{count}} unread",
18252
+ noSessions: "No sessions yet",
18253
+ running: "Running",
18254
+ done: "Done",
18255
+ pinnedSessions: "Pinned Sessions",
18256
+ noPinnedSessions: "No pinned sessions. Click the pin icon in the tab bar to add.",
18257
+ editTitle: "Edit title",
18258
+ remove: "Remove",
18259
+ projectSessions: "Project Sessions",
18260
+ browseAllSessions: "Browse all sessions",
18261
+ sessionList: "Session List",
18262
+ searchSessions: "Search sessions...",
18263
+ searchRecentSessions: "Search recent sessions",
18264
+ loadSessionsFailed: "Failed to load sessions",
18265
+ loadingSessions: "Loading sessions...",
18266
+ noMatchingSessions: "No matching sessions",
18267
+ noSessionsYet: "No sessions yet",
18268
+ projectList: "Project List",
18269
+ openFolder: "Open Folder",
18270
+ selectingFolder: "Selecting...",
18271
+ loadingHistory: "Loading history..."
18272
+ },
18273
+ scheduledTasks: {
18274
+ title: "Scheduled Tasks",
18275
+ aboutToTrigger: "About to trigger",
18276
+ secondsLater: "in {{count}}s",
18277
+ minutesLater: "in {{count}}m",
18278
+ hoursMinutesLater: "in {{h}}h {{m}}m",
18279
+ hoursLater: "in {{h}}h",
18280
+ onceType: "Once ({{minutes}}min)",
18281
+ everyNMinutes: "Every {{minutes}}min",
18282
+ completed: "Completed",
18283
+ paused: "Paused",
18284
+ activeCount: "{{running}} active",
18285
+ pausedCount: "{{paused}} paused",
18286
+ noScheduledTasks: "No scheduled tasks. Click the clock button in the chat input to create one.",
18287
+ lastResult: "Last",
18288
+ runNow: "Run now",
18289
+ resume: "Resume",
18290
+ pause: "Pause",
18291
+ completedCount: "Completed ({{count}})",
18292
+ success: "Success",
18293
+ failure: "Failed",
18294
+ createTask: "Create Scheduled Task",
18295
+ editTask: "Edit Scheduled Task",
18296
+ sendMessage: "Message",
18297
+ messagePlaceholder: "Enter message to send...",
18298
+ taskFile: "Task File",
18299
+ taskFilePlaceholder: "/Users/you/project/tasks/daily-report.md",
18300
+ taskFileHint: "Absolute path. On each fire the agent reads this file first and acts on what it describes \u2014 edits take effect on the next run.",
18301
+ taskFilePromptHeader: "Read this task file first, then act accordingly:",
18302
+ type: "Type",
18303
+ once: "Once",
18304
+ interval: "Interval",
18305
+ quickSelect: "Quick Select",
18306
+ customCron: "Custom Cron Expression",
18307
+ customMinutes: "Custom minutes",
18308
+ cronPlaceholder: "e.g. 0 9 * * 1-5 (weekdays at 9am)",
18309
+ cronFormat: "Format: min hour day month weekday (e.g. 0 9 * * 1-5)",
18310
+ minutesPlaceholder: "Minutes",
18311
+ limitTimeRange: "Limit execution time range",
18312
+ to: "to",
18313
+ saveBtn: "Save ({{modKey}}\u21A9)",
18314
+ createBtn: "Create ({{modKey}}\u21A9)",
18315
+ "5minLater": "In 5 minutes",
18316
+ "15minLater": "In 15 minutes",
18317
+ "30minLater": "In 30 minutes",
18318
+ "1hourLater": "In 1 hour",
18319
+ every15min: "Every 15 min",
18320
+ every30min: "Every 30 min",
18321
+ every1hour: "Every 1 hour",
18322
+ every2hours: "Every 2 hours",
18323
+ daily9am: "Daily 09:00",
18324
+ daily6pm: "Daily 18:00",
18325
+ weeklyMon9am: "Mon 09:00",
18326
+ monthly1st9am: "1st of month 09:00"
18327
+ },
18328
+ cron: {
18329
+ everyNMinutes: "Every {{n}} minutes",
18330
+ everyNHours: "Every {{n}} hours",
18331
+ everyMinute: "Every minute",
18332
+ everyHourAtMin: "Every hour at minute {{m}}",
18333
+ hourlyEveryMin: "{{h}}:xx every minute",
18334
+ daily: "Daily at {{time}}",
18335
+ weekdays: "Weekdays",
18336
+ weekends: "Weekends",
18337
+ dowSun: "Sun",
18338
+ dowMon: "Mon",
18339
+ dowTue: "Tue",
18340
+ dowWed: "Wed",
18341
+ dowThu: "Thu",
18342
+ dowFri: "Fri",
18343
+ dowSat: "Sat",
18344
+ monthPrefix: "",
18345
+ dayOfMonth: "",
18346
+ dayRange: "{{a}}th to {{b}}th",
18347
+ weekdayPrefix: "",
18348
+ weekdayRange: "{{a}} to {{b}}"
18349
+ },
18350
+ blockViewer: {
18351
+ empty: {
18352
+ body: "Select a file in the left tree to see its code map.",
18353
+ hint: "or press \u2318K to search."
18354
+ },
18355
+ fileMode: {
18356
+ loading: "Loading\u2026",
18357
+ notFound: "This file is not indexed (unsupported language or beyond the file cap)."
18358
+ },
18359
+ search: {
18360
+ tooltip: "Search (\u2318K)",
18361
+ hint: "Start typing to search",
18362
+ noResults: "No matches",
18363
+ files: "Files",
18364
+ symbols: "Symbols"
18365
+ },
18366
+ viewerToggle: {
18367
+ toBlock: "Show code map",
18368
+ toCode: "Back to code view"
18369
+ },
18370
+ toc: {
18371
+ title: "this file",
18372
+ empty: "No functions detected.",
18373
+ notIndexed: "File not in project graph (unsupported language / not in git tracked set / file cap reached)."
18374
+ },
18375
+ history: {
18376
+ title: "history",
18377
+ empty: "Click an input or output pin to begin tracing.",
18378
+ clear: "Clear history"
18379
+ },
18380
+ refresh: "Rebuild project graph",
18381
+ retry: "Retry"
18382
+ },
18383
+ blockDiffViewer: {
18384
+ loading: "Building code map\u2026",
18385
+ unsupported: "Code map diff is not available for this file type.",
18386
+ unsupportedHint: "Switch back to the regular diff view to read it.",
18387
+ error: "Code map diff failed: {{message}}",
18388
+ noBlockChanges: "No code-map changes (formatting / whitespace only).",
18389
+ noBefore: "(new)",
18390
+ noAfter: "(removed)",
18391
+ kind: {
18392
+ added: "added",
18393
+ deleted: "deleted",
18394
+ modified: "modified"
18395
+ }
18396
+ },
18397
+ fileBrowser: {
18398
+ directoryTree: "Tree",
18399
+ searchTab: "Search",
18400
+ recentTab: "Recent",
18401
+ changesTab: "Status",
18402
+ historyTab: "History",
18403
+ searchFiles: "Search files...",
18404
+ clear: "Clear",
18405
+ exactMatchOn: "Exact match (on)",
18406
+ exactMatchOff: "Exact match (off)",
18407
+ refreshTree: "Refresh directory tree",
18408
+ collapseAll: "Collapse all directories",
18409
+ searchFileContent: "Search file contents...",
18410
+ caseSensitive: "Case sensitive",
18411
+ wholeWord: "Whole word",
18412
+ regex: "Regex",
18413
+ fileTypes: "File types (ts,tsx)",
18414
+ compareMode: "Compare",
18415
+ compareModeOff: "Close branch comparison",
18416
+ compareModeOn: "Compare with selected branch",
18417
+ createFile: "New File",
18418
+ createFileIn: "New File (in {{path}}/)",
18419
+ fileName: "File name...",
18420
+ noRecentFiles: "No recent files",
18421
+ stagingArea: "Staged ({{count}})",
18422
+ changesSummary_one: "{{count}} change",
18423
+ changesSummary_other: "{{count}} changes",
18424
+ noChanges: "No changes in working tree",
18425
+ refreshChanges: "Refresh changes",
18426
+ unstageAll: "Unstage all",
18427
+ noStagedFiles: "No staged files",
18428
+ unstageNFiles: "Unstage {{count}} files",
18429
+ unstageFile: "Unstage",
18430
+ workspace: "Workspace ({{count}})",
18431
+ discardAll: "Discard all",
18432
+ stageAll: "Stage all",
18433
+ noUnstagedChanges: "No unstaged changes",
18434
+ discardNFiles: "Discard changes in {{count}} files",
18435
+ stageNFiles: "Stage {{count}} files",
18436
+ discardChanges: "Discard changes",
18437
+ stageFile: "Stage file",
18438
+ loadingDiff: "Loading diff...",
18439
+ noDiffFiles: "No diff files",
18440
+ nFilesChanged: "{{count}} files changed (vs {{branch}})",
18441
+ loadingCommits: "Loading commits...",
18442
+ noCommits: "No commits",
18443
+ allLoaded: "All {{count}} records loaded",
18444
+ locateInTree: "Locate in directory tree",
18445
+ unsaved: "Unsaved",
18446
+ saveBeforeSwitch: "Current file has unsaved changes. Save before switching?",
18447
+ saveAndSwitch: "Save and switch",
18448
+ closeEdit: "Close edit (ESC)",
18449
+ closeBtn: "Close",
18450
+ copyFileContent: "Copy file content",
18451
+ toggleJsonReadable: "Toggle JSON readable mode",
18452
+ previewMarkdown: "Preview Markdown",
18453
+ exitPreview: "Exit Preview",
18454
+ viewBlame: "View line-by-line change history",
18455
+ viewDiff: "View changes against HEAD",
18456
+ exitDiff: "Exit Diff",
18457
+ diffLoadFailed: "Failed to load diff",
18458
+ editFile: "Edit file",
18459
+ backToPreview: "Back to preview",
18460
+ cannotPreview: "Cannot preview this file",
18461
+ selectFileToPreview: "Select a file to preview",
18462
+ staged: "Staged",
18463
+ unstaged: "Unstaged",
18464
+ selectFileToViewDiff: "Select a file to view diff",
18465
+ loadingDiffContent: "Loading diff...",
18466
+ clickCompareToLoad: 'Click "Compare" to load branch diff',
18467
+ selectCommitToView: "Select a commit to view details",
18468
+ confirmDelete: "Confirm Delete",
18469
+ confirmDeleteMessage: "Move <file>{{name}}</file> to trash?",
18470
+ nFilesNMatches: "{{files}} files, {{matches}} matches",
18471
+ resultsTruncated: "Results truncated",
18472
+ noContentSearchResults: "No results",
18473
+ enterKeywordToSearch: "Enter keyword to search file contents",
18474
+ searchMinChars: "Search requires at least 2 characters"
18475
+ },
18476
+ codeViewer: {
18477
+ fileModifiedExternally: "File was modified externally. Saving will overwrite external changes.",
18478
+ useDiskVersion: "Use disk version",
18479
+ forceOverwrite: "Force overwrite",
18480
+ searchPlaceholder: "Search...",
18481
+ caseSensitive: "Case sensitive",
18482
+ wholeWordMatch: "Whole word match",
18483
+ unsavedConfirm: "You have unsaved changes. Close anyway?",
18484
+ discardChanges: "Discard changes",
18485
+ continueEditing: "Continue editing",
18486
+ unsavedExitConfirm: "You have unsaved changes. Exit edit mode?",
18487
+ clickToViewDetails: "Click to view details",
18488
+ clickToViewCommit: "Click to view commit details",
18489
+ nComments: "{{count}} comments",
18490
+ searchChat: "Search chat...",
18491
+ prevShiftEnter: "Previous (Shift+Enter)",
18492
+ nextEnter: "Next (Enter)",
18493
+ closeEsc: "Close (Esc)"
18494
+ },
18495
+ chat: {
18496
+ startConversation: "Start a conversation",
18497
+ loadMoreHistory: "Load more...",
18498
+ scrollUpForMore: "\u2191 Scroll up to load more history",
18499
+ claudeThinking: "Claude is thinking...",
18500
+ jumpToStart: "Jump to start",
18501
+ jumpToLatest: "Jump to latest",
18502
+ copyMessage: "Copy message",
18503
+ forkSession: "Fork session from here",
18504
+ imageN: "Image {{index}}",
18505
+ imagePreview: "Image preview",
18506
+ toolCalls: "{{count}} tool calls",
18507
+ collapse: "\u25B2 Collapse",
18508
+ expand: "\u25BC Expand",
18509
+ subagent: "Subagent",
18510
+ subagentEmpty: "No subagent transcript found",
18511
+ subagentViewTitle: "View subagent transcript",
18512
+ workflowRun: "Run details",
18513
+ workflowViewTitle: "View workflow run details",
18514
+ workflowEmpty: "No workflow run journal found",
18515
+ workflowAgents: "agents",
18516
+ workflowViewAgent: "View",
18517
+ workflowUngrouped: "Ungrouped",
18518
+ viewQuestions: "View questions",
18519
+ viewAllFileChanges: "View all file changes",
18520
+ requestFailed: "Request failed",
18521
+ cannotReadStream: "Cannot read response stream",
18522
+ errorRetry: "An error occurred, please retry",
18523
+ placeholder: "Type a message, Enter to send (Shift+Enter for new line, paste images; start a line with / (main session) or @ (subagent) for commands, multiple allowed)",
18524
+ placeholderDisabled: "Generating... you can keep typing (ESC to cancel; if stuck, cancel and resend 'continue')",
18525
+ imageSizeLimit: "Image size exceeds limit (max 5MB), current: {{size}}MB",
18526
+ stageAll: "Stage all files (git add -A)",
18527
+ viewGitChanges: "View Git changes",
18528
+ viewAllComments: "View all comments",
18529
+ userMessages: "User messages",
18530
+ projectNotes: "Project Notes",
18531
+ scheduledTasks: "Scheduled Tasks",
18532
+ quickPrompts: "Quick Prompts",
18533
+ globalPrompts: "Global Prompts",
18534
+ projectPrompts: "Project Prompts",
18535
+ noQuickPrompts: "No quick prompts yet",
18536
+ addQuickPrompt: "Add quick prompt",
18537
+ quickPromptPlaceholder: "One-line prompt \u2014 Enter to save, Esc to cancel",
18538
+ context: "Context",
18539
+ output: "Output",
18540
+ copiedCommandTooltip: "Copied!",
18541
+ copyCommandTooltip: "Copy command: claude -r {{sessionId}}",
18542
+ executedCommand: "Executed `{{command}}`{{exitInfo}}, output:\n```\n{{output}}\n```",
18543
+ executedCommandFailed: "Failed to execute `{{command}}`: {{error}}",
18544
+ executionMode: "Execution Mode",
18545
+ checkBalance: "Check balance",
18546
+ balanceFailed: "Query failed \u2014 check the API key",
18547
+ balanceNeedsKey: "Set a DeepSeek API key first",
18548
+ balanceUnavailable: "Account is not available for requests",
18549
+ balanceEmpty: "No balance returned",
18550
+ openUsagePage: "Open DeepSeek usage console",
18551
+ ptyModeHint: "Subscription billing mode: uses interactive claude CLI",
18552
+ planMode: "Plan mode",
18553
+ planModeDesc: "read-only \xB7 plan first, no edits",
18554
+ planModeOn: "Plan mode on \u2014 read-only; send a task to get a plan",
18555
+ planModeOff: "Plan mode off",
18556
+ planModeHint: "Plan mode: read-only exploration that produces a plan without editing. Uncheck and resend to implement.",
18557
+ noHistory: "Independent task",
18558
+ noHistoryDesc: "no history sent",
18559
+ noHistoryHint: "Independent task: each message is sent to the model on its own, with no prior conversation. The transcript above still records everything.",
18560
+ planTitle: "Plan (awaiting your review)",
18561
+ approvePlan: "Approve & run",
18562
+ planApproveHint: "No approval dialog here \u2014 click to exit plan mode and execute",
18563
+ approvePlanPrompt: "Approved \u2014 proceed with the plan above.",
18564
+ ptyTerminal: "PTY Terminal",
18565
+ ptyRunning: "running",
18566
+ ptyCollapse: "Collapse",
18567
+ ptyExpand: "Expand",
18568
+ ptyStuck: "PTY seems stuck (waiting for a dialog?). Please handle it in the terminal below.",
18569
+ ptyTimedOut: "PTY timed out without manual handling; the turn was terminated.",
18570
+ ptyCrash: "Claude CLI render crash (upstream bug): {{error}}. This session's history may contain edits that fail to render.",
18571
+ ptyQuestionEsc: "AI asked an interactive question, which cannot be answered in this mode; it was auto-cancelled and the turn was ended. See the question in the chat and answer it in your next message."
18572
+ },
18573
+ console: {
18574
+ enterCommandOrUrl: "Enter a command or URL to start",
18575
+ emptyIntro: "Type any of the following in the input bar to create a bubble:",
18576
+ bubbleCommand: "Command",
18577
+ bubbleInteractive: "Interactive",
18578
+ bubbleBrowser: "Browser",
18579
+ bubbleBrowserNoteIframe: "Some sites block iframe embedding \u2014 install Cockpit Bridge under Settings \u2192 Browser Extension before opening.",
18580
+ bubbleBrowserNoteCookie: "If a logged-in site first shows as signed out, refresh a few times to restore it.",
18581
+ bubbleDatabase: "Database",
18582
+ bubbleNotebook: "Notebook",
18583
+ loadingMore: "Loading...",
18584
+ loadMoreHistory: "Load more history",
18585
+ quickCommands: "Quick Commands",
18586
+ singleColumn: "Single column",
18587
+ dualColumn: "Dual column",
18588
+ envVars: "Environment Variables",
18589
+ launchZsh: "Launch zsh terminal",
18590
+ htmlApps: "HTML apps",
18591
+ inputPlaceholder: "Enter command or URL and press Enter... (\u2191\u2193 history, Tab complete)",
18592
+ scopeProject: "Project",
18593
+ scopeGlobal: "Global",
18594
+ tabSwitchEscClose: "Tab to switch \xB7 Esc to close",
18595
+ copyOutput: "Copy output",
18596
+ copyCommand: "Copy command",
18597
+ rerun: "Re-run",
18598
+ deleteRecord: "Delete record",
18599
+ searchPlaceholder: "Search...",
18600
+ searchMode: "Search",
18601
+ filterMode: "Filter",
18602
+ prevShiftEnter: "Previous (Shift+Enter)",
18603
+ nextEnter: "Next (Enter)",
18604
+ loadingTerminal: "Loading terminal...",
18605
+ clickToInput: "Click terminal area to type",
18606
+ stdinPlaceholder: "stdin input...",
18607
+ runningText: "Running...",
18608
+ exitCode: "Exit code: {{code}}",
18609
+ totalLines: "{{count}} lines total",
18610
+ globalCommands: "Global Commands",
18611
+ projectCommands: "Project Commands",
18612
+ noCustomCommands: "No custom commands yet",
18613
+ namePlaceholder: "Name",
18614
+ commandPlaceholder: "Command",
18615
+ restoreTooltip: "Restore ({{modKey}}M / ESC)",
18616
+ screenshotting: "Screenshotting...",
18617
+ outputFileDeleted: "[Output file deleted]"
18618
+ },
18619
+ browser: {
18620
+ blankPage: "Blank page",
18621
+ copyUrl: "Copy URL",
18622
+ openInNewWindow: "Open in new window",
18623
+ exitMaximize: "Exit maximize ({{modKey}}M)",
18624
+ maximize: "Maximize ({{modKey}}M)",
18625
+ pageLoadFailed: "Page load failed",
18626
+ clickToWake: "Click to wake",
18627
+ sleeping: "Sleeping",
18628
+ loadingPage: "Loading...",
18629
+ loadFailed: "Load failed"
18630
+ },
18631
+ database: {
18632
+ connectionFailed: "Connection failed",
18633
+ connected: "Connected",
18634
+ connecting: "Connecting...",
18635
+ refreshTableList: "Refresh table list",
18636
+ filterTable: "T Tables",
18637
+ filterView: "V Views",
18638
+ noTables: "No tables",
18639
+ tabStructure: "Structure",
18640
+ tabData: "Data",
18641
+ tabSql: "SQL",
18642
+ filterActive: "Filter: {{count}} cols",
18643
+ clearAllFilters: "Clear all filters",
18644
+ deleteNRows: "Delete {{count}} rows",
18645
+ confirmDeleteRows: "Confirm delete?",
18646
+ copyCsvSelected: "Copy selected rows as CSV",
18647
+ copyCsvAll: "Export all as CSV",
18648
+ copyJsonSelected: "Copy selected rows as JSON",
18649
+ copyJsonAll: "Export all as JSON",
18650
+ copyCSV: "Copy CSV",
18651
+ CSV: "CSV",
18652
+ copyJSON: "Copy JSON",
18653
+ JSON: "JSON",
18654
+ selectTable: "Select a table",
18655
+ selectTableToView: "Select a table to view structure",
18656
+ selectTableForData: "Select a table to view data",
18657
+ columns: "Columns",
18658
+ colName: "Name",
18659
+ colType: "Type",
18660
+ colNullable: "Nullable",
18661
+ colDefault: "Default",
18662
+ primaryKey: "Primary Key",
18663
+ foreignKeys: "Foreign Keys",
18664
+ indexes: "Indexes",
18665
+ enable: "Enable",
18666
+ commaValues: "Comma-separated values",
18667
+ likePattern: "%pattern%",
18668
+ valuePlaceholder: "Value",
18669
+ apply: "Apply",
18670
+ clearFilter: "Clear",
18671
+ addRow: "+ Add Row",
18672
+ totalRows: "{{count}} rows",
18673
+ rowsAffected: "{{command}} \u2014 {{count}} rows affected ({{duration}}ms)",
18674
+ queryRows: "{{count}} rows ({{duration}}ms)",
18675
+ resultTruncated: "[Results truncated to 1000 rows]",
18676
+ sqlPlaceholder: "Enter SQL... ({{modKey}}Enter to execute)",
18677
+ executing: "Executing...",
18678
+ execute: "\u25B6 Execute",
18679
+ deleteRowsFailed: "{{count}} rows failed to delete",
18680
+ inputParams: "Input Parameters",
18681
+ resultLabel: "Result"
18682
+ },
18683
+ mysql: {
18684
+ connectionFailed: "Connection failed",
18685
+ connected: "Connected",
18686
+ connecting: "Connecting...",
18687
+ refreshTableList: "Refresh table list",
18688
+ filterTable: "T Tables",
18689
+ filterView: "V Views",
18690
+ noTables: "No tables",
18691
+ tabStructure: "Structure",
18692
+ tabData: "Data",
18693
+ tabSql: "SQL",
18694
+ filterActive: "Filter: {{count}} cols",
18695
+ clearAllFilters: "Clear all filters",
18696
+ deleteNRows: "Delete {{count}} rows",
18697
+ confirmDeleteRows: "Confirm delete?",
18698
+ copyCsvSelected: "Copy selected rows as CSV",
18699
+ copyCsvAll: "Export all as CSV",
18700
+ copyJsonSelected: "Copy selected rows as JSON",
18701
+ copyJsonAll: "Export all as JSON",
18702
+ copyCSV: "Copy CSV",
18703
+ CSV: "CSV",
18704
+ copyJSON: "Copy JSON",
18705
+ JSON: "JSON",
18706
+ selectTable: "Select a table",
18707
+ selectTableToView: "Select a table to view structure",
18708
+ selectTableForData: "Select a table to view data",
18709
+ columns: "Columns",
18710
+ colName: "Name",
18711
+ colType: "Type",
18712
+ colNullable: "Nullable",
18713
+ colDefault: "Default",
18714
+ primaryKey: "Primary Key",
18715
+ foreignKeys: "Foreign Keys",
18716
+ indexes: "Indexes",
18717
+ enable: "Enable",
18718
+ commaValues: "Comma-separated values",
18719
+ likePattern: "%pattern%",
18720
+ valuePlaceholder: "Value",
18721
+ apply: "Apply",
18722
+ clearFilter: "Clear",
18723
+ addRow: "+ Add Row",
18724
+ totalRows: "{{count}} rows",
18725
+ rowsAffected: "{{command}} \u2014 {{count}} rows affected ({{duration}}ms)",
18726
+ queryRows: "{{count}} rows ({{duration}}ms)",
18727
+ resultTruncated: "[Results truncated to 1000 rows]",
18728
+ sqlPlaceholder: "Enter SQL... ({{modKey}}Enter to execute)",
18729
+ executing: "Executing...",
18730
+ execute: "\u25B6 Execute",
18731
+ deleteRowsFailed: "{{count}} rows failed to delete"
18732
+ },
18733
+ redis: {
18734
+ neverExpires: "Never expires",
18735
+ expired: "Expired",
18736
+ loadFailed: "Load failed",
18737
+ deleteFailed: "Delete failed",
18738
+ saveFailed: "Save failed",
18739
+ scanPlaceholder: "SCAN pattern...",
18740
+ scanSearch: "Search (SCAN)",
18741
+ noKeys: "No keys",
18742
+ loadMore: "Load more...",
18743
+ tabData: "Data",
18744
+ tabInfo: "Info",
18745
+ tabCli: "CLI",
18746
+ selectKey: "Select a key",
18747
+ keyNotExist: "Key does not exist",
18748
+ unsupportedType: "Unsupported type: {{type}}",
18749
+ nItems: "{{total}} items",
18750
+ showingN: "showing {{count}}",
18751
+ nMembers: "{{total}} members",
18752
+ nEntries: "{{total}} entries",
18753
+ cliHint: "Enter Redis commands, e.g. PING, GET key, KEYS *",
18754
+ cliPlaceholder: "Enter command..."
18755
+ },
18756
+ git: {
18757
+ switchBranch: "Switch branch",
18758
+ searchBranch: "Search branches...",
18759
+ noBranches: "No branches available",
18760
+ noMatchingBranches: "No matching branches",
18761
+ localBranches: "Local Branches",
18762
+ remoteBranches: "Remote Branches",
18763
+ branchNotFound: "Branch not found",
18764
+ selectBranch: "Select branch...",
18765
+ currentBranch: "Current",
18766
+ notGitRepo: "Current directory is not a Git repository",
18767
+ cannotGetBranches: "Cannot get branch info",
18768
+ getBranchesFailed: "Failed to get branch info",
18769
+ discardAllConfirm: "Discard changes in {{count}} workspace files? This cannot be undone.",
18770
+ worktree: {
18771
+ title: "Git Worktree",
18772
+ count: "{{count}} worktrees",
18773
+ selectBranch: "Select branch",
18774
+ addWorktree: "+ Add Worktree",
18775
+ confirmDelete: "Confirm Delete",
18776
+ confirmDeleteMsg: "Delete this worktree?",
18777
+ path: "Path:",
18778
+ branch: "Branch:",
18779
+ locked: "Locked",
18780
+ unlock: "Unlock",
18781
+ lock: "Lock",
18782
+ searchBranch: "Search branches...",
18783
+ noBranches: "No available branches"
18784
+ }
18785
+ },
18786
+ comments: {
18787
+ addComment: "Add Comment",
18788
+ lineRange: "Line {{start}}-{{end}}",
18789
+ inputPlaceholder: "Enter comment...",
18790
+ newComment: "New comment {{range}}",
18791
+ commentPlaceholder: "Enter comment... ({{modKey}}Enter to submit, Esc to cancel)",
18792
+ nComments: "{{count}} comments",
18793
+ allComments: "All Comments",
18794
+ copyAllComments: "Copy all comments",
18795
+ noComments: "No comments yet",
18796
+ clearAll: "Clear all",
18797
+ totalComments: "{{count}} comments total",
18798
+ aiReply: "AI Reply",
18799
+ noContent: "(no content)",
18800
+ linesCount: "({{count}} lines)",
18801
+ codeRef: "Here are my annotated comments and references:",
18802
+ note: "Note: {{content}}",
18803
+ submitting: "Submitting...",
18804
+ enterSubmit: "Enter to submit \xB7 Shift+Enter for new line",
18805
+ submitComment: "Submit Comment",
18806
+ askAI: "Ask AI",
18807
+ inputQuestion: "Enter your question...",
18808
+ aiGenerating: "Generating, please wait...",
18809
+ enterSend: "Enter to send \xB7 Shift+Enter for new line",
18810
+ sendToAI: "Send to AI",
18811
+ aiResponding: "AI is responding..."
18812
+ },
18813
+ fileContextMenu: {
18814
+ createFile: "New File",
18815
+ copyFile: "Copy File",
18816
+ copyFolder: "Copy Folder",
18817
+ pasteHere: "Paste Here",
18818
+ deleteFile: "Delete File",
18819
+ deleteFolder: "Delete Folder",
18820
+ copyRelativePath: "Copy Relative Path",
18821
+ copyAbsolutePath: "Copy Absolute Path",
18822
+ copyRelativeDirPath: "Copy Relative Dir Path",
18823
+ copyAbsoluteDirPath: "Copy Absolute Dir Path",
18824
+ copyFileName: "Copy File Name",
18825
+ copyFolderName: "Copy Folder Name"
18826
+ },
18827
+ settings: {
18828
+ title: "Settings",
18829
+ theme: "Theme",
18830
+ themeLight: "Light",
18831
+ themeDark: "Dark",
18832
+ themeSystem: "System",
18833
+ browserExtension: "Browser Extension",
18834
+ extensionInstalled: "Cockpit Bridge installed",
18835
+ extensionNotInstalled: "Cockpit Bridge not installed",
18836
+ extensionDescription: "After installing the Chrome extension, link navigation in iframes will be intercepted: new tab links create new bubbles, page navigation updates the current bubble.",
18837
+ installSteps: "Installation steps:",
18838
+ step1: "1. Open Chrome and navigate to",
18839
+ step2: '2. Enable "Developer mode" in the top-right corner',
18840
+ step3: '3. Click "Load unpacked"',
18841
+ step4mac: "4. Press <kbd>Cmd+Shift+G</kbd> \u2192 paste the path below \u2192 Enter",
18842
+ copyExtensionPath: "Copy extension directory path",
18843
+ reloadExtension: "Reload extension",
18844
+ about: "About",
18845
+ language: "Language",
18846
+ languageAuto: "System",
18847
+ switchDark: "Switch to dark",
18848
+ switchLight: "Switch to light"
18849
+ },
18850
+ editor: {
18851
+ placeholder: "Write something... Type / for commands",
18852
+ noteTitle: "{{name}} - Notes",
18853
+ noteUntitled: "Notes",
18854
+ saving: "Saving...",
18855
+ conflictReloaded: "This note was changed elsewhere. Loaded the latest version; your recent unsaved edits were discarded.",
18856
+ linkPlaceholder: "Enter URL...",
18857
+ confirmLink: "Confirm",
18858
+ removeLink: "Remove link",
18859
+ heading1: "Heading 1",
18860
+ heading2: "Heading 2",
18861
+ heading3: "Heading 3",
18862
+ bold: "Bold",
18863
+ italic: "Italic",
18864
+ strikethrough: "Strikethrough",
18865
+ inlineCode: "Inline code",
18866
+ link: "Link",
18867
+ bulletList: "Bullet list",
18868
+ orderedList: "Ordered list",
18869
+ taskList: "Task list",
18870
+ blockquote: "Blockquote",
18871
+ codeBlock: "Code block",
18872
+ table: "Table",
18873
+ horizontalRule: "Horizontal rule",
18874
+ insertRowAbove: "Insert row above",
18875
+ insertRowBelow: "Insert row below",
18876
+ insertColumnLeft: "Insert column left",
18877
+ insertColumnRight: "Insert column right",
18878
+ deleteRow: "Delete row",
18879
+ deleteColumn: "Delete column",
18880
+ deleteTable: "Delete table",
18881
+ deleteCodeBlock: "Delete code block",
18882
+ toc: "TOC",
18883
+ expandToc: "Expand TOC",
18884
+ collapseToc: "Collapse TOC"
18885
+ },
18886
+ slashCommands: {
18887
+ heading1: "Heading 1",
18888
+ heading1Desc: "Large heading",
18889
+ heading2: "Heading 2",
18890
+ heading2Desc: "Medium heading",
18891
+ heading3: "Heading 3",
18892
+ heading3Desc: "Small heading",
18893
+ bulletList: "Bullet List",
18894
+ bulletListDesc: "Bulleted list",
18895
+ orderedList: "Ordered List",
18896
+ orderedListDesc: "Numbered list",
18897
+ taskList: "Task List",
18898
+ taskListDesc: "Checkable task list",
18899
+ blockquote: "Blockquote",
18900
+ blockquoteDesc: "Quote block",
18901
+ codeBlock: "Code Block",
18902
+ codeBlockDesc: "Code snippet",
18903
+ table: "Table",
18904
+ tableDesc: "Insert 3\xD73 table",
18905
+ horizontalRule: "Divider",
18906
+ horizontalRuleDesc: "Horizontal divider",
18907
+ link: "Link",
18908
+ linkDesc: "Insert hyperlink"
18909
+ },
18910
+ commands: {
18911
+ qa: "Enter requirements clarification mode",
18912
+ fx: "Enter bug evidence-chain analysis mode",
18913
+ ex: "Enter structured analysis & discussion mode",
18914
+ go: "Enter landing mode: MVP staged implementation",
18915
+ cg: "Enter CodeGraph exploration mode",
18916
+ plan: "Enable plan mode \xB7 /plan <task> to plan it \xB7 /plan off to disable"
18917
+ },
18918
+ review: {
18919
+ reviewManagement: "Review Management",
18920
+ allReviews: "All Reviews",
18921
+ noOpenReviews: "No open reviews",
18922
+ viewComments: "View comments",
18923
+ nComments: "{{count}} comments",
18924
+ nDocs: "{{count}} docs",
18925
+ nReviews: "{{count}} reviews",
18926
+ docList: "Document List",
18927
+ allReviewsList: "All Reviews",
18928
+ expandList: "Expand list",
18929
+ collapseList: "Collapse list",
18930
+ closeReview: "Close review",
18931
+ reopenReview: "Reopen",
18932
+ deleteReview: "Delete review",
18933
+ noOpenDocs: "No open documents",
18934
+ noReviews: "No reviews",
18935
+ sharing: "Sharing",
18936
+ notShared: "Not shared",
18937
+ closeSharing: "Disable sharing",
18938
+ enableSharing: "Enable sharing",
18939
+ view: "View",
18940
+ setNickname: "Set your nickname",
18941
+ nicknameHint: "Other reviewers will see this name",
18942
+ nicknamePlaceholder: "Enter nickname",
18943
+ skipForNow: "Skip for now",
18944
+ identitySettings: "Identity Settings",
18945
+ reviewNickname: "Review Nickname",
18946
+ random: "Random",
18947
+ selectTextToComment: "Select text to add comment",
18948
+ selectTextHint: "Select text on the left to add a comment",
18949
+ prevComment: "Previous",
18950
+ nextComment: "Next",
18951
+ commentsCount: "{{count}} comments",
18952
+ commentsNavCount: "{{current}}/{{total}} comments",
18953
+ allCommentsTitle: "All Comments",
18954
+ commentsCountBrief: "{{count}}",
18955
+ closedCount: "{{count}} closed",
18956
+ copyAllComments: "Copy all comments",
18957
+ noComments: "No comments yet",
18958
+ closedComments: "Closed ({{count}})",
18959
+ closedLabel: "Closed",
18960
+ moreReplies: "+{{count}} replies",
18961
+ copyComment: "Copy comment",
18962
+ reopen: "Reopen",
18963
+ closeComment: "Close comment",
18964
+ editComment: "Edit comment",
18965
+ deleteComment: "Delete comment",
18966
+ edited: "(edited)",
18967
+ editReply: "Edit reply",
18968
+ deleteReply: "Delete reply",
18969
+ reply: "Reply",
18970
+ replyPlaceholder: "Add a reply...",
18971
+ selectedText: "Selected text",
18972
+ addCommentPlaceholder: "Add a comment...",
18973
+ enterSubmitHint: "Enter to submit, Shift+Enter for new line",
18974
+ commentBtn: "Comment",
18975
+ reviewNotExist: "Review does not exist or has been deleted",
18976
+ loadFailed: "Load failed",
18977
+ networkError: "Network error",
18978
+ reviewNotFound: "Review not found",
18979
+ checkLink: "Please check the link",
18980
+ updatedAt: "Updated {{date}}",
18981
+ active: "Active",
18982
+ closed: "Closed",
18983
+ viewAllComments: "View all comments",
18984
+ viewCommentBtn: "View Comments",
18985
+ copyLink: "Copy Link",
18986
+ reviewSummary: "Review Comments Summary \u2014 {{title}}",
18987
+ totalNComments: "{{count}} comments total",
18988
+ quoteRef: 'Quote: "{{text}}"',
18989
+ commentAuthor: "Comment ({{author}}): {{content}}",
18990
+ replyAuthor: " \u21B3 {{author}}: {{content}}"
18991
+ },
18992
+ markdown: {
18993
+ copied: "\u2713 Copied",
18994
+ copy: "Copy"
18995
+ },
18996
+ imagePreview: {
18997
+ previewImage: "Preview image",
18998
+ deleteImage: "Delete image"
18999
+ },
19000
+ tokenStats: {
19001
+ title: "Claude Code Token Stats",
19002
+ activeHours: "Active Hours Distribution",
19003
+ hourSessions: "{{h}}:00 \u2014 {{count}} sessions",
19004
+ messages: "Messages",
19005
+ toolCalls: "Tool Calls",
19006
+ activityTrend: "Activity Trend",
19007
+ byModel: "By Model",
19008
+ tokenUsage: "Token Usage",
19009
+ equivalentCost: "Equivalent Cost",
19010
+ modelCostDetail: "Model Cost Details",
19011
+ model: "Model",
19012
+ share: "Share",
19013
+ total: "Total",
19014
+ totalSessions: "Total Sessions",
19015
+ totalMessages: "Total Messages",
19016
+ equivalentApiCost: "Equivalent API Cost",
19017
+ longestSession: "Longest Session",
19018
+ firstUse: "First Use",
19019
+ notFound: "~/.claude/stats-cache.json not found",
19020
+ day: "Day",
19021
+ week: "Week",
19022
+ month: "Month"
19023
+ },
19024
+ toolCall: {
19025
+ inputParams: "Input Parameters",
19026
+ resultLabel: "Result",
19027
+ inputParamsTitle: "View input parameters",
19028
+ resultTitle: "View result",
19029
+ input: "Input",
19030
+ result: "Result",
19031
+ foldedLines: "... ({{count}} lines)"
19032
+ },
19033
+ fileEditor: {
19034
+ unsavedConfirm: "You have unsaved changes. Close anyway?",
19035
+ discardChanges: "Discard changes",
19036
+ continueEditing: "Continue editing",
19037
+ externallyModified: "File was modified externally. Saving will overwrite external changes.",
19038
+ useDiskVersion: "Use disk version",
19039
+ forceOverwrite: "Force overwrite"
19040
+ },
19041
+ quickFileOpen: {
19042
+ placeholder: "Type file name to open...",
19043
+ noMatch: "No matching files",
19044
+ recent: "Recent",
19045
+ selectHint: "Select",
19046
+ openHint: "Open",
19047
+ closeHint: "Close"
19048
+ },
19049
+ envManager: {
19050
+ title: "Environment Variables",
19051
+ tabScope: "Current Tab Only",
19052
+ globalScope: "Global Environment Variables",
19053
+ varNamePlaceholder: "Variable name (e.g. NODE_ENV)",
19054
+ varValuePlaceholder: "Value (e.g. production)",
19055
+ valuePlaceholder: "Value",
19056
+ noVars: "No environment variables yet. Add one to get started."
19057
+ },
19058
+ aliasManager: {
19059
+ title: "Command Aliases",
19060
+ description: "Set shortcut aliases for common commands (global)",
19061
+ aliasPlaceholder: "Alias (e.g. ll)",
19062
+ commandPlaceholder: "Full command (e.g. ls -la)",
19063
+ fullCommandPlaceholder: "Full command",
19064
+ usage: "Usage tip:",
19065
+ usageDesc: "Type an alias to execute the corresponding full command",
19066
+ noAliases: "No command aliases yet. Add one to get started."
19067
+ },
19068
+ diffViewer: {
19069
+ fileChanges: "File Changes ({{count}})",
19070
+ toggleFileTree: "Toggle file tree",
19071
+ selectFileToView: "Select a file to view changes",
19072
+ sideBySide: "Side by side",
19073
+ unified: "Unified",
19074
+ viewSplit: "Split",
19075
+ viewUnified: "Unified",
19076
+ previewFile: "Preview file",
19077
+ copiedAll: "Full text copied",
19078
+ compact: "Compact",
19079
+ full: "Full",
19080
+ gap: {
19081
+ hidden: "{{count}} lines hidden",
19082
+ more: "\xB7\xB7\xB7 more +{{count}} \xB7\xB7\xB7",
19083
+ expandUp: "Expand {{count}} lines up",
19084
+ expandDown: "Expand {{count}} lines down"
19085
+ },
19086
+ loadingSnapshots: "Loading snapshots\u2026",
19087
+ noChanges: "No file changes detected in this turn",
19088
+ notViewable: "Binary or oversized file \u2014 diff not viewable",
19089
+ externalChange: "Concurrent change from another session/process",
19090
+ reconstructed: "reconstructed",
19091
+ reconstructedHint: "Rebuilt from tool-call parameters \u2014 not a disk snapshot",
19092
+ truncated: "Too many files \u2014 list truncated"
19093
+ },
19094
+ commitDetail: {
19095
+ title: "Commit Details",
19096
+ hash: "Hash:",
19097
+ author: "Author:",
19098
+ date: "Date:",
19099
+ files: "Files:",
19100
+ nChanges: "{{count}} changes",
19101
+ loadingFiles: "Loading files...",
19102
+ noFileChanges: "No file changes",
19103
+ loadingDiff: "Loading diff...",
19104
+ selectFileToView: "Select a file to view diff"
19105
+ },
19106
+ askQuestion: {
19107
+ title: "Questions",
19108
+ nQuestions: "{{count}} questions",
19109
+ checkedN: "{{count}} checked",
19110
+ copyChecked: "Copy {{count}} checked Q&A",
19111
+ copyAll: "Copy all Q&A",
19112
+ sendChecked: "Send {{count}} checked Q&A to AI",
19113
+ sendAll: "Send all Q&A to AI",
19114
+ sendNoChat: "No active chat session",
19115
+ checkToCopy: "Check to copy",
19116
+ custom: "Custom",
19117
+ customPlaceholder: "Enter custom answer...",
19118
+ notSelected: "(not selected)"
19119
+ },
19120
+ tabBar: {
19121
+ unpin: "Unpin",
19122
+ pin: "Pin to favorites",
19123
+ closeTab: "Close tab",
19124
+ closeAll: "Close all tabs",
19125
+ newTab: "New tab"
19126
+ },
19127
+ tabManagerTopBar: {
19128
+ copyPageUrl: "Copy page URL",
19129
+ copyDirPath: "Copy directory path",
19130
+ refreshProject: "Refresh project",
19131
+ openInVSCode: "Open in VS Code",
19132
+ openInCursor: "Open in Cursor",
19133
+ aliasesGlobal: "Command Aliases (Global)",
19134
+ tokenStats: "Token Stats",
19135
+ openSurething: "Open Surething"
19136
+ },
19137
+ hoverTooltip: {
19138
+ findReferences: "Find References",
19139
+ search: "Search"
19140
+ },
19141
+ todoViewer: {
19142
+ title: "Task List",
19143
+ progress: "{{completed}} / {{total}} done"
19144
+ },
19145
+ userMessages: {
19146
+ title: "User Messages",
19147
+ noMessages: "No user messages"
19148
+ },
19149
+ shortIdBadge: {
19150
+ clickToDisconnect: "Click to disconnect",
19151
+ clickToRegister: "Click to register and copy CLI command",
19152
+ setTitle: "Name this bubble (so /cc can find it later)",
19153
+ setTitlePlaceholder: "set title",
19154
+ editTitle: "Edit title",
19155
+ titleSet: "Title: {{title}}",
19156
+ dialogTitle: "Name this bubble",
19157
+ dialogPlaceholder: "e.g. alloydb proxy, staging admin"
19158
+ },
19159
+ api: {
19160
+ pathForbidden: "Operation not allowed on this path",
19161
+ deleteForbidden: "Delete not allowed on this path",
19162
+ notAFolder: "Target is not a folder",
19163
+ imageTooLarge: "Image too large to preview",
19164
+ cannotPreviewBinary: "Cannot preview binary file",
19165
+ fileTooLarge: "File too large to preview (over 10MB)",
19166
+ fileModifiedExternally: "File was modified externally",
19167
+ pickFolderPrompt: "Select project folder"
19168
+ },
19169
+ confirm: {
19170
+ title: "Notice",
19171
+ ok: "OK",
19172
+ cancel: "Cancel"
19173
+ },
19174
+ floatingToolbar: {
19175
+ addComment: "Add Comment",
19176
+ sendToAI: "Send to AI",
19177
+ search: "Search"
19178
+ },
19179
+ quickReply: {
19180
+ optionA: "A",
19181
+ optionB: "B",
19182
+ optionC: "C",
19183
+ optionD: "D",
19184
+ allRecommended: "All recommended",
19185
+ thisOne: "This one",
19186
+ notThis: "Not this",
19187
+ why: "Why?",
19188
+ elaborate: "Say more",
19189
+ example: "Give an example",
19190
+ start: "Do it",
19191
+ continue: "Continue",
19192
+ ok: "OK",
19193
+ done: "Done"
19194
+ },
19195
+ searchResults: {
19196
+ title: "Search Results",
19197
+ nMatches: "({{count}} matches)",
19198
+ searching: "Searching...",
19199
+ noResults: "No matches",
19200
+ scopeSelected: "Selected",
19201
+ scopeAll: "All"
19202
+ },
19203
+ references: {
19204
+ title: "References",
19205
+ searching: "Searching...",
19206
+ notFound: "No references found"
19207
+ },
19208
+ gitFileTree: {
19209
+ noFiles: "No files"
19210
+ },
19211
+ explain: {
19212
+ action: "Explain",
19213
+ fileMessage: "Explain {{path}}",
19214
+ symbolMessage: "Explain {{name}} ({{path}}:{{lines}})",
19215
+ selectionMessage: "Explain",
19216
+ commitFileMessage: "Explain what git commit {{hash}} changed in {{path}}",
19217
+ compareFileMessage: "Explain the git changes to {{path}} in {{base}}..HEAD",
19218
+ stagedFileMessage: "Explain the git staged changes to {{path}}",
19219
+ unstagedFileMessage: "Explain the git working tree changes to {{path}}"
19220
+ },
19221
+ reviewUtils: {
19222
+ adjectives: ["Happy", "Brave", "Quiet", "Bright", "Gentle", "Agile", "Free", "Clear", "Flying", "Relaxed", "Lively", "Wise", "Calm", "Alert", "Composed", "Steady", "Cheerful", "Warm", "Bold", "Poised"],
19223
+ nouns: ["Panda", "Dolphin", "Crane", "Snow Leopard", "Skylark", "Squirrel", "Flying Fish", "Deer", "Bluebird", "Silver Fox", "Owl", "Dragonfly", "Firefly", "Sea Turtle", "Butterfly", "Monkey", "Red-crowned Crane", "Antelope", "Swallow", "Penguin"]
19224
+ }
19225
+ };
19226
+
19227
+ // packages/shared/i18n/locales/zh.json
19228
+ var zh_default = {
19229
+ common: {
19230
+ save: "\u4FDD\u5B58",
19231
+ cancel: "\u53D6\u6D88",
19232
+ delete: "\u5220\u9664",
19233
+ close: "\u5173\u95ED",
19234
+ copy: "\u590D\u5236",
19235
+ edit: "\u7F16\u8F91",
19236
+ file: "\u6587\u4EF6",
19237
+ codeMap: "\u4EE3\u7801\u5730\u56FE",
19238
+ diff: "Diff",
19239
+ confirm: "\u786E\u8BA4",
19240
+ loading: "\u52A0\u8F7D\u4E2D...",
19241
+ search: "\u641C\u7D22",
19242
+ refresh: "\u5237\u65B0",
19243
+ retry: "\u91CD\u8BD5",
19244
+ submit: "\u63D0\u4EA4",
19245
+ copied: "\u5DF2\u590D\u5236",
19246
+ saved: "\u5DF2\u4FDD\u5B58",
19247
+ failed: "\u5931\u8D25",
19248
+ noMatch: "\u65E0\u5339\u914D",
19249
+ noData: "\u65E0\u6570\u636E",
19250
+ done: "\u5B8C\u6210",
19251
+ justNow: "\u521A\u521A",
19252
+ minutesAgo: "{{count}}\u5206\u949F\u524D",
19253
+ hoursAgo: "{{count}}\u5C0F\u65F6\u524D",
19254
+ daysAgo: "{{count}}\u5929\u524D",
19255
+ monthsAgo: "{{count}}\u4E2A\u6708\u524D",
19256
+ yearsAgo: "{{count}}\u5E74\u524D",
19257
+ saveFailed: "\u4FDD\u5B58\u5931\u8D25",
19258
+ copyFailed: "\u590D\u5236\u5931\u8D25",
19259
+ deleteFailed: "\u5220\u9664\u5931\u8D25",
19260
+ operationFailed: "\u64CD\u4F5C\u5931\u8D25",
19261
+ copiedPath: "\u5DF2\u590D\u5236\u8DEF\u5F84",
19262
+ copyPath: "\u590D\u5236\u8DEF\u5F84",
19263
+ openInConsole: "\u5728 Console \u6C14\u6CE1\u6253\u5F00",
19264
+ copyAbsPath: "\u590D\u5236\u7EDD\u5BF9\u8DEF\u5F84",
19265
+ loadMore: "\u52A0\u8F7D\u66F4\u591A",
19266
+ noResult: "\u65E0\u5339\u914D\u7ED3\u679C",
19267
+ selected: "\u5DF2\u9009\u62E9",
19268
+ selectAll: "\u5168\u9009",
19269
+ hint: "\u63D0\u793A",
19270
+ confirmBtn: "\u786E\u5B9A",
19271
+ cancelBtn: "\u53D6\u6D88",
19272
+ preview: "\u9884\u89C8",
19273
+ readable: "\u53EF\u8BFB",
19274
+ previous: "\u4E0A\u4E00\u4E2A",
19275
+ next: "\u4E0B\u4E00\u4E2A",
19276
+ all: "\u5168\u90E8",
19277
+ input: "\u8F93\u5165",
19278
+ result: "\u7ED3\u679C",
19279
+ line: "\u884C",
19280
+ lines: "\u884C",
19281
+ running: "\u8FD0\u884C\u4E2D",
19282
+ connecting: "\u8FDE\u63A5\u4E2D",
19283
+ connected: "\u5DF2\u8FDE\u63A5",
19284
+ connectionFailed: "\u8FDE\u63A5\u5931\u8D25",
19285
+ builtin: "\u5185\u7F6E",
19286
+ global: "\u5168\u5C40",
19287
+ project: "\u9879\u76EE",
19288
+ current: "\u5F53\u524D"
19289
+ },
19290
+ htmlApps: {
19291
+ addTooltip: "\u6DFB\u52A0\u5230 HTML \u9762\u677F",
19292
+ added: "\u5DF2\u6DFB\u52A0\u5230 HTML \u9762\u677F",
19293
+ alreadyAdded: "\u5DF2\u6DFB\u52A0\u8FC7",
19294
+ addFailed: "\u6DFB\u52A0\u5931\u8D25"
19295
+ },
19296
+ skills: {
19297
+ addTooltip: "\u6DFB\u52A0\u5230 Skills \u9762\u677F",
19298
+ added: "\u5DF2\u6DFB\u52A0\u5230 Skills \u9762\u677F",
19299
+ alreadyAdded: "\u5DF2\u6DFB\u52A0\u8FC7",
19300
+ addFailed: "\u6DFB\u52A0\u5931\u8D25",
19301
+ title: "Skills",
19302
+ searchPlaceholder: "\u641C\u7D22 skills...",
19303
+ clearSearch: "\u6E05\u9664",
19304
+ addSkill: "\u6DFB\u52A0 Skill",
19305
+ emptyNoSkills: "\u8FD8\u6CA1\u6709 skill\uFF0C\u70B9\u51FB\u300C\u6DFB\u52A0 Skill\u300D\u6DFB\u52A0\u4E00\u4E2A\u3002",
19306
+ emptyNoMatch: "\u6CA1\u6709\u5339\u914D\u7684 skill\u3002",
19307
+ pathLabel: "SKILL.md \u7684\u7EDD\u5BF9\u8DEF\u5F84",
19308
+ pathPlaceholder: "/Users/you/.../skills/foo/SKILL.md",
19309
+ add: "\u6DFB\u52A0",
19310
+ adding: "\u6DFB\u52A0\u4E2D...",
19311
+ invalid: "\u65E0\u6548",
19312
+ copyPath: "\u590D\u5236\u8DEF\u5F84",
19313
+ noDescription: "\u65E0\u63CF\u8FF0",
19314
+ previewTitle: "Skill \u9884\u89C8",
19315
+ source: "\u6E90\u7801",
19316
+ cannotRead: "\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\u3002"
19317
+ },
19318
+ toast: {
19319
+ savedSuccess: "\u5DF2\u4FDD\u5B58",
19320
+ saveFailed: "\u4FDD\u5B58\u5931\u8D25",
19321
+ copiedName: "\u5DF2\u590D\u5236: {{name}}",
19322
+ copyFailed: "\u590D\u5236\u5931\u8D25",
19323
+ deleteFailed: "\u5220\u9664\u5931\u8D25",
19324
+ operationFailed: "\u64CD\u4F5C\u5931\u8D25",
19325
+ staged: "\u5DF2\u6682\u5B58",
19326
+ stageFailed: "\u6682\u5B58\u5931\u8D25",
19327
+ unstaged: "\u5DF2\u53D6\u6D88\u6682\u5B58",
19328
+ unstageFailed: "\u53D6\u6D88\u6682\u5B58\u5931\u8D25",
19329
+ stagedNFiles: "\u5DF2\u6682\u5B58 {{count}} \u4E2A\u6587\u4EF6",
19330
+ unstagedNFiles: "\u5DF2\u53D6\u6D88\u6682\u5B58 {{count}} \u4E2A\u6587\u4EF6",
19331
+ discardFailed: "\u653E\u5F03\u53D8\u66F4\u5931\u8D25",
19332
+ discardedNFiles: "\u5DF2\u653E\u5F03 {{count}} \u4E2A\u6587\u4EF6\u7684\u53D8\u66F4",
19333
+ stagedAllFiles: "\u5DF2\u6682\u5B58\u6240\u6709\u6587\u4EF6",
19334
+ deletedFile: "\u5DF2\u5220\u9664\u6587\u4EF6",
19335
+ discardedChanges: "\u5DF2\u653E\u5F03\u53D8\u66F4",
19336
+ pastedFile: "\u5DF2\u7C98\u8D34: {{name}}",
19337
+ pasteFailed: "\u7C98\u8D34\u5931\u8D25",
19338
+ noFileToPaste: "\u6CA1\u6709\u53EF\u7C98\u8D34\u7684\u6587\u4EF6",
19339
+ createdFile: "\u5DF2\u521B\u5EFA\u6587\u4EF6: {{name}}",
19340
+ createFailed: "\u521B\u5EFA\u5931\u8D25",
19341
+ movedToTrash: "\u5DF2\u79FB\u52A8\u5230\u56DE\u6536\u7AD9: {{name}}",
19342
+ copiedPageUrl: "\u5DF2\u590D\u5236\u9875\u9762\u5730\u5740",
19343
+ copiedDirPath: "\u5DF2\u590D\u5236\u76EE\u5F55\u8DEF\u5F84",
19344
+ switchedToBranch: "\u5DF2\u5207\u6362\u5230 {{branch}}",
19345
+ switchBranchFailed: "\u5207\u6362\u5206\u652F\u5931\u8D25",
19346
+ loadBranchFailed: "\u52A0\u8F7D\u5206\u652F\u5217\u8868\u5931\u8D25",
19347
+ copiedCommand: "\u5DF2\u590D\u5236: {{command}}",
19348
+ copiedMessage: "\u5DF2\u590D\u5236\u6D88\u606F",
19349
+ copiedUrl: "\u5DF2\u590D\u5236\u7F51\u5740",
19350
+ copiedOutput: "\u5DF2\u590D\u5236\u8F93\u51FA",
19351
+ copiedCmd: "\u5DF2\u590D\u5236\u547D\u4EE4",
19352
+ copiedComment: "\u5DF2\u590D\u5236\u8BC4\u8BBA",
19353
+ copiedAllComments: "\u5DF2\u590D\u5236\u5168\u90E8\u8BC4\u8BBA",
19354
+ copiedFileContent: "\u5DF2\u590D\u5236\u6587\u4EF6\u5185\u5BB9",
19355
+ copiedQA: "\u5DF2\u590D\u5236 {{count}} \u4E2A\u95EE\u7B54",
19356
+ copiedAllQA: "\u5DF2\u590D\u5236\u6240\u6709\u95EE\u7B54",
19357
+ sentQA: "\u5DF2\u53D1\u9001\u7ED9 AI",
19358
+ readFileFailed: "\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25",
19359
+ reviewCreated: "\u8BC4\u5BA1\u5DF2\u521B\u5EFA\uFF0C\u94FE\u63A5\u5DF2\u590D\u5236",
19360
+ reviewUpdated: "\u8BC4\u5BA1\u5DF2\u66F4\u65B0\uFF0C\u94FE\u63A5\u5DF2\u590D\u5236",
19361
+ reviewCreateFailed: "\u521B\u5EFA\u8BC4\u5BA1\u5931\u8D25",
19362
+ sharingClosed: "\u5DF2\u5173\u95ED\u5206\u4EAB",
19363
+ sharingCloseFailed: "\u5173\u95ED\u5206\u4EAB\u5931\u8D25",
19364
+ linkCopied: "\u94FE\u63A5\u5DF2\u590D\u5236",
19365
+ addCommentFailed: "\u6DFB\u52A0\u8BC4\u8BBA\u5931\u8D25",
19366
+ deleteCommentFailed: "\u5220\u9664\u8BC4\u8BBA\u5931\u8D25",
19367
+ editCommentFailed: "\u7F16\u8F91\u8BC4\u8BBA\u5931\u8D25",
19368
+ addReplyFailed: "\u6DFB\u52A0\u56DE\u590D\u5931\u8D25",
19369
+ deleteReplyFailed: "\u5220\u9664\u56DE\u590D\u5931\u8D25",
19370
+ editReplyFailed: "\u7F16\u8F91\u56DE\u590D\u5931\u8D25",
19371
+ disconnected: "\u5DF2\u65AD\u5F00: {{id}}",
19372
+ pluginReloading: "\u63D2\u4EF6\u91CD\u8F7D\u4E2D...",
19373
+ worktreeCreateSuccess: "Worktree \u521B\u5EFA\u6210\u529F: {{name}}",
19374
+ worktreeCreateFailed: "\u521B\u5EFA worktree \u5931\u8D25",
19375
+ worktreeLoadFailed: "\u52A0\u8F7D worktree \u5217\u8868\u5931\u8D25",
19376
+ worktreeDeleted: "Worktree \u5DF2\u5220\u9664",
19377
+ worktreeDeleteFailed: "\u5220\u9664 worktree \u5931\u8D25",
19378
+ worktreeLocked: "\u5DF2\u9501\u5B9A",
19379
+ worktreeUnlocked: "\u5DF2\u89E3\u9501"
19380
+ },
19381
+ workspace: {
19382
+ selectProject: "\u9009\u62E9\u4E00\u4E2A\u9879\u76EE\u5F00\u59CB",
19383
+ searchProjectPath: "\u641C\u7D22\u9879\u76EE\u8DEF\u5F84...",
19384
+ loadingProjects: "\u52A0\u8F7D\u9879\u76EE\u4E2D...",
19385
+ projectNotFound: "\u672A\u627E\u5230\u9879\u76EE",
19386
+ sessions: "{{count}} \u4F1A\u8BDD",
19387
+ loadingSessions: "\u52A0\u8F7D\u4F1A\u8BDD...",
19388
+ noSessions: "\u65E0\u4F1A\u8BDD\u8BB0\u5F55",
19389
+ loadingText: "\u52A0\u8F7D\u4E2D...",
19390
+ openProject: "\u6253\u5F00\u9879\u76EE",
19391
+ expandSidebar: "\u5C55\u5F00\u4FA7\u8FB9\u680F",
19392
+ collapseSidebar: "\u6298\u53E0\u4FA7\u8FB9\u680F",
19393
+ notes: "\u7B14\u8BB0",
19394
+ skills: "\u6280\u80FD",
19395
+ settings: "\u8BBE\u7F6E",
19396
+ help: "\u5E2E\u52A9",
19397
+ updateAvailable: "\u65B0\u7248\u672C v{{version}} \u53EF\u7528",
19398
+ copyUpgradeCommand: "\u590D\u5236 cockpit update",
19399
+ viewChangelog: "\u67E5\u770B\u53D8\u66F4\u65E5\u5FD7",
19400
+ upgradeCommandCopied: "\u5DF2\u590D\u5236 `cockpit update`",
19401
+ projectNotes: "\u9879\u76EE\u7B14\u8BB0",
19402
+ closeProject: "\u5173\u95ED\u9879\u76EE"
19403
+ },
19404
+ mobile: {
19405
+ useDesktop: "\u684C\u9762\u7248",
19406
+ messagePlaceholder: "\u53D1\u6D88\u606F\u2026",
19407
+ send: "\u53D1\u9001",
19408
+ stop: "\u505C\u6B62",
19409
+ enableNotifications: "\u5F00\u542F\u901A\u77E5",
19410
+ disableNotifications: "\u5173\u95ED\u901A\u77E5",
19411
+ notifyError: "\u65E0\u6CD5\u5F00\u542F\u901A\u77E5"
19412
+ },
19413
+ sessions: {
19414
+ recentSessions: "\u6700\u8FD1\u4F1A\u8BDD",
19415
+ runningCount: "{{count}} \u8FD0\u884C\u4E2D",
19416
+ unreadCount: "{{count}} \u672A\u8BFB",
19417
+ noSessions: "\u6682\u65E0\u4F1A\u8BDD\u8BB0\u5F55",
19418
+ running: "\u8FD0\u884C\u4E2D",
19419
+ done: "\u5B8C\u6210",
19420
+ pinnedSessions: "\u5E38\u7528\u4F1A\u8BDD",
19421
+ noPinnedSessions: "\u6682\u65E0\u5E38\u7528\u4F1A\u8BDD\uFF0C\u5728 Tab \u680F\u70B9\u51FB\u56FE\u9489\u53EF\u6DFB\u52A0",
19422
+ editTitle: "\u7F16\u8F91\u6807\u9898",
19423
+ remove: "\u79FB\u9664",
19424
+ projectSessions: "\u9879\u76EE\u4F1A\u8BDD",
19425
+ browseAllSessions: "\u6D4F\u89C8\u6240\u6709\u4F1A\u8BDD",
19426
+ sessionList: "\u4F1A\u8BDD\u5217\u8868",
19427
+ searchSessions: "\u641C\u7D22\u4F1A\u8BDD...",
19428
+ searchRecentSessions: "\u641C\u7D22\u6700\u8FD1\u4F1A\u8BDD",
19429
+ loadSessionsFailed: "\u52A0\u8F7D\u4F1A\u8BDD\u5931\u8D25",
19430
+ loadingSessions: "\u52A0\u8F7D\u4F1A\u8BDD\u4E2D...",
19431
+ noMatchingSessions: "\u672A\u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD",
19432
+ noSessionsYet: "\u6682\u65E0\u4F1A\u8BDD",
19433
+ projectList: "\u9879\u76EE\u5217\u8868",
19434
+ openFolder: "\u6253\u5F00\u6587\u4EF6\u5939",
19435
+ selectingFolder: "\u9009\u62E9\u4E2D...",
19436
+ loadingHistory: "\u52A0\u8F7D\u5386\u53F2\u6D88\u606F..."
19437
+ },
19438
+ scheduledTasks: {
19439
+ title: "\u5B9A\u65F6\u4EFB\u52A1",
19440
+ aboutToTrigger: "\u5373\u5C06\u89E6\u53D1",
19441
+ secondsLater: "{{count}}\u79D2\u540E",
19442
+ minutesLater: "{{count}}\u5206\u949F\u540E",
19443
+ hoursMinutesLater: "{{h}}\u5C0F\u65F6{{m}}\u5206\u540E",
19444
+ hoursLater: "{{h}}\u5C0F\u65F6\u540E",
19445
+ onceType: "\u4E00\u6B21\u6027 ({{minutes}}\u5206\u949F)",
19446
+ everyNMinutes: "\u6BCF{{minutes}}\u5206\u949F",
19447
+ completed: "\u5DF2\u5B8C\u6210",
19448
+ paused: "\u5DF2\u6682\u505C",
19449
+ activeCount: "{{running}} \u4E2A\u6D3B\u8DC3",
19450
+ pausedCount: "{{paused}} \u4E2A\u6682\u505C",
19451
+ noScheduledTasks: "\u6682\u65E0\u5B9A\u65F6\u4EFB\u52A1\uFF0C\u5728\u804A\u5929\u8F93\u5165\u680F\u70B9\u51FB\u65F6\u949F\u6309\u94AE\u521B\u5EFA",
19452
+ lastResult: "\u4E0A\u6B21",
19453
+ runNow: "\u7ACB\u5373\u8FD0\u884C",
19454
+ resume: "\u6062\u590D",
19455
+ pause: "\u6682\u505C",
19456
+ completedCount: "\u5DF2\u5B8C\u6210 ({{count}})",
19457
+ success: "\u6210\u529F",
19458
+ failure: "\u5931\u8D25",
19459
+ createTask: "\u521B\u5EFA\u5B9A\u65F6\u4EFB\u52A1",
19460
+ editTask: "\u7F16\u8F91\u5B9A\u65F6\u4EFB\u52A1",
19461
+ sendMessage: "\u53D1\u9001\u6D88\u606F",
19462
+ messagePlaceholder: "\u8F93\u5165\u8981\u53D1\u9001\u7684\u6D88\u606F...",
19463
+ taskFile: "\u4EFB\u52A1\u6587\u4EF6",
19464
+ taskFilePlaceholder: "/Users/you/project/tasks/daily-report.md",
19465
+ taskFileHint: "\u586B\u5199\u7EDD\u5BF9\u8DEF\u5F84\u3002\u89E6\u53D1\u65F6\u4F1A\u8BA9 agent \u5148\u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u518D\u6309\u5176\u4E2D\u63CF\u8FF0\u6267\u884C\u2014\u2014\u6587\u4EF6\u5185\u5BB9\u6539\u52A8\u4E0B\u6B21\u89E6\u53D1\u5373\u751F\u6548\u3002",
19466
+ taskFilePromptHeader: "\u8BF7\u5148\u8BFB\u53D6\u4EE5\u4E0B\u4EFB\u52A1\u6587\u4EF6\uFF0C\u518D\u636E\u6B64\u6267\u884C\uFF1A",
19467
+ type: "\u7C7B\u578B",
19468
+ once: "\u4E00\u6B21\u6027",
19469
+ interval: "\u5468\u671F",
19470
+ quickSelect: "\u5FEB\u6377\u9009\u62E9",
19471
+ customCron: "\u81EA\u5B9A\u4E49 Cron \u8868\u8FBE\u5F0F",
19472
+ customMinutes: "\u81EA\u5B9A\u4E49\u5206\u949F\u6570",
19473
+ cronPlaceholder: "\u4F8B: 0 9 * * 1-5 (\u5DE5\u4F5C\u65E59\u70B9)",
19474
+ cronFormat: "\u683C\u5F0F\uFF1A\u5206 \u65F6 \u65E5 \u6708 \u661F\u671F\uFF08\u5982 0 9 * * 1-5\uFF09",
19475
+ minutesPlaceholder: "\u5206\u949F\u6570",
19476
+ limitTimeRange: "\u9650\u5236\u6267\u884C\u65F6\u6BB5",
19477
+ to: "\u81F3",
19478
+ saveBtn: "\u4FDD\u5B58 ({{modKey}}\u21A9)",
19479
+ createBtn: "\u521B\u5EFA ({{modKey}}\u21A9)",
19480
+ "5minLater": "5 \u5206\u949F\u540E",
19481
+ "15minLater": "15 \u5206\u949F\u540E",
19482
+ "30minLater": "30 \u5206\u949F\u540E",
19483
+ "1hourLater": "1 \u5C0F\u65F6\u540E",
19484
+ every15min: "\u6BCF 15 \u5206\u949F",
19485
+ every30min: "\u6BCF 30 \u5206\u949F",
19486
+ every1hour: "\u6BCF 1 \u5C0F\u65F6",
19487
+ every2hours: "\u6BCF 2 \u5C0F\u65F6",
19488
+ daily9am: "\u6BCF\u5929 09:00",
19489
+ daily6pm: "\u6BCF\u5929 18:00",
19490
+ weeklyMon9am: "\u6BCF\u5468\u4E00 09:00",
19491
+ monthly1st9am: "\u6BCF\u6708 1 \u53F7 09:00"
19492
+ },
19493
+ cron: {
19494
+ everyNMinutes: "\u6BCF {{n}} \u5206\u949F",
19495
+ everyNHours: "\u6BCF {{n}} \u5C0F\u65F6\u6574\u70B9",
19496
+ everyMinute: "\u6BCF\u5206\u949F",
19497
+ everyHourAtMin: "\u6BCF\u5C0F\u65F6\u7B2C {{m}} \u5206",
19498
+ hourlyEveryMin: "{{h}} \u70B9\u6BCF\u5206\u949F",
19499
+ daily: "\u6BCF\u5929 {{time}}",
19500
+ weekdays: "\u5DE5\u4F5C\u65E5",
19501
+ weekends: "\u5468\u672B",
19502
+ dowSun: "\u65E5",
19503
+ dowMon: "\u4E00",
19504
+ dowTue: "\u4E8C",
19505
+ dowWed: "\u4E09",
19506
+ dowThu: "\u56DB",
19507
+ dowFri: "\u4E94",
19508
+ dowSat: "\u516D",
19509
+ monthPrefix: "\u6708",
19510
+ dayOfMonth: "\u53F7",
19511
+ dayRange: "{{a}}\u53F7\u5230{{b}}\u53F7",
19512
+ weekdayPrefix: "\u5468",
19513
+ weekdayRange: "\u5468{{a}}\u5230\u5468{{b}}"
19514
+ },
19515
+ blockViewer: {
19516
+ empty: {
19517
+ body: "\u5728\u5DE6\u4FA7\u6587\u4EF6\u6811\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\uFF0C\u67E5\u770B\u5B83\u7684\u4EE3\u7801\u5730\u56FE\u3002",
19518
+ hint: "\u6216\u6309 \u2318K \u641C\u7D22\u3002"
19519
+ },
19520
+ fileMode: {
19521
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
19522
+ notFound: "\u8BE5\u6587\u4EF6\u672A\u7D22\u5F15\uFF08\u4E0D\u652F\u6301\u7684\u8BED\u8A00\u6216\u8D85\u51FA\u6587\u4EF6\u4E0A\u9650\uFF09\u3002"
19523
+ },
19524
+ search: {
19525
+ tooltip: "\u641C\u7D22 (\u2318K)",
19526
+ hint: "\u5F00\u59CB\u8F93\u5165\u4EE5\u641C\u7D22",
19527
+ noResults: "\u672A\u627E\u5230\u5339\u914D",
19528
+ files: "\u6587\u4EF6",
19529
+ symbols: "\u7B26\u53F7"
19530
+ },
19531
+ viewerToggle: {
19532
+ toBlock: "\u663E\u793A\u4EE3\u7801\u5730\u56FE",
19533
+ toCode: "\u8FD4\u56DE\u4EE3\u7801\u89C6\u56FE"
19534
+ },
19535
+ toc: {
19536
+ title: "\u672C\u6587\u4EF6",
19537
+ empty: "\u672A\u68C0\u6D4B\u5230\u51FD\u6570\u3002",
19538
+ notIndexed: "\u8BE5\u6587\u4EF6\u672A\u88AB\u9879\u76EE\u56FE\u6536\u5F55\uFF08\u6269\u5C55\u672A\u652F\u6301 / \u4E0D\u5728 git \u8DDF\u8E2A\u96C6 / \u8D85\u51FA\u6587\u4EF6\u4E0A\u9650\uFF09\u3002"
19539
+ },
19540
+ history: {
19541
+ title: "\u5386\u53F2",
19542
+ empty: "\u70B9\u51FB\u5DE6\u53F3\u4E24\u4FA7\u7684 pin \u5F00\u59CB\u8FFD\u8E2A\u8C03\u7528\u94FE\u3002",
19543
+ clear: "\u6E05\u7A7A\u5386\u53F2"
19544
+ },
19545
+ refresh: "\u91CD\u65B0\u6784\u5EFA\u9879\u76EE\u56FE",
19546
+ retry: "\u91CD\u8BD5"
19547
+ },
19548
+ blockDiffViewer: {
19549
+ loading: "\u6B63\u5728\u751F\u6210\u4EE3\u7801\u5730\u56FE\u2026",
19550
+ unsupported: "\u8BE5\u6587\u4EF6\u7C7B\u578B\u6682\u4E0D\u652F\u6301\u4EE3\u7801\u5730\u56FE diff",
19551
+ unsupportedHint: "\u5207\u56DE\u5E38\u89C4 diff \u89C6\u56FE\u67E5\u770B\u3002",
19552
+ error: "\u4EE3\u7801\u5730\u56FE diff \u5931\u8D25\uFF1A{{message}}",
19553
+ noBlockChanges: "\u4EE3\u7801\u5730\u56FE\u65E0\u53D8\u5316\uFF08\u4EC5\u683C\u5F0F\u6216\u7A7A\u767D\uFF09\u3002",
19554
+ noBefore: "\uFF08\u65B0\u589E\uFF09",
19555
+ noAfter: "\uFF08\u5DF2\u5220\u9664\uFF09",
19556
+ kind: {
19557
+ added: "\u65B0\u589E",
19558
+ deleted: "\u5220\u9664",
19559
+ modified: "\u4FEE\u6539"
19560
+ }
19561
+ },
19562
+ fileBrowser: {
19563
+ directoryTree: "\u76EE\u5F55\u6811",
19564
+ searchTab: "\u641C\u7D22",
19565
+ recentTab: "\u6700\u8FD1",
19566
+ changesTab: "\u53D8\u66F4",
19567
+ historyTab: "\u5386\u53F2",
19568
+ searchFiles: "\u641C\u7D22\u6587\u4EF6...",
19569
+ clear: "\u6E05\u9664",
19570
+ exactMatchOn: "\u5168\u8BCD\u5339\u914D\uFF08\u5DF2\u5F00\u542F\uFF09",
19571
+ exactMatchOff: "\u5168\u8BCD\u5339\u914D\uFF08\u5DF2\u5173\u95ED\uFF09",
19572
+ refreshTree: "\u5237\u65B0\u76EE\u5F55\u6811",
19573
+ collapseAll: "\u6298\u53E0\u6240\u6709\u76EE\u5F55",
19574
+ searchFileContent: "\u641C\u7D22\u6587\u4EF6\u5185\u5BB9...",
19575
+ caseSensitive: "\u533A\u5206\u5927\u5C0F\u5199",
19576
+ wholeWord: "\u5B8C\u6574\u8BCD",
19577
+ regex: "\u6B63\u5219",
19578
+ fileTypes: "\u6587\u4EF6\u7C7B\u578B (ts,tsx)",
19579
+ compareMode: "\u5BF9\u6BD4",
19580
+ compareModeOff: "\u5173\u95ED\u5206\u652F\u5BF9\u6BD4",
19581
+ compareModeOn: "\u4E0E\u9009\u5B9A\u5206\u652F\u5BF9\u6BD4",
19582
+ createFile: "\u65B0\u5EFA\u6587\u4EF6",
19583
+ createFileIn: "\u65B0\u5EFA\u6587\u4EF6 (\u5728 {{path}}/)",
19584
+ fileName: "\u6587\u4EF6\u540D...",
19585
+ noRecentFiles: "\u6682\u65E0\u6700\u8FD1\u6D4F\u89C8\u7684\u6587\u4EF6",
19586
+ stagingArea: "\u6682\u5B58\u533A ({{count}})",
19587
+ changesSummary_one: "{{count}} \u4E2A\u53D8\u66F4",
19588
+ changesSummary_other: "{{count}} \u4E2A\u53D8\u66F4",
19589
+ noChanges: "\u5DE5\u4F5C\u533A\u65E0\u53D8\u66F4",
19590
+ refreshChanges: "\u5237\u65B0\u53D8\u66F4\u5217\u8868",
19591
+ unstageAll: "\u5168\u90E8\u53D6\u6D88",
19592
+ noStagedFiles: "\u65E0\u6682\u5B58\u7684\u6587\u4EF6",
19593
+ unstageNFiles: "\u53D6\u6D88\u6682\u5B58 {{count}} \u4E2A\u6587\u4EF6",
19594
+ unstageFile: "\u53D6\u6D88\u6682\u5B58",
19595
+ workspace: "\u5DE5\u4F5C\u533A ({{count}})",
19596
+ discardAll: "\u653E\u5F03\u6240\u6709",
19597
+ stageAll: "\u5168\u90E8\u6682\u5B58",
19598
+ noUnstagedChanges: "\u65E0\u672A\u6682\u5B58\u7684\u53D8\u66F4",
19599
+ discardNFiles: "\u653E\u5F03 {{count}} \u4E2A\u6587\u4EF6\u7684\u53D8\u66F4",
19600
+ stageNFiles: "\u6682\u5B58 {{count}} \u4E2A\u6587\u4EF6",
19601
+ discardChanges: "\u653E\u5F03\u53D8\u66F4",
19602
+ stageFile: "\u6682\u5B58\u6587\u4EF6",
19603
+ loadingDiff: "\u52A0\u8F7D\u5BF9\u6BD4\u6587\u4EF6\u4E2D...",
19604
+ noDiffFiles: "\u65E0\u5DEE\u5F02\u6587\u4EF6",
19605
+ nFilesChanged: "{{count}} \u4E2A\u6587\u4EF6\u53D8\u66F4\uFF08vs {{branch}}\uFF09",
19606
+ loadingCommits: "\u52A0\u8F7D\u63D0\u4EA4\u8BB0\u5F55\u4E2D...",
19607
+ noCommits: "\u65E0\u63D0\u4EA4\u8BB0\u5F55",
19608
+ allLoaded: "\u5DF2\u52A0\u8F7D\u5168\u90E8 {{count}} \u6761\u8BB0\u5F55",
19609
+ locateInTree: "\u5728\u76EE\u5F55\u6811\u4E2D\u5B9A\u4F4D",
19610
+ unsaved: "\u672A\u4FDD\u5B58",
19611
+ saveBeforeSwitch: "\u5F53\u524D\u6587\u4EF6\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF0C\u662F\u5426\u4FDD\u5B58\u540E\u5207\u6362\uFF1F",
19612
+ saveAndSwitch: "\u4FDD\u5B58\u5E76\u5207\u6362",
19613
+ closeEdit: "\u5173\u95ED\u7F16\u8F91 (ESC)",
19614
+ closeBtn: "\u5173\u95ED",
19615
+ copyFileContent: "\u590D\u5236\u6587\u4EF6\u5185\u5BB9",
19616
+ toggleJsonReadable: "\u5207\u6362 JSON \u53EF\u8BFB\u6A21\u5F0F",
19617
+ previewMarkdown: "\u9884\u89C8 Markdown \u6E32\u67D3\u6548\u679C",
19618
+ exitPreview: "\u9000\u51FA\u9884\u89C8",
19619
+ viewBlame: "\u67E5\u770B\u6BCF\u884C\u4EE3\u7801\u7684\u4FEE\u6539\u8BB0\u5F55",
19620
+ viewDiff: "\u67E5\u770B\u76F8\u5BF9 HEAD \u7684\u6539\u52A8",
19621
+ exitDiff: "\u9000\u51FA Diff",
19622
+ diffLoadFailed: "\u52A0\u8F7D\u5DEE\u5F02\u5931\u8D25",
19623
+ editFile: "\u7F16\u8F91\u6587\u4EF6",
19624
+ backToPreview: "\u8FD4\u56DE\u9884\u89C8",
19625
+ cannotPreview: "\u65E0\u6CD5\u9884\u89C8\u6B64\u6587\u4EF6",
19626
+ selectFileToPreview: "\u9009\u62E9\u6587\u4EF6\u4EE5\u9884\u89C8",
19627
+ staged: "\u5DF2\u6682\u5B58",
19628
+ unstaged: "\u672A\u6682\u5B58",
19629
+ selectFileToViewDiff: "\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",
19630
+ loadingDiffContent: "\u52A0\u8F7D\u5DEE\u5F02\u4E2D...",
19631
+ clickCompareToLoad: "\u70B9\u51FB\u300C\u5BF9\u6BD4\u300D\u52A0\u8F7D\u5206\u652F\u5DEE\u5F02",
19632
+ selectCommitToView: "\u9009\u62E9\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5",
19633
+ confirmDelete: "\u786E\u8BA4\u5220\u9664",
19634
+ confirmDeleteMessage: "\u786E\u5B9A\u8981\u5C06 <file>{{name}}</file> \u79FB\u52A8\u5230\u56DE\u6536\u7AD9\u5417\uFF1F",
19635
+ nFilesNMatches: "{{files}} \u4E2A\u6587\u4EF6\uFF0C{{matches}} \u5904\u5339\u914D",
19636
+ resultsTruncated: "\u7ED3\u679C\u5DF2\u622A\u65AD",
19637
+ noContentSearchResults: "\u65E0\u5339\u914D\u7ED3\u679C",
19638
+ enterKeywordToSearch: "\u8F93\u5165\u5173\u952E\u8BCD\u641C\u7D22\u6587\u4EF6\u5185\u5BB9",
19639
+ searchMinChars: "\u641C\u7D22\u5185\u5BB9\u81F3\u5C11\u9700\u8981 2 \u4E2A\u5B57\u7B26"
19640
+ },
19641
+ codeViewer: {
19642
+ fileModifiedExternally: "\u6587\u4EF6\u5DF2\u88AB\u5916\u90E8\u4FEE\u6539\uFF0C\u4FDD\u5B58\u5C06\u8986\u76D6\u5916\u90E8\u66F4\u6539",
19643
+ useDiskVersion: "\u4F7F\u7528\u78C1\u76D8\u7248\u672C",
19644
+ forceOverwrite: "\u5F3A\u5236\u8986\u76D6",
19645
+ searchPlaceholder: "\u641C\u7D22...",
19646
+ caseSensitive: "\u533A\u5206\u5927\u5C0F\u5199",
19647
+ wholeWordMatch: "\u5168\u5B57\u5339\u914D",
19648
+ unsavedConfirm: "\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF0C\u786E\u5B9A\u5173\u95ED\uFF1F",
19649
+ discardChanges: "\u653E\u5F03\u4FEE\u6539",
19650
+ continueEditing: "\u7EE7\u7EED\u7F16\u8F91",
19651
+ unsavedExitConfirm: "\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF0C\u786E\u5B9A\u9000\u51FA\u7F16\u8F91\u6A21\u5F0F\uFF1F",
19652
+ clickToViewDetails: "\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5",
19653
+ clickToViewCommit: "\u70B9\u51FB\u67E5\u770B commit \u8BE6\u60C5",
19654
+ nComments: "{{count}} \u6761\u8BC4\u8BBA",
19655
+ searchChat: "\u641C\u7D22\u804A\u5929\u5185\u5BB9...",
19656
+ prevShiftEnter: "\u4E0A\u4E00\u4E2A (Shift+Enter)",
19657
+ nextEnter: "\u4E0B\u4E00\u4E2A (Enter)",
19658
+ closeEsc: "\u5173\u95ED (Esc)"
19659
+ },
19660
+ chat: {
19661
+ startConversation: "\u5F00\u59CB\u5BF9\u8BDD\u5427",
19662
+ loadMoreHistory: "\u52A0\u8F7D\u66F4\u591A...",
19663
+ scrollUpForMore: "\u2191 \u5411\u4E0A\u6EDA\u52A8\u52A0\u8F7D\u66F4\u591A\u5386\u53F2",
19664
+ claudeThinking: "Claude \u6B63\u5728\u601D\u8003...",
19665
+ jumpToStart: "\u8DF3\u8F6C\u5230\u5F00\u59CB",
19666
+ jumpToLatest: "\u8DF3\u8F6C\u5230\u6700\u65B0",
19667
+ copyMessage: "\u590D\u5236\u6D88\u606F",
19668
+ forkSession: "\u4ECE\u6B64\u5904\u5206\u53C9\u4F1A\u8BDD",
19669
+ imageN: "\u56FE\u7247 {{index}}",
19670
+ imagePreview: "\u56FE\u7247\u9884\u89C8",
19671
+ toolCalls: "{{count}} \u4E2A\u5DE5\u5177\u8C03\u7528",
19672
+ collapse: "\u25B2 \u6536\u8D77",
19673
+ expand: "\u25BC \u5C55\u5F00",
19674
+ subagent: "\u5B50\u4EE3\u7406",
19675
+ subagentEmpty: "\u672A\u627E\u5230\u5B50\u4EE3\u7406\u6D88\u606F\u8BB0\u5F55",
19676
+ subagentViewTitle: "\u67E5\u770B\u5B50\u4EE3\u7406\u6267\u884C\u8FC7\u7A0B",
19677
+ workflowRun: "\u8FD0\u884C\u8BE6\u60C5",
19678
+ workflowViewTitle: "\u67E5\u770B\u5DE5\u4F5C\u6D41\u8FD0\u884C\u8BE6\u60C5",
19679
+ workflowEmpty: "\u672A\u627E\u5230\u5DE5\u4F5C\u6D41\u8FD0\u884C\u8BB0\u5F55",
19680
+ workflowAgents: "\u4E2A\u4EE3\u7406",
19681
+ workflowViewAgent: "\u67E5\u770B",
19682
+ workflowUngrouped: "\u672A\u5206\u7EC4",
19683
+ viewQuestions: "\u67E5\u770B\u63D0\u95EE",
19684
+ viewAllFileChanges: "\u67E5\u770B\u6240\u6709\u6587\u4EF6\u53D8\u66F4",
19685
+ requestFailed: "\u8BF7\u6C42\u5931\u8D25",
19686
+ cannotReadStream: "\u65E0\u6CD5\u8BFB\u53D6\u54CD\u5E94\u6D41",
19687
+ errorRetry: "\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5",
19688
+ placeholder: "\u8F93\u5165\u6D88\u606F\uFF0CEnter \u53D1\u9001\uFF08Shift+Enter \u6362\u884C\uFF0C\u53EF\u7C98\u8D34\u56FE\u7247\uFF1B\u884C\u9996 /\uFF08\u4E3B\u4F1A\u8BDD\uFF09\u6216 @\uFF08\u5B50\u4EE3\u7406\uFF09\u5524\u8D77\u547D\u4EE4\uFF0C\u652F\u6301\u591A\u884C\u591A\u547D\u4EE4\uFF09",
19689
+ placeholderDisabled: "\u751F\u6210\u4E2D... \u53EF\u7EE7\u7EED\u8F93\u5165 (ESC \u53D6\u6D88;\u5361\u4F4F\u592A\u4E45\u53EF\u53D6\u6D88\u540E\u91CD\u53D1\u300C\u7EE7\u7EED\u300D)",
19690
+ imageSizeLimit: "\u56FE\u7247\u5927\u5C0F\u8D85\u8FC7\u9650\u5236\uFF08\u6700\u5927 5MB\uFF09\uFF0C\u5F53\u524D\u5927\u5C0F: {{size}}MB",
19691
+ stageAll: "\u6682\u5B58\u6240\u6709\u6587\u4EF6 (git add -A)",
19692
+ viewGitChanges: "\u67E5\u770B Git \u53D8\u66F4",
19693
+ viewAllComments: "\u67E5\u770B\u6240\u6709\u8BC4\u8BBA",
19694
+ userMessages: "\u7528\u6237\u6D88\u606F\u5217\u8868",
19695
+ projectNotes: "\u9879\u76EE\u7B14\u8BB0",
19696
+ scheduledTasks: "\u5B9A\u65F6\u4EFB\u52A1",
19697
+ quickPrompts: "\u5FEB\u6377 Prompt",
19698
+ globalPrompts: "\u5168\u5C40 Prompt",
19699
+ projectPrompts: "\u9879\u76EE Prompt",
19700
+ noQuickPrompts: "\u6682\u65E0\u5FEB\u6377 Prompt",
19701
+ addQuickPrompt: "\u65B0\u589E\u5FEB\u6377 Prompt",
19702
+ quickPromptPlaceholder: "\u8F93\u5165\u4E00\u53E5\u8BDD Prompt\uFF0CEnter \u4FDD\u5B58\uFF0CEsc \u53D6\u6D88",
19703
+ context: "\u4E0A\u4E0B\u6587",
19704
+ output: "\u8F93\u51FA",
19705
+ copiedCommandTooltip: "\u5DF2\u590D\u5236!",
19706
+ copyCommandTooltip: "\u590D\u5236\u547D\u4EE4: claude -r {{sessionId}}",
19707
+ executedCommand: "\u6267\u884C\u4E86 `{{command}}`{{exitInfo}}\uFF0C\u8F93\u51FA\uFF1A\n```\n{{output}}\n```",
19708
+ executedCommandFailed: "\u6267\u884C `{{command}}` \u5931\u8D25\uFF1A{{error}}",
19709
+ executionMode: "\u6267\u884C\u6A21\u5F0F",
19710
+ checkBalance: "\u67E5\u8BE2\u4F59\u989D",
19711
+ balanceFailed: "\u67E5\u8BE2\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5 API Key",
19712
+ balanceNeedsKey: "\u8BF7\u5148\u914D\u7F6E DeepSeek API Key",
19713
+ balanceUnavailable: "\u8D26\u6237\u5F53\u524D\u4E0D\u53EF\u7528",
19714
+ balanceEmpty: "\u63A5\u53E3\u672A\u8FD4\u56DE\u4F59\u989D",
19715
+ openUsagePage: "\u6253\u5F00 DeepSeek \u7528\u91CF\u63A7\u5236\u53F0",
19716
+ ptyModeHint: "\u8BA2\u9605\u8BA1\u8D39\u6A21\u5F0F\uFF1A\u7528\u4EA4\u4E92\u5F0F claude CLI \u9A71\u52A8",
19717
+ planMode: "\u8BA1\u5212\u6A21\u5F0F",
19718
+ planModeDesc: "\u53EA\u8BFB\xB7\u5148\u51FA\u8BA1\u5212\u4E0D\u6539\u4EE3\u7801",
19719
+ planModeOn: "\u5DF2\u5F00\u542F\u8BA1\u5212\u6A21\u5F0F\u2014\u2014\u53EA\u8BFB;\u53D1\u4E00\u4E2A\u4EFB\u52A1\u5373\u53EF\u62FF\u5230\u8BA1\u5212",
19720
+ planModeOff: "\u5DF2\u5173\u95ED\u8BA1\u5212\u6A21\u5F0F",
19721
+ planModeHint: "\u8BA1\u5212\u6A21\u5F0F\uFF1A\u53EA\u8BFB\u63A2\u7D22\u3001\u4EA7\u51FA\u8BA1\u5212\u4F46\u4E0D\u6539\u6587\u4EF6\u3002\u53D6\u6D88\u52FE\u9009\u540E\u91CD\u53D1\u624D\u4F1A\u5B9E\u73B0\u3002",
19722
+ noHistory: "\u72EC\u7ACB\u4EFB\u52A1",
19723
+ noHistoryDesc: "\u4E0D\u53D1\u9001\u5386\u53F2",
19724
+ noHistoryHint: "\u72EC\u7ACB\u4EFB\u52A1\uFF1A\u6BCF\u6761\u6D88\u606F\u5355\u72EC\u53D1\u7ED9\u6A21\u578B\uFF0C\u4E0D\u5E26\u4E4B\u524D\u7684\u5BF9\u8BDD\u3002\u4E0A\u65B9\u7684\u4F1A\u8BDD\u8BB0\u5F55\u7167\u5E38\u4FDD\u7559\u3002",
19725
+ planTitle: "\u8BA1\u5212\uFF08\u5F85\u4F60\u786E\u8BA4\uFF09",
19726
+ approvePlan: "\u6279\u51C6\u5E76\u6267\u884C",
19727
+ planApproveHint: "\u672C\u73AF\u5883\u65E0\u5BA1\u6279\u5F39\u7A97\uFF0C\u70B9\u6B64\u9000\u51FA\u8BA1\u5212\u6A21\u5F0F\u5E76\u6267\u884C",
19728
+ approvePlanPrompt: "\u5DF2\u6279\u51C6\uFF0C\u6309\u4E0A\u8FF0\u8BA1\u5212\u5F00\u59CB\u6267\u884C\u3002",
19729
+ ptyTerminal: "PTY \u7EC8\u7AEF",
19730
+ ptyRunning: "\u8FD0\u884C\u4E2D",
19731
+ ptyCollapse: "\u6536\u8D77",
19732
+ ptyExpand: "\u5C55\u5F00",
19733
+ ptyStuck: "PTY \u4F3C\u4E4E\u5361\u4F4F\uFF08\u53EF\u80FD\u5728\u7B49\u5F85\u5BF9\u8BDD\u6846\u8F93\u5165\uFF09\uFF0C\u8BF7\u5728 PTY \u7EC8\u7AEF\u624B\u52A8\u5904\u7406\u3002",
19734
+ ptyTimedOut: "PTY \u8D85\u65F6\u672A\u4EBA\u5DE5\u5904\u7406\uFF0C\u5DF2\u7ED3\u675F\u8BE5\u56DE\u5408\u3002",
19735
+ ptyCrash: "Claude CLI \u6E32\u67D3\u5D29\u6E83\uFF08\u4E0A\u6E38 bug\uFF09\uFF1A{{error}}\u3002\u8BE5\u4F1A\u8BDD\u5386\u53F2\u53EF\u80FD\u542B\u65E0\u6CD5\u6E32\u67D3\u7684\u7F16\u8F91\u8BB0\u5F55\u3002",
19736
+ ptyQuestionEsc: "AI \u7684\u4EA4\u4E92\u5F0F\u63D0\u95EE\u65E0\u6CD5\u5728\u672C\u6A21\u5F0F\u4E2D\u5E94\u7B54\uFF0C\u5DF2\u81EA\u52A8\u53D6\u6D88\u5E76\u7ED3\u675F\u672C\u8F6E\u3002\u95EE\u9898\u5185\u5BB9\u89C1\u804A\u5929\u533A\uFF0C\u4E0B\u4E00\u6761\u6D88\u606F\u76F4\u63A5\u56DE\u7B54\u5373\u53EF\u3002"
19737
+ },
19738
+ console: {
19739
+ enterCommandOrUrl: "\u8F93\u5165\u547D\u4EE4\u6216\u7F51\u5740\u5F00\u59CB\u4F7F\u7528",
19740
+ emptyIntro: "\u5728\u4E0B\u65B9\u8F93\u5165\u6846\u8F93\u5165\u4EE5\u4E0B\u5185\u5BB9\uFF0C\u5373\u53EF\u521B\u5EFA\u5BF9\u5E94\u6C14\u6CE1\uFF1A",
19741
+ bubbleCommand: "\u547D\u4EE4",
19742
+ bubbleInteractive: "\u4EA4\u4E92\u7EC8\u7AEF",
19743
+ bubbleBrowser: "\u6D4F\u89C8\u5668",
19744
+ bubbleBrowserNoteIframe: "\u90E8\u5206\u7F51\u7AD9\u4F1A\u62E6\u622A iframe \u5D4C\u5165\uFF0C\u8BF7\u5728\u300C\u8BBE\u7F6E \u2192 \u6D4F\u89C8\u5668\u63D2\u4EF6\u300D\u5B89\u88C5 Cockpit Bridge \u540E\u518D\u6253\u5F00\u3002",
19745
+ bubbleBrowserNoteCookie: "\u5DF2\u767B\u5F55\u7684\u7F51\u7AD9\u82E5\u9996\u6B21\u663E\u793A\u672A\u767B\u5F55\uFF0C\u591A\u5237\u65B0\u51E0\u6B21\u5373\u53EF\u6062\u590D\u3002",
19746
+ bubbleDatabase: "\u6570\u636E\u5E93",
19747
+ bubbleNotebook: "\u7B14\u8BB0\u672C",
19748
+ loadingMore: "\u52A0\u8F7D\u4E2D...",
19749
+ loadMoreHistory: "\u52A0\u8F7D\u66F4\u591A\u5386\u53F2",
19750
+ quickCommands: "\u5FEB\u6377\u547D\u4EE4",
19751
+ singleColumn: "\u5355\u5217\u5E03\u5C40",
19752
+ dualColumn: "\u53CC\u5217\u5E03\u5C40",
19753
+ envVars: "\u73AF\u5883\u53D8\u91CF",
19754
+ launchZsh: "\u542F\u52A8 zsh \u4EA4\u4E92\u7EC8\u7AEF",
19755
+ htmlApps: "HTML \u5E94\u7528",
19756
+ inputPlaceholder: "\u8F93\u5165\u547D\u4EE4\u6216\u7F51\u5740\u5E76\u6309 Enter... (\u2191\u2193 \u5386\u53F2, Tab \u8865\u5168)",
19757
+ scopeProject: "\u9879\u76EE",
19758
+ scopeGlobal: "\u5168\u5C40",
19759
+ tabSwitchEscClose: "Tab \u5207\u6362 \xB7 Esc \u5173\u95ED",
19760
+ copyOutput: "\u590D\u5236\u8F93\u51FA",
19761
+ copyCommand: "\u590D\u5236\u547D\u4EE4",
19762
+ rerun: "\u91CD\u65B0\u8FD0\u884C",
19763
+ deleteRecord: "\u5220\u9664\u8BB0\u5F55",
19764
+ searchPlaceholder: "\u641C\u7D22...",
19765
+ searchMode: "\u641C\u7D22",
19766
+ filterMode: "\u8FC7\u6EE4",
19767
+ prevShiftEnter: "\u4E0A\u4E00\u4E2A (Shift+Enter)",
19768
+ nextEnter: "\u4E0B\u4E00\u4E2A (Enter)",
19769
+ loadingTerminal: "\u52A0\u8F7D\u7EC8\u7AEF...",
19770
+ clickToInput: "\u70B9\u51FB\u7EC8\u7AEF\u533A\u57DF\u8F93\u5165",
19771
+ stdinPlaceholder: "stdin \u8F93\u5165...",
19772
+ runningText: "\u8FD0\u884C\u4E2D...",
19773
+ exitCode: "\u9000\u51FA\u4EE3\u7801: {{code}}",
19774
+ totalLines: "\u5171 {{count}} \u884C",
19775
+ globalCommands: "\u5168\u5C40\u547D\u4EE4",
19776
+ projectCommands: "\u9879\u76EE\u547D\u4EE4",
19777
+ noCustomCommands: "\u6682\u65E0\u81EA\u5B9A\u4E49\u547D\u4EE4",
19778
+ namePlaceholder: "\u540D\u79F0",
19779
+ commandPlaceholder: "\u547D\u4EE4",
19780
+ restoreTooltip: "\u8FD8\u539F ({{modKey}}M / ESC)",
19781
+ screenshotting: "\u622A\u56FE\u4E2D...",
19782
+ outputFileDeleted: "[\u8F93\u51FA\u6587\u4EF6\u5DF2\u5220\u9664]"
19783
+ },
19784
+ browser: {
19785
+ blankPage: "\u7A7A\u767D\u9875",
19786
+ copyUrl: "\u590D\u5236\u7F51\u5740",
19787
+ openInNewWindow: "\u5728\u65B0\u7A97\u53E3\u6253\u5F00",
19788
+ exitMaximize: "\u9000\u51FA\u6700\u5927\u5316 ({{modKey}}M)",
19789
+ maximize: "\u6700\u5927\u5316 ({{modKey}}M)",
19790
+ pageLoadFailed: "\u9875\u9762\u52A0\u8F7D\u5931\u8D25",
19791
+ clickToWake: "\u70B9\u51FB\u5524\u9192",
19792
+ sleeping: "\u5DF2\u4F11\u7720",
19793
+ loadingPage: "\u52A0\u8F7D\u4E2D...",
19794
+ loadFailed: "\u52A0\u8F7D\u5931\u8D25"
19795
+ },
19796
+ database: {
19797
+ connectionFailed: "\u8FDE\u63A5\u5931\u8D25",
19798
+ connected: "\u5DF2\u8FDE\u63A5",
19799
+ connecting: "\u8FDE\u63A5\u4E2D...",
19800
+ refreshTableList: "\u5237\u65B0\u8868\u5217\u8868",
19801
+ filterTable: "T \u8868",
19802
+ filterView: "V \u89C6\u56FE",
19803
+ noTables: "\u65E0\u8868",
19804
+ tabStructure: "\u7ED3\u6784",
19805
+ tabData: "\u6570\u636E",
19806
+ tabSql: "SQL",
19807
+ filterActive: "\u7B5B\u9009: {{count}}\u5217",
19808
+ clearAllFilters: "\u6E05\u9664\u6240\u6709\u7B5B\u9009",
19809
+ deleteNRows: "\u5220\u9664 {{count}} \u884C",
19810
+ confirmDeleteRows: "\u786E\u8BA4\u5220\u9664?",
19811
+ copyCsvSelected: "\u590D\u5236\u9009\u4E2D\u884C\u4E3A CSV",
19812
+ copyCsvAll: "\u5BFC\u51FA\u5168\u8868 CSV",
19813
+ copyJsonSelected: "\u590D\u5236\u9009\u4E2D\u884C\u4E3A JSON",
19814
+ copyJsonAll: "\u5BFC\u51FA\u5168\u8868 JSON",
19815
+ copyCSV: "\u590D\u5236 CSV",
19816
+ CSV: "CSV",
19817
+ copyJSON: "\u590D\u5236 JSON",
19818
+ JSON: "JSON",
19819
+ selectTable: "\u9009\u62E9\u5DE6\u4FA7\u8868\u683C",
19820
+ selectTableToView: "\u9009\u62E9\u8868\u4EE5\u67E5\u770B\u7ED3\u6784",
19821
+ selectTableForData: "\u9009\u62E9\u8868\u4EE5\u67E5\u770B\u6570\u636E",
19822
+ columns: "\u5217",
19823
+ colName: "\u540D\u79F0",
19824
+ colType: "\u7C7B\u578B",
19825
+ colNullable: "\u53EF\u7A7A",
19826
+ colDefault: "\u9ED8\u8BA4\u503C",
19827
+ primaryKey: "\u4E3B\u952E",
19828
+ foreignKeys: "\u5916\u952E",
19829
+ indexes: "\u7D22\u5F15",
19830
+ enable: "\u542F\u7528",
19831
+ commaValues: "\u9017\u53F7\u5206\u9694\u591A\u503C",
19832
+ likePattern: "%pattern%",
19833
+ valuePlaceholder: "\u503C",
19834
+ apply: "\u5E94\u7528",
19835
+ clearFilter: "\u6E05\u9664",
19836
+ addRow: "+ \u65B0\u589E\u884C",
19837
+ totalRows: "{{count}} \u884C",
19838
+ rowsAffected: "{{command}} \u2014 {{count}} \u884C\u53D7\u5F71\u54CD ({{duration}}ms)",
19839
+ queryRows: "{{count}} \u884C ({{duration}}ms)",
19840
+ resultTruncated: "[\u7ED3\u679C\u5DF2\u622A\u65AD\u81F31000\u884C]",
19841
+ sqlPlaceholder: "\u8F93\u5165 SQL... ({{modKey}}Enter \u6267\u884C)",
19842
+ executing: "\u6267\u884C\u4E2D...",
19843
+ execute: "\u25B6 \u6267\u884C",
19844
+ deleteRowsFailed: "{{count}} \u884C\u5220\u9664\u5931\u8D25",
19845
+ inputParams: "\u8F93\u5165\u53C2\u6570",
19846
+ resultLabel: "\u7ED3\u679C"
19847
+ },
19848
+ mysql: {
19849
+ connectionFailed: "\u8FDE\u63A5\u5931\u8D25",
19850
+ connected: "\u5DF2\u8FDE\u63A5",
19851
+ connecting: "\u8FDE\u63A5\u4E2D...",
19852
+ refreshTableList: "\u5237\u65B0\u8868\u5217\u8868",
19853
+ filterTable: "T \u8868",
19854
+ filterView: "V \u89C6\u56FE",
19855
+ noTables: "\u65E0\u8868",
19856
+ tabStructure: "\u7ED3\u6784",
19857
+ tabData: "\u6570\u636E",
19858
+ tabSql: "SQL",
19859
+ filterActive: "\u7B5B\u9009: {{count}}\u5217",
19860
+ clearAllFilters: "\u6E05\u9664\u6240\u6709\u7B5B\u9009",
19861
+ deleteNRows: "\u5220\u9664 {{count}} \u884C",
19862
+ confirmDeleteRows: "\u786E\u8BA4\u5220\u9664?",
19863
+ copyCsvSelected: "\u590D\u5236\u9009\u4E2D\u884C\u4E3A CSV",
19864
+ copyCsvAll: "\u5BFC\u51FA\u5168\u8868 CSV",
19865
+ copyJsonSelected: "\u590D\u5236\u9009\u4E2D\u884C\u4E3A JSON",
19866
+ copyJsonAll: "\u5BFC\u51FA\u5168\u8868 JSON",
19867
+ copyCSV: "\u590D\u5236 CSV",
19868
+ CSV: "CSV",
19869
+ copyJSON: "\u590D\u5236 JSON",
19870
+ JSON: "JSON",
19871
+ selectTable: "\u9009\u62E9\u5DE6\u4FA7\u8868\u683C",
19872
+ selectTableToView: "\u9009\u62E9\u8868\u4EE5\u67E5\u770B\u7ED3\u6784",
19873
+ selectTableForData: "\u9009\u62E9\u8868\u4EE5\u67E5\u770B\u6570\u636E",
19874
+ columns: "\u5217",
19875
+ colName: "\u540D\u79F0",
19876
+ colType: "\u7C7B\u578B",
19877
+ colNullable: "\u53EF\u7A7A",
19878
+ colDefault: "\u9ED8\u8BA4\u503C",
19879
+ primaryKey: "\u4E3B\u952E",
19880
+ foreignKeys: "\u5916\u952E",
19881
+ indexes: "\u7D22\u5F15",
19882
+ enable: "\u542F\u7528",
19883
+ commaValues: "\u9017\u53F7\u5206\u9694\u591A\u503C",
19884
+ likePattern: "%pattern%",
19885
+ valuePlaceholder: "\u503C",
19886
+ apply: "\u5E94\u7528",
19887
+ clearFilter: "\u6E05\u9664",
19888
+ addRow: "+ \u65B0\u589E\u884C",
19889
+ totalRows: "{{count}} \u884C",
19890
+ rowsAffected: "{{command}} \u2014 {{count}} \u884C\u53D7\u5F71\u54CD ({{duration}}ms)",
19891
+ queryRows: "{{count}} \u884C ({{duration}}ms)",
19892
+ resultTruncated: "[\u7ED3\u679C\u5DF2\u622A\u65AD\u81F31000\u884C]",
19893
+ sqlPlaceholder: "\u8F93\u5165 SQL... ({{modKey}}Enter \u6267\u884C)",
19894
+ executing: "\u6267\u884C\u4E2D...",
19895
+ execute: "\u25B6 \u6267\u884C",
19896
+ deleteRowsFailed: "{{count}} \u884C\u5220\u9664\u5931\u8D25"
19897
+ },
19898
+ redis: {
19899
+ neverExpires: "\u6C38\u4E0D\u8FC7\u671F",
19900
+ expired: "\u5DF2\u8FC7\u671F",
19901
+ loadFailed: "\u52A0\u8F7D\u5931\u8D25",
19902
+ deleteFailed: "\u5220\u9664\u5931\u8D25",
19903
+ saveFailed: "\u4FDD\u5B58\u5931\u8D25",
19904
+ scanPlaceholder: "SCAN \u6A21\u5F0F...",
19905
+ scanSearch: "\u641C\u7D22 (SCAN)",
19906
+ noKeys: "\u65E0 key",
19907
+ loadMore: "\u52A0\u8F7D\u66F4\u591A...",
19908
+ tabData: "\u6570\u636E",
19909
+ tabInfo: "\u4FE1\u606F",
19910
+ tabCli: "CLI",
19911
+ selectKey: "\u9009\u62E9\u5DE6\u4FA7 Key",
19912
+ keyNotExist: "Key \u4E0D\u5B58\u5728",
19913
+ unsupportedType: "\u4E0D\u652F\u6301\u7684\u7C7B\u578B: {{type}}",
19914
+ nItems: "{{total}} items",
19915
+ showingN: "\u663E\u793A {{count}}",
19916
+ nMembers: "{{total}} members",
19917
+ nEntries: "{{total}} entries",
19918
+ cliHint: "\u8F93\u5165 Redis \u547D\u4EE4\uFF0C\u5982 PING, GET key, KEYS *",
19919
+ cliPlaceholder: "\u8F93\u5165\u547D\u4EE4..."
19920
+ },
19921
+ git: {
19922
+ switchBranch: "\u5207\u6362\u5206\u652F",
19923
+ searchBranch: "\u641C\u7D22\u5206\u652F...",
19924
+ noBranches: "\u65E0\u53EF\u5207\u6362\u5206\u652F",
19925
+ noMatchingBranches: "\u65E0\u5339\u914D\u5206\u652F",
19926
+ localBranches: "\u672C\u5730\u5206\u652F",
19927
+ remoteBranches: "\u8FDC\u7A0B\u5206\u652F",
19928
+ branchNotFound: "\u672A\u627E\u5230\u5206\u652F",
19929
+ selectBranch: "\u9009\u62E9\u5206\u652F...",
19930
+ currentBranch: "\u5F53\u524D",
19931
+ notGitRepo: "\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Git \u4ED3\u5E93",
19932
+ cannotGetBranches: "\u65E0\u6CD5\u83B7\u53D6\u5206\u652F\u4FE1\u606F",
19933
+ getBranchesFailed: "\u83B7\u53D6\u5206\u652F\u4FE1\u606F\u5931\u8D25",
19934
+ discardAllConfirm: "\u786E\u5B9A\u8981\u653E\u5F03\u5DE5\u4F5C\u533A\u7684 {{count}} \u4E2A\u6587\u4EF6\u7684\u53D8\u66F4\u5417\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\u3002",
19935
+ worktree: {
19936
+ title: "Git Worktree",
19937
+ count: "{{count}} \u4E2A worktree",
19938
+ selectBranch: "\u9009\u62E9\u5206\u652F",
19939
+ addWorktree: "+ \u6DFB\u52A0 Worktree",
19940
+ confirmDelete: "\u786E\u8BA4\u5220\u9664",
19941
+ confirmDeleteMsg: "\u786E\u5B9A\u8981\u5220\u9664 worktree \u5417\uFF1F",
19942
+ path: "\u8DEF\u5F84\uFF1A",
19943
+ branch: "\u5206\u652F\uFF1A",
19944
+ locked: "\u5DF2\u9501\u5B9A",
19945
+ unlock: "\u89E3\u9501",
19946
+ lock: "\u9501\u5B9A",
19947
+ searchBranch: "\u641C\u7D22\u5206\u652F...",
19948
+ noBranches: "\u65E0\u53EF\u7528\u5206\u652F"
19949
+ }
19950
+ },
19951
+ comments: {
19952
+ addComment: "\u6DFB\u52A0\u8BC4\u8BBA",
19953
+ lineRange: "\u884C {{start}}-{{end}}",
19954
+ inputPlaceholder: "\u8F93\u5165\u8BC4\u8BBA...",
19955
+ newComment: "\u65B0\u8BC4\u8BBA {{range}}",
19956
+ commentPlaceholder: "\u8F93\u5165\u8BC4\u8BBA... ({{modKey}}Enter \u63D0\u4EA4, Esc \u53D6\u6D88)",
19957
+ nComments: "{{count}} \u6761\u8BC4\u8BBA",
19958
+ allComments: "\u6240\u6709\u8BC4\u8BBA",
19959
+ copyAllComments: "\u590D\u5236\u5168\u90E8\u8BC4\u8BBA",
19960
+ noComments: "\u6682\u65E0\u8BC4\u8BBA",
19961
+ clearAll: "\u6E05\u7A7A\u6240\u6709",
19962
+ totalComments: "\u5171 {{count}} \u6761\u8BC4\u8BBA",
19963
+ aiReply: "AI \u56DE\u590D",
19964
+ noContent: "\uFF08\u65E0\u5185\u5BB9\uFF09",
19965
+ linesCount: "({{count}} \u884C)",
19966
+ codeRef: "\u4EE5\u4E0B\u662F\u6211\u6807\u6CE8\u7684\u8BC4\u8BBA\u548C\u5F15\u7528:",
19967
+ note: "\u5907\u6CE8: {{content}}",
19968
+ submitting: "\u63D0\u4EA4\u4E2D...",
19969
+ enterSubmit: "Enter \u63D0\u4EA4 \xB7 Shift+Enter \u6362\u884C",
19970
+ submitComment: "\u63D0\u4EA4\u8BC4\u8BBA",
19971
+ askAI: "\u63D0\u95EE AI",
19972
+ inputQuestion: "\u8F93\u5165\u4F60\u7684\u95EE\u9898...",
19973
+ aiGenerating: "\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8BF7\u7A0D\u5019...",
19974
+ enterSend: "Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C",
19975
+ sendToAI: "\u53D1\u9001 AI",
19976
+ aiResponding: "AI \u6B63\u5728\u54CD\u5E94\u4E2D..."
19977
+ },
19978
+ fileContextMenu: {
19979
+ createFile: "\u65B0\u5EFA\u6587\u4EF6",
19980
+ copyFile: "\u590D\u5236\u6587\u4EF6",
19981
+ copyFolder: "\u590D\u5236\u6587\u4EF6\u5939",
19982
+ pasteHere: "\u7C98\u8D34\u5230\u6B64\u5904",
19983
+ deleteFile: "\u5220\u9664\u6587\u4EF6",
19984
+ deleteFolder: "\u5220\u9664\u6587\u4EF6\u5939",
19985
+ copyRelativePath: "\u590D\u5236\u76F8\u5BF9\u8DEF\u5F84",
19986
+ copyAbsolutePath: "\u590D\u5236\u7EDD\u5BF9\u8DEF\u5F84",
19987
+ copyRelativeDirPath: "\u590D\u5236\u76F8\u5BF9\u6587\u4EF6\u5939\u8DEF\u5F84",
19988
+ copyAbsoluteDirPath: "\u590D\u5236\u7EDD\u5BF9\u6587\u4EF6\u5939\u8DEF\u5F84",
19989
+ copyFileName: "\u590D\u5236\u6587\u4EF6\u540D",
19990
+ copyFolderName: "\u590D\u5236\u6587\u4EF6\u5939\u540D"
19991
+ },
19992
+ settings: {
19993
+ title: "\u8BBE\u7F6E",
19994
+ theme: "\u4E3B\u9898",
19995
+ themeLight: "\u6D45\u8272",
19996
+ themeDark: "\u6DF1\u8272",
19997
+ themeSystem: "\u8DDF\u968F\u7CFB\u7EDF",
19998
+ browserExtension: "\u6D4F\u89C8\u5668\u63D2\u4EF6",
19999
+ extensionInstalled: "Cockpit Bridge \u5DF2\u5B89\u88C5",
20000
+ extensionNotInstalled: "Cockpit Bridge \u672A\u5B89\u88C5",
20001
+ extensionDescription: "\u5B89\u88C5 Chrome \u63D2\u4EF6\u540E\uFF0Ciframe \u5185\u7684\u94FE\u63A5\u8DF3\u8F6C\u5C06\u88AB\u62E6\u622A\uFF1A\u65B0\u6807\u7B7E\u94FE\u63A5\u521B\u5EFA\u65B0\u6C14\u6CE1\uFF0C\u9875\u9762\u5185\u5BFC\u822A\u66F4\u65B0\u5F53\u524D\u6C14\u6CE1\u3002",
20002
+ installSteps: "\u5B89\u88C5\u6B65\u9AA4\uFF1A",
20003
+ step1: "1. \u6253\u5F00 Chrome \u5730\u5740\u680F\u8F93\u5165",
20004
+ step2: "2. \u5F00\u542F\u53F3\u4E0A\u89D2\u300C\u5F00\u53D1\u8005\u6A21\u5F0F\u300D",
20005
+ step3: "3. \u70B9\u51FB\u300C\u52A0\u8F7D\u5DF2\u89E3\u538B\u7684\u6269\u5C55\u7A0B\u5E8F\u300D",
20006
+ step4mac: "4. \u6309 <kbd>Cmd+Shift+G</kbd> \u2192 \u7C98\u8D34\u4E0B\u65B9\u8DEF\u5F84 \u2192 \u56DE\u8F66",
20007
+ copyExtensionPath: "\u590D\u5236\u63D2\u4EF6\u76EE\u5F55\u8DEF\u5F84",
20008
+ reloadExtension: "\u91CD\u8F7D\u63D2\u4EF6",
20009
+ about: "\u5173\u4E8E",
20010
+ language: "\u8BED\u8A00",
20011
+ languageAuto: "\u8DDF\u968F\u7CFB\u7EDF",
20012
+ switchDark: "\u5207\u6362\u6697\u8272",
20013
+ switchLight: "\u5207\u6362\u4EAE\u8272"
20014
+ },
20015
+ editor: {
20016
+ placeholder: "\u5199\u70B9\u4EC0\u4E48... \u8F93\u5165 / \u6253\u5F00\u5FEB\u6377\u547D\u4EE4",
20017
+ noteTitle: "{{name}} - \u7B14\u8BB0",
20018
+ noteUntitled: "\u7B14\u8BB0",
20019
+ saving: "\u4FDD\u5B58\u4E2D...",
20020
+ conflictReloaded: "\u7B14\u8BB0\u5DF2\u88AB\u5176\u4ED6\u5730\u65B9\u4FEE\u6539\uFF0C\u5DF2\u52A0\u8F7D\u6700\u65B0\u7248\u672C\uFF0C\u521A\u624D\u672A\u4FDD\u5B58\u7684\u7F16\u8F91\u5DF2\u4E22\u5F03",
20021
+ linkPlaceholder: "\u8F93\u5165\u94FE\u63A5\u5730\u5740...",
20022
+ confirmLink: "\u786E\u8BA4",
20023
+ removeLink: "\u79FB\u9664\u94FE\u63A5",
20024
+ heading1: "\u6807\u9898 1",
20025
+ heading2: "\u6807\u9898 2",
20026
+ heading3: "\u6807\u9898 3",
20027
+ bold: "\u7C97\u4F53",
20028
+ italic: "\u659C\u4F53",
20029
+ strikethrough: "\u5220\u9664\u7EBF",
20030
+ inlineCode: "\u884C\u5185\u4EE3\u7801",
20031
+ link: "\u94FE\u63A5",
20032
+ bulletList: "\u65E0\u5E8F\u5217\u8868",
20033
+ orderedList: "\u6709\u5E8F\u5217\u8868",
20034
+ taskList: "\u5F85\u529E\u5217\u8868",
20035
+ blockquote: "\u5F15\u7528",
20036
+ codeBlock: "\u4EE3\u7801\u5757",
20037
+ table: "\u8868\u683C",
20038
+ horizontalRule: "\u5206\u5272\u7EBF",
20039
+ insertRowAbove: "\u5728\u4E0A\u65B9\u63D2\u5165\u884C",
20040
+ insertRowBelow: "\u5728\u4E0B\u65B9\u63D2\u5165\u884C",
20041
+ insertColumnLeft: "\u5728\u5DE6\u4FA7\u63D2\u5165\u5217",
20042
+ insertColumnRight: "\u5728\u53F3\u4FA7\u63D2\u5165\u5217",
20043
+ deleteRow: "\u5220\u9664\u5F53\u524D\u884C",
20044
+ deleteColumn: "\u5220\u9664\u5F53\u524D\u5217",
20045
+ deleteTable: "\u5220\u9664\u8868\u683C",
20046
+ deleteCodeBlock: "\u5220\u9664\u4EE3\u7801\u5757",
20047
+ toc: "\u76EE\u5F55",
20048
+ expandToc: "\u5C55\u5F00\u76EE\u5F55",
20049
+ collapseToc: "\u6536\u8D77\u76EE\u5F55"
20050
+ },
20051
+ slashCommands: {
20052
+ heading1: "\u6807\u9898 1",
20053
+ heading1Desc: "\u5927\u6807\u9898",
20054
+ heading2: "\u6807\u9898 2",
20055
+ heading2Desc: "\u4E2D\u6807\u9898",
20056
+ heading3: "\u6807\u9898 3",
20057
+ heading3Desc: "\u5C0F\u6807\u9898",
20058
+ bulletList: "\u65E0\u5E8F\u5217\u8868",
20059
+ bulletListDesc: "\u9879\u76EE\u7B26\u53F7\u5217\u8868",
20060
+ orderedList: "\u6709\u5E8F\u5217\u8868",
20061
+ orderedListDesc: "\u7F16\u53F7\u5217\u8868",
20062
+ taskList: "\u5F85\u529E\u5217\u8868",
20063
+ taskListDesc: "\u53EF\u52FE\u9009\u7684\u4EFB\u52A1\u5217\u8868",
20064
+ blockquote: "\u5F15\u7528",
20065
+ blockquoteDesc: "\u5F15\u7528\u5757",
20066
+ codeBlock: "\u4EE3\u7801\u5757",
20067
+ codeBlockDesc: "\u4EE3\u7801\u7247\u6BB5",
20068
+ table: "\u8868\u683C",
20069
+ tableDesc: "\u63D2\u5165 3\xD73 \u8868\u683C",
20070
+ horizontalRule: "\u5206\u5272\u7EBF",
20071
+ horizontalRuleDesc: "\u6C34\u5E73\u5206\u5272\u7EBF",
20072
+ link: "\u94FE\u63A5",
20073
+ linkDesc: "\u63D2\u5165\u8D85\u94FE\u63A5"
20074
+ },
20075
+ commands: {
20076
+ qa: "\u8FDB\u5165\u9700\u6C42\u6F84\u6E05\u8BA8\u8BBA\u6A21\u5F0F",
20077
+ fx: "\u8FDB\u5165 bug \u8BC1\u636E\u94FE\u5206\u6790\u6A21\u5F0F",
20078
+ ex: "\u8FDB\u5165\u7ED3\u6784\u5316\u5206\u6790\u8BA8\u8BBA\u6A21\u5F0F",
20079
+ go: "\u8FDB\u5165\u8FDE\u7EED\u843D\u5730\uFF08MVP\uFF09\u6A21\u5F0F",
20080
+ cg: "\u8FDB\u5165 CodeGraph \u63A2\u7D22\u6A21\u5F0F",
20081
+ plan: "\u5F00\u542F\u8BA1\u5212\u6A21\u5F0F \xB7 /plan <\u4EFB\u52A1> \u76F4\u63A5\u89C4\u5212\u8BE5\u4EFB\u52A1 \xB7 /plan off \u5173\u95ED"
20082
+ },
20083
+ review: {
20084
+ reviewManagement: "\u8BC4\u5BA1\u7BA1\u7406",
20085
+ allReviews: "\u6240\u6709\u8BC4\u5BA1",
20086
+ noOpenReviews: "\u6682\u65E0\u5F00\u653E\u8BC4\u5BA1",
20087
+ viewComments: "\u67E5\u770B\u8BC4\u8BBA",
20088
+ nComments: "{{count}} \u6761\u8BC4\u8BBA",
20089
+ nDocs: "{{count}} \u6587\u6863",
20090
+ nReviews: "{{count}} \u8BC4\u5BA1",
20091
+ docList: "\u6587\u6863\u5217\u8868",
20092
+ allReviewsList: "\u6240\u6709\u8BC4\u5BA1",
20093
+ expandList: "\u5C55\u5F00\u5217\u8868",
20094
+ collapseList: "\u6298\u53E0\u5217\u8868",
20095
+ closeReview: "\u5173\u95ED\u8BC4\u5BA1",
20096
+ reopenReview: "\u91CD\u65B0\u5F00\u653E",
20097
+ deleteReview: "\u5220\u9664\u8BC4\u5BA1",
20098
+ noOpenDocs: "\u6682\u65E0\u5F00\u653E\u6587\u6863",
20099
+ noReviews: "\u6682\u65E0\u8BC4\u5BA1",
20100
+ sharing: "\u5206\u4EAB\u4E2D",
20101
+ notShared: "\u672A\u5206\u4EAB",
20102
+ closeSharing: "\u5173\u95ED\u5206\u4EAB",
20103
+ enableSharing: "\u5F00\u542F\u5206\u4EAB\u8BC4\u5BA1",
20104
+ view: "\u67E5\u770B",
20105
+ setNickname: "\u8BBE\u7F6E\u4F60\u7684\u6635\u79F0",
20106
+ nicknameHint: "\u5176\u4ED6\u8BC4\u5BA1\u4EBA\u5C06\u770B\u5230\u8FD9\u4E2A\u540D\u5B57",
20107
+ nicknamePlaceholder: "\u8F93\u5165\u6635\u79F0",
20108
+ skipForNow: "\u4E0B\u6B21\u518D\u8BF4",
20109
+ identitySettings: "\u8EAB\u4EFD\u8BBE\u7F6E",
20110
+ reviewNickname: "\u8BC4\u5BA1\u6635\u79F0",
20111
+ random: "\u968F\u673A",
20112
+ selectTextToComment: "\u9009\u4E2D\u5DE6\u4FA7\u6587\u672C\u6DFB\u52A0\u8BC4\u8BBA",
20113
+ selectTextHint: "\u9009\u4E2D\u5DE6\u4FA7\u6587\u672C\u5373\u53EF\u6DFB\u52A0\u8BC4\u8BBA",
20114
+ prevComment: "\u4E0A\u4E00\u6761",
20115
+ nextComment: "\u4E0B\u4E00\u6761",
20116
+ commentsCount: "{{count}} \u6761\u8BC4\u8BBA",
20117
+ commentsNavCount: "{{current}}/{{total}} \u6761\u8BC4\u8BBA",
20118
+ allCommentsTitle: "\u5168\u90E8\u8BC4\u8BBA",
20119
+ commentsCountBrief: "{{count}} \u6761",
20120
+ closedCount: "{{count}} \u6761\u5DF2\u5173\u95ED",
20121
+ copyAllComments: "\u590D\u5236\u5168\u90E8\u8BC4\u8BBA",
20122
+ noComments: "\u6682\u65E0\u8BC4\u8BBA",
20123
+ closedComments: "\u5DF2\u5173\u95ED ({{count}})",
20124
+ closedLabel: "\u5DF2\u5173\u95ED",
20125
+ moreReplies: "+{{count}} \u6761\u56DE\u590D",
20126
+ copyComment: "\u590D\u5236\u8BC4\u8BBA",
20127
+ reopen: "\u91CD\u5F00",
20128
+ closeComment: "\u5173\u95ED\u8BC4\u8BBA",
20129
+ editComment: "\u7F16\u8F91\u8BC4\u8BBA",
20130
+ deleteComment: "\u5220\u9664\u8BC4\u8BBA",
20131
+ edited: "(\u5DF2\u7F16\u8F91)",
20132
+ editReply: "\u7F16\u8F91\u56DE\u590D",
20133
+ deleteReply: "\u5220\u9664\u56DE\u590D",
20134
+ reply: "\u56DE\u590D",
20135
+ replyPlaceholder: "\u6DFB\u52A0\u56DE\u590D...",
20136
+ selectedText: "\u9009\u4E2D\u6587\u672C",
20137
+ addCommentPlaceholder: "\u6DFB\u52A0\u8BC4\u8BBA...",
20138
+ enterSubmitHint: "Enter \u63D0\u4EA4\uFF0CShift+Enter \u6362\u884C",
20139
+ commentBtn: "\u8BC4\u8BBA",
20140
+ reviewNotExist: "\u8BC4\u5BA1\u4E0D\u5B58\u5728\u6216\u5DF2\u88AB\u5220\u9664",
20141
+ loadFailed: "\u52A0\u8F7D\u5931\u8D25",
20142
+ networkError: "\u7F51\u7EDC\u9519\u8BEF",
20143
+ reviewNotFound: "\u8BC4\u5BA1\u4E0D\u5B58\u5728",
20144
+ checkLink: "\u8BF7\u68C0\u67E5\u94FE\u63A5\u662F\u5426\u6B63\u786E",
20145
+ updatedAt: "\u66F4\u65B0\u4E8E {{date}}",
20146
+ active: "\u5F00\u653E\u4E2D",
20147
+ closed: "\u5DF2\u5173\u95ED",
20148
+ viewAllComments: "\u67E5\u770B\u5168\u90E8\u8BC4\u8BBA",
20149
+ viewCommentBtn: "\u67E5\u770B\u8BC4\u8BBA",
20150
+ copyLink: "\u590D\u5236\u94FE\u63A5",
20151
+ reviewSummary: "\u8BC4\u5BA1\u8BC4\u8BBA\u6C47\u603B \u2014 {{title}}",
20152
+ totalNComments: "\u5171 {{count}} \u6761\u8BC4\u8BBA",
20153
+ quoteRef: '\u5F15\u7528: "{{text}}"',
20154
+ commentAuthor: "\u8BC4\u8BBA ({{author}}): {{content}}",
20155
+ replyAuthor: " \u21B3 {{author}}: {{content}}"
20156
+ },
20157
+ markdown: {
20158
+ copied: "\u2713 \u5DF2\u590D\u5236",
20159
+ copy: "\u590D\u5236"
20160
+ },
20161
+ imagePreview: {
20162
+ previewImage: "\u9884\u89C8\u56FE\u7247",
20163
+ deleteImage: "\u5220\u9664\u56FE\u7247"
20164
+ },
20165
+ tokenStats: {
20166
+ title: "Claude Code Token \u7EDF\u8BA1",
20167
+ activeHours: "\u6D3B\u8DC3\u65F6\u6BB5\u5206\u5E03",
20168
+ hourSessions: "{{h}}:00 \u2014 {{count}} \u6B21\u4F1A\u8BDD",
20169
+ messages: "\u6D88\u606F",
20170
+ toolCalls: "\u5DE5\u5177\u8C03\u7528",
20171
+ activityTrend: "\u6D3B\u52A8\u8D8B\u52BF",
20172
+ byModel: "\u6309\u6A21\u578B",
20173
+ tokenUsage: "Token \u7528\u91CF",
20174
+ equivalentCost: "\u7B49\u6548\u8D39\u7528",
20175
+ modelCostDetail: "\u6A21\u578B\u8D39\u7528\u660E\u7EC6",
20176
+ model: "\u6A21\u578B",
20177
+ share: "\u5360\u6BD4",
20178
+ total: "\u5408\u8BA1",
20179
+ totalSessions: "\u603B\u4F1A\u8BDD",
20180
+ totalMessages: "\u603B\u6D88\u606F",
20181
+ equivalentApiCost: "\u7B49\u6548 API \u8D39\u7528",
20182
+ longestSession: "\u6700\u957F\u4F1A\u8BDD",
20183
+ firstUse: "\u9996\u6B21\u4F7F\u7528",
20184
+ notFound: "\u672A\u627E\u5230 ~/.claude/stats-cache.json",
20185
+ day: "\u65E5",
20186
+ week: "\u5468",
20187
+ month: "\u6708"
20188
+ },
20189
+ toolCall: {
20190
+ inputParams: "\u8F93\u5165\u53C2\u6570",
20191
+ resultLabel: "\u7ED3\u679C",
20192
+ inputParamsTitle: "\u67E5\u770B\u8F93\u5165\u53C2\u6570",
20193
+ resultTitle: "\u67E5\u770B\u7ED3\u679C",
20194
+ input: "\u8F93\u5165",
20195
+ result: "\u7ED3\u679C",
20196
+ foldedLines: "... ({{count}} \u884C)"
20197
+ },
20198
+ fileEditor: {
20199
+ unsavedConfirm: "\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF0C\u786E\u5B9A\u5173\u95ED\uFF1F",
20200
+ discardChanges: "\u653E\u5F03\u4FEE\u6539",
20201
+ continueEditing: "\u7EE7\u7EED\u7F16\u8F91",
20202
+ externallyModified: "\u6587\u4EF6\u5DF2\u88AB\u5916\u90E8\u4FEE\u6539\uFF0C\u4FDD\u5B58\u5C06\u8986\u76D6\u5916\u90E8\u66F4\u6539",
20203
+ useDiskVersion: "\u4F7F\u7528\u78C1\u76D8\u7248\u672C",
20204
+ forceOverwrite: "\u5F3A\u5236\u8986\u76D6"
20205
+ },
20206
+ quickFileOpen: {
20207
+ placeholder: "\u8F93\u5165\u6587\u4EF6\u540D\u5FEB\u901F\u6253\u5F00...",
20208
+ noMatch: "\u6CA1\u6709\u5339\u914D\u7684\u6587\u4EF6",
20209
+ recent: "\u6700\u8FD1",
20210
+ selectHint: "\u9009\u62E9",
20211
+ openHint: "\u6253\u5F00",
20212
+ closeHint: "\u5173\u95ED"
20213
+ },
20214
+ envManager: {
20215
+ title: "\u73AF\u5883\u53D8\u91CF\u7BA1\u7406",
20216
+ tabScope: "\u5F53\u524D Tab \u4E13\u7528",
20217
+ globalScope: "\u5168\u5C40\u73AF\u5883\u53D8\u91CF",
20218
+ varNamePlaceholder: "\u53D8\u91CF\u540D\uFF08\u5982 NODE_ENV\uFF09",
20219
+ varValuePlaceholder: "\u503C\uFF08\u5982 production\uFF09",
20220
+ valuePlaceholder: "\u503C",
20221
+ noVars: "\u8FD8\u6CA1\u6709\u73AF\u5883\u53D8\u91CF\uFF0C\u6DFB\u52A0\u4E00\u4E2A\u8BD5\u8BD5"
20222
+ },
20223
+ aliasManager: {
20224
+ title: "\u547D\u4EE4\u522B\u540D\u7BA1\u7406",
20225
+ description: "\u4E3A\u5E38\u7528\u547D\u4EE4\u8BBE\u7F6E\u5FEB\u6377\u522B\u540D\uFF08\u5168\u5C40\u751F\u6548\uFF09",
20226
+ aliasPlaceholder: "\u522B\u540D\uFF08\u5982 ll\uFF09",
20227
+ commandPlaceholder: "\u5B8C\u6574\u547D\u4EE4\uFF08\u5982 ls -la\uFF09",
20228
+ fullCommandPlaceholder: "\u5B8C\u6574\u547D\u4EE4",
20229
+ usage: "\u4F7F\u7528\u63D0\u793A\uFF1A",
20230
+ usageDesc: "\u8F93\u5165\u522B\u540D\u5373\u53EF\u6267\u884C\u5BF9\u5E94\u7684\u5B8C\u6574\u547D\u4EE4",
20231
+ noAliases: "\u8FD8\u6CA1\u6709\u547D\u4EE4\u522B\u540D\uFF0C\u6DFB\u52A0\u4E00\u4E2A\u8BD5\u8BD5"
20232
+ },
20233
+ diffViewer: {
20234
+ fileChanges: "\u6587\u4EF6\u53D8\u66F4 ({{count}})",
20235
+ toggleFileTree: "\u5207\u6362\u6587\u4EF6\u76EE\u5F55",
20236
+ selectFileToView: "\u9009\u62E9\u5DE6\u4FA7\u6587\u4EF6\u67E5\u770B\u53D8\u66F4",
20237
+ sideBySide: "\u5E76\u5217\u5BF9\u6BD4",
20238
+ unified: "\u7EDF\u4E00\u5BF9\u6BD4",
20239
+ viewSplit: "\u53CC\u680F",
20240
+ viewUnified: "\u5355\u680F",
20241
+ previewFile: "\u9884\u89C8\u6587\u4EF6",
20242
+ copiedAll: "\u5DF2\u590D\u5236\u5168\u6587",
20243
+ compact: "\u7CBE\u7B80",
20244
+ full: "\u5168\u6587",
20245
+ gap: {
20246
+ hidden: "\u5DF2\u9690\u85CF {{count}} \u884C",
20247
+ more: "\xB7\xB7\xB7 \u66F4\u591A +{{count}} \xB7\xB7\xB7",
20248
+ expandUp: "\u5411\u4E0A\u5C55\u5F00 {{count}} \u884C",
20249
+ expandDown: "\u5411\u4E0B\u5C55\u5F00 {{count}} \u884C"
20250
+ },
20251
+ loadingSnapshots: "\u6B63\u5728\u52A0\u8F7D\u5FEB\u7167\u2026",
20252
+ noChanges: "\u672C\u8F6E\u672A\u68C0\u6D4B\u5230\u6587\u4EF6\u53D8\u66F4",
20253
+ notViewable: "\u4E8C\u8FDB\u5236\u6216\u8D85\u5927\u6587\u4EF6\uFF0C\u65E0\u6CD5\u5C55\u793A diff",
20254
+ externalChange: "\u540C\u671F\u5176\u4ED6\u4F1A\u8BDD/\u5916\u90E8\u8FDB\u7A0B\u7684\u53D8\u66F4",
20255
+ reconstructed: "\u53C2\u6570\u91CD\u5EFA",
20256
+ reconstructedHint: "\u7531\u5DE5\u5177\u8C03\u7528\u53C2\u6570\u91CD\u5EFA\uFF0C\u975E\u78C1\u76D8\u5FEB\u7167",
20257
+ truncated: "\u6587\u4EF6\u8FC7\u591A\uFF0C\u4EC5\u663E\u793A\u90E8\u5206"
20258
+ },
20259
+ commitDetail: {
20260
+ title: "\u63D0\u4EA4\u8BE6\u60C5",
20261
+ hash: "\u54C8\u5E0C:",
20262
+ author: "\u4F5C\u8005:",
20263
+ date: "\u65E5\u671F:",
20264
+ files: "\u6587\u4EF6:",
20265
+ nChanges: "{{count}} \u4E2A\u53D8\u66F4",
20266
+ loadingFiles: "\u52A0\u8F7D\u6587\u4EF6\u4E2D...",
20267
+ noFileChanges: "\u65E0\u6587\u4EF6\u53D8\u66F4",
20268
+ loadingDiff: "\u52A0\u8F7D\u5DEE\u5F02\u4E2D...",
20269
+ selectFileToView: "\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02"
20270
+ },
20271
+ askQuestion: {
20272
+ title: "\u63D0\u95EE",
20273
+ nQuestions: "{{count}} \u4E2A\u95EE\u9898",
20274
+ checkedN: "\u5DF2\u52FE\u9009 {{count}}",
20275
+ copyChecked: "\u590D\u5236\u52FE\u9009\u7684 {{count}} \u4E2A\u95EE\u7B54",
20276
+ copyAll: "\u590D\u5236\u6240\u6709\u95EE\u7B54",
20277
+ sendChecked: "\u53D1\u9001\u52FE\u9009\u7684 {{count}} \u4E2A\u95EE\u7B54\u7ED9 AI",
20278
+ sendAll: "\u53D1\u9001\u6240\u6709\u95EE\u7B54\u7ED9 AI",
20279
+ sendNoChat: "\u6CA1\u6709\u53EF\u7528\u7684\u804A\u5929\u4F1A\u8BDD",
20280
+ checkToCopy: "\u52FE\u9009\u4EE5\u590D\u5236",
20281
+ custom: "\u81EA\u5B9A\u4E49",
20282
+ customPlaceholder: "\u8F93\u5165\u81EA\u5B9A\u4E49\u56DE\u7B54...",
20283
+ notSelected: "(\u672A\u9009\u62E9)"
20284
+ },
20285
+ tabBar: {
20286
+ unpin: "\u53D6\u6D88\u56FA\u5B9A",
20287
+ pin: "\u56FA\u5B9A\u5230\u5E38\u7528\u4F1A\u8BDD",
20288
+ closeTab: "\u5173\u95ED\u6807\u7B7E",
20289
+ closeAll: "\u5173\u95ED\u6240\u6709\u6807\u7B7E",
20290
+ newTab: "\u65B0\u5EFA\u6807\u7B7E"
20291
+ },
20292
+ tabManagerTopBar: {
20293
+ copyPageUrl: "\u590D\u5236\u9875\u9762\u5730\u5740",
20294
+ copyDirPath: "\u590D\u5236\u76EE\u5F55\u8DEF\u5F84",
20295
+ refreshProject: "\u5237\u65B0\u5F53\u524D\u9879\u76EE",
20296
+ openInVSCode: "\u5728 VS Code \u4E2D\u6253\u5F00",
20297
+ openInCursor: "\u5728 Cursor \u4E2D\u6253\u5F00",
20298
+ aliasesGlobal: "\u547D\u4EE4\u522B\u540D\uFF08\u5168\u5C40\uFF09",
20299
+ tokenStats: "Token \u7EDF\u8BA1",
20300
+ openSurething: "\u6253\u5F00 Surething"
20301
+ },
20302
+ hoverTooltip: {
20303
+ findReferences: "\u67E5\u627E\u5F15\u7528",
20304
+ search: "\u641C\u7D22"
20305
+ },
20306
+ todoViewer: {
20307
+ title: "\u4EFB\u52A1\u5217\u8868",
20308
+ progress: "{{completed}} / {{total}} \u5B8C\u6210"
20309
+ },
20310
+ userMessages: {
20311
+ title: "\u7528\u6237\u6D88\u606F\u5217\u8868",
20312
+ noMessages: "\u6682\u65E0\u7528\u6237\u6D88\u606F"
20313
+ },
20314
+ shortIdBadge: {
20315
+ clickToDisconnect: "\u70B9\u51FB\u65AD\u5F00\u8FDE\u63A5",
20316
+ clickToRegister: "\u70B9\u51FB\u6CE8\u518C\u5E76\u590D\u5236 CLI \u547D\u4EE4",
20317
+ setTitle: "\u7ED9\u8FD9\u4E2A\u6C14\u6CE1\u547D\u540D\uFF08\u4FBF\u4E8E /cc \u901A\u8FC7 connection list \u627E\u5230\u5B83\uFF09",
20318
+ setTitlePlaceholder: "\u8BBE\u7F6E\u6807\u9898",
20319
+ editTitle: "\u7F16\u8F91\u6807\u9898",
20320
+ titleSet: "\u6807\u9898\uFF1A{{title}}",
20321
+ dialogTitle: "\u7ED9\u6C14\u6CE1\u547D\u540D",
20322
+ dialogPlaceholder: "\u4F8B\u5982\uFF1Aalloydb \u4EE3\u7406\u3001\u9884\u53D1\u7BA1\u7406\u540E\u53F0"
20323
+ },
20324
+ api: {
20325
+ pathForbidden: "\u4E0D\u5141\u8BB8\u64CD\u4F5C\u6B64\u8DEF\u5F84",
20326
+ deleteForbidden: "\u4E0D\u5141\u8BB8\u5220\u9664\u6B64\u8DEF\u5F84",
20327
+ notAFolder: "\u76EE\u6807\u4E0D\u662F\u6587\u4EF6\u5939",
20328
+ imageTooLarge: "\u56FE\u7247\u6587\u4EF6\u8FC7\u5927\uFF0C\u65E0\u6CD5\u9884\u89C8",
20329
+ cannotPreviewBinary: "\u65E0\u6CD5\u9884\u89C8\u4E8C\u8FDB\u5236\u6587\u4EF6",
20330
+ fileTooLarge: "\u6587\u4EF6\u8FC7\u5927\uFF0C\u65E0\u6CD5\u9884\u89C8\uFF08\u8D85\u8FC7 10MB\uFF09",
20331
+ fileModifiedExternally: "\u6587\u4EF6\u5DF2\u88AB\u5916\u90E8\u4FEE\u6539",
20332
+ pickFolderPrompt: "\u9009\u62E9\u9879\u76EE\u6587\u4EF6\u5939"
20333
+ },
20334
+ confirm: {
20335
+ title: "\u63D0\u793A",
20336
+ ok: "\u786E\u5B9A",
20337
+ cancel: "\u53D6\u6D88"
20338
+ },
20339
+ floatingToolbar: {
20340
+ addComment: "\u6DFB\u52A0\u8BC4\u8BBA",
20341
+ sendToAI: "\u53D1\u9001 AI",
20342
+ search: "\u641C\u7D22"
20343
+ },
20344
+ quickReply: {
20345
+ optionA: "A",
20346
+ optionB: "B",
20347
+ optionC: "C",
20348
+ optionD: "D",
20349
+ allRecommended: "\u90FD\u6309\u63A8\u8350",
20350
+ thisOne: "\u5C31\u8FD9\u4E2A",
20351
+ notThis: "\u4E0D\u8981\u8FD9\u6837",
20352
+ why: "\u4E3A\u4EC0\u4E48",
20353
+ elaborate: "\u5C55\u5F00\u8BF4",
20354
+ example: "\u4E3E\u4E2A\u4F8B\u5B50",
20355
+ start: "\u5F00\u59CB\u505A",
20356
+ continue: "\u7EE7\u7EED",
20357
+ ok: "OK",
20358
+ done: "\u505A\u5B8C\u4E86"
20359
+ },
20360
+ searchResults: {
20361
+ title: "\u641C\u7D22\u7ED3\u679C",
20362
+ nMatches: "({{count}} \u5904\u5339\u914D)",
20363
+ searching: "\u641C\u7D22\u4E2D...",
20364
+ noResults: "\u65E0\u5339\u914D\u7ED3\u679C",
20365
+ scopeSelected: "\u9009\u4E2D",
20366
+ scopeAll: "\u5168\u90E8"
20367
+ },
20368
+ references: {
20369
+ title: "\u5F15\u7528",
20370
+ searching: "\u641C\u7D22\u4E2D...",
20371
+ notFound: "\u672A\u627E\u5230\u5F15\u7528"
20372
+ },
20373
+ gitFileTree: {
20374
+ noFiles: "\u65E0\u6587\u4EF6"
20375
+ },
20376
+ explain: {
20377
+ action: "\u89E3\u91CA\u4E00\u4E0B",
20378
+ fileMessage: "\u89E3\u91CA\u4E00\u4E0B {{path}}",
20379
+ symbolMessage: "\u89E3\u91CA\u4E00\u4E0B {{name}} ({{path}}:{{lines}})",
20380
+ selectionMessage: "\u89E3\u91CA\u4E00\u4E0B",
20381
+ commitFileMessage: "\u89E3\u91CA\u4E00\u4E0B git commit {{hash}} \u5BF9 {{path}} \u7684\u6539\u52A8",
20382
+ compareFileMessage: "\u89E3\u91CA\u4E00\u4E0B git {{base}}..HEAD \u4E2D {{path}} \u7684\u6539\u52A8",
20383
+ stagedFileMessage: "\u89E3\u91CA\u4E00\u4E0B git \u6682\u5B58\u533A\u4E2D {{path}} \u7684\u6539\u52A8",
20384
+ unstagedFileMessage: "\u89E3\u91CA\u4E00\u4E0B git \u5DE5\u4F5C\u533A\u4E2D {{path}} \u7684\u6539\u52A8"
20385
+ },
20386
+ reviewUtils: {
20387
+ adjectives: ["\u5FEB\u4E50", "\u52C7\u6562", "\u5B89\u9759", "\u660E\u4EAE", "\u6E29\u67D4", "\u7075\u5DE7", "\u81EA\u7531", "\u6E05\u6F88", "\u98DE\u7FD4", "\u60A0\u95F2", "\u6D3B\u6CFC", "\u806A\u6167", "\u6DE1\u5B9A", "\u673A\u654F", "\u4ECE\u5BB9", "\u575A\u5B9A", "\u723D\u6717", "\u548C\u7166", "\u5954\u653E", "\u6C89\u7A33"],
20388
+ nouns: ["\u718A\u732B", "\u6D77\u8C5A", "\u767D\u9E64", "\u96EA\u8C79", "\u4E91\u96C0", "\u677E\u9F20", "\u98DE\u9C7C", "\u6885\u82B1\u9E7F", "\u9752\u9E1F", "\u94F6\u72D0", "\u732B\u5934\u9E70", "\u873B\u8713", "\u8424\u706B\u866B", "\u6D77\u9F9F", "\u8774\u8776", "\u91D1\u4E1D\u7334", "\u4E39\u9876\u9E64", "\u7F9A\u7F8A", "\u71D5\u5B50", "\u4F01\u9E45"]
20389
+ }
20390
+ };
20391
+
20392
+ // packages/shared/i18n/src/index.ts
20393
+ if (!i18n.isInitialized) {
20394
+ i18n.init({
20395
+ resources: {
20396
+ en: { translation: en_default2 },
20397
+ zh: { translation: zh_default }
20398
+ },
20399
+ lng: "en",
20400
+ // Fixed initial language; client detects in app/I18nProvider
20401
+ fallbackLng: "en",
20402
+ interpolation: {
20403
+ escapeValue: false
20404
+ }
20405
+ });
20406
+ }
20407
+ var src_default = i18n;
20408
+
18021
20409
  // packages/feature/agent/src/server/scheduledTasks.ts
18022
20410
  var MAX_CONSECUTIVE_FAILURES = 3;
20411
+ function buildTaskPrompt(task) {
20412
+ if (!task.taskFile) return task.message;
20413
+ const header = src_default.t("scheduledTasks.taskFilePromptHeader", {
20414
+ lng: task.language || "en"
20415
+ });
20416
+ return `${header}
20417
+ - ${task.taskFile}`;
20418
+ }
18023
20419
  function parseCronField(field, min, max) {
18024
20420
  const values = [];
18025
20421
  for (const part of field.split(",")) {
@@ -18070,8 +20466,10 @@ var dispatchEngineMessageEff = (task, engine, startFresh) => Effect_exports.tryP
18070
20466
  if (!spec) {
18071
20467
  throw new Error(`no engine spec for ${engine}`);
18072
20468
  }
20469
+ const builtinLoop = isDeepseekBuiltinSession(engine, task);
20470
+ const noHistory = await readSessionNoHistory(task, engine, builtinLoop);
18073
20471
  const outcome = await dispatchChat(spec, {
18074
- prompt: task.message,
20472
+ prompt: buildTaskPrompt(task),
18075
20473
  // Omit sessionId to start a brand-new session when the resume target is gone;
18076
20474
  // the engine generates a fresh id (captured below via getRunSessionId).
18077
20475
  ...startFresh ? {} : { sessionId: task.sessionId },
@@ -18079,10 +20477,8 @@ var dispatchEngineMessageEff = (task, engine, startFresh) => Effect_exports.tryP
18079
20477
  engine,
18080
20478
  // selects claude2's CLAUDE_CONFIG_DIR; no-op for the others
18081
20479
  ...task.model && { model: task.model },
18082
- // Execution mode is NOT snapshotted on the task — it is derived from where the
18083
- // session actually lives, so a task made from a Built-in Agent tab keeps running
18084
- // the built-in loop instead of silently switching backends mid-schedule.
18085
- ...isDeepseekBuiltinSession(engine, task) && { mode: "builtin" }
20480
+ ...builtinLoop && { mode: "builtin" },
20481
+ ...noHistory && { noHistory: true }
18086
20482
  });
18087
20483
  if (!outcome.ok) {
18088
20484
  throw new Error(`${engine} dispatch rejected (${outcome.status}): ${outcome.error}`);
@@ -18119,6 +20515,11 @@ var dispatchEngineMessageEff = (task, engine, startFresh) => Effect_exports.tryP
18119
20515
  function isDeepseekBuiltinSession(engine, task) {
18120
20516
  return engine === "deepseek" && existsSync3(getDeepseekBuiltinSessionPath(task.cwd, task.sessionId));
18121
20517
  }
20518
+ async function readSessionNoHistory(task, engine, builtinLoop) {
20519
+ if (engine !== "ollama" && !builtinLoop) return false;
20520
+ const state = await readJsonFile(getSessionFilePath(task.cwd), {});
20521
+ return state.noHistories?.[task.sessionId] === true;
20522
+ }
18122
20523
  function sessionPathFor(engine, task) {
18123
20524
  if (engine === "claude2") return getClaude2SessionPath(task.cwd, task.sessionId);
18124
20525
  if (engine === "ollama") return getOllamaSessionPath(task.cwd, task.sessionId);
@@ -18139,6 +20540,15 @@ var sendChatMessageEff = (task) => Effect_exports.gen(function* () {
18139
20540
  })
18140
20541
  );
18141
20542
  }
20543
+ if (task.taskFile && !existsSync3(task.taskFile)) {
20544
+ return yield* Effect_exports.fail(
20545
+ new AgentError({
20546
+ provider: engine === "claude2" ? "claude" : engine,
20547
+ kind: "unknown",
20548
+ cause: new Error(`task file not found: ${task.taskFile} (task ${task.id})`)
20549
+ })
20550
+ );
20551
+ }
18142
20552
  const sessionPath = sessionPathFor(engine, task);
18143
20553
  const startFresh = !sessionPath || !existsSync3(sessionPath);
18144
20554
  if (startFresh) {
@@ -18516,7 +20926,9 @@ var ScheduledTaskManager = class {
18516
20926
  var g2 = globalThis;
18517
20927
  var scheduledTaskManager = g2.__scheduledTaskManager ?? (g2.__scheduledTaskManager = new ScheduledTaskManager());
18518
20928
  export {
20929
+ buildTaskPrompt,
18519
20930
  getNextCronTime,
20931
+ readSessionNoHistory,
18520
20932
  scheduledTaskManager,
18521
20933
  sendChatMessageEff
18522
20934
  };