@songsid/agend 2.2.0-beta.1 → 2.2.0-beta.11

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 (401) hide show
  1. package/README.md +1 -1
  2. package/README.zh-TW.md +1 -1
  3. package/dist/agent-cli-instructions.md +16 -9
  4. package/dist/agent-cli.js +15 -7
  5. package/dist/agent-cli.js.map +1 -1
  6. package/dist/agent-endpoint.js +24 -9
  7. package/dist/agent-endpoint.js.map +1 -1
  8. package/dist/agent-whats-new.d.ts +47 -0
  9. package/dist/agent-whats-new.js +147 -0
  10. package/dist/agent-whats-new.js.map +1 -0
  11. package/dist/auth-api.d.ts +5 -3
  12. package/dist/auth-api.js +19 -3
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/backend/antigravity.d.ts +8 -0
  15. package/dist/backend/antigravity.js +32 -9
  16. package/dist/backend/antigravity.js.map +1 -1
  17. package/dist/backend/claude-carry.d.ts +22 -0
  18. package/dist/backend/claude-carry.js +170 -0
  19. package/dist/backend/claude-carry.js.map +1 -0
  20. package/dist/backend/claude-code.d.ts +65 -2
  21. package/dist/backend/claude-code.js +226 -33
  22. package/dist/backend/claude-code.js.map +1 -1
  23. package/dist/backend/codex-metadata.d.ts +33 -0
  24. package/dist/backend/codex-metadata.js +122 -18
  25. package/dist/backend/codex-metadata.js.map +1 -1
  26. package/dist/backend/codex.d.ts +3 -0
  27. package/dist/backend/codex.js +17 -1
  28. package/dist/backend/codex.js.map +1 -1
  29. package/dist/backend/credential-profile.d.ts +40 -3
  30. package/dist/backend/credential-profile.js +113 -5
  31. package/dist/backend/credential-profile.js.map +1 -1
  32. package/dist/backend/effort-metadata.d.ts +37 -1
  33. package/dist/backend/effort-metadata.js +86 -15
  34. package/dist/backend/effort-metadata.js.map +1 -1
  35. package/dist/backend/grok.d.ts +4 -0
  36. package/dist/backend/grok.js +14 -0
  37. package/dist/backend/grok.js.map +1 -1
  38. package/dist/backend/kiro-engine-ledger.d.ts +5 -0
  39. package/dist/backend/kiro-engine-ledger.js +20 -0
  40. package/dist/backend/kiro-engine-ledger.js.map +1 -1
  41. package/dist/backend/kiro-identity.d.ts +6 -0
  42. package/dist/backend/kiro-identity.js +19 -5
  43. package/dist/backend/kiro-identity.js.map +1 -1
  44. package/dist/backend/kiro.d.ts +39 -3
  45. package/dist/backend/kiro.js +143 -19
  46. package/dist/backend/kiro.js.map +1 -1
  47. package/dist/backend/launch-effort.d.ts +61 -0
  48. package/dist/backend/launch-effort.js +170 -0
  49. package/dist/backend/launch-effort.js.map +1 -0
  50. package/dist/backend/muse.d.ts +84 -0
  51. package/dist/backend/muse.js +449 -53
  52. package/dist/backend/muse.js.map +1 -1
  53. package/dist/backend/types.d.ts +47 -4
  54. package/dist/backend/types.js +12 -1
  55. package/dist/backend/types.js.map +1 -1
  56. package/dist/backend-command.d.ts +91 -0
  57. package/dist/backend-command.js +122 -0
  58. package/dist/backend-command.js.map +1 -0
  59. package/dist/background-work-ended.d.ts +18 -0
  60. package/dist/background-work-ended.js +30 -0
  61. package/dist/background-work-ended.js.map +1 -0
  62. package/dist/cache-service.d.ts +2 -0
  63. package/dist/cache-service.js +2 -1
  64. package/dist/cache-service.js.map +1 -1
  65. package/dist/channel/adapters/discord.d.ts +36 -1
  66. package/dist/channel/adapters/discord.js +126 -4
  67. package/dist/channel/adapters/discord.js.map +1 -1
  68. package/dist/channel/adapters/telegram.d.ts +42 -2
  69. package/dist/channel/adapters/telegram.js +142 -23
  70. package/dist/channel/adapters/telegram.js.map +1 -1
  71. package/dist/channel/mcp-server.js +9 -1
  72. package/dist/channel/mcp-server.js.map +1 -1
  73. package/dist/channel/mcp-tools.d.ts +11 -0
  74. package/dist/channel/mcp-tools.js +26 -13
  75. package/dist/channel/mcp-tools.js.map +1 -1
  76. package/dist/channel/message-edit-errors.d.ts +5 -0
  77. package/dist/channel/message-edit-errors.js +24 -0
  78. package/dist/channel/message-edit-errors.js.map +1 -0
  79. package/dist/channel/telegram-markdown.d.ts +6 -0
  80. package/dist/channel/telegram-markdown.js +104 -0
  81. package/dist/channel/telegram-markdown.js.map +1 -0
  82. package/dist/channel/tool-router.d.ts +2 -0
  83. package/dist/channel/tool-router.js +10 -4
  84. package/dist/channel/tool-router.js.map +1 -1
  85. package/dist/channel/types.d.ts +55 -3
  86. package/dist/cli.js +167 -39
  87. package/dist/cli.js.map +1 -1
  88. package/dist/command-table.d.ts +2 -2
  89. package/dist/command-table.js +6 -3
  90. package/dist/command-table.js.map +1 -1
  91. package/dist/config-validator.js +59 -0
  92. package/dist/config-validator.js.map +1 -1
  93. package/dist/cross-instance-envelope.d.ts +15 -2
  94. package/dist/cross-instance-envelope.js +29 -5
  95. package/dist/cross-instance-envelope.js.map +1 -1
  96. package/dist/daemon.d.ts +156 -1
  97. package/dist/daemon.js +773 -89
  98. package/dist/daemon.js.map +1 -1
  99. package/dist/delivery-outbox.d.ts +70 -8
  100. package/dist/delivery-outbox.js +315 -24
  101. package/dist/delivery-outbox.js.map +1 -1
  102. package/dist/delivery-reconciliation.d.ts +18 -1
  103. package/dist/delivery-reconciliation.js +67 -2
  104. package/dist/delivery-reconciliation.js.map +1 -1
  105. package/dist/fleet-context.d.ts +10 -1
  106. package/dist/fleet-manager.d.ts +404 -13
  107. package/dist/fleet-manager.js +2039 -210
  108. package/dist/fleet-manager.js.map +1 -1
  109. package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
  110. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +92 -21
  111. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +27 -3
  112. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
  113. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
  114. package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
  115. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
  116. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
  117. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
  118. package/dist/general-knowledge/skills/model-discovery/SKILL.md +12 -9
  119. package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
  120. package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
  121. package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
  122. package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
  123. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +8 -3
  124. package/dist/general-knowledge/steering/core-rules.md +8 -7
  125. package/dist/host-memory.d.ts +10 -0
  126. package/dist/host-memory.js +33 -1
  127. package/dist/host-memory.js.map +1 -1
  128. package/dist/human-delivery-receipts.d.ts +83 -0
  129. package/dist/human-delivery-receipts.js +194 -0
  130. package/dist/human-delivery-receipts.js.map +1 -0
  131. package/dist/instance-avatar.d.ts +36 -0
  132. package/dist/instance-avatar.js +57 -0
  133. package/dist/instance-avatar.js.map +1 -0
  134. package/dist/instance-config-impact.js +6 -0
  135. package/dist/instance-config-impact.js.map +1 -1
  136. package/dist/instance-lifecycle.d.ts +29 -6
  137. package/dist/instance-lifecycle.js +79 -28
  138. package/dist/instance-lifecycle.js.map +1 -1
  139. package/dist/instructions.d.ts +3 -1
  140. package/dist/instructions.js +11 -8
  141. package/dist/instructions.js.map +1 -1
  142. package/dist/kiro-log-gate.d.ts +42 -0
  143. package/dist/kiro-log-gate.js +39 -0
  144. package/dist/kiro-log-gate.js.map +1 -0
  145. package/dist/locale.js +226 -44
  146. package/dist/locale.js.map +1 -1
  147. package/dist/log-service.d.ts +99 -0
  148. package/dist/log-service.js +243 -0
  149. package/dist/log-service.js.map +1 -0
  150. package/dist/log-steps.d.ts +169 -0
  151. package/dist/log-steps.js +858 -0
  152. package/dist/log-steps.js.map +1 -0
  153. package/dist/login-controller.d.ts +20 -3
  154. package/dist/login-controller.js +71 -19
  155. package/dist/login-controller.js.map +1 -1
  156. package/dist/login-flows.d.ts +5 -2
  157. package/dist/login-flows.js +5 -4
  158. package/dist/login-flows.js.map +1 -1
  159. package/dist/memory-pressure.d.ts +13 -1
  160. package/dist/memory-pressure.js +50 -10
  161. package/dist/memory-pressure.js.map +1 -1
  162. package/dist/needs-you-hub.js +2 -0
  163. package/dist/needs-you-hub.js.map +1 -1
  164. package/dist/needs-you-live.d.ts +6 -0
  165. package/dist/needs-you-live.js +23 -3
  166. package/dist/needs-you-live.js.map +1 -1
  167. package/dist/next-steps.js +1 -1
  168. package/dist/next-steps.js.map +1 -1
  169. package/dist/outbound-handlers.d.ts +100 -0
  170. package/dist/outbound-handlers.js +284 -97
  171. package/dist/outbound-handlers.js.map +1 -1
  172. package/dist/outbound-schemas.d.ts +38 -15
  173. package/dist/outbound-schemas.js +36 -8
  174. package/dist/outbound-schemas.js.map +1 -1
  175. package/dist/public-link-progress.d.ts +1 -1
  176. package/dist/public-link-progress.js +8 -2
  177. package/dist/public-link-progress.js.map +1 -1
  178. package/dist/public-preview.d.ts +101 -0
  179. package/dist/public-preview.js +236 -0
  180. package/dist/public-preview.js.map +1 -0
  181. package/dist/public-web-gateway.js +14 -4
  182. package/dist/public-web-gateway.js.map +1 -1
  183. package/dist/public-web-link.d.ts +24 -1
  184. package/dist/public-web-link.js +63 -9
  185. package/dist/public-web-link.js.map +1 -1
  186. package/dist/reply-buttons-controller.d.ts +89 -5
  187. package/dist/reply-buttons-controller.js +273 -8
  188. package/dist/reply-buttons-controller.js.map +1 -1
  189. package/dist/reply-buttons.d.ts +48 -3
  190. package/dist/reply-buttons.js +105 -10
  191. package/dist/reply-buttons.js.map +1 -1
  192. package/dist/reply-polls.d.ts +85 -0
  193. package/dist/reply-polls.js +154 -0
  194. package/dist/reply-polls.js.map +1 -0
  195. package/dist/restart-guard.d.ts +6 -3
  196. package/dist/restart-guard.js +6 -3
  197. package/dist/restart-guard.js.map +1 -1
  198. package/dist/restart-progress.d.ts +33 -0
  199. package/dist/restart-progress.js +30 -0
  200. package/dist/restart-progress.js.map +1 -1
  201. package/dist/service-activation.d.ts +15 -7
  202. package/dist/service-activation.js +46 -29
  203. package/dist/service-activation.js.map +1 -1
  204. package/dist/service-installer.d.ts +31 -0
  205. package/dist/service-installer.js +41 -2
  206. package/dist/service-installer.js.map +1 -1
  207. package/dist/settings-api.js +85 -25
  208. package/dist/settings-api.js.map +1 -1
  209. package/dist/settings-change.js +72 -1
  210. package/dist/settings-change.js.map +1 -1
  211. package/dist/settings-effect.js +28 -4
  212. package/dist/settings-effect.js.map +1 -1
  213. package/dist/settings-http-confirmation.js +7 -0
  214. package/dist/settings-http-confirmation.js.map +1 -1
  215. package/dist/setup-form.d.ts +1 -1
  216. package/dist/setup-form.js +1 -1
  217. package/dist/spawn-gate.js +5 -1
  218. package/dist/spawn-gate.js.map +1 -1
  219. package/dist/spawn-hold-reply.d.ts +12 -0
  220. package/dist/spawn-hold-reply.js +39 -0
  221. package/dist/spawn-hold-reply.js.map +1 -0
  222. package/dist/status-emojis.d.ts +10 -3
  223. package/dist/status-emojis.js +11 -2
  224. package/dist/status-emojis.js.map +1 -1
  225. package/dist/systemd-peer-bus.d.ts +95 -0
  226. package/dist/systemd-peer-bus.js +430 -0
  227. package/dist/systemd-peer-bus.js.map +1 -0
  228. package/dist/systemd-runtime.d.ts +27 -1
  229. package/dist/systemd-runtime.js +69 -7
  230. package/dist/systemd-runtime.js.map +1 -1
  231. package/dist/tips.js +4 -4
  232. package/dist/tips.js.map +1 -1
  233. package/dist/tool-permissions.js +3 -3
  234. package/dist/tool-permissions.js.map +1 -1
  235. package/dist/tool-progress.js +3 -2
  236. package/dist/tool-progress.js.map +1 -1
  237. package/dist/topic-commands.d.ts +42 -2
  238. package/dist/topic-commands.js +101 -11
  239. package/dist/topic-commands.js.map +1 -1
  240. package/dist/transcript-delta-reader.d.ts +3 -3
  241. package/dist/transcript-delta-reader.js +8 -8
  242. package/dist/transcript-delta-reader.js.map +1 -1
  243. package/dist/transcript-jsonl.d.ts +80 -3
  244. package/dist/transcript-jsonl.js +147 -10
  245. package/dist/transcript-jsonl.js.map +1 -1
  246. package/dist/transcript-monitor.d.ts +19 -0
  247. package/dist/transcript-monitor.js +87 -15
  248. package/dist/transcript-monitor.js.map +1 -1
  249. package/dist/transcript-sources.d.ts +78 -0
  250. package/dist/transcript-sources.js +375 -64
  251. package/dist/transcript-sources.js.map +1 -1
  252. package/dist/transcript-turns.d.ts +15 -2
  253. package/dist/transcript-turns.js +15 -2
  254. package/dist/transcript-turns.js.map +1 -1
  255. package/dist/tunnel/cloudflared.d.ts +7 -15
  256. package/dist/tunnel/cloudflared.js +36 -1
  257. package/dist/tunnel/cloudflared.js.map +1 -1
  258. package/dist/tunnel/purpose-lane.d.ts +5 -1
  259. package/dist/tunnel/purpose-lane.js +14 -7
  260. package/dist/tunnel/purpose-lane.js.map +1 -1
  261. package/dist/tunnel/types.d.ts +5 -1
  262. package/dist/tunnel/types.js.map +1 -1
  263. package/dist/turn-resume.d.ts +2 -0
  264. package/dist/turn-resume.js +1 -1
  265. package/dist/turn-resume.js.map +1 -1
  266. package/dist/types.d.ts +25 -0
  267. package/dist/ui/chat-commands.js +1 -0
  268. package/dist/ui/chat-emojis.js +33 -0
  269. package/dist/ui/chat-mentions.js +63 -0
  270. package/dist/ui/chat-render.js +61 -4
  271. package/dist/ui/chat-store.js +37 -3
  272. package/dist/ui/chat-strings.js +40 -20
  273. package/dist/ui/chat-thread.js +111 -12
  274. package/dist/ui/chat-time.js +80 -0
  275. package/dist/ui/panel-chat.js +41 -10
  276. package/dist/ui/panel-details.js +2 -0
  277. package/dist/ui/panel-fleet.js +199 -57
  278. package/dist/ui/panel-log.js +428 -0
  279. package/dist/ui/panel-needs.js +6 -2
  280. package/dist/ui/panel-settings.js +184 -32
  281. package/dist/ui/preview-panel.js +55 -15
  282. package/dist/ui/preview-status.js +28 -0
  283. package/dist/ui/preview.js +44 -3
  284. package/dist/ui/settings-dialogs.js +7 -2
  285. package/dist/ui/settings-model.js +2 -1
  286. package/dist/ui/settings-strings.js +56 -4
  287. package/dist/ui/settings-token.js +1 -1
  288. package/dist/ui/shared/app-i18n.js +43 -17
  289. package/dist/ui/shared/app-prefs.js +250 -0
  290. package/dist/ui/shared/app-route.js +7 -2
  291. package/dist/ui/shared/app-shell.js +165 -8
  292. package/dist/ui/shared/app-store.js +5 -1
  293. package/dist/ui/shared/app-stream.js +26 -5
  294. package/dist/ui/shared/app.css +163 -22
  295. package/dist/ui/shared/app.js +11 -1
  296. package/dist/ui/shared/fonts/README.md +1 -1
  297. package/dist/ui/shared/header-tools.js +55 -5
  298. package/dist/ui/shared/instance-nav.js +241 -45
  299. package/dist/ui/shared/instance-switch.js +4 -4
  300. package/dist/ui/shared/panel-view.js +6 -0
  301. package/dist/ui/shared/signin.js +7 -7
  302. package/dist/ui/shared/theme.js +39 -7
  303. package/dist/ui/shared/tokens.css +1 -1
  304. package/dist/ui/shared/ui-icons.js +1 -0
  305. package/dist/ui/shared/usage-dialog.js +23 -5
  306. package/dist/ui/shared/view-strings.js +32 -4
  307. package/dist/ui/signin.html +1 -1
  308. package/dist/unrecognised-prompt.d.ts +23 -0
  309. package/dist/unrecognised-prompt.js +74 -0
  310. package/dist/unrecognised-prompt.js.map +1 -0
  311. package/dist/update-check.d.ts +31 -0
  312. package/dist/update-check.js +47 -0
  313. package/dist/update-check.js.map +1 -1
  314. package/dist/update-install.d.ts +28 -2
  315. package/dist/update-install.js +22 -4
  316. package/dist/update-install.js.map +1 -1
  317. package/dist/update-launch.d.ts +46 -1
  318. package/dist/update-launch.js +146 -3
  319. package/dist/update-launch.js.map +1 -1
  320. package/dist/update-marker.d.ts +51 -0
  321. package/dist/update-marker.js +61 -0
  322. package/dist/update-marker.js.map +1 -1
  323. package/dist/update-preflight.d.ts +100 -0
  324. package/dist/update-preflight.js +264 -0
  325. package/dist/update-preflight.js.map +1 -0
  326. package/dist/updater-caller.d.ts +31 -0
  327. package/dist/updater-caller.js +109 -0
  328. package/dist/updater-caller.js.map +1 -0
  329. package/dist/usage/i18n-keys.d.ts +1 -1
  330. package/dist/usage/i18n-keys.js +1 -1
  331. package/dist/usage/i18n-keys.js.map +1 -1
  332. package/dist/usage/providers.d.ts +34 -5
  333. package/dist/usage/providers.js +160 -27
  334. package/dist/usage/providers.js.map +1 -1
  335. package/dist/usage/statusline-usage.d.ts +6 -2
  336. package/dist/usage/statusline-usage.js +10 -4
  337. package/dist/usage/statusline-usage.js.map +1 -1
  338. package/dist/view-api.d.ts +1 -1
  339. package/dist/view-api.js +38 -8
  340. package/dist/view-api.js.map +1 -1
  341. package/dist/wake-coordinator.d.ts +11 -0
  342. package/dist/wake-coordinator.js +38 -4
  343. package/dist/wake-coordinator.js.map +1 -1
  344. package/dist/web-api.d.ts +89 -4
  345. package/dist/web-api.js +551 -45
  346. package/dist/web-api.js.map +1 -1
  347. package/dist/web-auth.d.ts +2 -2
  348. package/dist/web-auth.js +9 -4
  349. package/dist/web-auth.js.map +1 -1
  350. package/dist/web-chat-history.d.ts +12 -1
  351. package/dist/web-chat-history.js +29 -7
  352. package/dist/web-chat-history.js.map +1 -1
  353. package/dist/web-commands.d.ts +27 -4
  354. package/dist/web-commands.js +19 -4
  355. package/dist/web-commands.js.map +1 -1
  356. package/dist/web-host-guard.d.ts +3 -11
  357. package/dist/web-host-guard.js +3 -12
  358. package/dist/web-host-guard.js.map +1 -1
  359. package/dist/web-images.d.ts +47 -0
  360. package/dist/web-images.js +169 -0
  361. package/dist/web-images.js.map +1 -0
  362. package/dist/web-login.d.ts +14 -0
  363. package/dist/web-login.js +4 -2
  364. package/dist/web-login.js.map +1 -1
  365. package/dist/web-mentions.d.ts +44 -0
  366. package/dist/web-mentions.js +75 -0
  367. package/dist/web-mentions.js.map +1 -0
  368. package/dist/web-prefs.d.ts +81 -0
  369. package/dist/web-prefs.js +297 -0
  370. package/dist/web-prefs.js.map +1 -0
  371. package/dist/web-preview.d.ts +14 -1
  372. package/dist/web-preview.js +35 -13
  373. package/dist/web-preview.js.map +1 -1
  374. package/dist/web-profile.d.ts +32 -0
  375. package/dist/web-profile.js +132 -0
  376. package/dist/web-profile.js.map +1 -0
  377. package/dist/web-reply-files.d.ts +45 -0
  378. package/dist/web-reply-files.js +223 -0
  379. package/dist/web-reply-files.js.map +1 -0
  380. package/dist/web-schedules.d.ts +12 -0
  381. package/dist/web-schedules.js +34 -0
  382. package/dist/web-schedules.js.map +1 -0
  383. package/dist/web-server-drain.d.ts +10 -0
  384. package/dist/web-server-drain.js +50 -0
  385. package/dist/web-server-drain.js.map +1 -0
  386. package/dist/web-session.d.ts +50 -1
  387. package/dist/web-session.js +63 -6
  388. package/dist/web-session.js.map +1 -1
  389. package/dist/web-settings-patch.d.ts +23 -0
  390. package/dist/web-settings-patch.js +77 -0
  391. package/dist/web-settings-patch.js.map +1 -0
  392. package/dist/web-shell-routes.d.ts +5 -1
  393. package/dist/web-shell-routes.js +10 -1
  394. package/dist/web-shell-routes.js.map +1 -1
  395. package/dist/web-upload.d.ts +17 -4
  396. package/dist/web-upload.js +64 -13
  397. package/dist/web-upload.js.map +1 -1
  398. package/dist/workflow-templates/default.md +1 -1
  399. package/package.json +1 -1
  400. package/templates/launchd.plist.ejs +3 -1
  401. package/templates/systemd.service.ejs +2 -1
package/dist/locale.js CHANGED
@@ -13,13 +13,7 @@ export function detectLocale(fleetConfig) {
13
13
  return detectTimezone() === 8 ? "zh-TW" : "en";
14
14
  }
15
15
  const enMessages = {
16
- "memory.pressure": "⚠️ Host memory pressure: {0}, {1} swap free. {2} Existing agents keep running; check other memory-heavy host processes.",
17
- "memory.kernel_pressure": "⚠️ macOS kernel memory pressure level: {0}. Estimated available RAM: {1}; swap free: {2} (diagnostic only). {3} Existing agents keep running.",
18
- "memory.available": "{0} RAM available",
19
- "memory.free": "{0} RAM free (available RAM could not be measured)",
20
- "memory.holding": "New agent starts will wait for memory to recover.",
21
- "memory.slowing": "New agent starts are limited to one at a time, at least 5 seconds apart.",
22
- "memory.unknown": "unknown",
16
+ "memory.action_held": "⏳ Held: host memory is low. This action will continue when memory recovers; see the Fleet dashboard for status.",
23
17
  "cancel.button": "🛑 Cancel",
24
18
  "cancel.sent": "🛑 Sent cancel to {0}.",
25
19
  "cancel.not_running": "❌ {0} not running.",
@@ -59,6 +53,8 @@ const enMessages = {
59
53
  "classic.selection_expired": "⏰ Backend selection expired. Run /start again to choose.",
60
54
  "classic.backend_not_installed": "⚠️ {0} CLI (`{1}`) was not found in PATH.\nInstall: `{2}`\nStarting anyway…",
61
55
  "classic.stopped": "🛑 Agent stopped in this channel.",
56
+ "classic.stopped_bg_work": "⚠️ Background work was running and was ended with it.",
57
+ "stop.background_work_ended": "⚠️ {0} had background work running — it was ended with the stop.",
62
58
  "classic.no_agent_here": "No active agent in this channel.",
63
59
  "admin.only": "⛔ Only admins can do this.",
64
60
  "admin.required": "⛔ This command requires admin access.",
@@ -79,14 +75,14 @@ const enMessages = {
79
75
  "dashboard.public_close": "Close public link",
80
76
  "dashboard.public_close_confirm": "Close link (signs public browsers out)",
81
77
  "dashboard.public_close_keep": "Cancel",
82
- "dashboard.public_general": "Use /dashboard in this bot’s General as a fleet admin.",
78
+ "dashboard.public_general": "Use /web in this bot’s General as a fleet admin.",
83
79
  "dashboard.public_risk": "Public link: Cloudflare handles TLS. Signing in grants full web-admin access. Opens only when you choose it; expires automatically. Link and code go to you privately.",
84
80
  "dashboard.public_status": "Public link: {0} · {1}s remaining",
85
81
  "dashboard.public_until": " · until {0}",
86
82
  "dashboard.code_next": "📋 The code is also in the next message on its own — tap or long-press it to copy.",
87
83
  "dashboard.public_closed": "🔒 Public web access closed.",
88
84
  "dashboard.public_cleanup": "⚠️ Public web access is closed, but the tunnel process could not be confirmed stopped. Resolve its cleanup before opening another link.",
89
- "dashboard.private_link": "🔐 Web sign-in\n{0}\nCode: {1} (single use, {2} minutes)\nLink expires: {3}\nDo not forward. Use /dashboard revoke to sign out everyone and close the public link.",
85
+ "dashboard.private_link": "🔐 Web sign-in\n{0}\nCode: {1} (single use, {2} minutes)\nLink expires: {3}\nDo not forward. Use /web revoke to sign out everyone and close the public link.",
90
86
  "dashboard.private_sent": "🔐 Sign-in details sent privately.",
91
87
  "dashboard.private_sent_dm": "🔐 Sign-in details sent to you by DM.",
92
88
  "dashboard.progress.title": "🌐 Opening a temporary public link · {0} s",
@@ -110,6 +106,10 @@ const enMessages = {
110
106
  "dashboard.progress.fail.cancelled": "cancelled",
111
107
  "dashboard.progress.fail.spawn-failed": "cloudflared could not be started",
112
108
  "dashboard.progress.fail.no-address": "Cloudflare gave no public address in time",
109
+ "dashboard.progress.fail.rate-limited": "Cloudflare is limiting new temporary links from this machine — try again in a while; the LAN link still works",
110
+ "dashboard.progress.fail.provisioning-failed": "Cloudflare refused to create a temporary link right now — try again later; the LAN link still works",
111
+ "dashboard.progress.fail.process-exited": "cloudflared stopped before it gave a public address",
112
+ "dashboard.progress.fail.bad-address": "Cloudflare gave an address AgEnD could not use",
113
113
  "dashboard.progress.fail.unreachable": "the public address never reached this fleet",
114
114
  "dashboard.progress.fail.lease-held": "another tunnel is still running (a /login link, or one whose cleanup is unconfirmed)",
115
115
  "dashboard.progress.fail.gateway-failed": "the local gateway could not start",
@@ -118,18 +118,25 @@ const enMessages = {
118
118
  "dashboard.progress.fail.unknown": "it stopped unexpectedly",
119
119
  "dashboard.private_sent_here": "🔐 The bot could not DM you, so your sign-in details are posted here, visible only to you.",
120
120
  "dashboard.private_sending": "⏳ Sending your sign-in details privately…",
121
- "dashboard.menu_failed": "⚠️ The /dashboard menu could not be shown. Run /dashboard again.",
122
- "dashboard.private_failed": "Private delivery or link startup was not confirmed. On Telegram, /start this bot privately first, then retry /dashboard. No sign-in code is posted here.",
123
- "web.public_login_notice": "🔐 New web sign-in · public: {0} (session {1}). If this was not you, use /dashboard revoke.",
121
+ "dashboard.menu_failed": "⚠️ The /web menu could not be shown. Run /web again.",
122
+ "dashboard.private_failed": "Private delivery or link startup was not confirmed. On Telegram, /start this bot privately first, then retry /web. No sign-in code is posted here.",
123
+ "dashboard.start_web_label": "Start privately →",
124
+ "dashboard.menu_tg_hint": "No private chat with this bot yet? ① Open {0} ② press Start ③ choose the link there — the code arrives in that chat.",
125
+ "dashboard.private_failed_tg": "Couldn't send the sign-in code privately: this bot can't message you until you open a chat with it. ① Tap “Start privately →” below ② press Start in that chat ③ choose the link there — the code arrives in that chat. No sign-in code is posted here.",
126
+ "dashboard.private_failed_tg_nolink": "Couldn't send the sign-in code privately: this bot can't message you until you open a chat with it. ① Open a private chat with this bot ② send /start web ③ choose the link there — the code arrives in that chat. No sign-in code is posted here.",
127
+ "dashboard.private_sent_below": "🔐 Sign-in details are below.",
128
+ "dashboard.link_failed": "⚠️ The sign-in link could not be started, so no sign-in code was sent. Run /web again.",
129
+ "dashboard.start_web_ack": "✅ You can now use /web in your group.",
130
+ "web.public_login_notice": "🔐 New web sign-in · public: {0} (session {1}). If this was not you, use /web revoke.",
124
131
  "dashboard.title": "📊 AgEnD Dashboard",
125
132
  "dashboard.starting": "⏳ Dashboard starting, retry shortly.",
126
133
  "dashboard.signin": "• Sign in: {0}/signin",
127
134
  "dashboard.code": "• Code: {0} (works once, valid {1} min)",
128
- "dashboard.code_help": "Choose a sign-in option below. The bot sends your link and one-time code privately. Revoke every browser with /dashboard revoke.",
135
+ "dashboard.code_help": "Choose a sign-in option below. The bot sends your link and one-time code privately. Revoke every browser with /web revoke.",
129
136
  "dashboard.revoked": "🔒 Signed out {0} web session(s) and withdrew any unused code.",
130
- "dashboard.revoked_not_durable": "⚠️ Signed out {0} web session(s) for now, but the change could NOT be saved: ~/.agend/web-sessions.json could not be updated or removed, so a fleet restart may bring those sessions back. Fix that file's permissions and run /dashboard revoke again, or rotate the token with agend web-token rotate.",
131
- "web.login_notice": "🔐 New web sign-in: {0} ({1}, session {2}). If this was not you, send /dashboard revoke.",
132
- "web.resend_code": "🔐 Web sign-in code: {0} (single use, {1} minutes; any earlier code no longer works)\nRequested from the sign-in page by {2} ({3}). If this was not you, ignore it or send /dashboard revoke.",
137
+ "dashboard.revoked_not_durable": "⚠️ Signed out {0} web session(s) for now, but the change could NOT be saved: ~/.agend/web-sessions.json could not be updated or removed, so a fleet restart may bring those sessions back. Fix that file's permissions and run /web revoke again, or rotate the token with agend web-token rotate.",
138
+ "web.login_notice": "🔐 New web sign-in: {0} ({1}, session {2}). If this was not you, send /web revoke.",
139
+ "web.resend_code": "🔐 Web sign-in code: {0} (single use, {1} minutes; any earlier code no longer works)\nRequested from the sign-in page by {2} ({3}). If this was not you, ignore it or send /web revoke.",
133
140
  "web.resend_unknown_browser": "a browser",
134
141
  "web.resend_public": "public link",
135
142
  "web.resend_local": "local network",
@@ -161,7 +168,7 @@ const enMessages = {
161
168
  "needs.reason.crashed": "Crashed",
162
169
  "needs.reason.delivery_uncertain": "Could not confirm delivery",
163
170
  "needs.reason.delivery_failed": "Delivery failed",
164
- "upgrade.web_chat": "🆕 AgEnD 2.2: web chat\nYou can now talk to your agents from a browser. Each agent's web chat is the same conversation as its chat here: what you send from the web shows up here, and the agent's replies show up in both.\n• Attach files and images (📎, or paste or drop them in)\n• Stop a reply in progress, and see how far your message got\n• To open it, an admin sends /dashboard for the sign-in link and a one-time code\n📱 The dashboard runs on the fleet's own machine. To use it from a phone: {0}",
171
+ "upgrade.web_chat": "🆕 AgEnD 2.2: web chat\nYou can now talk to your agents from a browser. Each agent's web chat is the same conversation as its chat here: what you send from the web shows up here, and the agent's replies show up in both.\n• Attach files and images (📎, or paste or drop them in)\n• Stop a reply in progress, and see how far your message got\n• To open it, an admin sends /web for the sign-in link and a one-time code\n📱 The dashboard runs on the fleet's own machine. To use it from a phone: {0}",
165
172
  "dashboard.remote_hint": "📱 These links open on the fleet's own machine only. To use web chat from a phone or another computer: {0}",
166
173
  "fleet.ready": "Fleet ready. {0}/{1} instances running. v{2}",
167
174
  "fleet.ready_with_failed": "Fleet ready. {0}/{1} instances running. v{2} | Failed: {3}",
@@ -212,6 +219,9 @@ const enMessages = {
212
219
  "kiro.untagged_steering": "kiro: an AgEnD instructions file from before this version (.kiro/steering/agend-<instance>.md, without a fleet tag) is still in this directory. AgEnD cannot tell which fleet wrote it, so it keeps it; delete it by hand once every fleet using this directory has upgraded.",
213
220
  "kiro.no_instance_agent": "kiro-cli {0} has no `--agent` / `--resume-id` (needs {1} or newer), so this instance runs as before: kiro instances sharing its working directory can see each other's tools and conversations. Run `kiro-cli update` to isolate them.",
214
221
  "kiro.identity_legacy": "kiro: this launch runs as before and is NOT isolated from other kiro instances in the same directory ({0}). The next launch tries again.",
222
+ "kiro.upgrade_shared_directory": "kiro: started fresh because another configured kiro instance shares this directory. The pre-upgrade conversation was left untouched; AgEnD cannot safely assign it to either instance.",
223
+ "kiro.upgrade_claimed_conversation": "kiro: started fresh because the newest pre-upgrade conversation is already claimed by another instance or was given up. AgEnD left that conversation untouched.",
224
+ "kiro.upgrade_unknown_peers": "kiro: started fresh because AgEnD could not verify the other configured kiro instances. The pre-upgrade conversations were left untouched.",
215
225
  "kiro.switch_unrecorded": "kiro: the instance now runs as its own agent, but AgEnD could not record that; the next launch checks again and keeps the shared entries until it can.",
216
226
  "kiro.switch_timeout": "kiro: the resumed conversation did not switch to this instance's agent within {0}s. It keeps running as before, with its shared entries kept; the next launch tries again.",
217
227
  "kiro.version_untested": "kiro-cli {0} is newer than the newest version AgEnD has been run with ({1}). AgEnD read its launch flags from `kiro-cli chat --help`; if anything misbehaves, report the version.",
@@ -265,6 +275,9 @@ const enMessages = {
265
275
  "interaction.suspected": "The terminal may be waiting for input; seen {0}s ago. This is not confirmed.",
266
276
  "inst.interaction_parked": "⚠️ {0} is waiting for your input ({1}). Open its terminal and choose how to proceed. Queued messages and Cancel remain available.",
267
277
  "fleet.interaction_parked": "⚠️ {0} is waiting for input ({1}). Check its terminal; AgEnD will not choose an option for you.",
278
+ "inst.unrecognised_prompt": "⚠️ {0} is waiting on a prompt AgEnD doesn't recognise{1}. Open its terminal and answer it there: AgEnD won't press anything. Messages to it are held until the prompt is gone.",
279
+ "inst.unrecognised_prompt_question": " (“{0}”)",
280
+ "fleet.unrecognised_prompt": "⚠️ {0} is waiting on a prompt AgEnD doesn't recognise{1}. Check its terminal; queued messages are held meanwhile.",
268
281
  "interactive.kind.sudo_password": "sudo password",
269
282
  "interactive.kind.password": "password",
270
283
  "interactive.kind.confirmation": "Y/N confirmation",
@@ -305,6 +318,15 @@ const enMessages = {
305
318
  "reply_buttons.answered": "Already answered.",
306
319
  "reply_buttons.closed": "This choice is closed — reply in text.",
307
320
  "reply_buttons.sent": "Sent: {0}",
321
+ "poll.status_open": "🗳 {0} answered",
322
+ "poll.status_closed": "🗳 Closed · {0} answered",
323
+ "poll.closes": "Closes",
324
+ "poll.closed_line": "🔒 Poll closed",
325
+ "poll.voted": "✓ Your vote: {0}",
326
+ "poll.withdrawn": "Your vote is withdrawn.",
327
+ "poll.closed": "This poll is closed.",
328
+ "poll.not_ready": "This poll is still being posted — try again in a moment.",
329
+ "poll.voters_title": "🗳 Who voted:",
308
330
  "menu.click_stale": "⚠️ Nothing was changed: the instance moved to another bot, or you are no longer an admin there. Open the menu again.",
309
331
  "buttons.wrong_place": "⚠️ This button does not match the prompt it belongs to. Run the command again.",
310
332
  "buttons.post_failed": "⚠️ Could not post the buttons: {0}",
@@ -361,8 +383,8 @@ const enMessages = {
361
383
  "slash.chat": "Send a message to the agent",
362
384
  "slash.ctx": "Show context usage",
363
385
  "slash.cancel": "Interrupt the agent's current operation (sends Escape)",
364
- "slash.dashboard": "Sign in to the web dashboard and web chat (admin only)",
365
- "slash.web": "Same as /dashboard: sign in to the web dashboard and web chat (admin only)",
386
+ "slash.dashboard": "Alias of /web: sign in to the web dashboard and web chat (admin only)",
387
+ "slash.web": "Sign in to the web dashboard and web chat (admin only)",
366
388
  "slash.compact": "Compact agent context window",
367
389
  "slash.compact_arg": "[optional summary focus — Claude Code only]",
368
390
  "slash.steer": "Interject into the agent's current task",
@@ -376,7 +398,12 @@ const enMessages = {
376
398
  "btw.sent": "💬 Side question sent to {0}.",
377
399
  "btw.not_connected": "❌ Instance not connected (IPC unavailable)",
378
400
  "btw.unsupported": "⚠️ /btw is not supported for the {0} backend (Claude Code only). The message was NOT sent.",
379
- "login.usage": "Usage: /login [backend] | /login cancel",
401
+ "login.usage": "Usage: /login [backend] [profile] | /login cancel",
402
+ "login.profile_label": "{0} profile `{1}`",
403
+ "login.profile_invalid": "`{0}` is not a credential profile name: letters, digits, '.', '_' or '-', starting with a letter or digit, up to 64 characters.",
404
+ "login.profile_host_only": "A {0} profile is signed in on the host for now — run this there:\n`{2}`\n(`/login {0} {1}` from chat is not available for {0} yet.)",
405
+ "login.profile_unsupported": "{0} has no credential profiles: use `/login {0}` for its login.",
406
+ "login.profile_needs_backend": "A profile needs its backend too: `/login backend:claude-code profile:<name>`.",
380
407
  "login.install_cli_moved": "ℹ️ `/install-cli` is now part of `/login`: `/login <backend>` installs a missing CLI, then signs in.",
381
408
  "login.install_by_name": "not installed, and not offered here — `/login {0}` installs it.",
382
409
  "login.choose_backend": "Which backend should sign in again?",
@@ -513,6 +540,7 @@ const enMessages = {
513
540
  "slash.login": "Sign in or install a CLI backend remotely (beta)",
514
541
  "slash.option.login_backend": "Backend to sign in",
515
542
  "slash.option.login_cancel": "Cancel the active login session",
543
+ "slash.option.login_profile": "Credential profile to sign in (claude-code), instead of the default login",
516
544
  "slash.option.restart_mode": "Optional full process reload",
517
545
  "slash.usage": "AI subscription usage",
518
546
  "slash.tips": "Show a useful AgEnD tip",
@@ -537,7 +565,7 @@ const enMessages = {
537
565
  "slash.option.load_filename": "File name to load",
538
566
  "chat.usage": "Usage: `/chat <message>`",
539
567
  "filename.invalid": "⛔ Invalid filename — only letters, numbers, dots, hyphens, underscores allowed.",
540
- "dashboard.disabled": "⛔ /dashboard disabled — no allowed_users configured",
568
+ "dashboard.disabled": "⛔ /web disabled — no allowed_users configured",
541
569
  "update.disabled": "⛔ /update disabled — no allowed_users configured",
542
570
  "doctor.running": "🩺 Running diagnostics...",
543
571
  "doctor.no_output": "No diagnostic output.",
@@ -690,6 +718,8 @@ const enMessages = {
690
718
  "usage.hint.grok_no_login": "auth.json has no usable login. Run `grok login`.",
691
719
  "usage.hint.login_kiro": "Log in with the Kiro CLI (`kiro-cli`).",
692
720
  "usage.hint.kiro_signed_out": "Signed out — run `kiro-cli` to log in.",
721
+ "usage.hint.claude_profile_signed_out": "Not logged in — sign in with: {0}",
722
+ "usage.hint.claude_profile_signed_out_chat": "Not logged in — sign in with `{0}` (or run `{1}` on the host).",
693
723
  "usage.hint.token_refreshing": "Token refreshing — try again in a moment.",
694
724
  "usage.hint.subscription_no_credit": "Subscription — no credit usage to report.",
695
725
  "usage.value.unlimited": "♾️ Unlimited",
@@ -743,6 +773,11 @@ const enMessages = {
743
773
  "model.invalid_chars": "❌ Model name must not contain newlines or control characters.",
744
774
  "model.persist_failed": "❌ Could not set model for {0}.",
745
775
  "model.runtime_success": "✅ Switched {0} to `{1}` (runtime).",
776
+ "model.switch_confirmed": "✅ Switched {0} to `{1}`. Claude asked to confirm because the conversation was cached for the previous model, so its next reply re-reads the full history (slower, more tokens).",
777
+ "model.switch_mismatch": "⚠️ {0}: not switched — Claude would switch to “{1}”, not `{2}`, so AgEnD answered No. The model is unchanged.",
778
+ "model.switch_unconfirmed": "⏳ {0}: asked for `/model {1}`, but no result came back within {2} s (it may still be queued behind other input). Check its terminal; messages to it are held while a model-switch confirmation is on screen.",
779
+ "model.unknown_name": "⚠️ Not switched: unknown model “{0}”. Known: {1} (or a claude-… model id). Nothing was sent.",
780
+ "model.switch_not_sent": "⚠️ {0}: `/model {1}` was not sent (cancelled, or the instance could not take it). Nothing changed.",
746
781
  "model.restart_success": "✅ Set {0} to `{1}` and restarted.",
747
782
  "effort.unsupported": "❌ {0} has no reasoning-effort setting.",
748
783
  "effort.usage": "Usage: /effort <{0}>",
@@ -759,6 +794,58 @@ const enMessages = {
759
794
  "effort.current_default": "Current effort: (CLI default)",
760
795
  "effort.current_fleet": "Current effort: {0} (fleet default)",
761
796
  "effort.current": "Current effort: {0}",
797
+ "backend.usage": "Usage: /backend [backend] [model] [effort] — e.g. /backend codex gpt-5.5 high. With nothing after it, a menu opens.",
798
+ "backend.menu": "Now: {0}\nSelect a backend (CLIs installed on this host):",
799
+ "backend.not_installed": "❌ `{0}` is not a backend installed on this host. Installed: {1}.",
800
+ "backend.same": "{0} already runs {1} — nothing changed. To change only its model or effort, use /model or /effort.",
801
+ "backend.default": "default",
802
+ "backend.default_inherited": "fleet default: {0}",
803
+ "backend.default_cli": "the CLI's default",
804
+ "backend.model_menu": "Model for {0}:",
805
+ "backend.model_menu_empty": "No model list is known for {0} yet, so only its default can be chosen:",
806
+ "backend.unknown_model": "❌ `{0}` is not a model {1} offers. Choose one of: {2}.",
807
+ "backend.effort_menu": "Effort for {0} · {1}:",
808
+ "backend.no_effort": "❌ {0} takes no effort at launch on this host: leave the effort out.",
809
+ "backend.unknown_effort": "❌ `{0}` is not an effort level of {1}. Choose one of: {2}.",
810
+ "backend.confirm_head": "Switch {0} from {1} to {2}?",
811
+ "backend.confirm_model": "• Model: {0}",
812
+ "backend.confirm_effort": "• Effort: {0}",
813
+ "backend.confirm_no_effort": "• Effort: none ({0} takes no effort at launch on this host)",
814
+ "backend.confirm_restart": "⚠️ {0} restarts.",
815
+ "backend.confirm_fresh": "⚠️ The conversation does not carry across backends: {0} starts a fresh session.",
816
+ "backend.confirm_busy": "⚠️ {0} is working on a turn right now — that turn is interrupted.",
817
+ "backend.confirm_turn": "If it is working on a turn then, that turn is interrupted.",
818
+ "backend.confirm_not_running": "{0} is {1}, so nothing restarts now: it starts on {2}, in a fresh session, the next time it starts.",
819
+ "backend.confirm_button": "✅ Switch and restart",
820
+ "backend.confirm_button_stopped": "✅ Switch",
821
+ "backend.cancel_button": "Cancel",
822
+ "backend.cancelled": "Cancelled — nothing changed.",
823
+ "backend.chosen": "/backend {0}",
824
+ "backend.switching": "⏳ Switching {0} to {1}…",
825
+ "backend.switched": "✅ {0} now runs {1} (model: {2}, effort: {3}). It restarted in a fresh session — the conversation did not carry over.",
826
+ "backend.switched_not_running": "✅ Saved: {0} runs {1} (model: {2}, effort: {3}) from its next start, in a fresh session. It is {4}, so nothing restarted.",
827
+ "backend.refused": "⚠️ {0} was not switched — nothing changed:\n{1}",
828
+ "backend.restart_failed": "⚠️ {0} is set to {1}, but the restart failed: {2}",
829
+ "backend.failed": "❌ Switching {0} to {1} failed: {2}",
830
+ "backend.changed": "⚠️ Nothing was changed: {0} is no longer on {1}. Open /backend again.",
831
+ "backend.selection_expired": "⏰ Backend selection expired.",
832
+ "backend.classic_unsupported": "/backend switches fleet instances (fleet.yaml). {0} is a ClassicBot agent: its backend is set in classicBot.yaml or in Settings.",
833
+ "slash.backend": "Switch CLI backend, then model and effort (admin only)",
834
+ "slash.option.backend_name": "Backend (a CLI installed on this host)",
835
+ "slash.option.backend_model": "Model, or default",
836
+ "slash.option.backend_effort": "Effort, or default",
837
+ "effort.launch_skipped": "effort \"{0}\" was not passed to {1} at launch: {2}. It runs on its own effort setting.",
838
+ "effort.launch_not_a_level": "it is not one of AgEnD's levels ({0})",
839
+ "effort.launch_no_help": "its --help could not be read, so the flag is not known to be there",
840
+ "effort.launch_no_flag": "this version's --help does not list {0}",
841
+ "effort.launch_no_levels": "this version's --help lists {0} without the levels it takes",
842
+ "effort.launch_level_not_offered": "it takes {0}",
843
+ "effort.launch_codex_unknown_model": "no catalog entry lists the levels of its model ({0})",
844
+ "effort.launch_codex_model_unproven": "which model it runs could not be proven (a project .codex/config.toml can set another, and none is given on the command line)",
845
+ "effort.launch_agy_no_catalog": "AgEnD has no model list for this agy binary (not probed yet, or agy changed since the last probe a day ago or more), so the variant of {0} for this level is not known (agy would run another model on a mismatch)",
846
+ "effort.launch_agy_model_not_listed": "agy's model list has no {0} (agy would run another model with --effort)",
847
+ "effort.launch_agy_model_no_levels": "agy's model list has {0} without effort levels",
848
+ "effort.launch_agy_variant": "effort \"{0}\" launches agy's model {1} (configured: {2})",
762
849
  "status.no_config": "No fleet config loaded.",
763
850
  "status.no_instances": "No instances configured.",
764
851
  "status.title": "Fleet Status",
@@ -845,6 +932,8 @@ const enMessages = {
845
932
  "collab.off.classic": "💬 Collaboration mode OFF — use /chat to talk to the agent.",
846
933
  "delivery.fleet_uncertain": "⚠️ Delivery to {0} could not be confirmed. Do not resend until an operator checks what happened.\noperation_id={1}; target={0}; delivery_id={2}; state=uncertain",
847
934
  "delivery.fleet_failed": "❌ The message to {0} was not delivered after retries or the waiting period ended.\noperation_id={1}; target={0}; delivery_id={2}; state=failed",
935
+ "delivery.fleet_uncertain_silent_schedule": "⚠️ A silent schedule's paste into {0} could not be confirmed ({3}). It is not re-sent and not listed in Needs you; the next run goes ahead as usual.\noperation_id={1}; target={0}; delivery_id={2}; state=uncertain",
936
+ "delivery.fleet_failed_silent_schedule": "❌ A silent schedule's paste into {0} was not delivered ({3}). It is not listed in Needs you; the next run goes ahead as usual.\noperation_id={1}; target={0}; delivery_id={2}; state=failed",
848
937
  "delivery.expired": "{0} cross-instance message(s) reached the 24-hour waiting limit. Delivery is still unconfirmed for {1} of them; they may already have arrived, so do not resend those. Notices to the sending instances have been queued.",
849
938
  "delivery.lane_waiting": "⚠️ The message to {0} is still waiting after {1} minutes. We are waiting for its current process to report the result or be replaced before sending another message.\ndelivery_id={2}",
850
939
  "delivery.restart_blocked": "{0} is still stopped because we could not confirm that its previous CLI window closed. Check that window before restarting so a message is not sent twice.",
@@ -865,7 +954,9 @@ const enMessages = {
865
954
  "delivery.outcome_failed": "[system:delivery-outcome] The message to {0} was not delivered after retries or the waiting period ended. Report this to the operator.\n{1}\noperation_id={2}; delivery_id={3}; target={0}; state=failed",
866
955
  "delivery.post_restart": "[system:delivery-outcome] Your message to {0} was accepted before the restart. Do not resend this operation. Ask the operator to check delivery_status for its current status.\n{1}\noperation_id={2}; target={0}; current_state={3}",
867
956
  "delivery.reply_turn_ended": "[system:reply-pending] Your turn ended without answering {0}. Send your conclusion with report_result now; terminal text does not reach them.\ncorrelation_id={1}; asked={2}",
868
- "delivery.reply_restart": "[system:reply-pending] A restart interrupted your work for {0}. Resume it and answer with report_result; terminal text does not reach them.\ncorrelation_id={1}; asked={2}",
957
+ "delivery.reply_restart": "[system:reply-pending] A restart left these requests unanswered. Use report_result with each request's correlation_id; terminal text does not reach the requester. Check delivery_status for omitted requests or shortened IDs; do not resend the original requests.",
958
+ "delivery.reply_restart_more": "+{0} more requests (delivery_status)",
959
+ "delivery.reply_expired": "[system:reply-overdue] The reply requested from {0} has expired without an answer recorded. It will not be reminded again. Check with describe_instance or delivery_status; ask again if it is still needed.\ncorrelation_id={1}; asked={2}",
869
960
  "delivery.reply_overdue": "[system:reply-overdue] {0} has not replied and is not working on anything now. Check with describe_instance or delivery_status, or ask again.\ncorrelation_id={1}; asked={2}{3}",
870
961
  "delivery.reply_reminded": "; reminded={0}",
871
962
  "delivery.wake_auth": "⏸️ {0} is paused because its login failed. {1} message(s) are waiting. Fix the login, then use /wake.",
@@ -902,13 +993,7 @@ const enMessages = {
902
993
  "delivery.telegram_retry_failed": "Telegram could not complete the request after retrying.\nmethod={0}; details={1}",
903
994
  };
904
995
  const zhTWMessages = {
905
- "memory.pressure": "⚠️ 主機記憶體吃緊:{0},swap 剩餘 {1}。{2} 已在執行的 agent 會繼續工作;請檢查主機上其他大量使用記憶體的程式。",
906
- "memory.kernel_pressure": "⚠️ macOS 核心記憶體壓力等級:{0}。估計可用記憶體:{1};swap 剩餘:{2}(僅供診斷)。{3} 已在執行的 agent 會繼續工作。",
907
- "memory.available": "可用記憶體 {0}",
908
- "memory.free": "空閒記憶體 {0}(無法量到可用記憶體)",
909
- "memory.holding": "新的 agent 啟動會等待記憶體恢復。",
910
- "memory.slowing": "新的 agent 改為一次啟動一個,至少間隔 5 秒。",
911
- "memory.unknown": "未知",
996
+ "memory.action_held": "⏳ 已延後:主機記憶體吃緊。記憶體恢復後會繼續這次操作;目前狀態請看儀表板的 Fleet 頁面。",
912
997
  "cancel.button": "🛑 取消",
913
998
  "cancel.sent": "🛑 已送出取消給 {0}。",
914
999
  "cancel.not_running": "❌ {0} 未在執行。",
@@ -947,6 +1032,8 @@ const zhTWMessages = {
947
1032
  "classic.selection_expired": "⏰ 選擇逾時。請再次執行 /start。",
948
1033
  "classic.backend_not_installed": "⚠️ 找不到 {0} CLI(`{1}`)於 PATH。\n安裝:`{2}`\n仍會嘗試啟動…",
949
1034
  "classic.stopped": "🛑 已停止此頻道的 Agent。",
1035
+ "classic.stopped_bg_work": "⚠️ 背景工作仍在執行,已一併結束。",
1036
+ "stop.background_work_ended": "⚠️ {0} 仍有背景工作在執行,已隨停止一併結束。",
950
1037
  "classic.no_agent_here": "此頻道沒有活動中的 Agent。",
951
1038
  "admin.only": "⛔ 只有管理員能執行此操作。",
952
1039
  "admin.required": "⛔ 此指令需要管理員權限。",
@@ -967,14 +1054,14 @@ const zhTWMessages = {
967
1054
  "dashboard.public_close": "關閉公開連結",
968
1055
  "dashboard.public_close_confirm": "確定關閉(公開連結的登入都會登出)",
969
1056
  "dashboard.public_close_keep": "取消",
970
- "dashboard.public_general": "請由 fleet 管理員在這個 bot 的 General 使用 /dashboard。",
1057
+ "dashboard.public_general": "請由 fleet 管理員在這個 bot 的 General 使用 /web。",
971
1058
  "dashboard.public_risk": "公開連結:Cloudflare 終止 TLS,登入者具有完整網頁管理權限。只有選擇後才開啟,期限到會自動關閉。連結及登入碼只私送給你。",
972
1059
  "dashboard.public_status": "公開連結:{0} · 剩餘 {1} 秒",
973
1060
  "dashboard.public_until": " · 到 {0} 為止",
974
1061
  "dashboard.code_next": "📋 登入碼也單獨放在下一則訊息裡,點一下或長按就能複製。",
975
1062
  "dashboard.public_closed": "🔒 公開網頁入口已關閉。",
976
1063
  "dashboard.public_cleanup": "⚠️ 公開網頁入口已關閉,但無法確認 tunnel 行程已停止。請先處理清理問題,再開新連結。",
977
- "dashboard.private_link": "🔐 網頁登入\n{0}\n登入碼:{1}(只能用一次,{2} 分鐘內有效)\n連結期限:{3}\n不要轉傳。/dashboard revoke 會登出所有瀏覽器並關閉公開連結。",
1064
+ "dashboard.private_link": "🔐 網頁登入\n{0}\n登入碼:{1}(只能用一次,{2} 分鐘內有效)\n連結期限:{3}\n不要轉傳。/web revoke 會登出所有瀏覽器並關閉公開連結。",
978
1065
  "dashboard.private_sent": "🔐 登入資訊已私送。",
979
1066
  "dashboard.private_sent_dm": "🔐 登入資訊已私訊給你。",
980
1067
  "dashboard.progress.title": "🌐 正在開啟臨時公開連結 · {0} 秒",
@@ -998,6 +1085,10 @@ const zhTWMessages = {
998
1085
  "dashboard.progress.fail.cancelled": "已取消",
999
1086
  "dashboard.progress.fail.spawn-failed": "無法啟動 cloudflared",
1000
1087
  "dashboard.progress.fail.no-address": "Cloudflare 沒有及時給出公開網址",
1088
+ "dashboard.progress.fail.rate-limited": "Cloudflare 正在限制這台機器建立新的臨時連結 — 請過一陣子再試;區網連結仍可使用",
1089
+ "dashboard.progress.fail.provisioning-failed": "Cloudflare 目前拒絕建立臨時連結 — 請稍後再試;區網連結仍可使用",
1090
+ "dashboard.progress.fail.process-exited": "cloudflared 在給出公開網址前就停止了",
1091
+ "dashboard.progress.fail.bad-address": "Cloudflare 給出的網址 AgEnD 無法使用",
1001
1092
  "dashboard.progress.fail.unreachable": "公開網址一直連不到這個 fleet",
1002
1093
  "dashboard.progress.fail.lease-held": "還有另一個 tunnel 在執行(/login 的連結,或尚未確認清理的連結)",
1003
1094
  "dashboard.progress.fail.gateway-failed": "本機 gateway 無法啟動",
@@ -1006,18 +1097,25 @@ const zhTWMessages = {
1006
1097
  "dashboard.progress.fail.unknown": "意外中止",
1007
1098
  "dashboard.private_sent_here": "🔐 bot 無法私訊你,登入資訊改貼在這裡,只有你看得到。",
1008
1099
  "dashboard.private_sending": "⏳ 正在私送登入資訊…",
1009
- "dashboard.menu_failed": "⚠️ 無法顯示 /dashboard 選單,請再執行一次 /dashboard。",
1010
- "dashboard.private_failed": "無法確認私送或連結啟動。Telegram 請先私訊這個 bot 的 /start,再重試 /dashboard。此處不會貼出登入碼。",
1011
- "web.public_login_notice": "🔐 有新的網頁登入 · 公開入口:{0}(session {1})。如果不是你,請用 /dashboard revoke。",
1100
+ "dashboard.menu_failed": "⚠️ 無法顯示 /web 選單,請再執行一次 /web。",
1101
+ "dashboard.private_failed": "無法確認私送或連結啟動。Telegram 請先私訊這個 bot 的 /start,再重試 /web。此處不會貼出登入碼。",
1102
+ "dashboard.start_web_label": "先開私訊 →",
1103
+ "dashboard.menu_tg_hint": "還沒私訊過這個 bot?① 開啟 {0} ② 按「開始」 ③ 在那裡選擇連結,登入碼會送到那個私訊。",
1104
+ "dashboard.private_failed_tg": "無法私送登入碼:你還沒開啟和這個 bot 的私訊,它無法傳訊息給你。① 點下方「先開私訊 →」 ② 在私訊裡按「開始」 ③ 在那裡選擇連結,登入碼會送到那個私訊。此處不會貼出登入碼。",
1105
+ "dashboard.private_failed_tg_nolink": "無法私送登入碼:你還沒開啟和這個 bot 的私訊,它無法傳訊息給你。① 開啟和這個 bot 的私訊 ② 傳送 /start web ③ 在那裡選擇連結,登入碼會送到那個私訊。此處不會貼出登入碼。",
1106
+ "dashboard.private_sent_below": "🔐 登入資訊在下方。",
1107
+ "dashboard.link_failed": "⚠️ 無法啟動登入連結,所以沒有送出登入碼。請再執行一次 /web。",
1108
+ "dashboard.start_web_ack": "✅ 你現在可以在群組裡使用 /web 了。",
1109
+ "web.public_login_notice": "🔐 有新的網頁登入 · 公開入口:{0}(session {1})。如果不是你,請用 /web revoke。",
1012
1110
  "dashboard.title": "📊 AgEnD 儀表板",
1013
1111
  "dashboard.starting": "⏳ 儀表板啟動中,請稍後再試。",
1014
1112
  "dashboard.signin": "• 登入頁: {0}/signin",
1015
1113
  "dashboard.code": "• 登入碼: {0}(只能用一次,{1} 分鐘內有效)",
1016
- "dashboard.code_help": "選擇下方登入方式,bot 會私送連結與一次性登入碼。要讓所有瀏覽器登出,請傳 /dashboard revoke。",
1114
+ "dashboard.code_help": "選擇下方登入方式,bot 會私送連結與一次性登入碼。要讓所有瀏覽器登出,請傳 /web revoke。",
1017
1115
  "dashboard.revoked": "🔒 已登出 {0} 個網頁 session,並作廢尚未使用的登入碼。",
1018
- "dashboard.revoked_not_durable": "⚠️ 目前已登出 {0} 個網頁 session,但這個變更「無法保存」:~/.agend/web-sessions.json 無法更新也無法刪除,fleet 重啟後這些 session 可能會復活。請修正該檔權限後再執行一次 /dashboard revoke,或用 agend web-token rotate 換掉 token。",
1019
- "web.login_notice": "🔐 有新的網頁登入:{0}({1},session {2})。如果不是你,請傳 /dashboard revoke。",
1020
- "web.resend_code": "🔐 網頁登入碼:{0}(只能用一次,{1} 分鐘內有效;之前的登入碼已作廢)\n由登入頁面上的 {2}({3})要求。如果不是你,請忽略或傳 /dashboard revoke。",
1116
+ "dashboard.revoked_not_durable": "⚠️ 目前已登出 {0} 個網頁 session,但這個變更「無法保存」:~/.agend/web-sessions.json 無法更新也無法刪除,fleet 重啟後這些 session 可能會復活。請修正該檔權限後再執行一次 /web revoke,或用 agend web-token rotate 換掉 token。",
1117
+ "web.login_notice": "🔐 有新的網頁登入:{0}({1},session {2})。如果不是你,請傳 /web revoke。",
1118
+ "web.resend_code": "🔐 網頁登入碼:{0}(只能用一次,{1} 分鐘內有效;之前的登入碼已作廢)\n由登入頁面上的 {2}({3})要求。如果不是你,請忽略或傳 /web revoke。",
1021
1119
  "web.resend_unknown_browser": "某個瀏覽器",
1022
1120
  "web.resend_public": "公開連結",
1023
1121
  "web.resend_local": "本機網路",
@@ -1049,7 +1147,7 @@ const zhTWMessages = {
1049
1147
  "needs.reason.crashed": "已崩潰",
1050
1148
  "needs.reason.delivery_uncertain": "無法確認是否送達",
1051
1149
  "needs.reason.delivery_failed": "傳送失敗",
1052
- "upgrade.web_chat": "🆕 AgEnD 2.2:網頁聊天\n現在可以在瀏覽器裡跟 Agent 對話。每個 Agent 的網頁聊天,就是它在這裡的同一段對話:從網頁送出的訊息會出現在這裡,Agent 的回覆兩邊都看得到。\n• 可以附上檔案和圖片(按 📎,或直接貼上、拖進來)\n• 可以中止正在進行的回覆,也看得到訊息送到哪一步\n• 怎麼開:由管理員傳 /dashboard,取得登入連結和一次性登入碼\n📱 儀表板跑在 Fleet 所在的那台電腦上。要用手機開:{0}",
1150
+ "upgrade.web_chat": "🆕 AgEnD 2.2:網頁聊天\n現在可以在瀏覽器裡跟 Agent 對話。每個 Agent 的網頁聊天,就是它在這裡的同一段對話:從網頁送出的訊息會出現在這裡,Agent 的回覆兩邊都看得到。\n• 可以附上檔案和圖片(按 📎,或直接貼上、拖進來)\n• 可以中止正在進行的回覆,也看得到訊息送到哪一步\n• 怎麼開:由管理員傳 /web,取得登入連結和一次性登入碼\n📱 儀表板跑在 Fleet 所在的那台電腦上。要用手機開:{0}",
1053
1151
  "dashboard.remote_hint": "📱 這些連結只能在 Fleet 所在的那台電腦上開。要用手機或其他電腦開網頁聊天:{0}",
1054
1152
  "fleet.ready": "Fleet 就緒。{0}/{1} 個 Agent 運行中。v{2}",
1055
1153
  "fleet.ready_with_failed": "Fleet 就緒。{0}/{1} 個 Agent 運行中。v{2} | 失敗:{3}",
@@ -1100,6 +1198,9 @@ const zhTWMessages = {
1100
1198
  "kiro.untagged_steering": "kiro:這個目錄還留有舊版 AgEnD 的指示檔(.kiro/steering/agend-<instance>.md,沒有 fleet 標記)。AgEnD 無法判斷是哪個 fleet 寫的,所以保留它;等所有使用這個目錄的 fleet 都升級後,請手動刪除。",
1101
1199
  "kiro.no_instance_agent": "kiro-cli {0} 沒有 `--agent` / `--resume-id`(需要 {1} 以上),所以這個 instance 照舊執行:同一個工作目錄裡的 kiro instance 會看到彼此的工具和對話。執行 `kiro-cli update` 即可讓它們隔離。",
1102
1200
  "kiro.identity_legacy": "kiro:這次啟動照舊執行,與同目錄的其他 kiro instance「沒有」隔離({0})。下次啟動會再試。",
1201
+ "kiro.upgrade_shared_directory": "kiro:另一個已設定的 kiro instance 共用這個目錄,因此本次開新對話。升級前的對話保持原樣;AgEnD 無法安全判定它屬於哪個 instance。",
1202
+ "kiro.upgrade_claimed_conversation": "kiro:升級前最新的對話已被其他 instance 認領,或已被放棄,因此本次開新對話。AgEnD 沒有修改該對話。",
1203
+ "kiro.upgrade_unknown_peers": "kiro:AgEnD 無法確認其他已設定的 kiro instance,因此本次開新對話。升級前的對話保持原樣。",
1103
1204
  "kiro.switch_unrecorded": "kiro:instance 已經切換成自己的 agent,但 AgEnD 無法記錄這件事;下次啟動會再檢查,在記錄成功前保留共用設定。",
1104
1205
  "kiro.switch_timeout": "kiro:恢復的對話沒有在 {0} 秒內切換成這個 instance 的 agent。它會照舊繼續執行並保留共用設定;下次啟動會再試。",
1105
1206
  "kiro.version_untested": "kiro-cli {0} 比 AgEnD 實際跑過的最新版本({1})還新。啟動參數是依照 `kiro-cli chat --help` 判斷的;若有異常,請回報這個版本。",
@@ -1153,6 +1254,9 @@ const zhTWMessages = {
1153
1254
  "interaction.suspected": "終端可能在等輸入;{0} 秒前看到,尚未確認。",
1154
1255
  "inst.interaction_parked": "⚠️ {0} 正在等你輸入({1})。請打開它的終端,確認要如何繼續;排隊訊息與取消仍保留。",
1155
1256
  "fleet.interaction_parked": "⚠️ {0} 正在等輸入({1})。請查看它的終端,AgEnD 不會替你選選項。",
1257
+ "inst.unrecognised_prompt": "⚠️ {0} 停在一個 AgEnD 不認得的提示上{1}。請打開它的終端在那裡回答,AgEnD 不會替你按任何鍵。提示消失前,送給它的訊息會先保留。",
1258
+ "inst.unrecognised_prompt_question": "(「{0}」)",
1259
+ "fleet.unrecognised_prompt": "⚠️ {0} 停在一個 AgEnD 不認得的提示上{1}。請查看它的終端;期間排隊訊息會保留。",
1156
1260
  "interactive.kind.sudo_password": "sudo 密碼",
1157
1261
  "interactive.kind.password": "密碼",
1158
1262
  "interactive.kind.confirmation": "Y/N 確認",
@@ -1193,6 +1297,15 @@ const zhTWMessages = {
1193
1297
  "reply_buttons.answered": "已經有人回答了。",
1194
1298
  "reply_buttons.closed": "這個選項已關閉,請直接回覆文字。",
1195
1299
  "reply_buttons.sent": "已送出:{0}",
1300
+ "poll.status_open": "🗳 已有 {0} 人作答",
1301
+ "poll.status_closed": "🗳 已截止 · {0} 人作答",
1302
+ "poll.closes": "截止",
1303
+ "poll.closed_line": "🔒 投票已截止",
1304
+ "poll.voted": "✓ 你的選擇:{0}",
1305
+ "poll.withdrawn": "已撤回你的投票。",
1306
+ "poll.closed": "這個投票已經截止。",
1307
+ "poll.not_ready": "投票還在送出中,請稍後再試。",
1308
+ "poll.voters_title": "🗳 投票名單:",
1196
1309
  "menu.click_stale": "⚠️ 沒有變更:這個 instance 已移到另一個 bot,或你已不再是那裡的管理員。請重新開啟選單。",
1197
1310
  "buttons.wrong_place": "⚠️ 這個按鈕和它所屬的提示對不上,請重新執行指令。",
1198
1311
  "buttons.post_failed": "⚠️ 無法送出按鈕:{0}",
@@ -1249,8 +1362,8 @@ const zhTWMessages = {
1249
1362
  "slash.chat": "傳送訊息給 Agent",
1250
1363
  "slash.ctx": "顯示 Context 使用量",
1251
1364
  "slash.cancel": "中斷 Agent 目前的動作(送出 Escape)",
1252
- "slash.dashboard": "登入網頁儀表板與網頁聊天(管理員)",
1253
- "slash.web": "同 /dashboard:登入網頁儀表板與網頁聊天(管理員)",
1365
+ "slash.dashboard": "/web 的別名:登入網頁儀表板與網頁聊天(管理員)",
1366
+ "slash.web": "登入網頁儀表板與網頁聊天(管理員)",
1254
1367
  "slash.compact": "壓縮 Agent 的 Context",
1255
1368
  "slash.compact_arg": "[選填:摘要重點,僅 Claude Code]",
1256
1369
  "slash.steer": "插入指示到 Agent 當前任務",
@@ -1264,7 +1377,12 @@ const zhTWMessages = {
1264
1377
  "btw.sent": "💬 已將旁支問題送給 {0}。",
1265
1378
  "btw.not_connected": "❌ instance 未連線(IPC 不可用)",
1266
1379
  "btw.unsupported": "⚠️ {0} Backend 不支援 /btw(僅 Claude Code 支援)。訊息未送出。",
1267
- "login.usage": "用法:/login [backend] | /login cancel",
1380
+ "login.usage": "用法:/login [backend] [profile] | /login cancel",
1381
+ "login.profile_label": "{0} 的 profile `{1}`",
1382
+ "login.profile_invalid": "`{0}` 不是有效的 credential profile 名稱:只能用英數字、'.'、'_' 或 '-',以英數字開頭,最多 64 個字元。",
1383
+ "login.profile_host_only": "{0} 的 profile 目前要在主機上登入,請在主機執行:\n`{2}`\n({0} 暫時還不能從聊天室用 `/login {0} {1}` 登入。)",
1384
+ "login.profile_unsupported": "{0} 沒有 credential profile:請用 `/login {0}` 登入它的帳號。",
1385
+ "login.profile_needs_backend": "指定 profile 時也要指定 backend:`/login backend:claude-code profile:<名稱>`。",
1268
1386
  "login.install_cli_moved": "ℹ️ `/install-cli` 已併入 `/login`:`/login <backend>` 會先安裝缺少的 CLI,再接著登入。",
1269
1387
  "login.install_by_name": "尚未安裝,選單也不提供——`/login {0}` 可以安裝它。",
1270
1388
  "login.choose_backend": "要重新登入哪個 Backend?",
@@ -1401,6 +1519,7 @@ const zhTWMessages = {
1401
1519
  "slash.login": "遠端登入或安裝 CLI Backend(Beta)",
1402
1520
  "slash.option.login_backend": "要登入的 Backend",
1403
1521
  "slash.option.login_cancel": "取消進行中的登入流程",
1522
+ "slash.option.login_profile": "要登入的 credential profile(claude-code),而不是預設登入",
1404
1523
  "slash.option.restart_mode": "選填:完整重載程序",
1405
1524
  "slash.usage": "AI 訂閱用量",
1406
1525
  "slash.tips": "顯示一則 AgEnD 使用提示",
@@ -1425,7 +1544,7 @@ const zhTWMessages = {
1425
1544
  "slash.option.load_filename": "要載入的檔名",
1426
1545
  "chat.usage": "用法:`/chat <訊息>`",
1427
1546
  "filename.invalid": "⛔ 檔名無效 — 只允許字母、數字、點、連字號、底線。",
1428
- "dashboard.disabled": "⛔ /dashboard 已停用 — 未設定 allowed_users",
1547
+ "dashboard.disabled": "⛔ /web 已停用 — 未設定 allowed_users",
1429
1548
  "update.disabled": "⛔ /update 已停用 — 未設定 allowed_users",
1430
1549
  "doctor.running": "🩺 執行診斷中...",
1431
1550
  "doctor.no_output": "診斷沒有輸出。",
@@ -1578,6 +1697,8 @@ const zhTWMessages = {
1578
1697
  "usage.hint.grok_no_login": "auth.json 沒有可用的登入資料。請執行 `grok login`。",
1579
1698
  "usage.hint.login_kiro": "請使用 Kiro CLI(`kiro-cli`)登入。",
1580
1699
  "usage.hint.kiro_signed_out": "目前已登出;請執行 `kiro-cli` 登入。",
1700
+ "usage.hint.claude_profile_signed_out": "尚未登入;請用這行指令登入:{0}",
1701
+ "usage.hint.claude_profile_signed_out_chat": "尚未登入;請用 `{0}` 登入(或在主機上執行 `{1}`)。",
1581
1702
  "usage.hint.token_refreshing": "Token 更新中 — 請稍候再試。",
1582
1703
  "usage.hint.subscription_no_credit": "訂閱方案沒有可回報的額度用量。",
1583
1704
  "usage.value.unlimited": "♾️ 無限",
@@ -1631,6 +1752,11 @@ const zhTWMessages = {
1631
1752
  "model.invalid_chars": "❌ 模型名稱不得包含換行或控制字元。",
1632
1753
  "model.persist_failed": "❌ 無法設定 {0} 的模型。",
1633
1754
  "model.runtime_success": "✅ 已即時將 {0} 切換到 `{1}`。",
1755
+ "model.switch_confirmed": "✅ 已將 {0} 切換到 `{1}`。因為對話是用先前的 Model 快取的,Claude 要求確認;它的下一則回覆會重新讀取完整對話紀錄(較慢、用較多 token)。",
1756
+ "model.switch_mismatch": "⚠️ {0}:沒有切換。Claude 會切到「{1}」而不是 `{2}`,所以 AgEnD 回答了「否」。Model 維持不變。",
1757
+ "model.switch_unconfirmed": "⏳ {0}:已要求 `/model {1}`,但 {2} 秒內沒有收到結果(可能還排在其他輸入後面)。請查看它的終端;Model 切換確認畫面還在時,送給它的訊息會先保留。",
1758
+ "model.unknown_name": "⚠️ 沒有切換:不認得的 Model「{0}」。已知的有:{1}(或 claude-… 形式的 Model id)。沒有送出任何指令。",
1759
+ "model.switch_not_sent": "⚠️ {0}:`/model {1}` 沒有送出(已取消,或 instance 無法接收)。沒有任何變更。",
1634
1760
  "model.restart_success": "✅ 已將 {0} 設為 `{1}` 並重啟。",
1635
1761
  "effort.unsupported": "❌ {0} 沒有推理強度設定。",
1636
1762
  "effort.usage": "用法:/effort <{0}>",
@@ -1647,6 +1773,58 @@ const zhTWMessages = {
1647
1773
  "effort.current_default": "目前推理強度:(CLI 預設)",
1648
1774
  "effort.current_fleet": "目前推理強度:{0}(Fleet 預設)",
1649
1775
  "effort.current": "目前推理強度:{0}",
1776
+ "backend.usage": "用法:/backend [backend] [模型] [推理強度] — 例如 /backend codex gpt-5.5 high。不加參數會開啟選單。",
1777
+ "backend.menu": "目前:{0}\n請選擇 backend(這台主機已安裝的 CLI):",
1778
+ "backend.not_installed": "❌ `{0}` 不是這台主機已安裝的 backend。已安裝:{1}。",
1779
+ "backend.same": "{0} 已經在用 {1} — 沒有變更。只要換模型或推理強度,請用 /model 或 /effort。",
1780
+ "backend.default": "預設",
1781
+ "backend.default_inherited": "fleet 預設:{0}",
1782
+ "backend.default_cli": "CLI 的預設",
1783
+ "backend.model_menu": "{0} 的模型:",
1784
+ "backend.model_menu_empty": "目前還沒有 {0} 的模型清單,只能選它的預設:",
1785
+ "backend.unknown_model": "❌ `{0}` 不是 {1} 提供的模型。請從這些選:{2}。",
1786
+ "backend.effort_menu": "{0} · {1} 的推理強度:",
1787
+ "backend.no_effort": "❌ 在這台主機上,{0} 啟動時不接受推理強度:請不要指定推理強度。",
1788
+ "backend.unknown_effort": "❌ `{0}` 不是 {1} 的推理強度。請從這些選:{2}。",
1789
+ "backend.confirm_head": "要把 {0} 從 {1} 切換到 {2} 嗎?",
1790
+ "backend.confirm_model": "• 模型:{0}",
1791
+ "backend.confirm_effort": "• 推理強度:{0}",
1792
+ "backend.confirm_no_effort": "• 推理強度:無(在這台主機上,{0} 啟動時不接受推理強度)",
1793
+ "backend.confirm_restart": "⚠️ {0} 會重新啟動。",
1794
+ "backend.confirm_fresh": "⚠️ 對話不會跨 backend 延續:{0} 會開一個全新的 session。",
1795
+ "backend.confirm_busy": "⚠️ {0} 現在正在處理一輪對話 — 這一輪會被中斷。",
1796
+ "backend.confirm_turn": "如果那時它正在處理一輪對話,這一輪會被中斷。",
1797
+ "backend.confirm_not_running": "{0} 目前是 {1},所以現在不會重新啟動:下次啟動時會用 {2},並開全新的 session。",
1798
+ "backend.confirm_button": "✅ 切換並重新啟動",
1799
+ "backend.confirm_button_stopped": "✅ 切換",
1800
+ "backend.cancel_button": "取消",
1801
+ "backend.cancelled": "已取消 — 沒有變更。",
1802
+ "backend.chosen": "/backend {0}",
1803
+ "backend.switching": "⏳ 正在把 {0} 切換到 {1}…",
1804
+ "backend.switched": "✅ {0} 現在使用 {1}(模型:{2},推理強度:{3})。已用全新的 session 重新啟動 — 對話沒有延續過來。",
1805
+ "backend.switched_not_running": "✅ 已儲存:{0} 下次啟動時使用 {1}(模型:{2},推理強度:{3}),並開全新的 session。它目前是 {4},所以沒有重新啟動。",
1806
+ "backend.refused": "⚠️ {0} 沒有切換 — 沒有任何變更:\n{1}",
1807
+ "backend.restart_failed": "⚠️ {0} 已設定為 {1},但重新啟動失敗:{2}",
1808
+ "backend.failed": "❌ 把 {0} 切換到 {1} 失敗:{2}",
1809
+ "backend.changed": "⚠️ 沒有變更:{0} 已經不在 {1} 上了。請重新開啟 /backend。",
1810
+ "backend.selection_expired": "⏰ Backend 選擇已逾時。",
1811
+ "backend.classic_unsupported": "/backend 用來切換 fleet instance(fleet.yaml)。{0} 是 ClassicBot agent:它的 backend 在 classicBot.yaml 或設定頁裡設定。",
1812
+ "slash.backend": "切換 CLI backend,再選模型和推理強度(管理員)",
1813
+ "slash.option.backend_name": "Backend(這台主機已安裝的 CLI)",
1814
+ "slash.option.backend_model": "模型,或 default",
1815
+ "slash.option.backend_effort": "推理強度,或 default",
1816
+ "effort.launch_skipped": "推理強度 \"{0}\" 沒有在啟動時傳給 {1}:{2}。它會用自己的推理強度設定。",
1817
+ "effort.launch_not_a_level": "它不是 AgEnD 的推理強度等級({0})",
1818
+ "effort.launch_no_help": "讀不到它的 --help,無法確定有這個參數",
1819
+ "effort.launch_no_flag": "這個版本的 --help 沒有列出 {0}",
1820
+ "effort.launch_no_levels": "這個版本的 --help 列出了 {0},但沒有列出它接受的等級",
1821
+ "effort.launch_level_not_offered": "它接受的是 {0}",
1822
+ "effort.launch_codex_unknown_model": "模型目錄裡沒有列出它的模型({0})的等級",
1823
+ "effort.launch_codex_model_unproven": "無法確定它會用哪個模型(專案的 .codex/config.toml 可能設定了別的模型,而命令列沒有指定)",
1824
+ "effort.launch_agy_no_catalog": "AgEnD 沒有這個 agy 執行檔的模型清單(還沒探測過,或上次探測已超過一天、之後 agy 又換過),不知道 {0} 這個等級對應哪個模型(對不上時 agy 會改用別的模型)",
1825
+ "effort.launch_agy_model_not_listed": "agy 的模型清單裡沒有 {0}(加上 --effort 時 agy 會改用別的模型)",
1826
+ "effort.launch_agy_model_no_levels": "agy 的模型清單裡 {0} 沒有推理強度等級",
1827
+ "effort.launch_agy_variant": "推理強度 \"{0}\":以 agy 的模型 {1} 啟動(設定的是 {2})",
1650
1828
  "status.no_config": "尚未載入 Fleet 設定。",
1651
1829
  "status.no_instances": "尚未設定任何 instance。",
1652
1830
  "status.title": "Fleet 狀態",
@@ -1733,6 +1911,8 @@ const zhTWMessages = {
1733
1911
  "collab.off.classic": "💬 協作模式關閉 — 用 /chat 對話。",
1734
1912
  "delivery.fleet_uncertain": "⚠️ 無法確認送往 {0} 的訊息是否已送達。請先讓操作者查明結果,不要重送。\noperation_id={1}; target={0}; delivery_id={2}; state=uncertain",
1735
1913
  "delivery.fleet_failed": "❌ 送往 {0} 的訊息在重試後或等待期限結束時仍未送達。\noperation_id={1}; target={0}; delivery_id={2}; state=failed",
1914
+ "delivery.fleet_uncertain_silent_schedule": "⚠️ 無法確認靜默排程貼到 {0} 的內容是否已送達({3})。不會重送,也不會列入「需要你」;下一次排程照常執行。\noperation_id={1}; target={0}; delivery_id={2}; state=uncertain",
1915
+ "delivery.fleet_failed_silent_schedule": "❌ 靜默排程貼到 {0} 的內容未送達({3})。不會列入「需要你」;下一次排程照常執行。\noperation_id={1}; target={0}; delivery_id={2}; state=failed",
1736
1916
  "delivery.expired": "有 {0} 筆跨 instance 訊息已等滿 24 小時。其中 {1} 筆仍無法確認是否送達,可能已送達,請不要重送;通知已排入佇列,等待送給寄件的 instance。",
1737
1917
  "delivery.lane_waiting": "⚠️ 送往 {0} 的訊息已等了 {1} 分鐘。下一筆會等目前的程序回報結果或被替換後再送。\ndelivery_id={2}",
1738
1918
  "delivery.restart_blocked": "{0} 暫時保持停止,因為無法確認先前的 CLI 視窗已關閉。請先檢查該視窗再重啟,以免訊息重複送出。",
@@ -1753,7 +1933,9 @@ const zhTWMessages = {
1753
1933
  "delivery.outcome_failed": "[system:delivery-outcome] 送往 {0} 的訊息在重試後或等待期限結束時仍未送達。請向操作者回報。\n{1}\noperation_id={2}; delivery_id={3}; target={0}; state=failed",
1754
1934
  "delivery.post_restart": "[system:delivery-outcome] 重啟前已收下你送往 {0} 的訊息。請不要重送,請操作者用 delivery_status 查看目前結果。\n{1}\noperation_id={2}; target={0}; current_state={3}",
1755
1935
  "delivery.reply_turn_ended": "[system:reply-pending] 這一輪已結束,但你還沒回覆 {0}。請現在用 report_result 回報結論;終端裡的文字不會送到對方。\ncorrelation_id={1}; asked={2}",
1756
- "delivery.reply_restart": "[system:reply-pending] 重啟打斷了你為 {0} 進行的工作。請接著完成並用 report_result 回報;終端裡的文字不會送到對方。\ncorrelation_id={1}; asked={2}",
1936
+ "delivery.reply_restart": "[system:reply-pending] 重啟時,以下請求尚未收到回覆。請用 report_result 搭配各請求的 correlation_id 回報;終端裡的文字不會送到寄件者。省略的請求或縮短的識別碼請查 delivery_status;不要重送原始請求。",
1937
+ "delivery.reply_restart_more": "+{0} 個其他請求(delivery_status)",
1938
+ "delivery.reply_expired": "[system:reply-overdue] 向 {0} 要求的回覆已逾期,仍未記錄到回答,之後不再提醒。請用 describe_instance 或 delivery_status 查看;如仍需要,請重新詢問。\ncorrelation_id={1}; asked={2}",
1757
1939
  "delivery.reply_overdue": "[system:reply-overdue] {0} 還沒回覆,目前也沒有在進行工作。請用 describe_instance 或 delivery_status 查看,或再詢問一次。\ncorrelation_id={1}; asked={2}{3}",
1758
1940
  "delivery.reply_reminded": ";上次提醒={0}",
1759
1941
  "delivery.wake_auth": "⏸️ {0} 因登入失敗而暫停,有 {1} 筆訊息在等待。請先修好登入,再用 /wake 喚醒。",