kiki-agent-lite 0.3.1 → 0.3.2

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 (228) hide show
  1. package/README.md +13 -10
  2. package/dist/docs/en/configuration/config-files.md +63 -20
  3. package/dist/docs/en/configuration/data-locations.md +12 -4
  4. package/dist/docs/en/configuration/env-vars.md +4 -6
  5. package/dist/docs/en/configuration/overrides.md +13 -14
  6. package/dist/docs/en/configuration/providers.md +8 -6
  7. package/dist/docs/en/customization/agent-profiles.md +33 -38
  8. package/dist/docs/en/customization/agents.md +129 -107
  9. package/dist/docs/en/customization/hooks.md +41 -48
  10. package/dist/docs/en/customization/personas.md +19 -21
  11. package/dist/docs/en/customization/plugins.md +180 -156
  12. package/dist/docs/en/customization/prompt-fields.md +10 -6
  13. package/dist/docs/en/customization/skills.md +11 -13
  14. package/dist/docs/en/customization/skins.md +23 -27
  15. package/dist/docs/en/customization/themes.md +15 -15
  16. package/dist/docs/en/features/agents.md +85 -0
  17. package/dist/docs/en/features/daily.md +37 -7
  18. package/dist/docs/en/features/ecosystem.md +3 -1
  19. package/dist/docs/en/features/extend.md +7 -1
  20. package/dist/docs/en/features/freedom.md +4 -0
  21. package/dist/docs/en/features/index.md +6 -5
  22. package/dist/docs/en/features/long-work.md +23 -5
  23. package/dist/docs/en/features/look.md +1 -1
  24. package/dist/docs/en/features/people.md +10 -2
  25. package/dist/docs/en/features/spaces.md +16 -4
  26. package/dist/docs/en/features/workbench.md +11 -3
  27. package/dist/docs/en/getting-started/desktop-app.md +44 -29
  28. package/dist/docs/en/getting-started/first-launch.md +32 -21
  29. package/dist/docs/en/getting-started/installation.md +27 -12
  30. package/dist/docs/en/getting-started/use-cases.md +35 -35
  31. package/dist/docs/en/guides/goals.md +9 -7
  32. package/dist/docs/en/guides/interaction.md +26 -26
  33. package/dist/docs/en/guides/interface.md +18 -14
  34. package/dist/docs/en/guides/memory.md +43 -14
  35. package/dist/docs/en/guides/sessions.md +32 -26
  36. package/dist/docs/en/guides/settings.md +60 -29
  37. package/dist/docs/en/index.md +8 -2
  38. package/dist/docs/en/reference/command.md +8 -4
  39. package/dist/docs/en/reference/keyboard.md +18 -4
  40. package/dist/docs/en/reference/model-vocabulary.md +6 -8
  41. package/dist/docs/en/reference/slash-commands.md +4 -4
  42. package/dist/docs/en/reference/tools.md +92 -15
  43. package/dist/docs/en/release-notes/changelog.md +1 -9
  44. package/dist/docs/en/server/acp.md +1 -1
  45. package/dist/docs/en/server/ide.md +1 -1
  46. package/dist/docs/en/server/local-server.md +5 -5
  47. package/dist/docs/en/server/mcp.md +2 -2
  48. package/dist/docs/en/server/rest-api.md +79 -5
  49. package/dist/docs/en/server/sdk.md +2 -2
  50. package/dist/docs/zh/configuration/config-files.md +56 -15
  51. package/dist/docs/zh/configuration/data-locations.md +12 -4
  52. package/dist/docs/zh/configuration/env-vars.md +4 -6
  53. package/dist/docs/zh/configuration/overrides.md +13 -14
  54. package/dist/docs/zh/configuration/providers.md +7 -5
  55. package/dist/docs/zh/customization/agent-profiles.md +31 -36
  56. package/dist/docs/zh/customization/agents.md +120 -98
  57. package/dist/docs/zh/customization/hooks.md +35 -42
  58. package/dist/docs/zh/customization/personas.md +16 -18
  59. package/dist/docs/zh/customization/plugins.md +167 -142
  60. package/dist/docs/zh/customization/prompt-fields.md +9 -5
  61. package/dist/docs/zh/customization/skills.md +10 -12
  62. package/dist/docs/zh/customization/skins.md +19 -23
  63. package/dist/docs/zh/customization/themes.md +12 -12
  64. package/dist/docs/zh/features/agents.md +85 -0
  65. package/dist/docs/zh/features/daily.md +37 -7
  66. package/dist/docs/zh/features/ecosystem.md +3 -1
  67. package/dist/docs/zh/features/extend.md +7 -1
  68. package/dist/docs/zh/features/freedom.md +4 -0
  69. package/dist/docs/zh/features/index.md +6 -5
  70. package/dist/docs/zh/features/long-work.md +22 -4
  71. package/dist/docs/zh/features/look.md +1 -1
  72. package/dist/docs/zh/features/people.md +10 -2
  73. package/dist/docs/zh/features/spaces.md +15 -3
  74. package/dist/docs/zh/features/workbench.md +11 -3
  75. package/dist/docs/zh/getting-started/desktop-app.md +43 -28
  76. package/dist/docs/zh/getting-started/first-launch.md +32 -21
  77. package/dist/docs/zh/getting-started/installation.md +26 -11
  78. package/dist/docs/zh/getting-started/use-cases.md +35 -37
  79. package/dist/docs/zh/guides/goals.md +8 -8
  80. package/dist/docs/zh/guides/interaction.md +25 -25
  81. package/dist/docs/zh/guides/interface.md +18 -14
  82. package/dist/docs/zh/guides/memory.md +43 -14
  83. package/dist/docs/zh/guides/sessions.md +30 -24
  84. package/dist/docs/zh/guides/settings.md +54 -23
  85. package/dist/docs/zh/index.md +7 -1
  86. package/dist/docs/zh/reference/command.md +7 -3
  87. package/dist/docs/zh/reference/keyboard.md +18 -4
  88. package/dist/docs/zh/reference/model-vocabulary.md +6 -8
  89. package/dist/docs/zh/reference/slash-commands.md +3 -3
  90. package/dist/docs/zh/reference/tools.md +74 -9
  91. package/dist/docs/zh/release-notes/changelog.md +1 -9
  92. package/dist/docs/zh/server/acp.md +1 -1
  93. package/dist/docs/zh/server/ide.md +1 -1
  94. package/dist/docs/zh/server/local-server.md +5 -5
  95. package/dist/docs/zh/server/mcp.md +2 -2
  96. package/dist/docs/zh/server/rest-api.md +69 -1
  97. package/dist/docs/zh/server/sdk.md +2 -2
  98. package/dist/main.mjs +12545 -3456
  99. package/dist/web/assets/AppErrorBoundary-RFIAb-Uf.js +1 -0
  100. package/dist/web/assets/NavScopeBoundary-DY_ET7A-.js +1 -0
  101. package/dist/web/assets/{arc-y2SkSoyr.js → arc-CMgTB1m7.js} +1 -1
  102. package/dist/web/assets/{architectureDiagram-3BPJPVTR-uCwLz53m.js → architectureDiagram-3BPJPVTR-BU79ou2C.js} +1 -1
  103. package/dist/web/assets/{blockDiagram-GPEHLZMM-BZyWv36G.js → blockDiagram-GPEHLZMM-Bkuldod2.js} +1 -1
  104. package/dist/web/assets/{c4Diagram-AAUBKEIU-DKGx9i50.js → c4Diagram-AAUBKEIU-C3WMeqyu.js} +1 -1
  105. package/dist/web/assets/channel-DpDZUJRn.js +1 -0
  106. package/dist/web/assets/{chunk-2J33WTMH-CSkrhrsp.js → chunk-2J33WTMH-CesyWmwo.js} +1 -1
  107. package/dist/web/assets/{chunk-4BX2VUAB-CtxMoJ68.js → chunk-4BX2VUAB-C7rghYTf.js} +1 -1
  108. package/dist/web/assets/{chunk-55IACEB6-Dos3ftEy.js → chunk-55IACEB6-BqRHhwtz.js} +1 -1
  109. package/dist/web/assets/{chunk-727SXJPM-wbzEYK9z.js → chunk-727SXJPM-BhSqCRBc.js} +1 -1
  110. package/dist/web/assets/{chunk-AQP2D5EJ-B9GKvCD6.js → chunk-AQP2D5EJ-DdYE2ZVZ.js} +1 -1
  111. package/dist/web/assets/{chunk-FMBD7UC4-u5Y2P6IX.js → chunk-FMBD7UC4-BCRPUxDF.js} +1 -1
  112. package/dist/web/assets/{chunk-ND2GUHAM-B8rFKkTV.js → chunk-ND2GUHAM-CuvyDjTR.js} +1 -1
  113. package/dist/web/assets/{chunk-QZHKN3VN-EQsKtuD-.js → chunk-QZHKN3VN-BU5vAS78.js} +1 -1
  114. package/dist/web/assets/classDiagram-4FO5ZUOK-Bju1GfNu.js +1 -0
  115. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-Bju1GfNu.js +1 -0
  116. package/dist/web/assets/client-C0oH7-8r.js +2 -0
  117. package/dist/web/assets/connection-BhO2nh7P.js +1 -0
  118. package/dist/web/assets/{cose-bilkent-S5V4N54A-D6dr5mIW.js → cose-bilkent-S5V4N54A-CXrvsA1a.js} +1 -1
  119. package/dist/web/assets/{dagre-BM42HDAG-Dnyhc4Hn.js → dagre-BM42HDAG-TaAea3Rt.js} +1 -1
  120. package/dist/web/assets/{diagram-2AECGRRQ-CYXkWdne.js → diagram-2AECGRRQ-CdEH4jGt.js} +1 -1
  121. package/dist/web/assets/{diagram-5GNKFQAL-DPwBf5Ag.js → diagram-5GNKFQAL-A0jZ_p-T.js} +1 -1
  122. package/dist/web/assets/{diagram-KO2AKTUF-DNeLYZ8X.js → diagram-KO2AKTUF-miHWORz3.js} +1 -1
  123. package/dist/web/assets/{diagram-LMA3HP47-zU8RsQTX.js → diagram-LMA3HP47-BlUIwEIg.js} +1 -1
  124. package/dist/web/assets/{diagram-OG6HWLK6-Cf9Mm94H.js → diagram-OG6HWLK6-DwDzMhEg.js} +1 -1
  125. package/dist/web/assets/{erDiagram-TEJ5UH35-Ch4CeiUI.js → erDiagram-TEJ5UH35-BJr5w62i.js} +1 -1
  126. package/dist/web/assets/export-BlxaZKEe.js +2 -0
  127. package/dist/web/assets/{flowDiagram-I6XJVG4X-Csn6WqEH.js → flowDiagram-I6XJVG4X-BP7KSFjx.js} +1 -1
  128. package/dist/web/assets/{ganttDiagram-6RSMTGT7-DsuBgEyu.js → ganttDiagram-6RSMTGT7-BstLBBof.js} +1 -1
  129. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-CPA7jCxU.js → gitGraphDiagram-PVQCEYII-C57s7nZ-.js} +1 -1
  130. package/dist/web/assets/highlighted-body-OFNGDK62-BVb-7KsA.js +1 -0
  131. package/dist/web/assets/index-69qhvTvD.js +1 -0
  132. package/dist/web/assets/{index-BYUHmd8w.js → index-BDNM6yJI.js} +2 -2
  133. package/dist/web/assets/{index-BGgZxlEQ.js → index-BJF_gEDs.js} +2 -2
  134. package/dist/web/assets/index-BOwMP6BP.js +1 -0
  135. package/dist/web/assets/{index-C69a5Mcz.js → index-BZsyXCqm.js} +1 -1
  136. package/dist/web/assets/{index-C7EA7a_g.js → index-Bfl4JiNq.js} +2 -2
  137. package/dist/web/assets/index-BlD3AKX-.js +1 -0
  138. package/dist/web/assets/{index-CIymCfcP.js → index-BnvW0EvQ.js} +1 -1
  139. package/dist/web/assets/index-C4rmWyOm.js +1 -0
  140. package/dist/web/assets/index-CGLcb3HY.js +1 -0
  141. package/dist/web/assets/{index-kWBxPqIX.js → index-CPvOeQPX.js} +1 -1
  142. package/dist/web/assets/index-Cjbe0JKM.js +1 -0
  143. package/dist/web/assets/index-CmYoJWUm.js +1 -0
  144. package/dist/web/assets/index-CtUFrjKe.js +1 -0
  145. package/dist/web/assets/index-DDvDRMTK.js +1 -0
  146. package/dist/web/assets/index-DSpndwAR.css +1 -0
  147. package/dist/web/assets/index-D_JjTHxi.js +1 -0
  148. package/dist/web/assets/index-DbuwcnbT.js +1 -0
  149. package/dist/web/assets/index-DcXyS0nN.js +1 -0
  150. package/dist/web/assets/index-Dcl9ruKA.js +1 -0
  151. package/dist/web/assets/index-DgwALPNA.js +121 -0
  152. package/dist/web/assets/{index-DoN1FTEe.js → index-DkE8hRT1.js} +2 -2
  153. package/dist/web/assets/index-DsyRBZ4h.js +1 -0
  154. package/dist/web/assets/{index-29zav3JI.js → index-DuudNhLL.js} +4 -4
  155. package/dist/web/assets/index-Gc4F0b2f.js +1 -0
  156. package/dist/web/assets/index-HGqqwKoV.js +13 -0
  157. package/dist/web/assets/index-KchrJnno.js +3 -0
  158. package/dist/web/assets/{index-B0KNSyji.js → index-Tmi2BPYU.js} +1 -1
  159. package/dist/web/assets/index-Ya4GuDs0.js +1 -0
  160. package/dist/web/assets/index-_aDaKqLB.js +1 -0
  161. package/dist/web/assets/index-_qwOAotB.js +1 -0
  162. package/dist/web/assets/index-hnIkczza.js +7 -0
  163. package/dist/web/assets/{infoDiagram-5YYISTIA-D3Q__m62.js → infoDiagram-5YYISTIA-CifuVY6C.js} +1 -1
  164. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-CcvCBuZ5.js → ishikawaDiagram-YF4QCWOH-Cd60vQUi.js} +1 -1
  165. package/dist/web/assets/{journeyDiagram-JHISSGLW-COZU4LNt.js → journeyDiagram-JHISSGLW-Cb3Xl_wl.js} +1 -1
  166. package/dist/web/assets/{kanban-definition-UN3LZRKU-BrXjBoAU.js → kanban-definition-UN3LZRKU-Ei6ThuZt.js} +1 -1
  167. package/dist/web/assets/{linear-BgP1STFi.js → linear-CDZJx-o2.js} +1 -1
  168. package/dist/web/assets/mermaid-GHXKKRXX-DFxyxD7G.js +331 -0
  169. package/dist/web/assets/{mindmap-definition-RKZ34NQL-CgjSrE5r.js → mindmap-definition-RKZ34NQL-B0ygxzkx.js} +1 -1
  170. package/dist/web/assets/navViewState-Ck_HK-TK.js +1 -0
  171. package/dist/web/assets/{pieDiagram-4H26LBE5-DTfe1sKA.js → pieDiagram-4H26LBE5-B2FdrvDv.js} +1 -1
  172. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-D95hfh0q.js → quadrantDiagram-W4KKPZXB-CwpOTy3d.js} +1 -1
  173. package/dist/web/assets/{requirementDiagram-4Y6WPE33-DtSLi7Mh.js → requirementDiagram-4Y6WPE33-ExdZNzLQ.js} +1 -1
  174. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-gi_dJpcU.js → sankeyDiagram-5OEKKPKP-u0EZKD7D.js} +1 -1
  175. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DKQ9a72t.js → sequenceDiagram-3UESZ5HK-BXHMy5DY.js} +1 -1
  176. package/dist/web/assets/{spaces-B2Ccyh_T.js → spaces-C8n7xQPx.js} +1 -1
  177. package/dist/web/assets/{stateDiagram-AJRCARHV-Bz7tmSqa.js → stateDiagram-AJRCARHV-DMXx7ell.js} +1 -1
  178. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Bydq1_By.js +1 -0
  179. package/dist/web/assets/theme-BBnHttAf.js +1 -0
  180. package/dist/web/assets/{timeline-definition-PNZ67QCA-BfMXPwhV.js → timeline-definition-PNZ67QCA-DtqVG_4u.js} +1 -1
  181. package/dist/web/assets/{vennDiagram-CIIHVFJN-WLxW2KT5.js → vennDiagram-CIIHVFJN-Dom0ex8r.js} +1 -1
  182. package/dist/web/assets/{wardley-L42UT6IY-DiiqwIdq.js → wardley-L42UT6IY-C-RstmuQ.js} +1 -1
  183. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DmCukWuw.js → wardleyDiagram-YWT4CUSO-C8CzNfdf.js} +1 -1
  184. package/dist/web/assets/{xychartDiagram-2RQKCTM6-Cfq1W2tT.js → xychartDiagram-2RQKCTM6-1AxVTyB6.js} +1 -1
  185. package/dist/web/index.html +2 -2
  186. package/native/auth-native/prebuilds/linux-arm64/auth-native.node +0 -0
  187. package/native/auth-native/prebuilds/linux-x64/auth-native.node +0 -0
  188. package/native/auth-native/prebuilds/win32-arm64/auth-native.node +0 -0
  189. package/native/auth-native/prebuilds/win32-x64/auth-native.node +0 -0
  190. package/package.json +1 -1
  191. package/dist/web/assets/AppErrorBoundary-DWpgwxFV.js +0 -1
  192. package/dist/web/assets/NavScopeBoundary-D8Lf1G0U.js +0 -1
  193. package/dist/web/assets/channel-BGdXootG.js +0 -1
  194. package/dist/web/assets/classDiagram-4FO5ZUOK-CPcnLy_H.js +0 -1
  195. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CPcnLy_H.js +0 -1
  196. package/dist/web/assets/client-DSIbyfoz.js +0 -2
  197. package/dist/web/assets/connection-DYZn9oPZ.js +0 -1
  198. package/dist/web/assets/export-Bq8ZECqX.js +0 -2
  199. package/dist/web/assets/highlighted-body-OFNGDK62-CDPBxM_E.js +0 -1
  200. package/dist/web/assets/index-AksnytJj.js +0 -1
  201. package/dist/web/assets/index-B8xhhYDh.css +0 -1
  202. package/dist/web/assets/index-BUrlrKap.js +0 -1
  203. package/dist/web/assets/index-B_5-HLed.js +0 -62
  204. package/dist/web/assets/index-BfmoxdpP.js +0 -1
  205. package/dist/web/assets/index-Bo3e-ohM.js +0 -3
  206. package/dist/web/assets/index-BrYV9gV_.js +0 -1
  207. package/dist/web/assets/index-C8XUtAvK.js +0 -1
  208. package/dist/web/assets/index-C9uil5my.js +0 -13
  209. package/dist/web/assets/index-CKpWHSp9.js +0 -1
  210. package/dist/web/assets/index-CLKBgQxV.js +0 -1
  211. package/dist/web/assets/index-CTyyUNWj.js +0 -7
  212. package/dist/web/assets/index-D7cg9qYZ.js +0 -1
  213. package/dist/web/assets/index-D7dg8R_q.js +0 -1
  214. package/dist/web/assets/index-DCSpedV_.js +0 -1
  215. package/dist/web/assets/index-DLbD0Nx5.js +0 -1
  216. package/dist/web/assets/index-DaEzbvvu.js +0 -1
  217. package/dist/web/assets/index-DhbcjMZF.js +0 -1
  218. package/dist/web/assets/index-Dw2h88mF.js +0 -1
  219. package/dist/web/assets/index-FcMtfmKv.js +0 -1
  220. package/dist/web/assets/index-XFq9Kgg0.js +0 -1
  221. package/dist/web/assets/index-iI2mM43w.js +0 -1
  222. package/dist/web/assets/index-oXOF7lko.js +0 -1
  223. package/dist/web/assets/locale-CANfezJ4.js +0 -17
  224. package/dist/web/assets/mermaid-GHXKKRXX-_JLagMll.js +0 -321
  225. package/dist/web/assets/navViewState-DS5LnMYc.js +0 -1
  226. package/dist/web/assets/settings-CcwMWXbp.js +0 -42
  227. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-D6-wdUbw.js +0 -1
  228. package/dist/web/assets/theme-DlDhDxeD.js +0 -1
@@ -1,17 +0,0 @@
1
- const h={"st.boardStorage.title":"Task card storage location","st.boardStorage.policy":"Choose where new task cards are stored, then preview the resolved location for a workspace.","st.boardStorage.modeAutoHint":"Reuse compatible workspace storage when available; otherwise use the Kiki session data area.","st.boardStorage.modeGlobalHint":"Use the Kiki Home boards directory for new cards.","st.boardStorage.modeFixedHint":"Use the path below; a relative path resolves from the selected workspace.","st.boardStorage.pathHint":"Example: cards or C:/shared/boards. The location resolves once you leave the field.","st.boardStorage.details":"Storage resolution details","st.boardStorage.policyDetails":"Auto first reuses compatible OwnWork/Assay data in the workspace. Global uses the Kiki Home boards directory. Fixed uses the path you provide.","st.boardStorage.mode":"Default storage mode","st.boardStorage.auto":"Auto (default)","st.boardStorage.global":"Global · Kiki Home","st.boardStorage.fixed":"Fixed path","st.boardStorage.path":"Storage path","st.boardStorage.workspace":"Workspace for path preview","st.boardStorage.selectWorkspace":"Select a workspace","st.boardStorage.awaitWorkspace":"Select a workspace to resolve the location; it is computed as soon as you pick one, and relative paths remain unresolved until then.","st.boardStorage.noMove":"Saving changes only the default location for subsequent card creation. Existing cards are not moved or deleted.","st.boardStorage.refresh":"Refresh location","st.boardStorage.retry":"Retry","st.boardStorage.previewing":"Resolving the location…","st.boardStorage.save":"Save defaults","st.boardStorage.source":"Resolved source","st.boardStorage.existing":"Existing compatible storage","st.boardStorage.newStore":"New storage on first creation","st.boardStorage.resolved":"Resolved task directory","st.boardStorage.kind.workspace":"Workspace storage","st.boardStorage.kind.embedded":"Kiki data area","st.spaces.applied":"{count} applied","st.spaces.blocked.accountData":"This connection holds account data; change it in the account flow.","st.spaces.blocked.editResource":"Change this on its own page.","st.spaces.blocked.mainNoParent":"The main space has nothing above it.","st.spaces.blocked.notShareable":"This one cannot be shared with the main space.","st.spaces.blocked.onlyResources":"Only resources can be left out this way.","st.spaces.blocked.resourceUnavailable":"This item’s files are not available here yet.","st.spaces.change":"Change","st.spaces.change.apply":"Apply {count}","st.spaces.change.back":"Back","st.spaces.change.becomes":"Becomes","st.spaces.change.conflict":"These settings changed elsewhere. Close this and try again.","st.spaces.change.editBody":"The values below are written to this space and stop following the main space for these items.","st.spaces.change.editTitle":"Change these settings here","st.spaces.change.failed":"Nothing was written. {reason}","st.spaces.change.fixedBody":"Keep the selected settings here and stop following the main space for them.","st.spaces.change.fixedTitle":"Fix in this space","st.spaces.change.followBody":"The selected items use the main space’s settings, and keep following them.","st.spaces.change.followTitle":"Follow the main space","st.spaces.change.futureItems":"Items the main space adds later are used here too","st.spaces.change.kept":"Kept as it is","st.spaces.change.loading":"Preparing the list…","st.spaces.change.mainChanged":"The main space changed too","st.spaces.change.mainNow":"Main space now","st.spaces.change.none":"Select at least one item.","st.spaces.change.nothingToChange":"Nothing here can be changed this way.","st.spaces.change.now":"Now","st.spaces.change.pushAction":"Use this space’s changes for the main space…","st.spaces.change.pushBody":"The selected changes update the main space and affect every space that follows it. After that, these items follow it here too.","st.spaces.change.pushConfirm":"Update the main space and follow","st.spaces.change.pushTarget":"Main space","st.spaces.change.pushTitle":"Use these changes for the main space","st.spaces.change.reload":"Read the list again","st.spaces.change.restart":"Takes effect after this space restarts.","st.spaces.change.same":"{count} already match","st.spaces.change.saveChoice":"Save choice","st.spaces.device.body":"The space’s appearance is the shared one now. Keep it, or use the appearance saved on this device for this space.","st.spaces.device.failed":"This device’s appearance was not used here. Nothing changed.","st.spaces.device.keep":"Use the space’s appearance","st.spaces.device.title":"This device still has another appearance","st.spaces.device.use":"Use this device’s appearance here","st.spaces.device.used":"This device’s appearance is now the space’s.","st.spaces.group.agents":"Agents","st.spaces.group.appearance":"Appearance","st.spaces.group.available":"Available","st.spaces.group.config":"Models and behavior","st.spaces.group.credentials":"Accounts and keys","st.spaces.group.fixed":"Set in this space","st.spaces.group.fixedFollow":"Set in this space · {count} still follow the main space","st.spaces.group.follow":"Follows the main space","st.spaces.group.followFixed":"Follows the main space · {count} set here","st.spaces.group.generic_roots":"Shared skills and agents","st.spaces.group.instructions":"Instructions","st.spaces.group.isolated":"This space only","st.spaces.group.items":"{count} items","st.spaces.group.mcp":"MCP connections","st.spaces.group.plugins":"Plugins","st.spaces.group.shared":"Shared with the main space","st.spaces.group.skills":"Skills and commands","st.spaces.group.stacked":"Follows the main space, plus this space’s own additions","st.spaces.group.unavailable":"Not used","st.spaces.mainNote":"The main space’s own settings are edited on their own pages. Every other space starts from them.","st.spaces.origin.backgroundPacks":"Open appearance packs","st.spaces.origin.deviceOnlyBackground":"This picture is saved on this device, and the space keeps using its own background.","st.spaces.origin.edited":"Changed here","st.spaces.origin.fixHere":"Fix it in this space","st.spaces.origin.fixed":"Fixed in this space","st.spaces.origin.follow":"Follows the main space","st.spaces.origin.menuAria":"Where {name} comes from","st.spaces.origin.notListed":"Not in this space’s settings list.","st.spaces.origin.push":"Use this for the main space…","st.spaces.origin.reading":"Reading…","st.spaces.origin.refollow":"Follow the main space…","st.spaces.origin.restart":"Takes effect after this space restarts.","st.spaces.origin.retry":"Retry","st.spaces.origin.saved":"Saved","st.spaces.origin.saving":"Saving…","st.spaces.origin.unknown":"Source not readable yet","st.spaces.origin.unsaved":"Not saved.","st.spaces.ownChoice.edited":"Edited here","st.spaces.ownChoice.fixed":"Fixed here","st.spaces.ownChoicesEmpty":"Nothing is set only in this space yet.","st.spaces.ownOpen":"Open","st.spaces.pendingNote":"Takes effect after this space restarts.","st.spaces.resourceSources":"Resource sources","st.spaces.resourceSourcesHint":"These come from the machine running this space, not from the main space.","st.spaces.settings":"Space settings","st.spaces.settingsFailed":"Couldn’t read this space’s settings.","st.spaces.settingsLoading":"Reading this space’s settings…","st.spaces.settingsMenu":"Space settings…","st.spaces.settingsRetry":"Try again","st.spaces.settingsTitle":"Space settings · {name}","st.spaces.undoLast":"Undo the last change","st.spaces.undone":"The last change was undone.","st.spaces.value.appendTiming.agent_idle":"When the agent is idle","st.spaces.value.appendTiming.subagents_done":"When subagents finish","st.spaces.value.appendTiming.tasks_done":"When tasks finish","st.spaces.value.backgroundCount":"{count} pictures","st.spaces.value.backgroundNone":"No background","st.spaces.value.none":"None","st.spaces.value.off":"Off","st.spaces.value.on":"On","st.spaces.value.skinBuiltin":"{id} (built-in)","st.spaces.value.skinPack":"{id} (appearance pack)","st.spaces.value.skinUser":"{id} (theme file)","st.spaces.value.tweaksCount":"{count} tweaks","st.spaces.value.tweaksNone":"No tweaks","taskBoard.empty.description":"Add a workspace to view and organize its requirements here.","taskBoard.title":"Task Board","taskBoard.syncing":"Syncing...","taskBoard.summary":"{shown} / {total} requirements","taskBoard.search.placeholder":"Search tasks or prompts...","taskBoard.sessionFilter.all":"All associated sessions","taskBoard.newTask":"New Requirement","taskBoard.column.backlog":"Backlog","taskBoard.column.todo":"Todo","taskBoard.column.running":"Running","taskBoard.column.failed":"Failed","taskBoard.column.active":"To do","taskBoard.column.in_progress":"In progress","taskBoard.column.paused":"Paused","taskBoard.column.done":"Done","taskBoard.column.cancelled":"Cancelled","taskBoard.column.superseded":"Superseded","taskBoard.column.empty":"No task cards yet","taskBoard.priority.urgent":"P0 Urgent","taskBoard.priority.high":"P1 High","taskBoard.priority.medium":"P2 Medium","taskBoard.priority.low":"P3 Low","taskBoard.result.succeeded":"Succeeded","taskBoard.result.failed":"Failed","taskBoard.result.cancelled":"Cancelled","taskBoard.result.running":"Running","taskBoard.card.executionTitle":"Latest run: {result}","taskBoard.card.executionRefsHint":"Execution references do not indicate run status","taskBoard.card.executionRefs.one":"{count} execution reference","taskBoard.card.executionRefs.other":"{count} execution references","taskBoard.card.linkedSessions.one":"{count} linked session","taskBoard.card.linkedSessions.other":"{count} linked sessions","taskBoard.prototype.banner":"PROTOTYPE DISPLAY SLICE · Workboard","taskBoard.prototype.runtime":"Runtime: Decoupled Mock Layer","taskBoard.backToSession":"Back to Session","taskBoard.refresh":"Refresh","taskBoard.scope.label":"Board data scope","taskBoard.scope.all":"All workspaces","taskBoard.issues.partial.one":"{count} workspace could not load its board data","taskBoard.issues.partial.other":"{count} workspaces could not load their board data","taskBoard.issues.cards.one":"{count} card could not load its board data","taskBoard.issues.cards.other":"{count} cards could not load their board data","taskBoard.listSeparator":", ","taskBoard.unavailable.title":"Task board is unavailable right now","taskBoard.unavailable.description":"The connected backend could not serve board data for any authorized workspace: the desktop backend may be older than this UI, or those workspaces need a board-storage migration. Check board storage in the workspace settings.","taskBoard.issueReason.BOARD_UNAVAILABLE":"Board storage is incompatible or needs migration","taskBoard.issueReason.BOARD_ACCESS_DENIED":"Board storage is not authorized for this workspace","taskBoard.issueReason.WORKSPACE_NOT_FOUND":"Workspace is not registered on the backend","taskBoard.issueReason.WORKSPACE_CUTOVER_REQUIRED":"Board storage uses an older layout and needs a one-time migration; update Kiki or run the workspace migration","taskBoard.issueReason.BOARD_REQUEST_FAILED":"Board request failed (outdated backend or connection problem)","taskBoard.issueReason.unknown":"Unknown reason","taskBoard.detail.title":"Task Details","taskBoard.detail.close":"Close detail modal","taskBoard.detail.loading":"Loading task details…","taskBoard.detail.field.title":"Title","taskBoard.detail.field.status":"Status","taskBoard.detail.field.priority":"Priority","taskBoard.detail.field.descriptionContext":"Description / Context","taskBoard.detail.field.executionPrompt":"Execution Prompt","taskBoard.detail.field.category":"Category","taskBoard.detail.field.workspace":"Workspace","taskBoard.detail.field.associateSession":"Associate Existing Session","taskBoard.detail.noSession":"-- No session linked --","taskBoard.detail.description":"Description","taskBoard.detail.assignedPrompt":"Assigned Execution Prompt","taskBoard.detail.linkedSessions":"Linked sessions","taskBoard.detail.linkedCount":"{count} linked","taskBoard.detail.decoupled":"No sessions linked yet. Link one from Edit Task.","taskBoard.detail.attemptsHistory":"Runs","taskBoard.detail.attemptCount":"{count} attempts","taskBoard.detail.viewSession":"View session","taskBoard.detail.linkedExecutionRefs":"Linked execution references (status not loaded): {ids}","taskBoard.detail.noExecutionRefs":"No execution references recorded.","taskBoard.detail.delete":"Delete Card","taskBoard.detail.deleteTitle":"Delete this task card?","taskBoard.detail.deleteBody":"This action cannot be undone.","taskBoard.detail.deleteConfirm":"Delete Card","taskBoard.detail.cancel":"Cancel","taskBoard.detail.save":"Save Changes","taskBoard.detail.edit":"Edit Task","taskBoard.detail.execute":"Execute in session","taskBoard.detail.validation.titleRequired":"Task title is required.","taskBoard.detail.error.updateFailed":"The update failed. Your draft is retained.","taskBoard.detail.action.start":"Start","taskBoard.detail.action.done":"Mark done","taskBoard.detail.action.resume":"Resume","taskBoard.detail.action.reopen":"Reopen","taskBoard.detail.moveTo":"Move to status","taskBoard.detail.openSession":"Open session","taskBoard.detail.noDescription":"No description yet.","taskBoard.detail.noSessionsAvailable":"No sessions in this workspace yet.","taskBoard.detail.markdownHint":"Supports Markdown.","taskBoard.detail.updated":"Updated","taskBoard.detail.created":"Created","taskBoard.card.updated":"Last activity","taskBoard.new.validation.titleRequired":"Task title is required.","taskBoard.new.error.createFailed":"The card was not saved. Your draft is retained.","taskBoard.new.title":"Create Board Task","taskBoard.new.close":"Close modal","taskBoard.new.titleLabel":"Task Title *","taskBoard.new.titlePlaceholder":"e.g. Implement user settings caching layer","taskBoard.new.priority":"Priority","taskBoard.new.workspaceTarget":"Workspace Target","taskBoard.new.currentWorkspace":"Current Workspace","taskBoard.new.descriptionContext":"Description / Requirements Context","taskBoard.new.descriptionPlaceholder":"Background context, acceptance criteria or notes…","taskBoard.new.initialPrompt":"Initial Agent Prompt (Optional)","taskBoard.new.initialPromptPlaceholder":"Prompt sent to agent when execution is triggered…","taskBoard.new.category":"Category","taskBoard.new.categoryPlaceholder":"Feature, idea, improvement…","taskBoard.new.associateSession":"Associate Existing Session (Optional)","taskBoard.new.noSession":"-- No session linked (decoupled) --","taskBoard.new.cancel":"Cancel","taskBoard.new.create":"Create Task Card","taskBoard.error.operationFailed":"The board operation failed.","taskBoard.error.workspaceRequired":"Select a workspace for this requirement.","taskBoard.error.workspaceUnauthorized":"The selected workspace is not authorized in this view.","taskBoard.error.invalidPresentationStatus":"This status belongs to the presentation prototype, not Own Work.","taskBoard.error.requestFailed":"{code}: {message}","taskBoard.error.invalidListResponse":"Invalid board list response.","taskBoard.error.paginationDidNotAdvance":"Board pagination did not advance.","taskBoard.error.overviewIncomplete":"The board overview omitted this workspace.","taskBoard.error.overviewPageIncomplete":"The board overview returned an incomplete workspace page.","taskBoard.error.cardGone":"The card is no longer in this view.","taskBoard.error.invalidDetailResponse":"Invalid board detail response.","taskBoard.error.invalidPreviewResponse":"Invalid board storage preview response.","taskBoard.error.createWorkspaceMismatch":"The pending create belongs to another workspace. Resolve it before changing the workspace.","taskBoard.error.serviceUnavailable":"The board service is not connected.","taskBoard.error.reloadBeforeEdit":"Reload task details before editing.","taskBoard.error.refreshBeforeMove":"Refresh the board before moving this card.","taskBoard.error.associatedManagerDisposed":"The associated Todo manager is disposed.","taskBoard.error.openAssociatedSession":"Could not open the associated session.","taskBoard.error.createAssociatedTodo":"A session client is required to create an associated Todo source.","taskBoard.error.associatedSession":"Could not load the associated session: {detail}","taskBoard.error.cardIssue":"{message}","cron.panel.title":"Scheduled tasks","cron.panel.count.one":"{count} task","cron.panel.count.other":"{count} tasks","cron.panel.refresh":"Refresh","cron.panel.loadMore":"Load more scheduled tasks","cron.panel.loading":"Loading scheduled tasks…","cron.panel.empty.title":"No scheduled tasks","cron.panel.empty.description":"Recurring and one-shot prompts scheduled by agents show up here.","cron.panel.error.title":"Could not load scheduled tasks","cron.status.running":"Enabled","cron.status.paused":"Paused","cron.status.stale":"Stale","cron.kind.recurring":"Recurring","cron.kind.oneShot":"One-shot","cron.nextFire":"Next run","cron.lastFire":"Last run","cron.neverRun":"Never","cron.action.pause":"Pause","cron.action.resume":"Resume","cron.action.run":"Run now","cron.action.delete":"Delete","cron.delete.title":"Delete scheduled task","cron.delete.body":"“{schedule}” will be deleted and will not run again.","cron.toast.paused":"Scheduled task paused","cron.toast.resumed":"Scheduled task resumed","cron.toast.triggered":"Scheduled task triggered","cron.toast.deleted":"Scheduled task deleted","cron.error.notFound":"This task no longer exists; the list was refreshed.","cron.error.ambiguous":"This task id exists in several sessions; refresh and try again.","st.prompt.title":"Prompt fields","st.prompt.expand":"Edit prompt fields","st.prompt.hint":"Override registered prompt fields, add reusable variables, or load prompt configuration files.","st.prompt.files":"Override files","st.prompt.filePath":"Override file path","st.prompt.filePathPlaceholder":"Relative path to prompt file","st.prompt.fileRequired":"A file path is required.","st.prompt.addFile":"Add override file","st.prompt.removeFile":"Remove override file {name}","st.prompt.emptyFiles":"No external override files.","st.prompt.variables":"Variables","st.prompt.variableName":"Variable name","st.prompt.variableValue":"Variable content","st.prompt.variableNamePlaceholder":"search_guidance","st.prompt.variableValuePlaceholder":"Add concise search guidance…","st.prompt.addVariable":"Add variable","st.prompt.removeVariable":"Remove variable {name}","st.prompt.fields":"Field overrides","st.prompt.fieldName":"Prompt field id","st.prompt.fieldValue":"Replacement text","st.prompt.fieldNamePlaceholder":"tool.web-search.guidance","st.prompt.fieldValuePlaceholder":"${search_guidance}","st.prompt.addField":"Add field override","st.prompt.removeField":"Remove field override {name}","st.prompt.emptyFields":"No inline field overrides.","st.prompt.preview":"Preview","st.prompt.previewFields":"Inline field previews","st.prompt.previewUnavailable":"Preview is unavailable until the draft passes validation.","st.prompt.save":"Save prompt fields","st.prompt.saved":"Prompt fields saved and echoed by the server.","st.prompt.invalid":"Fix the highlighted prompt fields before saving.","st.prompt.nameRequired":"A name is required.","st.prompt.nameInvalid":"Use a valid variable name or a dot-separated lowercase field id.","st.prompt.duplicateName":"The name “{name}” is used more than once.","st.prompt.summaryVariables.one":"{count} variable","st.prompt.summaryVariables.other":"{count} variables","st.prompt.summaryFields.one":"{count} field","st.prompt.summaryFields.other":"{count} fields","st.prompt.emptyVariables":"No variables yet — reference them from a field as ${name}.","st.subagentLimits.title":"Subagent execution limits","st.subagentLimits.timeout":"Timeout in hours (0 = unlimited)","st.subagentLimits.direct":"In-flight direct children (default 16, 0 = unlimited)","st.subagentLimits.total":"In-flight subagents in the main session tree (default 0 = unlimited)","st.subagentLimits.hint":"Timeout defaults to 2 hours and applies to subsequent launches or resumes; running tasks are not retimed. Counts include in-flight agents, with grandchildren included only in the tree limit and the main agent excluded. Excess launches are rejected, not queued.","st.subagentLimits.invalid":"Enter nonnegative integer limits and a valid nonnegative timeout.","st.subagentLimits.lead":"Caps on how long and how many subagents run. Excess launches are rejected, not queued.","st.subagentLimits.timeoutShort":"Timeout (hours)","st.subagentLimits.timeoutHelp":"Default 2. 0 means no limit. Applies to later launches and resumes.","st.subagentLimits.directShort":"Direct children at once","st.subagentLimits.directHelp":"Default 16. 0 means no limit.","st.subagentLimits.totalShort":"Subagents in the main session tree","st.subagentLimits.totalHelp":"Default 0 (no limit). Counts grandchildren, not the main agent.","st.agentTodo.title":"Agent-local todo lists","st.agentTodo.hint":"Each agent maintains its own Todo list while it works. This is built in — nothing to configure.","st.agentBoard.title":"Task board","st.agentBoard.hint":"Task board storage and agent-local Todo lists are managed from this page.","agentPanel.prototypeBadge":"PROTOTYPE DISPLAY SLICE · Agent Panel","agentPanel.runtimePendingConnect":"Runtime: Pending Connect","agentPanel.mainBadge":"Main","agentPanel.identityId":"ID: {id}","agentPanel.unknown":"Unknown","agentPanel.unknownModel":"Unknown model","agentPanel.switchAgent":"Switch agent","agentPanel.contextUsageLimit":"Context used / limit","agentPanel.costLabel":"Cost:","agentPanel.totalTokensLabel":"Total tokens:","agentPanel.partialBadge":"Partial","agentPanel.partialCost":"Partial cost","agentPanel.compactionLabel":"Compactions","agentPanel.cacheReadWriteLabel":"Cache read/write:","agentPanel.compactionCount.one":"{count} time","agentPanel.compactionCount.other":"{count} times","agentPanel.collapseMetrics":"Collapse metrics","agentPanel.inOutDetails":"View In/Out split","agentPanel.usageDashboard":"Usage dashboard","agentPanel.inputTokensLabel":"Input tokens:","agentPanel.outputTokensLabel":"Output tokens:","agentPanel.treeSummary":"Whole agent tree total","agentPanel.treeCounts":"{active} running / {total} total","agentPanel.treeTokens":"Tree total tokens:","agentPanel.treeCost":"Tree total cost:","agentPanel.treeCacheRate":"Tree cache hit rate:","agentPanel.cacheRate":"Cache hit rate","agentPanel.cacheRateLabel":"Cache hit rate:","agentPanel.cacheRawTooltip":"Cache read: {read} · Cache write: {write}","agentPanel.label.executor":"Executor","agentPanel.label.model":"Model","agentPanel.label.effort":"Thinking Effort","agentPanel.sourceLabel":"Source:","agentPanel.fileLabel":"File:","agentPanel.profileDescription":"Profile description","agentPanel.detailTitle":"Details","agentPanel.detailClose":"Close details","agentPanel.profileDetail":"Profile & Identity Details","agentPanel.toolDetail":"Tool Details","agentPanel.skillDetail":"Skill Details","agentPanel.subagentDetail":"Subagent Details","agentPanel.viewDetails":"Details","agentPanel.internalId":"Internal ID","agentPanel.runtimeContext":"Runtime context","agentPanel.liveContext":"Live session","agentPanel.draftContext":"Draft planning","agentPanel.scope":"Scope","agentPanel.scopeWorkspace":"Workspace only","agentPanel.scopeGlobal":"Global","agentPanel.argumentHint":"Argument hint","agentPanel.approvalNotice":"Human approval is required before running this tool.","agentPanel.readOnlyNotice":"Read-only tool. Does not modify workspace files or run external mutations.","agentPanel.launchAllowedNotice":"Policy check passed. Allowed to dispatch in this session.","agentPanel.launchBlockedNotice":"Policy or execution mode currently blocks dispatching this subagent.","agentPanel.defaultsMissingNotice":"Required default model or runtime configuration is missing.","agentPanel.todosLoading":"Loading todos from linked sessions…","agentPanel.todosUnavailable":"Todos unavailable","agentPanel.todosError":"Could not load todos","agentPanel.todoTitle":"Todos","agentPanel.newTodo":"+ New","agentPanel.currentGoal":"Current execution goal","agentPanel.noTodos":"This agent has no todo items","agentPanel.markTodo":"Mark todo {title}","agentPanel.capabilitiesTitle":"Capabilities and dispatch","agentPanel.generalCategory":"General","agentPanel.registeredTools":"Registered tools","agentPanel.enabledOfTotal":"{enabled}/{total}","agentPanel.noRegisteredTools":"This agent has no registered tools","agentPanel.capability.enabled":"Enabled","agentPanel.capability.approvalRequired":"Approval required","agentPanel.capability.disabled":"Disabled","agentPanel.capability.disconnected":"Disconnected","agentPanel.capability.unknown":"Unknown","agentPanel.readOnly":"Read-only","agentPanel.unavailableReason":"Unavailable reason: {reason}","agentPanel.error.validationFailed":"Could not load agent capabilities: the request was invalid.","agentPanel.error.workspaceNotFound":"Could not load agent capabilities: the workspace was not found.","agentPanel.error.agentProfileNotFound":"Could not load agent capabilities: the agent profile was not found.","capabilityReason.skill_tool_inactive":"The skill tool is not active for this agent.","capabilityReason.skill_model_invocation_disabled":"Model invocation is disabled for this skill.","capabilityReason.snapshot_inventory_only":"The snapshot contains inventory only; live runtime and invocation approval are unavailable.","capabilityReason.tool_policy_disabled":"Disabled by the effective tool policy.","capabilityReason.runtime_not_connected":"The required runtime capability is not connected.","capabilityReason.activation_condition_unmet":"The tool activation condition is not satisfied.","capabilityReason.approval_pending":"Waiting for approval before this tool can be invoked.","capabilityReason.session_or_agent_not_live":"The session or agent is not live, so dispatch capabilities are unavailable.","capabilityReason.persisted_metadata_unavailable":"Persisted agent capability metadata is unavailable.","capabilityReason.persisted_profile_unavailable":"The persisted agent profile is unavailable in the live session catalog.","capabilityReason.snapshot_launch_unavailable":"The agent is not live; snapshot capabilities cannot launch subagents.","capabilityReason.agent_run_inactive":"AgentRun is not active for this agent.","capabilityReason.agent_run_draft_disabled":"AgentRun is disabled by the draft profile or global tool policy.","capabilityReason.draft_inventory_only":"This is draft inventory only; runtime connection and invocation approval are not evaluated.","capabilityReason.draft_policy_disabled":"Disabled by the draft profile or global tool policy.","capabilityReason.strict_subagent_policy_blocked":"Blocked by the strict subagent policy.","capabilityReason.executor_binding_unavailable":"The executor binding is unavailable.","capabilityReason.executor_route_binding_unavailable":"The executor route binding is unavailable.","capabilityReason.model_not_configured":"No default model is bound; specify a model explicitly.","capabilityReason.scoped_profile_unavailable":"The scoped profile is unavailable.","capabilityReason.binding_constraints_unsatisfied":"The default binding does not satisfy the model, effort, or executor constraints.","capabilityReason.default_binding_unavailable":"The default model or executor binding is unavailable.","capabilityReason.research_readonly_dispatch_forbidden":"Research-only agents cannot dispatch subagents.","capabilityReason.plan_resume_forbidden":"AgentRun cannot resume existing children in plan mode. Exit plan mode first.","capabilityReason.native_executor_required":"Research-only dispatch requires the native executor.","agentProfileDiagnostic.agent_profile_source.invalid_path":"The source path is invalid.","agentProfileDiagnostic.agent_profile_source.path_escape":"The source path escapes its contribution root.","agentProfileDiagnostic.agent_profile_source.symlink_escape":"The source path resolves outside its contribution root.","agentProfileDiagnostic.agent_profile_source.not_private":"The source profile is not private.","agentProfileDiagnostic.agent_profile_source.unavailable":"The source profile is unavailable.","agentProfileDiagnostic.agent_profile_source.invalid_profile":"The source profile is invalid.","agentProfileDiagnostic.agent_profile_source.cycle":"A source profile dependency cycle was detected.","agentProfileDiagnostic.agent_profile_source.depth_exceeded":"The source profile dependency depth was exceeded.","agentPanel.parametersSchema":"Parameter schema & description","agentPanel.noParameters":"No parameters required","agentPanel.parameters":"Parameters: {summary}","agentPanel.skills":"Skills","agentPanel.skillsCount":"{workspace} workspace · {global} global","agentPanel.moreSkills":"+{count} more","agentPanel.workspaceSkills":"Workspace skills ({count})","agentPanel.noWorkspaceSkills":"No workspace skills","agentPanel.globalSkills":"Global skills ({count})","agentPanel.noGlobalSkills":"No global skills","agentPanel.path":"Path: {path}","agentPanel.viewSkillMd":"View SKILL.md","agentPanel.hideSkillMd":"Hide SKILL.md","agentPanel.loadingSkillMd":"Loading SKILL.md…","agentPanel.skillType":"Type: {type}","agentPanel.skillTypeLabel":"Type","agentPanel.disableModelInvocationBadge":"Manual only","agentPanel.promptCommandBadge":"Slash command","agentPanel.profileSection.identity":"Identity & Source","agentPanel.profileSection.intent":"Intent & Purpose","agentPanel.profileSection.model":"Model & Inference","agentPanel.profileSection.tools":"Tools & Policies","agentPanel.profileSection.subagents":"Derived Capabilities","agentPanel.profileSection.raw":"Raw File","agentPanel.unrestricted":"Unrestricted","agentPanel.noToolsAllowed":"No tools allowed","agentPanel.value.field":"Field","agentPanel.value.declared":"Declared","agentPanel.value.effective":"Effective","agentPanel.locked":"Locked by profile, immutable in session","agentPanel.provenanceCol":"Declared ← Effective ← Source","agentPanel.subagents":"Dispatchable subagents","agentPanel.subagentPolicy":"Dispatch policy","agentPanel.subagentPolicy.advisory":"Advisory","agentPanel.subagentPolicy.strict":"Strict","agentPanel.category.osBackends":"Files & Shell","agentPanel.category.threadCommunication":"Threads","agentPanel.category.agentTask":"Agent Tasks","agentPanel.category.taskBoard":"Task Board","agentPanel.category.nbSearch":"Web Search","agentPanel.category.questionTools":"Questions","agentPanel.category.toolSelect":"Tool Selection","agentPanel.category.subagent":"Subagents","agentPanel.category.goal":"Goals","agentPanel.category.plan":"Planning","agentPanel.category.todo":"Todos","agentPanel.category.skill":"Skills","agentPanel.category.edit":"Editing","agentPanel.category.memory":"Memory","agentPanel.category.history":"History","agentPanel.category.browser":"Browser","agentPanel.category.message":"Messages","agentPanel.category.builtin":"Built-in","agentPanel.category.other":"Other","agentPanel.sourceId.builtin":"Built-in","agentPanel.sourceId.user":"User","agentPanel.sourceId.workspace":"Workspace","agentPanel.sourceId.custom":"Custom","agentPanel.sourceId.extra":"Extra directory","agentPanel.sourceId.plugin":"Plugin","agentPanel.sourceId.explicit":"Explicit","agentPanel.profileDraftMissing":'No profile named "{profile}" in this workspace.',"agentPanel.detailBack":"Back","agentPanel.allowedCount":"{allowed}/{total} allowed to launch","agentPanel.noSubagents":"No dispatchable subagents","agentPanel.allowed":"Allowed","agentPanel.blocked":"Blocked","agentPanel.executor":"Executor: {value}","agentPanel.model":"Model: {value}","agentPanel.default":"Default","agentPanel.thinkingEffort":"Thinking effort: {value}","agentPanel.effortSource.forced":"forced","agentPanel.effortSource.adjusted":"adjusted","agentPanel.profileFileBadge":"profile file","agentPanel.routeDetachedBadge":"route detached","agentPanel.researchReadonly":"Research only · read-only execution","agentPanel.defaultsMissing":"Defaults missing: {reason}","agentPanel.notReady":"Not ready","agentPanel.admissionBlocked":"Admission blocked: {reason}","agentPanel.activeExecution":"Active execution (this agent)","agentPanel.activeCount":"{count} active","agentPanel.noActiveWork":"No subagents or tasks actively executing.","agentPanel.runningChildren":"Running child agents ({count})","agentPanel.activeStep":"Active step","agentPanel.currentPlan":"Current plan","agentPanel.elapsedSeconds":"{seconds}s","agentPanel.workboard":"Workboard / Board","agentPanel.boardSummary":"{inProgress} in progress · {total} total","agentPanel.noBoardRequirement":"No active board requirement pinned","agentPanel.quickCreateBoardTask":"Quick create board task","agentPanel.openBoard":"Open full board","agentPanel.usageUnavailable":"Usage metrics unavailable","agentPanel.usageTitle":"Agent context and metrics","agentPanel.usageDetails":"Usage details","agentPanel.contextWindow":"Context window","agentPanel.agentCost":"Agent cost","agentPanel.totalTokens":"Total tokens","agentPanel.inputOutput":"{input} in · {output} out","agentPanel.cacheReadWrite":"Cache read / write","agentPanel.treeActiveCounts":"{active} active / {total} total","diagnostics.title":"Dispatch capabilities","diagnostics.live":"Current session / agent · tool-visible targets","diagnostics.draft":"Draft planning only · not live admission","diagnostics.loading":"Loading capabilities…","diagnostics.error":"Could not load capabilities","agentPanel.planLoadFailed":"Could not load the plan","diagnostics.unavailable":"Capabilities unavailable","diagnostics.empty":"No tool-visible dispatch targets.","diagnostics.model":"Default model","diagnostics.effort":"Default effort","diagnostics.source":"Source","diagnostics.executor":"Executor","diagnostics.defaultsReady":"Defaults available","diagnostics.defaultsMissing":"Defaults unavailable","diagnostics.allowed":"Launch allowed now","diagnostics.blocked":"Launch blocked now","diagnostics.preferred":"Recommended target","diagnostics.allowedNonpreferred":"Allowed outside recommendations","diagnostics.unconfigured":"No recommendations","diagnostics.policy.fixed":"Fixed by policy","diagnostics.unknown":"Not reported","diagnostics.readonly":"Research only · read-only execution","diagnostics.source.caller-lease":"Caller lease","diagnostics.source.route":"Route","diagnostics.source.profile":"Profile","diagnostics.source.model-profile":"Model profile","diagnostics.source.model":"Model","diagnostics.source.config":"Configuration","diagnostics.source.executor":"Executor","selection.loading":"Validating saved choices… You can keep typing.","selection.catalogError":"Could not validate choices: {detail}. Your selections are preserved.","selection.profileInvalid":"Profile “{value}” is unavailable in this directory. Choose an enabled profile.","selection.modelInvalid":"Model “{value}” is no longer available. Choose another model.","selection.effortInvalid":"Effort “{value}” is unavailable for this model. Choose another effort or reset it.","selection.resetEffort":"Use model default effort","selection.workspaceInvalid":"Workspace “{value}” is unavailable. Choose a workspace or an absolute directory.","common.cancel":"Cancel","common.save":"Save","common.saving":"Saving…","common.retry":"Retry","common.remove":"Remove","common.close":"Close","common.popupBlocked":"The browser blocked the new window.","common.requestTimedOut":"Request timed out","agentProfileCatalog.loading":"Agent profile catalog is still loading","common.unknownError":"Unknown error","select.search":"Search…","select.noMatches":"No matches for “{query}”.","select.empty":"Nothing to choose from.","connect.tagline":"Connect to Kiki on this computer.","connect.detect":"Find Kiki on this computer","connect.detecting":"Looking for Kiki…","connect.noneFound":"Kiki isn’t running here. Start it with `kiki server`, then try again.","connect.desktopStartFailed":"Kiki's local backend could not start: {detail}","connect.detectNeedsDev":"Detection needs the kiki dev server (vite dev). Enter the server URL and token manually.","connect.serverUrl":"Server URL","connect.urlPlaceholder":"http://127.0.0.1:58627 (empty = proxy {target})","connect.token":"Bearer token","connect.connecting":"Connecting…","connect.connect":"Connect","connect.back":"Back","connect.deepLinkBefore":"Deep links supported: ","connect.deepLinkOr":" or ","connect.deepLinkAfter":". The connection is remembered in this browser only.","connect.otherMachine":"Connect to another machine…","connect.accessToken":"Access token","connect.accessTokenHelp":"Printed when the server starts; also saved in ~/.kiki/server.token on that machine.","connect.accessTokenWhere":"Where is this?","app.reconnecting":"Connection lost — reconnecting…","app.disconnected":"Disconnected from the server. Events will resume on reconnect.","app.closeSidebar":"Close sidebar","app.unexpectedError":"Kiki hit an unexpected error.","app.reload":"Reload","sidebar.newSession":"New session","sidebar.navAria":"Session navigation","sidebar.listAria":"Session list","sidebar.searchPlaceholder":"Search sessions…","sidebar.searchAria":"Search sessions","sidebar.clearSearch":"Clear search","sidebar.searching":"Searching…","sidebar.searchFailed":"Search failed","sidebar.noMatches":"No matches for “{query}”.","sidebar.indexBuilding":"Index is building ({indexed}/{total} sessions) — results may be incomplete.","sidebar.indexIncomplete":"Results may be incomplete — the search hit a server budget.","sidebar.loadingSessions":"Loading sessions…","sidebar.loadFailed":"Could not load sessions","sidebar.noSessions":"No sessions yet — start one above.","sidebar.untitled":"Untitled session","sidebar.archived":"archived","sidebar.showArchived":"Show archived","sidebar.loadMore":"Load more sessions","sidebar.loadingMore":"Loading…","sidebar.searchLoadMore":"Load more results","sidebar.settings":"Settings","sidebar.disconnect":"Disconnect","sidebar.connStatusAria":"Connection status; open connection settings","sidebar.sessionActionsFor":"Session actions for {title}","sidebar.pinSessionFor":"Pin {title} to the top","sidebar.unpinSessionFor":"Unpin {title}","sidebar.pinWorkspace":"Pin this workspace to the top","sidebar.unpinWorkspace":"Unpin this workspace","sidebar.pinWorkspaceFor":"Pin the workspace {name} to the top","sidebar.unpinWorkspaceFor":"Unpin the workspace {name}","sidebar.workspaceAll":"All workspaces","sidebar.collapseSidebar":"Collapse sidebar","sidebar.expandSidebar":"Expand sidebar","sidebar.resizeAria":"Drag to resize the sidebar; double-click to reset","sidebar.groupByTime":"By time","sidebar.groupByWorkspace":"By workspace","sidebar.sortUpdatedDesc":"Recently updated","sidebar.sortUpdatedAsc":"Least recently updated","sidebar.sortTitle":"By name","sidebar.groupUngrouped":"Ungrouped","sidebar.groupPinned":"Pinned","sidebar.groupToday":"Today","sidebar.groupYesterday":"Yesterday","sidebar.groupWeek":"Past 7 days","sidebar.groupMonth":"Past 30 days","sidebar.groupOlder":"Older","sidebar.emptyShowArchived":"Show archived sessions","sidebar.viewMenu":"View options","sidebar.viewWorkspaceHeading":"Workspace","sidebar.viewGroupHeading":"Group","sidebar.viewSortHeading":"Sort","sidebar.manageWorkspaces":"Manage workspaces…","sidebar.filtersAria":"Active filters","sidebar.filterArchived":"Including archived","sidebar.clearWorkspaceFilter":"Show all workspaces","sidebar.clearArchivedFilter":"Hide archived sessions","sidebar.status.approval":"Awaiting approval","sidebar.status.question":"Awaiting answer","sidebar.status.working":"Running","sidebar.status.idle":"Idle","sidebar.ws.connecting":"connecting","sidebar.ws.closed":"closed","menu.restore":"Restore","menu.fork":"Fork session","menu.sideQuestion":"Side question","menu.export":"Export archive…","menu.compact":"Compact context","menu.undo":"Undo last turn…","menu.rename":"Rename…","menu.pin":"Pin to top","menu.unpin":"Unpin","menu.showTopLevel":"Show at top level","menu.showNested":"Show nested","menu.archive":"Archive","menu.copyLink":"Copy link","menu.copyPath":"Copy path","menu.openFolder":"Open containing folder","menu.openDefaultApp":"Open with default app","link.menuAria":"Link actions","link.open":"Open link","link.copyLink":"Copy link","file.menuAria":"File actions","menu.addToConversation":"Add to conversation","menu.addToConversationNone":"Open a conversation to add this thread to it","menu.addToConversationSelf":"This is the open conversation","file.openPreview":"Open preview","file.copyPath":"Copy path","file.copyRelativePath":"Copy relative path","file.copyAbsolutePath":"Copy absolute path","file.showInFolder":"Show in folder","file.openDefaultApp":"Open with default app","file.open":"Open","composer.contextMenuAria":"Input actions","contextMenu.cut":"Cut","contextMenu.copy":"Copy","contextMenu.paste":"Paste","contextMenu.selectAll":"Select all","undo.title":"Undo the last turn?","undo.bodyNamed":"This removes the most recent user message and kiki’s reply from “{title}”. Earlier turns are kept.","undo.bodySession":"This removes your most recent message and kiki’s reply from this session’s history. Earlier turns are kept.","undo.confirm":"Undo last turn","profile.switchTitle":"Switch to {profile}?","profile.switchBody":"The new agent profile takes effect from your next message in this session.","profile.switchModelReset":"The model and thinking effort on this page switch to the new profile’s defaults. You can still change them before sending.","profile.switchSubagents":"Subagent dispatch policy switches with the new profile.","profile.switchConfirm":"Switch profile","profile.actionsGroup":"Profile actions","profile.rebuildMenu":"Rebuild context","profile.rebuildMenuDescription":"Reload the current profile, prompt fields, skills, instructions, and plugin injections.","profile.rebuildBusy":"Wait for the current turn to finish before rebuilding context.","profile.rebuildTitle":"Rebuild this session’s context?","profile.rebuildBody":"Kiki will reload the current agent’s system prompt and injected context from the latest files on disk.","profile.rebuildKeepsHistory":"Conversation messages and history are kept.","profile.rebuildLatestSources":"The profile, prompt fields, skills, AGENTS.md instructions, plugin injections, and other runtime injections are rebuilt.","profile.rebuildConfirm":"Rebuild context","profile.rebuildDoneChanged":"Context rebuilt from the latest sources.","profile.rebuildDoneUnchanged":"Context rebuilt; the sources were already up to date.","profile.rebuildFailed":"Context rebuild failed: {detail}","rename.title":"Rename session","action.exportDone":"Archive downloaded for “{title}”.","action.exportDoneSession":"Session archive downloaded.","action.compactRequested":"Compaction requested for “{title}”.","action.compactRequestedSession":"Compaction requested — older context will be summarized.","action.undoDone":"Last turn removed from “{title}”.","action.undoDoneSession":"Last turn removed.","action.forkDoneSession":"Forked — opened the copy.","action.forkFailed":"Fork failed: {detail}","btw.tabTitle":"Side question","btw.failed":"Could not start a side question: {detail}","action.exportFailed":"Export failed: {detail}","action.compactFailed":"Compact failed: {detail}","action.undoFailed":"Undo failed: {detail}","action.editFailed":"Edit failed: {detail}","action.regenerateFailed":"Re-run failed: {detail}","error.nothingToUndo":"Nothing to undo — there is no earlier turn to roll back to.","error.nothingToCompact":"Nothing to compact yet — the history is too short.","error.sessionBusy":"The session is busy — try again when the current turn finishes.","error.messageActionUnavailable":"This message can no longer be edited or re-run.","error.sessionCursorMismatch":"This session was updated elsewhere — review the latest state, then try again.","switcher.aria":"Quick switcher","switcher.placeholder":"Jump to a session or search messages…","switcher.recent":"Recent sessions","switcher.sessions":"Sessions","switcher.matches":"Matching messages","switcher.settings":"Settings","switcher.empty":"No sessions yet.","switcher.noMatches":"No sessions match “{query}”.","switcher.hint":"↑↓ to move · Enter to open · Esc to close","toast.dismissAria":"Dismiss notification","shortcuts.title":"Keyboard shortcuts","shortcuts.undo":"Undo composer edit","shortcuts.redo":"Redo composer edit","composer.history.previous":"Previous prompt","composer.history.next":"Next prompt","shortcuts.hint":"Esc closes this panel · Ctrl+/ opens it anywhere","shortcuts.group.global":"Global","shortcuts.group.session":"Session","shortcuts.group.approvals":"Approvals","shortcuts.group.terminal":"Terminal","shortcuts.newSession":"New session","shortcuts.switcher":"Quick switcher","shortcuts.nextSession":"Jump to the other recent session","shortcuts.settings":"Open settings","shortcuts.thisPanel":"This shortcuts panel","shortcuts.showHide":"Show or hide the Kiki window","shortcuts.send":"Send the prompt","shortcuts.newline":"New line in the composer","shortcuts.slashMenu":"Skills and shortcuts menu","shortcuts.fileMention":"Mention a workspace file","shortcuts.find":"Find in this conversation (Enter / Shift+Enter to step)","shortcuts.findNext":"Next match","shortcuts.findPrevious":"Previous match","shortcuts.approve":"Approve the focused pending card, or the only visible one","shortcuts.reject":"Reject the focused pending card, or the only visible one","shortcuts.termToggle":"Show or hide the terminal panel","shortcuts.termCopy":"Copy the terminal selection","shortcuts.termPaste":"Paste into the terminal","shortcuts.termClose":"Close the terminal panel when it is not focused","shortcuts.termEsc":"Esc in the terminal goes to the PTY","context.meter":"{percent}%","context.meterTitle":"Context in use: {used} of {limit} — click for details","context.meterWarnTitle":"Context {used} of {limit} — review usage and compact if needed","context.meterDangerTitle":"Context {used} of {limit} — over the keep-under threshold","context.detailsHint":"details","context.detailsTitle":"Context details","context.sessionUsage":"Session cumulative","context.agentUsage":"Agent cumulative","context.sessionUsageHint":"lifetime","context.usageReadFailed":"Cumulative usage could not be read, so it is not shown.","context.agentUsageIncomplete":"Some agents’ usage could not be read, so these totals are incomplete.","context.windowTitle":"Context window","context.windowHint":"right now","context.breakdownTitle":"Breakdown","context.breakdownEstimated":"estimated","context.system":"System","context.tools":"Tools","context.messages":"Messages","context.used":"Used","context.available":"Available","context.limit":"Limit","context.compactAction":"Compact older context","context.meterCompactTitle":"Context {used} of {limit}, compacts at {point}. Click for details","context.meterCompactDueTitle":"Context {used} is past the compaction point {point}. Compacts before the next step","context.compact.layer.session":"this session","context.compact.layer.profile":"profile {profile}","context.compact.layer.model":"model","context.compact.layer.global":"global","context.compact.layer.legacy":"built-in","context.compact.sourceSession":"This session · {tokens}","context.compact.sourceDefault":"Default · {tokens} ({layer})","context.compact.remaining":"{tokens} until automatic compaction.","context.compact.belowIdle":"Below current use. Compacts before your next message is answered.","context.compact.belowRunning":"Below current use. Compacts before the next step.","context.compact.reserve":"Reserve {tokens} above the point.","context.compact.limitTick":"Limit {tokens}","context.compact.usableOfWindow":"Usable {usable} / window {window}","context.compact.locked":"The window is too small to move the compaction point.","context.compact.appliesNextStep":"Changes apply from the next step. Nothing compacts right away.","context.compact.clampedCeil":"Adjusted to {tokens} (highest adjustable point).","context.compact.clampedFloor":"Adjusted to {tokens} (lowest point this model keeps).","context.compact.inputInvalid":"Enter tokens like 400k or 400000, or a share like 73%.","context.compact.inputLabel":"Compaction point","context.compact.inputHint":"{percent} of the usable window. Accepts 400k, 400000 or 73%.","context.compact.sliderLabel":"Automatic compaction point","context.compact.sliderValue":"Compaction point {tokens} of {limit}","context.compact.saveFailed":"Couldn’t save the compaction point. Try again.","context.compact.profileReadOnly":"Built-in profiles can’t be changed. Save to the model or global default instead.","context.compact.menuLabel":"Save as default","context.compact.saveModel":"Default for {model} ({value})","context.compact.saveProfile":"Default for profile {profile} ({value})","context.compact.profileBuiltin":"Built-in profiles can’t be changed","context.compact.saveGlobal":"Global default ({value})","context.compact.saveGlobalHint":"Saved as a share of the window, from {tokens} here","context.compact.reset":"Use the default","context.compact.resetTo":"Use the default ({tokens}, {layer})","context.compact.target.model":"the {model} default","context.compact.target.profile":"the profile {profile} default","context.compact.target.global":"the global default","context.compact.saved":"Saved as {target}: {value}.","context.compact.savedGlobal":"Saved as {target}: {value}. Applies to every model without its own setting.","context.compact.savedShadowed":"Saved as {target} ({value}), but {layer} sets {layerValue}. This session stays at {tokens}.","context.compact.undo":"Undo","context.compact.presetsLabel":"Common compaction points","context.strategy.title":"When it fills up","context.strategy.groupLabel":"Context renewal strategy","context.strategy.option.summarize":"Summarize","context.strategy.option.fresh":"Fresh start","context.strategy.option.auto":"Auto","context.strategy.hint.summarize":"Default. Older messages are replaced by a summary.","context.strategy.hint.fresh":"Clears the context and continues from the agent’s work notes.","context.strategy.hint.auto":"Starts fresh when the work notes cover the work, otherwise summarizes.","context.strategy.source.session":"This session","context.strategy.source.profile":"From profile {profile}","context.strategy.source.profileUnnamed":"From profile","context.strategy.source.global":"Global default","context.strategy.source.default":"Built-in default","context.strategy.source.subagent":"Subagent default","context.strategy.source.executor":"Set by the executor","context.strategy.menuLabel":"Strategy source","context.strategy.saveGlobal":"Save {strategy} as the global default","context.strategy.reset":"Use inherited setting","context.strategy.savedGlobal":"{strategy} is now the global default.","context.strategy.saveFailed":"Couldn’t change the strategy. Try again.","context.strategy.appliesNext":"Applies from the next compaction.","context.strategy.executorLocked":"This agent’s executor manages its own context.","context.strategy.subagentReadOnly":"Per-session changes apply to the main agent only.","context.strategy.compactWith":"Compact now with…","context.strategy.compactOptionsLabel":"Choose how to compact now","context.strategy.compactRequested.summarize":"Compaction requested. Older context will be summarized.","context.strategy.compactRequested.fresh":"Compaction requested. The context will restart from the work notes.","pending.count.one":"{count} session needs you","pending.count.other":"{count} sessions need you","pending.badgeTitle":"Sessions waiting for an approval or answer","pending.popoverTitle":"Needs you","pending.kind.approval":"Approval","pending.kind.question":"Question","composer.mode.manual":"manual","composer.mode.manualHint":"Ask before every action","composer.mode.auto":"auto","composer.mode.autoHint":"Approves routine actions; asks for sensitive access","composer.mode.review":"review","composer.mode.yolo":"yolo","composer.mode.yoloHint":"Approve everything, but may still ask","composer.modeAria":"Mode","composer.planAria":"Plan","composer.plan":"plan","composer.planHint":"Plan mode — kiki proposes a plan before acting","composer.planAuto":"Auto plan mode","composer.planAutoHint":"On: enter and leave plan mode freely; off: both directions need approval","composer.goal":"goal","composer.goalObjective":"Goal objective","composer.goalObjectivePlaceholder":"Objective (optional)","composer.goalNoteBefore":"Sent as ","composer.goalNoteAfter":" with the next prompt.","composer.goalStatus.active":"active","composer.goalStatus.paused":"paused","composer.goalStatus.blocked":"blocked","composer.goalStatus.complete":"complete","composer.goalControl.pause":"pause","composer.goalControl.resume":"resume","composer.goalControl.cancel":"cancel","composer.modelTitle":"Model — {source} source","composer.modelSource.server-default":"server-default","composer.modelSource.local-default":"local-default","composer.modelSource.session":"session","composer.modelSource.override":"override","composer.modelAria":"Model","composer.inheritDefault":"inherit default","composer.inheritSession":"Follow session: {model}","composer.inheritServer":"Follow default: {model}","composer.inheritLocal":"Follow default: {model}","composer.unknown":"unknown","composer.sessionDefaultSuffix":" · session default","composer.effortTitle":"Thinking effort","composer.effortHeading":"Depth","composer.modePermissionHeading":"Permission","composer.modeSegmentSeparator":" · ","composer.goalOpen":"Goal…","composer.goalChipAria":"Goal — {status}","composer.goalModeTitle":"Goal mode — the next message becomes the session goal","composer.goalArmedChip":"goal · this message becomes the objective","composer.goalArmedAria":"Goal mode is on — the next message becomes the session goal","composer.goalDisarmAria":"Turn goal mode off","composer.permAria":"Approvals","composer.perm.manual":"Ask every time","composer.perm.manualHint":"Asks before anything not on the safe list","composer.perm.auto":"Auto","composer.perm.autoHint":"Works on its own; asks before sensitive or external actions","composer.perm.review":"Approve for me","composer.perm.reviewHint":"Like Auto, but a reviewer model decides first; asks you only when unsure","composer.perm.yolo":"Full access","composer.perm.yoloHint":"Approves everything, including sensitive files","composer.runModeHeading":"Mode","composer.runMode.normal":"Normal","composer.runMode.normalHint":"Works turn by turn","composer.runMode.plan":"Plan","composer.runMode.planHint":"Proposes a plan before acting","composer.runMode.goal":"Goal","composer.runMode.goalHint":"Keeps going until the objective is done","composer.runModeClear":"Back to Normal mode","composer.planGateFree":"Enter/leave plan mode without review","composer.planGateFreeHint":"Entering and leaving plan mode waits for your approval","composer.planGateFreeAuto":"Current mode {mode}: plan review will not wait for you","composer.planGateFreeOpen":"The model enters and leaves plan mode on its own","composer.goalObjectiveNext":"Your next message","composer.addMenuAria":"Add and actions","composer.addMenu.attach":"Attach files","composer.addMenu.mode":"Mode","composer.addMenu.rebuild":"Rebuild context","composer.addMenu.contextGroup":"Add context","composer.addMenu.sessionGroup":"Session","composer.addMenu.attachHint":"or drop, paste","composer.addMenu.skills":"Skills","composer.addMenu.mention":"Mention a file","composer.addMenu.mentionHint":"Sent as @path with the message.","composer.addMenu.files":"Files","composer.addMenu.search":"Search skills, files, hosts","composer.addMenu.searchSkills":"Search skills","composer.addMenu.searchFiles":"Search files","composer.addMenu.noMatch":'Nothing matches "{query}".',"composer.addMenu.skillsLoading":"Loading skills…","composer.addMenu.skillsFailed":"Skills could not be loaded.","composer.addMenu.skillsEmpty":"No skills in this workspace.","composer.skillChip":"Skill","composer.removeSkill":"Remove skill {name}","composer.agentDefaultName":"Kiki","composer.agentDefaultOption":"Kiki (default)","composer.agentPendingSuffix":"{name} · next message","composer.modelProvenance.override":"Chosen for this message","composer.modelProvenance.session":"From this session","composer.modelProvenance.server-default":"Server default","composer.modelProvenance.local-default":"This device’s default","composer.modelResetDefault":"Reset to default","composer.modelCurrentBadge":"current","composer.remoteTarget":"Sending to {label}","composer.replyingTo":"Replying to {agent}","tray.aria":"Needs you","tray.title":"Needs you","tray.approvals.one":"{count} approval","tray.approvals.other":"{count} approvals","tray.questions.one":"{count} question","tray.questions.other":"{count} questions","tray.more.one":"{count} more","tray.more.other":"{count} more","tray.later":"Later","tray.laterTitle":"Answer this later — the agent keeps working meanwhile","tray.showInTimeline":"Show in timeline","tray.from":"from {name}","goal.cardAria":"Session goal","goal.followUp":"follow-up · {timing}","goal.edit":"Edit","goal.editTitle":"Edit the objective, completion criterion, or follow-up timing","goal.pause":"Pause","goal.pauseTitle":"Pause the goal — follow-up turns stop until it resumes","goal.resume":"Resume","goal.resumeTitle":"Resume the goal and continue working","goal.resumeBlockedTitle":"Resume this blocked goal and start another continuation","goal.resumeConfirm":"Resume goal?","goal.cancel":"Cancel","goal.actionsAria":"Goal actions","queue.rowActionsAria":"Queued prompt actions","goal.cancelTitle":"Cancel the goal — it stops driving follow-up turns","goal.cancelConfirm":"Cancel goal?","goal.editObjective":"Objective","goal.editCriterion":"Completion criterion (optional)","goal.editTiming":"Follow-up timing","goal.conflict":"The goal changed elsewhere — the latest values are loaded; review and save again.","goal.editFailed":"Could not update the goal: {detail}","goal.actionFailed":"Goal action failed: {detail}","composer.attachAria":"Attach files","composer.attachTitle":"Attach images or files","composer.agentProfileAria":"Agent profile","composer.agentProfileTitle":"Agent profile — the persona and toolset this session runs as","composer.agentProfilePendingTitle":"Profile switch pending — applies from your next message","composer.noAgentProfiles":"(no agent profiles)","composer.profileGroupMain":"Main profiles","composer.profileGroupOther":"More profiles","composer.profileSearchPlaceholder":"Search profiles…","composer.profileEffortBadge":"effort · {effort}","composer.modelSearchPlaceholder":"Search models…","composer.modelCompactAt":"auto-compact {tokens}","composer.modelNoVision":"no vision","composer.placeholder":"Ask kiki anything…","composer.placeholderBusy":"Steer kiki — this queues while it works…","composer.placeholderBusySendsNow":"Add to this turn — read after the current step…","harness.markTitle":"Runs on {engine}","harness.panelTitle":"{engine} runs this session","harness.capsLabel":"What the engine supports","harness.notNegotiated":"Kiki reads what the engine supports when it starts. Send a message to fill this in.","harness.cap.native_steering":"Messages during a turn","harness.cap.image":"Images","harness.cap.audio":"Audio","harness.cap.fork":"Fork","harness.cap.question_form":"Questions with choices","harness.cap.plan_approval":"Plan review","harness.cap.kiki_subagents":"Kiki subagents","harness.cap.yes":"Yes","harness.cap.no":"No","harness.cap.unknown":"Not reported","harness.cap.on":"On","harness.cap.off":"Off","harness.fromHandshake":"From the engine’s last handshake with Kiki.","harness.manage":"Manage engines","composer.engineNoImages":"{engine} does not take images in this session.","composer.engineModelTitle":"{model} — set on the profile, served by {engine}","composer.engineModelDefault":"Engine default","composer.abortTitle":"Stop this turn","composer.sendTitle":"Send (Enter)","composer.sendTitleCmdEnter":"Send (⌘/Ctrl+Enter)","composer.queueTitle":"Queue this prompt (Enter)","composer.queueTitleCmdEnter":"Queue this prompt (⌘/Ctrl+Enter)","composer.sendAria":"Send message","composer.queueAria":"Queue prompt","composer.sendNowAria":"Send into this turn","composer.sendNowTitle":"Send into the running turn — read after the current step (Enter)","composer.sendNowTitleCmdEnter":"Send into the running turn — read after the current step (⌘/Ctrl+Enter)","composer.sendTimingAria":"Send timing","composer.sendTiming.send":"Send","composer.sendTiming.sendHint":"Default timing: {timing}","composer.sendTiming.now":"Send now","composer.sendTiming.nowHint":"Send into the running turn — read after the current step","composer.sendTiming.timed":"Send {timing}","composer.footerBase":"Enter to send · Shift+Enter for a new line","composer.footerBaseCmdEnter":"⌘/Ctrl+Enter to send · Enter for a new line","composer.working":"Working","composer.workingLastResponse":"Working · last response {ago}","composer.continuing":"{count} more still running","composer.queued":"Queued","composer.queuedWait":"Queued · waiting {seconds}s","composer.queuedOpen":"See why","composer.queuedTitle":"Request queued","composer.queuedBody":"This request is waiting for governance admission and will continue automatically.","composer.queuedWaited":"Waited: {seconds}s","composer.queuedModel":"Model: {model}","composer.queuedRules":"Blocking rules: {rules}","composer.queuedUsageLink":"Manage limit rules in Usage","composer.sendNowHint":"⌘/Ctrl+Enter sends now","composer.sendNowHintCmdEnter":"⌘/Ctrl+Shift+Enter sends now","composer.footerSkills":" · / for skills and commands","composer.footerShortcuts":" · / for shortcuts","composer.footerFiles":" · @ for files","composer.footerHistory":" · ↑ for history","composer.slash.skills":"Skills & commands","composer.slash.shortcuts":"Actions","composer.slash.empty":"No matching commands — Enter sends the line as a plain prompt.","composer.slash.skillsFailed":"Could not load skills — showing shortcuts only.","composer.slash.submitCatalogFailed":"Could not load skills. Please try sending again.","composer.slash.notActivatable":"not activatable","composer.slash.skillBadge":"skill","composer.slash.previewAria":"Skill or command details","composer.slashAria":"Slash commands","composer.filesAria":"Files","composer.filesHeader":"Files — mentioned as @path in the prompt","composer.filesFailed":"File search failed — the picker is unavailable for this session.","composer.filesSearching":"Searching files…","composer.filesEmpty":"No files in this workspace.","composer.filesNoMatch":'No files match "{query}".',"composer.removeAttachment":"Remove {name}","composer.slash.plan":"Toggle plan mode for the next prompt","composer.slash.goal":"Set the goal objective","composer.slash.new":"Start a new session","composer.slash.fork":"Fork this session into a copy","composer.slash.btw":"Ask a side question without interrupting this session","composer.slash.undo":"Undo the last turn","composer.slash.compact":"Compact older context into a summary","transcript.bridgedOrigin":"From {where} · {location}","transcript.bridgedOriginUnknown":"another home","transcript.bridgedLocation.local":"this machine","transcript.bridgedLocation.network":"over the network","transcript.bridgedOpen":"Open {label}","transcript.you":"You","transcript.loadEarlier":"Load earlier messages","transcript.historyUnverified":"History completeness is unverified","transcript.historyUnverifiedHint":"Earlier messages may be missing. This view is not a complete record.","transcript.copyTitle":"Copy markdown","transcript.copy":"copy","transcript.copyLink":"link","transcript.copyLinkTitle":"Copy a link to this message","transcript.edit":"edit","transcript.editTitle":"Edit this message and resend it","transcript.editSubmit":"Resend","transcript.editSubmitTitle":"Replace the original message and rerun from here","transcript.editAttachmentsNote":"Full replacement — attachments are not carried over.","transcript.regenerate":"re-run","transcript.regenerateTitle":"Re-run this turn: context is rewound to here and the turn runs again. Files and external actions already taken are not undone.","transcript.fork":"fork","transcript.forkTitle":"Fork the session from this message","transcript.actionsBusyTitle":"Available once the current turn finishes","transcript.showMore":"Show more","transcript.showLess":"Show less","transcript.detail.showAll":"Show full output","transcript.detail.tailOnly":"Showing the last lines only.","transcript.detail.loading":"Loading full output…","transcript.detail.failed":"Could not load the full output.","transcript.detail.retry":"Try again","transcript.content.more":"Continue loading","transcript.content.loading":"Loading more…","transcript.content.failed":"Could not load the rest of this content.","transcript.content.percent":"{percent}% loaded","transcript.content.items":"{shown} / {total} items loaded","transcript.content.morePending.one":"{count} more part cut off","transcript.content.morePending.other":"{count} more parts cut off","transcript.content.actionAria":"Continue loading {field}","transcript.content.entitiesFailed":"Could not load the earlier items.","transcript.content.command":"Command","transcript.content.steps":"Steps","transcript.content.remainder.summary":"Session content not loaded yet","transcript.content.remainder.session":"Session info","transcript.content.remainder.agents":"Agents","transcript.content.original":"Download original","transcript.content.originalAria":"Download the original {field}","transcript.content.originalSaving":"Saving…","transcript.content.originalSaved":"Saved","transcript.content.originalRetry":"Try the download again","transcript.content.originalCancel":"Cancel","media.detail.open":"Load {name}","media.detail.loading":"Loading {name}…","media.detail.failed":"Could not load {name}. Try again","media.detail.action":"Load preview","rail.tasksNotLoaded.one":"{count} earlier task not loaded","rail.tasksNotLoaded.other":"{count} earlier tasks not loaded","transcript.annotation.panelAria":"Annotation","transcript.annotation.commentAria":"Annotation comment","transcript.annotation.quoteOnly":"Quoted selection","transcript.annotation.remove":"Remove annotation","transcript.annotation.save":"Save comment","transcript.fold.worked":"Worked","transcript.fold.steps.one":"{count} step","transcript.fold.steps.other":"{count} steps","transcript.fold.thoughts.one":"{count} thought","transcript.fold.thoughts.other":"{count} thoughts","transcript.fold.notes.one":"{count} note","transcript.fold.notes.other":"{count} notes","transcript.fold.failed":"{count} failed","transcript.fold.aria":"Earlier work in this turn, {summary}. Expand or collapse","transcript.annotation.quoteOnlyChip":"Quoted","transcript.annotation.openAria":"Open note on “{quote}”","transcript.annotation.bubbleAria.one":"View the {count} note on this message","transcript.annotation.bubbleAria.other":"View the {count} notes on this message","transcript.annotation.bubbleSummary":"{count} annotations","transcript.annotation.notesAria":"Notes on this message","annotationTray.show":"Show","annotationTray.edit":"Edit note","annotationTray.editAria":"Edit note on “{quote}”","annotationTray.save":"Save","annotationTray.cancel":"Cancel","locate.notFound":"Could not find that message in this conversation.","locate.turnNotFound":"Could not find turn {turn} in this conversation. It may have been undone or compacted away.","locate.loading":"Loading earlier messages…","locate.failedLoad":"Could not load the earlier messages that contain it.","find.aria":"Find in this conversation","find.placeholder":"Find in this conversation","find.count":"{current} / {total}","find.noResults":"No results","find.caseSensitive":"Match case","find.wholeWord":"Match whole word","find.previous":"Previous match","find.next":"Next match","find.close":"Close find","find.earlier":"{count} more in earlier messages","find.loadedOnly":"Only loaded messages were searched","find.lookBack":"Search further back","find.stop":"Stop","find.compacted":"{count} more in compacted history","find.openGlobal":"Search all messages","transcript.floorsAria":"Jump to a message","transcript.floorTickAria":"Go to message {index}: {preview}","transcript.orphanedSubagent":"From a branch removed by an edit","transcript.thinking":"Thinking","transcript.systemReminder":"System reminder","transcript.reminder.directive":"Reminder · standing instruction","transcript.reminder.renew":"Reminder · context renewal ahead","transcript.reminder.rebuild":"Reminder · rebuild notes","transcript.reminder.history":"Reminder · earlier conversation","transcript.reminder.progress":"Reminder · update notes","transcript.reminder.triggers":"Triggers {triggers}","transcript.reminder.epoch":"Window {epoch}","transcript.reminder.userTurn":"For {turn}","transcript.system.injection":"Injected context","transcript.system.trigger":"System trigger","transcript.system.compaction":"Compaction summary","transcript.system.hook":"Hook result","transcript.system.cron":"Scheduled job","transcript.system.cronMissed":"Missed scheduled job","transcript.system.task":"Task","transcript.system.retry":"Retry","transcript.system.agent":"Agent message","transcript.system.generic":"System","transcript.kikiHook.label":"Kiki added context for {engine}","transcript.kikiHook.labelPrepared":"Kiki prepared a handoff for {engine}","transcript.kikiHook.prepared":"Prepared, not injected","transcript.kikiHook.preparedBody":"{engine} compacts on its own. Kiki readied this handoff for after compaction; this hook sent nothing.","transcript.kikiHook.listSep":", ","transcript.kikiHook.event.SessionStart":"Session start","transcript.kikiHook.event.UserPromptSubmit":"With the message","transcript.kikiHook.event.PreCompact":"Before compaction","transcript.kikiHook.event.PostCompact":"After compaction","transcript.kikiHook.event.PreInvocation":"Before the call","transcript.kikiHook.event.PreToolUse":"Before a tool","transcript.kikiHook.event.Stop":"End of turn","transcript.kikiHook.part.memory":"Memory","transcript.kikiHook.part.goal_state":"Goal","transcript.kikiHook.part.todo_state":"Notes and todos","transcript.kikiHook.part.handoff":"Handoff","transcript.kikiHook.part.task":"Task result","transcript.kikiHook.part.agent_message":"Agent message","transcript.kikiHook.part.injection":"Reminder","transcript.kikiHook.part.other":"Context","transcript.skill.skill":"Skill · {name}","transcript.skill.plugin":"Plugin · {name}","transcript.marker.compaction":"Context compacted","transcript.marker.compactionSummarize":"Context compacted · summarized","transcript.marker.compactionFresh":"Context compacted · fresh start","transcript.marker.compactionFallback":"Fresh start conditions were not met · summarized instead","transcript.marker.compactionRescue":"Context compacted · fresh start, fell back from summarize","transcript.marker.reason.history_unavailable":"Conversation history could not be read for the fresh start.","transcript.marker.reason.notes_missing":"The agent has no working notes for the handoff.","transcript.marker.reason.notes_previous_window":"The working notes cover an earlier context window.","transcript.marker.reason.projected_too_large":"The handoff would use too much of the new context window.","transcript.marker.reason.manual_instruction":"This compaction included an explicit summary instruction.","transcript.marker.reason.user_input_elided":"A recent user message would be omitted from the handoff.","transcript.marker.reason.new_content_large":"Too much new content followed the notes.","transcript.marker.reason.tool_error":"Recent tool failures need to remain in context.","transcript.marker.reason.non_replayable_result":"Recent external results may not be recoverable from history.","transcript.marker.reason.debug_chain":"The agent is still working through changing debug evidence.","transcript.marker.reason.elided_goal_missing":"The handoff would omit user input, and the notes have no goal.","transcript.marker.reason.multiple_sources":"The handoff depends on several external sources.","transcript.marker.reason.non_text_result":"Recent tool results contain media that the handoff cannot reproduce.","transcript.marker.reason.relay_render_failed":"The fresh-start handoff could not be prepared.","transcript.marker.reason.summarize_failed_relay_rescue":"The summary could not be prepared, so the agent used a fresh start.","transcript.marker.hook":"Hook result","transcript.marker.skill":"Skill","transcript.marker.notice":"Notice","transcript.marker.cron":"Scheduled job","transcript.marker.goal":"Goal updated","transcript.marker.plan":"Plan updated","transcript.marker.interruption":"You stopped this turn","transcript.marker.modelSwitch":"Model changed from {from} to {to}","transcript.failed":"failed","transcript.shell":"Shell","transcript.steps":"Steps · {count}","transcript.stepsAria":"{count} reads, click to expand or collapse","transcript.stepsNoTiming":"no timing recorded","transcript.readRun":"Explored","transcript.step.read":"read","transcript.step.list":"listed","transcript.step.search":"searched","transcript.step.fetch":"fetched","transcript.step.more":"+{count}","transcript.runningAria":"running","transcript.failedAria":"failed","transcript.doneAria":"done","transcript.jumpToLatest":"Jump to latest","transcript.loadingEarlier":"Loading earlier messages…","transcript.olderFailed":"Could not load earlier messages","transcript.retryEarlier":"Retry","transcript.beginning":"beginning of history","transcript.couldNotOpen":"Could not open session","transcript.opening":"Loading…","transcript.openingElapsed":"Loading… {seconds}s elapsed","transcript.blank":"A blank page. Tell kiki what to make.","transcript.blocked":"Blocked","transcript.sending":"Sending…","transcript.stillSending":"Still sending… Do not send this message again.","transcript.steerSending":"Sending into this turn…","transcript.steerWaiting":"Waiting to join","transcript.steerWaitingHint":"lands after the current step","transcript.steerWaitingTitle":"The agent reads this at its next step boundary — after the tool it is running now finishes.","transcript.approvalReadonly":"Approval requested: {action}","transcript.questionReadonly":"This subagent requested input during its run.","transcript.toolCalls.one":"{count} tool call","transcript.toolCalls.other":"{count} tool calls","transcript.thinkingSuffix":"{effort} thinking","transcript.turnWorking":"Working","transcript.durationUnknown":"duration unknown","transcript.turnRetrying":"Provider error ({cause}) — retry {attempt}/{max} in {delay}","transcript.lastRetryFailed":"Last attempt failed ({cause}, {attempt}/{max}): {error}","subagent.lastTurnFailed":"Last turn failed","subagent.lastTurnCancelled":"Last turn cancelled","notice.turnFailedDetail":"Turn failed{detail}","notice.turnCancelledDetail":"Turn cancelled{detail}","transcript.stopped":"Stopped","transcript.stoppedAria":"stopped","transcript.stoppedByYou":"Stopped by you","transcript.interrupted":"Interrupted","transcript.interruptedByRestart":"Interrupted when Kiki restarted","transcript.resume":"Resume","transcript.resumeTitle":"Run this prompt again","transcript.resumeFailed":"Could not resume: {detail}","transcript.ranFor":"Ran for {duration}","transcript.ttft":"TTFT {seconds}s","transcript.tokensPerSecond":"{rate} tok/s","transcript.exec.badge":"{executor} · {protocol}","transcript.exec.degraded":"degraded","transcript.exec.resumeMode":"resume mode: {mode}","transcript.loss.acp_no_step_boundaries":"the external protocol has no step boundaries — the turn shows one synthetic step","transcript.loss.profile_as_user_preamble":"the kiki profile was delivered as a prompt preamble, not a native system prompt","transcript.loss.tool_input_partial":"some tool-call inputs were only partially available","transcript.loss.tool_output_summary_only":"some tool outputs are summaries, not full output","transcript.loss.message_id_missing":"messages without ids were merged together","transcript.loss.usage_context_only":"usage numbers reflect context size, not full token accounting","transcript.loss.unknown_update_dropped":"some unrecognized updates were dropped","transcript.loss.resume_new_session_handoff":"resume fell back to a new session with a handoff summary","transcript.loss.handoff_truncated":"the handoff summary was truncated","transcript.loss.unstable_acp_plan":"plan updates come from an unstable protocol surface","media.attachment":"Attachment","media.viewImage":"View image","media.download":"Download","media.zoomFit":"Fit to screen","media.zoomActual":"Actual size","preview.openFile":"Preview {name}","preview.loading":"Loading…","preview.failed":"Could not load this file","preview.truncated":"Large file — showing the first part only.","preview.loadFullFile":"Load full file","preview.unsupported":"No preview available for this file type.","preview.title":"Preview workspace","preview.resetWidth":"Drag to resize the panel; double-click to reset","preview.toggle":"Preview","preview.toggleAria":"Toggle preview panel","preview.collapse":"Collapse preview panel","preview.fullscreen":"Fullscreen tab","preview.exitFullscreen":"Exit fullscreen","preview.zoomGroup":"Zoom","preview.zoomFit":"Fit width","preview.zoomActual":"100%","preview.empty":"Click a file path in the conversation to preview it here.","preview.closeTab":"Close tab","preview.closeOthers":"Close other tabs","preview.closeAll":"Close all tabs","preview.openAgentFullscreen":"Open {name}","preview.copyAgentId":"Copy agent ID","preview.addToChat":"Add to chat","preview.rendered":"Rendered","preview.source":"Source","preview.save":"Save","preview.saving":"Saving…","preview.saved":"Saved","preview.unsaved":"Unsaved changes","preview.editUnsupported":"Open in the desktop app to edit.","preview.builtinSkillReadOnly":"Built-in · read-only","preview.oversized":"Large file: preview shows only the beginning (up to about 512 KB) and is read-only.","preview.conflictBody":"This file changed on disk since it was loaded.","preview.overwrite":"Overwrite","preview.reload":"Reload","preview.keepEditing":"Keep editing","preview.discardTitle":"Discard unsaved changes?","preview.discardBody":"{name} has unsaved changes.","preview.discardBodyMany":"{count} files have unsaved changes.","preview.discard":"Discard","subagent.status.unknown":"Status unknown","subagent.status.refreshing":"Refreshing…","subagent.status.running":"Running","subagent.status.suspended":"Suspended","subagent.status.completed":"Completed","subagent.status.failed":"Failed","subagent.status.cancelled":"Cancelled","subagent.status.background":"Background","subagent.tools":"{count} tools","subagent.effort":"effort {effort}","subagent.children.one":"{count} child","subagent.children.other":"{count} children","subagent.expandChildren":"Show child agents","subagent.collapseChildren":"Hide child agents","subagent.openAgent":"Open {name}","subagent.depth":"depth {depth}","subagent.event.spawned":"Spawned","subagent.event.resumed":"Resumed","subagent.event.sent":"Input sent","subagent.event.completed":"Completed","subagent.event.failed":"Failed","subagent.event.cancelled":"Cancelled","subagent.expandCard":"Expand card","subagent.collapseCard":"Collapse card","notice.compacting":"Compacting context…","notice.compacted":"Context compacted — {before} → {after} tokens","notice.promptAborted":"Prompt aborted","notice.promptFailed":"Prompt failed","notice.earlierPromptOutcomes":"{count} earlier messages did not complete","transcript.promptOutcome.failed":"Not sent","transcript.promptOutcome.replyFailed":"Reply failed","transcript.promptOutcome.aborted":"Aborted","transcript.promptOutcome.retry":"Send again","transcript.promptOutcome.retryTitle":"Put this message back in the composer","transcript.promptOutcome.details":"Details","transcript.promptOutcome.noDetails":"No failure reason was recorded.","transcript.promptOutcome.locate":"Show","transcript.historyPartial":"Earlier history is unverified and may be incomplete","notice.turnFailed":"Turn failed","ia.approvalNeeded":"Approval needed","ia.planEnter.title":"Enter plan mode?","ia.planEnter.body":"Kiki wants to switch to plan mode to research and propose a plan before acting. If left unanswered, this request is rejected automatically.","ia.plan.title":"Review the plan","ia.plan.bodyLabel":"Proposed plan","ia.plan.choose":"Approach to carry out","ia.plan.note":"Note for the agent (optional)","ia.plan.notePlaceholder":"What should change before it starts?","ia.plan.approve":"Approve plan","ia.plan.approveChoice":"Approve “{option}”","ia.plan.revise":"Ask for changes","ia.plan.reviseNeedsNote":"Write what should change first.","ia.plan.rejectExit":"Reject and leave plan mode","ia.plan.sentApproved":"Plan approved — the agent starts on it","ia.plan.sentRevise":"Changes requested — the agent keeps planning","ia.plan.sentExit":"Plan rejected — plan mode ended","ia.fromSubagent":"from subagent {name}","ia.originUnknown":"source unknown","ia.originCurrentContext":"from the current agent context","ia.remember":"Always allow {tool} in this session","ia.alwaysAllow":"Always allow","ia.alwaysAllow.title":"Save {rule} as a permission rule and approve this call","ia.alwaysAllow.saving":"Saving rule…","ia.alwaysAllow.saved":"Saved {rule} as an allow rule. Future matching calls run without asking.","ia.alwaysAllow.savedShort":"Saved rule","ia.alwaysAllow.manage":"Manage rules","ia.alwaysAllow.undoHint":"Remove in Settings → Permissions","ia.alwaysAllow.failed":"Could not save the rule, so nothing was approved. Approve once, or try again.","ia.reviewer.approved":"Approved by reviewer","ia.reviewer.rejected":"Rejected by reviewer","ia.reviewer.tooltip":"{backend} reviewer · {confidence}% confidence","ia.reviewer.backend.model":"Model","ia.reviewer.backend.jev":"Jev","ia.approve":"Approve","ia.approving":"Approving…","ia.reject":"Reject","ia.rejecting":"Rejecting…","ia.sendFailed":"Could not send the decision — the request may have expired. Try again.","ia.resolution.approved":"Approved","ia.resolution.rejected":"Rejected","ia.resolution.cancelled":"Cancelled","ia.resolution.expired":"Expired","ia.resolution.resolvedElsewhere":"Resolved elsewhere","ia.sentToKikiSuffix":" — sent to kiki","ia.detail.command":"Command","ia.detail.file":"File","ia.detail.url":"URL","ia.detail.search":"Search","ia.detail.subagent":"Subagent","ia.detail.skill":"Skill","ia.detail.details":"Details","ia.kikiAsks":"kiki asks","ia.record.waiting":"Needs you","ia.record.awaitingApproval":"Awaiting approval","ia.record.awaitingAnswer":"Awaiting answer","ia.record.review":"Review","ia.record.reviewAria":"Review this request above the composer","ia.submit":"Submit","ia.sending":"Sending…","ia.dismiss":"Dismiss","ia.dismissed":"Dismissed","ia.sentToKiki":"Sent to kiki","ia.question.answered":"Question answered","ia.question.dismissed":"Question dismissed","ia.question.expired":"Question expired","ia.question.cancelled":"Question cancelled","ia.question.resolvedElsewhere":"Question already handled","ia.question.unavailable":"Question no longer available · answer not sent","ia.question.cancelled.no_consumer":"The question ended when the client disconnected. No answer was sent.","ia.question.cancelled.turn_ended":"The asking turn ended before an answer was received.","ia.question.cancelled.agent_closed":"The session closed before an answer was received.","ia.question.cancelled.aborted":"The question was stopped before an answer was received.","ia.question.answerUnavailable":"The answer is not available in this record.","ia.other":"Other","ia.otherPlaceholder":"Type your answer…","ia.answerFailed":"Could not send the answers: {detail}","ia.answerFailedGeneric":"Could not send — try again.","ia.dismissFailed":"Could not dismiss: {detail}","ia.dismissFailedGeneric":"Could not dismiss — try again.","ia.unanswered.one":"{count} question still unanswered","ia.unanswered.other":"{count} questions still unanswered","ia.external.title":"External agent permission","ia.external.badge":"External agent","ia.external.cancel":"Cancel","ia.external.cancelling":"Cancelling…","ia.external.unknownShape":"This permission request could not be recognized — only cancelling is safe.","ia.external.kind.allowOnce":"Allow once","ia.external.kind.allowAlways":"Always allow","ia.external.kind.rejectOnce":"Reject once","ia.external.kind.rejectAlways":"Never allow","ia.external.changes.one":"{count} granted change","ia.external.changes.other":"{count} granted changes","tc.changes":"Changes","tc.input":"Input","tc.output":"Output","tc.outputError":" · error","tc.errorCode.codex_mcp_approval_denied":"Codex did not run it: this MCP tool needs approval, and Full access does not ask. Kiki’s own tools are not affected; to run this one, switch to Ask every time or Auto.","tc.noInput":"(no input)","tc.truncated":"… (truncated)","tc.exit":"exit {code}","tc.plan":"plan","tc.planPath":"plan — {path}","tc.planEnter":"enter plan mode","tc.todoItems.one":"{count} item","tc.todoItems.other":"{count} items","tc.openSpawnedAgent":"Open {name}","tc.spawnedAgents":"Spawned agents","cb.collapse":"Collapse","cb.expand":"Expand","cb.copyTitle":"Copy code","cb.copy":"copy","cb.copied":"copied","cb.showLess":"Show less","cb.viewMore":"View more ({count} lines)","diff.unchanged.one":"… {count} unchanged line","diff.unchanged.other":"… {count} unchanged lines","diff.unchangedSome":"… unchanged lines","sv.approvals.one":"{count} approval","sv.approvals.other":"{count} approvals","sv.questions.one":"{count} question","sv.questions.other":"{count} questions","sv.working":"working","sv.hidePanel":"Hide panel","sv.showPanel":"Show panel","sv.togglePanelAria":"Toggle panel","sv.openMenuAria":"Open session menu","sv.renameAria":"Rename this session","sv.actionsAria":"Session actions","sv.backToSession":"← Back to session","tc.sem.raw":"Raw data","tc.sem.more":"More results were not returned","tc.sem.showAll":"Show all {count}","tc.sem.listSep":", ","tc.sem.wire.running":"Running","tc.sem.wire.completed":"Completed","tc.sem.wire.failed":"Failed","tc.sem.wire.timed_out":"Timed out","tc.sem.wire.killed":"Stopped","tc.sem.wire.lost":"Lost","tc.sem.wire.interrupted":"Interrupted","tc.sem.wire.cancelled":"Cancelled","tc.sem.wire.blocked":"Blocked","tc.sem.wire.unknown":"Unknown","tc.sem.wire.untracked":"Not tracked","tc.sem.wire.cold":"Asleep","tc.sem.wire.idle":"Idle","tc.sem.wire.active":"Active","tc.sem.wire.in_progress":"In progress","tc.sem.wire.paused":"Paused","tc.sem.wire.done":"Done","tc.sem.wire.superseded":"Superseded","tc.sem.wire.user":"You","tc.sem.wire.assistant":"Kiki","tc.sem.wire.tool":"Tool","tc.sem.wire.session":"This session","tc.sem.wire.workspace":"Workspace","tc.sem.wire.embedded":"Kiki data","tc.sem.wire.global":"Global","tc.sem.wire.process":"Process","tc.sem.wire.agent":"Agent","tc.sem.wire.question":"Question","tc.sem.wire.auto":"Automatic","tc.sem.wire.fixed":"Fixed path","tc.sem.web.fetchFailed":"Failed","tc.sem.untitled":"Untitled","tc.sem.noText":"(no text)","tc.sem.notFound":"Not found","tc.sem.timedOut":"Timed out","tc.sem.interrupted":"Interrupted","tc.sem.turnN":"Turn {n}","tc.sem.jumpTurn":"Go to turn {n}","tc.sem.openThread":"Open thread","tc.sem.openAgent":"Open agent","tc.sem.openBoard":"Open task board","tc.sem.openCron":"Open scheduled prompts","tc.sem.thread.create":"New thread","tc.sem.thread.started":"started with a prompt","tc.sem.thread.list":"List threads","tc.sem.thread.read":"Read thread","tc.sem.thread.send":"Send to","tc.sem.thread.wait":"Wait on","tc.sem.thread.undeliverable":"Not delivered","tc.sem.thread.activity.terminal":"turn ended","tc.sem.thread.activity.attention":"needs attention","tc.sem.thread.activity.lifecycle":"thread changed","tc.sem.thread.activity.undeliverable":"message not delivered","tc.sem.agent.run":"Run agent","tc.sem.agent.resume":"Resume agent","tc.sem.agent.list":"List agents","tc.sem.agent.send":"Message agent","tc.sem.agent.notify":"Notify parent","tc.sem.task.list":"Running tasks","tc.sem.task.listAll":"All tasks","tc.sem.task.output":"Task output","tc.sem.task.stop":"Stop task","tc.sem.task.wait":"Wait for task","tc.sem.task.anyTask":"any task","tc.sem.task.none":"No tasks","tc.sem.history.search":"Search history","tc.sem.history.read":"Read history","tc.sem.history.ref":"saved reference","tc.sem.history.listTurns":"List turns","tc.sem.history.listAgents":"List agents in history","tc.sem.history.partial":"Partial","tc.sem.history.noMatch":"No match","tc.sem.board.list":"Read task board","tc.sem.board.overview":"Board overview","tc.sem.board.show":"Read card","tc.sem.board.preview":"Board storage","tc.sem.board.create":"New card","tc.sem.board.update":"Update card","tc.sem.cron.create":"Schedule prompt","tc.sem.cron.list":"Scheduled prompts","tc.sem.cron.delete":"Remove schedule","tc.sem.cron.once":"once","tc.sem.goal.create":"Set goal","tc.sem.goal.get":"Check goal","tc.sem.goal.none":"no goal","tc.sem.goal.budget":"Goal budget","tc.sem.goal.update":"Goal status","tc.sem.todo.update":"Update todos","tc.sem.todo.read":"Read todos","tc.sem.todo.clear":"Clear todos","tc.sem.todo.notes":"Update notes","tc.sem.todo.progress":"{done}/{total}","tc.sem.todo.inProgress":"in progress","tc.sem.todo.done":"done","tc.sem.select":"Load tools","tc.sem.select.unknown":"Unknown: {names}","tc.sem.web.search":"Web search","tc.sem.web.job":"Search job","tc.sem.web.fetch":"Fetch page","tc.sem.ask":"Ask","tc.sem.ask.waiting":"Waiting for you","tc.sem.ask.answered":"Answered","tc.sem.ask.dismissed":"Dismissed","tc.sem.plan.enter":"Enter plan mode","tc.sem.plan.exit":"Finish plan","tc.sem.plan.approved":"Approved","tc.sem.skill":"Use skill","tc.sem.field.thread":"Thread","tc.sem.field.profile":"Profile","tc.sem.field.cwd":"Folder","tc.sem.field.delivery":"Delivery","tc.sem.field.agent":"Agent","tc.sem.field.task":"Task","tc.sem.field.model":"Model","tc.sem.field.kind":"Kind","tc.sem.field.exitCode":"Exit code","tc.sem.field.reason":"Reason","tc.sem.field.outputPath":"Full output","tc.sem.field.card":"Card","tc.sem.field.priority":"Priority","tc.sem.field.scope":"Scope","tc.sem.field.revision":"Revision","tc.sem.field.job":"Job","tc.sem.field.cron":"Schedule","tc.sem.field.nextRun":"Next run","tc.sem.field.status":"Status","tc.sem.field.turnsUsed":"Turns used","tc.sem.field.criterion":"Done when","tc.sem.threads.one":"{count} thread","tc.sem.threads.other":"{count} threads","tc.sem.turns.one":"{count} turn","tc.sem.turns.other":"{count} turns","tc.sem.activities.one":"{count} update","tc.sem.activities.other":"{count} updates","tc.sem.agents.one":"{count} agent","tc.sem.agents.other":"{count} agents","tc.sem.tasks.one":"{count} task","tc.sem.tasks.other":"{count} tasks","tc.sem.hits.one":"{count} hit","tc.sem.hits.other":"{count} hits","tc.sem.cards.one":"{count} card","tc.sem.cards.other":"{count} cards","tc.sem.cronJobs.one":"{count} schedule","tc.sem.cronJobs.other":"{count} schedules","tc.sem.results.one":"{count} result","tc.sem.results.other":"{count} results","tc.sem.questions.one":"{count} question","tc.sem.questions.other":"{count} questions","tc.sem.toolCalls.one":"{count} tool call","tc.sem.toolCalls.other":"{count} tool calls","sv.sessionCrumb":"Session","sv.parentAgents":"Parent","sv.siblingAgents":"Siblings","sv.childAgents":"Children","sv.moreSiblingAgents":"Show {count} more siblings","sv.moreChildAgents":"Show {count} more children","sv.showFewerAgents":"Show fewer","sv.noRelatedAgents":"No related agents.","sv.relatedAgents":"Related agents","sv.spawnInstruction":"Instruction from the main agent","sv.spawnInstructionFrom":"Instruction from {agent}","sv.openParent":"Open parent agent","sv.subagentNote":"Subagent transcript — interaction cards resolve for the whole session","sv.agentReadOnly":"This agent page is read-only; send, queue, and skill actions stay on the session.","sv.agentContext":"context {tokens}","sv.agentTokens":"{tokens} tokens cumulative","sv.historyUnavailable":"history unavailable","sv.agentHistoryMore":"Loaded from the server transcript. Older turns exist beyond this page.","sv.agentHistoryLive":"Loaded from the server transcript; live events fill activity while it runs.","sv.agentHistoryUnavailable":"The server transcript was unavailable. Showing events captured by this client; earlier or disconnected activity may be missing.","sv.agentHistoryLoading":"Loading the server transcript. Live events captured by this client are shown meanwhile.","sv.resyncFailed":"Session recovery failed — retry manually","sv.resyncing":"Resyncing…","sv.sendPaused":"Sending is paused until the session is in sync.","sv.resyncRetryNow":"Retry now","sv.abortMaybeRunning":"Could not abort — the turn may still be running","sv.abortFailed":"Abort failed","sv.abortStillRunning":" — this turn may still be running","sv.approvalShortcutFailed":"Approval shortcut failed: {detail}","sv.stopTaskFailed":"Could not stop the task: {detail}","sv.cancelQueuedFailed":"Could not cancel the queued prompt: {detail}","sv.editQueuedFailed":"Could not replace the queued prompt: {detail}","sv.skillGone":'Skill "{name}" is no longer available — reopen the / menu to refresh.',"sv.skillReference":'Skill "{name}" is a reference skill — it cannot be run from the composer.',"sv.notificationBody":"An approval is waiting for you.","sv.ariaAwaitingApproval":"Awaiting approval","sv.ariaAwaitingAnswer":"Awaiting answer","sv.ariaWorking":"Kiki is working","sv.closePanel":"Close panel","sv.imageEcho":"[image]","sv.fileEcho":"[file]","sv.queueBar.one":"{count} queued","sv.queueBar.other":"{count} queued","sv.queueAria":"Queued prompts","sv.queueSendNow":"Send into this turn","sv.queueSendNowTitle":"Insert this prompt into the running turn — read at the next safe step boundary","sv.queueRemove":"Remove","sv.queueRemoveTitle":"Take this prompt out of the queue","sv.queueClearAll":"Clear all","sv.queueClearAllTitle":"Remove every queued item — messages and model switches","sv.queueClearTitle":"Clear {count} queued items?","sv.queueClearBody":"Each queued message and model switch will be removed. Items that fail stay in the queue so you can retry.","sv.queueClearFailed":"{failed} of {total} queued items could not be cleared — they remain in the queue.","sv.queueNoText":"(attachment only)","sv.queueEdit":"Edit","sv.queueEditAria":"Edit queued prompt","sv.queueExpandAria":"Show or hide the queued prompts","sv.queueRecovered.title":"Queue restored","sv.queueRecovered.body.one":"{count} queued message was restored with this session and is waiting for your go-ahead.","sv.queueRecovered.body.other":"{count} queued messages were restored with this session and are waiting for your go-ahead.","sv.queueRecovered.confirm":"Resume queue","sv.queueRecovered.dismiss":"Later","sv.queueRecovered.failed":"Could not resume the queue: {detail}","sv.steerQueuedFailed":"Could not send the queued prompt into this turn: {detail}","sv.steerFailed":"Couldn’t send now: {detail}. The message is back in the composer.","sv.steerRefused":"This message changes a mode, so it needs a turn of its own. It’s back in the composer; send it again to queue it.","sv.steerUnknown":"Couldn’t confirm the message arrived: {detail}. Check the timeline before sending it again.","sv.steerTurnEnded":"The turn ended first — this message runs next as its own turn.","sv.sessionGone":"This session no longer exists — taking you back to start a new session.","sv.approveAll":"Approve all","sv.approveAllTitle":"Approve {count} pending requests?","sv.approveAllBody":"This sends an approve decision for every pending approval in this session.","sv.rejectAll":"Reject all","sv.approvalBatchMoreAria":"More batch actions","sv.rejectAllTitle":"Reject {count} pending requests?","sv.rejectAllBody":"This sends a reject decision for every pending approval in this session.","sv.scrollToApprovals":"Jump to the first pending approval","sv.batchResolved.one":"{count} approval resolved.","sv.batchResolved.other":"{count} approvals resolved.","sv.batchFailed":"{failed} of {total} decisions could not be sent — the rest went through.","term.menuItem":"Terminal","term.toggleAria":"Toggle terminal panel","term.showPanel":"Show terminal","term.hidePanel":"Hide terminal","term.panelAria":"Terminal panel","term.tabsAria":"Terminal tabs","term.new":"New terminal","term.killAria":"Kill terminal","term.killConfirm":"sure?","term.closePanel":"Close terminal panel","term.resizeAria":"Drag to resize the terminal panel","term.screenAria":"Terminal output, text mirror","term.loading":"Loading terminals…","term.loadFailed":"Could not load terminals: {detail}","term.createFailed":"Could not start a terminal: {detail}","term.empty":"No terminals yet. Start a shell in this session’s workspace — it keeps running while you chat.","term.attaching":"attaching…","term.reconnecting":"reconnecting…","term.exited":"Process exited (code {code})","term.exitedNoCode":"Process exited","term.restart":"Restart","term.scrollbackIncomplete":"Earlier output is unavailable — showing retained output only.","term.unavailable":"The terminal stream is unavailable. Retry after the connection recovers.","new.title":"New session","new.tagline":"What should we work on?","new.workspace":"Workspace","new.autoWorkspace":"Automatically create a workspace","new.autoWorkspaceHint":"Kiki will create a new folder in Kiki Home when you send.","new.or":"or","new.noWorkspaces":"No workspaces yet","new.creating":"Creating the session…","new.startersAria":"Starter prompts","new.starter.explain":"Explain this folder","new.starter.explainDraft":"Give me a quick tour of this folder: what it is, how it is organised, and where to start reading.","new.starter.fixTest":"Fix a failing test","new.starter.fixTestDraft":"Find a failing test in this project, explain why it fails, and propose a fix.","new.starter.webSearch":"Set up web search","new.starter.webSearchDraft":"Help me set up web search for Kiki, step by step.","new.noTargetHint":"Choose another workspace, select automatic creation, or enter an absolute project path.","new.browse":"Browse folder…","new.firstRunHint":"Choose a project folder, or send now and kiki will create a workspace in Kiki Home.","new.setupTitle":"Connect a model first","new.setupBody":"No provider is configured yet, so kiki has no model to answer with. Sign in with OAuth, or add your own API key.","new.setupSignIn":"OAuth sign-in","new.setupApiKey":"Add an API key","hero.chooseWorkspace":"Choose workspace","hero.workspaceLoading":"Loading workspaces…","hero.workspaceAria":"Choose the workspace for this session","new.headline":"Your agents, your call.","new.startHere":"Start here","new.starter.explainNamed":"Walk me through {name}","new.starter.review":"Review recent changes","new.starter.reviewDraft":"Look at the recent changes in this project (git status and the latest commits). Summarise what was done and what is still unfinished.","rail.goal":"Goal","rail.subagents":"Subagents","rail.todos":"Todos","rail.tasks":"Background tasks","rail.session":"Session","rail.goalUnavailable":"Goal state unavailable from this server.","rail.noGoal":"No active goal.","rail.noSubagents":"No subagents in this session.","rail.noTodos":"No todo list yet.","rail.noTasks":"No background tasks.","rail.resizeAria":"Drag to resize the panel; double-click to reset","rail.todosDone":"{done}/{total} done","rail.updatedPrefix":"updated {time}","rail.doneWhen":"Done when: {criterion}","rail.goalUsage":"{turns} turns · {tokens} tokens","rail.stop":"Stop","rail.stopTitle":"Terminate task","rail.model":"Model","rail.directory":"Directory","rail.messages":"Messages","rail.updatedRow":"Updated","rail.sessionNoName":"Unnamed directory","rail.tokens":"Tokens","rail.tokensInOut":"{input} in · {output} out","rail.turns":"Turns","rail.agentTask":"Subagent task","rail.panelOf":"Panel of {name}","rail.ownerMain":"Main agent","rail.needsInput":"Needs you","rail.result":"Result","rail.elapsed":"Elapsed","rail.toolsRow":"Tools","rail.childrenRow":"Children","rail.taskStatus.running":"running","rail.taskStatus.completed":"completed","rail.taskStatus.failed":"failed","rail.taskStatus.cancelled":"cancelled","rail.moreBelow":"{count} more below","rail.mode.aria":"Right panel mode","rail.mode.default":"Standard","rail.mode.cockpit":"Cockpit","rail.questionTag":"Q","rail.needsYou.more":"{count} more","rail.todos.hideDone":"Hide finished","rail.todos.doneCount":"{count} finished","rail.todo.srDone":"Done: ","rail.todo.srInProgress":"In progress: ","rail.todo.srPending":"Not started: ","rail.feed.title":"Activity","rail.feed.dispatched":"Dispatched","rail.feed.reported":"reported","rail.feed.failed":"failed","rail.feed.compacted":"Context compacted","rail.feed.earlier":"{count} earlier","rail.capabilities.title":"Capabilities","rail.capabilities.summary":"Tools {tools} · Skills {skills} · Subagents {subagents} · Extensions {extensions}","rail.capabilities.unavailable":"Capabilities can't be read right now.","rail.cron.title":"Scheduled tasks here","rail.cron.empty":"No scheduled tasks","rail.cron.more":"{count} more","rail.cron.loadMore":"Load more","rail.cron.manage":"Manage scheduled tasks","rail.cron.unavailable":"Scheduled tasks can't be read right now.","rail.cron.pauseFailed":"Could not pause that scheduled task.","rail.cron.resumeFailed":"Could not resume that scheduled task.","rail.cockpit.cacheHit":"Cache hits","rail.cockpit.compactions":"Compactions","rail.cockpit.toolCalls":"Tool calls","rail.cockpit.now":"now","rail.cockpit.state.running":"Running","rail.cockpit.state.needsYou":"Waiting on you","rail.cockpit.state.suspended":"Suspended","rail.cockpit.state.done":"Done","rail.cockpit.state.failed":"Failed","rail.cockpit.state.stopped":"Stopped","rail.cockpit.summary.suspended":"{count} suspended","rail.cockpit.duration.underMinute":"<1m","rail.cockpit.lanes.aria":"Agent timeline","rail.cockpit.lane.untimed":"No start time recorded","rail.cockpit.close":"Exit cockpit","tasks.title":"Tasks","tasks.back":"Back to session","tasks.viewAll":"View all","tasks.loading":"Loading tasks…","tasks.loadMore":"Load more tasks","tasks.loadFailed":"Could not load tasks","tasks.empty":"No background tasks in this session yet.","tasks.emptyFilter":"No tasks with this status.","tasks.filter.all":"All","tasks.stopping":"Stopping…","tasks.expand":"Show task details","tasks.collapse":"Hide task details","tasks.noOutput":"No output captured yet.","tasks.outputLoading":"Loading output…","tasks.field.id":"Task ID","tasks.field.kind":"Type","tasks.field.created":"Created","tasks.field.started":"Started","tasks.field.finished":"Finished","tasks.field.duration":"Duration","tasks.field.command":"Command","tasks.field.output":"Output (tail)","tasks.kind.bash":"Shell","tasks.kind.subagent":"Subagent","tasks.kind.tool":"Tool","tasks.count.one":"{count} task","tasks.count.other":"{count} tasks","activity.toggle":"Activity","activity.expandAria":"Expand the activity panel","activity.collapseAria":"Collapse the activity panel","activity.running":"Running","activity.waiting":"Needs you","activity.runningCount.one":"{count} running","activity.runningCount.other":"{count} running","activity.waitingCount.one":"{count} needs you","activity.waitingCount.other":"{count} need you","activity.queuedCount.one":"{count} queued","activity.queuedCount.other":"{count} queued","activity.tasksCount.one":"{count} task","activity.tasksCount.other":"{count} tasks","activity.background":"background","activity.turnTitle":"Turn running for {elapsed}","activity.queueChip.one":"+{count} queued","activity.queueChip.other":"+{count} queued","sidebar.backgroundTasks.one":"{count} background task running","sidebar.backgroundTasks.other":"{count} background tasks running","usage.title":"Usage","usage.nav":"Usage","usage.navAria":"Open the usage dashboard","usage.axis.granularity":"Granularity","usage.axis.range":"Range","usage.axis.dimension":"Breakdown","usage.granularity.day":"Daily","usage.granularity.week":"Weekly","usage.granularity.month":"Monthly","usage.granularity.session":"Session","usage.granularity.five_hour":"5h window","usage.range.today":"Today","usage.range.last_7_days":"Last 7 days","usage.range.this_week":"This week","usage.range.this_month":"This month","usage.range.all":"All history","usage.range.custom":"Custom","usage.dimension.model":"Model","usage.dimension.agent":"Agent","usage.dimension.project":"Workspace","usage.dimension.session":"Session","usage.allHistoryChip":"All history · no time filter applied","usage.customRange.start":"Start date","usage.customRange.end":"End date","usage.customRange.invalid":"Start date must be earlier than the end date.","usage.workspace.label":"Workspace","usage.workspace.all":"All workspaces","usage.includeArchived":"Include archived","usage.loading":"Loading usage…","usage.loadFailed":"Could not load usage","usage.card.cost":"Total cost","usage.card.tokens":"Total tokens","usage.card.sessions":"Sessions","usage.card.turns":"Turns","usage.tokens.input":"Input","usage.tokens.output":"Output","usage.tokens.cacheRead":"Cache read","usage.tokens.cacheWrite":"Cache write","usage.cacheHit":"{percent}% cache hit","usage.cacheHitHint":"cache read / total input (input + cache read + cache write)","usage.kpi.estimatedCost":"Estimated cost","usage.kpi.partialUnknown":"partially unknown","usage.kpi.pricingUnknown":"pricing unknown","usage.partialCost":"Partial estimate: pricing is unavailable for {models}.","usage.pricing.open":"Model prices","usage.pricing.title":"Model prices","usage.pricing.description":"The prices the cost estimate uses, per million tokens. Set your own to override the catalog.","usage.pricing.filter":"Filter models","usage.pricing.model":"Model","usage.pricing.input":"Input","usage.pricing.output":"Output","usage.pricing.cacheRead":"Cache read","usage.pricing.cacheWrite":"Cache write","usage.pricing.optional":"optional","usage.pricing.currency":"Currency","usage.pricing.billingModel":"Priced as","usage.pricing.source.override":"Your price","usage.pricing.source.litellm":"LiteLLM catalog","usage.pricing.source.vendored":"Built-in catalog","usage.pricing.source.unknown":"No price","usage.pricing.unknownPrice":"Unknown","usage.pricing.unknownCount":"{count} without a price","usage.pricing.loading":"Loading prices…","usage.pricing.loadFailed":"Prices could not be loaded.","usage.pricing.empty":"No models yet. Add a model, or use one, and it shows up here.","usage.pricing.noMatch":"No model matches “{query}”.","usage.pricing.unitNote":"Prices are per million tokens. A blank cache price is unknown, not free.","usage.pricing.nonUsd":"Prices in another currency are saved as entered and not converted, so this model’s USD estimate shows as unknown.","usage.pricing.invalidPrice":"Enter input and output prices as numbers of zero or more.","usage.pricing.invalidCurrency":"Use a three-letter currency code, such as USD.","usage.pricing.save":"Save price","usage.pricing.saving":"Saving…","usage.pricing.clear":"Use the catalog price","usage.strip.today":"Today","usage.strip.burnRate":"Burn rate","usage.strip.burnRateValue":"{rate} tok/h","usage.strip.currentSession":"Current session","usage.incomplete.sessionCap":"The scan reached its session limit. Older sessions are not included.","usage.incomplete.recordBudget":"The scan reached its record limit. Some usage is not included.","usage.incomplete.deadline":"The scan ran out of time. Only part of the usage is included.","usage.incomplete.sessions":"{count} sessions have incomplete usage records.","usage.trend.title":"Trend","usage.trend.metric.cost":"Cost","usage.trend.metric.tokens":"Tokens","usage.trend.clickHint":"Select a bucket for the session drilldown","usage.drilldown.title":"Sessions in this bucket","usage.drilldown.turns":"{count} turns","usage.drilldown.unknownTurns":"{count} records without turn attribution","usage.drilldown.turnIdsTruncated":"turn list truncated","usage.drilldown.turnId":"turn {id}","usage.drilldown.turnHint":"Open the session at this turn","usage.drilldown.sessionsTruncated":"More sessions exist than the drilldown limit shows.","usage.tab.sessions":"Sessions","usage.tab.fiveHour":"5h rhythm","usage.sessions.loadMore":"Load more ({shown} of {total})","usage.sessions.deepLinkChip":"Located session","usage.sessions.locating":"Locating the session in older pages…","usage.sessions.notInPage":"That session is outside the current result set.","usage.col.session":"Session","usage.col.workspace":"Workspace","usage.col.model":"Model","usage.col.cost":"Cost","usage.col.tokens":"Tokens","usage.col.turns":"Turns","usage.col.updated":"Updated","usage.col.provider":"Provider","usage.col.profile":"Profile","usage.dim.unknown":"unknown (legacy records)","usage.dim.mixedAttribution":"multiple","usage.agent.subagents":"{count} subagents","usage.fiveHour.hint":"The 5h rhythm view needs the 5h window granularity.","usage.fiveHour.switch":"Switch to 5h window","usage.accounting.missing":"Token usage was not reported for {count} records; their tokens and cost are unknown.","usage.accounting.legacyZero":"{count} older records show zero usage that cannot be verified.","usage.accounting.knownSubtotal":"Only recorded tokens are included in the subtotal.","usage.rescan.action":"Rescan all","usage.rescan.hint":"Scan all historical sessions; this may take a while.","usage.rescan.starting":"Starting…","usage.rescan.running":"Rescanning…","usage.rescan.progress":"{scanned}/{total} sessions","usage.rescan.records":"{count} records read","usage.rescan.completed":"Rescanned {count} sessions","usage.rescan.failed":"Rescan failed. Try again.","usage.rescan.startFailed":"Could not start. Try again.","usage.rescan.progressFailed":"Progress unavailable. Reconnecting…","usage.reliability.title":"About these totals","usage.reliability.unknown":"Some usage is unknown","usage.reliability.unpriced":"Pricing is missing for {count} models; some costs are unknown.","usage.reliability.costUnknown":"Some costs could not be estimated.","usage.reliability.coverage":"Coverage","usage.reliability.coverageEmpty":"No usage records yet","usage.reliability.scanned":"Sessions scanned","usage.reliability.incomplete":"Incomplete sessions","usage.reliability.unknownPrices":"Models without pricing","usage.reliability.deleted":"Deleted sessions","usage.reliability.deleted.included":"Deleted sessions are included","usage.reliability.deleted.excluded":"Deleted sessions are not included","usage.reliability.costSource":"Cost is a local estimate from recorded token prices","usage.reliability.none":"None","usage.empty":"No usage in this range yet.","usage.viewAll":"View all","usage.sessionChip.one":"{count} session","usage.sessionChip.other":"{count} sessions","usage.kpi.cacheHit":"Cache hit rate","usage.kpi.cacheHitNone":"No input tokens yet","usage.kpi.perSession":"{cost} per session","usage.kpi.inputOutput":"{input} in · {output} out","usage.composition.fresh":"Fresh input","usage.trend.metric.cache":"Cache hit","usage.trend.other":"Other","usage.trend.peak":"Peak {value}","usage.breakdown.byProvider":"By provider","usage.breakdown.byProfile":"By role","usage.breakdown.unknownProvider":"unknown provider","usage.breakdown.unknownProfile":"no role","usage.col.cacheHit":"Cache hit","usage.col.share":"Share","usage.reliability.complete":"Complete","usage.reliability.partial":"Partial","context.viewInUsage":"View this session in Usage","switcher.pages":"Pages","switcher.action.usage":"Open usage dashboard","switcher.action.settings":"Open settings","st.title":"Settings","st.section.general":"General","st.section.ai":"Models & providers","st.section.connection":"Connection","st.section.agents":"Agents","st.section.subagents":"Subagent rules","st.section.skills":"Skills","st.section.mcp":"MCP","st.section.plugins":"Plugins","st.section.automation":"Tools & automations","st.section.search":"Search & retrieval","st.section.workspaces":"Workspaces","st.section.tasks":"Tasks","st.section.advanced":"Advanced","st.section.about":"About & updates","st.group.modelsAgents":"Models & agents","st.group.capabilities":"Capabilities","st.group.connection":"Connection & remote","st.group.workspace":"Workspaces","st.group.advanced":"Advanced","st.scope.label":"Scope","st.scope.app":"App","st.scope.server":"Server","st.scope.workspace":"Workspace","st.scope.appliesTo":"Applies to:","st.scope.device":"this device","st.scope.connectedServer":"connected server","st.scope.diagnostic":"diagnostic view","st.purpose.general":"Language, composer, and desktop behaviour for this device. Every change applies immediately.","st.purpose.ai":"Manage models, providers, sign-in, and new-session defaults.","st.purpose.agents":"Create and edit main and subagents in one list. Workspace agents apply only to their workspace.","st.purpose.subagents":"Set subagent defaults, model rules, tools, and runtime limits. Edit agent definitions under Agents.","st.purpose.search":"Choose search sources and page-fetching behavior; manage credentials and timeouts.","st.purpose.connection":'Which server this app talks to and how long it waits. A whole remote environment is set up under "Connect to a remote Kiki" on the Workspaces page.',"st.unknown.title":"This setting does not exist","st.unknown.body":"“{section}” is not a settings page. Search below to find a setting.","st.nav.browse":"Browse sections","st.badge.restartRequired":"Restart required","st.badge.desktopOnly":"Desktop only","st.savedTick":"Saved","st.help.label":"More about this","st.draft.unsaved":"Unsaved changes","st.search.placeholder":"Search settings…","st.search.aria":"Search settings","st.search.empty":"No settings match “{query}”.","st.language.title":"Language","st.language.hint":"Interface language for this device. Applies immediately.","st.appearance.title":"Appearance","st.appearance.theme":"Theme","st.appearance.theme.light":"Light","st.appearance.theme.dark":"Dark","st.appearance.theme.system":"Follow system","st.appearance.themeHint":"Applies immediately on this device. Following the system switches with your OS setting.","st.skin.title":"Skin","st.skin.hint":"Pick an interface palette. Light and dark stay a separate choice above.","st.skin.builtin":"Built in","st.skin.user":"From your themes folder","st.skin.desc.paper":"Warm paper, brown ink, a rust mark. Kiki’s own voice.","st.skin.desc.linen":"Unbleached cloth and ink-blue thread. Plain, calm, cool.","st.skin.desc.graphite":"Brushed steel and a cyan signal. Cool, exact, quiet.","st.skin.desc.forest":"Pine shade and moss, with a lantern for what needs you.","st.skin.desc.claret":"Wine and cocoa after dark, blush paper by day.","st.skin.desc.heather":"Lavender haze, dusty mauve, a sage mark. Colour without shouting.","st.skin.desc.nocturne":"Dark only. A clear-night navy lit by starlight gold.","st.skin.desc.contrast":"Solid borders, AAA text, one bold signal per role. Nothing implied.","st.skin.darkOnly":"Dark only","st.skin.lightOnly":"Light only","st.skin.activeDarkOnlyNotice":"This skin only ships a dark variant. Light keeps the default palette.","st.skin.activeLightOnlyNotice":"This skin only ships a light variant. Dark keeps the default palette.","st.skin.missing":"This skin is no longer in the themes folder. Kiki is using the default palette.","st.skin.folder":"Themes folder","st.skin.folderHint":"Drop skin files into the themes folder, then reload the list.","st.skin.remoteFolderHint":"The themes folder is located in the current environment.","st.skin.reload":"Reload skins","st.skin.empty":"No skin files yet.","st.skin.unsupported":"Custom skins are not available right now. Built-in skins still work.","st.skin.skipped.one":"1 file in the folder was skipped.","st.skin.skipped.other":"{count} files in the folder were skipped.","st.skin.skippedDetails":"Skipped files","st.skin.tweaks":"Adjustments","st.skin.tweaksHint":"Fine-tune the skin you picked. Changes preview live; save to keep them.","st.skin.accent":"Accent color","st.skin.accentReset":"Use the skin's accent","st.skin.font":"Interface font","st.skin.fontMono":"Code font","st.skin.fontSkin":"From the skin","st.skin.fontSkinNamed":"From the skin · {face}","st.font.custom":"Another font…","st.font.nameLabel":"Font name, as installed","st.font.placeholder":"e.g. Inter, LXGW WenKai","st.font.placeholderMono":"e.g. Fira Code, Sarasa Mono SC","st.font.present":"{name} is installed and in use.","st.font.missing":"{name} is not detected on this device. Fallback font is in use.","st.font.typeHint":"Type a family name; it applies as you type.","st.font.sample.sans":"Settings, sessions and buttons · 设置、会话与按钮 0123","st.font.sample.mono":"const answer = items.filter((x) => x !== null); // 注释","st.font.sample.prose":"A long answer reads like a printed page. 长回答读起来像一页印刷品。","st.skin.radius":"Corner radius","st.skin.density":"Density","st.skin.densityCompact":"Compact","st.skin.densityDefault":"Default","st.skin.densityRoomy":"Roomy","st.skin.resetTweaks":"Reset adjustments","st.skin.export":"Export as skin file","st.skin.exportName":"Skin name","st.skin.exportHint":"Saves a skin file you can put in the themes folder or share.","st.skin.exportDone":"Saved {file}","st.skin.exportFailed":"Could not save the file.","st.skin.preview":"Preview","st.skin.previewSample":"The quick brown fox","st.appearance.preview.send":"Send","st.section.appearance":"Appearance","st.purpose.appearance":"How Kiki looks: theme, skin, type and motion. In a space, the theme, skin and type it carries come from that space; motion stays with this device.","st.appearance.colorTitle":"Theme & color","st.appearance.typeTitle":"Type","st.appearance.layoutTitle":"Shape & motion","st.skin.filesTitle":"Skin files","st.appearance.prose":"Assistant replies","st.appearance.proseHint":"Serif sets long answers like a printed page. Sans matches the interface.","st.appearance.prose.serif":"Serif","st.appearance.prose.sans":"Sans","st.appearance.motion":"Motion","st.appearance.motionHint":"Follow system uses your OS reduce-motion setting.","st.appearance.motion.system":"Follow system","st.appearance.motion.reduce":"Reduced","st.appearance.motion.full":"Full","st.appearance.restoreDefaults":"Restore defaults","st.appearance.restored":"Appearance is back to the defaults.","st.appearance.undo":"Undo","st.appearance.previewAria":"Preview of the current appearance","st.appearance.preview.session":"Release notes for 0.31","st.appearance.preview.waiting":"Needs you","st.appearance.preview.otherSession":"Migration spike","st.appearance.preview.time":"6m ago","st.appearance.preview.user":"Summarize what changed since 0.30.","st.appearance.preview.reply":"Three areas moved: settings, skins, and motion. Run the check below before tagging.","st.appearance.preview.composer":"Reply to Kiki…","st.skin.accentHint":"Replaces the skin's accent for dots, focus rings and the main button.","st.skin.plugin":"From plugin {plugin}","st.skin.pack":"From an appearance pack","st.bg.title":"Background","st.bg.hint":"A picture or a short video behind the window. A picture inside an appearance pack travels with the space; one you pick here stays on this device.","st.bg.none":"No background yet.","st.bg.chooseFile":"Choose picture or video","st.bg.replaceFile":"Replace","st.bg.remove":"Remove background","st.bg.fromUrl":"Or paste a link","st.bg.urlPlaceholder":"https://…/picture.webp","st.bg.useUrl":"Use link","st.bg.importing":"Fetching…","st.bg.rejectType":"That file is not a picture or video Kiki can show. Use PNG, JPEG, WebP, AVIF, GIF, MP4 or WebM.","st.bg.rejectContent":"That file’s contents do not match its name. Save it again as a picture or video and retry.","st.bg.rejectSize":"That file is too large. Pictures can be up to {image}, videos up to {video}.","st.bg.urlFailed":"Could not fetch that link: {reason}","st.bg.urlUnsupported":"The connected server cannot fetch links. Download the file and choose it instead.","st.bg.missing":"The background file is gone from this device. Choose it again.","st.bg.notPersistent":"This browser is not keeping files, so the background lasts until you reload.","st.bg.heavyVideo":"This video is larger than 1440p, which uses a lot of graphics memory. A 1080p copy looks the same behind the window.","st.bg.largeVideo":"Large video ({size}). A shorter or lower-bitrate copy saves memory.","st.bg.pausedMotion":"The video is paused on its first frame because reduced motion is on.","st.bg.pausedPower":"The video is paused to save battery.","st.bg.fromPack":"From the pack {name}","st.bg.perTheme":"Separate for light and dark","st.bg.perThemeHint":"Off: one background for both. On: you are editing the {theme} one.","st.bg.fit":"Fit","st.bg.fit.cover":"Fill","st.bg.fit.contain":"Fit","st.bg.fit.tile":"Tile","st.bg.fit.center":"Center","st.bg.alignment":"Anchor","st.bg.alignment.topLeft":"Top left","st.bg.alignment.top":"Top","st.bg.alignment.topRight":"Top right","st.bg.alignment.left":"Left","st.bg.alignment.center":"Center","st.bg.alignment.right":"Right","st.bg.alignment.bottomLeft":"Bottom left","st.bg.alignment.bottom":"Bottom","st.bg.alignment.bottomRight":"Bottom right","st.bg.scope":"Show behind","st.bg.scope.window":"Whole window","st.bg.scope.main":"Conversation","st.bg.scope.sidebar":"Sidebar","st.bg.scopeHint":"Sidebar backgrounds show from tablet width up.","st.bg.opacity":"Picture strength","st.bg.blur":"Blur","st.bg.brightness":"Brightness","st.bg.scrim":"Soften","st.bg.scrimHint":"Lays the window color over the picture so it sits back.","st.bg.surface":"Panel opacity","st.bg.surfaceHint":"Only affects where the background shows through.","st.bg.surfaceRaised":"Only affects where the background shows through. Text areas get a stronger layer automatically.","st.bg.assist":"Readability assist","st.bg.assistHint":"Adds a soft layer under text so it stays easy to read on any picture.","st.bg.assistOff":"Text may be hard to read on this picture.","st.bg.surfaceBlur":"Panel blur","st.bg.more":"More adjustments","st.pack.title":"Appearance packs","st.pack.hint":"A pack bundles colors with pictures or video. Packs live in the themes folder on the machine running the server.","st.pack.empty":"No packs installed. Import a .zip pack to add one.","st.pack.import":"Import pack","st.pack.importing":"Installing…","st.pack.imported":"Installed {name}.","st.pack.replaced":"Updated {name}.","st.pack.importFailed":"Could not install the pack: {reason}","st.pack.exists":"A pack named {id} is already installed.","st.pack.replaceConfirm":"Replace it","st.pack.use":"Use pack","st.pack.inUse":"In use","st.pack.export":"Export","st.pack.exported":"Saved {file}","st.pack.delete":"Delete","st.pack.deleteTitle":"Delete {name}?","st.pack.deleteBody":"This removes the pack folder and its pictures from the server. Export it first if you want a copy.","st.pack.deleteConfirm":"Delete pack","st.pack.deleted":"Deleted {name}.","st.pack.video":"Video","st.pack.colors":"Colors","st.pack.size":"{size}","st.pack.unsupported":"Appearance packs are not supported in this environment.","st.pack.remoteHint":"Packs are installed in the current environment.","st.defaults.title":"New-session defaults","st.defaults.permissionMode":"Default permission mode","st.defaults.permission.manual":"Ask every time","st.defaults.permission.manualHint":"Approves nothing on its own; you decide each step.","st.defaults.permission.auto":"Auto","st.defaults.permission.autoHint":"Works on its own; asks before sensitive or external actions.","st.defaults.permission.review":"Approve for me","st.defaults.permission.reviewHint":"A reviewer checks sensitive actions first; uncertain decisions still come to you.","st.defaults.permission.yolo":"Full access","st.defaults.permission.yoloHint":"Approves everything, including access to sensitive files.","st.reviewer.title":"Reviewer","st.reviewer.hint":"In Approve for me mode, this reviewer checks actions Auto would otherwise ask you to approve. Uncertain responses ask you instead.","st.reviewer.backend":"Reviewer backend","st.reviewer.modelBackend":"Configured model","st.reviewer.jevBackend":"Jev · TypeSafe","st.reviewer.model":"Reviewer model","st.reviewer.modelEmpty":"Choose a model","st.reviewer.key":"TypeSafe API key","st.reviewer.keyHint":"Selecting Jev sends up to 3 recent user messages, the command or file paths and operation, file byte sizes and SHA-256 digests, the policy reason and the workspace path to TypeSafe. File contents and diffs are not sent. Without a key, reviews ask you instead.","st.reviewer.timeoutMs":"Timeout (ms)","st.reviewer.allowThreshold":"Allow confidence","st.reviewer.denyThreshold":"Deny confidence","st.reviewer.categories":"Checks","st.reviewer.category.policy_compliance":"Follows user request and permission policy","st.reviewer.category.no_secret_egress":"Does not expose secrets","st.reviewer.category.no_irreversible_damage":"Avoids irreversible damage","st.reviewer.category.no_outward_effect":"Avoids unapproved external effects","st.reviewer.category.prompt_injection_absent":"Not directed by untrusted content","st.reviewer.invalid":"Choose a model, at least one check, a 100–30,000 ms timeout, and confidence thresholds from 0.5 to 1.","st.reviewer.saved":"Reviewer settings saved.","st.secret.source.kiki":"Saved in Kiki","st.secret.source.environment":"From environment variable {name}","st.secret.source.environmentAny":"From a server environment variable","st.secret.source.local":"From nb-search secrets.json","st.secret.source.none":"Not set","st.secret.source.browser":"Saved in this browser","st.secret.showLabel":"Show {label}","st.secret.hideLabel":"Hide {label}","st.secret.copyLabel":"Copy {label}","st.secret.copied":"Copied","st.secret.edit":"Edit","st.secret.override":"Override in Kiki","st.secret.clear":"Clear","st.secret.undoClear":"Undo","st.secret.clearPending":"Will be removed when you save","st.secret.overrideHint":"Saving stores this value in Kiki and uses it instead","st.secret.editPlaceholder":"Enter a new value","st.secret.newPlaceholder":"Paste a value","st.secret.revealError":"Could not load the value. Reload settings and retry.","st.secret.copyError":"Could not copy. Show the value and copy it manually.","st.secret.saved":"Credential saved.","st.secret.cleared":"Credential removed.","st.secret.headerValueLabel":"Value of {name}","st.secret.envValueLabel":"Value of {name}","st.secret.envName":"Variable","st.secret.headerName":"Header","st.secret.remove":"Remove","st.secret.addEnv":"Add variable","st.secret.removeRow":"Remove {name}","st.secret.bearerHint":"Read from the server environment. To use a different token, clear the reference and add an Authorization header.","st.secret.bearerValue":"Bearer token value","st.plan.title":"Plan mode defaults","st.plan.hint":"New sessions can start by proposing a plan before they act.","st.defaults.planMode":"Default to entering plan mode","st.defaults.planGate":"Require approval when the model changes plan mode","st.defaults.planGateTimeout":"Plan-mode approval timeout (seconds)","st.defaults.planGateHint":"When on, entering or leaving plan mode waits for your approval in Ask-every-time mode; Auto, Approve-for-me and Full-access modes do not wait. Unanswered entry requests are rejected after this timeout. Minimum 5 seconds.","st.defaults.planGateTimeoutInvalid":"Timeout must be at least 5 seconds.","st.defaults.planModeHint":"New sessions start in plan mode: the model proposes a plan before acting. Whether it waits for your confirmation depends on the permission mode.","st.defaults.planGateTimeoutHint":"Only used while approval is required. Unanswered entry requests are rejected after this many seconds.","st.defaults.hint":"Applies to sessions created after the change.","st.defaults.globalTitle":"Default models","st.defaults.globalModelLabel":"Default model","st.defaults.pickModel":"Browse available models","st.defaults.tabHint":"Defaults for brand-new sessions; sessions already running keep their own choices.","st.defaults.globalHint":"Which model each job uses. Applies on pick; running sessions keep their own model.","st.composer.title":"Composer & session","st.composer.questions":"Questions from the agent","st.composer.questionsDontBlock":"Don’t block","st.composer.questionsBlock":"Block","st.composer.sendShortcut":"Send shortcut","st.composer.shortcutEnter":"Enter sends · Shift+Enter newline","st.composer.shortcutCmdEnter":"⌘/Ctrl+Enter sends · Enter newline","st.composer.shortcutEnterHint":"While Kiki is working, Enter queues your message and ⌘/Ctrl+Enter sends it into the running turn.","st.composer.shortcutCmdEnterHint":"While Kiki is working, ⌘/Ctrl+Enter queues your message and ⌘/Ctrl+Shift+Enter sends it into the running turn.","st.composer.persistDrafts":"Persist composer drafts","st.composer.worktreeConfirm":"Ask before turning on a worktree","st.composer.worktreeConfirmHint":"Opening the worktree switch on the new-session page first explains the directory and branch; off means it turns on without asking.","st.composer.persistDraftsHint":"When off, drafts stay in this app run only. They are not written to or restored from disk; a refresh or restart clears them.","st.transcript.foldSteps":"Fold consecutive reads","st.transcript.foldStepsHint":"Three or more reads, searches, or fetches in a row fold into one summary line. Edits, commands, and messages always stay visible.","st.desktop.title":"Desktop behaviour","st.desktop.notifications":"Show approval notifications","st.desktop.tray":"Hide to tray","st.desktop.trayDesc":"Keep Kiki and its local backend running.","st.desktop.quit":"Quit Kiki","st.desktop.quitDesc":"Exit Kiki and stop its local backend.","st.desktop.browserHint":"Install and open the Kiki desktop app to change native window and notification behaviour.","st.connections.intro":"Where Kiki gets its models: an account you sign in to, a hosted API, or a server on this machine.","st.connect.methodAria":"How to connect","st.connect.apiTitle":"API key or local server","st.connect.apiBody":"Any service that speaks a supported protocol, including Ollama or LM Studio.","st.connect.accountTitle":"Sign in with an account","st.connect.accountBody":"Use a subscription you already have. No key needed.","st.connect.serviceAria":"How to name the service","st.connect.sourceDirectory":"From the directory","st.connect.sourceManual":"Enter it myself","st.connections.add":"Add connection","st.catalog.title":"Add from the provider directory","st.catalog.intro":"Pick a service from models.dev to fill in its address and model list, or switch to entering it yourself.","st.catalog.searchPlaceholder":"Search providers","st.catalog.searchAria":"Search the provider directory","st.catalog.loading":"Loading the directory…","st.catalog.loadFailed":"Could not load the provider directory: {detail}","st.catalog.empty":"The directory has no providers right now.","st.catalog.noMatch":"No provider matches “{query}”.","st.catalog.configured":"Configured","st.catalog.models.one":"{count} model","st.catalog.models.other":"{count} models","st.catalog.guessed":"protocol inferred","st.catalog.guessedHint":"The directory does not name this provider’s protocol; Kiki inferred it. Run a connection test after importing.","st.catalog.rejectedFallback":"This version of Kiki cannot connect to this provider.","st.catalog.reject.unknownExplicitType":"The directory names a provider protocol this version does not support.","st.catalog.reject.proprietarySdk":"This provider only offers its own SDK, which Kiki cannot use.","st.catalog.reject.emptyBaseUrl":"This provider has no address, and none was given.","st.catalog.reject.placeholderBaseUrl":"The address given to this provider still holds a placeholder.","st.catalog.unavailable":"Not supported","st.catalog.add":"Add","st.catalog.reimport":"Re-import","st.catalog.localId":"Local id (optional)","st.catalog.localIdInvalid":"Start with a letter or digit; use only letters, digits, “-”, “_” and spaces.","st.catalog.baseUrlRequired":"Required: this provider has no fixed address.","st.catalog.envHint":"Leave empty to use {name} from the server environment.","st.catalog.refreshNotice":"“{id}” already exists. Importing again rewrites its connection and model aliases from the directory.","st.catalog.importSubmit":"Import {name}","st.catalog.reimportSubmit":"Re-import {name}","st.catalog.importing":"Importing…","st.catalog.importFailed":"Import failed: {detail}","st.catalog.imported.one":"Imported {name} with {count} model.","st.catalog.imported.other":"Imported {name} with {count} models.","st.quota.title":"Account quota","st.quota.intro":"What each signed-in account has left with its provider. This is the provider’s allowance, not this session’s token use.","st.quota.usageLink":"See session usage","st.quota.summary":"Plan total","st.quota.limit":"Limit","st.quota.window.minute":"per {n} min","st.quota.window.hour":"per {n} h","st.quota.window.day":"per {n} d","st.quota.window.week":"per {n} wk","st.quota.usedOf":"{used} / {limit}","st.quota.usedOnly":"{used} used","st.quota.resetsAt":"Resets {when}","st.quota.remainingPercent":"{n}% left","st.quota.remainingCount":"{n} left","st.quota.unknown":"This provider does not report a quota.","st.quota.none":"The account reports no limits.","st.quota.loading":"Reading quota…","st.quota.refresh":"Refresh","st.quota.refreshing":"Refreshing…","st.quota.failed":"Could not read the quota: {detail}","st.quota.balance":"Balance {amount}","st.quota.monthly":"this month {used} of {limit}","st.connections.addTitle":"Add a connection","st.connections.emptyTitle":"No connections yet","st.connections.emptyBody":"Add one below to start using models. You can add more later and switch between them per session.","st.connections.kind.account":"Account","st.connections.kind.api":"API","st.connections.kind.local":"Local server","st.connections.modelCount":"{count} models","st.connections.statusOk":"Connected","st.connections.statusError":"Can’t connect","st.connections.statusNeedsKey":"Needs a key","st.connections.statusSetup":"Not set up","st.connections.errorTitle":"The last request to this connection failed","st.connections.errorGeneric":"The server reported an error for this connection.","st.connections.errorFix":"Check the Base URL and key, then test the connection again.","st.connections.signOut":"Sign out","st.connections.test":"Test connection","st.connections.testing":"Testing…","st.connections.testingHint":"Sending one short request with the saved settings.","st.connections.neverTested":"Not tested yet. A test sends one short request to a model on this connection.","st.connections.testOk":"Test passed","st.connections.testFailed":"Test failed","st.connections.testedAgo":"Last tested {time}","st.connections.testFailedTitle":"The last connection test failed","st.connections.fixAuth":"The key was refused. Paste a current key, save, then test again.","st.connections.fixNotFound":"The address or model was not found. Check the Base URL and the model’s remote ID.","st.connections.fixRateLimit":"The service is limiting requests. Wait a moment, then test again.","st.connections.fixServer":"The service returned an error on its side. Try again later.","st.connections.fixModel":"The model on this connection could not be used. Check its remote ID under Models.","st.connections.fixNoModel":"Add a model to this connection, then test again.","st.connections.quotaLine":"{label}: {amount}","st.connections.quotaPercent":"{n}% left","st.connections.quotaCount":"{n} left","st.connections.quotaResets":"Resets {time}","st.advanced.disclosure":"Advanced","st.providers.advancedSummary":"Request identity · image handling · request defaults","st.models.advancedSummary":"Remote ID · capabilities · images · parameters · aliases · limits","st.providerExtras.title":"Model list, headers and environment","st.providerExtras.modelSource":"Model list source","st.providerExtras.sourceInherit":"Provider type default","st.providerExtras.sourceStatic":"Configured only","st.providerExtras.sourceStaticHint":"Use the models listed here; refresh never adds any.","st.providerExtras.sourceDiscover":"Discover from the API","st.providerExtras.sourceDiscoverHint":"Refresh asks the provider which models it serves.","st.providerExtras.sourceOauth":"Sign-in catalog","st.providerExtras.sourceOauthHint":"Models come from the signed-in account.","st.providerExtras.headers":"Request headers","st.providerExtras.headersHelp":"Sent with every request to this provider. Values can be secrets, so saved values are never shown again; enter a new one to replace it.","st.providerExtras.addHeader":"Add header","st.providerExtras.env":"Environment fallbacks","st.providerExtras.envHelp":"Provider-style names such as KIMI_API_KEY, used when the key or base URL is not set. Saved values are never shown again.","st.providerExtras.addEnv":"Add variable","st.providerExtras.none":"None set.","st.providerExtras.nameAria":"{label} name","st.providerExtras.nameRequired":"Enter a name for this value.","st.providerExtras.valueLabel":"Value of {name}","st.providerExtras.stored":"Saved in Kiki · value hidden","st.providerExtras.notStored":"Not saved yet","st.providerExtras.replacePlaceholder":"Type a new value to replace","st.providerExtras.valuePlaceholder":"Value","st.providerExtras.remove":"Remove {name}","st.providerExtras.undoRemove":"Keep {name}","st.providerExtras.removePending":"Removed when you save","st.providerExtras.oauth":"Sign-in credential: stored in {storage} · {state}","st.providerExtras.storageFile":"a file in the Kiki home","st.providerExtras.storageKeyring":"the system keyring","st.providerExtras.signedIn":"signed in","st.providerExtras.signedOut":"not signed in","st.modelEngine.title":"Engine fields","st.modelEngine.aliases":"Other names","st.modelEngine.aliasesHelp":"Extra names that resolve to this model, for example an old key after a rename.","st.modelEngine.aliasesAria":"Other names for {model}","st.modelEngine.maxInput":"Max input tokens","st.modelEngine.maxOutput":"Max output tokens","st.modelEngine.contextBudget":"Context budget","st.modelEngine.sizesHelp":"Input limit when it is below the window; output cap (Anthropic only); a lower ceiling for the usable context. Empty means not set.","st.modelEngine.unset":"Not set","st.modelEngine.offEffort":"Effort sent for Off","st.modelEngine.reasoningKey":"Reasoning field","st.modelEngine.adaptive":"Adaptive thinking","st.modelEngine.adaptiveInherit":"Automatic","st.modelEngine.adaptiveOn":"On","st.modelEngine.adaptiveOff":"Off","st.modelEngine.thinkingHelp":"Off effort: the value that really turns thinking off for models that reason by default. Reasoning field: OpenAI-compatible gateways only. Adaptive thinking: Anthropic only.","st.modelEngine.requestParams":"Extra request parameters","st.modelEngine.requestParamsHelp":'A JSON object merged into every request, with string, number or true/false values, for example {"store": false}.',"st.modelEngine.overrides":"Pinned fields","st.modelEngine.overridesHelp":"Model settings preserved across catalog refreshes.","st.modelEngine.cognition":"Model cognition","st.modelEngine.cognitionHelp":"Configure prompt guidance files and application modes.","st.modelEngine.promptOverrides":"Prompt overrides","st.modelEngine.promptOverridesHelp":"Override specific prompt text for this model.","st.modelEngine.issueCount":"Use a whole number of tokens, 1 or more, or leave it empty.","st.modelEngine.issueJson":"This is not valid JSON.","st.modelEngine.issueObject":"Use a JSON object in braces, or leave it empty.","st.models.draftAdvancedSummary":"Capabilities · images · request identity","st.models.displayNameLabel":"Display name","st.models.remoteIdLabel":"Remote model ID","st.models.aliasLine":"Referenced in Kiki as {alias}","st.models.capabilitiesHint":"Matches model capabilities. Adjust only if actual behavior differs.","st.models.capReasoning":"Reasoning","st.models.capVision":"Vision","st.models.capTools":"Tools","st.models.newSessionsUse":"New sessions use","st.models.noDefault":"No default model yet","st.models.maintenance":"Maintenance","st.stepper.unitAria":"Unit","st.defaults.row.newSession":"New sessions","st.defaults.row.newSessionHelp":"The model a new session starts with. Change it per session from the composer.","st.defaults.row.title":"Session titles","st.defaults.row.titleHelp":"Names sessions in the background. A small, fast model is enough.","st.defaults.row.titleUnset":"No model picked, so no title is written on its own.","st.defaults.row.subagent":"Subagents","st.defaults.row.subagentHelp":"Used only when a subagent has no other pin: not from the dispatch, route, caller lease or its profile.","st.defaults.row.subagentUnset":"Not set","st.defaults.row.fast":"Fast model","st.defaults.row.fastHelp":"A quick model for the small background jobs an agent runs for itself.","st.defaults.row.fastUnset":"Not set","st.presets.protocolHint.openai":"Most APIs and local servers: DeepSeek, OpenRouter, Ollama, LM Studio…","st.presets.protocolHint.openai_responses":"OpenAI’s newer API with reasoning summaries","st.presets.protocolHint.anthropic":"Claude and Anthropic-compatible gateways","st.presets.protocolHint.google-genai":"Gemini through a Google AI Studio key","st.presets.protocolHint.vertexai":"Gemini through Google Cloud","st.account.title":"Accounts you sign in to","st.account.aside":"{count} available","st.account.signedOut":"Signed out of {method} in Kiki. Its models were removed here; other apps are unaffected.","st.account.signedIn":"Connected","st.account.signIn":"Sign in","st.account.signInAgain":"Sign in again","st.account.signInWith":"Sign in with {method}","st.account.loading":"Loading sign-in options…","st.account.none":"This server offers no account sign-in.","st.account.inProgress":"Signing in…","st.account.connectionLabel":"Sign-in","st.account.allConnected":"Every account this server offers is already in your connections.","st.account.state.connected":"Connected","st.account.state.reconnect":"Sign-in expired","st.account.state.signIn":"Not signed in","st.account.state.waiting":"Waiting for you","st.account.state.failed":"Sign-in didn’t finish","st.account.detail.reconnect":"The provider no longer accepts this sign-in. Sign in again to use its models.","st.account.detail.denied":"You declined the sign-in on the provider’s page.","st.account.detail.expired":"The code expired before it was approved.","st.account.detail.cancelled":"You cancelled the sign-in.","st.account.detail.failed":"The provider did not confirm the sign-in.","st.account.detail.waiting":"Approve the sign-in in your browser; this updates when it lands.","st.account.method.kimi-code":"Use your Kimi Code subscription","st.account.method.github-copilot":"Use your GitHub Copilot subscription","st.account.method.openai-codex":"Use your ChatGPT account for Codex","st.account.method.grok-build":"Use your Grok Build account","st.source.title":"Where the sign-in comes from","st.source.kiki":"Kiki holds its own sign-in for {method}.","st.source.localOriginal":"Reuse the {app} sign-in on this machine","st.source.localOriginalBody":"Kiki uses the sign-in {app} already has on this machine and renews it when it runs out. {app} is not started, and signing in here does not sign you out there.","st.source.localOriginalBodySpent":"Kiki can use the sign-in {app} has on this machine, and renews it when it runs out. {app} is not started, and signing in here does not sign you out there.","st.source.probe":"Check this machine","st.source.probing":"Checking…","st.source.advanced":"Look somewhere else on the server","st.source.homeDirLabel":"Server directory","st.source.homeDirHint":"Leave empty to look where {app} keeps it by default. This is the machine Kiki’s server runs on, which is not always the one you are looking at.","st.source.foundAccount":"Found {account} on this machine.","st.source.foundAccountUnknown":"Found a sign-in on this machine, but it does not say which account it belongs to.","st.source.connect":"Use this sign-in","st.source.connecting":"Connecting…","st.source.connected":"This connection now uses the sign-in already on this machine.","st.source.detachHint":"Kiki will stop using that sign-in. It stays on this machine, and {app} is unaffected.","st.source.detached":"Kiki no longer uses that sign-in. It is still there, and {app} is unaffected.","st.source.detach":"Stop using it","st.source.storage":"Kept in {storage}.","st.source.storageKeyring":"the system keyring","st.source.storageFile":"a file on disk","st.source.storageEncrypted":"an encrypted store","st.source.storageEphemeral":"memory only, so it will not be here after a restart","st.source.renews":"Kiki renews it when it runs out.","st.source.blockNoAccount":"No sign-in for this account is on this machine.","st.source.blockSignedOut":"The sign-in on this machine is signed out. Sign in with {app}, then check again.","st.source.blockUnsupported":"This machine keeps its {app} sign-in somewhere Kiki cannot read.","st.source.blockUnreadable":"Kiki could not read the sign-in on this machine.","st.source.blockAccountChanged":"The sign-in on this machine is now a different account. Check again to see which.","st.source.blockRefreshFailed":"Renewing the sign-in on this machine failed. Sign in with {app}, then check again.","st.source.stale":"What this machine has changed. Check it again before connecting.","st.providers.groupAccount":"Account connections","st.presets.searchAria":"Search services by name","st.presets.searchPlaceholder":"Search DeepSeek, Kimi, Ollama…","st.presets.protocols":"Choose a protocol","st.presets.shortcuts":"Quick starts","st.presets.matches":"Matching services","st.presets.localHint":"This service may not require an API key. Check its settings.","st.presets.empty":"No match for “{query}”. Choose a protocol and enter its base URL.","st.ai.tab.providers":"Connections","st.models.source":"Provider","st.models.reasoning":"Reasoning","st.models.vision":"Vision","st.ai.tab.models":"Models","st.ai.tab.defaults":"Defaults","st.modelMigration.title":"Legacy model parameter migration","st.modelMigration.hint":"Preview model parameters before migration. Changes only take effect upon confirmation.","st.modelMigration.preview":"Preview migration","st.modelMigration.previewing":"Checking…","st.modelMigration.apply":"Apply previewed changes","st.modelMigration.applying":"Applying…","st.modelMigration.applyConfirmTitle":"Apply model parameter migration?","st.modelMigration.applyConfirmBody":"Migrate only valid parameters and back up current configuration automatically.","st.modelMigration.applyConfirmAction":"Back up and apply","st.modelMigration.restore":"Restore backup","st.modelMigration.restoring":"Restoring…","st.modelMigration.restoreConfirmTitle":"Restore this config backup?","st.modelMigration.restoreConfirmBody":"This replaces the current config with the exact saved bytes. Subsequent edits prevent restoration; confirm the backup identifier and preview again before restoring.","st.modelMigration.restoreConfirmAction":"Restore exact backup","st.modelMigration.changesTitle":"Proposed copies","st.modelMigration.changeRow":"{model}: {fields}","st.modelMigration.needsReviewTitle":"Not converted — review manually","st.modelMigration.needsReviewRow":"{model}: {reason}","st.modelMigration.noChanges":"No safe changes to apply. Existing settings remain unchanged.","st.modelMigration.applied":"Applied {count} model update(s). A config backup was written — preview migration again to list backups and restore one.","st.modelMigration.restored":"Backup restored. Preview again before any further migration.","st.modelMigration.backupListTitle":"Saved configuration backups","st.modelMigration.conflict":"Config changed. Preview again before applying or restoring; no newer edits were overwritten.","st.modelMigration.failed":"Migration failed. Inspect the config and backups before retrying.","st.modelMigration.reasonInvalidModel":"The model entry is not a table.","st.modelMigration.reasonInvalidParameters":"Existing parameters are not a table.","st.modelMigration.reasonInvalidValue":"Legacy {field} cannot be copied without changing meaning.","st.modelMigration.reasonDiffers":"Existing parameters.{field} differs from the older value.","st.modelMigration.reasonAmbiguous":"Legacy {field} is invalid or ambiguous.","st.modelMigration.reasonDefaultEffort":"Default thinking effort setting is preserved.","st.modelMigration.reasonMaxOutputSize":"Maximum output size setting is preserved.","st.models.defaultTitle":"Available models","st.models.catalogHint":"Star a model to make it the global default for new sessions — its provider becomes the default provider too.","st.models.providerLabel":"Default provider","st.models.providerDefault":"Provider default","st.models.providerDefaultHint":"Used only when a session on this provider does not name a model; edited inside the provider on the Connections tab.","st.models.emptyCatalog":"No models yet — connect a provider first, then pull or define its models.","st.models.goProviders":"Go to Connections","st.catalogRefresh.title":"Add models from your connections","st.catalogRefresh.alias":"Local model alias","st.catalogRefresh.saveHint":"This suggestion is not configured yet. Check the alias and context size, then save to create the model.","st.catalogRefresh.hint":"Click Get models to query supported models from your providers. Save any suggestion to use it.","st.catalogRefresh.getModels":"Get models","st.catalogRefresh.fetching":"Fetching…","st.catalogRefresh.fetched":"Fetched {count} suggested models from {providers} providers. Choose and save a suggestion below or in its provider’s model list.","st.catalogRefresh.fetchedNone":"Fetched the provider lists — no new suggestions.","st.catalogRefresh.failed":"Could not fetch: {providers}.","st.catalogRefresh.suggestedCount":"{count} suggested","st.catalogRefresh.lastFailure":"last fetch failed: {reason}","st.catalogRefresh.empty":"Nothing fetched in this server process yet. A fetched model stays a suggestion here until you save it.","st.models.loading":"Loading model catalog…","st.models.context":"context","st.compact.rowPoint":"compacts at {tokens}","st.compact.windowLabel":"Context window","st.compact.windowPresets":"Common context windows","st.compact.windowHint":"How much the model actually accepts per request. Set it from the provider’s documentation.","st.compact.windowInputHint":"Usable context is {tokens}; compaction measures against that.","st.compact.pointLabel":"Automatic compaction point","st.compact.pointHint":"When context reaches this, it compacts before the next step. Leave empty to use the global default.","st.compact.pointHintIdentity":"When context reaches this, it compacts before the next step.","st.compact.pointClampHint":"Above limit minus reserve; it will apply as {tokens}.","st.compact.trackLabel":"Compaction point slider","st.compact.trackValue":"Compaction point {tokens}, limit {limit}","st.compact.trackNeedsWindow":"Set the context window first.","st.compact.trackLocked":"No room to adjust in this window.","st.compact.trackOverridden":"The model override sets this point.","st.compact.trackOverridesInvalid":"Fix the model overrides to preview this point.","st.compact.inheritGlobal":"Default {tokens} (global {percent})","st.compact.inheritLegacy":"Default {tokens} (built-in)","st.compact.inputInvalid":"Enter tokens like 400k or 400000, or a share like 73%.","st.compact.globalTitle":"Automatic compaction","st.compact.globalLabel":"Default compaction point","st.compact.globalHint":"Share of each model’s usable window. Models, profiles and sessions can set their own token point.","st.compact.globalLegacyHint":"Currently active at {percent}%. Saving here updates it.","st.compact.globalInvalid":"Enter a percentage between 1 and 100.","st.compact.advanced":"Advanced","st.compact.reserveLabel":"Reserve above the point","st.compact.reserveHint":"Room kept between the compaction point and the limit for the step that crosses it and the compaction itself. Empty uses 50k.","st.compact.profileLabel":"Automatic compaction point","st.compact.profilePlaceholder":"Use the model default","st.compact.profileHint":"Token count for sessions on this profile. Takes priority over the model and global defaults.","st.compact.profileHintBudget":"Token count for sessions on this profile. Its context budget ({tokens}) still caps the usable window.","st.models.default":"Default","st.models.searchPlaceholder":"Search models…","st.models.searchAria":"Search models","st.models.searchEmpty":"No models match “{query}”.","st.models.starAria":"Set {model} as the default model","st.models.starredTitle":"Default model","st.models.unstarredTitle":"Set as default model","st.models.editAria":"Edit parameters for {model}","st.models.editTitle":"Edit parameters","st.models.remoteIdAria":"Remote ID for {model}","st.models.displayNameAria":"Display name for {model}","st.models.contextAria":"Context size for {model}","st.models.capsAria":"Capabilities for {model}","st.models.effortsAria":"Effort levels for {model}","st.models.paramsSaved":"The server saved the parameters for {model}.","st.models.issue.remoteIdMissing":"The model must name the remote model ID sent upstream.","st.models.issue.providerMissing":"The referenced provider is not configured.","st.models.issue.endpointMissing":"The model must reference a provider or declare its own Base URL.","st.models.issue.contextMissing":"Set a maximum context size before using this model.","st.models.issue.protocolUnresolved":"The protocol cannot be resolved from this model or its provider.","st.models.issue.requestIdentityInvalid":"The model request identity policy is invalid.","st.thinking.title":"Default thinking","st.thinking.enable":"Enable thinking by default","st.thinking.placeholder":"for example: high","st.thinking.emptyError":"Choose or enter a non-empty effort value.","st.thinking.hint":"Changes take effect immediately upon saving.","st.thinking.keep":"Earlier reasoning","st.thinking.keepHelp":"Send earlier turns’ reasoning back to the model while Thinking is on. Turning it off saves tokens. Default: keep all.","st.thinking.keepAll":"Keep all","st.thinking.keepNone":"Don’t keep","st.loopLimits.title":"Turn limits","st.loopLimits.maxSteps":"Steps per turn","st.loopLimits.maxStepsHelp":"Stop a turn after this many model steps. Empty means no limit.","st.loopLimits.unlimited":"No limit","st.loopLimits.maxAttempts":"Attempts per step","st.loopLimits.maxAttemptsHelp":"Total tries for a failing step, including the first. Default 5; Developer → Retry can override it.","st.loopLimits.attemptsRequired":"Enter a number of attempts.","st.loopLimits.wholeNumber":"Use a whole number, 0 or more.","st.loopLimits.subagentStrategy":"Subagent context when full","st.loopLimits.subagentStrategyHelp":"How a subagent continues once its context fills up. Default: summarize.","st.conn.connectedTitle":"Connected server","st.conn.version":"Version","st.conn.backend":"Backend","st.conn.reconnect":"Reconnect now","st.conn.tokenHint":"The token is stored only on this device and rides along with every request to prove your identity.","st.conn.statusTitle":"Connection status","st.conn.timeoutTitle":"HTTP requests","st.conn.timeoutLabel":"Request timeout (seconds)","st.conn.timeoutHint":"Applies to subsequent requests. Enter a whole number from {minimum} to {maximum}; opening large sessions may continue beyond this limit.","st.conn.timeoutSaved":"Request timeout saved. New requests use the updated limit.","st.conn.logTitle":"Connection log","st.conn.logBody":"Why the live connection dropped, most recent last: close codes, heartbeat timing, and whether the window was hidden. Kept on this device until the app restarts.","st.conn.logSummary":"{closes} drops · {gaps} paused-timer gaps · {total} entries","st.conn.logEmpty":"No drops recorded since the app started.","st.conn.logCopy":"Copy connection log","st.conn.logCopied":"Connection log copied.","st.conn.logCopyFailed":"Could not copy the log: {reason}","st.conn.ownedTitle":"Owned desktop server","st.conn.ownedBody":"Kiki desktop owns the sidecar lifecycle. Restart waits for shutdown, launches a new sidecar, and verifies its authenticated endpoint before returning.","st.conn.restart":"Restart server","st.conn.restarting":"Restarting server…","st.conn.restarted":"The desktop server restarted and passed its authenticated health check.","st.conn.browserHint":"This action is only available in the desktop app.","st.conn.disconnectTitle":"Disconnect","st.conn.disconnectBody":"Forget this server and return to the connect screen. Sessions stay on the server; only the stored URL and token are cleared.","st.conn.disconnectConfirmTitle":"Disconnect from this server?","st.conn.disconnectConfirmBody":"Kiki forgets the saved URL and token and goes back to the connect screen. Running turns keep going on the server.","st.auth.title":"Authentication","st.auth.statusReady":"Auth service ready","st.auth.statusNotReady":"Auth service not ready","st.auth.summary":"Providers configured: {count} · Default model: {model}","st.auth.managed":"Managed auth: {status}","st.auth.none":"none","st.auth.signIn":"Sign in","st.auth.signOut":"Sign out","st.auth.working":"Working…","st.auth.already":"Already authenticated.","st.auth.removed":"Shared Kimi Code OAuth credentials removed.","st.auth.sharedHomeHint":"Sign in, sign out, and refresh use the selected Kimi Home and affect the same Kimi Code login.","st.auth.signInNextHint":"Sign in below to connect the managed provider, or add your own provider further down.","st.oauth.title":"Device sign-in — {provider}","st.oauth.codeLabel":"Enter this code on the verification page","st.oauth.copy":"Copy code","st.oauth.copied":"Copied","st.oauth.copyFailed":"Copy failed — select the code manually","st.oauth.openPage":"Open verification page","st.oauth.waiting":"Waiting for authorization…","st.oauth.cancel":"Cancel sign-in","st.oauth.cancelling":"Cancelling…","st.oauth.authenticated":"Signed in — provider data refreshed.","st.oauth.denied":"Sign-in was denied.","st.oauth.failed":"The sign-in could not be completed.","st.oauth.expired":"The device code expired.","st.oauth.cancelled":"Sign-in was cancelled.","st.oauth.retry":"Start again","st.oauth.dismiss":"Dismiss","st.providers.title":"Connections","st.providers.loading":"Loading providers…","st.providers.empty":"No providers configured yet.","st.providers.emptyGo":"Add one below: pick a protocol, paste an API key, then pull its models.","st.providers.addTitle":"Connect with an API key","st.providers.addAside":"Choose a protocol or search a service","st.providers.listHint":"Expand a provider to edit its URL, key, and models; the dot shows its last connection state.","st.providers.nextStepHint":"Provider connected? Next, star the model new sessions should start with.","st.providers.nextStepUnconfigured":"{count} still needs an API key — expand it above to finish setup.","st.providers.cannotRewrite":"This provider cannot be rewritten safely: PUT /providers/:id only accepts the six built-in wire types and requires complete model metadata, which this catalog entry does not expose.","st.providers.savedEcho":"Server saved provider {id}.","st.providers.createdEcho":"Server created provider {id}. The secret field was cleared locally.","st.providers.save":"Save provider","st.providers.create":"Create provider","st.providers.creating":"Creating…","st.providers.idLabel":"Provider ID","st.providers.protocol":"Protocol","st.providers.baseUrl":"Base URL","st.requestIdentity.defaultTitle":"Default request identity","st.requestIdentity.defaultLabel":"Default request identity","st.requestIdentity.defaultHint":"Controls request identity fields for all providers and models. Inherit uses the system built-in Kimi Code identity; this is separate from the runtime display name and slug.","st.section.identity":"Request identity","st.purpose.identity":"Which client each request presents itself as, the exact values it sends, and where client versions come from.","st.identity.listTitle":"Identities","st.identity.builtinGroup":"Built in","st.identity.customGroup":"Your identities","st.identity.customEmpty":"Duplicate a built-in identity to edit its User-Agent, headers and body fields.","st.identity.rowUnsaved":"Unsaved","st.identity.duplicate":"Duplicate to edit","st.identity.delete":"Delete identity","st.identity.deleteTitle":"Delete {label}?","st.identity.deleteBody":"The identity is removed from this server. Layers that use it must be switched first.","st.identity.readOnly":"Built-in identity. Duplicate to customize.","st.identity.baseLabel":"Behaves like","st.identity.baseHelp":"Session, thread and cache identifiers follow this client. The fields below are sent on top.","st.identity.nameLabel":"Name","st.identity.versionLabel":"Version","st.identity.versionHelp":"Fills {version} in the fields below.","st.identity.versionMode.track":"Follow release","st.identity.versionMode.fixed":"Fixed","st.identity.versionMode.kiki":"Kiki version","st.identity.versionFixedAria":"Fixed version","st.identity.trackLabel":"Release","st.identity.userAgentLabel":"User-Agent","st.identity.userAgentHelp":"Leave empty to keep the client’s native User-Agent.","st.identity.headersLabel":"Headers","st.identity.headersHelp":"An empty value removes that header. Credentials stay with the provider connection.","st.identity.paramsLabel":"Body fields","st.identity.paramsHelp":"Top-level request fields. Text values may use the same placeholders.","st.identity.addHeader":"Add header","st.identity.addParam":"Add field","st.identity.removeRow":"Remove {name}","st.identity.headerName":"Header name","st.identity.headerValue":"Header value","st.identity.paramName":"Field name","st.identity.paramValue":"Field value","st.identity.placeholders":"Placeholders","st.identity.placeholdersList":"Available placeholders: dynamic variables for version, model, OS, and architecture","st.identity.none":"None","st.identity.previewTitle":"Request preview","st.identity.previewTitleDraft":"Unsaved request preview","st.identity.previewProtocol":"Protocol","st.identity.previewUnsaved":"Requests keep using the saved identity until you save.","st.identity.previewLoading":"Rendering…","st.identity.perRequest":"per request","st.identity.perRequestHelp":"Regenerated for every session or turn; the value shown is a sample.","st.identity.fromProfile":"identity","st.identity.fromLineage":"client","st.identity.noHeaders":"No identity headers for this protocol.","st.identity.suppressedUa":"User-Agent is removed from the request.","st.identity.protocol.openai_responses":"OpenAI Responses","st.identity.protocol.anthropic":"Anthropic Messages","st.identity.protocol.openai":"OpenAI Chat","st.identity.tracksTitle":"Client releases","st.identity.tracksHint":"Checking only stages a newer version. Requests keep the current one until you apply it.","st.identity.track.codex_cli":"Codex CLI","st.identity.track.claude_code":"Claude Code","st.identity.track.grok_cli":"Grok CLI","st.identity.track.opencode_cli":"OpenCode CLI","st.requestIdentity.option.opencode_compatible":"OpenCode-compatible","st.providers.requestIdentityBadge.opencode_compatible":"OpenCode","st.identity.trackCurrent":"In use","st.identity.trackSourceLine":"{origin} · {at}","st.identity.origin.builtin":"Shipped with Kiki","st.identity.origin.npm":"npm registry","st.identity.origin.local_cli":"Installed CLI","st.identity.origin.manifest":"Manifest","st.identity.origin.manual":"Manual","st.identity.checkNpm":"Check online updates","st.identity.checkLocal":"Detect local version","st.identity.checkManifest":"Check release manifest","st.identity.checking":"Checking…","st.identity.candidate":"{version} available from {origin}","st.identity.apply":"Use {version}","st.identity.dismiss":"Dismiss","st.identity.rollback":"Roll back to {version}","st.identity.reset":"Reset to shipped","st.identity.pin":"Pin version","st.identity.pinnedNote":"Pinned. Unpin to apply, roll back or reset.","st.identity.lastCheckOk":"Checked {at}: {version} is current.","st.identity.lastCheckFailed":"Check failed {at}: {error}. The current version stays in use.","st.identity.history":"Earlier versions","st.identity.historyEmpty":"No earlier versions yet.","st.identity.manifestLabel":"Manifest URL","st.identity.manifestHelp":"An https JSON document with a version, and optionally User-Agent and header templates, per release.","st.identity.manifestSave":"Save URL","st.identity.usageTitle":"Where each identity is used","st.identity.usageLayer":"Layer","st.identity.usageSetting":"Setting","st.identity.usageEffective":"Sends as","st.identity.usageGlobal":"Global default","st.identity.usageInherit":"Inherits","st.identity.usageEdit":"Edit setting","st.identity.recentTitle":"Recent requests","st.identity.recentEmpty":"No requests since the server started. Send a message to see what goes out.","st.identity.recentMeta":"{provider} · {model} · {at}","st.identity.copyLabel":"{label} (copy)","st.identity.removedPlaceholder":"empty removes this header","st.identity.manifestHttps":"Use an https:// URL.","st.identity.loadFailed":"Request identities could not be loaded.","st.identity.loading":"Loading identities…","st.identity.nativeUserAgent":"The client’s native User-Agent","st.identity.versionFromTrack":"{track} · {origin}","st.identity.previewVersion":"{version} ({origin}) · {protocol} · sample model {model}","st.identity.previewUnsupported":"This identity cannot send over this protocol: {error}","st.identity.previewHeaders":"All headers and fields ({count})","st.identity.overridesLabel":"Behavior overrides (JSON)","st.identity.overridesHelp":"Adjusts session, thread and cache identifiers on top of the behavior reference, in the same shape as a layer’s custom overrides. Leave empty to use the reference as is.","st.identity.overridesInvalid":"Behavior overrides must be a JSON object, or empty.","st.identity.recentMore":"{count} earlier requests are kept; the latest five are shown.","st.identity.cacheKey":"Cache key","st.requestIdentity.option.claude_code_compatible":"Claude Code-compatible (Messages only)","st.requestIdentity.option.custom":"Custom: {label}","st.providers.requestIdentityBadge.claude_code_compatible":"Claude Code","st.providers.requestIdentityBadge.custom":"Custom","st.requestIdentity.saved":"Default request identity saved.","st.requestIdentity.inheritBuiltin":"Inherit system built-in (Kimi Code)","st.requestIdentity.inheritGlobal":"Inherit global default","st.requestIdentity.inheritProvider":"Inherit provider","st.requestIdentity.option.custom_overrides":"Custom overrides only","st.requestIdentity.option.codex_compatible":"Codex-compatible (Responses only)","st.requestIdentity.option.grok_build_compatible":"Grok Build-compatible","st.requestIdentity.option.kimi_code":"Kimi Code","st.requestIdentity.option.none":"None (no request identity)","st.requestIdentity.overrides":"Advanced overrides (JSON)","st.requestIdentity.overridesPlaceholder":`{
2
- "client": { "user_agent": "host" }
3
- }`,"st.requestIdentity.overridesRequiredHint":"Override-only layers require a non-empty object containing at least one supported leaf.","st.requestIdentity.overridesOptionalHint":"Optional sparse overrides are applied on top of the selected preset. Changing presets keeps this JSON.","st.requestIdentity.clearLayer":"Clear layer","st.providers.requestIdentity":"Provider request identity","st.providers.requestIdentityHint":"Inherit uses the authored global layer. Compatible presets reset lower identity layers before applying these optional overrides; they do not emulate client transport.","st.providers.requestIdentityBadge.inherit":"Inherited","st.providers.requestIdentityBadge.custom_overrides":"Custom overrides","st.providers.requestIdentityBadge.codex_compatible":"Codex","st.providers.requestIdentityBadge.grok_build_compatible":"Grok","st.providers.requestIdentityBadge.kimi_code":"Kimi","st.providers.requestIdentityBadge.none":"None","st.models.requestIdentity":"Model request identity","st.models.requestIdentityHint":"Inherit uses the provider layer. A model preset resets lower layers; override-only adds sparse values without inventing a preset.","st.images.title":"Images","st.images.acceptedTypes":"Accepted types","st.images.acceptedTypesModeAria":"Accepted image types source","st.images.acceptedTypesAria":"Accepted image MIME types","st.images.custom":"Custom types","st.images.inheritBuiltin":"Use protocol defaults","st.images.inheritProvider":"Inherit provider","st.images.inheritHint":"No value is stored at this layer; the enclosing provider or protocol default applies.","st.images.addMime":"MIME type + Enter","st.images.removeMimeAria":"Remove {mime}","st.images.convertUnsupported":"Convert unsupported","st.images.convertUnsupportedAria":"Unsupported image conversion","st.images.convert.off":"Off","st.images.convert.auto":"Auto (PNG or JPEG)","st.images.convert.png":"Convert to PNG","st.images.convert.jpeg":"Convert to JPEG","st.providers.apiKey":"API key","st.providers.keyNew":"Paste a new key","st.providers.showKey":"Show","st.providers.hideKey":"Hide","st.providers.keyBadge":"key stored","st.providers.models":"Models","st.providers.addModel":"Add model","st.providers.removeModel":"Remove model","st.providers.displayNamePlaceholder":"Display name (optional)","st.providers.defaultStarAria":"Set {model} as the provider default","st.providers.defaultStarTitle":"Provider default","st.providers.modelIdAria":"Model {n} ID","st.providers.modelContextAria":"Model {n} context size","st.providers.modelNameAria":"Model {n} display name","st.providers.modelCapsAria":"Model {n} capabilities","st.providers.modelEffortsAria":"Model {n} efforts","st.providers.modelExpandAria":"Edit model {n} details","st.providers.modelSearchPlaceholder":"Search suggested models or enter an ID","st.providers.useCustomModel":"Use “{id}”","st.providers.catalogEmpty":"No suggested models yet. Enter a model ID above.","st.providers.catalogModelHint":"Picking a suggestion only fills this row. The model is configured when you save the provider, and every field stays editable.","st.providers.catalogGroupConfigured":"Configured","st.providers.catalogGroupSuggested":"Suggestions — not configured yet","st.providers.catalogGroupDraft":"In this form","st.providers.catalogFromProvider":"from provider","st.providers.catalogFromDirectory":"from model directory","st.providers.catalogSuggestionNote":"Suggestion — saving the provider configures this model.","st.providers.catalogEfforts":"{count} effort levels","st.wizard.chooseTemplate":"Pick a protocol. The base URL is prefilled, so you only paste an API key.","st.wizard.manual":"Custom protocol","st.wizard.manualHint":"openai_responses · google-genai · vertexai","st.wizard.back":"Change protocol","st.fetchModels.button":"Test connection & pull models","st.fetchModels.working":"Testing…","st.fetchModels.unsavedTarget":"Save this connection first. The test probes the saved address and protocol; a new key would be sent there instead of to the address you are editing.","st.fetchModels.success":"Pulled {count} models. Review the context sizes below.","st.fetchModels.serverChanged":"Refresh completed. {added} added, {removed} removed.","st.fetchModels.serverUpdated":"Refresh completed. Model metadata was updated.","st.fetchModels.serverUnchanged":"Refresh completed. Catalog unchanged.","st.fetchModels.suggestions":"Fetched {count} suggested models. Pick one in the model list and save to configure it.","st.fetchModels.noNewSuggestions":"Fetched the provider list — no new suggestions.","st.fetchModels.serverUnsupported":"This provider has no refreshable catalog source. Choose a directory model below or enter an ID.","st.providers.managedHint":"This provider is signed in through OAuth. Its ID, protocol, and credentials follow the Sign in / Sign out controls above. Everything else below stays editable.","st.chips.capabilities":"Capabilities","st.chips.efforts":"Supported effort levels","st.chips.addPlaceholder":"custom value + Enter","st.chips.removeAria":"Remove {value}","st.stepper.decrease":"Decrease","st.stepper.increase":"Increase","st.dirty.badge":"Unsaved","st.dirty.leaveTitle":"Discard unsaved changes?","st.dirty.leaveBody":"You have unsaved changes. Leaving will discard them.","st.dirty.leaveConfirm":"Discard and leave","st.dirty.stay":"Keep editing","st.danger.title":"Danger zone","st.danger.removeProvider":"Remove provider","st.confirm.removeTitle":"Remove provider {id}?","st.confirm.removeBody":"This deletes the provider and its model aliases from the server configuration.","st.confirm.removeC1":"If {id} is the default provider, the default model stops resolving.","st.confirm.removeC2":"Sessions running on this provider may fail mid-turn.","st.confirm.removeAction":"Remove provider","st.restart.banner":"Some changes require a restart to take effect","st.restart.fields":"Pending: {fields}","st.restart.now":"Restart now","st.restart.working":"Restarting…","st.restart.later":"Later","st.restart.desktopOnly":"Please restart from the desktop app.","st.unit.ms":"{n} ms","st.unit.seconds":"{n} s","st.unit.minutes":"{n} min","st.unit.hours":"{n} h","st.caps.title":"Skill defaults","st.caps.mergeSkills":"Merge all available skills","st.caps.savedRestart":"Saved. Restart for this change to take effect.","st.caps.extraDirs":"Extra skill directories","st.caps.selectDirs":"Choose folders…","st.caps.save":"Save skill defaults","st.caps.saved":"Server saved and echoed skill defaults.","st.caps.mergeSkillsHint":"When on, every skills directory is scanned and merged. When off, only the first directory found per source is used.","st.caps.builtinSkillsHint":"Product skills bundled with Kiki. Changes apply after restart.","st.caps.extraDirsHint":"One directory per line. ~ and relative paths (resolved from the workspace project root) are supported.","st.skills.catalogTitle":"Skills","st.skills.summary":"{count} skills available","st.skills.workspaceHint":"The catalog lists the skills visible to the selected workspace.","st.skills.emptyPlugin":"No plugin contributes skills yet.","st.skills.emptyExtra":"Add directories under Skill defaults below and their skills will show up here.","st.hostSkill.title":"Use Kiki from other agents","st.hostSkill.intro":"Install the skill into another agent tool to delegate tasks to Kiki.","st.hostSkill.host.claude":"Claude Code","st.hostSkill.host.codex":"Codex","st.hostSkill.host.grok":"Grok Build","st.hostSkill.host.agents":"Shared agents folder","st.hostSkill.preview":"Install…","st.hostSkill.reinstall":"Reinstall…","st.hostSkill.previewNamed":"Install the skill for {host}","st.hostSkill.dialogTitle":"Install the skill for {host}","st.hostSkill.dialogBody":"Kiki writes one SKILL.md file for this agent. Check the location before installing.","st.hostSkill.previewing":"Checking the target…","st.hostSkill.file":"File","st.hostSkill.existing":"Existing file","st.hostSkill.creates":"No file there yet; a new one will be created.","st.hostSkill.overwrites":"A kiki-as-subagent skill already exists here and will be replaced.","st.hostSkill.install":"Install skill","st.hostSkill.replace":"Replace skill","st.hostSkill.installing":"Installing…","st.hostSkill.previewAgain":"Check again","st.hostSkill.stale":"The file changed after the check. Check again, then confirm the new target.","st.plugins.title":"Plugins","st.plugins.hint":"Enable, disable, or uninstall plugins on the connected Server. Open a plugin to inspect its manifest, MCP servers, and diagnostics.","st.plugins.loading":"Loading plugins…","st.plugins.empty":"No plugins installed.","st.plugins.emptyAction":"Add a plugin below","st.plugins.summary":"{total} plugins · {enabled} enabled","st.plugins.enabled":"Enabled","st.plugins.disabled":"Disabled","st.plugins.error":"Error","st.plugins.enable":"Enable","st.plugins.disable":"Disable","st.plugins.uninstall":"Uninstall","st.plugins.uninstallTitle":"Uninstall {name}?","st.plugins.uninstallBody":"The plugin is removed from this Server. Skills, MCP servers, hooks, and commands it contributed will disappear until you install it again.","st.plugins.details":"Manifest","st.plugins.hideDetails":"Hide manifest","st.plugins.manifestLoading":"Loading manifest…","st.plugins.mcpServers":"MCP servers","st.plugins.mcpEmpty":"This plugin does not contribute MCP servers.","st.plugins.mcpOn":"On","st.plugins.mcpOff":"Off","st.plugins.diagnostics":"Diagnostics","st.plugins.contrib.skills.one":"{count} skill","st.plugins.contrib.skills.other":"{count} skills","st.plugins.contrib.mcp.one":"{count} MCP server","st.plugins.contrib.mcp.other":"{count} MCP servers","st.plugins.contrib.hooks.one":"{count} hook","st.plugins.contrib.hooks.other":"{count} hooks","st.plugins.contrib.commands.one":"{count} command","st.plugins.contrib.commands.other":"{count} commands","st.plugins.contrib.none":"No contributions","st.plugins.manageLink":"Manage in Plugins","st.plugins.addTitle":"Add a plugin","st.plugins.addHint":"Install from a local folder or a zip URL, or configure a catalog URL to browse entries and install them.","st.plugins.tab.path":"Local path","st.plugins.tab.zip":"Zip URL","st.plugins.tab.marketplace":"Marketplace","st.plugins.pathLabel":"Plugin folder","st.plugins.pathPlaceholder":"C:/plugins/example","st.plugins.pickPath":"Choose folder…","st.plugins.zipLabel":"Zip URL","st.plugins.zipPlaceholder":"https://example.test/plugin.zip","st.plugins.install":"Install","st.plugins.installing":"Installing…","st.plugins.installOk":"Installed {name}.","st.plugins.sourceLabel":"Marketplace catalog URL","st.plugins.sourcePlaceholder":"https://example.test/marketplace.json","st.plugins.sourceHint":"A JSON list of installable plugins. Leave it empty to browse only what you have already added.","st.plugins.sourceSave":"Save catalog URL","st.plugins.sourceSaved":"Catalog saved.","st.plugins.sourceCatalogHint":"Save a catalog URL to show its plugins here.","st.plugins.marketplaceLoading":"Loading marketplace…","st.plugins.marketplaceEmpty":"The configured catalog has no plugins.","st.plugins.marketplaceSource":"Catalog: {source}","st.plugins.alreadyInstalled":"Installed","st.plugins.updateAvailable":"Update","st.plugins.installFromMarket":"Install","st.plugins.prerequisiteSource":"Prerequisite declaration","st.plugins.prerequisiteCatalog":"Kiki dependency catalog (compatibility unverified)","st.plugins.prerequisitePluginDeclared":"plugin-declared (unverified)","st.plugins.required":"required","st.plugins.optional":"optional","st.plugins.prerequisiteCaution":"Prerequisite metadata is informational; a plugin declaration does not authorize downloads, scripts, or credential access.","st.plugins.runtimeTitle":"WebBridge readiness","st.plugins.runtimeState.not_installed":"Not set up on this machine yet","st.plugins.runtimeState.partial":"Set up, but not everything is working","st.plugins.runtimeState.ready":"Working","st.plugins.runtimeState.unsupported":"Not available on this system","st.plugins.runtimeState.partialHint":"These parts are not ready: {items}.","st.plugins.runtimeStep.daemon-binary":"Service binary","st.plugins.runtimeStep.daemon":"Local service","st.plugins.runtimeStep.skill":"Plugin","st.plugins.runtimeStep.extension":"Browser extension","st.plugins.runtimeStep.detect":"Health check","st.plugins.runtimeStepState.ok":"Working","st.plugins.runtimeStepState.missing":"Not ready","st.plugins.runtimeStepState.failed":"Check failed","st.plugins.browserExtension":"Add the browser extension","st.plugins.checkHealth":"Check again","st.plugins.prepareRuntime":"Set up WebBridge…","st.plugins.retryRuntime":"Try setup again…","st.plugins.runtimeStarted":"Preparing on the connected server. Check again to retry after an interruption.","st.plugins.runtimeConfirmTitle":"Set up WebBridge on the connected server?","st.plugins.runtimeConfirmBody":"Starts the local service on the connected server.","st.runtime.loading":"Loading engine configuration…","st.runtime.saved":"Configuration saved and echoed by the server.","st.runtime.mcpStartupTimeout":"MCP startup timeout (ms)","st.runtime.mcpToolTimeout":"MCP tool timeout (ms)","st.taskPolicy.title":"Task and background policy","st.taskPolicy.hint":"Everyday background-task limits.","st.taskPolicy.emptyRule":"A number left empty uses the engine default.","st.taskPolicy.maxRunningTasks":"Maximum running tasks","st.taskPolicy.maxRunningTasksHint":"How many background tasks may run at once.","st.taskPolicy.maxRunningTasksDetail":"Empty means no limit. At least 1.","st.taskPolicy.bashTimeout":"Bash task timeout (s)","st.taskPolicy.bashTimeoutHint":"How long a command may run before the policy below applies.","st.taskPolicy.bashTimeoutDetail":"0 never times out. Empty uses the default {seconds} s.","st.taskPolicy.killGrace":"Kill grace period (ms)","st.taskPolicy.killGraceHint":"How long a task may take to shut down after it is asked to stop, before it is killed.","st.taskPolicy.killGraceDetail":"0 kills right away. Empty uses the default {ms} ms.","st.taskPolicy.printWait":"Wait ceiling (s)","st.taskPolicy.printWaitHint":"How long a non-interactive run may wait for background tasks in total.","st.taskPolicy.printWaitDetail":"Empty uses the default {seconds} s, the longest a timer can reach. At least 1.","st.taskPolicy.printTurns":"Maximum steered turns","st.taskPolicy.printTurnsHint":"How many extra main turns finished background tasks may start.","st.taskPolicy.printTurnsDetail":"Empty uses the default {turns}. At least 1.","st.taskPolicy.printMode":"What happens to running background tasks","st.taskPolicy.printMode.exit":"Exit right away","st.taskPolicy.printMode.exitHint":"The run ends when the main turn finishes, without waiting for background tasks.","st.taskPolicy.printMode.drain":"Wait for tasks, then exit","st.taskPolicy.printMode.drainHint":"Wait for running background tasks to finish, up to the ceiling above, then exit.","st.taskPolicy.printMode.steer":"Stay running, steer turns","st.taskPolicy.printMode.steerHint":"Keep running while background tasks are pending: their completions start new main turns, until everything is idle or a limit above is reached.","st.taskPolicy.keepAlive":"Keep tasks alive on exit","st.taskPolicy.keepAliveHelp":"Closing the session leaves running background tasks alone instead of stopping them.","st.taskPolicy.autoBackground":"Auto-background Bash on timeout","st.taskPolicy.autoBackgroundHelp":"A command that hits the timeout above keeps running as a background task instead of being stopped.","st.taskPolicy.fileToolHints":"Suggest file tools after Bash","st.taskPolicy.fileToolHintsHelp":"When Bash is used to read, search or write a file, add a short hint pointing to Read, Grep or Edit.","st.taskPolicy.advanced":"Advanced: non-interactive runs and termination","st.taskPolicy.cliGroup":"Command-line non-interactive runs","st.taskPolicy.cliGroupHint":"How a non-interactive kimi -p run treats background tasks once its main turn finishes. Interactive sessions are unaffected.","st.taskPolicy.terminationGroup":"Stopping tasks","st.taskPolicy.terminationGroupHint":"How a task is stopped once it is asked to end.","st.taskPolicy.saved":"Task policy saved and echoed by the server.","st.cron.title":"Cron operations","st.cron.hint":"Scheduled task runtime parameters and active state.","st.cron.on":"On","st.cron.off":"Off","st.cron.debug":"Debug logging","st.cron.noJitter":"Disable jitter","st.cron.noStale":"Reject stale jobs","st.cron.disabled":"Disable cron","st.cron.manualTick":"Manual tick mode","st.cron.clock":"Clock","st.cron.poll":"Poll interval (s)","st.cron.pollPlaceholder":"empty or null","st.communication.title":"Communication and token counting","st.communication.hint":"Messaging between threads, and how token usage is reported outward.","st.communication.threadCommunication":"Messages between threads","st.communication.tokenCounting":"Reported token-count strategy","st.communication.saved":"Communication settings saved and echoed by the server.","st.resourceLimits.title":"Workspace and image limits","st.resourceLimits.hint":"Ceilings for the resident workspace instance and for image reads.","st.resourceLimits.emptyRule":"A number left empty uses the engine default.","st.retry.title":"Retry","st.retry.hint":"How often a failing model step is retried. Only temporary errors are retried; policies are checked top to bottom and the first match applies.","st.retry.maxAttempts":"Attempts per step","st.retry.policies":"Policies by error","st.retry.addPolicy":"Add policy","st.retry.empty":"No policies. Temporary errors get 5 attempts, waiting 2, 4, 8 and 16 seconds.","st.retry.match":"Error pattern","st.retry.policyAttempts":"Attempts","st.retry.backoff":"Wait (ms)","st.retry.retry":"Retry","st.retry.moveUp":"Move policy {n} up","st.retry.moveDown":"Move policy {n} down","st.retry.removePolicy":"Remove policy {n}","st.retry.issueMatch":"Enter an error pattern, or remove this policy.","st.retry.issuePattern":"This pattern is not a valid regular expression.","st.retry.issueAttempts":"Attempts must be a whole number, 1 or more.","st.retry.issueBackoff":"Wait must be a whole number of milliseconds, 0 or more.","st.residency.title":"Session residency","st.residency.hint":"How many sessions stay loaded in memory. Idle sessions are unloaded only while the session idle eviction experiment is on; their history is kept.","st.residency.maxLive":"Loaded sessions","st.residency.maxLiveHelp":"Above this count, idle sessions are unloaded sooner. Default 8.","st.residency.idleTtl":"Unload after idle","st.residency.idleTtlHelp":"A session idle this long can be unloaded. Default 600 s.","st.residency.minIdle":"Minimum idle when over the limit","st.residency.minIdleHelp":"Used instead of the idle time above while more sessions are loaded than allowed. Default 60 s.","st.residency.sweep":"Check every","st.residency.sweepHelp":"How often idle sessions are checked. Default 30 s.","st.residency.concurrentRestores":"Parallel reloads","st.residency.concurrentRestoresHelp":"Unloaded sessions reloaded at the same time. Default 1.","st.residency.queuedRestores":"Queued reloads","st.residency.queuedRestoresHelp":"Reloads that can wait in line; more are refused until one finishes. Default 8.","st.residency.advanced":"Checks and reload queue","st.residency.secondsUnit":"s","st.residency.range":"Use a whole number from {min} to {max}.","st.resourceLimits.workspaceIdle":"Workspace idle reclamation (s)","st.resourceLimits.workspaceIdleDetail":"Releases the resident workspace instance (its process and memory) once the last reference has been gone this long. The directory is not deleted. 0 reclaims as soon as it goes idle; empty uses the default {seconds} s.","st.resourceLimits.imageMaxEdge":"Image maximum edge (px)","st.resourceLimits.imageMaxEdgeDetail":"Empty uses the default {px} px.","st.resourceLimits.imageBudget":"Image read byte budget","st.resourceLimits.imageBudgetDetail":"Bytes allowed per image read; larger images are compressed first. Empty uses the default {bytes} bytes (256 KiB).","st.resourceLimits.saved":"Resource limits saved and echoed by the server.","st.agentIdentity.title":"Identity and agent loading","st.agentIdentity.hint":"The identity this server presents and the agents it loads. Changing the name or slug takes effect after a server restart.","st.agentIdentity.identityName":"Identity display name","st.agentIdentity.identitySlug":"Identity slug","st.agentIdentity.advertiseAsKimiCode":"Identify as Kimi Code to upstream services","st.agentIdentity.advertiseAsKimiCodeHint":"Compatibility mode. Upstream requests present as compatible client after restart.","st.agentIdentity.extraAgentDirs":"Extra agent directories","st.agentIdentity.disabledProfiles":"Disabled built-in agents","st.agentIdentity.skipBuiltin":"Built-in templates not to install","st.agentIdentity.skipBuiltinHint":"Skip automatic installation of built-in templates at startup. Installed copies remain active; disable above to hide.","st.agentIdentity.addEntry":"Add entry","st.agentIdentity.removeEntry":"Remove entry {n}","st.agentIdentity.listEmpty":"No entries configured.","st.agentIdentity.saved":"Identity and agent loading settings saved and echoed by the server.","st.experimental.title":"Advanced feature settings","st.experimental.toolsTitle":"Tool features","st.experimental.priority":"Settings take effect after saving.","st.experimental.priorityDetails":"Configure experimental features here. Changes take effect on save; some may require refreshing or restarting sessions.","st.experimental.rulesAndDetails":"Rules & details","st.experimental.configChoice":"Save as","st.experimental.configOn":"Enabled in config","st.experimental.configOff":"Disabled in config","st.experimental.effectiveUnknown":"Current state: not ready","st.experimental.mismatch":"Current state differs from this selection. There may be unsaved changes or environment overrides.","st.experimental.mismatchBadge":"mismatch","st.experimental.unknownFeature":"Advanced: server-specific feature","st.experimental.toolSelect":"Tools: load MCP tools on demand (supported models only)","st.experimental.taskWait":"Tools: let agents wait for background tasks within a turn","st.experimental.searchWorker":"Search: isolate the global search index in a worker","st.experimental.readModel":"Storage: MiniDB session read model","st.experimental.sessionTitle":"Sessions: generate conversation titles","st.experimental.subagentIdle":"Subagents: release idle in-memory scopes","st.experimental.agentRoutes":"Agents: named agent routes","st.experimental.delegation":"External delegation: allow authenticated MCP work owners","st.experimental.taskBoard":"Task board: workspace-owned requirements","st.experimental.effectiveOn":"effective: on","st.experimental.effectiveOff":"effective: off","st.experimental.inherited":"Server default","st.experimental.overrideLabel":"Configured value for {feature}","st.experimental.flagId":"Flag ID: {id}","st.experimental.empty":"No experimental features are currently available.","st.experimental.saved":"Experimental overrides saved; effective state refreshed.","st.sessionTitleModel.title":"Title model","st.sessionTitleModel.hint":"The model that writes session titles. Pick one to turn titling on.","st.sessionTitleModel.model":"Title model","st.sessionTitleModel.placeholder":"e.g. kimi-for-coding","st.sessionTitleModel.noneDefault":"No title model","st.sessionTitleModel.noneDesc":"Pick a model to write titles.","st.sessionTitleModel.noneDetail":"Without a model Kiki sends no request to write a title, so nothing is charged to your subscription. Titles you write yourself still apply.","st.sessionTitleModel.fallbackDetail":"This model writes the title, one request per moment below. An automatic title never replaces one you typed.","st.sessionTitleModel.saved":"Title model saved.","st.sessionTitleModel.unconfigured":"No model chosen, so Kiki sends no request to write a title.","st.advanced.title":"Raw engine configuration","st.advanced.hint":"Advanced configuration for permissions, loop controls, and background tasks. Validated on save.","st.advanced.performanceTitle":"Performance, storage & extensions","st.advanced.performanceSummary":"Optional engine flags for local session indexing and server-specific extensions.","st.advanced.aria":"Advanced engine domains","st.advanced.save":"Save advanced domains","st.advanced.saved":"Server validated, saved, and echoed the advanced engine domains.","st.advanced.discard":"Discard changes","st.nbSearch.statusTitle":"Tool status","st.nbSearch.statusHint":"WebSearch fails closed until a default search lane is chosen; FetchURL falls through the default pipeline chain.","st.nbSearch.webSearch":"WebSearch","st.nbSearch.fetchUrl":"FetchURL","st.nbSearch.stateReady":"Ready","st.nbSearch.stateDegraded":"Degraded","st.nbSearch.stateUnconfigured":"Not configured","st.nbSearch.stateUnavailable":"Unavailable","st.nbSearch.statusLoading":"Loading search capabilities…","st.nbSearch.webSearchDesc":"The tool the assistant uses to search the web.","st.nbSearch.fetchUrlDesc":"The tool the assistant uses to open pages and extract their text.","st.nbSearch.currentSelection":"In effect: {selection}","st.nbSearch.gotoProviders":"Open Services & credentials","st.nbSearch.failClosedNote":"No default lane: WebSearch refuses to run until you pick one under Defaults.","st.nbSearch.issue.CREDENTIAL_NOT_CONFIGURED":"Credential not configured: set the provider’s credential env variable under Services & credentials.","st.nbSearch.issue.PROVIDER_DISABLED":"Provider disabled: enable it under Services & credentials.","st.nbSearch.issue.ENDPOINT_NOT_CONFIGURED":"Endpoint not configured: set the Base URL under Services & credentials.","st.nbSearch.issue.RATE_LIMIT_UNAUTHENTICATED":"Unauthenticated access; tighter rate limits apply.","st.nbSearch.issue.LANE_NOT_CONFIGURED":"Lane not configured: a usable provider or credential is missing.","st.nbSearch.issue.LANE_NOT_REGISTERED":"This entry is not registered on the server; the saved configuration may reference something that no longer exists.","st.nbSearch.issue.DEFAULT_NOT_CONFIGURED":"No default lane set.","st.nbSearch.issue.FETCH_CHAIN_UNAVAILABLE":"No ready pipeline in the fetch chain.","st.nbSearch.issue.FETCH_DEFAULT_NOT_CONFIGURED":"No fetch chain configured.","st.nbSearch.defaultsTitle":"Default search lane","st.nbSearch.defaultsHint":"The lane WebSearch runs on — every web search the assistant performs uses the lane selected here.","st.nbSearch.defaultLaneLabel":"Default search lane","st.nbSearch.noDefaultLane":"No default (fail closed)","st.nbSearch.fetchChainLabel":"Fetch pipeline chain (url → markdown)","st.nbSearch.fetchChainHint":"FetchURL tries each pipeline in order until one returns content.","st.nbSearch.chainInherited":"Inheriting the runtime default chain","st.nbSearch.chainCustom":"Custom chain","st.nbSearch.resetChain":"Use runtime default","st.nbSearch.customizeChain":"Customize this chain","st.nbSearch.addPipeline":"Add pipeline","st.nbSearch.removePipeline":"Remove pipeline {n}","st.nbSearch.movePipelineUp":"Move pipeline {n} up","st.nbSearch.movePipelineDown":"Move pipeline {n} down","st.nbSearch.chainEmpty":"The fetch chain needs at least one pipeline; use the runtime default instead of an empty chain.","st.nbSearch.pipelineReady":"ready","st.nbSearch.pipelineUnavailable":"unavailable","st.nbSearch.providersTitle":"Provider instances","st.nbSearch.providersHint":"Enable providers and configure endpoints. Keep existing server environment or local nb-search credentials, or optionally save a Kiki-managed credential on this server.","st.nbSearch.enabled":"Enabled","st.nbSearch.credentialRequired":"credential required","st.nbSearch.credentialNone":"no credential needed","st.nbSearch.credentialConfigured":"credential configured","st.nbSearch.credentialMissing":"credential missing","st.nbSearch.credentialEnvLabel":"Credential env variable","st.nbSearch.credentialEnvPlaceholder":"NB_SEARCH_EXA_API_KEY","st.nbSearch.credentialEnvHint":"Variable name only. When not saved in settings, environment variables take precedence. The active value can be inspected under Credential below.","st.nbSearch.managed.title":"Credential","st.nbSearch.managed.hint":"Values saved here are stored in protected local credentials and take priority over environment variables. Each slot needs a unique variable name.","st.nbSearch.managed.saveConfigFirst":"Save or discard pending search configuration changes before editing the credential.","st.nbSearch.managed.error.load":"Could not load or reveal the saved credential. The slot may have changed; retry.","st.nbSearch.managed.error.save":"Could not save the credential. Check server storage and give this slot a unique env variable name; then retry.","st.nbSearch.managed.error.conflict":"The saved credential or its slot binding changed elsewhere. Reload and confirm the target before saving.","st.nbSearch.endpointRequired":"endpoint required","st.nbSearch.endpointOptional":"endpoint optional","st.nbSearch.endpointNone":"no endpoint needed","st.nbSearch.endpointConfigured":"endpoint configured","st.nbSearch.endpointMissing":"endpoint missing","st.nbSearch.baseUrlLabel":"Base URL","st.nbSearch.optionsLabel":"Provider options (JSON object)","st.nbSearch.optionsHint":"Configured options: {keys}","st.nbSearch.invalidOptions":"Provider options for {id} must be a JSON object.","st.nbSearch.partialReadyHint":"Partially ready — some lanes or pipelines still report issues.","st.nbSearch.availabilityReady":"ready","st.nbSearch.availabilityUnavailable":"unavailable","st.nbSearch.executionTitle":"Execution budgets","st.nbSearch.executionHint":"Leave empty to use defaults. Applies immediately after saving.","st.nbSearch.groupBudgets":"Calls and concurrency","st.nbSearch.groupTimeouts":"Timeouts","st.nbSearch.groupFetchLimits":"Fetch limits","st.nbSearch.maxProviderCalls":"Max provider calls per search","st.nbSearch.maxConcurrency":"Max concurrent provider calls","st.nbSearch.retryCount":"Retries per provider call","st.nbSearch.searchTimeout":"Search timeout (ms)","st.nbSearch.fetchTimeout":"Fetch timeout (ms)","st.nbSearch.maxInlineBytes":"Max inline bytes","st.nbSearch.maxSourceBytes":"Max source bytes","st.nbSearch.maxResponseBytes":"Max response bytes","st.nbSearch.maxContentChars":"Max content characters","st.nbSearch.maxRedirects":"Max redirects","st.nbSearch.maxProviderCallsHint":"How many providers one search may call. Higher recalls more; lower is faster and cheaper.","st.nbSearch.maxConcurrencyHint":"How many provider requests run at once. Lower this when the network or quota is tight.","st.nbSearch.retryCountHint":"Retries after a failed call. More retries are steadier but slower.","st.nbSearch.searchTimeoutHint":"A search counts as failed once it takes longer than this.","st.nbSearch.fetchTimeoutHint":"How long a single fetch pipeline may take before it counts as failed.","st.nbSearch.maxInlineBytesHint":"Content larger than this is not inlined into the model context.","st.nbSearch.maxSourceBytesHint":"The largest source page a fetch may download.","st.nbSearch.maxResponseBytesHint":"The largest response a fetch may accept.","st.nbSearch.maxContentCharsHint":"Page text longer than this is truncated before it reaches the model.","st.nbSearch.maxRedirectsHint":"How many redirects a fetch may follow.","st.nbSearch.invalidNumber":'"{value}" is not a non-negative whole number.',"st.nbSearch.diagnosticsTitle":"Diagnostics","st.nbSearch.diagnosticsHint":"Runs the backend readiness check against the saved configuration on demand. It performs no real search or fetch.","st.nbSearch.runCheck":"Run readiness check","st.nbSearch.running":"Running…","st.nbSearch.cancel":"Cancel","st.nbSearch.cancelled":"Readiness check cancelled.","st.nbSearch.lastChecked":"Config revision {revision}","st.nbSearch.checkFailed":"Readiness check failed","st.nbSearch.save":"Save search & retrieval","st.nbSearch.saved":"Search & retrieval saved. Check Overview & source for availability.","st.nbSearch.savedStatusFailed":"Configuration saved, but status could not be refreshed. Retry to load the saved settings.","st.nbSearch.savedStatusFailedPendingKeys.one":"One key you entered is still not stored. Reload the saved settings, then save again to store it.","st.nbSearch.savedStatusFailedPendingKeys.other":"{count} keys you entered are still not stored. Reload the saved settings, then save again to store them.","st.nbSearch.statusRefreshStale":"Keys saved. Availability could not be refreshed, so the state shown is the one from before the save. Retry to check again.","st.nbSearch.loading":"Loading search configuration…","st.nbSearch.tab.overview":"Overview & source","st.nbSearch.tab.search":"Search lanes","st.nbSearch.tab.fetch":"Fetch chain","st.nbSearch.tab.providers":"Services & credentials","st.nbSearch.tab.advanced":"Advanced & diagnostics","st.nbSearch.tabBar.attention.one":"1 provider needs attention","st.nbSearch.tabBar.attention.other":"{count} providers need attention","st.nbSearch.source.title":"Configuration source","st.nbSearch.source.technicalDetails":"Configuration source details","st.nbSearch.source.hint":"Configuration builds on baseline settings with saved overrides applied on top. Turning reuse off relies solely on current settings.","st.nbSearch.source.reuseLocalLabel":"Reuse server nb-search configuration","st.nbSearch.source.reuseLocalDesc":"Use the server’s nb-search settings as the base for Kiki overrides. If the default file is absent, Kiki settings still apply.","st.nbSearch.source.daemonHost":"Configuration host","st.nbSearch.source.daemonHostLocal":"Connected Kiki server","st.nbSearch.source.activeLayers":"Effective source precedence","st.nbSearch.source.localConfigStatus":"Server nb-search configuration","st.nbSearch.source.localPresent":"Present","st.nbSearch.source.localMissing":"Not found; using Kiki configuration","st.nbSearch.source.localIgnored":"Skipped","st.nbSearch.source.localUnreadable":"Unreadable","st.nbSearch.source.localInvalid":"Invalid configuration","st.nbSearch.source.localUnknown":"Status unavailable","st.nbSearch.source.draftHint":"This change takes effect after saving. The status below describes the saved configuration.","st.nbSearch.source.credentialsHint":"When reuse is on, matching slots can read local saved credentials. Values saved here take priority, followed by environment variables.","st.nbSearch.source.credentialsStatus":"Local credential file","st.nbSearch.source.credentialsPresent":"Loaded","st.nbSearch.source.credentialsMissing":"Not found","st.nbSearch.source.credentialsIgnored":"Skipped","st.nbSearch.source.credentialsUnreadable":"Unreadable","st.nbSearch.source.credentialsInvalid":"Invalid credential file","st.nbSearch.source.credentialsRejected":"Binding or protection check failed","st.nbSearch.source.credentialsUnknown":"Not checked","st.nbSearch.source.credentialEnvironment":"Server environment","st.nbSearch.source.credentialEnvironmentLocal":"Server environment and local nb-search credentials","st.nbSearch.source.credentialEnvironmentManaged":"Server environment and Kiki-managed credentials","st.nbSearch.source.credentialEnvironmentLocalManaged":"Server environment, local nb-search and Kiki-managed credentials","st.nbSearch.source.issue.LOCAL_CREDENTIALS_INVALID":"The local credential file is invalid. Repair it with nb-search or turn reuse off.","st.nbSearch.source.issue.LOCAL_CREDENTIALS_UNREADABLE":"The local credential file could not be read. Check its encoding, size, and access permissions.","st.nbSearch.source.issue.LOCAL_CREDENTIALS_TIMEOUT":"Local credential permission checks timed out. Retry or turn local reuse off.","st.nbSearch.source.issue.LOCAL_CREDENTIALS_UNSAFE":"The local credential file has unsafe permissions or is a symbolic link. Restore its file protection before reusing it.","st.nbSearch.source.issue.LOCAL_CREDENTIAL_CONFIG_OVERRIDE":"A credential variable would change the effective configuration. Correct the credential slot or environment mapping.","st.nbSearch.source.issue.LOCAL_CREDENTIAL_BINDING_MISMATCH":"The provider, endpoint, or slot no longer matches the saved credential binding. Restore the binding or review it in nb-search.","st.nbSearch.source.issue.LOCAL_CONFIG_BUSY":"nb-search configuration is being updated. Retry after that operation finishes; do not remove its lock file.","st.nbSearch.source.issue.LOCAL_CONFIG_CHANGED":"The local configuration or credentials changed while loading. Retry after saving finishes.","st.nbSearch.source.issue.LOCAL_CONFIG_RESOLVER_MISMATCH":"Kiki and nb-search resolved different configurations. Check version compatibility or turn reuse off.","st.nbSearch.source.issue.LOCAL_CONFIG_NOT_FOUND":"The server’s NB_SEARCH_CONFIG points to a missing file. Correct that path or turn reuse off.","st.nbSearch.source.issue.LOCAL_CONFIG_UNREADABLE":"The server could not read its nb-search configuration. Check the file and its access permissions, or turn reuse off.","st.nbSearch.source.issue.EFFECTIVE_CONFIG_INVALID":"The combined configuration is invalid. Check the nb-search settings and Kiki overrides, or turn reuse off to isolate the local file.","st.nbSearch.source.issue.ISOLATED_STORAGE_UNAVAILABLE":"Kiki could not prepare isolated search storage. Check access to its cache directory and retry.","st.nbSearch.source.issue.LOCAL_CONFIG_INVALID_IGNORED":"The local nb-search configuration could not be parsed, so Kiki ignored it and continued with defaults. Fix or remove the local file to bring it back.","st.nbSearch.source.layerDefaults":"Engine defaults","st.nbSearch.source.layerLocal":"Server nb-search configuration","st.nbSearch.source.layerEnvironment":"Server environment","st.nbSearch.source.layerKiki":"Kiki overrides","st.nbSearch.lanes.filterPlaceholder":"Filter search lanes…","st.nbSearch.lanes.pinnedOrCurrent":"Default & pinned lanes","st.nbSearch.lanes.syncLanes":"Available sync lanes","st.nbSearch.lanes.otherLanes":"Other lanes","st.nbSearch.lanes.noMatches":'No search lanes matching "{query}"',"st.nbSearch.lanes.currentDefaultBadge":"Current default","st.nbSearch.lanes.pinnedBadge":"Pinned","st.nbSearch.lanes.syncSupported":"Sync ready","st.nbSearch.lanes.asyncOnly":"Async only","st.nbSearch.lanes.pinLane":"Pin lane to top","st.nbSearch.lanes.unpinLane":"Unpin lane","st.nbSearch.lanes.quickSwitchToLanes":"Configure search lane","st.nbSearch.lanes.noDefaultHint":"Fail closed: with no default lane WebSearch refuses to run, and the assistant cannot search the web.","st.nbSearch.lanes.inheritDefault":"Use the current default","st.nbSearch.lanes.inheritedBadge":"in use","st.nbSearch.latency.fast":"Fast","st.nbSearch.latency.medium":"Medium","st.nbSearch.latency.slow":"Slow","st.nbSearch.cost.free":"Free","st.nbSearch.cost.cheap":"Cheap","st.nbSearch.cost.expensive":"Expensive","st.nbSearch.fetch.chainSummary":"FetchURL tries these pipelines in order, moving to the next when an earlier pipeline fails or returns insufficient content.","st.nbSearch.fetch.inheritedBadge":"Runtime default","st.nbSearch.fetch.customBadge":"Custom override","st.nbSearch.fetch.fallbackHint":"falls back to the next pipeline on failure","st.nbSearch.lanes.unavailable":"unavailable","st.nbSearch.custom.lane.groupPending":"Added now","st.nbSearch.custom.lane.add":"New search method","st.nbSearch.custom.lane.edit":"Edit search method","st.nbSearch.custom.lane.pending":"not saved yet","st.nbSearch.custom.lane.badgeOverridden":"overridden","st.nbSearch.custom.lane.originSource":"This method comes from the source configuration, which may be a local config, environment variables, or an engine default. Editing builds an override that lives only in the Kiki config.","st.nbSearch.custom.lane.originOverride":"This method is using a local override; restoring the source returns to the version the source provides.","st.nbSearch.custom.lane.originLocal":"This method exists only in the Kiki config.","st.nbSearch.custom.lane.originLocalSetting":"This method is declared in the Kiki config. The layer below was not reported, so whether it provides one too is unconfirmed.","st.nbSearch.custom.lane.originUnknown":"Nothing in the Kiki config declares this method, and the layer below was not reported, so where it comes from is unconfirmed.","st.nbSearch.custom.lane.idLabel":"Name and stable ID","st.nbSearch.custom.lane.idHint":"The name of this method; it is also the ID a call uses.","st.nbSearch.custom.lane.idInvalid":"An ID needs 1 to 256 characters, with no leading or trailing space.","st.nbSearch.custom.lane.idTaken":"Another search method already uses this ID - pick a different one.","st.nbSearch.custom.lane.instance":"Service instance","st.nbSearch.custom.lane.operation":"Operation","st.nbSearch.custom.lane.latency":"Latency","st.nbSearch.custom.lane.cost":"Cost","st.nbSearch.custom.lane.tier":"Latency and cost","st.nbSearch.custom.lane.unknown":"not reported by the source","st.nbSearch.custom.lane.evidence":"Evidence groups","st.nbSearch.custom.lane.evidenceLabel":"Group names (comma separated)","st.nbSearch.custom.lane.evidenceHint":"Up to 32, each at most 128 characters. Empty declares no evidence groups.","st.nbSearch.custom.lane.override":"Override in Kiki","st.nbSearch.custom.lane.restore":"Restore source","st.nbSearch.custom.lane.remove":"Delete search method","st.nbSearch.custom.lane.removeTitle":"Delete “{lane}”?","st.nbSearch.custom.removeReferenced":"These entries still use it, and their references break if it is deleted:","st.nbSearch.custom.close":"Collapse","st.nbSearch.custom.cancel":"Cancel","st.nbSearch.custom.badgeSource":"from source","st.nbSearch.custom.badgeLocal":"local only","st.nbSearch.custom.badgeLocalSetting":"local setting","st.nbSearch.custom.badgeOriginUnknown":"origin unconfirmed","st.nbSearch.custom.moveUp":"Move item {n} up","st.nbSearch.custom.moveDown":"Move item {n} down","st.nbSearch.custom.removeRow":"Remove item {n}","st.nbSearch.custom.fetchChainSummary":"The pipeline chain for this input and output pair. A failed or too-thin result falls through to the next one.","st.nbSearch.custom.chain.pairSource":"This pair uses the source order","st.nbSearch.custom.chain.pairEdited":"This pair uses the Kiki order","st.nbSearch.custom.chain.customizePair":"Use Kiki order","st.nbSearch.custom.chain.restoreSourceOrder":"Restore source order","st.nbSearch.custom.chain.restoreAll":"Restore inherited (all pairs)","st.nbSearch.custom.chain.snapshot.one":"{count} pair uses the Kiki order","st.nbSearch.custom.chain.snapshot.other":"{count} pairs use the Kiki order","st.nbSearch.custom.chain.noteTitle":"How fetch chains are saved","st.nbSearch.custom.chain.noteBody":"Saving writes all {count} input and output pairs as one Kiki chain snapshot; afterwards they no longer follow the source pair by pair. Only restoring inheritance for every pair deletes the snapshot.","st.nbSearch.custom.noCompatiblePipeline":"No pipeline serves this combination. Check the service settings, or pick another input and output.","st.nbSearch.custom.pipelineIncompatible":"This pipeline does not serve the current input kind or output format.","st.nbSearch.custom.pipelineUnknown":"not registered","st.nbSearch.custom.preset.group":"Presets","st.nbSearch.custom.preset.groupHint":"A preset runs several search methods in order. Only methods whose output is a results list can join one.","st.nbSearch.custom.preset.add":"New preset","st.nbSearch.custom.preset.empty":"No presets yet. Create one to run several search methods in a single search.","st.nbSearch.custom.preset.edit":"Edit preset","st.nbSearch.custom.preset.laneCount.one":"{count} method","st.nbSearch.custom.preset.laneCount.other":"{count} methods","st.nbSearch.custom.preset.originSource":"This preset comes from the source configuration, which may be a local config, environment variables, or an engine default. Editing builds an override that lives only in the Kiki config.","st.nbSearch.custom.preset.originOverride":"This preset is using a local override; restoring the source returns to the version the source provides.","st.nbSearch.custom.preset.originLocal":"This preset exists only in the Kiki config.","st.nbSearch.custom.preset.originLocalSetting":"This preset is declared in the Kiki config. The layer below was not reported, so whether it provides one too is unconfirmed.","st.nbSearch.custom.preset.originUnknown":"Nothing in the Kiki config declares this preset, and the layer below was not reported, so where it comes from is unconfirmed.","st.nbSearch.custom.preset.idLabel":"Name and stable ID","st.nbSearch.custom.preset.idHint":"The preset name; it is also its key in the config.","st.nbSearch.custom.preset.idInvalid":"A name needs 1 to 256 characters, with no leading or trailing space.","st.nbSearch.custom.preset.idTaken":"Another preset already uses this name - pick a different one.","st.nbSearch.custom.preset.lanes":"Search methods, in order","st.nbSearch.custom.preset.addLane":"Add search method","st.nbSearch.custom.preset.laneHint":"Tried in order; the next one runs when the previous returns nothing.","st.nbSearch.custom.preset.minLane":"A preset needs at least one search method.","st.nbSearch.custom.preset.override":"Override in Kiki","st.nbSearch.custom.preset.restore":"Restore source","st.nbSearch.custom.preset.remove":"Delete preset","st.nbSearch.custom.reference.defaultLane":"the default search method","st.nbSearch.custom.reference.preset":"the preset “{id}”","st.nbSearch.custom.reference.lane":"the search method “{lane}”","st.nbSearch.custom.reference.chain":"the fetch chain ({input} to {representation})","st.nbSearch.custom.reference.routeRule":"the routing rule “{id}”","st.nbSearch.routing.title":"Routing","st.nbSearch.routing.help":"Decide which fetch pipeline a web address is read through, before the chain above runs.","st.nbSearch.routing.chainRoleHint":"The chain above is what runs when no rule matches, and a pipeline named in the request always wins over both.","st.nbSearch.routing.mode":"Routing configuration source","st.nbSearch.routing.modeInherited":"Following the source","st.nbSearch.routing.modeInheritedHint":"The routing the source config declares stays in force.","st.nbSearch.routing.modeCustom":"Configured in Kiki","st.nbSearch.routing.modeCustomHint":"These rules save with the rest of this page and replace what the source declared.","st.nbSearch.routing.modeCleared":"Inherited rules cleared","st.nbSearch.routing.modeClearedShort":"Cleared","st.nbSearch.routing.modeClearedHint":"No routing rules come from the source. The maintained package below still runs.","st.nbSearch.routing.builtinTitle":"Maintained direct-fetch package","st.nbSearch.routing.builtinHint":"Ships with the search engine, is on by default, and routes only to the built-in direct pipeline, so a match never costs a third-party call. Your own rules are checked first.","st.nbSearch.routing.packageMeta":"{id} {version}, maintained by {maintainer}.","st.nbSearch.routing.packageUnreported":"The server reported no routing package, so what is in force here is unconfirmed.","st.nbSearch.routing.builtinOn":"On","st.nbSearch.routing.builtinOff":"Off","st.nbSearch.routing.builtinActive":"in force","st.nbSearch.routing.builtinDisabled":"off","st.nbSearch.routing.builtinDefaultChain":"the default chain","st.nbSearch.routing.builtinDisabledHint":"Off for: {ids}.","st.nbSearch.routing.userTitle":"Your routing rules","st.nbSearch.routing.rulesNone":"No rules of your own. Requests use the maintained package, then the chain above.","st.nbSearch.routing.orderHint":"Top to bottom. The first rule whose site and path match is the one that runs.","st.nbSearch.routing.addRule":"Add rule","st.nbSearch.routing.cancel":"Cancel","st.nbSearch.routing.ruleId":"Rule name {n}","st.nbSearch.routing.newRuleId":"Rule name","st.nbSearch.routing.ruleIdPlaceholder":"my-docs-direct","st.nbSearch.routing.origin":"Site","st.nbSearch.routing.pathGlobs":"Paths","st.nbSearch.routing.representation":"Output format this rule covers {n}","st.nbSearch.routing.representationAny":"Any","st.nbSearch.routing.action":"On a match {n}","st.nbSearch.routing.actionPipelines":"Use these pipelines","st.nbSearch.routing.actionDefaultShort":"Use the default chain","st.nbSearch.routing.actionDefault":"use the default chain","st.nbSearch.routing.actionDefaultHint":"A match skips the rules below it and uses the chain above, including its paid fallbacks.","st.nbSearch.routing.pipelines":"Pipelines, in order","st.nbSearch.routing.pipelinesHint":"Only the pipelines listed here are tried. A failure moves to the next one in the list, never to a rule or a chain you did not list.","st.nbSearch.routing.pipelineStep":"Pipeline {n}","st.nbSearch.routing.removePipelineStep":"Remove pipeline {n}","st.nbSearch.routing.pipelineUnknownNamed":"Not a configured fetch pipeline: {ids}.","st.nbSearch.routing.moveRuleUp":"Move rule {n} up","st.nbSearch.routing.moveRuleDown":"Move rule {n} down","st.nbSearch.routing.disableRule":"Turn rule {id} off","st.nbSearch.routing.enableRule":"Turn rule {id} on","st.nbSearch.routing.removeRule":"Delete rule {id}","st.nbSearch.routing.ruleDisabledHint":"Turned off: a request this rule would match falls through to the rules below it.","st.nbSearch.routing.incomplete":"Every rule needs a name and a site.","st.nbSearch.routing.duplicateId":"A rule with that name already exists.","st.nbSearch.routing.previewTitle":"Check where one address would go","st.nbSearch.routing.originUser":"Your rule","st.nbSearch.routing.originBuiltin":"The maintained package","st.nbSearch.routing.previewMatched":"{origin} “{rule}” matches, so it uses {pipelines}.","st.nbSearch.routing.previewDefault":"No rule matches, so it uses the chain above: {pipelines}.","st.nbSearch.routing.advancedTitle":"How a route is chosen","st.nbSearch.routing.precedence":"A pipeline named in the request wins first. Then your rules, top to bottom. Then the maintained package. Then the chain above. One match ends the search, and only the pipelines it lists are tried.","st.nbSearch.routing.routingOn":"Routing is in force for web address fetches.","st.nbSearch.routing.routingOff":"Routing is turned off: every web address fetch uses the chain above.","st.nbSearch.routing.enableRouting":"Turn routing back on","st.nbSearch.fetch.title":"Fetch method","st.nbSearch.fetch.inputKind":"Input kind","st.nbSearch.fetch.representation":"Output format","st.nbSearch.fetch.input.url":"Web address","st.nbSearch.fetch.input.inlineText":"Text content","st.nbSearch.fetch.input.inlineBytes":"Binary content","st.nbSearch.fetch.input.file":"Local file","st.nbSearch.fetch.representation.markdown":"Markdown","st.nbSearch.fetch.representation.text":"Plain text","st.nbSearch.fetch.inputDisabled":"source not enabled","st.nbSearch.fileScope.title":"Fetch source scopes","st.nbSearch.fileScope.hint":"Each scope names one local root; an empty media-type list leaves the decision to the source config.","st.nbSearch.fileScope.stateInherit":"Following the source ({count} scopes)","st.nbSearch.fileScope.stateNone":"Cleared: no local file source is offered.","st.nbSearch.fileScope.stateCustom":"Custom ({count} scopes)","st.nbSearch.fileScope.id":"Name","st.nbSearch.fileScope.root":"Root directory","st.nbSearch.fileScope.rootPlaceholder":"/path/to/files","st.nbSearch.fileScope.mediaTypes":"Media types","st.nbSearch.fileScope.removeScope":"Remove scope {n}","st.nbSearch.fileScope.add":"Add scope","st.nbSearch.fileScope.clear":"Clear source scopes","st.nbSearch.fileScope.incomplete":"Every scope needs a name and a root directory.","st.nbSearch.quality.title":"Fetch quality fallback","st.nbSearch.quality.minContentChars":"Minimum body characters","st.nbSearch.quality.minContentCharsHint":"A body shorter than this counts as a failure and falls through to the next pipeline. Empty keeps the source value.","st.nbSearch.quality.markers":"Failure markers","st.nbSearch.quality.markersInherit":"Using the failure markers from the source config.","st.nbSearch.quality.markersNone":"No failure markers: a page counts as content even when it contains them.","st.nbSearch.quality.addMarker":"Add marker","st.nbSearch.quality.markerPlaceholder":"e.g. Just a moment...","st.nbSearch.quality.markersHint":"Up to {max}. A page that contains one is treated as a failure page and falls through.","st.nbSearch.quality.removeMarker":"Remove marker {marker}","st.nbSearch.advanced.restoreInherited":"Restore inherited","st.nbSearch.advanced.inheritSource":"Follow the source","st.nbSearch.advanced.customValue":"Custom","st.nbSearch.advanced.valueInherited":"Inherited value","st.nbSearch.advanced.checkScope":"The readiness check reads the saved configuration and calls no service; a ready row does not mean a paid search has been verified.","st.nbSearch.advanced.issue.instance":"This service instance does not exist or was removed.","st.nbSearch.advanced.issue.operation":"The service has no such operation.","st.nbSearch.advanced.issue.lane":"The referenced search method does not exist.","st.nbSearch.advanced.issue.presetResults":"A preset can only use methods whose output is a results list.","st.nbSearch.advanced.issue.pipeline":"The referenced fetch pipeline does not exist.","st.nbSearch.advanced.issue.pipelineIncompatible":"The pipeline does not serve that input kind and output format.","st.nbSearch.advanced.issue.unknown":"This reference is not valid.","st.nbSearch.keyUsage.title":"Key status","st.nbSearch.keyUsage.unsavedNote":"Key status can be checked once this service is saved.","st.nbSearch.keyUsage.check":"Check key status","st.nbSearch.keyUsage.recheck":"Check again","st.nbSearch.keyUsage.refresh":"Refresh","st.nbSearch.keyUsage.reading":"Reading...","st.nbSearch.keyUsage.idle":"Key status is read on demand - nothing is requested until you ask, and key values are never shown.","st.nbSearch.keyUsage.failed":"Key status could not be read.","st.nbSearch.keyUsage.balanceSupported":"This service reports a balance; the numbers come from the server.","st.nbSearch.keyUsage.balanceUnsupported":"This service reports no balance, so only the per-key state is shown.","st.nbSearch.keyUsage.keyIndex":"Key {n}","st.nbSearch.keyUsage.stateUnknown":"unknown","st.nbSearch.keyUsage.stateReady":"ready","st.nbSearch.keyUsage.stateCooldown":"cooling down","st.nbSearch.keyUsage.stateInvalid":"rejected","st.nbSearch.keyUsage.stateExhausted":"exhausted","st.nbSearch.keyUsage.cooldownUntil":"retry {time}","st.nbSearch.keyUsage.usageLine":"{scope} {numbers}","st.nbSearch.keyUsage.scopeKey":"this key","st.nbSearch.keyUsage.scopeTeam":"team quota","st.nbSearch.keyUsage.remaining":"{n} left","st.nbSearch.keyUsage.used":"{n} used","st.nbSearch.keyUsage.limit":"limit {n}","st.nbSearch.keyUsage.usageUnavailable":"balance unavailable","st.nbSearch.keyUsage.usageInvalidResponse":"the returned balance is not recognisable","st.nbSearch.keyUsage.usageNone":"—","st.nbSearch.keyUsage.noKeys":"This service has no keys yet.","st.nbSearch.keyUsage.footnote":"The state comes from the server cache; Refresh asks the service again.","st.nbSearch.custom.instance.pickHint":"Pick the kind of service to add. One service can have several instances, each with its own keys.","st.nbSearch.custom.instance.pickLabel":"Service catalog","st.nbSearch.custom.instance.pickPlaceholder":"Search services...","st.nbSearch.custom.instance.noProviders":"The server reported no service types.","st.nbSearch.custom.instance.changeProvider":"Change service","st.nbSearch.custom.instance.idLabel":"Instance ID","st.nbSearch.custom.instance.idHint":"The name of this instance once saved; instances of one service are told apart by it.","st.nbSearch.custom.instance.idEmpty":"Enter an instance ID.","st.nbSearch.custom.instance.idInvalid":"An instance ID must be at most 256 characters, with no leading or trailing space.","st.nbSearch.custom.instance.idTaken":"Another instance already uses this ID - pick a different one.","st.nbSearch.custom.instance.envSection":"Where the key is read from","st.nbSearch.custom.instance.envLabel":"Environment variable","st.nbSearch.custom.instance.envRequired":"This service needs a key - enter an environment variable name.","st.nbSearch.custom.instance.envHint":"Kiki reads this instance key from that variable. Give each instance its own name so two instances never share one key.","st.nbSearch.custom.instance.failed":"The service could not be added.","st.nbSearch.custom.instance.create":"Add service","st.nbSearch.custom.instance.keysLater":"Fill in keys from the services list after adding","st.nbSearch.providers.filterPlaceholder":"Filter providers…","st.nbSearch.providers.filterAll":"All ({count})","st.nbSearch.providers.filterNeedsAttention":"Needs attention ({count})","st.nbSearch.providers.filterConfigured":"Ready ({count})","st.nbSearch.providers.emptyFilter":"No providers matching the filter.","st.nbSearch.providers.attentionBadge":"Needs attention","st.nbSearch.providers.disabledBadge":"Disabled","st.nbSearch.providers.baseUrlInvalid":"Base URL must start with http:// or https://.","st.nbSearch.providers.optionsInvalid":"Options must be a valid JSON object.","st.nbSearch.action.discard":"Discard edits","st.nbSearch.action.barHint":"Edits stay a draft until you apply them with “Save search & retrieval”.","st.nbSearch.services.listTitle":"Services","st.nbSearch.services.listHint":"Services you have configured here. Everything else keeps its built-in defaults until you add it.","st.nbSearch.services.emptyTitle":"No service configured","st.nbSearch.services.emptyBody":"Search and fetch run on the built-in defaults. Add a service to give them a key or a different address.","st.nbSearch.services.emptyAction":"Add a service","st.nbSearch.services.add":"Add service","st.nbSearch.services.cancelAdd":"Close directory","st.nbSearch.services.searchPlaceholder":"Search services…","st.nbSearch.services.noMatch":"No service matches “{query}”.","st.nbSearch.services.directoryTitle":"Service directory","st.nbSearch.services.directoryHint":"Every service this server supports.","st.nbSearch.services.directoryEmpty":"This server reports no services.","st.nbSearch.services.addOne":"Add","st.nbSearch.services.added":"Added","st.nbSearch.services.backToList":"Services","st.nbSearch.services.keyless":"no key needed","st.nbSearch.services.keySaved":"key saved","st.nbSearch.services.roleSearch":"searches","st.nbSearch.services.roleFetch":"fetches pages","st.nbSearch.services.roleUnknown":"capabilities unknown","st.nbSearch.services.needsKey":"needs a key","st.nbSearch.services.stateConfigured":"configured","st.nbSearch.services.stateOff":"turned off","st.nbSearch.services.stateNeedsKey":"needs a key","st.nbSearch.services.stateFailed":"not working","st.nbSearch.services.stateUnsaved":"not saved yet","st.nbSearch.services.addInstance":"New instance of a service","st.nbSearch.services.keysCount":"{count} keys","st.nbSearch.services.keyCountOne":"1 key","st.nbSearch.services.keyCountNone":"no key","st.nbSearch.services.unknownState":"state unknown","st.nbSearch.service.enabledLabel":"Use this service","st.nbSearch.service.enabledHint":"Turned off, this service is skipped even when a search lane or the fetch chain names it.","st.nbSearch.service.humanTitle":"Name","st.nbSearch.service.addressSection":"Connection","st.nbSearch.service.baseUrlHint":"Leave empty to use the service’s own address.","st.nbSearch.service.baseUrlDefault":"Service default","st.nbSearch.service.credentialSection":"Keys","st.nbSearch.service.credentialEnvHint":"The variable this key is read from. Keep it unique per service.","st.nbSearch.service.credentialEnvAdvanced":"Where the key is read from","st.nbSearch.service.credentialEnvInvalid":"Use letters, digits and underscores, starting with a letter or underscore.","st.nbSearch.service.keylessHint":"This service runs without a key.","st.nbSearch.service.keysSection":"Keys","st.nbSearch.service.advancedSection":"Key order and cache","st.nbSearch.service.keyStrategy":"Key order","st.nbSearch.service.keyStrategyRoundRobin":"Rotate between keys","st.nbSearch.service.keyStrategyPriority":"Try them in order","st.nbSearch.service.keyStrategyInherit":"Service default","st.nbSearch.service.keyStrategyHint":"Rotating spreads calls across every key. Trying them in order always starts with the first key and moves on only after it fails.","st.nbSearch.service.balanceTtl":"Key status cache (ms)","st.nbSearch.service.balanceTtlHint":"How long a key stays marked as rate-limited or used up before it is tried again. Between 60000 and 86400000.","st.nbSearch.service.balanceTtlInvalid":"Enter a whole number of milliseconds between 60000 and 86400000.","st.nbSearch.service.optionsSection":"Options","st.nbSearch.service.remove":"Remove this service","st.nbSearch.service.removeTitle":"Remove {name}?","st.nbSearch.service.removeBody":"Removes the saved settings for this service. A key already saved for it stays on this server and is used again if you add the service back.","st.nbSearch.service.removeConfirm":"Remove service","st.nbSearch.service.removed":"{name} removed.","st.nbSearch.keys.label":"Keys","st.nbSearch.keys.count":"{count} of {max}","st.nbSearch.keys.orderHint":"Used in this order when the service is set to try keys in order.","st.nbSearch.keys.empty":"No key saved for this service yet.","st.nbSearch.keys.add":"Add key","st.nbSearch.keys.placeholder":"Paste a key and press Enter","st.nbSearch.keys.remove":"Remove key {n}","st.nbSearch.keys.moveUp":"Move key {n} up","st.nbSearch.keys.moveDown":"Move key {n} down","st.nbSearch.keys.reveal":"Show key {n}","st.nbSearch.keys.hide":"Hide key {n}","st.nbSearch.keys.tooMany":"{count} keys is more than the {max} this server accepts. Remove {extra} before saving.","st.nbSearch.keys.duplicate":"The same key appears twice. Remove the duplicate before saving.","st.nbSearch.keys.replace":"Replace keys","st.nbSearch.keys.show":"Show keys","st.nbSearch.keys.loading":"Reading…","st.nbSearch.keys.showFailed":"Could not read the saved key. Retry.","st.nbSearch.keys.editingHint":"These keys are not saved yet.","st.nbSearch.keys.pendingWrite":"Key not saved yet — save to store it.","st.nbSearch.keys.saveFailed":"The settings were saved, but the key was not. It is still in the field; save again to retry.","st.nbSearch.keys.conflict":"This key changed on the server while you were editing, so your value was not written. Reload the key list, then save again.","st.nbSearch.keys.emptyKey":"Remove the empty row before saving.","st.nbSearch.provider.brave":"Brave Search","st.nbSearch.provider.browser-render":"Browser rendering","st.nbSearch.provider.context7":"Context7 docs","st.nbSearch.provider.direct-http":"Direct HTTP","st.nbSearch.provider.duckduckgo":"DuckDuckGo","st.nbSearch.provider.exa":"Exa","st.nbSearch.provider.firecrawl":"Firecrawl","st.nbSearch.provider.github":"GitHub","st.nbSearch.provider.grok":"Grok","st.nbSearch.provider.grok-multi-agent":"Grok multi-agent","st.nbSearch.provider.jina-reader":"Jina Reader","st.nbSearch.provider.openai-compatible":"OpenAI-compatible model","st.nbSearch.provider.parallel":"Parallel","st.nbSearch.provider.searxng":"SearXNG","st.nbSearch.provider.tavily":"Tavily","st.nbSearch.provider.wayback":"Wayback Machine","st.nbSearch.provider.zhipu":"Zhipu","st.nbSearch.inheritDefault":"Using the default: {lane}","st.nbSearch.inheritDefaultNone":"No default search lane is set","st.nbSearch.customDefault":"Custom default: {lane}","st.subagents.title":"Subagent model governance","st.subagents.hint":"Deny entries block a model for every subagent. A subagent model itself comes from the agent’s model pin or the dispatch — there is no configured default.","st.subagents.denyModels":"Denied subagent models (one per line)","st.subagents.denyPlaceholder":"provider/blocked-model","st.subagents.save":"Save subagent settings","st.subagents.saved":"Subagent model governance saved and echoed by the server.","st.settings.configKey":"Config key: {key}","st.agentManager.back":"All agents","st.agentManager.notSet":"Not set","st.agentManager.readOnlyShort":"Read-only","st.agentManager.title":"Agents","st.agentManager.all":"All","st.agentManager.main":"Main","st.agentManager.subagent":"Subagent","st.agentManager.disabledByName":"Disable an agent by name","st.agentManager.disabledByNameHint":"The switch in each row is the normal way to disable an agent. A name you disable here is off on this server for every workspace, including a profile this list does not currently show.","st.agentManager.disableByName":"Disable by name","st.agentManager.enableByName":"Re-enable {name}","st.agentManager.new":"New agent","st.agentManager.name":"Name (lowercase letters, digits, hyphens or underscores)","st.agentManager.scope":"Save to","st.agentManager.userScope":"User · all workspaces","st.agentManager.projectScope":"This workspace","st.agentManager.template":"Start from","st.agentManager.blank":"Blank","st.agentManager.implementer":"Implementer","st.agentManager.reviewer":"Reviewer","st.agentManager.duplicate":"Duplicate current","st.agentManager.create":"Create agent","st.agentManager.created":"Agent created and loaded.","st.agentManager.select":"Choose an agent to inspect or edit.","st.agentManager.instructions":"Instructions","st.agentManager.basics":"Basics","st.agentManager.tools":"Tools","st.agentManager.model":"Model","st.agentManager.advanced":"Advanced","st.agentManager.prompt":"Instructions (prompt body)","st.agentManager.promptRequired":"Blank agents need a description and instructions.","st.agentManager.nameRequired":"Use a unique name with lowercase letters and digits separated by hyphens or underscores.","st.agentManager.noWorkspace":"Open a workspace to create an agent.","st.agentManager.saved":"Agent saved and reloaded.","st.agentManager.readOnly":"This agent is read-only.","st.profiles.team":"Team","st.profiles.backToTeam":"Back to the team","st.profiles.teamIntro":"Every agent, what it runs on, and whom it may call. Change a model or effort here, or open an agent to edit its instructions.","st.profiles.filter":"Show","st.profiles.layout":"View","st.profiles.layoutList":"All agents","st.profiles.layoutTeams":"Teams","st.profiles.rosterTeam":"{name} and the agents it may call","st.profiles.rosterEmpty":"No main agent is loaded. Turn on Main agent for a profile to see its team here.","st.profiles.rosterLeased":"set by {name}","st.profiles.rosterMainMemberHint":"A main agent called by name. It runs as a subagent here; a thread suits longer work.","st.profiles.search":"Filter agents","st.profiles.resolveIn":"Resolve in","st.profiles.colRole":"Agent","st.profiles.colDispatches":"May call","st.profiles.teamEmpty":"No agents are loaded yet.","st.profiles.teamNoMatch":"No agent matches this filter.","st.profiles.teamWarnings.one":"{count} setting needs attention. Open the marked agent for details.","st.profiles.teamWarnings.other":"{count} settings need attention. Open the marked agents for details.","st.profiles.rowWarnings.one":"{count} setting needs attention","st.profiles.rowWarnings.other":"{count} settings need attention","st.profiles.changedCount.one":"{count} unsaved change","st.profiles.changedCount.other":"{count} unsaved changes","st.profiles.dispatchMore":"+{count}","st.profiles.quickSaved":"Saved {name}.","st.profiles.modelFor":"Model for {name}","st.profiles.effortFor":"Effort for {name}","st.profiles.shipped":"Built-in","st.profiles.shippedCopy":"copy of a built-in","st.profiles.yours":"Your agents","st.profiles.model":"Model","st.profiles.modelUnset":"Not pinned","st.profiles.modelExternal":"Model ids come from {engine}.","st.profiles.effort":"Effort","st.profiles.effortUnset":"Model default","st.profiles.effortUnsupported":"not offered by this model","st.profiles.aliasMissingShort":"not in catalog","st.profiles.aliasMissingTitle":"{alias} is not in the model catalog. Runs that need it will fail until the alias is configured.","st.profiles.engine":"Engine","st.profiles.engineNative":"Kiki (native)","st.profiles.engineMainExternal":"Main sessions on an external engine need a Kiki build that supports them.","st.profiles.fieldMapped":"Translated to the {engine} equivalent.","st.profiles.fieldIgnored":"{engine} does not use this setting. The value is kept for when you switch back.","st.profiles.mainToggle":"Main agent","st.profiles.mainOnHint":"Offered for new sessions and threads. Another agent can still call it by name; it stays out of the pick list and the result suggests a thread.","st.profiles.mainOffHint":"Used as a subagent that other agents call.","st.profiles.kikiSubagents":"Delegate to Kiki subagents","st.profiles.kikiSubagentsHint":"{engine} can dispatch this profile’s Kiki subagents, wait for them, and read their results; the reports come back to this session.","st.kikiContext.title":"Connect Kiki","st.kikiContext.intro":"Hands {engine} Kiki’s own tools over MCP. Each switch adds tools; everything is off until you turn it on.","st.kikiContext.summaryOff":"All off","st.kikiContext.short.subagents":"Subagents","st.kikiContext.short.memory":"Memory","st.kikiContext.short.board":"Board","st.kikiContext.short.cron":"Schedules","st.kikiContext.short.threads":"Threads","st.kikiContext.short.history":"History","st.kikiContext.short.hooks":"Hooks","st.kikiContext.group.memory":"Memory","st.kikiContext.group.board":"Task board","st.kikiContext.group.cron":"Schedules","st.kikiContext.group.threads":"Threads","st.kikiContext.group.history":"History","st.kikiContext.group.hooks":"Context hooks","st.kikiContext.hint.memory":"{engine} can search and read saved preferences, feedback and project facts, and save new ones.","st.kikiContext.hint.board":"{engine} can read the workspace’s Own Work cards and create or update them.","st.kikiContext.hint.cron":"{engine} can schedule prompts in this session, list them, and delete them.","st.kikiContext.hint.threads":"{engine} can list and read local threads and send a message to another thread or room.","st.kikiContext.hint.history":"{engine} can search earlier sessions and read their original turns.","st.kikiContext.hint.hooks":"Kiki adds context to {engine} on its own: a memory summary when the session starts, a reminder of goal and notes with each message, and a handoff before compaction. Adds no tools.","st.kikiContext.support.supported":"supports hooks","st.kikiContext.support.untested":"untested","st.kikiContext.support.unsupported":"has no hooks","st.kikiContext.supportHint.untested":"Wired up, but not yet run against the real engine.","st.kikiContext.supportHint.unsupported":"Kiki cannot install hooks for this engine.","st.kikiContext.momentsLabel":"When Kiki adds context","st.kikiContext.moment.SessionStart":"Session start: memory summary","st.kikiContext.moment.UserPromptSubmit":"Each message: goal, notes and new reminders","st.kikiContext.moment.PreCompact":"Before compaction: prepares the handoff, injects nothing","st.kikiContext.moment.Stop":"End of each turn: memory, goal and notes","st.kikiContext.moment.PreInvocation":"Before each call: memory, goal and notes","st.kikiContext.moment.other":"Adds Kiki context","st.kikiContext.fieldAbsent":"is not set: all off.","st.kikiContext.fieldEmpty":"is written as [ ]: explicitly all off.","st.kikiContext.fieldList.one":"lists {count} group.","st.kikiContext.fieldList.other":"lists {count} groups.","st.kikiContext.moreTools.one":"and {count} more","st.kikiContext.moreTools.other":"and {count} more","st.kikiContext.clear":"Remove field","st.kikiContext.scope":"Only applies while this profile runs the main seat, and the profile’s own tool rules still apply. Changes apply when the main profile is bound again, such as in a new session.","st.profiles.prompt":"Agent instructions","st.profiles.promptSize":"{lines} lines · {chars} characters","st.profiles.promptPlaceholder":"Describe the role, how it works, and what it must not do.","st.profiles.promptEmpty":"No instructions.","st.profiles.promptDelivery":"Sent to {engine} as its instructions. The Kiki default system prompt is not added.","st.profiles.whenToUseHint":"Callers read this to decide when to pick this agent.","st.profiles.subagents":"Subagents","st.profiles.addSubagent":"Add agent","st.profiles.noMoreAgents":"Every agent is already listed.","st.profiles.subagentMissing":"not loaded","st.profiles.scopedLease":"Private source","st.profiles.mainAsSubagent":"main agent","st.profiles.leaseModel":"Model here","st.profiles.leaseEffort":"Effort here","st.profiles.leaseFallsBack":"Its own: {value}","st.profiles.leaseHint":"Called in this order. Grey values are the subagent’s own; set one to override it here.","st.profiles.leaseInherits":"Its own ({value})","st.profiles.moveUp":"Move {item} up","st.profiles.moveDown":"Move {item} down","st.profiles.searchAgents":"Search agents","st.profiles.dispatchTitle":"Child agents","st.profiles.dispatchHint":"One setting decides whether this agent may start child agents at all. The three lists below only cover the named presets and routes they can reach. An agent definition supplied by path is a separate route to a child, and turning this off closes it too.","st.profiles.dispatchCanSpawn":"Allow creating child agents","st.profiles.dispatchCanSpawnOff":"Off","st.profiles.dispatchCanSpawnOn":"Allowed","st.profiles.dispatchCanSpawnInherit":"Not set here — follows the settings above this profile.","st.profiles.dispatchCanSpawnOffHint":"This agent starts no child agents. Presets, routes and preset files are all off, and the lists below stay as they are so you can turn it back on.","st.profiles.dispatchCanSpawnInheritHint":"This profile says nothing about child agents, so the switch above it decides.","st.profiles.dispatchAllowed":"Preset list","st.profiles.dispatchAllowedHint":"Which named presets and routes this agent may start. Grey values are the child’s own; set one to override it here.","st.profiles.dispatchAllowedUnset":"Not limited here — any preset this agent can already reach.","st.profiles.dispatchAllowedEmpty":"No preset selectable here. A definition supplied by path is unaffected by this list.","st.profiles.dispatchPreferred":"Recommended first","st.profiles.dispatchPreferredHint":"Order of preference only. It does not allow or forbid anything, and an agent outside this list is still allowed if the preset list allows it.","st.profiles.dispatchDeny":"Never dispatch","st.profiles.dispatchDenyHint":"These names are refused outright, whatever the preset list says.","st.profiles.dispatchClearList":"Stop limiting","st.profiles.dispatchNarrowToList":"Limit to these","st.profiles.dispatchAllowedOpen":"Not limited here — this layer adds no preset scope. The entries below only configure specific presets.","st.profiles.dispatchClearPreferred":"Clear list","st.profiles.dispatchClearDeny":"Clear list","st.profiles.dispatchAddToAllowed":"Add preset","st.profiles.dispatchAddToPreferred":"Add name","st.profiles.dispatchAddToDeny":"Add name","st.profiles.dispatchNotDeclared":"Not declared","st.profiles.dispatchEmptyPresets":"Add the presets this agent may start.","st.profiles.dispatchEmptyPreferred":"No recommendations. Agents are picked by the preset list alone.","st.profiles.dispatchEmptyDeny":"Nothing is refused by name.","st.profiles.dispatchCustomName":"This preset name is not in the current list.","st.profiles.groupWorkspace":"Workspace","st.profiles.groupGlobal":"Global","st.profiles.groupBuiltin":"Built-in","st.profiles.groupMain":"Main","st.profiles.groupSubagents":"Subagents","st.profiles.modelProfiles":"Model candidates","st.profiles.modelProfilesHint":"Configure candidates and their conditions. Guided for callers, not a fallback order.","st.profiles.modelProfilesEmpty":"No candidates configured. When restricted, only the default model is allowed.","st.profiles.candidateModel":"Candidate model","st.profiles.when":"Use when","st.profiles.whenPlaceholder":"e.g. the task needs a 1M context","st.profiles.addCandidate":"Add candidate","st.profiles.allowedModels":"Allowed models","st.profiles.allowedModelsHint":"Limits use to only these models. Clear to remove this limit.","st.profiles.restrictModelsToMenu":"Allow only the default model and declared menu","st.profiles.menuOffHint":"Off: the menu suggests candidates without blocking other models. Other hard rules still apply.","st.profiles.menuOnHint":"On: models outside the menu cannot bind. The default model is included automatically.","st.profiles.declaredMenu":"Declared menu","st.profiles.effectiveModels":"Currently available models","st.profiles.menuDefault":"Default","st.profiles.menuEmpty":"No models","st.profiles.menuPreviewPending":"Calculating available models after this save…","st.profiles.menuPreviewError":"Could not calculate available models. Try again.","st.profiles.menuPreviewUnavailable":"Available model projection is not provided yet.","st.profiles.menuNoCandidates":"No model can bind. Change the default model, declared menu, or hard limits.","st.profiles.menuAdded":"Added to the menu permission domain after saving: {models}","st.profiles.menuRemoved":"Removed from the menu permission domain after saving: {models}","st.profiles.menuDisabled":"Saving removes the menu hard limit. Other hard rules still apply.","st.profiles.softAdvice":"Soft advice","st.profiles.softAdviceHint":"Deviations can still run. Advice does not replace or loosen hard limits.","st.profiles.preferredModels":"Preferred models (soft advice)","st.profiles.discouragedModels":"Discouraged models (soft advice)","st.profiles.preferredEfforts":"Preferred efforts (soft advice)","st.profiles.addEffort":"Add effort","selection.modelMenuBlocked":"This model is outside the available set: {source}. Choose an available menu model or edit the profile declaration.","selection.modelMenuWarning":"This model is outside the profile’s model constraints: {source}. Your selected model will be used; sending is still available.","selection.modelMenuPending":"Reading the profile’s available model set…","selection.modelMenuError":"Could not read the profile’s available model set. Try again.","st.profiles.addModel":"Add model","st.profiles.tools":"Tools","st.profiles.advanced":"Advanced","st.profiles.advancedSummary":"Effort limits, denied models, budgets, rare fields","st.profiles.allowedEfforts":"Allowed efforts (hard limit)","st.profiles.denyModels":"Denied models (hard limit)","st.profiles.unsetShort":"Unset","st.profiles.spawnTitle":"Limits for everything it spawns","st.profiles.spawnHint":"A ceiling on the subagents this agent starts. Empty lists add no limit.","st.profiles.spawnClear":"Clear limits","st.profiles.spawnAllowedModels":"Only these models","st.profiles.spawnDenyModels":"Never these models","st.profiles.spawnAllowedEfforts":"Only these efforts","st.profiles.spawnDisallowedTools":"Tools they may not use","st.profiles.engineNotInstalled":"not found on this machine","st.profiles.engineNotFound":"{engine} was not found on this machine. Runs on it fail until it is installed.","st.profiles.rareFieldsHint":"Advanced parameters and prompt overrides can be edited in Raw file below.","st.profiles.removeItem":"Remove {item}","st.profiles.editMode":"Editing view","st.profiles.modeForm":"Form","st.profiles.modeRaw":"Raw file","st.profiles.rawAfterSave":"Save or discard the form to open the raw file.","st.profiles.rawHint":"The whole file. Reloads after save.","st.profiles.rawReadOnly":"This entry is read-only.","st.profiles.rawBuiltin":"Built-in agent. Duplicate to edit.","st.profiles.rawLabel":"Raw file {file}","st.profiles.readOnlyExplain":"This agent cannot be edited directly. Duplicate to edit.","st.profiles.duplicateToEdit":"Duplicate to edit","st.profiles.duplicate":"Duplicate","st.profiles.problem.description":"Add a description before saving.","st.profiles.problem.mainInherit":"A main agent has no caller to follow; pick a model or leave it unpinned.","st.profiles.problem.tools":'A tool list is set to "list" but names no tool.',"st.profiles.problem.subagents":"The subagent list is empty or repeats a name.","st.profiles.problem.modelProfiles":"Each model candidate needs a distinct model.","st.profiles.diagnostics":"Diagnostics","st.profiles.diag.aliasMissing":"{field}: {alias} is not in the model catalog.","st.profiles.diag.leaseAliasMissing":"Subagent {name}: {alias} is not in the model catalog.","st.profiles.diag.subagentMissing":"Subagent {name} is not loaded, so calls to it fail.","st.profiles.diag.shadowedBy":"Not running. A same-name agent wins: {file}.","st.profiles.diag.shadows":"Runs instead of same-name files: {files}.","st.profiles.diag.shadowsList.one":"Runs instead of {count} same-name file, which is ignored:","st.profiles.diag.shadowsList.other":"Runs instead of {count} same-name files, which are ignored:","st.profiles.diag.builtinModified":"Edited copy of a built-in agent.","st.profiles.diag.builtinUpdate":"Edited copy of a built-in agent; a newer original ships with this Kiki.","st.profiles.diag.executorIgnored":"The engine ignores: {fields}.","st.profiles.openWinner":"Open it","st.profiles.start.copy":"Copy an agent","st.profiles.start.copyHint":"Start from a built-in or one of yours, with its instructions and settings.","st.profiles.start.template":"Template","st.profiles.start.templateHint":"An implementer or reviewer to adapt.","st.profiles.start.blank":"Blank","st.profiles.start.blankHint":"A description and instructions, nothing else.","st.profiles.copyFrom":"Copy from","st.profiles.copyHint":"The copy keeps every field of the source file. The original stays unchanged.","st.profiles.nameTaken":"{name} is already used by another agent.","st.profiles.optionalKeep":"leave empty to keep the source","st.mainAgents.title":"Main agents","st.mainAgents.defaultTitle":"Default main agent","st.mainAgents.defaultHint":"This is the default main agent for the selected workspace. Inspect its source and available subagents below.","st.mainAgents.empty":"No main agents are currently loaded.","st.subagentProfiles.title":"Subagents","st.subagentProfiles.empty":"No subagents are currently loaded.","st.namedAgents.title":"Agents","st.namedAgents.editHint":"Enable, disable, or configure agents here. Supports parameter adjustments and raw file editing.","st.namedAgents.readOnlyHint":"Supports parameter adjustments and raw file editing.","st.namedAgents.loading":"Loading agents…","st.namedAgents.empty":"No agents are currently loaded.","st.namedAgents.technicalDetails":"Technical details","st.namedAgents.overridesBuiltin":"This agent overrides the built-in agent with the same name.","st.namedAgents.overriddenByFile":"Built-in agent overridden by {file}","st.namedAgents.shadowedByBuiltin":"Not in effect — the same-named built-in agent takes precedence. Set override: true in this file to use it instead.","st.namedAgents.newSession":"New session","st.namedAgents.newSessionDisabled":"Enable this agent before starting a session with it.","st.namedAgents.newSessionShadowed":"Not in effect — a session with this name would run the same-named built-in agent instead. Set override: true in the file first.","st.namedAgents.newSessionDisabledMain":"Start a main session with this agent — it just won’t be called as a subagent while off.","st.namedAgents.modelProfile":"model settings","st.namedAgents.spawnConstraints":"spawn constraints","st.namedAgents.delegationNotice":"delegation notice","st.namedAgents.promptMode":"prompt mode","st.namedAgents.prompt":"prompt","st.namedAgents.contextBudget":"Context budget","st.namedAgents.maxCompletionTokens":"Max completion tokens","st.namedAgents.requestParams":"request params","st.namedAgents.unspecified":"Unspecified","st.namedAgents.allowedModels":"allowed models","st.namedAgents.deniedModels":"denied models","st.namedAgents.allowedEfforts":"allowed efforts","st.namedAgents.subagentLease":"subagent","st.namedAgents.scopedBadge":"Scoped","st.namedAgents.leaseSource":"source","st.namedAgents.leaseStatus":"status","st.namedAgents.leaseReady":"ready","st.namedAgents.leaseUnavailable":"unavailable","st.namedAgents.projectionHint":"Additional detailed fields can be inspected and edited in the raw file.","st.namedAgents.diskVersion":"Current on-disk version","st.namedAgents.diskVersionHint":"The running agent is bound to a different definition with this name; this lists the same-named definition currently on disk.","st.namedAgents.sourceFile":"source file","st.namedAgents.builtin":"built in (no source file)","st.namedAgents.enabled":"Enabled","st.namedAgents.builtinToggleHint":"Turn this built-in agent on or off. While off, it won’t be called as a subagent.","st.namedAgents.nonBuiltinToggleHint":"Only built-in agents can be enabled or disabled here.","st.namedAgents.defaultToggleHint":"Turning the default agent off only stops it from being called as a subagent — you can still run main sessions with it.","st.namedAgents.namedToggleHint":"Turn this agent on or off everywhere. While off, it won’t be called as a subagent.","st.namedAgents.namedToggleScope":"Server-wide · affects every agent with this name","st.namedAgents.disabledBadge":"disabled","st.namedAgents.disabledMainHint":"Still available for main sessions — it just won’t be called as a subagent.","st.namedAgents.workspaces":"workspaces","st.namedAgents.availableSubagents":"Available subagents","st.namedAgents.workspaceHint":"Agents resolve against this workspace; workspace files apply only to it.","st.namedAgents.modelPin":"pinned model alias","st.namedAgents.whenToUse":"When to use","st.namedAgents.defaultModelThinkingEffort":"Default model thinking effort","st.namedAgents.serviceTier":"Service tier","st.namedAgents.inherit":"Inherit / unset","st.namedAgents.unsetModelPin":"No model pin (unset)","st.namedAgents.followCallerModel":"Follow caller (inherit)","st.namedAgents.followCallerModelHint":"For subagents: use the caller’s current model and thinking effort unless explicitly specified.","st.namedAgents.mainCannotFollowCaller":"A main agent has no caller; choose a configured model alias or leave the pin unset.","st.namedAgents.tools":"Allowed tools","st.namedAgents.toolsModeInherit":"Inherit","st.namedAgents.toolsModeDenyAll":"Deny all","st.namedAgents.toolsModeList":"Allow list only","st.namedAgents.disallowedTools":"Disallowed tools","st.namedAgents.disallowedToolsModeNone":"Do not deny any tools","st.namedAgents.disallowedToolsModeDeny":"Deny listed tools","st.namedAgents.toolsListRequired":"Enter at least one tool name, or choose “Deny all” as the mode.","st.namedAgents.toolsPlaceholder":"Read, Bash (comma or newline separated)","st.namedAgents.route":"route","st.namedAgents.routeModel":"Route model alias: {route}","st.namedAgents.description":"Description","st.namedAgents.edit":"Edit","st.namedAgents.editProfileTitle":"Edit agent: {name}","st.namedAgents.readOnly":"read-only","st.namedAgents.editRaw":"View / edit raw file","st.namedAgents.viewRaw":"View raw file","st.namedAgents.hideRaw":"Hide raw file","st.namedAgents.rawLoading":"Loading the source file…","st.namedAgents.saveRaw":"Save raw file","st.namedAgents.rawSaved":"Raw agent file saved, validated, and reloaded.","st.namedAgents.saved":"Agent saved and reloaded.","st.shipped.badge":"Built-in","st.shipped.clean":"unmodified","st.shipped.custom":"modified","st.shipped.updateAvailable":"modified · newer original available","st.shipped.removed":"removed","st.shipped.restore":"Restore original","st.shipped.restoreTitle":'Restore the original of built-in agent "{name}"?',"st.shipped.restoreBody":"The on-disk copy is replaced with the original bundled with this release, and the server reloads agents right away.","st.shipped.restoreRemovedBody":"The on-disk copy was removed; restoring recreates the original bundled with this release, and the server reloads agents right away.","st.shipped.restoreOverwrite":"Every change in the current copy is overwritten; the file is backed up automatically before the restore.","st.shipped.restoreModelPin":"The current copy pins model {model}; the original has no pin, so after the restore dispatches without an explicit model_alias use the default model instead.","st.shipped.restored":"Original restored and agents reloaded.","st.subagentDefault.title":"Default subagent","st.subagentDefault.hint":"Used when AgentRun does not specify an agent.","st.subagentDefault.label":"Default agent for AgentRun","st.subagentDefault.strict":"Require an explicit agent","st.subagentDefault.strictHint":"Dispatches that omit the agent fail with an error instead of falling back to a default.","st.subagentDefault.unresolvable":'The default "{name}" is not among the loaded agents; dispatches without an explicit agent cannot resolve it.',"st.subagentDefault.disabledTarget":'"{name}" is disabled; while disabled it is not invoked as a subagent.',"st.subagentDefault.noModelPin":"This agent pins no model; dispatches without an explicit model_alias use the default model.","st.subagentDefault.saved":"Default subagent saved.","st.subagentTools.title":"Tool settings","st.subagentTools.hint":"Pick an object: the default rule covers every subagent, an agent shows that agent’s own tool lists.","st.subagentTools.objectLabel":"Object","st.subagentTools.objectDetailOpen":"Where this object lives, and its settings detail","st.subagentTools.backToList":"Tools","st.subagentTools.objectDefault":"Default rule","st.subagentTools.objectDefaultHint":"[subagent].allowed_tools","st.subagentTools.objectGroupDefault":"Server","st.subagentTools.objectGroupProfiles":"Agents","st.subagentTools.objectDefaultDescription":"The server-wide rule for every subagent. It configures the tools subagents do not get by default; every other tool keeps its default access.","st.subagentTools.objectSource":"From {source} · {file}","st.subagentTools.objectSourceBuiltin":"From {source} (built-in definition, no file)","st.subagentTools.objectWorkspace":"workspace {id}","st.subagentTools.objectExecutor":"executor {executor}","st.subagentTools.searchLabel":"Search tools","st.subagentTools.searchPlaceholder":"Search tools, purposes and sources","st.subagentTools.clearSearch":"Clear search","st.subagentTools.catalogLoading":"Reading the tool catalog…","st.subagentTools.catalogEmptyTitle":"This server returned no tool catalog.","st.subagentTools.catalogEmptyBody":"The catalog comes from the connected server; read it again once it answers.","st.subagentTools.catalogRetry":"Read again","st.subagentTools.noMatches":"No tool matches “{query}”.","st.subagentTools.toolServer":"MCP server {id}","st.subagentTools.sourceTag.mcp":"MCP","st.subagentTools.sourceTag.plugin":"Plugin","st.subagentTools.sourceTag.skill":"Skill","st.subagentTools.statusAllowed":"Allowed","st.subagentTools.statusBlocked":"Blocked","st.subagentTools.statusInherit":"Inherited","st.subagentTools.statusFixed":"Not editable","st.subagentTools.reasonDefaultAllowed":"Allowed by default","st.subagentTools.reasonServerOptIn":"Allowed by the server rule","st.subagentTools.reasonOptInOff":"Needs an explicit allow","st.subagentTools.reasonProfileExplicit":"Named in this agent’s tools","st.subagentTools.reasonProfilePattern":"Covered by one list entry that also matches other tools","st.subagentTools.reasonProfileDenied":"Denied by this agent","st.subagentTools.reasonProfileAllowlist":"Not in this agent’s tools list","st.subagentTools.reasonInheritBase":"Follows the default rule: {base}","st.subagentTools.reasonMainOnly":"Main agents only","st.subagentTools.reasonExecutor":"Decided by the executor","st.subagentTools.actionOptInAria":"Allow subagents to use {name}","st.subagentTools.actionProfileOptInAria":"Let subagents of this profile use {name}","st.subagentTools.profileOptInScopeHint":"This switch only decides whether subagents of this profile may use the tool. A main conversation is not limited by it, and this profile’s own tools and disallowedTools lists still decide what a main conversation can pick.","st.subagentTools.actionAllow":"Allow","st.subagentTools.actionDeny":"Deny","st.subagentTools.actionEditor":"Lists…","st.subagentTools.actionEditorAria":"Edit the tool lists that decide {name} in the agent editor","st.subagentTools.detailAllow":"Allow {name} for this agent","st.subagentTools.detailDeny":"Deny {name} for this agent","st.subagentTools.detailDefaultAllowed":"The default rule allows {name} for every subagent.","st.subagentTools.detailServerOptIn":"The default rule allows {name} on top of the default access.","st.subagentTools.detailOptInOff":"{name} is off for subagents: the default rule does not allow it and this agent does not name it.","st.subagentTools.detailProfileExplicit":"This agent names {name} in its own tools list.","st.subagentTools.detailProfilePattern":"This agent covers {name} through one list entry that also matches other tools (a pattern or an older name); change it in the tool lists, not per tool.","st.subagentTools.detailProfileDenied":"This agent denies {name} in its disallowedTools list.","st.subagentTools.detailProfileAllowlist":"This agent restricts tools to its own list, and {name} is not on it.","st.subagentTools.detailInherit":"This agent’s lists do not mention {name}; it follows the default rule: {base}.","st.subagentTools.detailMainOnly":"{name} is main-agent only: the subagent tool policy keeps it out, and neither the default rule nor an agent tool list can open it to subagents.","st.subagentTools.detailExecutor":"This agent runs on the {executor} executor, which decides its own tools.","st.subagentTools.detailExecutorFieldOff":"This field has no effect on {executor}.","st.subagentTools.summary":"{configurable} settable here · {mainOnly} main-agent only · {total} in the server catalog","st.subagentTools.rulePending":"The default rule has unsaved changes.","st.subagentTools.ruleConfigKeyLabel":"Configuration key and stored value","st.subagentTools.ruleValuesEmpty":"No extra allows","st.subagentTools.detailRuleNote":"The rule only opens tools that are off for subagents by default. What a session can really call also depends on the global tool policy and that session.","st.subagentTools.listsTools":"tools","st.subagentTools.listsDisallowedTools":"disallowedTools","st.subagentTools.valuesUnset":"Not written (restricts nothing)","st.subagentTools.valuesEmptyTools":"Empty list (allows no tool)","st.subagentTools.valuesEmptyDeny":"Empty list (denies no tool)","st.subagentTools.applicabilityIgnored":"{engine} does not use this list.","st.subagentTools.applicabilityUnknown":"{engine} does not declare whether it uses this list.","st.subagentTools.editToolLists":"Edit tool lists","st.subagentTools.newSession":"New {name} session","st.subagentTools.unwritableProfile":"This agent has no writable profile file, so its tool lists cannot be edited here.","st.subagentTools.sessionCapabilityHint":"This page shows configuration. The tools a session really has are listed in that session’s agent panel.","st.subagentTools.profileMissing":"This agent is no longer in the catalog.","st.subagentTools.saveRule":"Save tool access","st.subagentTools.saveProfile":"Save tool lists","st.subagentTools.pendingChanges":"{count} changed","st.subagentTools.changedMark":"Not saved yet","st.subagentTools.reset":"Restore server default","st.sidecar.subagentTimeout":"Subagent timeout","st.sidecar.builtinSkills":"Include built-in product skills","st.sidecar.savedEcho":"Server validated, saved, and echoed these defaults.","st.sidecar.save":"Save subagent timeout","st.sidecar.saving":"Saving file…","st.sidecar.pendingFields":"Pending fields: {fields}. This badge remains until a verified desktop restart or explicit browser acknowledgement.","st.subagentOpenMode.title":"Subagent panel open mode","st.subagentOpenMode.label":"Open mode","st.subagentOpenMode.tab":"Tabs (default)","st.subagentOpenMode.fullscreen":"Fullscreen","st.subagentOpenMode.hint":"Choose whether clicking a subagent opens a tab alongside files in the preview workspace or opens in fullscreen. Narrow windows automatically switch to fullscreen.","st.subagentTimeout.title":"Subagent timeout","st.subagentTimeout.readOnly":"Edit it in Subagent execution limits; this card only shows the effective value.","st.subagentTimeout.effective":"A server-wide setting: after saving, it applies to later subagent dispatches in every session on this server; a running subagent keeps the timeout it started with and is not retimed.","st.subagentTimeout.envBound":"When the server sets the KIKI_SUBAGENT_TIMEOUT_MS environment variable, it overrides the value saved here.","st.tools.title":"Tools","st.tools.loading":"Loading tools…","st.tools.source":"source: {source}","st.tools.policyHint":"This affects every agent on this server. Denied tools take priority; tools remain subject to each agent’s permissions and approval rules.","st.tools.configOnly":"Configured tool not present in the current catalog.","st.tools.policyAria":"Policy for {name}","st.tools.inherited":"Follow agent","st.tools.enabled":"Selected","st.tools.disabled":"Deny","st.tools.savePolicy":"Save tool policy","st.tools.mode":"Allowed tools","st.tools.followAgent":"Follow each agent","st.tools.allowlist":"Only allow selected tools","st.tools.profileImpact":"Use each agent’s existing tools and apply the denials below. Switching clears the allowlist.","st.tools.allowlistImpact":"After saving, only selected tools are allowed; tools marked “Deny” remain unavailable.","st.tools.emptyAllowlist":"Select at least one tool before saving. An empty list means “follow each agent”, not “deny all”.","st.tools.search":"Search tools by name","st.tools.currentOn":"Currently available on this server","st.tools.currentOff":"Currently unavailable on this server","st.tools.description":"What this tool does","st.tools.excluded":"Not selected","st.tools.noMatches":"No matching tools.","st.tools.unsaved":"Unsaved changes — the server keeps its current values until you save.","st.hooks.title":"Automatic actions (Hooks)","st.hooks.hint":"Declarative rules inject text or observe lifecycle events; command rules run shell commands on the server. Whether a rule actually fires in a session is shown under Hooks in that session's agent panel.","st.hooks.aria":"Hooks configuration (JSON)","st.hooks.saved":"Automatic actions saved.","st.hooks.configInvalid":"Use a legacy hook array or a schemaVersion: 2 object with inject/observe rules. Check {field}: {message}.","st.hooks.invalid":"Rule {rule}: check {field}. Use a supported event, a nonempty command, a valid regular expression, and an integer timeout from 1 to 600. Other fields are not supported.","st.hooks.form":"Use rule form","st.hooks.advanced":"Advanced: edit JSON","st.hooks.empty":"No automatic actions configured yet.","st.hooks.rule":"Rule {rule}","st.hooks.event":"When","st.hooks.command":"Shell command","st.hooks.matcher":"Match condition (optional regex)","st.hooks.timeout":"Timeout (seconds)","st.hooks.matchHint":"Leave the condition empty to match every occurrence of this event. For tool events, match the tool name; other events provide their own event value. Timeout defaults to 30 seconds.","st.hooks.removeRule":"Remove rule {rule}","st.hooks.remove":"Remove rule","st.hooks.add":"Add command rule","st.hooks.save":"Save actions","st.hooks.event.PreToolUse":"Before a tool runs","st.hooks.event.PostToolUse":"After a tool succeeds","st.hooks.event.PostToolUseFailure":"After a tool fails","st.hooks.event.PermissionRequest":"When approval is requested","st.hooks.event.PermissionResult":"After an approval decision","st.hooks.event.UserPromptSubmit":"Before a user prompt is submitted","st.hooks.event.UserPromptQueued":"When a prompt is queued","st.hooks.event.TurnStarted":"When a turn starts","st.hooks.event.Stop":"Before an agent stops","st.hooks.event.StopFailure":"When stopping fails","st.hooks.event.Interrupt":"When interrupted","st.hooks.event.SessionStart":"When a session starts","st.hooks.event.SessionEnd":"When a session ends","st.hooks.event.SessionHeartbeat":"On session heartbeat","st.hooks.event.SubagentStart":"When a subagent starts","st.hooks.event.SubagentStop":"When a subagent stops","st.hooks.event.TaskStarted":"When a task starts","st.hooks.event.PreCompact":"Before context compaction","st.hooks.event.PostCompact":"After context compaction","st.hooks.event.Notification":"When a notification arrives","st.hooks.addDeclarative":"Add declarative rule","st.hooks.declarativeGroup":"Declarative rules","st.hooks.commandGroup":"Command rules","st.hooks.selectRule":"Select a rule to edit, or add a new one.","st.hooks.rowIssue":"Has an issue to fix","st.hooks.flatten":"Use command rules only","st.hooks.ruleId":"Rule ID","st.hooks.ruleIdHint":"Other hook sources reference this rule as user/<ID>.","st.hooks.action":"Action","st.hooks.action.inject":"Inject text","st.hooks.action.observe":"Observe","st.hooks.observeHint":"Observes the event without injecting text.","st.hooks.injectText":"Text to inject","st.hooks.injectSource.text":"Inline text","st.hooks.injectSource.file":"File reference","st.hooks.injectFile":"Text file path","st.hooks.injectFileHint":"Resolved relative to the config file.","st.hooks.priority":"Priority","st.hooks.priorityHint":"Lower values run first. Default 100.","st.hooks.ruleEnabled":"Enable this rule","st.hooks.matchTitle":"Match conditions","st.hooks.matchEmpty":"No conditions — fires on every occurrence.","st.hooks.matchEdit":"Edit conditions","st.hooks.matchLine":"One per line; empty means no restriction.","st.hooks.match.models":"Models","st.hooks.match.profiles":"Profiles","st.hooks.match.routes":"Routes","st.hooks.match.executors":"Executors","st.hooks.match.tools":"Tools","st.hooks.match.agentRoles":"Agent roles","st.hooks.match.statuses":"Tool statuses","st.hooks.match.sources":"Message sources","st.hooks.match.outcomes":"Turn outcomes","st.hooks.matchValue.root":"Main agent","st.hooks.matchValue.subagent":"Subagent","st.hooks.matchValue.success":"Success","st.hooks.matchValue.error":"Error","st.hooks.matchValue.cancelled":"Cancelled","st.hooks.matchValue.denied":"Denied","st.hooks.matchValue.user":"User","st.hooks.matchValue.task":"Task","st.hooks.matchValue.mailbox":"Mailbox","st.hooks.matchValue.steering":"Steering","st.hooks.matchValue.completed":"Completed","st.hooks.matchValue.failed":"Failed","st.hooks.matchValue.blocked":"Blocked","st.hooks.cadence":"Cadence","st.hooks.cadenceEnable":"Repeat every N completed steps","st.hooks.cadenceEvery":"Completed steps between runs","st.hooks.cadenceScope":"Counter scope","st.hooks.cadenceScope.agent":"Per agent","st.hooks.cadenceScope.turn":"Per turn","st.hooks.v2Enabled":"Enable declarative rules","st.hooks.v2EnabledHint":"When off, declarative rules do not run. Command rules are not affected.","st.hooks.filesTitle":"Rule files","st.hooks.filesHint":"TOML files with a [hooks] table (schema_version = 2); paths resolve relative to the config file.","st.hooks.filesAdd":"Add file path","st.hooks.disabledTitle":"Disabled rules","st.hooks.disabledHint":"Fully-qualified rule IDs such as user/focus; * disables all declarative rules. Command rules are not affected.","st.hooks.disabledAdd":"Add rule ID","st.hooks.commandHint":"The command runs on the server and can read and write files. Saving never runs commands.","st.hooks.eventInjectOnly":"Inject is available on prompt submit and before steps","st.hooks.eventCadenceOnly":"Cadence is available on step events","st.hooks.v2event.prompt.submit":"On prompt submit","st.hooks.v2event.step.before":"Before each step","st.hooks.v2event.step.after":"After each step","st.hooks.v2event.turn.after":"After a turn","st.hooks.v2event.session.start":"When a session starts","st.hooks.v2event.turn.stopping":"When a turn stops","st.hooks.v2event.tool.before":"Before a tool runs","st.hooks.v2event.tool.after":"After a tool runs","st.hooks.ruleDisabled":"Disabled","st.mcp.title":"MCP servers","st.mcp.restart":"Restart","st.mcp.restarting":"Restarting…","st.mcp.restartRequested":"Restart requested.","st.mcp.toolsCount":"{count} tools","st.mcp.workspace":"Workspace","st.mcp.configTitle":"Configured entries","st.mcp.configHint":"Every server this workspace can see. Changes are saved to your configuration; entries from plugins or project files are read-only.","st.mcp.configLoading":"Loading configured entries…","st.mcp.empty":"No MCP entries configured for this workspace. Use Add server above to create one.","st.mcp.add":"Add server","st.mcp.edit":"Edit","st.mcp.delete":"Delete","st.mcp.readOnly":"Read-only","st.mcp.readOnlyHint":"This entry comes from a plugin or a project file. Edit it at its source.","st.mcp.test":"Test connection","st.mcp.testing":"Connecting…","st.mcp.testOk":"Connected. {output}","st.mcp.testFailed":"Could not connect. {output}","st.mcp.name":"Name","st.mcp.transport":"Transport","st.mcp.command":"Command","st.mcp.args":"Arguments (one per line)","st.mcp.argsPlaceholder":`-y
4
- @modelcontextprotocol/server-example`,"st.mcp.env":"Environment variables","st.mcp.envPlaceholder":"API_TOKEN=YOUR_API_KEY","st.mcp.url":"URL","st.mcp.bearerEnv":"Bearer token environment variable","st.mcp.bearerEnvHint":"Variable name only; the value stays on the server. If it is missing or empty, the connection fails without falling back.","st.mcp.clearBearerEnv":"Clear env reference","st.mcp.authSourceEnv":"Authorization: server environment. It overrides the header and prevents OAuth from attaching.","st.mcp.authSourceHeader":"Authorization: this header. It overrides a saved OAuth token.","st.mcp.authSourceOAuth":"Authorization: saved OAuth token if available; otherwise none.","st.mcp.oauthConfigured":"OAuth is configured for this server. Any saved token is separate from headers and is not revoked by changing this form.","st.mcp.oauthDisconnect":"Clear saved OAuth credentials","st.mcp.oauthConfirmTitle":"Clear saved OAuth credentials for “{name}”?","st.mcp.oauthConfirmBody":"If saved OAuth credentials exist for {url}, this removes them and may interrupt live MCP connections. This does not delete the server or change its HTTP headers or environment references.","st.mcp.oauthConfirmAction":"Clear OAuth credentials","st.mcp.oauthRemoved":"Saved OAuth credentials cleared, if any existed.","st.mcp.oauthResetError":"Could not clear saved OAuth credentials. They may still be active; try again.","st.mcp.oauthTargetChanged":"This MCP connection changed. Review it and confirm the credentials to clear again.","st.mcp.oauthOldTarget":"Changing the name, URL, or transport does not remove any saved OAuth credentials for {name} at {url}. Clear that exact entry below, before or after saving.","st.mcp.storedOAuthTitle":"Saved OAuth credentials","st.mcp.storedOAuthHint":"Saved credentials. Full URLs are hidden by default.","st.mcp.storedOAuthIdentity":"Credential {id}","st.mcp.storedOAuthReveal":"Show full URL","st.mcp.storedOAuthHide":"Hide full URL","st.mcp.storedOAuthRevealing":"Loading URL…","st.mcp.storedOAuthRevealError":"Could not show this URL. Try again.","st.mcp.storedOAuthLoading":"Loading saved OAuth credentials…","st.mcp.storedOAuthError":"Could not load saved OAuth credentials. Retry to review them.","st.mcp.storedOAuthRetry":"Retry credential list","st.mcp.storedOAuthEmpty":"No saved OAuth credentials found.","st.mcp.storedOAuthOriginUnknown":"Saved connection","st.mcp.storedOAuthClear":"Clear credentials","st.mcp.storedOAuthClearLabel":"Clear credentials for {name} at {url}","st.mcp.storedOAuthConfirmTitle":"Clear saved OAuth credentials for “{name}”?","st.mcp.storedOAuthConfirmBody":"This clears only the saved credentials for {url}, if still present. Other connections using this same identity may be interrupted. It does not change any server configuration.","st.mcp.headerOverridden":"This header is ignored while the env reference is set. Clear the reference before editing or removing it.","st.mcp.headers":"HTTP headers","st.mcp.headersHint":"Changing the URL or transport clears these headers and authentication settings.","st.mcp.headerName":"Header name","st.mcp.headerValue":"Value","st.mcp.addHeader":"Add header","st.mcp.removeHeader":"Remove header","st.mcp.nameRequired":"Server name is required.","st.mcp.commandRequired":"A stdio server requires a command.","st.mcp.envInvalid":"Each environment line must use KEY=value.","st.mcp.headersInvalid":"Each header needs a valid name followed by =. Edit or remove the incomplete row.","st.mcp.headersDuplicate":"Header names must be unique, regardless of letter case. Rename or remove the duplicate.","st.mcp.urlInvalid":"Enter a valid server URL.","st.mcp.saved":"MCP entry saved and reloaded.","st.mcp.deleted":"MCP entry deleted and reloaded.","st.mcp.deleteTitle":"Delete MCP server?","st.mcp.deleteBody":"Delete “{name}” from its mcp.json file? The connection and tools will be removed after reload.","st.mcp.statusTitle":"Server status","st.mcp.timeoutsTitle":"MCP timeouts","st.mcp.timeoutsHint":"Server-wide MCP timeouts in milliseconds. Leave a field empty to use the default.","st.mcp.timeoutsSaved":"MCP timeouts saved and echoed by the server.","st.mcp.status.connected":"Connected","st.mcp.status.connecting":"Connecting","st.mcp.status.error":"Connection error","st.mcp.status.disconnected":"Disconnected","st.mcp.errorHint":"Fix the configuration, then press Restart to reconnect.","st.mcp.statusScope":"Server-wide, shared across workspaces","st.mcp.startupTimeoutHint":"How long to wait for a server process to start. Raise it for slow local servers.","st.mcp.toolTimeoutHint":"How long a single tool call may run before it fails.","st.mcp.startupTimeoutDetail":"Empty uses the default; clearing a field that has a value removes it, so every server goes back to the default. A server entry can still set its own startup timeout, which wins over this one.","st.mcp.toolTimeoutDetail":"Empty uses the default; clearing a field that has a value removes it, so every server goes back to the default. A server entry can still set its own tool timeout, which wins over this one.","st.mcp.formTitleEdit":"Edit server","st.mcp.nameHint":"Required. This name identifies the server.","st.mcp.namePlaceholder":"e.g. filesystem","st.workspaces.title":"Workspaces","st.workspaces.loading":"Loading workspaces…","st.workspaces.newSession":"New session","st.workspaces.search":"Filter workspaces…","st.workspaces.noMatches":"No workspaces match “{query}”.","st.workspaces.rename":"Rename","st.workspaces.remove":"Unregister","st.workspaces.pin":"Pin to the top","st.workspaces.unpin":"Unpin","st.workspaces.pinAria":"Pin {name} to the top","st.workspaces.unpinAria":"Unpin {name}","st.workspaces.renameTitle":"Rename workspace","st.workspaces.renameAria":"Rename {name}","st.workspaces.removeAria":"Unregister {name}","st.workspaces.removeTitle":"Unregister “{name}”?","st.workspaces.removeBody":"This unregisters the workspace from the server. Its on-disk files are untouched.","st.workspaces.removeKeepSessions.one":"Its 1 session stays on the server.","st.workspaces.removeKeepSessions.other":"Its {count} sessions stay on the server.","st.workspaces.removeNoNewSessions":"New sessions can no longer be started in it.","st.workspaces.pinnedBadge":"Pinned","st.workspaces.sessionCount.one":"1 session","st.workspaces.sessionCount.other":"{count} sessions","st.workspaces.lastOpened":"Last opened {time}","st.workspaces.emptyTitle":"No workspaces yet","st.workspaces.emptyBody":"Pick a folder when starting a new session and it will appear here.","worktree.markTitle":`Worktree branch {branch}
5
- From {source} at {base}`,"worktree.newToggle":"Run in a new worktree","worktree.newHint":"Its own branch and checkout, so your working copy stays untouched.","worktree.confirmTitle":"Run in a new worktree?","worktree.confirmBody":"Kiki creates a separate checkout for “{root}” under its own worktree directory (~/.kiki/worktrees/…), and this session works in that copy.","worktree.confirmBranch":"A new kiki/… branch is cut from the current checkout’s HEAD; your working copy is untouched.","worktree.confirmCleanup":"Archiving this session can remove its worktree along with it.","worktree.confirmOk":"Turn on","worktree.confirmSkip":"Don’t ask again","worktree.archiveTitle":"Archive “{title}”?","worktree.archiveBody":"It moves to Archived and can be restored any time.","worktree.archiveRemove":"Also remove its worktree","worktree.archiveRemoveHint":"Only if nothing would be lost. Uncommitted changes or unpushed commits keep the worktree.","worktree.archiveConfirm":"Archive session","worktree.archiveRemoved":"Archived and removed worktree {branch}.","worktree.archiveKept":"Archived. Kept worktree {branch}: {reason}","worktree.archiveKeptLoss":"Archived. Kept worktree {branch} because it has changes that would be lost. Remove it from Settings › Workspaces.","st.worktrees.title":"Worktrees","st.worktreePolicy.title":"Policy","st.worktreePolicy.enabled":"Allow new worktrees","st.worktreePolicy.enabledHelp":"When off, new sessions can’t start in a worktree. Existing ones keep working.","st.worktreePolicy.base":"Start from","st.worktreePolicy.baseHelp":"The commit a new worktree branches from when the session doesn’t say.","st.worktreePolicy.baseHead":"Current commit","st.worktreePolicy.baseFresh":"Default branch","st.worktreePolicy.prefix":"Branch prefix","st.worktreePolicy.prefixHelp":"Put before every new worktree branch name. Default kiki/.","st.worktreePolicy.prefixInvalid":"Use lowercase letters, digits, - and /, ending in / (for example agent/).","st.worktreePolicy.autoCleanup":"Clean up automatically","st.worktreePolicy.autoCleanupHelp":"Run clean up at startup and every 6 hours, with the same rules as the button above. Takes effect after restart.","st.worktreePolicy.afterDays":"Archived for at least","st.worktreePolicy.afterDaysHelp":"Clean up only removes worktrees whose session was archived this long ago.","st.worktreePolicy.daysUnit":"days","st.worktreePolicy.daysInvalid":"Use a whole number of days, 1 or more.","st.worktreePolicy.advanced":"Storage, git timeout and disposable files","st.worktreePolicy.root":"Storage folder","st.worktreePolicy.rootHelp":"Where new worktrees are checked out. Must be an absolute path outside your repositories.","st.worktreePolicy.rootDefault":"Default: worktrees in the Kiki home","st.worktreePolicy.rootInvalid":"Use an absolute path, or leave it empty for the default.","st.worktreePolicy.gitTimeout":"Git timeout","st.worktreePolicy.gitTimeoutHelp":"Longest a single git command may run for a worktree. Default 300 s.","st.worktreePolicy.timeoutInvalid":"Use a whole number from 1 to 600.","st.worktreePolicy.disposable":"Disposable ignored files","st.worktreePolicy.disposableHelp":"Ignored files or folders clean up may delete with a worktree, one per line. Other ignored files keep a worktree.","st.worktrees.hint":"Sessions started in a new worktree get their own branch and checkout. Removing one deletes the checkout; the session stays in your history.","st.worktrees.cleanupRule":"Clean up removes worktrees whose session has been archived for {days} days or more. Anything with uncommitted changes, unpushed commits, ignored files that are not build output, or a lock from another tool is kept.","st.worktrees.cleanup":"Clean up","st.worktrees.cleanupChecking":"Checking…","st.worktrees.cleanupNone":"Nothing to clean up right now.","st.worktrees.cleanupOnlyKept.one":"Nothing to clean up: the 1 worktree that is due is kept by the rules above.","st.worktrees.cleanupOnlyKept.other":"Nothing to clean up: the {count} worktrees that are due are kept by the rules above.","st.worktrees.cleanupConfirmTitle":"Clean up worktrees?","st.worktrees.cleanupConfirmBody.one":"Removes 1 worktree. Nothing in it would be lost.","st.worktrees.cleanupConfirmBody.other":"Removes {count} worktrees. Nothing in them would be lost.","st.worktrees.cleanupKeepCount.one":"1 more is due but will be kept.","st.worktrees.cleanupKeepCount.other":"{count} more are due but will be kept.","st.worktrees.cleanupResult":"Cleanup finished: {removed} removed, {kept} kept.","st.worktrees.loading":"Loading worktrees…","st.worktrees.empty":"No worktrees. Turn on “Run in a new worktree” when you start a session to get one.","st.worktrees.sessionMissing":"Session no longer available","st.worktrees.openSessionAria":"Open session {title}","st.worktrees.state.inUse":"In use","st.worktrees.state.archived":"Session archived {time}","st.worktrees.state.creating":"Setting up","st.worktrees.state.removing":"Removing","st.worktrees.state.failed":"Removal failed","st.worktrees.state.orphaned":"Orphaned","st.worktrees.state.ready":"Ready","st.worktrees.notChecked":"Changes not checked","st.worktrees.checkFailed":"Could not check for changes","st.worktrees.clean":"No uncommitted changes","st.worktrees.dirty.one":"1 uncommitted change","st.worktrees.dirty.other":"{count} uncommitted changes","st.worktrees.unpushed.one":"1 unpushed commit","st.worktrees.unpushed.other":"{count} unpushed commits","st.worktrees.ignored":"Ignored files that are not build output: {names}","st.worktrees.ignoredShort":"ignored files ({names})","st.worktrees.check":"Check","st.worktrees.checking":"Checking…","st.worktrees.checkAria":"Check {branch} for changes","st.worktrees.remove":"Remove","st.worktrees.removeAria":"Remove worktree {branch}","st.worktrees.removeInUse":"Archive its session to remove this worktree.","st.worktrees.keptAt":"Checkout kept at {path}","st.worktrees.removeTitle":"Remove worktree “{branch}”?","st.worktrees.removeBody":"Deletes this checkout from disk. The session stays in your history.","st.worktrees.removeChecking":"Checking for changes…","st.worktrees.removeClean":"No uncommitted changes or unpushed commits.","st.worktrees.lossTitle":"These will be permanently lost","st.worktrees.branchNote":"The branch {branch} is deleted only if it has no commits of its own.","st.worktrees.removeConfirm":"Remove worktree","st.worktrees.removeConfirmLoss":"Discard changes and remove","st.worktrees.removeCheckFailed":"Could not check this worktree for changes, so it cannot be removed safely right now.","st.worktrees.removeStale":"The worktree changed after it was checked. Review the new result and confirm again.","st.worktrees.retry":"Check again","st.worktrees.removed":"Removed worktree {branch}.","st.worktrees.notRemoved":"Did not remove {branch}. {reason}","st.worktrees.outcome.retained_dirty":"It has uncommitted changes.","st.worktrees.outcome.retained_unpushed":"It has unpushed commits.","st.worktrees.outcome.retained_ignored":"It has ignored files that are not build output.","st.worktrees.outcome.retained_foreign_lock":"Another tool has locked it.","st.worktrees.outcome.retained_unowned":"Kiki could not confirm it owns this checkout.","st.worktrees.outcome.retained_in_use":"A session is still using it.","st.worktrees.outcome.failed_busy":"Files in it are in use. Close programs using the folder and try again.","st.worktrees.outcome.failed":"Something went wrong while deleting it.","st.workspaces.hint":"Manage your workspace roots. Rename changes the display name; pin keeps it at the top; unregister removes it from the list while keeping files on disk.","st.about.title":"About","st.about.desktopVersion":"App version","st.about.serverVersion":"Server version","st.about.build":"Build","st.about.serverId":"Server ID","st.about.backend":"Backend","st.about.browserHint":"The browser build has no auto-updater. Open this page in the Kiki desktop app to check for and install updates.","st.about.channel":"Update channel","st.about.stable":"Stable","st.about.beta":"Beta","st.about.betaHint":"Beta builds may change more often and can be less stable.","st.about.autoUpdate":"Automatic updates","st.about.autoUpdateOff":"Off","st.about.autoUpdateNotify":"Notify me","st.about.autoUpdateInstall":"Download and install","st.about.updatesUnavailable":"Automatic updates are not configured for this build.","st.about.checkUpdate":"Check for updates","st.about.checking":"Checking…","st.about.upToDate":"Kiki is up to date.","st.about.install":"Install {version}","st.about.installing":"Installing…","st.about.installConfirm":"Install Kiki {version}? Kiki and its running tasks will exit.","st.about.updateAvailable":"Kiki {version} is available. Open Settings → About to install it.","st.about.installedRestart":"The update is installed. Restart Kiki to finish updating.","conn.desktopNoServer":"The Kiki desktop backend did not register a local server.","conn.desktopStartFailed":"The Kiki desktop backend could not start: {detail}","time.justNow":"just now","time.secondsAgo":"{n}s ago","time.minutesAgo":"{n}m ago","time.hoursAgo":"{n}h ago","time.daysAgo":"{n}d ago","time.expired":"expired","time.secondsLeft":"{n}s left","time.minutesLeft":"{n}m left","time.hoursLeft":"{n}h left","time.durationMs":"{n}ms","time.durationSeconds":"{n}s","time.durationMinutes":"{m}m {s}s","val.permissionMode":"Permission mode must be manual, auto, or yolo.","val.skillDirsNul":"Skill directories cannot contain NUL bytes.","val.flagsJson":"Experimental flags must be valid JSON.","val.flagsObject":"Experimental flags must be a JSON object.","val.flagNameEmpty":"Experimental flag names cannot be empty.","val.flagBool":'Experimental flag "{name}" must be true or false.',"val.runtimeNonNegative":"{field} must be a non-negative whole number.","val.runtimePositive":"{field} must be a positive whole number within the supported range.","val.advancedJson":"Advanced server config must be valid JSON.","val.advancedObject":"Advanced server config must be a JSON object.","val.advancedUnknown":"Unsupported advanced config field: {fields}.","val.advancedHooks":"Advanced config hooks must be a JSON array.","val.advancedEmpty":"Add at least one advanced config field before saving.","val.timeoutWhole":"Subagent timeout must be a non-negative whole number of milliseconds.","val.timeoutMax":"Subagent timeout cannot exceed 24 hours (86,400,000 ms).","val.requestTimeoutSeconds":"Request timeout must be a whole number from 5 to 600 seconds.","val.providerId":"Provider ID must start with a letter or digit and use only letters, digits, spaces, - or _.","val.providerIdEmpty":"Give this connection a name.","val.providerProtocol":"Choose a supported provider protocol.","val.requestIdentityJson":"Request identity overrides must be valid JSON.","val.requestIdentityOverridesRequired":"Custom overrides require a non-empty JSON object.","val.requestIdentityOverridesInvalid":"Request identity overrides must contain at least one supported leaf and no unsupported fields.","val.modelRequestIdentity":"Model {model} has invalid or empty request identity overrides.","val.imageAcceptedTypesEmpty":"Choose at least one accepted image type or switch this leaf to inherit.","val.imageMime":"{mime} is not a supported image MIME type.","val.imageConversionTarget":"Add {mime} to the accepted image types before selecting that conversion target.","val.imageAutoTarget":"Auto conversion requires image/png or image/jpeg in the accepted image types.","val.baseUrlAbsolute":"Base URL must be a valid absolute URL.","val.baseUrlHttp":"Base URL must use http or https.","val.baseUrlEnv":"Base URL cannot contain an environment-variable placeholder.","val.apiKeyLineBreaks":"API keys cannot contain line breaks.","val.modelsEmpty":"Add at least one model.","val.modelIdEmpty":"Model IDs cannot be empty.","val.modelContextSize":"Model {model} needs a positive whole context size.","val.modelUnnamed":"(unnamed)","val.modelDuplicate":"Duplicate model: {model}.","val.defaultModelInModels":"Default model must be one of the provider models.","val.baseUrlRequired":"Fill in the Base URL first.","val.remoteModelsShape":"The response is not a recognizable model listing.","val.remoteModelsEmpty":"Connected, but the provider did not return any models.","attach.imageType":'"{name}" is {type} — only PNG, JPEG, GIF, and WebP images can be sent.',"attach.imageTypeUnknown":'"{name}" has an unknown type — only PNG, JPEG, GIF, and WebP images can be sent.',"attach.imageTooLarge":'"{name}" is {size} — images are capped at {max} each.',"attach.totalTooLarge":"Images together are capped at {max} per message.","attach.tooMany":"At most {max} attachments per message.","attach.readFailed":"Could not read {name}","attach.pastedImage":"pasted image","attach.pastedFile":"pasted file","attach.fileTooLarge":'"{name}" is {size} — files are capped at {max} each.',"attach.uploadFailed":"Could not upload {name}","connect.desktopBootingSpawning":"Starting the Kiki desktop backend…","connect.desktopBootingWaiting":"Backend started; waiting for it to become ready (a cold start can take up to ~2 minutes)…","connect.desktopElapsed":"{seconds}s elapsed","connect.desktopCancel":"Cancel startup","connect.desktopFailedTitle":"Kiki desktop backend failed to start","connect.desktopLogPathLabel":"Backend log:","connect.desktopRetry":"Retry startup","connect.desktopCopyDiagnostics":"Copy diagnostics","connect.desktopCopied":"Copied","connect.desktopCancelled":"Desktop backend startup was cancelled.","connect.sshTitle":"Connect to a remote Kiki","connect.sshHint":"Switch the whole Kiki environment to an SSH host: sessions, models and settings all come from the remote. First trust the SSH host key. Saving an SSH config alias stores no private key or token; connecting to a running remote Kiki server needs its expected home ID and a bearer token. This does not install the remote server; automatic installation needs a verified release package.","connect.sshLabel":"Display name","connect.sshAlias":"SSH config alias","connect.sshIdentity":"Identity file (optional)","connect.sshAdd":"Save SSH host","connect.sshRemove":"Remove","connect.sshCheck":"Check availability","connect.sshChecking":"Checking SSH server identity…","connect.sshFailedTitle":"SSH connection blocked","connect.sshRemotePathHint":"Enter an absolute Linux path on this SSH host. The local folder picker is unavailable for remote workspaces.","connect.sshCwdInvalid":"Enter an absolute Linux path beginning with /.","connect.localScope":"This computer","connect.remoteScope":"Remote Kiki","connect.switchLocal":"Switch to this computer","connect.sshRemoteSettings":"This server runs on the SSH host. Its agent and provider settings live there; editing this tunnel URL or restarting the local backend would not change the remote workspace.","connect.sshDisconnectBody":"Return to this computer. Remote tasks may continue on the SSH host; this action does not stop its server.","connect.sshPort":"Remote Kiki port","connect.sshHomeId":"Expected server home ID (from trusted SSH terminal)","connect.sshToken":"Server bearer token (not saved)","connect.sshConnect":"Connect to running server","connect.sshNeedSetup":"Enter the remote port, expected home ID, and bearer token before connecting. Older servers without a home ID must be upgraded.","st.fetchModels.networkError":"Could not reach that address (network unreachable, wrong URL, or blocked by the desktop security policy).","app.reconnectNow":"Reconnect now","app.disconnectedSendHint":"You can still send, but messages may not arrive and live replies will not show until reconnect.","shortcuts.escOverlay":"Dialog or menu open: Esc closes it first (highest priority)","shortcuts.escTerminal":"Terminal panel open: Esc closes the panel next","shortcuts.escAbort":"Otherwise: stop the current turn / exit the current mode","shortcuts.desktopOnly":"Desktop only","term.closeFailed":"Could not close the terminal: {detail}","composer.slash.unknownPrompt":"No command /{name} — send it as a plain message?","composer.slash.disabledPrompt":"/{name} cannot be activated here — reference skills are for the model, not the composer.","composer.slash.sendAnyway":"Send anyway","composer.slash.cancelSend":"Keep editing","composer.attachmentReading":"Reading image…","composer.attachmentUploading":"Uploading file…","composer.quoteSelection":"Quote","composer.removeQuote":"Remove quote","composer.annotateSelection":"Annotate","composer.annotationPlaceholder":"Comment on this selection — Enter to save, Esc to cancel","composer.removeAnnotation":"Remove annotation","composer.notes.pill.one":"{count} note","composer.notes.pill.other":"{count} notes","composer.notes.aria":"Notes going with the next message","composer.needsYou.title":"Needs you","composer.needsYou.banner.one":"{count} item needs you","composer.needsYou.banner.other":"{count} items need you","composer.needsYou.bannerAction":"Review","composer.needsYou.bannerTitle":"Your draft is kept; come back to it when done","composer.needsYou.step":"{index} / {total}","composer.needsYou.next":"Next item","composer.needsYou.previous":"Previous item","composer.needsYou.draftKept":"Draft kept","composer.needsYou.backToInput":"Back to input","composer.needsYou.extras.one":"+{count} attached","composer.needsYou.extras.other":"+{count} attached","composer.queueStack.count.one":"{count} queued","composer.queueStack.count.other":"{count} queued","composer.queueStack.openAria":"Show the queue","composer.status.stop":"Stop","composer.contextTrayAria":"Attached to this message","sv.approvalAmbiguous":"Several approval cards are visible — click one of them before answering with y / n.","st.restart.confirmTitle":"Restart the server?","st.restart.confirmBodyActive":"Restarting terminates {count} running session task(s). Running turns are interrupted; the sessions themselves are kept.","st.restart.confirmBodyIdle":"No sessions are currently running. The connection drops briefly while the server restarts.","st.banner.confirmTitle":"Restart to apply pending changes?","st.banner.confirmBodyUnknown":"Kiki could not confirm whether any sessions are running. Restarting would terminate any running turns.","st.banner.checking":"Checking sessions…","st.banner.confirm":"Restart now","st.banner.acknowledge":"Acknowledge restart notice","st.conn.apply":"Save & reconnect","st.conn.applyHint":"Applies immediately and reconnects the whole app to this server.","st.conn.wsLabel":"WebSocket","st.conn.ws.open":"open","st.conn.ws.connecting":"connecting","st.conn.ws.closed":"closed","st.caps.extraDirsPlaceholder":`C:\\Users\\you\\.kiki\\skills\\shared
6
- D:\\team\\skills`,"sidebar.connTitle":"kap-server {version} · WebSocket {status}","threadRef.aria":"Thread: {title}","threadRef.open":"Open {title}","threadRef.remove":"Remove link to {title}","threadRef.unknown":"Thread {id}","threadRef.notLoaded":"Not in the loaded thread list","threadRef.status.running":"Running","threadRef.status.awaiting_approval":"Awaiting approval","threadRef.status.awaiting_answer":"Awaiting answer","threadRef.status.idle":"Idle","threadRef.status.archived":"Archived","threadRef.status.unknown":"Status unknown","sidebar.ws.open":"connected","new.cwdAria":"Working directory (absolute path)","new.cwdPlaceholder":"Absolute path to the project folder","new.cwdInvalid":"Enter an absolute path for the working directory (for example C:/work/project or /home/you/project).","cap.noWorkspace":"No workspace to show skills for yet","cap.noWorkspaceBody":"Choose a project folder when starting a new session to see its skills here.","cap.openWorkspace":"New session","cap.loadingWorkspaces":"Loading workspaces…","cap.workspacesFailed":"Could not load workspaces. Please retry.","cap.filterPlaceholder":"Filter by name, description, or path…","cap.filterAria":"Filter capabilities","cap.loadingSkills":"Loading skills…","cap.loadingMcp":"Loading MCP servers…","cap.emptyGroup":"Nothing here yet.","cap.emptyFilter":'No capabilities match "{query}".',"cap.group.plugin":"Plugin skills","cap.group.project":"Project skills","cap.group.user":"User skills","cap.group.extra":"Extra skills","cap.group.builtin":"Built-in skills","cap.group.other":"Other skills","cap.source.plugin":"Plugin","cap.source.project":"Project","cap.source.user":"User","cap.source.extra":"Extra","cap.source.builtin":"Built-in","rail.viewDetails":"View task details","rail.terminateAll":"Stop all","rail.terminateAllTitle":"Stop the subagents running now?","rail.terminateAllBody":"This stops the subagents running now ({count} total). Output they already produced stays in the timeline.","rail.terminateAllConfirm":"Stop current subagents","rail.terminateAllDone":"Sent stop requests to the confirmed group ({count} total).","rail.terminateAllRemaining":"Handled the confirmed group ({count} total); {remaining} remain running.","rail.terminateAllFailed":"{count} stop requests failed: {detail}. {remaining} remain running.","tasks.detail.title":"Task details","tasks.detail.pauseScroll":"Pause auto-scroll","tasks.detail.resumeScroll":"Resume auto-scroll","tasks.detail.exitCode":"Exit code","tasks.detail.stopReason":"Stop reason","tasks.detail.copyCommand":"Copy command","subagent.message":"Message","subagent.messageTitle":"Message {name}","subagent.messagePlaceholder":"Tell this subagent what to do next…","subagent.send":"Send","subagent.messageSent":"Message sent to {name}.","subagent.messageFailed":"Could not send the message: {detail}","subagent.terminate":"Terminate","subagent.terminateTitle":"Terminate {name}?","subagent.terminateBody":"The subagent stops running. Output it already produced stays in the timeline.","subagent.terminateUnavailable":"This subagent has no running task to stop.","subagent.terminateFailed":"Could not terminate the subagent: {detail}","subagent.changeModel":"Change model","subagent.modelChanged":"Model switched to {model}.","subagent.modelChangeFailed":"Could not change the model: {detail}","subagent.effortChangeFailed":"Could not change the thinking effort: {detail}","subagent.composerUnavailable":"Subagent not found in this session.","sv.agentActionsNote":"Messages, model and thinking effort changes, and termination act on this subagent directly; queue and skill actions stay on the session page.","st.section.communication":"Agent communication","st.communication.threadTitle":"Thread communication","st.communication.threadHint":"Gives agents the thread tools — list local threads and send a message into another thread. Off by default.","st.communication.threadSaved":"Thread communication settings saved and echoed by the server.","st.communication.appendTimingTitle":"Queued messages","st.communication.appendTimingHint":"When a message sent while the agent is busy starts running. This is a local default — each queued message can be re-timed from the queue strip.","st.communication.appendTiming":"Default timing","st.communication.notifyParentTitle":"Parent notification from subagents","st.communication.notifyParentHint":"When on, a running subagent can message its parent agent with the AgentNotify tool — progress notes, questions, or a heads-up. On by default; when off, subagents report only through their final results.","st.communication.notifyParent":"Subagents can notify their parent","st.communication.notifyParentSaved":"Subagent parent notification settings saved and echoed by the server.","st.communication.tokenCountingTitle":"Token counting strategy","st.communication.tokenCountingHint":"What the reported context size is based on. The default reports the live size, never below the last measured total; the other two report the last measured total alone, or a local count that ignores measurements.","st.communication.tokenStrategy.measuredEstimated":"Measured + estimated","st.communication.tokenStrategy.measured":"Measured only","st.communication.tokenStrategy.estimated":"Estimated only","st.communication.tokenCountingSaved":"Token counting settings saved and echoed by the server.","onboarding.title":"Welcome to Kiki","onboarding.subtitle":"A few quick steps to your first conversation — everything can change later.","onboarding.progress":"Step {current} of {total}","onboarding.step.welcome":"Language and look","onboarding.appearance.brightness":"Theme","onboarding.appearance.colors":"Colors","st.skin.name.paper":"Paper × Inkstone","st.skin.name.porcelain":"Porcelain × Deepwater","st.skin.name.celadon":"Celadon × Night Garden","st.skin.name.apricot":"Apricot × Afterglow","st.skin.name.iris":"Iris × Starveil","st.skin.name.contrast":"High contrast × Obsidian","st.skin.desc.paperPair":"Warm white paper and ink-blue marks; cool charcoal and copper after dark.","st.skin.desc.porcelain":"Cool white paper and cobalt details; layered navy and mist-blue controls at night.","st.skin.desc.celadon":"Celadon glaze and soft white paper; deep pine surfaces and jade details at night.","st.skin.desc.apricot":"Apricot-white paper and berry controls; plum-charcoal layers and peach light after dark.","st.skin.desc.iris":"Violet-white paper and iris ink; indigo-violet layers and silver-lilac controls at night.","st.skin.desc.contrastPair":"White paper, black text and visible borders; layered charcoal, ice-cyan focus and near-white controls at night.","onboarding.appearance.palette.paper":"Warm paper","onboarding.appearance.palette.linen":"Linen","onboarding.appearance.palette.graphite":"Graphite","onboarding.appearance.palette.forest":"Forest","onboarding.appearance.palette.claret":"Claret","onboarding.appearance.palette.heather":"Heather","onboarding.appearance.palette.nocturne":"Night","onboarding.appearance.palette.contrast":"High contrast","onboarding.appearance.picture":"Background","onboarding.appearance.addPicture":"Add a picture","onboarding.appearance.later":"You can change all of this later in Settings › Appearance.","onboarding.step.model":"Connect a model","onboarding.step.permissions":"How much should Kiki do on its own?","onboarding.skipForNow":"Skip for now","onboarding.skip":"Set up later","onboarding.back":"Back","onboarding.next":"Next","onboarding.saveNext":"Save & continue","onboarding.finish":"Start","onboarding.close":"Close setup","onboarding.welcome.body":"Pick a language and a look. The window behind this dialog changes as you choose.","onboarding.model.body":"Choose any supported model provider. An API key works with the widest range of services; you can also sign in with a supported account. Finish this later in Settings if you prefer.","onboarding.model.signIn":"Sign in with an account","onboarding.model.ready":"A model provider is connected — you can continue.","onboarding.model.orApiKey":"Connect with an API key","onboarding.model.addAnother":"Change or add another connection","onboarding.model.changeTemplate":"Choose a different protocol or service","onboarding.model.model":"Model","onboarding.model.modelHint":"Test the connection to pick from the provider’s list, or type a model id directly.","onboarding.model.test":"Test connection","onboarding.model.testHint":"Testing only checks the values in this form — nothing is saved until you choose “Save & continue”.","onboarding.model.testedOk":"Connection works — {count} models available. Tap one to fill it in.","onboarding.model.advancedHint":"Context size and capabilities use sensible defaults — fine-tune them later in Settings.","onboarding.permissions.body":"This becomes the default for new sessions. You can change it per session from the composer, or any time in Settings.","onboarding.permissions.recommended":"Recommended","onboarding.permissions.auto.line":"Works on its own inside the workspace; asks before sensitive or external actions.","onboarding.permissions.manual.line":"Asks before anything that is not on the safe list.","onboarding.permissions.review.line":"A reviewer checks sensitive actions first; uncertain cases ask you.","onboarding.permissions.yolo.line":"Approves everything, including sensitive files. Use only where that is safe.","onboarding.reenter":"Replay setup wizard","onboarding.reenterHint":"Runs the first-run setup again: look, model connection, defaults and what else Kiki can do.","onboarding.step.capabilities":"What else Kiki can do","onboarding.caps.body":"None of this is needed to start. Set up what you want now, or come back to it any time.","onboarding.caps.group.find":"Find and remember","onboarding.caps.group.reach":"Reach further","onboarding.caps.group.run":"Keep work going","onboarding.caps.search.name":"Web search and history","onboarding.caps.search.line":"Search the web, read pages, and search past sessions through the full-text index. General web search needs a search provider key.","onboarding.caps.search.prompt":"/kiki-ops Help me set up web search: check what is configured, then walk me through adding a search provider and its key.","onboarding.caps.memory.name":"Memory","onboarding.caps.memory.line":"Keeps your preferences and project facts across sessions, on this machine.","onboarding.caps.ssh.name":"SSH remote hosts","onboarding.caps.ssh.line":"Run commands and sessions on machines from your SSH config.","onboarding.caps.ssh.prompt":"/kiki-ops Help me set up an SSH remote host: check my SSH config and what Kiki needs, then add the host step by step.","onboarding.caps.engines.name":"External engines","onboarding.caps.engines.line":"Let Kiki drive other coding agents, reusing the sign-in they already have on this machine.","onboarding.caps.extensions.name":"Plugins, skills and MCP","onboarding.caps.extensions.line":"Add tools and know-how from plugins, skill folders and MCP servers.","onboarding.caps.extensions.prompt":"/kiki-ops Help me add an MCP server or a plugin: ask me which one I want, then set it up and check that its tools load.","onboarding.caps.hostSkill.name":"Use Kiki from other agents","onboarding.caps.hostSkill.line":"Install the kiki-as-subagent skill so another agent can hand long tasks to Kiki. You see the file location before anything is written.","onboarding.caps.hostSkill.installed":"Installed for {hosts}.","onboarding.caps.cron.name":"Scheduled tasks","onboarding.caps.cron.line":"Run a prompt on a schedule, such as a daily summary or a weekly check.","onboarding.caps.cron.prompt":"/kiki-ops Help me set up a scheduled task: ask me what should run and when, then create it and show me where to find it.","onboarding.caps.board.name":"Task board","onboarding.caps.board.line":"Track requirements and the agent work behind them on one board per workspace.","onboarding.caps.bots.name":"Bots and rooms","onboarding.caps.bots.line":"Give a persona its own resident conversation, or put several personas in a room to discuss one topic.","onboarding.caps.ask":"Let Kiki set it up","onboarding.caps.asking":"Opening…","onboarding.caps.askFailed":"Could not open a session: {detail}","onboarding.caps.openSettings":"Settings","onboarding.caps.openBoard":"Open board","onboarding.caps.openCron":"Open schedule","onboarding.caps.openPersonas":"Personas","onboarding.caps.bots.prompt":"/kiki-ops Help me set up a bot: explain what bot mode turns on, help me pick or create a persona, and make it a bot.","queue.editTitle":"Edit in the composer — confirming puts it back at the same queue position","queue.editingBadge":"Editing in the composer","queue.editReady":"Ready · sends when you finish editing","queue.editWaiting":"Editing · starts {timing}","queue.drainOrder":"In send order","queue.waitsForEdit":"waits for your edit","queue.holdNotice":"Paused while you edit — the queue resumes in order when you finish.","queue.holdNoticeAhead":"Paused while you edit — the {count} ahead still send; the rest resume when you finish.","goal.doneWhen":"done when · {criterion}","queue.removeConfirm":"Remove?","queue.removeConfirmTitle":"Click again to remove this queued prompt","queue.dragHandleAria":"Reorder this queued prompt","queue.dragHandleTitle":"Drag to reorder, or focus and press ↑ / ↓","queue.moveFailed":"Could not reorder the queued prompts: {detail}","timing.agentIdle":"After this turn","timing.subagentsDone":"Subagents done","timing.tasksDone":"All tasks done","timing.short.agentIdle":"after this turn","timing.short.subagentsDone":"after subagents","timing.short.tasksDone":"after tasks","timing.hint.agentIdle":"Starts when the current turn ends; background work is not awaited","timing.hint.subagentsDone":"Starts once the running subagents finish","timing.hint.tasksDone":"Starts once every running task finishes; resident services excluded","queue.timingAria":"When this queued prompt starts","queue.timingFailed":"Could not change when this prompt starts: {detail}","composer.queueEditBanner":"Editing a queued message — Enter confirms, Esc cancels","composer.queueEditConfirm":"Confirm edit","composer.queueEditConfirmTitle":"Save the edit back to its queue position (Enter)","composer.queueEditConfirmTitleCmdEnter":"Save the edit back to its queue position (⌘/Ctrl+Enter)","composer.queueEditCancel":"Cancel editing","composer.queueEditRemoveAria":"Remove this queued message","composer.queueEditRemoveTitle":"Take this queued message out of the queue","composer.queueEditRemoveConfirm":"Remove?","agentMessage.fromMain":"Main agent injected","agentMessage.fromAgent":"{name} injected","agentMessage.senderProfile":"{profile}","agentMessage.senderModel":"{model}","agentMessage.senderDetails":`Sender Agent: {agentId}
7
- Profile: {profile}
8
- Model: {model}
9
- Task: {task}`,"agentMessage.detailsUnknown":"unknown","agentMessage.agent":"Agent","agentMessage.fromThread":"From thread {id}","agentMessage.pending":"Pending delivery","agentMessage.delivered":"Delivered","agentMessage.deduplicated":"Already accepted","agentMessage.payloadConflict":"The earlier message was accepted with different content. This draft was not sent.","agentMessage.attachmentOutcomeUnknown":"Could not confirm whether this attachment message was sent. Check the agent's messages before sending it again.","agentMessage.promptOutcomeUnknown":"Could not confirm whether this message was sent. Check the agent's messages before sending it again.","nav.aria":"Workspace tools","nav.board":"Task board","nav.cron":"Scheduled tasks","nav.usage":"Usage","nav.capabilities":"Capabilities","scope.label":"Workspace","scope.all":"All workspaces","scope.switchAria":"Change the workspace scope","scope.back":"Back","cron.scope.empty":"No scheduled tasks in this workspace.","cron.scope.showAll":"Show all workspaces","cron.scope.session":"This conversation","cron.scope.sessionClear":"Show every conversation","cron.scope.sessionEmpty":"No scheduled tasks in this conversation.","scope.prefix":"Scope","scope.only":"Only {name}","scope.showAll":"Show all","cron.section.active":"Enabled","cron.section.paused":"Paused","cron.summary.active.one":"{count} active","cron.summary.active.other":"{count} active","cron.summary.paused.one":"{count} paused","cron.summary.paused.other":"{count} paused","sidebar.statusRunning":"Running","sidebar.statusNeedsMe":"Needs me","sidebar.statusIdle":"Idle","sidebar.filterStatusHeading":"Status","sidebar.filterArchivedHeading":"Archived","sidebar.archivedHide":"Hide archived","sidebar.archivedInclude":"Include archived","sidebar.archivedOnly":"Only archived","sidebar.filterArchivedOnly":"Archived only","sidebar.filterMenu":"Filter sessions","sidebar.clearFilter":"Remove filter {label}","sidebar.clearAllFilters":"Clear filters","sidebar.groupByNone":"No grouping","sidebar.sortCreated":"Recently created","sidebar.showMoreInGroup":"Show {count} more","sidebar.showLessInGroup":"Show less","sidebar.collapseGroup":"Collapse {label}","sidebar.expandGroup":"Expand {label}","sidebar.noFilterMatches":"No sessions match these filters.","sidebar.runningCount.one":"{count} running","sidebar.runningCount.other":"{count} running","sidebar.needsMeCount.one":"{count} needs you","sidebar.needsMeCount.other":"{count} need you","sidebar.statusTag.approval":"Awaiting approval","sidebar.statusTag.question":"Awaiting answer","sidebar.results.workspaces":"Workspaces","sidebar.results.sessions":"Sessions","sidebar.results.messages":"Messages","sidebar.results.filterTo":"Filter to {name}","sidebar.results.role.user":"You","sidebar.results.role.assistant":"Kiki","sidebar.results.role.title":"Title","sidebar.results.typeMore":"Type one more character to search messages.","sidebar.results.building":"Index building ({indexed}/{total} sessions), newest sessions first — showing partial results.","sidebar.results.unavailable.runtime_disabled":"Full-text search is unavailable in this desktop build. Session title search still works.","sidebar.results.unavailable.generic":"Full-text search is unavailable. Session title search still works.","st.searchIndex.title":"Full-text index","st.searchIndex.checking":"Checking the index…","st.searchIndex.checkFailed":"Could not read the index state: {reason}","st.searchIndex.ready":"Ready · {indexed} of {total} sessions indexed.","st.searchIndex.building":"Building · {indexed} of {total} sessions indexed, newest first.","st.searchIndex.readonly":"Updates paused · {indexed} of {total} historical sessions searchable.","st.searchIndex.retry":"Restart the indexer","st.searchIndex.retrying":"Restarting…","st.searchIndex.retried":"Indexer restarted. Results fill in as it catches up.","st.searchIndex.retryFailed":"Could not restart the indexer: {reason}","sidebar.results.unavailable.disabled":"Full-text search is off. Enable it in Experimental settings; title search still works.","sidebar.results.unavailable.indexer_backoff":"The search indexer is backing off before restart. Title search still works.","sidebar.results.unavailable.memory_budget":"The search indexer exceeded its memory budget. Title search still works.","sidebar.results.unavailable.wal_stuck":"Search indexing is paused until readers release the database. Title search still works.","sidebar.results.unavailable.disk_low":"Search indexing paused because disk space is low. Title search still works.","sidebar.results.unavailable.corrupt_rebuilding":"The search index is rebuilding after corruption. Title search still works.","sidebar.results.unavailable.sqlite_unavailable":"SQLite full-text search is unavailable. Title search still works.","sidebar.results.incomplete":"Partial results — the search hit its time limit.","sidebar.results.none":"Nothing matches “{query}”.","sidebar.results.noMessages":"No messages match.","sidebar.results.scoped":"Searching within your filters","sidebar.searchHint":"Search sessions and messages (/)","sidebar.prefixWorkspace":"in: {name}","sidebar.prefixRole":"role: {role}","inspector.toggleAria":"Toggle the inspector","inspector.running":"Running","inspector.waiting.one":"{count} needs you","inspector.waiting.other":"{count} need you","inspector.tasks.one":"{count} task","inspector.tasks.other":"{count} tasks","inspector.agent":"Agent","inspector.context":"Context","inspector.cost":"Cost","inspector.tokens":"Tokens","inspector.effort":"Effort","inspector.profile":"Profile","inspector.details":"Profile details","inspector.usage":"Usage details","inspector.treeTotal":"Whole tree","inspector.treeTotalPartial":"Whole tree (some agents have not reported yet)","inspector.treePartialNote":"Counts only the agents that have reported usage; the rest are still counting.","inspector.treeCounts":"{active} of {total} subagents running","inspector.capabilities":"Tools, skills and dispatch","inspector.todos":"Todos","inspector.plan":"Plan","inspector.elsewhere":"Across this workspace","inspector.boardLink":"Task board","inspector.cronLink":"Scheduled tasks","inspector.cronSummary.one":"{count} scheduled here","inspector.cronSummary.other":"{count} scheduled here","inspector.viewing":"Inspecting","inspector.backToMain":"Main agent","inspector.backToMainAria":"Inspect the main agent","inspector.nowWorking":"Working","inspector.nowIdle":"Idle","inspector.nowWaiting":"Needs you","inspector.nowRunningTool":"Running {tool}","inspector.needsYou":"Needs you","inspector.review":"Review","inspector.approvalItem":"Approve {tool}","inspector.questionItem":"Answer a question","inspector.recent":"Recent activity","inspector.recentFiles":"Files touched","inspector.recentCommands":"Commands","inspector.agentSetup":"Model and capabilities","inspector.sessionInfo":"Session","inspector.team":"Team","inspector.tabsAria":"Agents in this session","inspector.moreAgentsAria":"Show all {count} agents","inspector.openAgent":"Open","inspector.locate":"Show in timeline","inspector.budget":"Usage","inspector.scopeAgent":"This agent","inspector.scopeTree":"Tree","inspector.scopeAria":"Usage scope","inspector.cached":"{pct}% cached","inspector.tokensShort":"{tokens} tokens","inspector.compactions.one":"{count} compaction","inspector.compactions.other":"{count} compactions","inspector.overview":"Session overview","inspector.ofWindow":"{pct}% of window","inspector.compactAt":"compacts at {point}","inspector.compactAtTitle":"Automatic compaction starts at {point} tokens","inspector.inOut":"{input} in · {output} out","inspector.cacheShort":"{pct}% cache","inspector.sessionAge":"started {duration} ago","inspector.sessionAgeTitle":"Session started {at}","inspector.turns.one":"{count} turn","inspector.turns.other":"{count} turns","inspector.window":"Window","inspector.permission":"Permissions","inspector.toolsRow":"Tools","inspector.toolsCount":"{enabled} of {total} on","inspector.extensions":"Extensions","inspector.mcpServers.one":"{count} MCP server","inspector.mcpServers.other":"{count} MCP servers","inspector.plugins.one":"{count} plugin","inspector.plugins.other":"{count} plugins","inspector.toolCalls.one":"{count} tool call","inspector.toolCalls.other":"{count} tool calls","inspector.compactPoint":"Compacts at","inspector.compactPointValue":"{point} · {pct}%","inspector.durationM":"{m}m","inspector.durationH":"{h}h {m}m","inspector.durationD":"{d}d {h}h","inspector.agents":"Agents","inspector.agentsAria":"Agents in this session","inspector.filterAria":"Show agents by status","inspector.filter.waiting":"{count} waiting","inspector.filter.running":"{count} running","inspector.filter.failed":"{count} failed","inspector.filter.done":"{count} done","inspector.filterClear":"Show all","inspector.searchAgents":"Find an agent","inspector.searchAgentsAria":"Find an agent by name, task or model","inspector.noAgentMatch":"No agent matches.","inspector.completedGroup.one":"{count} completed","inspector.completedGroup.other":"{count} completed","inspector.expandAgent":"Show agents under {name}","inspector.collapseAgent":"Hide agents under {name}","inspector.childCount.one":"{count} agent","inspector.childCount.other":"{count} agents","inspector.waitingBelow.one":"{count} needs you below","inspector.waitingBelow.other":"{count} need you below","inspector.modelRow":"Model","inspector.needsYouFrom":"From {path}","inspector.needsYouMore.one":"Show {count} more","inspector.needsYouMore.other":"Show {count} more","inspector.approveInline":"Approve","inspector.rejectInline":"Reject","inspector.answer":"Answer","inspector.resolveFailed":"Could not send the decision: {detail}","st.layout.railOpenByDefault":"Show the side panel by default","st.layout.railOpenByDefaultHint":"Applies to wide windows. On narrow windows the panel opens from the header.","inspector.filter.ended":"{count} finished","inspector.endedGroup.one":"{count} finished","inspector.endedGroup.other":"{count} finished","inspector.profileExpand":"Show tools, skills and subagents","inspector.profileCollapse":"Hide tools, skills and subagents","inspector.cap.tabsAria":"Agent capabilities","inspector.cap.tools":"Tools","inspector.cap.skills":"Skills","inspector.cap.subagents":"Subagents","inspector.cap.extensions":"Extensions","inspector.cap.noTools":"No tools are on for this agent.","inspector.cap.noSkills":"No skills are available to this agent.","inspector.cap.noSubagents":"This agent cannot dispatch subagents.","inspector.cap.noExtensions":"No MCP servers or plugins are connected.","inspector.cap.unavailable":"Unavailable","inspector.cap.asks":"Asks first","inspector.cap.off.one":"{count} off","inspector.cap.off.other":"{count} off","inspector.cap.toolCount.one":"{count} tool","inspector.cap.toolCount.other":"{count} tools","inspector.cap.mcp":"MCP","inspector.cap.plugin":"Plugin","inspector.cap.loadFailed":"Could not load this agent's tools.","inspector.cap.loading":"Loading tools…","inspector.cap.more":"{count} more","inspector.cap.less":"Show fewer","inspector.cap.filter":"Filter {tab}","inspector.cap.filterAria":"Filter {tab}","inspector.cap.noMatch":"Nothing matches this filter.","inspector.cap.search":"Search tools or groups","inspector.cap.noGroupMatch":"No matching tools or groups","inspector.cap.clearSearch":"Clear search","inspector.cap.hits":"{count} matched","inspector.cap.viewGroup":"Open the whole group","inspector.cap.groupCount":"{on}/{total} on","inspector.cap.groupCountUnknown":"?/{total} on","inspector.cap.groupCountRatio":"{on}/{total}","inspector.cap.groupCountRatioUnknown":"?/{total}","inspector.cap.groupPending":"{count} awaiting approval","inspector.cap.groupDisconnectedNote":"{count} disconnected","inspector.cap.groupUnknownNote":"{count} with an unconfirmed state","inspector.cap.stateOn":"On","inspector.cap.statePending":"Awaiting approval","inspector.cap.stateOff":"Off","inspector.cap.stateDisconnected":"Disconnected","inspector.cap.stateUnknown":"State unconfirmed","inspector.cap.backToTab":"Back to {tab}","inspector.cap.groupGone":"This group is no longer in the current tool list.","inspector.cap.inGroupSearch":"Search in this group","inspector.cap.showingCount":"Showing {shown} of {total}","inspector.cap.builtin":"Built-in","inspector.cap.userTools":"Custom tools","inspector.cap.ownerUnreported":"Provider not reported","inspector.cap.noToolsReported":"This agent reports no listable tools.","inspector.cap.noOwnTools":"No built-in or custom tools here.","inspector.cap.moreGroups.one":"{count} more group","inspector.cap.moreGroups.other":"{count} more groups","inspector.cap.fewerGroups":"Show fewer groups","inspector.failedNoDetail":"Stopped with an error. Open the agent for details.","rail.source.builtin":"Built-in","rail.source.workspace":"Workspace","rail.source.global":"Global","rail.source.globalExtra":"Global · extra","rail.source.plugin":"Plugin","rail.source.from":"From {path}","nav.memory":"Memory","memory.title":"Memory","memory.off.title":"Memory is off","memory.off.body":"When it is on, Kiki keeps your preferences and project facts across sessions, and every write shows up as one line in the conversation.","memory.off.storage":"Saved only on the machine running Kiki, in {path}.","memory.toggle":"Use memory","memory.toggleFailed":"Could not change the memory switch: {detail}","memory.scope.aria":"Memory scope","memory.scope.global":"Global","memory.scope.workspace":"Workspace","memory.scope.persona":"Persona","memory.workspace.aria":"Choose a workspace","memory.workspace.search":"Search workspaces","memory.workspace.loading":"Loading workspaces…","memory.workspace.empty":"No workspaces yet.","memory.persona.aria":"Choose a persona","memory.persona.search":"Search personas","memory.persona.loading":"Loading personas…","memory.persona.empty":"No personas yet.","memory.shard.label":"Memory range","memory.shard.longterm":"Long-term","memory.ws.label":"Memory in this workspace","memory.ws.follow":"Follow global","memory.ws.on":"On","memory.ws.off":"Off","memory.ws.offNotice":"Memory is off in this workspace. Saved entries stay here; agents do not read or write them.","memory.search.placeholder":"Search memory","memory.search.aria":"Search memory entries","memory.filter.aria":"Filter by type","memory.type.all":"All","memory.type.user":"About you","memory.type.feedback":"Feedback","memory.type.project":"Project","memory.type.reference":"Reference","memory.showInactive":"Show archived","memory.tab.aria":"Memory views","memory.tab.entries":"Entries","memory.tab.inbox":"Inbox","memory.new":"New memory","memory.count.one":"{count} entry","memory.count.other":"{count} entries","memory.empty.title":"No memories yet","memory.empty.body":"Tell Kiki “remember …” in a conversation, or add one here.","memory.empty.filtered":"Nothing matches these filters.","memory.empty.clear":"Clear filters","memory.loading":"Loading memory…","memory.loadFailed":"Could not load memory.","memory.field.title":"Title","memory.field.type":"Type","memory.field.body":"Content","memory.field.reason":"Why","memory.field.reasonPlaceholder":"Optional — shown in history","memory.defaultReason.edit":"Edited on the memory page","memory.defaultReason.create":"Added on the memory page","memory.defaultReason.keep":"Kept from the inbox","memory.save":"Save changes","memory.create":"Save memory","memory.discard":"Discard","memory.delete":"Delete","memory.deleteUndoable":"You can undo this from the entry history.","memory.openSource":"Open the session that saved this","memory.pin":"Pin","memory.unpin":"Unpin","memory.back":"All memories","memory.pinned":"Pinned","memory.status.archived":"Archived","memory.status.superseded":"Replaced","memory.status.pending":"Pending","memory.writer.user":"by you","memory.writer.agent":"by Kiki","memory.writer.consolidator":"suggested","memory.writer.import":"imported","memory.history":"History","memory.history.empty":"No history yet.","memory.edit":"Edit","memory.source.personas":"Personas / Bots","memory.source.bot":"Role · {name}","memory.source.botHome":"Home workspace","memory.sharing.label":"{name} can read shared memory","memory.history.retirementReason":"Why it was retired","memory.history.reasonUnavailable":"Retirement reason unavailable.","memory.history.createdAt":"Created","memory.history.updatedAt":"Updated","memory.history.revision":"Revision","memory.history.before":"Before this change","memory.history.after":"After this change","memory.history.noVersion":"None","memory.history.snapshotUnavailable":"The journal has the revision ID, but not its content.","memory.history.view":"View this change","memory.history.newer":"Newer","memory.history.older":"Older","memory.replacedBy":"Replaced by “{title}”","memory.history.create":"Created","memory.history.update":"Edited","memory.history.delete":"Deleted","memory.history.archive":"Archived","memory.history.supersede":"Replaced","memory.history.supersede_previous":"Replaced by a newer entry","memory.history.undo":"Undone","memory.undo":"Undo","memory.deleted":"Deleted “{title}”.","memory.undone":"Change undone.","memory.saved":"Saved.","memory.conflict":"This memory changed since you opened it. Reload it before saving so the newer version is not overwritten.","memory.reload":"Reload","memory.notFound":"This memory no longer exists.","memory.actionFailed":"Could not complete that: {detail}","memory.inbox.empty":"Nothing waiting for review.","memory.inbox.keep":"Keep","memory.inbox.discard":"Discard","memory.inbox.proposesUpdate":"Applying this replaces the text of the entry it supersedes.","memory.inbox.proposesArchive":"Applying this archives the entry it supersedes.","memory.inbox.acceptArchive":"Archive it","memory.tool.remembered":"Remembered","memory.tool.updated":"Updated memory","memory.tool.archived":"Archived memory","memory.tool.replaced":"Replaced memory","memory.tool.pending":"Sent to the memory inbox","memory.tool.writing":"Remembering…","memory.tool.read":"Read memory","memory.tool.searched":"Searched memory","memory.tool.hits.one":"{count} match","memory.tool.hits.other":"{count} matches","memory.tool.missing":"not found","memory.tool.view":"View","memory.tool.undo":"Undo","memory.tool.undone":"Undone","memory.tool.undoConflict":"Changed since — review it in Memory","memory.tool.undoFailed":"Could not undo: {detail}","memory.tool.reason":"Why","memory.scopeTag.global":"Global","memory.scopeTag.workspace":"Workspace","st.memory.title":"Memory","st.memory.hint":"Keeps preferences and project facts across sessions, on this machine only. On by default.","st.memory.open":"Open memory","st.memory.approval":"New memory entries","st.memory.approval.auto":"Save automatically","st.memory.approval.review":"Review in Inbox","st.memory.approval.off":"Do not save automatically","st.memory.approvalHint.auto":"Saves new entries automatically; saved memory stays readable and searchable","st.memory.approvalHint.review":"New entries go to the Inbox first and take effect once reviewed","st.memory.approvalHint.off":"Stops new entries; saved memory stays readable and searchable","st.memory.budget":"Memory text carried per turn","st.memory.budgetHint":"At most this many characters of saved memory are carried into each turn (UTF-16 code units), 0 to 4,000. Default: 2,000.","st.memory.budgetSave":"Save budget","st.memory.budgetInvalid":"Enter a whole number from 0 to 4,000.","st.memory.advanced":"Advanced","st.memory.advancedHide":"Hide advanced","st.memory.workspaces":"Workspace memory","st.memory.workspaceSelect":"Choose a workspace","st.memory.workspaceNone":"No workspaces yet. Create a workspace to set an override.","st.memory.workspaceHelp":"Follow global, or override memory for this workspace. Global off always takes precedence.","st.memory.workspaceOverrides":"Other workspace overrides","st.memory.workspaceOverride":"{name}: {state}","st.memory.workspaceEffective":"Currently in this workspace","st.memory.workspaceEffectiveInline":"Now: {state}.","st.memory.enabled":"On","st.memory.disabled":"Off","st.memory.workspaceDisabled":"Off for this workspace","st.memory.settingsLink":"Memory settings","st.memory.loadFailed":"Could not load memory settings: {detail}","st.memory.saveFailed":"Could not save memory settings: {detail}","sidebar.thread.from":"Started by {title}","sidebar.thread.branchedFrom":"Branched from {title}","sidebar.thread.unknownParent":"another session","sidebar.thread.rowAria":"{title}, started by {parent}","sidebar.branch.rowAria":"{title}, a branch of {parent}","nav.activity":"Activity","sidebar.searchOpen":"Search","sidebar.activityAria":"Activity","sidebar.activityCount.one":"{count} item needs you","sidebar.activityCount.other":"{count} items need you","sidebar.rowState.unread":"New since you last opened it","sidebar.rowState.failed":"Failed","sidebar.rowState.stopped":"Stopped","sidebar.rowState.running":"Working now","activity.needsYou":"Needs you","activity.needsYouOrder":"Longest wait first","activity.unread":"Finished while you were away","activity.unreadOrder":"Newest first","activity.reason.approval":"Awaiting approval","activity.reason.question":"Awaiting answer","activity.reason.budget":"Room budget exhausted","activity.reason.completed":"Finished","activity.reason.failed":"Failed","activity.reason.cancelled":"Stopped","activity.emptyTitle":"Nothing waiting.","activity.emptyBody":"Sessions blocked on you, and runs that finish while you are elsewhere, collect here.","st.section.sessions":"Sessions","st.section.memory":"Memory","st.purpose.memory":"Choose how memory is saved across sessions and workspaces.","st.section.permissions":"Permissions","st.section.hooks":"Hooks","st.section.developer":"Developer","st.section.labs":"Labs","st.group.device":"App","st.group.work":"How work runs","st.storage.workspace":"Workspace: {name}","st.storage.unsaved":"Unsaved changes","st.storage.pageServerRemote":"Saved on the remote server you’re connected to.","st.storage.remoteTitle":"Connected to {address}","st.exp.tag":"Experimental","st.exp.rowsTitle":"Experimental","st.exp.effect.now":"Applies right away.","st.exp.effect.newSessions":"Applies to new sessions.","st.exp.effect.restart":"Turning it on needs a server restart.","st.exp.state.on":"Currently on","st.exp.state.off":"Currently off","st.exp.state.unknown":"Not available","st.exp.choice.default":"Default","st.exp.choice.defaultOn":"Default (on)","st.exp.choice.defaultOff":"Default (off)","st.exp.choice.on":"On","st.exp.choice.off":"Off","st.exp.choiceLabel":"{feature}: on, off, or the server default","st.exp.envOverride":"This choice is currently overridden by environment settings.","st.exp.flagId":"{id}","st.exp.agentRoutes.name":"Named agent routes","st.exp.agentRoutes.desc":"Load specialized variants of existing agents and let sessions dispatch to them by name.","st.exp.subagentIdle.name":"Release idle subagents","st.exp.subagentIdle.desc":"Free a finished subagent’s memory while it waits. It stays listed and resumes from its history.","st.exp.sessionTitle.name":"Automatic session titles","st.exp.sessionTitle.desc":"Write a short title after the first exchange.","st.exp.sessionEviction.name":"Unload idle sessions","st.exp.sessionEviction.desc":"Unload sessions nobody is using to save memory. Their history is kept.","st.exp.residentWindow.name":"Bounded transcript memory","st.exp.residentWindow.desc":"Keep only the recent part of a long transcript in memory; older turns load from history.","st.exp.taskWait.name":"Wait for background tasks","st.exp.taskWait.desc":"Let an agent wait for its background tasks inside the same turn instead of ending it.","st.exp.taskBoard.name":"Workspace task board","st.exp.taskBoard.desc":"Keep requirements on a board owned by the workspace, separate from agent runs and to-dos.","st.exp.toolSelect.name":"Load MCP tools on demand","st.exp.toolSelect.desc":"Send MCP and plugin tools to the model only when it asks for them. Supported models only.","st.exp.delegation.name":"External delegation over MCP","st.exp.delegation.desc":"Let an authenticated external client own long-running session work.","st.exp.searchWorker.name":"Search index in a worker","st.exp.searchWorker.desc":"Run the global search index in its own worker so large searches don’t slow the server.","st.exp.desktopSearch.name":"Desktop content search","st.exp.desktopSearch.desc":"Build the SQLite index in the background and search conversations from the desktop. Requires a restart; the first build can take 20–30 minutes and needs at least 2 GB free disk space.","st.exp.imageConversion.name":"Convert unsupported images","st.exp.imageConversion.desc":"Convert images a model can’t read into a format it accepts before sending them.","st.exp.nativeSsh.name":"SSH hosts","st.exp.nativeSsh.desc":"Use machines from your SSH config as places where sessions run.","st.exp.nativeBrowser.name":"Native browser control","st.exp.nativeBrowser.desc":"Run saved browser connections through the managed agent-browser backend.","st.exp.readModel.name":"Session read model","st.exp.readModel.desc":"Serve session lists and replay from a derived index instead of reading raw history.","st.exp.usageExport.name":"Send usage to other tools","st.exp.usageExport.desc":"Let this server send model, token, quality and cost buckets to a destination you choose. Conversation text, titles and paths are never sent.","st.exp.pluginImport.name":"Import history from other tools","st.exp.pluginImport.desc":"Read conversations from an installed source and keep them as read-only archives. They are history, not sessions you can continue.","st.exp.unknown.name":"Server-specific feature","st.exp.unknown.desc":"This server reports a feature this app has no description for.","st.labs.openIn":"Open in {page}","st.labs.empty":"This server reports no experimental features.","st.labs.indexTitle":"Where experimental features live","st.effect.newSessions":"Applies to new sessions","st.purpose.sessions":"How new sessions start, when agents may interrupt you, and how agents message each other.","st.purpose.skills":"Where the server looks for skills.","st.purpose.plugins":"Where to find plugins, and whether browser control is set up.","st.purpose.hooks":"Declarative text injection and shell commands that run automatically on lifecycle events.","st.purpose.workspaces":"Folders the server knows about. Removing one keeps its files and sessions.","st.purpose.about":"Version, build, server identity, and updates.","st.purpose.permissions":"Default mode, persistent tool rules, dangerous Bash checks, reviewer, and available tools.","st.purpose.developer":"Engine parameters, low-level configuration, and system diagnostics.","st.purpose.labs":"Experimental features and feature flags.","st.perm.defaultTitle":"Default permission mode","st.perm.dangerousBash":"Dangerous Bash commands","st.perm.dangerousBash.default":"Default","st.perm.dangerousBash.on":"On","st.perm.dangerousBash.off":"Off","st.perm.dangerousBashHint":"Default asks before dangerous Bash in Ask every time, Auto, and Approve for me modes, but not Full access. On also asks in Full access; Off disables this check. Deny rules still block.","st.perm.rulesTitle":"Rules","st.perm.rulesHint":"Saved on this server and applied to tool calls. Deny takes priority over Ask, then Allow, regardless of list order; within one decision, the first match wins.","st.perm.rulesEmpty":"No saved rules. Add one to allow, deny, or ask for a tool or command pattern.","st.perm.loading":"Loading rules…","st.perm.pattern":"Tool or command pattern","st.perm.invalidPattern":"Enter a tool name or ToolName(argument-pattern), such as Bash(rm -rf*).","st.perm.decision":"Decision","st.perm.decision.allow":"Always allow","st.perm.decision.deny":"Deny","st.perm.decision.ask":"Ask each time","st.perm.scope":"Scope","st.perm.scope.user":"User","st.perm.scope.project":"Project","st.perm.scope.turn-override":"Turn override","st.perm.scope.session-runtime":"Session runtime","st.perm.sessionScopeHint":"Session runtime rules are only used for live session approvals. Choose User for a persistent rule.","st.perm.reason":"Reason (optional)","st.perm.add":"Add rule","st.perm.edit":"Edit","st.perm.addTitle":"New permission rule","st.perm.editTitle":"Edit permission rule","st.perm.delete":"Delete","st.perm.moveUp":"Move up","st.perm.moveDown":"Move down","st.sessions.questionsTitle":"Questions from agents","st.sessions.questionsLabel":"While a question waits","st.sessions.questionsHint":"Don’t block: the agent keeps working and the question stays in the session until you answer. Block: the agent waits for your answer and does nothing else in the meantime.","st.questionGuard.title":"Question frequency","st.questionGuard.enableLabel":"Remind models when they ask too often","st.questionGuard.enableHelp":"When a model goes past these limits asking you questions, the tool hands the question back with a note asking whether it is really needed. The model can then answer it itself and carry on, or ask again if the answer really would change what it does.","st.questionGuard.enableDetail":"Counted per tool call, not per question: one call carrying three questions counts once. A model that asks again anyway is let through, so the limit never costs you an answer you needed. No extra dialog appears.","st.questionGuard.on":"On","st.questionGuard.off":"Off","st.questionGuard.inherit":"Same as global","st.questionGuard.perRound":"Questions per message from you","st.questionGuard.perRoundHelp":"How many questions one message from you may draw before the model is reminded.","st.questionGuard.perWindow":"Questions within the window","st.questionGuard.perWindowHelp":"How many questions may land inside the window below before the model is reminded.","st.questionGuard.window":"Counting window","st.questionGuard.windowHelp":"The stretch of time the limit above is counted over.","st.questionGuard.minutesUnit":"min","st.questionGuard.range":"Enter a whole number from {min} to {max}.","st.questionGuard.windowRange":"Enter a number of minutes from {min} to {max}.","st.questionGuard.useInherited":"Use the inherited value","st.questionGuard.fromGlobal":"Using {value} from the global setting.","st.questionGuard.fromDefault":"Using {value}, the default.","st.sessions.titlesTitle":"Session titles","st.sessions.titlesToggle":"Write session titles automatically","st.sessions.titlesServerOff":"This feature is currently disabled by environment settings.","st.sessions.titleModel":"Title model","st.sessions.titleMoments":"Generate when","st.sessions.titleMomentsHelp":"Each ticked moment costs one request to the title model. None ticked means Kiki never writes a title on its own; asking for one on demand still works.","st.sessions.titleMoment.firstUserMessage":"First message sent","st.sessions.titleMoment.firstTurnCompleted":"First reply finished","st.sessions.titleMoment.contextCompacted":"Context compacted","st.sessions.messagingTitle":"Agent messaging","st.sessions.threadHint":"Agents can list other threads on this server and send a message into one.","st.sessions.notifyHint":"A running subagent can send its parent a progress note or question. When off, subagents report only through their final result.","st.sessions.delegationSub":"Handoff notice for subagents","st.sessions.delegationSubHint":"Tells a dispatched subagent that its last message is the whole result for the caller. On by default.","st.sessions.delegationIndependent":"Handoff notice for host calls","st.sessions.delegationIndependentHint":"Tells an agent started by an MCP or SDK host that no parent agent is waiting. On by default.","st.labs.title":"Experimental features","st.dev.tokenHint":"What the reported context size is based on. The default reports the live size, never below the last measured total; measured only reports the last measured total; estimated only reports a local count with measurements ignored.","cap.page.title":"Capabilities","cap.page.tabs":"Capability type","cap.page.refresh":"Refresh","cap.page.add":"Add","cap.page.pluginsLead":"Plugins bundle tools, panels, skills and skins for the work you do.","cap.page.skillsLead":"Instructions the agent loads when a task calls for them.","cap.page.mcpLead":"Servers that give the agent tools over the Model Context Protocol.","cap.page.toolsLead":"Everything the agent can call on this server, by where it comes from.","cap.tab.plugins":"Plugins","cap.tab.skills":"Skills","cap.tab.mcp":"MCP servers","cap.tab.tools":"Tools","cap.add.plugin":"Plugin from a source","cap.add.pluginHint":"A GitHub repository, a folder, or a ZIP file","cap.add.mcp":"MCP server","cap.add.mcpHint":"A local command or a remote URL","cap.workspace":"Workspace","cap.loading":"Loading…","cap.advanced":"Advanced","cap.tier.official":"Official","cap.tier.curated":"Curated","cap.tier.thirdParty":"Not reviewed","cap.tier.local":"Local","cap.state.on":"On","cap.state.off":"Off","cap.state.error":"Needs attention","cap.state.installed":"Installed","cap.state.installedOff":"Installed · off","cap.action.install":"Install","cap.action.installNamed":"Install {name}","cap.action.update":"Update","cap.action.updateNamed":"Update {name}","cap.action.remove":"Remove plugin","cap.action.rollback":"Roll back to {version}","cap.shelf.featured":"Featured","cap.shelf.productivity":"Productivity","cap.shelf.coding":"Coding","cap.shelf.web":"Web & deployment","cap.shelf.data":"Data","cap.shelf.more":"More","cap.link.plugins.one":"{count} plugin installed · {on} on","cap.link.plugins.other":"{count} plugins installed · {on} on","cap.link.mcp.one":"{count} MCP server","cap.link.mcp.other":"{count} MCP servers","cap.link.mcpFailing.one":"{count} MCP server · {failing} not connected","cap.link.mcpFailing.other":"{count} MCP servers · {failing} not connected","cap.link.mcpNone":"No MCP servers yet.","cap.link.skills.one":"{count} skill in this workspace","cap.link.skills.other":"{count} skills in this workspace","cap.link.open.plugins":"Manage plugins","cap.link.open.skills":"Browse skills","cap.link.open.mcp":"Manage MCP servers","cap.link.title":"Where to manage","cap.plugins.views":"Plugin view","cap.plugins.market":"Market","cap.plugins.searchInstalled":"Search installed plugins","cap.plugins.attention.one":"{count} installed plugin needs a look","cap.plugins.attention.other":"{count} installed plugins need a look","cap.plugins.updateTo":"Update to {version}","cap.plugins.menuEnable":"Turn on","cap.origin.official":"Official","cap.origin.catalog":"Market","cap.origin.local":"Local folder","cap.origin.git":"Git","cap.origin.zip":"ZIP","cap.plugins.search":"Search plugins","cap.plugins.installed":"Installed","cap.plugins.manage":"Manage installed plugins","cap.plugins.noneInstalled":"No plugins installed yet.","cap.plugins.noneInstalledBody":"Pick one from the catalog, or add one from a GitHub repository, a folder or a ZIP file.","cap.plugins.more":"More actions for {name}","cap.plugins.menuDetails":"View details","cap.plugins.menuDisable":"Turn off","cap.plugins.menuHomepage":"Open homepage","cap.plugins.menuCopySource":"Copy source URL","cap.plugins.catalogFrom":"Catalog · {source}","cap.plugins.loadingCatalog":"Loading the catalog…","cap.plugins.noCatalog":"No plugin catalog is set on this server.","cap.plugins.noCatalogBody":"Add a catalog address under Advanced below, or in Settings › Plugins, or install a plugin from its source.","cap.plugins.catalogEmpty":"The catalog is empty.","cap.plugins.noMatch":'No plugins match "{query}".',"cap.plugins.featured":"Recommended","cap.plugins.relevant":"Fits this workspace","cap.plugins.seeMore":"See {count} more","cap.plugins.allShelves":"All plugins","cap.plugins.openDetail":"Open {name}","cap.plugins.backToMarket":"Catalog","cap.plugins.addFromSource":"Add from source","cap.plugins.updates":"Updates","cap.detail.back":"Plugins","cap.detail.updateAvailable":"Update available","cap.detail.broken":"This plugin could not load. Its diagnostics are under Advanced.","cap.detail.adds":"What it adds","cap.settings.title":"Settings","cap.settings.required":"This setting is required.","cap.settings.number":"Enter a number.","cap.settings.secretSet":"Saved in Kiki credentials","cap.settings.secretUnset":"Not set","cap.settings.secretReplace":"Type a new value to replace","cap.settings.secretRemove":"Remove","cap.settings.secretRemovePending":"Removed when you save","cap.detail.addsAfterInstall":"The full list of tools, panels, commands and skins appears here after installing. The install sheet shows it before anything is installed.","cap.detail.needs":"What it needs","cap.detail.needsOnPreview":"Permissions and required programs are listed before you install.","cap.detail.id":"Plugin ID","cap.detail.version":"Version","cap.detail.pinned":"Pinned to","cap.detail.checksum":"SHA-256","cap.detail.source":"Source","cap.detail.location":"Installed at","cap.detail.installedAt":"Installed on","cap.detail.homepage":"Homepage","cap.detail.permissionsDeclared":"Declared permissions","cap.detail.prerequisites":"Required programs","cap.detail.required":"required","cap.detail.optional":"optional","cap.detail.diagnostics":"Diagnostics","cap.detail.previous":"the previous version","cap.contrib.tools":"Tools · {count}","cap.contrib.panels":"Panels · {count}","cap.contrib.commands":"Commands · {count}","cap.contrib.themes":"Skins · {count}","cap.contrib.skills":"Skills · {count}","cap.contrib.mcp":"MCP servers · {count}","cap.contrib.hooks":"Hooks · {count}","cap.contrib.providers":"Provider presets · {count}","cap.contrib.agents":"Agents · {count}","cap.contrib.settings":"Settings","cap.panel.sidebar":"Sidebar panel","cap.panel.workspace":"Workspace panel","cap.panel.open":"Open panel","cap.panel.loading":"Loading the panel…","cap.panel.session":"Acts on your last session","cap.panel.noSession":"Open a session to use this panel","cap.import.entry":"Import history","cap.import.title":"Import history","cap.import.intro":"Bring a conversation from another tool into this Kiki as a session you can keep working in. Importing needs no model; sending your next message does.","cap.import.loading":"Checking what this server can import…","cap.import.unavailableTitle":"Import history is off on this server.","cap.import.unavailableBody":"Start this Kiki with {flag} to turn it on.","cap.import.unwiredBody":"This server has not registered the import routes yet. Update Kiki to import history.","cap.import.destinationTitle":"Import as","cap.import.destinationAria":"What to import as","cap.import.destinationSession":"Kiki session","cap.import.destinationArchive":"Read-only archive","cap.import.destinationSessionHint":"The conversation becomes a session in this Kiki, with its earlier turns as context. Open it and keep working where you left off.","cap.import.destinationArchiveHint":"The conversation is kept as a record you can read. It cannot be continued.","cap.import.destinationRemoteBody":"This Kiki is a remote peer. Its history can be read here, but a session would be created on the machine that owns its home.","cap.import.workDirLabel":"Working directory for the session","cap.import.workDirHint":"The session runs here, like a session you started in this Kiki. A folder you have not opened before is fine — it does not have to be a saved workspace.","cap.import.workDirKnown":"Your workspaces:","cap.import.workDirRequired":"Choose the folder the imported session should work in.","cap.import.pickWorkDir":"Choose folder","cap.import.sourceTitle":"Source","cap.import.sourceAria":"Import source","cap.import.sourceFormat":"Reads {format}","cap.import.manageSource":"Manage this plugin","cap.import.manageSourceHint":"This plugin reads conversations from another tool. Kiki runs the import and keeps the archive.","cap.import.loadingSources":"Reading the available sources…","cap.import.noSourcesTitle":"No import source is enabled.","cap.import.noSourcesBody":"Enable a plugin that brings in conversations, then come back.","cap.import.pickTitle":"What to import","cap.import.homeLabel":"Source home","cap.import.homeHint":"The folder the other tool keeps its history in, on its own machine.","cap.import.homeAria":"Source home path","cap.import.homeRequired":"Choose the source home to list what it holds.","cap.import.pickHome":"Choose folder","cap.import.targetLabel":"Imports into","cap.import.targetHint":"The home of the server this window is connected to.","cap.import.targetLocal":"This machine","cap.import.targetRemote":"Remote server","cap.import.filesTitle":"Conversations","cap.import.loadingFiles":"Reading the source home…","cap.import.nextPage":"Next","cap.import.firstPage":"Back to the newest","cap.import.noFilesTitle":"Nothing to import from here.","cap.import.noFilesBody":"{home} holds no conversations this source can read.","cap.import.previewLoading":"Checking what would be kept…","cap.import.untitled":"Untitled conversation","cap.import.probe.preserved":"Fully preserved","cap.import.probe.partial":"Partly preserved","cap.import.probe.unsupported":"Not readable","cap.import.coverageSample":"Sample","cap.import.coverageComplete":"Complete read","cap.import.previewTarget":"Would be archived in {home} on {server}.","cap.import.previewSessionTarget":"Would become a session working in {dir}.","cap.import.previewSessionNote":"Its old tool calls and system text arrive as history, not as this Kiki’s permissions.","cap.import.alreadyImported":"This conversation is already archived here. Importing again adds revision {revision}.","cap.import.alreadyImportedSession":"You already imported this conversation into {dir}. Importing again adds the newer turns to that same session.","cap.import.lossesTitle":"What will not be carried over ({count})","cap.import.noLosses":"Nothing was dropped in this read.","cap.import.sampleTitle":"Show a sample ({count})","cap.import.sampleEmpty":"The sample has no readable text.","cap.import.start":"Start import","cap.import.startSession":"Import as session","cap.import.openSession":"Open session","cap.import.starting":"Starting…","cap.import.readonlyBody":"This Kiki is a remote peer. Its sources, jobs and archives are readable here; starting, stopping and continuing an import belong to the machine that owns its home.","cap.import.changeFile":"Choose another conversation","cap.import.archiveReadOnly":"Read-only. Opening it in a live conversation would replay its history as this session’s own.","cap.import.archiveLosses":"Not carried over","cap.import.archiveLossList":"{list}","cap.import.targetUnknown":"Named by the server once it reads a source","cap.import.moreJobs":"Show earlier imports ({count} shown)","cap.import.moreArchives":"Show earlier archives ({count} shown)","cap.import.archiveStatus":"Kept","cap.import.archiveDetails":"Details","cap.import.archiveFormat":"Format","cap.import.archiveComplete":"Whole record read.","cap.import.archiveMoreHint":"Reading on request, one bounded page at a time.","cap.import.archiveNote":"The archive is history, not a live conversation: its old tool calls and system text are records, and it cannot be continued here.","cap.import.previewNote":"Kept as a read-only archive, not a live conversation.","cap.import.jobsTitle":"Imports","cap.import.loadingJobs":"Reading import jobs…","cap.import.noJobsTitle":"No import has run yet.","cap.import.noJobsBody":"Pick a conversation above; the import shows its progress here.","cap.import.state.queued":"Queued","cap.import.state.running":"Importing","cap.import.state.cancelled":"Stopped","cap.import.state.failed":"Failed","cap.import.state.interrupted":"Interrupted","cap.import.state.completed":"Imported","cap.import.progress":"Importing {title}","cap.import.readingPercent":"{percent}%","cap.import.readingBytes":"{count} B read","cap.import.cancel":"Stop import","cap.import.resume":"Continue import","cap.import.openArchive":"Open archive","cap.import.jobLosses":"{count} dropped","cap.import.jobRecords.one":"{count} record","cap.import.jobRecords.other":"{count} records","cap.import.jobPages.one":"{count} page","cap.import.jobPages.other":"{count} pages","cap.import.archivesTitle":"Archives","cap.import.loadingArchives":"Reading archives…","cap.import.noArchivesTitle":"No imported conversation yet.","cap.import.noArchivesBody":"A finished import appears here, readable without a model.","cap.import.archiveIntro":"A read-only record of one imported conversation. It is history, not a live session, and it cannot be continued here.","cap.import.archiveLoading":"Reading the archive…","cap.import.archiveEmpty":"This archive has no readable records.","cap.import.archiveSource":"From","cap.import.archiveHome":"Path","cap.import.archiveRevision":"Revision","cap.import.archiveSize":"Size","cap.import.loadMore":"Load more","cap.import.role.metadata":"Record","cap.skin.light":"Light","cap.skin.dark":"Dark","cap.perm.fsWorkspace":"Read and write files in the workspace","cap.perm.fsOutside":"Read and write files you approve outside the workspace","cap.perm.exec":"Run programs","cap.perm.net":"Connect to the internet","cap.perm.secrets":"Store its own secrets","cap.perm.uiPanel":"Show a panel in Kiki","cap.install.title":"Install {name}","cap.install.previewing":"Checking the plugin…","cap.install.adds":"Adds","cap.install.addsNothing":"Nothing listed.","cap.install.canDo":"It will be able to","cap.install.noPermissions":"Needs no special permissions.","cap.install.needs":"Needs a program","cap.install.needsLater":"installed separately, after you approve it","cap.install.changes":"Changed since the installed version","cap.install.fingerprint":"Fingerprint","cap.install.context":"Context cost","cap.install.contextValue":"about {count} tokens when loaded","cap.install.unsupported":"Not supported","cap.install.approvalNote":"Installing does not approve any tool call. Each call still asks for the usual permission.","cap.perm.boundary":"Agreeing to install is not approval of each call, and it is not a sandbox. These are the plugin’s own declarations, not limits the system enforces; every tool call still goes through your usual approval.","cap.update.title":"Update {name}","cap.update.confirm":"Update","cap.update.allow":"Allow and update","cap.update.installing":"Updating…","cap.update.done":"{name} is updated.","cap.update.noChanges":"Same features and permissions as the installed version.","cap.update.branch":"New commit {version} on {branch}","cap.updates.checking":"Checking GitHub for updates…","cap.updates.checked":"GitHub plugins checked at {time}. Updates are only flagged; nothing installs on its own.","cap.updates.failed":"Could not check GitHub for updates: {detail}","cap.updates.check":"Check for updates","cap.installed.group.attention":"Needs attention","cap.installed.group.updates":"Updates available","cap.installed.group.on":"On","cap.installed.group.off":"Off","cap.install.confirm":"Install","cap.install.allow":"Allow and install","cap.install.installing":"Installing…","cap.install.done":"{name} is installed and on.","cap.install.finish":"Done","cap.prereq.title":"Install {id}?","cap.prereq.body":"This downloads the pinned {id} {version} release, verifies its checksum and saves it in the plugin's data folder.","cap.prereq.action":"Install {id}","cap.prereq.installing":"Installing…","cap.prereq.done":"Installed.","cap.remove.title":"Remove {name}?","cap.remove.body":"Its contributions are unregistered right away. Past tool calls stay readable in your sessions.","cap.remove.deleteData":"Also delete the plugin's saved data","cap.remove.confirmWithData":"Remove plugin and data","cap.rollback.title":"Roll {name} back to {version}?","cap.rollback.body":"Kiki switches to the copy it kept from before the last update and reloads the plugin.","cap.source.title":"Add a plugin from a source","cap.source.body":"Kiki checks the plugin and shows what it adds before anything is installed.","cap.source.kind":"Source type","cap.source.github":"GitHub","cap.source.path":"Folder","cap.source.zip":"ZIP file","cap.source.githubLabel":"Repository URL","cap.source.pathLabel":"Plugin folder","cap.source.zipLabel":"ZIP URL","cap.source.githubHint":"Kiki pins the exact commit it installs; updates are offered, never applied silently.","cap.source.sha":"File checksum (SHA-256)","cap.source.shaHint":"Verifies download integrity matches expectations.","cap.source.shaInvalid":"Enter a valid SHA-256 checksum.","cap.source.review":"Review plugin","cap.skills.sourceFilter":"Source","cap.skills.source.plugin":"Plugins","cap.skills.source.project":"Project","cap.skills.source.user":"Yours","cap.skills.source.extra":"Extra folders","cap.skills.source.builtin":"Built-in","cap.skills.source.other":"Other","cap.mcp.summary.one":"{count} server · {connected} connected","cap.mcp.summary.other":"{count} servers · {connected} connected","cap.mcp.failing.one":"{count} needs attention","cap.mcp.failing.other":"{count} need attention","cap.mcp.tools.one":"{count} tool","cap.mcp.tools.other":"{count} tools","cap.skills.searchCount":"Search {count} skills","cap.skills.sourceAll":"All","cap.skills.showAll":"Show all {count}","cap.skills.openPlugin":"Open the {name} plugin","cap.skills.matches.one":"{count} of {total} skills match","cap.skills.matches.other":"{count} of {total} skills match","cap.skills.search":"Search skills","cap.skills.none":"No skills in this workspace yet.","cap.skills.noneBody":"Skills come from the project's .kimi/skills folder, your home skills folder, extra folders set in Settings, and plugins.","cap.skills.manualOnly":"Run by you","cap.skills.open":"Open {name}","cap.tools.search":"Search tools","cap.tools.builtin":"Built-in","cap.tools.plugin":"From plugins","cap.tools.mcp":"From MCP servers","cap.tools.skill":"From skills","cap.tools.none":"No tools reported by this server.","st.mcp.status.notRunning":"Not running","st.mcp.fromPlugin":"From {name}","st.mcp.reconnect":"Reconnect","st.mcp.toolsTitle":"Tools","st.mcp.toolsWhenConnected":"Tools are listed once the server connects.","st.mcp.origin":"Configured in","st.mcp.emptyBody":"Add a local command or a remote URL to give the agent more tools.","st.plugins.openPage":"Browse the plugin catalog on the Capabilities page","tc.callingTool":"Calling a tool","st.section.ssh":"SSH hosts","st.purpose.ssh":"Machines the agent can run commands on over SSH.","st.ssh.hostsTitle":"SSH hosts for sessions","st.ssh.intro":"Configure hosts available to the agent. Adding a host does not connect to it.","st.ssh.loading":"Loading SSH hosts…","st.ssh.flagOff":"SSH hosts feature is off. Turn on SSH hosts below to manage hosts and add them to sessions.","st.ssh.openLabs":"Go to the switch","st.ssh.addHost":"Add host","st.ssh.emptyTitle":"No SSH hosts yet","st.ssh.emptyBody":'Add a host here, or turn on "Always sync SSH config".',"st.ssh.group.kiki":"Kiki hosts","st.ssh.group.kikiNote":"Saved in Kiki","st.ssh.group.config":"System SSH config","st.ssh.group.configNote":"External config","st.ssh.row.resolvedBySsh":"Resolved by SSH config","st.ssh.row.aliasOnly":"Uses alias {alias}","st.ssh.row.hidden":"Hidden from agent","st.ssh.row.overrides":"Overrides external config","st.ssh.state.connecting":"Connecting","st.ssh.state.ready":"Connected","st.ssh.state.disconnected":"Disconnected","st.ssh.state.failed":"Connection failed","st.ssh.detail.source":"Source","st.ssh.detail.sourceKiki":"Kiki config","st.ssh.detail.sourceConfig":"System SSH config","st.ssh.detail.target":"Target","st.ssh.detail.targetFromConfig":"ssh -G {alias} at connect time","st.ssh.detail.identity":"Identity file","st.ssh.detail.roots":"Working roots","st.ssh.detail.rootsDefault":"Remote home directory","st.ssh.detail.agent":"Agent","st.ssh.detail.agentOffered":"Offered to the agent","st.ssh.detail.agentHidden":"Hidden from the agent","st.ssh.detail.description":"Description","st.ssh.detail.hostKey":"Host key","st.ssh.detail.hostKeyPolicy":"Checked against known_hosts on every connection: a first-seen key asks you to confirm its fingerprint, and a changed key is refused.","st.ssh.hostKeys.view":"View fingerprints","st.ssh.hostKeys.hide":"Hide fingerprints","st.ssh.hostKeys.reading":"Reading the known_hosts files on this computer…","st.ssh.hostKeys.readFailed":"Could not read the host key entries: {detail}","st.ssh.hostKeys.refresh":"Read again","st.ssh.hostKeys.localNote":"Entries found in the known_hosts files on this computer. The host itself is not contacted.","st.ssh.hostKeys.unrecorded":"No entry for this host in the known_hosts files on this computer.","st.ssh.hostKeys.ambiguous":"Which known_hosts file this host uses cannot be determined from its configuration, so no entries were read. The paths it resolves to are listed below.","st.ssh.hostKeys.unavailable":"The entries for this host could not be read.","st.ssh.hostKeys.noFingerprint":"Fingerprint unavailable","st.ssh.hostKeys.copy":"Copy the {algorithm} fingerprint","st.ssh.hostKeys.copied":"Fingerprint copied.","st.ssh.hostKeys.copyFailed":"Could not copy. Select the fingerprint text instead.","st.ssh.hostKeys.status.revoked":"Revoked","st.ssh.hostKeys.status.unsupported":"Cannot check","st.ssh.hostKeys.status.invalid":"Unreadable key","st.ssh.hostKeys.reason.revoked":"This entry is marked revoked (@revoked); a connection that matches it is refused.","st.ssh.hostKeys.reason.certAuthority":"This entry trusts a certificate authority (@cert-authority), so Kiki cannot check this host key against it.","st.ssh.hostKeys.reason.invalidKey":"The public key in this entry cannot be parsed, so it cannot be used to check a connection.","st.ssh.hostKeys.file.read":"read","st.ssh.hostKeys.file.missing":"not found","st.ssh.hostKeys.file.unavailable":"could not be read","st.ssh.comingSoon":"Coming soon","st.ssh.edit":"Edit","st.ssh.delete":"Delete host","st.ssh.saveAsKiki":"Save as Kiki host","st.ssh.disconnect":"Disconnect","st.ssh.disconnected":"Disconnected.","st.ssh.writeBack":"Write to ~/.ssh/config","st.ssh.writeBackNeedsTarget":"Needs a hostname and user before it can be written to ~/.ssh/config.","st.ssh.writeBackExists":"~/.ssh/config already has this alias.","st.ssh.writeBackTitle":'Write "{alias}" to ~/.ssh/config?',"st.ssh.writeBackBody":"Kiki appends one Host entry with this hostname, user and port. Nothing else in the file changes, and later edits here are not copied again.","st.ssh.writtenBack":"Added {alias} to ~/.ssh/config.","st.ssh.deleteTitle":"Delete {name}?","st.ssh.deleteBody":"Removes the host from Kiki. ~/.ssh/config and files on the remote machine are not touched. Sessions using it lose access on their next turn.","st.ssh.deleteConfirm":"Delete host","st.ssh.deleted":"Deleted {name}.","st.ssh.configReadOnly":"Edit this host in ~/.ssh/config, or save it as a Kiki host to set its roots and agent access here.","st.ssh.discoverFailed":"Could not read ~/.ssh/config: {detail}","st.ssh.connectionTitle":"Connection","st.ssh.syncToggle":"Always sync system SSH config","st.ssh.syncHint":"Hosts in your system SSH config appear here automatically.","st.ssh.syncReading":"Reading the saved setting…","st.ssh.syncReadFailed":"Could not read whether config sync is on.","st.ssh.syncSourceBase":"Set by the base configuration, not here yet.","st.ssh.syncSourceDefault":"Not set anywhere yet; on by default.","st.ssh.approvalToggle":"Connect without asking","st.ssh.approvalHint":'Skips the "Connect to host" card when the agent first uses a host in a session. Host keys are still checked: a new key still needs your confirmation and a changed key is always refused. Commands and file edits on the host still follow your permission mode.',"st.ssh.form.addTitle":"Add SSH host","st.ssh.form.editTitle":"Edit {name}","st.ssh.form.overrideTitle":"Save {alias} as a Kiki host","st.ssh.form.intro":"Leave hostname, user and port blank to use values from your system SSH config.","st.ssh.form.overrideHint":"Save as a Kiki host. System config remains unchanged; blank fields inherit.","st.ssh.form.alias":"Alias","st.ssh.form.aliasRequired":"Enter an alias.","st.ssh.form.aliasInvalid":"Use letters, numbers, dots, dashes or underscores, starting with a letter or number.","st.ssh.form.name":"Display name","st.ssh.form.namePlaceholder":"Same as alias","st.ssh.form.hostname":"Hostname","st.ssh.form.hostnameInvalid":"Enter a hostname or IP address without spaces.","st.ssh.form.user":"User","st.ssh.form.port":"Port","st.ssh.form.portInvalid":"Use a port from 1 to 65535.","st.ssh.form.targetHint":"Jump hosts and proxy settings are inherited from external config.","st.ssh.form.identityFile":"Identity file","st.ssh.form.identityHint":"Path on this computer. Kiki stores the path only, never the key.","st.ssh.form.roots":"Working roots","st.ssh.form.rootsHint":"One absolute path per line. Files outside these need approval. Blank uses the remote home directory.","st.ssh.form.rootsInvalid":"{path} is not an absolute POSIX path.","st.ssh.form.description":"Description for the agent","st.ssh.form.descriptionPlaceholder":"GPU training box","st.ssh.form.offered":"Offer to the agent","st.ssh.form.offeredHint":"Hidden hosts can still be added to a session by you.","st.ssh.form.signIn":"Saved sign-in","st.ssh.form.signInHint":"For now, Kiki asks for a password or key the first time it connects.","st.ssh.form.alwaysAsk":"Always ask before commands on this host","st.ssh.form.alwaysAskHint":"For production machines, whatever the permission mode.","st.ssh.form.saveChanges":"Save changes","st.ssh.form.saveOverride":"Save as Kiki host","composer.addMenu.ssh":"SSH hosts for this session","composer.ssh.heading":"SSH hosts in this session","composer.ssh.loading":"Loading hosts…","composer.ssh.empty":"No hosts configured yet.","composer.ssh.fromConfig":"From ~/.ssh/config","composer.ssh.temporary":"This session only","composer.ssh.newHost":"New host…","composer.ssh.manage":"Manage hosts","composer.ssh.removeChip":"Remove {name} from this session","composer.ssh.addFailed":"Could not add {name}: {detail}","composer.ssh.removeFailed":"Could not remove {name}: {detail}","ia.ssh.title":"Connect to host","ia.ssh.promptsTitle":"Sign-in step","ia.ssh.hostKeyTitle":"New host key","ia.ssh.connectTo":"Connect to","ia.ssh.promptsFor":"The server asks for more to sign in to","ia.ssh.hostKeyFor":"First connection to","ia.ssh.user":"User","ia.ssh.target":"Resolved target","ia.ssh.via":"Via","ia.ssh.proxyCommand":"Proxy command","ia.ssh.signInWith":"Sign in with","ia.ssh.method.agent":"My SSH setup","ia.ssh.method.agentHint":"Uses ssh-agent and the keys named in ~/.ssh/config. Nothing is sent from here.","ia.ssh.method.password":"Password","ia.ssh.method.keyFile":"Key file","ia.ssh.method.keyText":"Paste key","ia.ssh.passwordFor":"Password for {target}","ia.ssh.keyPath":"Private key file on this computer","ia.ssh.keyText":"Private key","ia.ssh.keyTextPlaceholder":"-----BEGIN OPENSSH PRIVATE KEY-----","ia.ssh.passphrase":"Key passphrase (if any)","ia.ssh.saveTo":"Remember sign-in for","ia.ssh.save.workspace":"This workspace","ia.ssh.save.global":"All workspaces","ia.ssh.save.session":"Don’t save","ia.ssh.save.storedHint":"Stored in the system keychain, or a protected file under ~/.kiki/credentials when no keychain is available.","ia.ssh.save.sessionHint":"Used for this connection only. If it drops, Kiki asks again.","ia.ssh.afterApprove":"Connecting adds the host to this session. {tool} still asks for its own permission.","ia.ssh.approve":"Connect","ia.ssh.signInConnect":"Sign in and connect","ia.ssh.promptsHint":"Answer each prompt as the server shows it. Codes are sent once and never saved.","ia.ssh.sendAnswer":"Send","ia.ssh.cancelSignIn":"Cancel sign-in","ia.ssh.keyFirstSeen":"{algorithm} key fingerprint","ia.ssh.keyCheckHint":"Compare it with the fingerprint from the server’s owner before trusting. Trusting adds it to ~/.ssh/known_hosts.","ia.ssh.trustKey":"Trust this host key","ia.ssh.dontTrust":"Don’t connect","ia.ssh.sent":"Sent","st.engines.title":"External engines","st.engines.intro":"Coding agents Kiki can drive. Each one uses its own tools, models and credential — Kiki reuses the sign-in or API key the engine already has on this machine, so a profile only picks which one runs.","st.engines.kind":"External engine","st.engines.statusReady":"Ready","st.engines.statusWarning":"Needs attention","st.engines.statusMissing":"Not found","st.engines.statusUnknown":"Not checked","st.engines.login.logged_in":"Signed in","st.engines.login.logged_out":"Signed out","st.engines.login.unknown":"Sign-in unknown","st.engines.credential.oauth_login":"Signed in with the Claude Code CLI","st.engines.credential.api_key_env":"API key from the environment","st.engines.credential.auth_token_env":"Auth token from the environment","st.engines.credential.settings_env":"API key from Claude Code settings.json","st.engines.credential.api_key_helper":"API key from apiKeyHelper","st.engines.credential.api_key":"API key reported by Claude Code","st.engines.credential.external_backend":"Cloud provider credentials (Bedrock, Vertex or Foundry)","st.engines.credential.none":"No credential found","st.engines.credential.unknown":"Credential source unknown","st.engines.check":"Check engine","st.engines.checking":"Checking…","st.engines.checkingHint":"Finding the program and reading the credential it already has.","st.engines.neverChecked":"Not checked yet. A check finds the program, reads its version and reads the sign-in or API key it already has.","st.engines.checkedOk":"Check passed","st.engines.checkedWarning":"Check passed with warnings","st.engines.checkedFailed":"Check failed","st.engines.program":"Program","st.engines.source":"Found via","st.engines.protocol":"Protocol","st.engines.version":"Version","st.engines.versionUnknown":"Not reported","st.engines.login":"Sign-in","st.engines.loginStale":"Run a check to read the sign-in status.","st.engines.loginCommand":"Sign-in command","st.engines.apiKeyCommand":"API key","st.engines.loginOrKey":"Kiki reuses whichever credential this machine already has, so one of these two routes is enough.","st.engines.apiKeySettings":"Claude Code also reads {env} from the env block of ~/.claude/settings.json, or from an apiKeyHelper command. Kiki reads the same ~/.claude settings and passes your environment through.","st.engines.copied":"Copied","st.engines.copyCommand":"Copy {command}","st.engines.args":"Default arguments","st.engines.argsNone":"None","st.engines.capabilities":"What Kiki can set","st.engines.capsDeclared":"From the engine’s configuration. Kiki does not read capabilities from a running engine yet.","st.engines.capsNegotiated":"The last row is what the engine reported when it last started; the rest comes from its configuration.","st.engines.cap.handshake":"Reported by the engine","st.engines.cap.handshakeNone":"No optional features","st.antigravity.program":"Antigravity ACP CLI","st.antigravity.ideFound":"Kiki found the Antigravity IDE, not the ACP CLI. The IDE cannot run sessions; install the CLI below.","st.antigravity.otherVersion":"Install another 1.x version","st.antigravity.activeVersion":"{version} in use","st.antigravity.programBody":"Kiki downloads Google’s ACP CLI {version} into its own tool folder. The Antigravity IDE is a different program and cannot run sessions.","st.antigravity.programBodyShort":"Kiki downloads Google’s ACP CLI {version} into its own tool folder.","st.antigravity.inUse":"In use","st.antigravity.activate":"Use this version","st.antigravity.activating":"Switching…","st.antigravity.install":"Install {version}","st.antigravity.installing":"Downloading…","st.antigravity.progress.label":"ACP CLI {version} install progress","st.antigravity.progress.starting":"Connecting to the download server…","st.antigravity.progress.downloading":"Downloading {received} of {total}","st.antigravity.progress.downloadingUnknown":"Downloaded {received}","st.antigravity.progress.extracting":"Unpacking…","st.antigravity.progress.activating":"Switching to the new version…","st.antigravity.installThis":"Install","st.antigravity.versionLabel":"Version to install","st.antigravity.versionInvalid":"Enter a 1.x release, such as 1.2.1.","st.antigravity.installFailed":"Could not install the ACP CLI: {detail}. Check the network and try again.","st.antigravity.installTimedOut":"The download did not finish within 10 minutes and was stopped. Check the network and try again.","st.antigravity.signIn":"Google sign-in","st.antigravity.signInBody":"Opens Google in your browser. After you allow access, the browser lands on a local address that does not load — copy that address and paste it here.","st.antigravity.account":"Account type","st.antigravity.personal":"Personal","st.antigravity.business":"Workspace","st.antigravity.signInWithGoogle":"Sign in with Google","st.antigravity.stepOpen":"Allow access on the Google page.","st.antigravity.openAgain":"Open it again","st.antigravity.stepPaste":"Copy the address the browser ends on (it starts with {address}) and paste it below.","st.antigravity.openFailed":"The browser did not open. Allow pop-ups, or use Open it again.","st.antigravity.pasteLabel":"Address from the browser","st.antigravity.finish":"Finish sign-in","st.antigravity.finishing":"Signing in…","st.antigravity.cancel":"Cancel sign-in","st.antigravity.expiresIn":"This sign-in stays open for {time}.","st.antigravity.expired":"This sign-in expired.","st.antigravity.startAgain":"Start again","st.antigravity.pasteRetry":"That address has no sign-in code. Copy the full address from the browser and paste it again.","st.antigravity.flowEnded":"This sign-in ended. Start again.","st.antigravity.signInRejected":"Google did not accept this sign-in, so it has ended. Start again.","st.antigravity.signedInBody":"Antigravity uses this Google account.","st.antigravity.signOut":"Sign out","st.antigravity.signingOut":"Signing out…","st.engines.cap.prompt":"Instructions","st.engines.cap.steer":"Messages during a turn","st.engines.cap.model":"Model","st.engines.cap.thinking":"Thinking level","st.engines.cap.permission":"Permission mode","st.engines.cap.mapped":"Set per profile","st.engines.cap.unavailable":"Engine default","st.engines.steer.native":"Sent into the running turn","st.engines.steer.next_turn_preamble":"Held for the next turn","st.engines.permission.argv":"Launch flag","st.engines.permission.session_mode":"Session mode","st.engines.permission.config_option":"Session option","st.engines.permission.turn_param":"Per-turn setting","st.engines.permission.none":"Not declared","st.engines.permissionTrust":"can defer to the engine’s own settings","st.engines.diagnostics":"Check details","st.engines.install":"Install","st.engines.notFoundBody":"{program} was not found on this machine. Install it, then check again.","st.engines.integrations":"Kiki tools for this engine","st.engines.integrationsBody":"A main profile on this engine can dispatch Kiki subagents: turn on Allow dispatching Kiki subagents in its profile. Sharing memory and skills is not available yet.","st.engines.configHint":"Engines are configured under [agent_executors.<id>] in config.toml.","st.engines.empty":"No external engines are configured on this server.","st.engines.loading":"Loading engines…","st.engines.recheck":"Check again","st.engines.setup":"Setup","st.engines.stepFound":"Installed","st.engines.stepMissing":"Not installed","st.engines.stepFailed":"Not working","st.engines.stepWaiting":"After the step above","st.engines.stepMissingBody":"Install {program} with this command in a terminal, then check again.","st.engines.stepFailedBody":"{program} was found but did not start. Reinstall it with this command, then check again.","st.engines.loginUnknownBody":"Kiki could not read the credential. Sign in with the command below, or set the API key this engine reads.","st.engines.defaultProfile":"A ready-made profile for this engine is not available yet. Pick it as the engine of a profile under Agents.","st.executorPrompt.title":"Executor prompt","st.executorPrompt.nativeNote":"Used only when this profile runs on an external engine.","st.executorPrompt.scope":"Applies to","st.executorPrompt.scopeAll":"All engines","st.executorPrompt.inherits":"{engine} uses the settings for all engines.","st.executorPrompt.addOverride":"Customize for {engine}","st.executorPrompt.removeOverride":"Remove {engine} override","st.executorPrompt.delivery":"Delivery","st.engines.advanced":"Advanced","st.engines.override.hint":"Overrides for this engine only. The check and the launch both use them.","st.engines.override.binPath":"Program path","st.engines.override.binPathPlaceholder":"Command name, absolute path, or .js entry","st.engines.override.autoDetected":"Auto-detected: {value}","st.engines.override.binPathHint":"Replaces auto-discovery. A .js entry runs through node.","st.engines.override.homeDir":"Config directory ({env})","st.engines.override.homeDirPlaceholder":"Empty uses the engine default","st.engines.override.homeDirHint":"Written to {env} for this engine.","st.engines.override.args":"Extra arguments","st.engines.override.argsHint":"Space-separated, appended after the built-in arguments.","st.engines.override.env":"Extra environment","st.engines.override.envHint":"One KEY=VALUE per line; KEY= removes it. Already set: {keys}","st.engines.override.envNone":"none","st.engines.override.envInvalid":"Line “{line}” is not KEY=VALUE.","st.engines.override.absolute":"Use an absolute path, or a bare command name for a command on PATH.","st.engines.override.validate":"Validate","st.engines.override.validating":"Validating…","st.engines.override.save":"Save overrides","st.engines.override.saving":"Saving…","st.engines.override.recheck":"Saving runs the check again.","st.executorPrompt.deliveryInherit":"Same as all engines","st.executorPrompt.delivery.append":"Append","st.executorPrompt.delivery.replace":"Replace","st.executorPrompt.delivery.preamble":"First message","st.executorPrompt.deliveryHint.append":"Added after the engine’s own system prompt.","st.executorPrompt.deliveryHint.replace":"Used instead of the engine’s own system prompt.","st.executorPrompt.deliveryHint.preamble":"Sent ahead of your first message in each engine session.","st.executorPrompt.supports":"{engine} supports: {list}.","st.executorPrompt.downgrade":"{engine} can’t use {requested}. It is sent as {actual}.","st.executorPrompt.include":"Also send","st.executorPrompt.groupContext":"Context","st.executorPrompt.groupFields":"Kiki prompt fields","st.executorPrompt.block.agents_md":"AGENTS.md","st.executorPrompt.block.memory_snapshot":"Memory snapshot","st.executorPrompt.block.skill_catalog":"Skill catalog","st.executorPrompt.block.workspace_info":"Workspace info","st.executorPrompt.block.system":"All system.* fields","st.executorPrompt.block.delegation":"All delegation.* fields","st.executorPrompt.fieldId":"Field id","st.executorPrompt.fieldIdInvalid":"Use system.<id> or delegation.<id>.","st.executorPrompt.addField":"Add field","st.executorPrompt.body":"Instructions","st.executorPrompt.bodyHint":"Leave empty to send the profile body.","st.executorPrompt.append":"Extra section","st.executorPrompt.appendHint":"Added after the instructions.","st.executorPrompt.preview":"What {engine} receives","st.executorPrompt.previewAs":"Delivered as: {delivery}","st.executorPrompt.previewBody":"Profile body","st.executorPrompt.previewOverride":"Instructions","st.executorPrompt.previewAppend":"Extra section","st.executorPrompt.previewResolved":"filled in when a session starts","st.executorPrompt.previewEmptyBody":"The profile body is empty.","st.executorPrompt.previewNoText":"Text is resolved when a session starts; this server has no rendered preview.","st.executorPrompt.steer":"Messages you send during a turn are {mode}.","st.executorPrompt.steerMode.native":"sent into the running turn","st.executorPrompt.steerMode.next_turn_preamble":"held for the next turn","st.executorPrompt.steerLimit":"Reminders, goal updates and task notices are not forwarded to external engines yet.","st.executorPrompt.pickEngine":"Pick an external engine to preview what it receives.","st.profiles.ignoredTitle":"Not used by {engine}","st.profiles.fieldName.pinned_model_alias":"Model","st.profiles.fieldName.thinking_effort":"Thinking","st.profiles.fieldName.tools":"Tools","st.profiles.fieldName.disallowed_tools":"Disallowed tools","st.profiles.fieldName.service_tier":"Service tier","st.profiles.fieldName.request_params":"Request parameters","st.profiles.fieldName.context_budget":"Context budget","st.profiles.fieldName.auto_compact":"Auto compact","st.profiles.fieldName.max_completion_tokens":"Output limit","transcript.exec.degradedNote":"Partial record","transcript.exec.delivery.native":"instructions sent natively","transcript.exec.delivery.system_prompt_override":"instructions replaced the engine prompt","transcript.exec.delivery.developer_instructions":"instructions sent as developer instructions","transcript.exec.delivery.base_instructions":"instructions replaced the engine base prompt","transcript.exec.delivery.first_prompt_preamble":"instructions sent with the first message","transcript.exec.hint.delivered.native_steer":"Message reached the engine during the turn","transcript.exec.hint.delivered.next_turn_preamble":"Message sent to the engine with the next turn","transcript.exec.hint.queued":"Message waiting for the engine’s next turn","transcript.exec.hint.undelivered":"Message not delivered to the engine","transcript.exec.compacted":"The engine compacted its context","transcript.exec.turnDiff":"Changes this turn","transcript.exec.turnDiffFiles":"{count} files","transcript.exec.unknownUpdate":"The engine sent an update Kiki can’t show","st.executorPrompt.overrideNote":"An override keeps its own list of blocks; changes to all engines don’t reach it.","st.profiles.fieldsAfterSave":"Save to see which settings {engine} uses.","st.profiles.fieldValueSet":"set in this file","st.profiles.problem.executorPrompt":"An executor prompt field id is not a system.* or delegation.* id.","transcript.loss.codex_no_step_boundaries":"Codex reports no step boundaries, so the turn shows as one step","transcript.loss.prompt_delivery_downgraded":"the engine could not take the requested prompt delivery, so a fallback was used","transcript.loss.user_message_attribution_missing":"some user messages could not be matched to a prompt","transcript.loss.permission_mode_unverified":"the engine did not confirm the permission mode","transcript.loss.additional_directories_dropped":"extra workspace folders were not passed to the engine","transcript.loss.thought_level_unconfigured":"the engine has no thinking-level setting, so it used its default","st.section.notifications":"Notifications & messages","st.purpose.notifications":"Get pinged on your phone or in a team chat when work finishes or a question waits.","st.notify.rulesTitle":"Notification rules","st.notify.enabled":"Send notifications","st.notify.enabledHint":"Master switch for every channel below. On by default.","st.notify.viewing":"Skip the session you are viewing","st.notify.viewingHint":"Nothing is sent while the session is open in front of you.","st.notify.minWork":"Skip short turns","st.notify.minWorkHint":"Turns shorter than this send no completion notice. Default 60 seconds.","st.notify.seconds":"seconds","st.notify.minWorkInvalid":"Enter whole seconds from 0 to 86400.","st.notify.quiet":"Quiet hours","st.notify.quietHint":"Notifications due in this window wait until it ends.","st.notify.quietFrom":"From","st.notify.quietTo":"To","st.notify.quietZone":"Time zone","st.notify.timeInvalid":"Use 24-hour time, such as 22:00.","st.notify.privacyLabel":"What is sent","st.notify.privacy":"Only what happened, such as “a turn finished”. Session titles, questions and file paths stay on this computer.","st.notify.runtimeLabel":"When they arrive","st.notify.runtime.tray":"Closing the window keeps Kiki in the tray, so notifications keep going out. Quitting Kiki stops them.","st.notify.runtime.quit":"Closing the window quits Kiki. Nothing is sent until you open it again.","st.notify.runtime.browser":"Notifications are delivered by the background service whether this page is open or not.","st.notify.loadFailed":"Could not load notification settings: {detail}","st.notify.channelsTitle":"Channels","st.notify.emptyTitle":"No channels yet","st.notify.emptyBody":"Add a channel to hear about finished work and waiting questions on Telegram, WeCom or a webhook.","st.notify.expandAria":"Settings for {name}","st.notify.channelToggle":"Enable {name}","st.notify.sendOnly":"Send only","st.notify.unverified":"Pending test","st.notify.unverifiedHint":"Send a test notification to verify delivery.","st.notify.state.dependency":"Not ready","st.notify.state.connection":"Connection failed","st.notify.state.unauthorized":"Not authorized","st.notify.state.ok":"Connected","st.notify.state.noCredential":"Credential missing","st.notify.reason.desktop_host_unavailable":"System notifications are not supported in the current environment.","st.notify.reason.adapter_not_installed":"Notification service component is not installed.","st.notify.reason.unknown":"A required component is missing.","st.notify.name":"Name","st.notify.nameHint":"Only shown in this list.","st.notify.connection":"Connection","st.notify.connectionShared.one":"Shared with 1 other channel. Changes here apply to both.","st.notify.connectionShared.other":"Shared with {n} other channels. Changes here apply to all of them.","st.notify.target":"Target","st.notify.scenes":"Notify me when","st.notify.scene.work_complete":"A turn finishes","st.notify.scene.question_pending":"A question is waiting","st.notify.check":"Check credential","st.notify.checking":"Checking…","st.notify.test":"Send test notification","st.notify.testing":"Sending…","st.notify.check.ok":"{provider} accepted the credential.","st.notify.check.requiresTest":"Send a test notification to verify delivery.","st.notify.check.unauthorized":"{provider} rejected the credential. Replace it and check again.","st.notify.check.connection":"Could not reach {provider}. Check the network and try again.","st.notify.test.accepted":"{provider} accepted the test notification.","st.notify.test.queued":"Test notification queued.","st.notify.test.failed":"Test notification failed: {reason}.","st.notify.lastSent":"Last sent","st.notify.lastError":"Last error","st.notify.never":"Nothing sent yet","st.notify.deliveries":"Delivery log","st.notify.deliveriesEmpty":"No deliveries yet.","st.notify.attempt":"attempt {n}","st.notify.delivery.queued":"Queued","st.notify.delivery.sending":"Sending","st.notify.delivery.accepted_by_provider":"Accepted","st.notify.delivery.suppressed":"Skipped","st.notify.delivery.failed":"Failed","st.notify.delivery.expired":"Expired","st.notify.delivery.unknown":"Result unknown","st.notify.delivery.cancelled":"Cancelled","st.notify.error.auth":"credential rejected","st.notify.error.forbidden":"no permission for this target","st.notify.error.not_found":"target not found","st.notify.error.rate_limited":"rate limited by the platform","st.notify.error.transient":"network unavailable","st.notify.error.too_long":"message too long","st.notify.error.bad_format":"message format rejected","st.notify.error.dependency_missing":"a required component is missing","st.notify.error.configuration":"configuration incomplete","st.notify.error.protocol":"unexpected response from the platform","st.notify.error.unknown":"unknown error","st.notify.remove":"Remove channel","st.notify.removeTitle":"Remove {name}?","st.notify.removeBody":"Notifications stop going to this channel.","st.notify.removeConnection":"Its connection and saved credentials are deleted too.","st.notify.removeKeepConnection":"The shared connection stays for its other channels.","st.notify.fieldRequired":"Enter {field}.","st.notify.optional":"optional","st.notify.addTitle":"Add a channel","st.notify.choose":"Choose a built-in channel","st.notify.add":"Add channel","st.notify.provider":"Channel type","st.notify.newConnection":"New connection","st.notify.unavailableTitle":"Not available yet","st.notify.addFailed":"Could not add the channel: {detail}","st.notify.provider.telegram":"Telegram","st.notify.provider.wecom_webhook":"WeCom group bot","st.notify.provider.discord_webhook":"Discord webhook","st.notify.provider.slack_webhook":"Slack webhook","st.notify.provider.dingtalk_webhook":"DingTalk group bot","st.notify.provider.feishu_webhook":"Feishu group bot","st.notify.provider.http":"HTTP webhook","st.notify.provider.windows_toast":"Windows notifications","st.notify.provider.smtp":"Email (SMTP)","st.notify.provider.matrix":"Matrix","st.notify.provider.script":"Script","st.notify.field.botToken":"Bot token","st.notify.field.webhookKey":"Webhook key","st.notify.field.webhookId":"Webhook ID","st.notify.field.webhookToken":"Webhook token","st.notify.field.webhookPath":"Webhook path","st.notify.field.signingSecret":"Signing secret","st.notify.field.endpoint":"Endpoint","st.notify.field.format":"Body format","st.notify.field.bearerToken":"Bearer token","st.notify.field.privatePath":"Private path","st.notify.field.chatId":"Chat ID","st.notify.field.topicId":"Topic ID","st.notify.field.keyword":"Keyword","st.notify.field.privateGrant":"Private endpoint grant","st.notify.field.privateGrantHint":"JSON object that allows one exact private-network endpoint. Leave empty for public endpoints.","st.notify.advanced":"Advanced","st.notify.jsonInvalid":'Enter a JSON object, such as {"host": "10.0.0.5"}.',"st.section.spaces":"Spaces","st.purpose.spaces":"A space has its own conversations, memory and workspaces. Settings and accounts carry over from the main space unless you change them in the space.","st.spaces.windowTitle":"Windows","st.spaces.windowSwitch":"One window, switch between spaces","st.spaces.windowSwitchDesc":"Recommended. Tasks in the other spaces keep running while you switch.","st.spaces.windowWindows":"A window for each space","st.spaces.windowWindowsDesc":"Each space gets its own window, taskbar button and tray icon.","st.spaces.windowNextLaunch":"Takes effect the next time Kiki starts.","st.spaces.windowPending":"Restart Kiki to use this.","st.spaces.windowBrowserHint":"Window options are available in the Kiki desktop app.","st.spaces.windowSubHint":"Window options are set in the main space.","st.spaces.listTitle":"Spaces","st.spaces.new":"New space","st.spaces.attach":"Add existing space…","st.spaces.main":"Main space","st.spaces.current":"Current","st.spaces.running":"Running","st.spaces.notStarted":"Not started","st.spaces.open":"Open","st.spaces.switch":"Switch","st.spaces.pending.one":"1 needs you","st.spaces.pending.other":"{count} need you","st.spaces.credSharedShort":"Shares accounts","st.spaces.credIsolatedShort":"Own accounts","st.spaces.menuAria":"More actions for {name}","st.spaces.reveal":"Show in file manager","st.spaces.credentials":"Accounts and keys…","st.spaces.removeFromList":"Remove from list","st.spaces.delete":"Delete space…","st.spaces.emptyTitle":"Only the main space so far","st.spaces.emptyBody":"Create a space to keep a project’s conversations, memory and workspaces apart. It follows the main space’s settings and accounts; what you change inside it stays there.","st.spaces.loading":"Loading spaces…","st.spaces.subManageHint":"Spaces are created and removed from the main space.","st.spaces.switchToMain":"Switch to main space","st.spaces.switchFailed":"Couldn’t open {name}. You’re still in the current space.","st.spaces.desktopOnly":"Opening another space needs the Kiki desktop app.","st.spaces.removed":"{name} is no longer listed. Its folder is unchanged.","st.spaces.removeTitle":"Remove {name} from the list?","st.spaces.removeBody":"Kiki stops showing this space. The folder and everything in it stay on disk, and you can add it back with “Add existing space”.","st.spaces.deleteTitle":"Delete {name}?","st.spaces.deleteBody":"This deletes the folder below and everything inside it: the space’s conversations, memory, settings and saved keys. It cannot be undone.","st.spaces.deleteKeepHint":"To keep the files, use “Remove from list” instead.","st.spaces.deleteTypeLabel":"Type {name} to confirm","st.spaces.deleteConfirm":"Delete space and files","st.spaces.deleteDisabledCurrent":"This window is using this space. Switch to another space first.","st.spaces.deleteDisabledBusy":"Sessions are running in this space. Wait for them to finish.","st.spaces.deleteDisabledOpen":"This space is running. Close its window or wait for it to stop first.","st.spaces.deleted":"{name} and its folder were deleted.","st.spaces.createShortcut":"Create desktop shortcut","st.spaces.creatingShortcut":"Creating…","st.spaces.shortcutCreated":"Created desktop shortcut: {path}","st.spaces.shortcutExists":"A desktop shortcut already exists for this space.","st.spaces.shortcutWindowsOnly":"Desktop shortcuts are currently supported only on Windows.","st.spaces.shortcutInvalidSpace":"Invalid space or path.","st.spaces.shortcutDesktopUnavailable":"Cannot locate the Windows desktop directory.","st.spaces.shortcutExecutableUnavailable":"Cannot locate application executable.","st.spaces.shortcutFailed":"Failed to create desktop shortcut: {detail}","st.spaces.createTitle":"New space","st.spaces.name":"Name","st.spaces.color":"Color","st.spaces.colorOption":"Color {n}","st.spaces.location":"Location","st.spaces.browse":"Browse…","st.spaces.locationHint":"A new or empty folder. Suggested: {path}","st.spaces.inheritMore":"What this space inherits from the main space","st.spaces.inheritHeading":"From the main space","st.spaces.inh.config":"Settings (models, tools, permissions…)","st.spaces.inh.credentials":"Accounts and keys","st.spaces.inh.agents":"Agents and SYSTEM.md","st.spaces.inh.instructions":"AGENTS.md","st.spaces.inh.skills":"Skills and commands","st.spaces.inh.mcp":"MCP servers","st.spaces.inh.appearance":"Appearance (theme files)","st.spaces.inh.plugins":"Plugins","st.spaces.inh.genericRoots":"~/.agents folder","st.spaces.choice.inherit":"Inherit","st.spaces.choice.none":"Don’t","st.spaces.choice.shared":"Shared","st.spaces.choice.isolated":"Separate","st.spaces.choice.stack":"Add to","st.spaces.choice.visible":"Visible","st.spaces.choice.hidden":"Hidden","st.spaces.alwaysSeparate":"Conversations, memory, search, the task board and workspaces are always separate.","st.spaces.createAndOpen":"Create and open","st.spaces.create":"Create space","st.spaces.nameRequired":"Give the space a name.","st.spaces.pathRequired":"Enter the full path of a folder.","st.spaces.created":"{name} created.","st.spaces.attachTitle":"Add existing space","st.spaces.attachBody":"Choose a folder that already holds a space made from this main space. Nothing in it is changed.","st.spaces.attachConfirm":"Add space","st.spaces.attached":"{name} added.","st.spaces.credTitle":"Accounts and keys","st.spaces.credShared":"Share with the main space","st.spaces.credIsolated":"Keep separate in this space","st.spaces.credSharedDesc":"Sign-ins, API keys and SSH passwords come from the main space.","st.spaces.credIsolatedDesc":"The space signs in and stores keys on its own.","st.spaces.credDialogTitle":"Accounts and keys · {name}","st.spaces.credToIsolatedNote":"After switching, {name} needs its own sign-ins and API keys.","st.spaces.copySsh":"Copy saved SSH passwords to {name}","st.spaces.copySshHint":"A host in the space picks up a copied password only when it belongs to the same workspace.","st.spaces.copyCount.one":"1 host selected","st.spaces.copyCount.other":"{count} hosts selected","st.spaces.copySshAll":"Select all","st.spaces.copySshNone":"No SSH host in the main space has a saved password or passphrase.","st.spaces.copySshLoading":"Looking for saved SSH passwords…","st.spaces.kind.password":"Password","st.spaces.kind.passphrase":"Key passphrase","st.spaces.credToSharedNote":"Sign-ins, SSH entries and local API key overrides saved in {name} stay in that space and are not copied to the main space. Its own SSH entries are ignored while it shares.","st.spaces.credSwitchToIsolated":"Switch to separate","st.spaces.credSwitchToShared":"Switch to shared","st.spaces.credDoneIsolated":"{name} now keeps its own accounts and keys.","st.spaces.credDoneShared":"{name} now shares accounts and keys with the main space.","st.spaces.copiedSsh.one":"Copied 1 SSH entry.","st.spaces.copiedSsh.other":"Copied {count} SSH entries.","st.spaces.retainedSsh.one":"Kept 1 SSH entry in the space.","st.spaces.retainedSsh.other":"Kept {count} SSH entries in the space.","st.spaces.restartRequired":"Restart {name} after its tasks finish for this to apply.","st.spaces.credChangeFromMain":"To change this, switch to the main space and open Accounts and keys on this space.","st.spaces.copySshHere":"Copy SSH passwords…","st.spaces.copySshHereTitle":"Copy SSH passwords to this space","st.spaces.copySshHereBody":"Copies the main space’s saved password or passphrase for the selected hosts, so they keep working if this space switches to separate accounts.","st.spaces.copySshHereConfirm":"Copy passwords","st.spaces.copySshNoHosts":"This space has no Kiki SSH hosts.","st.spaces.restartSpace":"Restart space","st.spaces.restartHint":"Changed from the main space? Restart this space after its tasks finish to apply it.","st.spaces.restartConfirmTitle":"Restart {name}?","st.spaces.restartConfirmBody":"Sessions running in this space are interrupted.","st.spaces.overridesTitle":"Changed in this space","st.spaces.overridesHint":"Everything else follows the main space.","st.spaces.overridesEmpty":"Nothing changed yet. Every setting follows the main space.","st.spaces.inheritGroupsNote":"Skills, plugins and theme files from the main space are available here too. They are not marked one by one yet.","st.spaces.band":"Current: {name}","st.origin.inherited":"From main space","st.origin.local":"This space","st.origin.env":"Set by environment","st.origin.restore":"Restore inheritance","st.origin.restoreAria":"Restore {name} to the main space value","st.origin.restored":"{name} follows the main space again.","agentPanel.sourceId.inherited":"Main space","sidebar.space.switcherAria":"Switch space","sidebar.space.menuTitle":"Switch space","sidebar.space.manage":"Manage spaces…","sidebar.space.otherPending.one":"1 session in another space needs you","sidebar.space.otherPending.other":"{count} sessions in other spaces need you","sidebar.space.openWindow":"Open window","sidebar.space.starting":"Starting {name}…","sidebar.space.new":"New space…","sidebar.space.singleHint":"Keep a project’s conversations, memory and workspaces apart.","sidebar.space.remoteTag":"remote","sidebar.space.remoteBody":"Connected to remote Kiki “{name}”. Space switching stays on this machine.","sidebar.space.backToLocal":"Back to local","sidebar.space.groupLocal":"This machine","sidebar.space.groupRemote":"Remote Kikis","sidebar.space.remoteKiki":"Remote Kiki","sidebar.space.remoteAsOf":"as of {time}","sidebar.space.remoteNever":"never connected","sidebar.space.remoteBusy":"{count} working","sidebar.space.remoteNeedsYou":"{count} waiting on you","sidebar.space.remoteFailed":"Could not open {name}.","sidebar.space.backFailed":"Could not go back to this machine’s space.","st.ssh.asRemoteSpace":"Add as a remote space","st.ssh.remoteAdded":"Added {name}. It is now a space in the switcher.","st.ssh.remote.addTitle":"Add a remote Kiki over SSH","st.ssh.remote.addBody":"Use a Kiki you already can reach by SSH. This Kiki keeps the connection; the other machine only has to be running and has to allow it.","st.ssh.remote.profileField":"SSH profile","st.ssh.remote.profileHint":"A profile you already saved in SSH hosts. Nothing is installed and no port is published.","st.ssh.remote.planTitle":"What this will do","st.ssh.remote.planning":"Asking the other machine…","st.ssh.remote.state.attach":"That Kiki is already running there. This attaches to it and starts nothing.","st.ssh.remote.state.ensure":"That Kiki is not running there. This starts it and connects to it.","st.ssh.remote.state.ready":"That Kiki is already running and reachable. This attaches to it.","st.ssh.remote.targetPending":"The identity of the remote Kiki is not known yet.","st.ssh.remote.effects.attach":"Attaches to the Kiki that is already running.","st.ssh.remote.effects.start":"Starts the remote Kiki if it is not running.","st.ssh.remote.lifetime.existing":"The server there keeps whatever lifetime it already has.","st.ssh.remote.lifetime.untilStop":"The server there keeps running in the background until it is stopped explicitly, including after you close this window.","st.ssh.remote.gateNote":"Connecting does not open inbound: that Kiki still has to allow other Kikis, and allow this one, on its own.","st.ssh.remote.enableInbound":"Ask that Kiki to allow this Kiki too","st.ssh.remote.enableInboundHint":"Sends the request to the other Kiki so it can allow this one. It stays off until its owner accepts there.","st.ssh.remote.working":"Working…","st.ssh.remote.start":"Start it and add","st.ssh.remote.attachAction":"Attach and add","st.remote.outboundTitle":"Kikis I connect to","st.remote.diagnostics":"Connection diagnostics","st.remote.loading":"Reading this Kiki’s connections…","st.remote.controlUnavailable":"The local control connection is not ready.","st.remote.configures":"Configuring this Kiki: {origin} · home {home}","st.remote.configuresNoHome":"Configuring this Kiki: {origin}","st.remote.way.url":"From an address","st.remote.way.ssh":"Over SSH","st.remote.way.sshNoHosts":"This Kiki can reach a Kiki over SSH, but no SSH host is saved here yet.","st.remote.way.sshOpenHosts":"Add one in SSH hosts.","st.remote.add":"Add connection","st.remote.adding":"Adding…","st.remote.added":"Added {name}.","st.remote.addTitle":"Add a remote Kiki","st.remote.addBody":"Ask the other Kiki’s owner to allow this Kiki, then paste the invitation they send back. The invitation names the Kiki you are connecting to; the address and the owner token are yours to enter.","st.remote.emptyTitle":"No remote Kiki yet","st.remote.emptyBody":"Send this Kiki’s identity to the other machine’s owner, and add the connection here once they allow this Kiki and send an invitation.","st.remote.invitation":"Invitation","st.remote.invitationHint":"Paste the whole invitation from the other Kiki. It carries that Kiki’s real identity, so no id has to be typed by hand.","st.remote.invitationPlaceholder":"Invitation from the other Kiki","st.remote.invitationNamed":"the other Kiki calls this one “{name}”","st.remote.targetLine":"home {home} · host {host}","st.remote.labelField":"Name","st.remote.label.required":"Give this connection a name.","st.remote.label.tooLong":"Keep the name under 128 characters.","st.remote.endpointField":"Address","st.remote.endpointHint":"The address of that Kiki: https:// anywhere, or http:// on this machine.","st.remote.endpoint.required":"Enter the address of that Kiki.","st.remote.endpoint.invalid":"Enter a whole http:// or https:// address, with no path, query or credentials in it.","st.remote.endpoint.tls":"Use https:// for a Kiki that is not on this machine.","st.remote.tokenField":"Owner token","st.remote.tokenHint":"The token this Kiki’s owner gave you","st.remote.tokenStored":"Saved by this Kiki’s connection layer, never in this window or its browser storage.","st.remote.background":"Keep a background summary","st.remote.backgroundHint":"A small status of that Kiki’s working and waiting threads, so this window can show them without loading any of its threads.","st.remote.menuAria":"Connection to {name}","st.remote.retry":"Reconnect","st.remote.retried":"Reconnected to {name}.","st.remote.enable":"Turn on","st.remote.disable":"Turn off","st.remote.enabled":"Turned {name} back on.","st.remote.disabled":"Turned {name} off.","st.remote.blocked.disabled":"This connection is switched off.","st.remote.removeTitle":"Remove {name}?","st.remote.removeBody":"This stops this window’s connection to it and forgets the stored token. It does not shut that Kiki down or change its settings.","st.remote.removeConfirm":"Remove connection","st.remote.removed":"Removed {name}.","st.remote.enter":"Switch to it","st.remote.bridgeOnly":"Thread messages only. Its owner has to allow browsing as well before it can be opened here.","st.remote.purpose.gui":"Browse and chat","st.remote.purpose.bridge":"Thread messages","st.remote.state.online":"Connected","st.remote.state.offline":"Offline","st.remote.state.authentication_required":"Needs approval","st.remote.state.identity_changed":"A different Kiki answered","st.remote.state.disabled":"Turned off","st.remote.asOf":"as of {time}","st.remote.lastConnected":"last connected {time}","st.remote.busy":"{count} working","st.remote.needsYou":"{count} waiting on you","st.remote.identityTitle":"This Kiki’s identity","st.remote.identityBody":"Send this to the other machine’s owner so they can allow this Kiki. It carries no token.","st.remote.identityCopy":"Copy identity","st.remote.identityCopied":"Identity copied","st.remote.copyFailed":"Could not copy: {reason}","st.remote.paste.invitationOnly":"That is only the invitation code. Copy the whole invitation from the other Kiki, which also says which Kiki it is for.","st.remote.paste.targetMissing":"This invitation does not say which Kiki it is for. Copy the whole invitation block from the other Kiki.","st.remote.paste.invalid":"This is not readable as an invitation from another Kiki.","st.remote.paste.notInvitation":"This is not an invitation from another Kiki.","st.remote.paste.notIdentity":"This is not a Kiki identity block.","st.remote.fail.inboundDisabled":"That Kiki is not accepting other Kikis right now. Its owner has to allow this one first.","st.remote.fail.devRuntime":"That Kiki runs with authentication bypassed, so it cannot accept other Kikis.","st.remote.fail.invitation":"The invitation was not accepted. It may have expired or already been used; ask for a new one.","st.remote.fail.identity":"A different Kiki answered at that address than the invitation names. Nothing was saved.","st.remote.fail.notApproved":"That Kiki did not accept this connection. Its owner may have revoked it.","st.remote.fail.handshake":"That address did not answer as a Kiki with this owner token.","st.remote.fail.token":"That Kiki rejected the owner token.","st.remote.fail.disabled":"This connection is switched off.","st.remote.fail.paused":"This connection is paused. Reconnect, or ask the other Kiki’s owner to allow it again.","st.remote.fail.guiRequired":"This connection is registered for thread messages, not for browsing.","st.remote.fail.ownerOnly":"Only the Kiki’s own owner can do this.","st.remote.fail.grantGone":"That allow-list entry is already gone.","st.inbound.title":"Kikis allowed to connect to me","st.inbound.gate":"Allow other Kikis to connect","st.inbound.gateHint":"Off by default. It covers other Kikis, including other spaces on this machine. Opening it allows nobody on its own: every Kiki still needs a line below.","st.inbound.devRuntime":"This runtime skips authentication, so it cannot accept other Kikis. The saved setting and the allow list below are kept as they are.","st.inbound.configuredOnly":"Saved as on, but it is not in effect right now.","st.inbound.listTitle":"Allowed Kikis","st.inbound.invite":"Invite a Kiki","st.inbound.inviting":"Creating…","st.inbound.inviteNeedsGate":"Turn the switch on before creating an invitation.","st.inbound.inviteUnavailable":"This runtime cannot accept other Kikis, so no invitation can be created here.","st.inbound.emptyTitle":"No Kiki is allowed yet","st.inbound.emptyBody":"Invite a Kiki and send its owner the invitation; it takes effect when they add this Kiki as a connection.","st.inbound.status.invited":"Invited","st.inbound.status.approved":"Allowed","st.inbound.status.revoked":"Revoked","st.inbound.sourceLine":"home {home} · host {host}","st.inbound.neverConnected":"never connected","st.inbound.active":"{count} connected now","st.inbound.revoke":"Revoke","st.inbound.revokeTitle":"Revoke access for {name}?","st.inbound.revokeBody":"Its open streams stop and it cannot connect again with that invitation. Other Kikis are unaffected.","st.inbound.revoked":"Revoked access for {name}.","st.inbound.bridgeNote":"Thread-message access is granted separately. A line here allows browsing and chat only.","st.inbound.inviteTitle":"Invite a Kiki to connect","st.inbound.inviteBody":"Paste the identity the other Kiki’s owner copied for you. It names the real Kiki, so the allow-list line is not just a typed name.","st.inbound.sourceField":"That Kiki’s identity","st.inbound.sourceHint":"The other owner copies it for you under Settings → Spaces → Kikis I connect to.","st.inbound.sourcePlaceholder":"The identity block from the other Kiki","st.inbound.nameField":"Name for that Kiki","st.inbound.expiry":"Invitation valid for","st.inbound.expiry.tenMinutes":"10 minutes","st.inbound.expiry.thirtyMinutes":"30 minutes","st.inbound.expiry.oneHour":"1 hour","st.inbound.expiryHint":"After it expires the invitation cannot be used and a new one is needed.","st.inbound.invitationTitle":"Invitation for {name}","st.inbound.invitationBody":"Send this to the owner of {name}.","st.inbound.invitationLabel":"Invitation","st.inbound.invitationCopy":"Copy invitation","st.inbound.invitationCopied":"Invitation copied","st.inbound.invitationOnce":"Shown once and not saved anywhere. If you lose it, revoke this line and create a new invitation.","st.inbound.invitationDone":"Done","st.web.title":"Web access","st.web.hint":"Open this Kiki in a browser on another device.","st.web.powers":"Anyone holding the link can use this Kiki in full, with the same access you have.","st.web.off":"No browser can reach this Kiki right now.","st.web.temporary":"Temporary","st.web.persistent":"Always on","st.web.modeTemporary":"Open for a while, then close by itself","st.web.modePersistent":"Stay open until you turn it off","st.web.startTemporary":"Open temporarily","st.web.startPersistent":"Keep always on","st.web.enabling":"Opening…","st.web.opened":"Web access is open. Anyone with the link can use this Kiki in full.","st.web.turnOff":"Turn off web access","st.web.turningOff":"Turning off…","st.web.turnedOff":"Web access is off. Links that were handed out no longer work.","st.web.turnOffTitle":"Turn off web access?","st.web.turnOffBody":"Every browser signed in through a web link is disconnected, and the links already handed out stop working. This Kiki keeps running for you, and work already started is not cancelled.","st.web.newLink":"New link for another device","st.web.issuing":"Creating…","st.web.linkIssued":"A new link is ready. Send it to the device that should use it.","st.web.openHere":"Open in this browser","st.web.address":"Address","st.web.addressHint":"Type this into a browser on another device on the same network.","st.web.showDetails":"Show address and options","st.web.hideDetails":"Hide address and options","st.web.advanced":"Address and options","st.web.listenOn":"Listen on","st.web.listenHint":"0.0.0.0 lets other devices on this network connect. Leave it as it is for this machine only.","st.web.insecureNoTls":"Allow without encryption","st.web.insecureHint":"This connection is not encrypted. Anyone on the network can read what is sent, so use it only on a network you trust.","st.web.minutes":"{n}m","st.web.hours":"{n}h","st.web.days":"{n}d","st.web.expires":"Closes in {duration}","st.web.noExpiry":"Stays open","st.web.signedIn":"Signed-in browsers","st.web.signedInNone":"No browser has used a link yet.","st.web.signedInCount":"{count} connected now","st.web.revoke":"Sign out","st.web.revokeTitle":"Sign out {name}?","st.web.revokeBody":"That browser is disconnected and its link stops working here. Other browsers are not affected.","st.web.revokeAll":"Sign out all browsers","st.web.revokeAllTitle":"Sign out every browser?","st.web.revokeAllBody":"Every browser signed in through a web link is disconnected. Web access stays on; each device needs a new link to come back.","st.web.revokeAllDone":"Signed out every browser. Web access is still on.","st.web.revoked":"Signed out {name}.","st.web.insecureLive":"This connection is not encrypted. Anyone on the network can read what is sent.","st.web.addressPending":"An address appears here once the entry is open.","st.web.linkExpires":"This link can be redeemed for {duration}.","st.web.hostField":"Listen on","st.web.hostPlaceholder":"Leave as it is for this machine only","st.web.hostHint":"Use 0.0.0.0 to let other devices on this network connect.","st.web.portField":"Port","st.web.portPlaceholder":"Same port as this Kiki","st.web.publicUrlField":"Public address","st.web.publicUrlPlaceholder":"https://kiki.example.com","st.web.publicUrlHint":"Only if a TLS-terminating reverse proxy already serves this Kiki. The address you copy below is the one that is really reachable.","st.web.applyAddress":"Save address and reopen","st.web.addressSaved":"Web access reopened on the new address.","st.web.address.hostInvalid":"That is not an address or hostname.","st.web.address.portInvalid":"Enter a port between 1 and 65535.","st.web.address.publicUrlInvalid":"Enter a full address such as https://kiki.example.com, with no path.","st.web.address.needsTls":"Other devices can only reach an unencrypted address if you allow it below. Or put a TLS proxy in front and give its address instead.","st.web.reachableHere":"Reachable at","st.web.signedInAs":"This browser is signed in as {name}.","st.web.signedOut":"This browser is signed out.","st.web.signingOut":"Signing out…","connect.webLinkRefused":"This link no longer works","connect.webLinkRefusedBody":"It may have expired or already been used. Ask the owner of this Kiki for a new link and open that one.","connect.webLinkRetargeted":"This link was not opened","connect.webLinkRetargetedBody":"It carried an address for a different server, so it was not followed. Open the link exactly as you received it.","connect.webLinkRetry":"Try this link again","connect.webLinkUseConnect":"Connect another way","connect.webLinkHideConnect":"Hide the connect form","st.web.lastUsed":"Last used {time}","st.web.linkTitle":"A link for another device","st.web.linkBody":"Send this to the device that should use this Kiki. It signs in once and then stays signed in on that device.","st.web.linkLabel":"Web link","st.web.linkCopy":"Copy link","st.web.linkCopied":"Link copied","st.web.linkOnce":"This link is shown once. The person who receives it can use this Kiki in full.","st.web.linkDone":"Done","st.web.unavailable":"Web access is not available on this runtime.","st.web.readFailed":"The web access status could not be read.","st.web.failed":"That did not work. {reason}","st.away.title":"System notifications","st.away.hint":"Shown when Kiki is in the background or hidden. Clicking one opens the session.","st.away.enabled":"Notify me while Kiki is in the background","st.away.completed":"A turn finished","st.away.failed":"A turn failed","st.away.question":"A question is waiting for an answer","st.away.approval":"An approval is waiting","st.away.kindsLabel":"Notify for","st.away.browserHint":"This browser tab cannot show system notifications. The desktop app and the VS Code extension can.","away.completed.title":"Finished · {title}","away.failed.title":"Failed · {title}","away.question.title":"Question · {title}","away.approval.title":"Approval needed · {title}","away.completed.body":"The turn finished. Open the session to see the result.","away.failed.body":"The turn did not finish. Open the session to see what went wrong.","away.question.body":"Kiki is waiting for your answer.","away.approval.body":"An action is waiting for your approval.","away.merged.title":"Kiki · {count} sessions","away.merged.needsYou.one":"{count} needs you","away.merged.needsYou.other":"{count} need you","away.merged.finished.one":"{count} finished","away.merged.finished.other":"{count} finished","activity.markAllRead":"Mark all as read","activity.markAllReadDone":"Finished sessions marked as read.","activity.badgeCount.one":"{count} new item in Activity","activity.badgeCount.other":"{count} new items in Activity","activity.inWorkspace":"in {workspace}","activity.viewAria":"Activity view","activity.view.inbox":"Inbox","activity.view.comms":"Thread messages","comms.title":"Thread messages","comms.sent":"Sent","comms.received":"Received","comms.to":"to","comms.untitled":"Untitled thread","comms.deletedThread":"Deleted thread","comms.deletedRoom":"Deleted room","comms.roomLine":"{author}: {text}","comms.archived":"Archived","comms.openWith":"Messages with {name}","comms.pairTitle":"Messages with {name}","comms.pairHint":"Both sides, oldest first.","comms.pairEmpty":"No messages between these threads.","comms.openThread":"Open thread","comms.showIn":"Show in {name}","comms.showInConversation":"Show in the conversation","comms.delivery.pending":"Waiting to deliver","comms.delivery.delivered":"Delivered","comms.delivery.undeliverable":"Not delivered","comms.undeliverableReason":"Not delivered: {reason}","comms.undeliverableCount":"{count} not delivered","comms.loadOlder":"Load earlier messages","comms.loading":"Loading…","comms.scanning":"Still searching earlier messages.","comms.historyPreparing":"Preparing earlier history… Records shown may be incomplete.","comms.historyFailed":"Earlier history could not be prepared. Records shown may be incomplete.","comms.loadFailed":"Thread messages could not be loaded.","comms.showAllPeers":"Show all {count}","comms.showFewer":"Show fewer","comms.emptyTitle":"No thread messages yet.","comms.emptyBody":"Messages one thread sends another with ThreadSend collect here.","comms.emptyScoped":"No thread in this workspace has sent or received a message.","localSessions.entry":"Continue a local session","localSessions.title":"Local Claude and Codex sessions","localSessions.intro":"Sessions already on this machine. Continuing one opens it in Kiki; its history stays with the engine.","localSessions.sourceAria":"Engine","localSessions.loading":"Reading local sessions…","localSessions.listFailed":"Could not read local sessions: {detail}","localSessions.noEngineTitle":"No engine with local history.","localSessions.noEngineBody":"Claude Code or Codex needs to be registered as an external engine first.","localSessions.emptyTitle":"No local sessions found.","localSessions.missingTitle":"This engine has no history folder yet.","localSessions.emptyBody":"Sessions appear here after the engine has been used on this machine.","localSessions.truncated":"Showing the newest {count}","localSessions.unreadable":"{count} files could not be read","localSessions.branch":"Branched session","localSessions.pickOne":"Choose a session to preview it.","localSessions.previewLoading":"Loading the preview…","localSessions.previewFailed":"Could not load the preview: {detail}","localSessions.previewEmpty":"This session has no readable messages.","localSessions.partial":"Partial preview. The full history stays with the engine.","localSessions.role.user":"You","localSessions.role.assistant":"Assistant","localSessions.role.system":"System","localSessions.block.tool":"Tool call","localSessions.block.image":"Image","localSessions.continue":"Continue in Kiki","localSessions.continuing":"Opening…","localSessions.continueHint":"Nothing is sent until you write the first message.","localSessions.cannotContinue":"This session can be previewed but not continued.","localSessions.resumeDisabled":"Continuing local sessions is turned off on this server.","localSessions.attached":"Opened in Kiki.","localSessions.alreadyAttached":"Opened the Kiki session already linked to it.","localSessions.error.disabled":"This session cannot be continued right now. Refresh the list and try again.","localSessions.error.locked":"Another Kiki window is opening this session. Try again in a moment.","localSessions.error.missing":"This session is no longer on disk. Refresh the list.","localSessions.error.workspace":"Its working folder is no longer available.","localSessions.error.generic":"Could not continue this session: {detail}","localSessions.reason.working_directory_missing":"Its working folder is not recorded.","localSessions.reason.source_identity_mismatch":"The file does not match the session it claims to be.","localSessions.reason.protocol_unsupported":"This engine connection cannot continue sessions.","localSessions.reason.engine_resume_unsupported":"The installed engine does not support continuing sessions.","localSessions.reason.unknown":"This session cannot be continued.","localSessions.warning.transcript_sampled":"Long history: only the beginning and the end are shown.","localSessions.warning.messages_truncated":"Only the latest messages are shown.","localSessions.warning.content_truncated":"Some long messages are shortened.","localSessions.warning.unsupported_content":"Some content types are not shown.","localSessions.warning.invalid_jsonl_record":"Some records could not be read.","localSessions.warning.inherited_history_not_loaded":"History inherited from an earlier session is not included.","localSessions.warning.source_identity_mismatch":"The file does not match the session it claims to be.","localSessions.settingsTitle":"Local sessions","localSessions.browse":"Browse sessions","localSessions.settingsHint":"Browse {engine} sessions on this machine and continue one in Kiki.","sidebar.currentWorkspace":"Current","sidebar.groupCountOf":"{count} of {total}","sidebar.collapseAllGroups":"Collapse all workspaces","sidebar.expandAllGroups":"Expand all workspaces","agentPanel.notes":"Working notes","agentPanel.notes.goal":"Goal","agentPanel.notes.decided":"Decided","agentPanel.notes.rejected":"Ruled out","agentPanel.notes.evidence":"Evidence","agentPanel.notes.files":"Files","agentPanel.notes.next":"Next","agentPanel.notes.open":"Open questions","agentPanel.notes.meta":"Updated in turn {turn} · revision {rev}","agentPanel.notes.empty":"No working notes yet.","agentPanel.notes.loading":"Reading working notes…","agentPanel.notes.unavailable":"Working notes cannot be read right now.","agentPanel.notes.stale":"The latest notes could not be read. Showing the last readable version.","agentPanel.notes.unknown":"Newer notes field: {field}","agentPanel.notes.cleared":"Working notes are empty · revision {rev}","agentPanel.hooks":"Injected rules","agentPanel.hooks.summary":"{count} active","agentPanel.hooks.empty":"No injected rules are active.","agentPanel.hooks.loading":"Reading injected rules…","agentPanel.hooks.unavailable":"This server cannot show injected rules yet.","agentPanel.hooks.loadFailed":"Could not read injected rules","agentPanel.hooks.inactive":"inactive","agentPanel.hooks.steps":"{count} steps counted","agentPanel.hooks.nextDue":"next at step {step}","transcript.marker.reason.notes_directives_budget":"The summary’s task instructions exceed the notes limit. Existing notes are unchanged; the full text remains in the handoff for review.","transcript.marker.reason.handoff_unreviewed":"Earlier input and the handoff still need to be checked against the notes.","transcript.fold.agents.one":"{count} subagent","transcript.fold.agents.other":"{count} subagents","transcript.fold.agentsDone.one":"{count} subagent finished","transcript.fold.agentsDone.other":"{count} subagents finished","transcript.media.label":"Viewed images","transcript.media.count.one":"{count} image","transcript.media.count.other":"{count} images","transcript.media.more":"+{count}","transcript.media.aria":"Images the agent viewed: {names}","transcript.agents.dispatched.one":"Dispatched {count} subagent","transcript.agents.dispatched.other":"Dispatched {count} subagents","transcript.agents.progress":"{done}/{total} done","transcript.agents.open":"Open","transcript.agents.openAria":"Open {name}","transcript.agentEnd.completed":"Completed","transcript.agentEnd.failed":"Failed","transcript.agentEnd.cancelled":"Stopped","transcript.agentEnd.timedOut":"Timed out","transcript.agentEnd.toDispatch":"Dispatch ↑","transcript.agentEnd.toDispatchTitle":"Go to where it was dispatched","transcript.agentEnd.receiptAria":"Receipt from {name}","media.unavailable":"{name} could not be shown","ephemeral.newToggle":"Temporary conversation","ephemeral.newHint":"Not saved to history, search or memory. Deleted when you end it or quit Kiki.","ephemeral.group":"Temporary","ephemeral.badge":"Temporary","ephemeral.strip":"Temporary conversation · deleted when it ends","ephemeral.save":"Save as conversation","ephemeral.saveBusy":"Saving is available once the current turn finishes.","ephemeral.saved":"Saved. It now appears in your conversations.","ephemeral.end":"End","ephemeral.endTitle":"End this temporary conversation?","ephemeral.endBody":"Its messages and files are deleted and cannot be recovered. Running tasks and subagents stop.","ephemeral.endWorktree":"Its worktree {branch} has changes that are not committed.","ephemeral.endWorktreeKeep":"Keep the worktree","ephemeral.endWorktreeRemove":"Delete the worktree too","ephemeral.endConfirm":"End and delete","ephemeral.endFailed":"Could not end the conversation: {detail}","ephemeral.saveFailed":"Could not save the conversation: {detail}","time.durationHours":"{h}h {m}m","time.durationDays":"{d}d {h}h","agentPanel.notes.directives":"User instructions","bot.group":"Bots","persona.chipAria":"Choose an agent or persona","persona.pickerManage":"Manage personas","persona.chipRemove":"Remove persona {name}","persona.greetingFrom":"Opening line from {name}","persona.title":"Personas","persona.new":"New persona","persona.import":"Import persona card","persona.export":"Export persona card","persona.empty":"No personas yet. Create one, or drop in a persona card to import.","persona.name":"Name","persona.id":"Persona ID","persona.label":"Title","persona.job":"Responsibility","persona.description":"Description","persona.profile":"Profile","persona.model":"Model","persona.effort":"Thinking effort","persona.greeting":"Opening line","persona.avatar":"Avatar","persona.homeWorkspace":"Working directory","persona.delivery":"Default delivery","persona.save":"Save","persona.saved":"Applies to new conversations · Rebuild context","persona.rebuild":"Rebuild context","persona.duplicate":"Duplicate persona","persona.archive":"Archive persona","persona.archiveTitle":"Archive “{name}”?","persona.archiveCron":"Archiving pauses her scheduled tasks.","persona.archiveNoRestart":"Unarchiving does not start them again.","persona.unarchiveTitle":"Unarchive “{name}”?","persona.archiveKeeps":"Her conversations, memory and files are kept — she just leaves the sidebar and the roster.","persona.unarchive":"Unarchive","persona.delete":"Delete persona","persona.deleteCron":"Deletes the scheduled tasks under her name.","persona.deleteRooms":"Removes her from her rooms and archives the conversations that are hers alone.","persona.deleteMemory":"Deletes her persona memory; if that step fails it can be retried.","persona.deleteKeeps":"History of ordinary and daily conversations, room logs and project directories all stay.","persona.importPreview":"Import preview","persona.importMemories":"Creates {count} persona memories","persona.importWarning":"The persona description goes into the system prompt. Read it in full before importing.","persona.importConfirm":"Import","persona.includeMemory":"Also import persona memories","persona.memory":"Persona memory","persona.choose":"Choose a persona","persona.none":"No persona","persona.switch":"Switch persona","persona.avatarHint":"PNG, JPG or WebP, up to 20 MB. You frame it next.","persona.nav":"Personas","persona.lede":"A persona decides who talks to you: name, look, temperament and long-term rules. How the work gets done is still up to the profile.","persona.loading":"Loading personas…","persona.loadFailed":"Could not load personas","persona.searchPlaceholder":"Search name, title or responsibility","persona.searchAria":"Search personas","persona.noMatches":"No personas match “{query}”.","persona.showArchived":"Show archived","persona.archivedTag":"Archived","persona.listAria":"Persona list","persona.back":"All personas","persona.detailNone":"Pick a persona to view, or create one.","persona.newTitle":"New persona","persona.idHint":"Used for the directory name and memory paths; cannot be changed after creation.","persona.idInvalid":"Lowercase letters, digits and hyphens only, for example lin-lan.","persona.idTaken":"Another persona already uses this ID.","persona.nameRequired":"Give the persona a name.","persona.descriptionRequired":"Write a few lines: temperament, boundaries, long-term rules.","persona.titlePlaceholder":"For example: release coordinator","persona.jobPlaceholder":"One line about what it is responsible for","persona.descriptionHint":"Goes at the start of the system prompt, replacing the “who I am” section. One-off tasks belong in the message.","persona.greetingHint":"Shown under its name when a new conversation opens; costs no tokens and only enters the context when you reply.","persona.section.identity":"Identity","persona.section.work":"Work","persona.profileDefault":"Default (Kiki)","persona.profileHint":"Tools, permissions and subagents come from here. A persona carries no permissions of its own.","persona.modelFollow":"Follow the profile","persona.effortFollow":"Follow the model","persona.memoryHint":"Its own memory is always readable; when shared, it can also read global memory and the current workspace’s memory.","persona.frozenNotice":"Changes apply to new conversations only; a conversation already underway updates when you open its own “Persona settings” and apply them.","persona.savedToast":"Saved “{name}”. It applies to new conversations.","persona.createdToast":"Created “{name}”.","persona.saveFailed":"Could not save: {detail}","persona.conflict":"This persona changed elsewhere. Reload before saving again.","persona.reload":"Reload","persona.create":"Create persona","persona.startChat":"Start a conversation with it","persona.more":"More actions","persona.duplicatedToast":"Duplicated as “{name}”.","persona.archivedToast":"Archived “{name}”.","persona.unarchivedToast":"Restored “{name}”.","persona.deletedToast":"Deleted “{name}”.","persona.actionFailed":"Action failed: {detail}","persona.deleteTitle":"Delete “{name}”?","persona.deleteIrreversible":"This cannot be undone.","persona.exportAs":"Export as {format}","persona.exportedToast":"Exported {file}","persona.avatarChange":"Change avatar","persona.avatarUpload":"Upload avatar","persona.avatarUploaded":"Avatar updated","persona.avatarTooLarge":"The picture is over 20 MB.","persona.avatarType":"The avatar must be PNG, JPG or WebP.","persona.avatarEditTitle":"Avatar for {name}","persona.avatarFrameAria":"Avatar frame. Drag or use the arrow keys to move the picture, plus and minus to zoom.","persona.avatarFrameHint":"Drag to move · scroll or use the slider to zoom","persona.avatarReading":"Opening the picture…","persona.avatarReadFailed":"This picture could not be opened. Try another PNG, JPG or WebP.","persona.avatarZoom":"Zoom","persona.avatarZoomIn":"Zoom in","persona.avatarZoomOut":"Zoom out","persona.avatarShape":"Shape","persona.avatarShapeSquare":"Square","persona.avatarShapeCircle":"Circle","persona.avatarSave":"Use this avatar","persona.avatarRemove":"Remove avatar","persona.avatarRemoved":"Avatar removed","persona.avatarRemoveTitle":"Remove the avatar for “{name}”?","persona.avatarRemoveBody":"It goes back to showing its initial. You can upload a picture again at any time.","persona.importPick":"Choose a persona card file","persona.importFormats":"Supports CCv3 .png, .json and .charx","persona.importReading":"Reading the persona card…","persona.importFailed":"Could not read this persona card: {detail}","persona.importBody":"Description to import","persona.importGreeting":"Opening line","persona.importExamples":"Example dialogue","persona.importMemoryNone":"No persona memories will be created","persona.importDropped":"These fields are not imported: {fields}","persona.importIdLabel":"Import as ID","persona.importedToast":"Imported “{name}”.","persona.importMemoryPending":"Imported “{name}”; memories are still being written","persona.importChooseOther":"Choose another","persona.headerTitle":"Persona: {name}","persona.memoryGroup":"Persona","persona.memoryScopeAria":"Persona memory","persona.memoryIntro":"{name}’s own memory: your relationship, your preferences, its experience. Other personas cannot see it.","bot.title":"Bots","bot.enable":"Make it a bot","bot.settings":"Bot settings","bot.disabled":"Turn on bot mode in settings first.","bot.hide":"Hide bot","bot.unhide":"Show bot","bot.pin":"Pin bot","bot.unpin":"Unpin","bot.hiddenNotice":"Hiding does not pause scheduled tasks.","bot.open":"Open {name}","bot.enabledToast":"{name} is now a bot","bot.enableFailed":"Could not make it a bot: {detail}","bot.updateFailed":"Bot settings were not saved: {detail}","bot.alreadyBot":"Already a bot","bot.openHome":"Open the bot conversation","bot.section.identity":"Identity","bot.section.work":"Work","bot.section.visibility":"Sidebar","bot.editPersona":"Edit on the Personas page","bot.openMemory":"View persona memory","bot.workspaceDefault":"Bot-only directory","bot.profileDefault":"Default","bot.modelFollow":"Follow the profile","bot.routinesHint":"Scheduled tasks run on the bot’s resident conversation and appear on the Scheduled tasks page.","room.title":"Rooms","room.new":"New room","room.name":"Room name","room.members":"Members","room.memberCountShort":"{count} members","room.memberCount":"Choose 2–6 personas","room.host":"Host","room.setHost":"Make host","room.mute":"Mute","room.unmute":"Unmute","room.everyone":"Everyone","room.workspace":"Workspace","room.budget":"{count} per turn","room.budgetExhausted":"Discussion paused ({count} messages used this turn)","room.continue":"Continue for {count}","room.adjustBudget":"Adjust limit","room.pause":"Pause","room.paused":"Discussion paused","room.resume":"Resume discussion","room.stopAll":"Stop all","room.openProcess":"View process","room.openAllProcesses":"Open every member’s process","room.placeholder":"Message {name}… @ a member to direct the reply; without @ it goes to {host}","room.privateHandoff":"{from} contacted {to} privately","room.usage":"{tokens} tok · {cost}","room.queuedQuestions":"{count} more questions","room.group":"Rooms","room.open":"Open room {name}","room.loadFailed":"Could not load the room","room.notFound":"This room does not exist. It may have been deleted.","room.hostTag":"Host","room.mutedTag":"Muted","room.hostLine":"Host {name}","room.pausedManual":"Discussion paused · New messages wake nobody","room.stopAllTitle":"Stops every member’s current turn right away; finished actions are not rolled back.","room.membersOpen":"View members","room.memberWorking":"Working","room.budgetLabel":"After each of your messages, bots send at most","room.budgetUnit":"messages","room.budgetUsed":"{used}/{limit} used this turn","room.sendFailed":"Message not sent: {detail}","room.actionFailed":"Action failed: {detail}","room.send":"Send","room.mentionListAria":"Members you can @","room.everyoneHint":"Wake every member","room.emptyLog":"No messages in this room yet. Send one to start; without an @ it goes to {host}.","room.you":"You","room.system.continued":"Discussion resumed","room.system.stopped":"Stopped every member’s current turn","room.system.rosterChanged":"Members updated","room.system.hostChanged":"Host is now {name}","room.system.wakeFailed":"Could not wake {name}: {reason}. Check the member’s session or model settings, then send another room message.","room.system.memberModel":"the member’s model","room.system.wakeLoginRequired":"Could not wake {name}: {provider} is not signed in or its credentials expired. Sign in under Settings → Models, or choose an available model in the member’s session, then send another room message.","room.system.wakeConnectionFailed":"Could not wake {name}: cannot connect to {provider}. Check the network and model service, then send another room message.","room.system.wakeSessionUnavailable":"Could not wake {name}: the member’s session is unavailable or archived. Open it to check, or remove and re-add the member.","room.system.wakeWorkspaceUnavailable":"Could not wake {name}: the workspace is unavailable. Check the room’s workspace path and access permissions, then send another room message.","room.namePlaceholder":"For example: 0.31 release","room.membersHint":"Choose 2–6 personas; the first one hosts by default.","room.noPersonas":"No personas yet. Create some on the Personas page first.","room.allPersonasIn":"Every persona is already in this room.","room.nameRequired":"Give the room a name.","room.createFailed":"Room not created: {detail}","room.deleteRoom":"Delete room","room.deleteTitle":"Delete “{name}”?","room.deleteBody":"The room and its message log are deleted. Persona member conversations are archived; thread members stay as they are.","room.menu":"Room actions","room.usageTitle":"Total usage in this room (summed over member conversations)","room.stopFirst":"A member is working. Stop it before changing members or the workspace.","room.membersLocked":"Members cannot change while the discussion is running","room.addMember":"Add member","room.removeMember":"Remove {name}","room.remove":"Remove","room.memberLimit":"A room holds 2 to 6 members","room.budgetSave":"Save limit","room.asking":"Asking you","room.close":"Close the member panel","room.logTruncated":"Showing only the latest {count} messages","room.mentionHint":"↑↓ to choose · Enter to insert · Esc to close","room.usageNone":"No usage yet","room.system.workspaceChanged":"Room workspace changed; members keep their own workspaces and permissions","room.system.renamed":"Room renamed to “{name}”","room.threadTag":"Thread","room.threadBusy":"{name} is busy and will reply after its turn","room.working":"Working: {name}","room.listSeparator":", ","room.threadBusyShort":"Busy · replies after this turn","room.threadIdle":"Idle","room.threadCold":"Not open","room.queueWhenBusy":"Wait while busy","room.queueWhenBusyHint":"While this thread is running, room messages wait until its turn ends instead of interrupting it.","room.openThread":"Open thread","room.leave":"Leave room","room.leaveMember":"Remove {name} from the room","room.addTab.personas":"Personas","room.addTab.threads":"Threads","room.searchThreads":"Search threads","room.searchThreadsPlaceholder":"Title or id","room.noThreads":"No threads match.","room.noThreadsYet":"No other threads can join yet.","room.threadsIncomplete":"Only recent threads were searched.","room.addThread":"Add {name}","room.threadLeft":"{name} left the room","room.threadJoined":"{name} joined the room","room.commsOff":"Thread communication is off. Turn it on in Settings › Sessions to put threads in a room.","room.commsOffShort":"Thread communication is off","room.fromThreads":"Pull into a new room","room.fromThreadsCount":"Pull {count} threads into a new room","room.joinRoom":"Add to room…","room.joinRoomTitle":"Add “{name}” to a room","room.joinRoomNone":"No rooms yet. Pull threads into a new room first.","room.joinRoomFull":"Full","room.joinRoomMember":"Already in","room.withThreads":"Open a room with these threads","room.newFromThreadsTitle":"New room from threads","room.newFromThreadsHint":"Each thread joins as itself, with its own workspace, context and permissions. Nothing is copied.","room.createFromThreads":"Create room","room.selectedThreads":"{count} threads","room.threadsNeeded":"Pick 2–6 threads.","room.subagentBlocked":"Subagents can’t join rooms; add their parent thread.","room.selectionCount":"{count} selected","room.clearSelection":"Clear selection","room.inRoom":"In room {name}","room.joined":"Added to {name}","room.threadSender":"Room {name}","comms.fromRoom":"Room","room.placeholderThreadHost":"Message {name}… @ a member to wake them; without @ it goes to the room host","room.emptyLogThreadHost":"No messages in this room yet. @ a member to wake them; without @ it goes to the room host.","room.threadWorking":"Working","room.threadsHint":"Only top-level threads with thread communication on can join.","message.view":"Messages","message.process":"Process","message.internal":"Internal","message.replyDelivery":"Replies to you","message.messageDelivery":"Sent messages only","message.noReply":"{name} did not reply · View process","message.failed":"Message not sent · View process","message.cancelled":"Message cancelled · View process","message.working":"{name} is working","message.typing":"{name} is writing","message.reads":"Read {count} files","message.commands":"Ran {count} commands","message.subagents":"{count} subagents","message.memories":"Remembered {count}","message.steps":"{count} steps","message.replyTo":"Reply: {text}","message.openProcess":"View in process","message.handoff":"{from} → {to}: {text}","message.placeholder":"Message {name}…","message.openAttachment":"Open","message.thoughts":"Thought {count} times","message.otherSteps":"{count} more steps","message.openHandoff":"Open {name}’s conversation","message.readSoFar":"Read {count} files so far","message.ranSoFar":"Ran {count} commands so far","message.viewSwitchAria":"Timeline view","message.deliveryLabel":"Delivery","message.deliveryMessageHint":"Only what it sends with SendMessage reaches you.","message.deliveryReplyHint":"Its ordinary replies show up for you directly.","message.deliveryNextTurn":"Takes effect next turn","message.deliverySwitchFailed":"Delivery was not switched: {detail}","st.section.shortcuts":"Shortcuts","st.purpose.shortcuts":"Remap the app’s keyboard shortcuts for each platform. Keys that are part of how a control works are listed at the end.","st.shortcuts.title":"App shortcuts","st.shortcuts.intro":"Click a key to record a new one. Saved on the connected server, so every window on it uses the same keys.","st.shortcuts.platform":"Platform","st.shortcuts.platformThis":"{name} (this device)","st.shortcuts.otherPlatform":"You are editing the {name} keys. They apply when Kiki runs on {name}.","st.shortcuts.loading":"Loading shortcuts…","st.shortcuts.loadFailed":"The shipped keys stay active. Reload the page to try again; an older server may not store shortcuts yet.","st.shortcuts.group.composer":"Composer","st.shortcuts.note.anywhere":"Works anywhere, even while typing.","st.shortcuts.note.outsideFields":"Only while focus is outside a text field.","st.shortcuts.custom":"Changed","st.shortcuts.disabled":"Off","st.shortcuts.changeAria":"Change {keys} for {action}","st.shortcuts.add":"Add another key","st.shortcuts.addAria":"Add another key for {action}","st.shortcuts.reset":"Reset","st.shortcuts.resetAria":"Reset {action} to its default key","st.shortcuts.resetAll":"Reset all {name} keys","st.shortcuts.resetAllTitle":"Reset all {name} keys?","st.shortcuts.resetAllBody":"Every changed or turned-off {name} shortcut goes back to its default. Other platforms keep their keys.","st.shortcuts.allDefault":"All keys are the defaults.","st.shortcuts.recording":"Press keys…","st.shortcuts.recordingAria":"Recording a new key. Press the combination, or Esc to cancel.","st.shortcuts.recordHint":"Esc cancels","st.shortcuts.recordHintClear":"Esc cancels · Backspace removes","st.shortcuts.unsupported":"{key} cannot be used. Try another key.","st.shortcuts.conflictUsed":"{keys} is already used by “{action}”. Pick another key, or change that one first.","st.shortcuts.conflictReserved":"{keys} is reserved by the system or the composer. Pick another key.","st.shortcuts.conflictSelf":"{keys} is already on this action.","st.shortcuts.conflictGeneric":"This key clashes with another shortcut. Pick another key.","st.shortcuts.savedConflict":"The saved keys clash with another action. Change or reset one of them.","st.shortcuts.fixedTitle":"Fixed keys","st.shortcuts.fixedHint":"Part of how the composer, menus and dialogs work, so they cannot be remapped. Send and new line follow “Send shortcut” on General.","shortcuts.customize":"Change keys","shortcuts.hintChord":"Esc closes this panel · {keys} opens it anywhere","shortcuts.hintNoChord":"Esc closes this panel","comms.reason.thread_not_found":"Target thread no longer exists","comms.reason.thread_archived":"Target thread is archived","comms.reason.communication_disabled":"Thread communication is disabled","comms.reason.cross_host":"Cross-host delivery is not supported","comms.reason.prompt_rejected":"Target prompt was rejected","comms.reason.session_unavailable":"Target session is unavailable","comms.reason.workspace_unavailable":"Target workspace is unavailable","comms.reason.executor_unavailable":"Target executor is unavailable","comms.reason.cancelled":"Delivery was cancelled","comms.reason.delivery_failed":"Delivery failed","st.desktopLog.title":"Desktop log","st.desktopLog.fileLabel":"Backend log file","st.desktopLog.copy":"Copy path","st.desktopLog.copyAria":"Copy the log file path","st.desktopLog.copied":"Path copied.","st.desktopLog.openFolder":"Open log folder","st.desktopLog.opening":"Opening…","st.desktopLog.openFailed":"Could not open the log folder: {detail}","st.desktopLog.rotation":"Rotates at {size} and keeps {count} older files.","st.desktopLog.levelLabel":"Log level","st.desktopLog.levelHint":"How much the backend writes. Takes effect the next time Kiki starts. Default warn; use debug or trace only while chasing a problem.","st.desktopLog.pending":"The running backend still logs at {current}. {next} applies the next time Kiki starts it.","st.desktopLog.level.fatal":"Only crashes","st.desktopLog.level.error":"Errors","st.desktopLog.level.warn":"Errors and warnings (default)","st.desktopLog.level.info":"Plus lifecycle events","st.desktopLog.level.debug":"Detailed, for troubleshooting","st.desktopLog.level.trace":"Everything, very large files","st.desktopLog.level.silent":"Nothing","st.list.count":"{total}","st.list.countOf":"{shown} of {total}","st.list.all":"All","st.list.filterAria":"Show","st.list.sortAria":"Sort","st.list.sortBy":"Sort","st.list.compact":"Compact rows","st.list.compactTitle":"Compact rows","st.list.comfortableTitle":"Comfortable rows","st.list.bulkAria":"Selected rows","st.list.selected":"{count} selected","st.list.clearSelection":"Clear selection","st.list.clearFilters":"Clear search and filters","st.list.selectRow":"Select {name}","st.list.selectAll":"Select all shown","st.list.sort.recent":"Recent","st.list.sort.name":"Name","st.list.sort.sessions":"Sessions","st.workspaces.filter.pinned":"Pinned","st.workspaces.filter.unused":"No sessions","st.workspaces.group.pinned":"Pinned","st.workspaces.group.recent":"Opened this week","st.workspaces.group.older":"Older","st.workspaces.bulkPin":"Pin","st.workspaces.bulkUnpin":"Unpin","st.workspaces.bulkRemove":"Unregister…","st.workspaces.bulkRemoveTitle":"Unregister {count} workspaces?","st.workspaces.bulkRemoveBody":"They are unregistered from the server. Files on disk stay where they are.","st.workspaces.bulkRemoveConfirm":"Unregister {count} workspaces","st.workspaces.noMatchTitle":"No workspaces match","st.workspaces.searchPlaceholder":"Search by name or path…","st.workspaces.more":"More actions for {name}","st.models.filter.inUse":"In use","st.models.filter.attention":"Needs attention","st.models.filter.reasoning":"Reasoning","st.models.filter.vision":"Vision","st.models.group.inUse":"In use","st.models.inUseAs":"Used for {roles}","st.models.providerAttention":"Connection not working","st.models.providerUnconfigured":"No key set","st.models.group.noProvider":"No connection","st.models.noMatchTitle":"No models match","st.models.searchWide":"Search name, id, connection or capability…","st.models.detailTitle":"Edit model","st.models.openDetail":"Edit {model}","sidebar.roomsLoadFailed":"Could not load rooms","room.renameTitle":"Rename room","st.spaces.search":"Search spaces","st.spaces.searchPlaceholder":"Search name or path…","st.spaces.filter.running":"Running","st.spaces.filter.pending":"Pending","st.spaces.filter.isolated":"Isolated credentials","st.spaces.noMatchTitle":"No spaces match","st.spaces.noMatches":"No spaces match “{query}”.","st.list.sort.order":"Default order","st.notify.search":"Search channels","st.notify.searchPlaceholder":"Search name or type…","st.notify.filter.enabled":"Enabled","st.notify.filter.disabled":"Disabled","st.notify.filter.attention":"Needs attention","st.notify.noMatchTitle":"No channels match","st.notify.noMatches":"No channels match “{query}”.","st.perm.search":"Search rules","st.perm.searchPlaceholder":"Search pattern or reason…","st.perm.noMatchTitle":"No rules match","st.perm.noMatches":"No rules match “{query}”.","st.perm.reorderNarrowed":"Clear the search to reorder rules","st.connections.search":"Search connections","st.connections.searchPlaceholder":"Search name, id or host…","st.connections.filter.attention":"Needs attention","st.connections.noMatchTitle":"No connections match","st.connections.noMatches":"No connections match “{query}”.","st.identity.search":"Search profiles","st.identity.searchPlaceholder":"Search label or id…","st.identity.noMatchTitle":"No profiles match","st.identity.noMatches":"No profiles match “{query}”.","st.nbSearch.providers.search":"Search providers","st.nbSearch.filter.attention":"Needs attention","st.nbSearch.filter.ready":"Ready","st.nbSearch.providers.noMatchTitle":"No providers match","usage.pricing.noMatchTitle":"No models match","cap.skills.noMatchTitle":"No skills match","cap.plugins.noMatchTitle":"No plugins match","st.mcp.search":"Search servers","st.mcp.searchPlaceholder":"Search name or command…","st.mcp.filter.attention":"Needs attention","st.mcp.filter.connected":"Connected","st.mcp.noMatchTitle":"No servers match","st.mcp.noMatches":"No servers match “{query}”.","transcript.moreActions":"More actions","subagent.call.input":"Invocation Input","subagent.call.output":"Invocation Output","subagent.call.details":"Invocation Details","subagent.call.noOutputYet":"Executing, no output recorded yet.","subagent.call.noOutput":"No output was recorded.","subagent.call.loading":"Loading the earlier invocation…","subagent.call.unavailable":"The original invocation is not available in this transcript.","subagent.call.taskId":"Task ID","subagent.call.actualProfile":"Actual Profile","subagent.call.advisories":"Binding Advisories","subagent.call.advisoriesLegacy":"Binding Advisories (historical receipt kept first only, {count} total)","subagent.call.rawAdvisory":"Raw JSON","subagent.call.hideRawAdvisory":"Hide JSON","subagent.call.receiptBody":"Receipt Body","subagent.call.targetAgent":"Target Agent","subagent.call.expandDetails":"Expand invocation details","subagent.call.collapseDetails":"Collapse invocation details","subagent.call.expandPrompt":"Show prompt ({count} chars)","subagent.call.collapsePrompt":"Hide prompt","subagent.call.expandMessage":"Show message ({count} chars)","subagent.call.collapseMessage":"Hide message","usage.governance.realtime":"Live","usage.governance.history":"History","usage.governance.stale":"This view may be out of date · last update {time}","usage.governance.requests":"Model requests","usage.governance.waiting":"Waiting","usage.governance.unlimited":"Unlimited","usage.governance.model":"Model","usage.governance.provider":"Provider","usage.governance.session":"Session","usage.governance.role":"Role","usage.governance.scope":"Scope","usage.governance.target":"Target","usage.governance.cap":"Concurrency","usage.governance.action":"Overflow","usage.governance.global":"All sessions","usage.governance.eachSession":"Each session","usage.governance.children":"Subagent requests only","usage.governance.all":"All models","usage.governance.queue":"Queue","usage.governance.reject":"Reject","usage.governance.badge":"Model requests {active}, waiting {queued}","usage.governance.loading":"Loading live request state…","usage.governance.unavailable":"Live request state unavailable","usage.governance.running":"Running","usage.governance.queued":"Queued","usage.governance.details":"Request details","usage.governance.limitsTitle":"Concurrency limits","usage.governance.byDimension":"By dimension","usage.governance.idleNow":"No model requests are running or queued right now.","usage.governance.waitingTitle":"Waiting now","usage.governance.blockedBy":"held back by {rules}","usage.governance.roleRoot":"Main agents & system","usage.governance.roleSubagent":"Subagents","usage.governance.emptyTitle":"No limit rules yet","usage.governance.emptyBody":"Cap how many model requests may run at once; the extras wait in line or get turned away.","usage.governance.addRule":"Add rule","usage.governance.ruleCount.one":"{count} rule","usage.governance.ruleCount.other":"{count} rules","usage.governance.newRule":"New rule","usage.governance.editRule":"Edit “{name}”","usage.governance.name":"Name","usage.governance.namePlaceholder":"e.g. provider-cap","usage.governance.models":"Models","usage.governance.providers":"Providers","usage.governance.targetHint":"Comma-separated; empty matches everything","usage.governance.waitBudget":"Wait budget (seconds)","usage.governance.summaryWait":"waits up to {seconds}s","usage.governance.saveRule":"Save rule","usage.governance.deleteRule":"Delete rule","usage.governance.deleteTitle":"Delete rule","usage.governance.deleteBody":"Delete “{name}”? Requests it limits can run again right away.","usage.governance.invalidName":"Name the rule something no other rule uses.","usage.governance.invalidCap":"Enter a whole number above zero for the cap.","usage.governance.invalidWait":"Enter a wait budget above zero seconds.","usage.governance.saveFailed":"Couldn’t save the rules","usage.governance.disabled":"Off","usage.governance.toggleRule":"Turn “{name}” on or off","usage.export.nav":"External sync","usage.export.sourceLabel":"Reporting from","usage.export.sourceValue":"{server} · home {home}","usage.export.sourceNote":"Only this server’s own usage is reported. Destinations on another server are managed there.","usage.export.add":"Add destination","usage.export.loading":"Loading external sync…","usage.export.loadFailed":"Could not load external sync","usage.export.unavailable.title":"External sync is off on this server","usage.export.unavailable.body":"This server reports no destinations and sends nothing. Turn on the {flag} experimental flag on the server, then reload.","usage.export.noTransport":"This connection cannot manage external sync. Connect to the Kiki server over HTTP or IPC.","usage.export.readonly.title":"Another instance is responsible here","usage.export.readonly.body":"Another Kiki instance is the export writer for this home, so this list is read-only. Manage it where the data lives.","usage.export.empty.title":"No destinations yet","usage.export.empty.body":"Kiki can send model, token, quality and cost buckets — never conversation content, titles or paths — to vibecafe.ai, to a Kiki usage webhook, or to a script you write.","usage.export.empty.add":"Add destination","usage.export.col.destination":"Destination","usage.export.col.endpoint":"Endpoint","usage.export.col.state":"Status","usage.export.col.timing":"Last / next","usage.export.col.queue":"Pending","usage.export.kind.vibe":"vibecafe.ai","usage.export.kind.webhook":"Kiki webhook","usage.export.kind.script":"Script","usage.export.kindShort.vibe":"vibecafe","usage.export.kindShort.webhook":"webhook","usage.export.kindShort.script":"script","usage.export.neverSent":"Nothing delivered yet","usage.export.nextAt":"next {time}","usage.export.noNext":"no next run","usage.export.schedule.0":"Manual only","usage.export.schedule.5":"Every 5 minutes","usage.export.schedule.15":"Every 15 minutes","usage.export.schedule.30":"Every 30 minutes","usage.export.schedule.60":"Every 60 minutes","usage.export.state.draft":"Not enabled","usage.export.state.disabled":"Paused","usage.export.state.ready":"Active","usage.export.state.needs-auth":"Credential refused","usage.export.state.retrying":"Retrying","usage.export.state.queue-full":"Queue full","usage.export.state.quarantined":"Needs attention","usage.export.state.remote-diverged":"Service differs","usage.export.state.adapter-unavailable":"Unavailable","usage.export.queue.none":"nothing waiting","usage.export.queue.pending":"{count} buckets","usage.export.queue.oldest":"oldest {time}","usage.export.queue.quarantined":"{count} failed","usage.export.detail.endpoint":"Endpoint","usage.export.detail.command":"Command","usage.export.detail.schedule":"Schedule","usage.export.detail.scope":"Scope","usage.export.detail.scopeExcluded":"{count} workspaces excluded","usage.export.detail.ephemeralOn":"Temporary sessions included","usage.export.detail.ephemeralOff":"Temporary sessions stay local","usage.export.detail.credential":"Credential","usage.export.detail.credential.keyring":"System keyring","usage.export.detail.credential.private-file":"Private file on the server","usage.export.detail.credential.none":"None","usage.export.detail.identity":"Local credential identity {fingerprint}","usage.export.detail.identityNote":"The server derives this from your configuration. It identifies this credential locally; it is not a verified account at the service.","usage.export.detail.identityShow":"How this credential is identified","usage.export.detail.consent":"Consent","usage.export.detail.consent.none":"Not agreed yet","usage.export.detail.consent.noneHint":"Preview the exact payload and agree once before any usage leaves this machine.","usage.export.detail.consent.changed":"The saved configuration no longer matches what you agreed to, so sending has stopped. Preview again and agree to continue.","usage.export.detail.consent.granted":"Agreed for this configuration","usage.export.detail.quality":"Bucket quality","usage.export.detail.scanComplete":"Local scan complete","usage.export.detail.scanRunning":"Local scan still building","usage.export.detail.scanFailed":"Local scan failed: {reason}","usage.export.action.sync":"Send now","usage.export.action.test":"Test connection","usage.export.action.pause":"Pause","usage.export.action.resume":"Resume","usage.export.action.preview":"Preview payload","usage.export.action.retry":"Retry failed","usage.export.action.backfill":"Send history","usage.export.action.rebuild":"Verify and rebuild","usage.export.action.diagnostics":"Download diagnostics","usage.export.action.exportLocal":"Download pending buckets","usage.export.action.clearQueue":"Clear pending queue","usage.export.action.withdraw":"Withdraw from service","usage.export.action.edit":"Edit","usage.export.action.remove":"Remove","usage.export.busy.working":"Working…","usage.export.confirm.remove.title":"Remove “{name}”","usage.export.confirm.remove.body":"Kiki stops sending and deletes this destination’s server-side configuration and credential. Nothing is deleted at the service.","usage.export.confirm.remove.pending":"{count} unsent buckets will be discarded. They stay in your local usage history and are not re-sent.","usage.export.confirm.remove.clean":"No unsent data is waiting, so only local configuration is removed.","usage.export.confirm.remove.confirm":"Remove destination","usage.export.confirm.clearQueue.title":"Clear the pending queue","usage.export.confirm.clearQueue.body":"Drops {count} unsent buckets for “{name}”. They stay in your local usage history and are not re-sent, so the service will keep whatever it already has.","usage.export.confirm.clearQueue.confirm":"Clear queue","usage.export.confirm.withdraw.title":"Withdraw from {name}","usage.export.confirm.withdraw.body":"Asks the service to delete the buckets Kiki already delivered for this destination. Your local usage history is untouched.","usage.export.confirm.withdraw.unsupported":"This destination kind cannot delete what it already delivered, so withdrawal is not offered.","usage.export.confirm.withdraw.confirm":"Withdraw","usage.export.confirm.rebuild.title":"Verify and rebuild","usage.export.confirm.rebuild.body":"Re-reads every source file instead of trusting the scan checkpoints, then reconciles the result with what was delivered. This is slow and does not delete anything at the service.","usage.export.confirm.rebuild.confirm":"Rebuild","usage.export.diagnosticsHint":"A content-free summary — versions, quality, queue and receipt counts — written to your downloads. Kiki never uploads it.","usage.export.confirm.remove.discard":"Remove and discard {count} buckets","usage.export.capacity.title":"Pending data limit","usage.export.capacity.value":"{used} of {limit}","usage.export.capacity.warning":"Almost at the limit","usage.export.capacity.change":"Set limit","usage.export.capacity.invalid":"Enter a whole number of bytes above zero.","usage.export.recover.needs-auth":"The service refused the stored credential. Replace the key, test the connection, then resume.","usage.export.recover.queue-full":"The pending limit was reached, so sending stopped and nothing was dropped. Send now, raise the limit, or clear the queue deliberately.","usage.export.recover.retrying":"The last attempt failed and Kiki is retrying with backoff. Failures never touch your model requests or sessions.","usage.export.recover.quarantined":"These buckets failed in a way that retrying alone may not fix. Retry re-sends them; downloading them shows exactly what is pending.","usage.export.recover.remote-diverged":"The service holds a different value for these buckets and does not accept a lower revision, so Kiki stopped retrying them. Review the pending payload, or verify and rebuild.","usage.export.recover.adapter-unavailable":"This destination kind is not available in this build, so nothing is sent.","usage.export.recover.consent":"The configuration changed after you agreed. Preview again and agree to resume.","usage.export.category.adapter_unavailable":"This destination kind is not available in this build.","usage.export.category.network":"The service could not be reached.","usage.export.category.http_auth":"The service rejected the credential.","usage.export.category.http_rate_limited":"The service asked Kiki to slow down; it will retry after that window.","usage.export.category.http_too_large":"The batch was too large for the service; Kiki is splitting batches and retrying.","usage.export.category.invalid_protocol":"The service answered in a shape this destination does not accept.","usage.export.category.partial_receipt":"Only part of the batch was confirmed; the rest stays queued.","usage.export.category.remote_diverged":"The service keeps a different value for these buckets and refuses a lower revision.","usage.export.category.cached_only_unsupported":"The service refuses a bucket whose only input is cached reads, which this protocol cannot express.","usage.export.category.vibe_partial_receipt":"vibecafe.ai confirmed part of the batch and dropped or protected the rest.","usage.export.category.vibe_protected":"vibecafe.ai kept a larger existing value for a bucket instead of this one.","usage.export.category.vibe_unknown_source":"vibecafe.ai did not recognize the source name for a bucket.","usage.export.category.vibe_unknown_model":"vibecafe.ai did not recognize a model name.","usage.export.category.vibe_implausible":"vibecafe.ai judged a bucket implausible and did not apply it.","usage.export.category.script_timeout":"The command did not finish inside its timeout.","usage.export.category.script_output_limit":"The command wrote more output than its limit allows.","usage.export.category.script_spawn_failed":"The command could not start.","usage.export.category.script_nonzero_exit":"The command exited with a failure status.","usage.export.category.script_invalid_receipt":"The command’s output was not a valid receipt.","usage.export.category.script_protocol_error":"The command answered outside the protocol Kiki expects.","usage.export.category.generic":"The last attempt failed.","usage.export.category.scan_failed":"The local usage scan failed.","usage.export.category.scan-incomplete":"The local usage scan did not finish, so no complete snapshot was published.","usage.export.category.identity-change-requires-new-destination":"This credential or endpoint cannot be proven to be the same identity, and data was already delivered. Add a new destination instead of repointing this one.","usage.export.category.consent-preview-changed":"The payload changed since the preview you agreed to. Preview again.","usage.export.category.destination-not-found":"This destination no longer exists on the server.","usage.export.category.export-queue-full":"The pending limit was reached, so nothing new was queued.","usage.export.category.export-writer-unavailable":"Another Kiki instance owns exporting for this home right now.","usage.export.category.invalid-usage-export-input":"The server rejected these values.","usage.export.category.usage-export-operation-failed":"The server refused the operation.","usage.export.form.addTitle":"Add a destination","usage.export.form.editTitle":"Edit “{name}”","usage.export.form.description":"Nothing is sent until you preview the payload and agree once. A draft sends no usage.","usage.export.form.kind":"Destination kind","usage.export.form.kind.vibeHint":"Sends buckets to vibecafe.ai with a bearer key.","usage.export.form.kind.webhookHint":"Sends versioned buckets to your own receiver, with per-bucket replacement and deletion.","usage.export.form.kind.scriptHint":"Runs your command with the content-free batch on stdin and reads a receipt from its output.","usage.export.form.name":"Name","usage.export.form.namePlaceholder":"vibecafe personal","usage.export.form.endpoint":"Endpoint URL","usage.export.form.endpointPlaceholder":"https://usage.example.com/ingest","usage.export.form.endpointHint":"Fixed HTTPS origin. A redirect to another origin, credentials in the URL, or a key in the query string is refused.","usage.export.form.auth":"Authentication","usage.export.form.auth.none":"No key","usage.export.form.auth.bearer":"Bearer key","usage.export.form.auth.hmac":"HMAC signature","usage.export.form.secret":"Key","usage.export.form.secretPlaceholder":"Paste the key once — it is stored on the server","usage.export.form.secretKeep":"Leave empty to keep the stored key.","usage.export.form.secretNever":"The key is never written to this browser’s storage and never shown again after you save it.","usage.export.form.storage":"Store as","usage.export.form.storage.keyring":"System keyring","usage.export.form.storage.file":"Private file on the server","usage.export.form.storage.fileAck":"I understand the server keeps this key in a private file limited to my user, without encryption at rest.","usage.export.form.storage.fileAckRequired":"Confirm how the key is stored before saving.","usage.export.form.gzip":"Compress batches (gzip)","usage.export.form.command":"Command","usage.export.form.commandPlaceholder":"my-usage-receiver --json","usage.export.form.commandHint":"Runs as your OS user with your ordinary permissions: it may read files or use the network on its own. Kiki writes only the content-free batch to its stdin and reads the receipt from its output. This is not a sandbox.","usage.export.form.commandApproval":"Saving binds the agreed command: editing it later asks for a fresh preview and consent.","usage.export.form.advanced":"Advanced","usage.export.form.timeout":"Timeout (seconds)","usage.export.form.outputLimit":"Output limit (KiB)","usage.export.form.timeoutInvalid":"Enter a timeout between 0.1 and 60 seconds.","usage.export.form.outputLimitInvalid":"Enter an output limit between 1 and 1024 KiB.","usage.export.form.privateEndpoint":"Allow one private endpoint","usage.export.form.privateHost":"Certificate host","usage.export.form.privateIp":"IP address","usage.export.form.privatePort":"Port","usage.export.form.privateProtocol":"Protocol","usage.export.form.privateHint":"Approves exactly this host, address, port and protocol — not all private networks. Loopback, link-local and cloud metadata addresses stay refused.","usage.export.form.schedule":"How often","usage.export.form.historyFrom":"History starts at","usage.export.form.historyHint":"Any moment is rounded down to the UTC half-hour boundary containing it. Buckets recorded later are added as they happen.","usage.export.form.historyInvalid":"Enter a date and time.","usage.export.form.excluded":"Workspaces to exclude","usage.export.form.excludedHint":"Excluded workspaces stay out of the payload. The list itself is never uploaded.","usage.export.form.ephemeral":"Include temporary sessions","usage.export.form.ephemeralHint":"Off by default, so temporary sessions keep even their anonymised counts local.","usage.export.form.saved":"Draft saved. Nothing is sent until you preview the payload and agree.","usage.export.form.test":"Save and test","usage.export.form.testing":"Testing…","usage.export.form.testDelivered":"The service accepted a protocol handshake. No usage was sent.","usage.export.form.testRetry":"The handshake did not complete. The endpoint or the credential is the likely cause.","usage.export.form.testNeedsAuth":"The service refused the credential.","usage.export.form.testTooLarge":"The service rejected the handshake as too large.","usage.export.form.testInvalid":"The service answered in a shape this destination does not accept.","usage.export.form.testDiverged":"The service already holds different data for this stream.","usage.export.form.preview":"Save and preview","usage.export.form.previewing":"Building the preview…","usage.export.form.previewStale":"The configuration changed after this preview, so it no longer describes what would be sent. Preview again.","usage.export.form.save":"Save draft","usage.export.form.saving":"Saving…","usage.export.form.invalidName":"Give the destination a name.","usage.export.form.invalidEndpoint":"Enter a full https:// URL.","usage.export.form.invalidCommand":"Enter the command to run.","usage.export.form.invalidPrivateIp":"Enter an IP address.","usage.export.form.invalidPrivatePort":"Enter a port between 1 and 65535.","usage.export.form.invalidPrivateHost":"Enter the host name that certificate verification uses.","usage.export.preview.title":"What would be sent","usage.export.preview.bindingShow":"Show the consent binding hash","usage.export.preview.bindingNote":"The consent is bound to this exact payload. Changing the endpoint, the credential identity or the range needs a new preview.","usage.export.preview.count":"{count} buckets","usage.export.preview.complete":"The local scan is complete, so this is a whole snapshot.","usage.export.preview.incomplete":"The local scan has not finished, so this preview may be partial. Kiki publishes a complete snapshot before sending.","usage.export.preview.invalid":"{count} unreadable records are reported and left out.","usage.export.preview.quality":"{known} measured · {missing} missing · {legacy} legacy zero","usage.export.preview.mapping":"{count} model names are not publicly recognized; the service sees destination-specific opaque ids instead.","usage.export.preview.price":"{count} records have no local price, so their cost is sent as unknown — never as zero.","usage.export.preview.sample":"Field sample","usage.export.preview.sampleNote":"One real bucket from this payload, exactly as it would be serialized.","usage.export.preview.showJson":"Show the JSON","usage.export.preview.hideJson":"Hide the JSON","usage.export.preview.items":"Showing {shown} of {total} buckets","usage.export.preview.empty":"No buckets match this scope yet, so enabling would send nothing until usage is recorded.","usage.export.preview.serviceText":"Service contract text","usage.export.consent.summary":"Enabling authorizes Kiki to send these buckets to this destination automatically, without asking each time.","usage.export.consent.fact.noContent":"Only the model, the UTC half-hour, the four token counts, quality and cost go out — never a prompt, answer, title, workspace name or path.","usage.export.consent.fact.timing":"The service can see your IP address and the rhythm of your usage.","usage.export.consent.fact.identity":"A model name Kiki cannot recognise becomes a destination-specific opaque id, so it cannot be mapped back to your files.","usage.export.consent.fact.background":"Sending runs while the Kiki backend is alive. When it exits, sending pauses and catches up on the next start.","usage.export.consent.fact.reobtain":"Widening the range, changing the endpoint, or a credential change that cannot be proven to be the same identity asks for fresh consent. Shrinking the range or changing the interval does not.","usage.export.consent.changed":"The payload changed while the destination was being saved, so the consent you just read no longer applies. The preview below is the current one; agree again to enable.","usage.export.consent.enable":"Agree and enable","usage.export.consent.enabling":"Enabling…","usage.export.vibe.caveat":"vibecafe.ai is told the source is Kimi Code for now, and its total excludes cached input — so its number will not equal Kiki’s.","usage.export.vibe.detail":"Cache creation time-to-live cannot be expressed in this protocol, so creation tokens are folded into input and no 5-minute or 1-hour split is invented. vibecafe.ai prices with its own model list, which can differ from Kiki’s local estimate. Only buckets are sent: no sessions, no activity duration.","usage.export.handoff.title":"Old collector handoff","usage.export.handoff.collector":"Old collector","usage.export.handoff.intro":"A local vibe-usage collector may already report this home to the same account. A handoff splits the timeline at one future boundary instead of replaying anything: the collector keeps everything before it, Kiki everything from it onward.","usage.export.handoff.cutoff":"Cut-over boundary (UTC)","usage.export.handoff.cutoffHint":"A future UTC half-hour boundary. No bucket is reported twice and none is left unowned.","usage.export.handoff.cutoffInvalid":"Enter a future date and time on a UTC half-hour boundary.","usage.export.handoff.phase.prepared":"Handoff arranged","usage.export.handoff.phase.prepared.body":"The boundary is recorded and neither side has moved: the collector still covers everything before it, and Kiki has not started reporting.","usage.export.handoff.phase.armed":"Waiting for the first confirmations","usage.export.handoff.phase.armed.body":"Both sides are ready at the boundary. Kiki takes over from it and queues what it cannot send while offline. This is not a successful sync yet.","usage.export.handoff.phase.awaiting-native":"Waiting for Kiki’s first receipt","usage.export.handoff.phase.awaiting-native.body":"The collector’s final receipt is in. Kiki’s first receipt has not arrived, so the handoff is not complete and the boundary does not move.","usage.export.handoff.phase.completed":"Handoff complete","usage.export.handoff.phase.completed.body":"The collector reported its last bucket before the boundary, and Kiki’s own receipt confirms the first bucket from it.","usage.export.handoff.phase.rollback-prepared":"Handback arranged","usage.export.handoff.phase.rollback-prepared.body":"A later boundary was chosen to hand coverage back. Records between the two boundaries stay with Kiki until that takes effect.","usage.export.handoff.namespace":"Reporting namespace","usage.export.handoff.legacyReceipt":"Old collector: {count} buckets, confirmed {time}","usage.export.handoff.noLegacyReceipt":"No final receipt from the old collector yet.","usage.export.handoff.nativeReceipt":"Kiki: {count} buckets confirmed","usage.export.handoff.noNativeReceipt":"No Kiki receipt yet.","usage.export.handoff.notArranged":"No handoff has been arranged for this destination.","usage.export.handoff.collectorFile":"Collector file","usage.export.handoff.collectorPlaceholder":"The config file your collector reads","usage.export.handoff.effects":"Agreeing once does both of these at the boundary:","usage.export.handoff.effect.collector":"The collector file you picked stops covering this Kiki home from the boundary onward.","usage.export.handoff.effect.native":"Kiki starts covering this home from the boundary onward and queues anything it cannot send while offline.","usage.export.handoff.safety":"Kiki does not rewrite the collector’s state file, read its key, or stop its service.","usage.export.handoff.step.plan":"recording the boundary","usage.export.handoff.step.test":"handshaking the destination","usage.export.handoff.step.preview":"fingerprinting the payload","usage.export.handoff.step.arm":"arming the handoff","usage.export.handoff.step.refresh":"reading the receipts","usage.export.handoff.step.rollback":"handing coverage back","usage.export.handoff.stepFailed":"The handoff stopped while {step}.","usage.export.handoff.armProgress":"Working: {step}.","usage.export.handoff.armRequirements":"Arming reads the collector file’s entry for this home and checks its boundary, namespace, destination endpoint and key fingerprint. If they disagree the handoff is refused rather than reported as done.","usage.export.handoff.freshOnly":"A handoff starts from a new vibecafe destination that has delivered nothing yet, so only one reporter ever covers a home.","usage.export.handoff.refresh":"Check for receipts","usage.export.handoff.rollback":"Hand coverage back","usage.export.handoff.rollbackHint":"Chooses a later boundary and gives the collector back the range from it onward. Records before the current boundary keep their owner.","usage.export.handoff.rollbackRun":"Hand back","usage.export.category.receipt":"A per-bucket receipt for this destination was not accepted.","usage.export.category.queue-explicitly-cleared":"The pending queue was cleared on purpose, so this destination stopped sending.","usage.export.category.handoff-recovery-needs-new-cutoff":"The boundary passed before the handoff could be activated. The old collector still covers everything; a new future boundary is needed.","usage.export.handoff.arm":"Agree and hand over","usage.export.handoff.arming":"Handing over…","usage.export.handoff.expired":"The boundary passed before both sides were ready, so Kiki has not taken over. The old collector still covers everything and no records were lost. Choose a new future boundary.","usage.export.handoff.fileRequired":"Pick the collector file this handoff changes.","usage.export.handoff.untouched":"The old shared hostname keeps its history: nothing is replayed into the new namespace and nothing is deleted.","usage.export.handoff.sameAccount":"The handoff compares the destination with the collector’s own recorded configuration. If they disagree, Kiki asks you to check the settings instead of claiming the same account.","usage.export.handoff.mismatch":"The collector’s recorded target does not match this destination. Check the collector’s configuration; Kiki will not report the same account as proven.","usage.export.handoff.technicalShow":"How the collector and Kiki are matched","composer.ssh.sessionHosts":"Session SSH","composer.ssh.draftHosts":"SSH to join","composer.ssh.draftHint":"Selected hosts join the session before its first message, then stay until removed. Adding a host does not connect it.","composer.ssh.sessionHint":"These hosts belong to this session and stay until removed. Adding a host does not connect it.","st.promptIdentity.common":"Common content","st.promptIdentity.main":"Main agent","st.promptIdentity.independent":"Externally delegated agent","st.promptIdentity.mode.same":"Use common","st.promptIdentity.mode.off":"Do not use","st.promptIdentity.mode.custom":"Set separately","st.promptIdentity.customHint":"Uses only the content below, without inheriting common settings.","st.promptIdentity.offHint":"This declaration adds no content for this agent.","st.promptIdentity.pathsPlaceholder":"One relative file path per line","st.promptIdentity.overlay":"Model prompt files","st.promptIdentity.overlayMode":"Combine with system instructions","st.promptIdentity.overlayMode.default":"Append (default)","st.promptIdentity.overlayMode.append":"Append","st.promptIdentity.overlayMode.prepend":"Prepend","st.promptIdentity.overlayMode.wrap":"Wrap","st.promptIdentity.overlayMode.persona":"Replace persona","st.promptIdentity.overlayMode.replace":"Replace base instructions","st.promptIdentity.timing":"Per-turn reminder and request anchor","st.promptIdentity.steering":"Per-turn reminder files","st.promptIdentity.anchor":"Request anchor files","st.promptIdentity.anchorSteps":"Anchor request steps","st.promptIdentity.anchorScope":"Anchor time window","st.promptIdentity.anchorScope.default":"Start of session (default)","st.promptIdentity.anchorScope.session":"Start of session","st.promptIdentity.anchorScope.turn":"Start of every turn","st.promptIdentity.bodyMode":"Combine with profile instructions","st.promptIdentity.body":"Model-specific instructions","st.promptIdentity.noBody":"No model-specific instructions","st.promptIdentity.bodyTitle":"Model-specific instructions","st.promptIdentity.fieldsTitle":"Field overrides","st.promptIdentity.cognitionTitle":"Model prompts","st.promptIdentity.raw":"Edit JSON","st.promptIdentity.problem.emptyBranch":"Add content for the separate setting, or choose Do not use.","st.promptIdentity.problem.missingCommon":"Explicit sharing is set, but common content is empty. Add content or choose Restore default sharing.","st.promptIdentity.clearExplicitSame":"Restore default sharing","st.promptIdentity.problem.fieldName":"Use a dot-separated lowercase field id, such as system.shared.","st.promptIdentity.problem.duplicateField":"Each field id can appear only once in this group.","st.promptIdentity.problem.anchorSteps":"Enter a whole number of request steps, at least 1.","st.promptIdentity.problem.promptPair":"Choose how to combine the instructions and enter their content.","st.usagePolicy.shared":"Shared","st.usagePolicy.sharedValues":"Shared values","st.usagePolicy.main":"Main agent","st.usagePolicy.scopeAria":"Who these settings apply to","st.usagePolicy.sharedHint":"The defaults: anywhere nothing is set separately uses these, subagents included.","st.usagePolicy.mainHint":"Only the fields set here differ. Everything else keeps the shared value; clearing a field returns it to shared.","st.usagePolicy.independentHint":"Only the fields set here differ for externally delegated agents. Everything else keeps the shared value.","st.usagePolicy.thinkingEffort":"Default thinking effort","st.usagePolicy.serviceTier":"Service tier","st.usagePolicy.autoCompact":"Automatic compaction point","st.usagePolicy.contextBudget":"Context budget","st.usagePolicy.maxCompletionTokens":"Max generated tokens","st.usagePolicy.adaptiveThinking":"Adaptive thinking","st.usagePolicy.inherit":"Use shared","st.usagePolicy.off":"Off","st.usagePolicy.omit":"Not sent","st.usagePolicy.issueCount":"Use a whole number of tokens, 1 or more.","st.usagePolicy.issueTier":"Choose one of the listed service tiers.","st.usagePolicy.restoreInherit":"Use shared again","st.usagePolicy.differences":"{count} differences from shared","st.usagePolicy.differencesOne":"1 difference from shared","st.usagePolicy.noDifferences":"Same as shared","st.usagePolicy.effective":"Effective for the main agent","st.usagePolicy.unset":"Not set","st.usagePolicy.inheritSharedPoint":"Uses the shared value","st.usagePolicy.capsHelp":"Context budget and max generated tokens stay capped by the lower of this model and any profile, so a main-agent value can only tighten them.","agentPanel.prompt.title":"Effective prompts","agentPanel.prompt.unavailable":"The bound prompts for this agent are unavailable.","agentPanel.prompt.notReported":"This server has not reported prompt details.","agentPanel.prompt.identity.main":"Main agent","agentPanel.prompt.identity.sub":"Subagent","agentPanel.prompt.identity.independent":"Externally delegated agent","agentPanel.prompt.bindingRevision":"Bound revision","agentPanel.prompt.channel.system":"System instructions","agentPanel.prompt.channel.tool":"Tool descriptions","agentPanel.prompt.channel.steering":"Per-turn user reminder","agentPanel.prompt.channel.anchor":"Request anchor","agentPanel.prompt.state.effective":"Effective","agentPanel.prompt.state.inactive":"Not applied","agentPanel.prompt.state.shadowed":"Replaced","agentPanel.prompt.state.unsupported":"Not supported","agentPanel.prompt.selection.common":"Uses common content","agentPanel.prompt.selection.main":"Uses separate main-agent content","agentPanel.prompt.selection.independent":"Uses separate external-parent content","agentPanel.prompt.selection.off":"Turned off for this identity","agentPanel.prompt.sources":"Sources in application order","agentPanel.prompt.noSource":"No source location reported.","agentPanel.prompt.request":"Latest request evidence","agentPanel.prompt.noRequest":"No request evidence has been recorded for this agent.","agentPanel.prompt.anchorApplied":"The anchor replaced the system instructions for this request.","agentPanel.prompt.anchorNotApplied":"The anchor did not replace the system instructions for this request.","agentPanel.prompt.requestAt":"Recorded at","agentPanel.prompt.step":"Turn step","agentPanel.prompt.attempt":"Attempt","agentPanel.prompt.systemHash":"Actual system hash","agentPanel.prompt.toolsHash":"Actual tools hash","agentPanel.prompt.cognitionRevision":"Model prompt revision","agentPanel.prompt.diskRevision":"Disk revision","agentPanel.prompt.diskChanged":"Saved settings differ from this binding. They apply at the next binding or context rebuild.","agentPanel.prompt.lease.preserve":"The caller keeps the role’s model-specific prompts; caller entries apply afterwards.","agentPanel.prompt.lease.replace":"The caller replaces the role’s model-specific prompts.","agentPanel.prompt.anchorUnknown":"This request did not record whether the anchor was applied.","agentPanel.prompt.anchorSteps":"First {count} request steps","agentPanel.prompt.files.title":"Prompt files","agentPanel.prompt.files.check":"Check all branches","agentPanel.prompt.files.checking":"Checking…","agentPanel.prompt.files.checkingHint":"Checking common, main-agent and external-parent files.","agentPanel.prompt.files.notReported":"This response did not include file-check results.","agentPanel.prompt.files.empty":"There are no prompt files to check.","agentPanel.prompt.files.summary":"Files checked: {count} · Issues: {errors}","agentPanel.prompt.files.ok":"Passed","agentPanel.prompt.files.error":"Failed","st.profiles.problem.promptOverrides":"Check the prompt settings before saving.","st.promptIdentity.leaseTitle":"Role model prompts","st.promptIdentity.leasePreserve":"Keep (default)","st.promptIdentity.leaseReplace":"Replace","persona.groupTitle":"Personas","persona.dailyTitle":"Daily conversation","persona.dailyIntro":"Fixed daily conversation with {name}","persona.dailyBadge":"Daily","persona.dailyLoading":"Opening the daily conversation…","persona.dailyLoadFailed":"Could not open the daily conversation: {detail}","persona.dailyMissing":"This persona is gone or archived.","persona.dailyStartFirst":"Start the first daily conversation","persona.searchConversations":"Search conversations…","persona.openDaily":"Talk with {name}","persona.openSwitcherAria":"Switch conversations for {name}","persona.switcherAria":"Conversations of {name}","persona.settingsTitle":"Persona settings","persona.newTopic":"New conversation","persona.allConversations":"All conversations","persona.noConversations":"No matching conversations","persona.unreadCountTitle":"{count} unread messages","persona.setAsDaily":"Set as daily conversation","persona.confirmSetDailyTitle":"Change daily conversation entrance","persona.confirmSetDaily":"Change entrance","persona.confirmSetDailyBody":"Change {name}’s daily conversation to “{title}”?","persona.confirmSetDailyNote":"Messages and scheduled deliveries for @{name} go to this conversation from now on; the former daily conversation is kept in full.","persona.conversationsLoading":"Reading conversations…","persona.roomSeat":"Room conversation","persona.conversationsLoadFailed":"Could not read the conversations: {detail}","persona.conversationsUnavailable":"This connection has no persona API.","persona.conversationsNone":"No conversations yet.","persona.conversationsShown":"{count} shown","persona.dailyChangedToast":"Changed {name}’s daily conversation to the selected conversation","persona.dailyChangeFailed":"Failed to change daily conversation: {detail}","persona.filterWorkspace":"Filter workspaces","persona.viewModeAria":"View mode","persona.tabConversations":"All conversations","persona.tabSettings":"Persona settings","persona.workspaceAuto":"Auto · {name}’s workspace","persona.homeWorkspaceHint":"New conversations start in this workspace by default. When omitted, uses a dedicated directory automatically.","persona.deliveryHint":"Direct reply speaks inline; message mode delivers only via SendMessage tool.","persona.deliveryReply":"Direct reply (default)","persona.deliveryMessage":"Message mode","persona.noCronTasks":"No scheduled tasks assigned to this persona yet","persona.menu.conversations":"All conversations","persona.menu.settings":"Persona settings","persona.menu.memory":"Persona memory","persona.section.visibility":"Visibility","persona.section.memory":"Memory","persona.section.tasks":"Tasks and connections","persona.pin":"Pin","persona.pinHint":"Pinned personas lead the sidebar and the roster.","persona.hide":"Hide from the sidebar","persona.hideHint":"Hidden personas leave the sidebar group; they stay findable on the personas page.","persona.visibilityFailed":"Could not change it: {detail}","persona.memoryOpen":"Open her memory","persona.homeWorkspaceAuto":"Automatic (dedicated directory)","persona.homeWorkspacePath":"Use this path","persona.advanced":"More persona fields","persona.greetings":"Alternate greetings","persona.greetingsHint":"One per line; new conversations rotate through them.","persona.roomGreeting":"Room greeting","persona.tags":"Tags","persona.notes":"Notes","persona.tasks.add":"New scheduled task","persona.tasks.addHint":"Tell her the time and the work in her conversation; she creates the task.","persona.tasks.empty":"{name} has no scheduled tasks yet.","persona.tasks.scopeFailed":"Could not read her conversations, so task ownership cannot be decided.","persona.tasks.scopeTruncated":"Read only the most recent conversations; older ones may hold tasks, so check the scheduled-tasks page.","persona.tasks.actionFailed":"That did not go through: {detail}","persona.rooms.title":"Rooms","persona.rooms.empty":"{name} is not in any room yet.","persona.rooms.loading":"Reading rooms…","persona.binding.section":"Persona settings","persona.binding.menu":"This conversation’s persona settings","persona.binding.loading":"Reading the persona version this conversation uses…","persona.binding.failed":"Could not read the persona version this conversation is bound to.","persona.binding.bound":"Bound revision","persona.binding.latest":"Latest revision","persona.binding.current":"This conversation uses the persona as it is now.","persona.binding.apply":"Apply latest persona settings","persona.binding.restore":"Restore persona defaults","persona.binding.idleHint":"Applying needs an idle conversation; while it is running, stop or cancel it and try again.","persona.binding.state.update":"Update available","persona.binding.state.overrides":"Overridden here","persona.binding.state.current":"Up to date","persona.binding.overrides":"Overridden in this conversation:","persona.binding.appliedToast":"Applied the persona’s latest settings.","persona.binding.restoredToast":"Restored the persona defaults.","persona.binding.applyFailed":"Could not apply them: {detail}","persona.binding.restoreFailed":"Could not restore them: {detail}","persona.binding.restoreTitle":"Restore persona defaults?","persona.binding.restoreConsequence":"This conversation starts using the persona’s current settings.","persona.binding.restoreOverrides":"Also clears this conversation’s own overrides: {fields}.","transcript.modelSwitch.pending":"Will switch to {to} when idle","transcript.modelSwitch.preparing.compact":"{from} is summarizing the conversation…","transcript.modelSwitch.preparing.fresh":"Preparing the new context…","transcript.modelSwitch.preparing.direct":"Switching to {to}…","transcript.modelSwitch.done":"Switched to {to}","transcript.modelSwitch.done.direct":"Kept the current context","transcript.modelSwitch.done.compact":"{from} summarized the conversation","transcript.modelSwitch.done.compactNone":"Nothing to summarize; handed over directly","transcript.modelSwitch.done.fresh":"Continuing with a fresh context","transcript.modelSwitch.done.sameModelFresh":"Started a new context","transcript.modelSwitch.done.sameModelFreshHint":"Task progress is preserved","transcript.modelSwitch.failed":"Couldn’t switch to {to}","transcript.modelSwitch.failed.compact":"{from} couldn’t produce the summary","transcript.modelSwitch.cancelled":"Cancelled the switch to {to}","st.modelSwitch.title":"Model switching","st.modelSwitch.defaultMode":"Default switch mode","st.modelSwitch.defaultModeHint":"Used when no exception rule matches the model you switch to.","st.modelSwitch.mode.direct":"Direct","st.modelSwitch.mode.compact":"Summarize first","st.modelSwitch.mode.fresh":"Fresh context","st.modelSwitch.confirm":"Ask before switching","st.modelSwitch.confirmHint":"Off: a matching rule or the default mode runs straight away. You can still reopen the choice from the model menu.","st.modelSwitch.rulesTitle":"Exception rules","st.modelSwitch.rulesHint":"First match wins, in this order. Model IDs match exactly unless you use * or ?; a side left empty matches any model.","st.modelSwitch.ruleAdd":"Add rule","st.modelSwitch.ruleEmpty":"No exception rules — every switch follows the default mode.","st.modelSwitch.ruleAny":"Any model","st.modelSwitch.ruleFrom":"From models","st.modelSwitch.ruleTo":"To models","st.modelSwitch.rulePatternsHint":"Canonical model IDs separated by commas, e.g. example/fast-*","st.modelSwitch.ruleMode":"Mode","st.modelSwitch.ruleAsk":"Ask","st.modelSwitch.ruleEnabled":"Enabled","st.modelSwitch.ruleMoveUp":"Move this rule up","st.modelSwitch.ruleMoveDown":"Move this rule down","st.modelSwitch.ruleDelete":"Delete this rule","st.modelSwitch.ruleSave":"Save rules","st.modelSwitch.rulePatternInvalid":"A pattern cannot contain spaces or brackets.","st.modelSwitch.previewFrom":"From matches:","st.modelSwitch.previewTo":"To matches:","st.modelSwitch.previewNone":"no known model","st.modelSwitch.ask.inherit":"Follow the ask setting","st.modelSwitch.ask.ask":"Always ask","st.modelSwitch.ask.skip":"Never ask","st.modelSwitch.saved":"Saved","modelSwitch.dialog.title":"Switch to {model}","modelSwitch.dialog.titleSameModel":"Continue with a new context","modelSwitch.dialog.current":"Currently using {model}","modelSwitch.dialog.modesAria":"How to continue on the new model","modelSwitch.dialog.mode.direct":"Switch directly","modelSwitch.dialog.mode.direct.hint":"{to} picks up the current context as-is.","modelSwitch.dialog.mode.compact":"Summarize, then switch","modelSwitch.dialog.mode.compact.hint":"{from} writes a conversation summary for {to}. This calls {from} once.","modelSwitch.dialog.mode.fresh":"Continue with a fresh context","modelSwitch.dialog.mode.fresh.hint":"Keeps todos, memory and subagents; the earlier conversation stays in history.","modelSwitch.dialog.mode.fresh.hintExtra":"Reads the saved task state directly — no call to {from}.","modelSwitch.dialog.remember":"Always switch this way; don’t ask again","modelSwitch.dialog.rememberRule":"Applies to rule “{rule}”","modelSwitch.dialog.rememberDefault":"Saved as the default; exception rules still win","modelSwitch.dialog.settings":"Switch settings","modelSwitch.dialog.confirm":"Switch model","modelSwitch.dialog.confirmWhenIdle":"Switch when idle","modelSwitch.dialog.saveEdit":"Save changes","modelSwitch.modeName.direct":"Direct","modelSwitch.modeName.compact":"Summarize first","modelSwitch.modeName.fresh":"Fresh context","modelSwitch.action.edit":"Change","modelSwitch.action.cancel":"Cancel","modelSwitch.action.retry":"Retry","modelSwitch.action.useFresh":"Use a fresh context","modelSwitch.action.keepOriginal":"Keep the original model","modelSwitch.submitFailed":"Couldn’t switch the model: {detail}","modelSwitch.updateFailed":"Couldn’t change the queued switch: {detail}","modelSwitch.cancelFailed":"Couldn’t cancel the switch: {detail}","modelSwitch.recoverFailed":"Recovery failed: {detail}","modelSwitch.prefsSaveFailed":"The switch went through, but the preference wasn’t saved: {detail}","modelSwitch.pendingChipPrefix":"Switching to ","modelSwitch.pendingChipTitle":"Queued model switch — runs when the agent goes idle","modelSwitch.pendingLine":"Switching to {model} when idle · {mode}","modelSwitch.listFailed":"Queued model switches could not be loaded","modelSwitch.menuFreshContext":"Continue with a new context…","st.section.computerControl":"Computer control","st.purpose.computerControl":"Observe the desktop and send input on this server through the open-source executor.","st.computer.title":"Computer control","st.computer.machineLabel":"Kiki server","st.computer.machineUnknown":"The server reported no platform","st.computer.machineHint":"These facts come from the connected Kiki server itself; Check status re-reads the executor and its connections.","st.computer.machineHintSsh":"The connected host is “{label}”; observing and driving a desktop happens in that host’s own graphical session.","st.computer.recheckButton":"Check status","st.computer.checking":"Checking…","st.computer.setupTitle":"Executor install","st.computer.statusLabel":"Install state","st.computer.state.detecting":"Detecting…","st.computer.state.failed":"Detection failed","st.computer.state.notInstalled":"Not installed","st.computer.state.partial":"Components missing","st.computer.state.installed":"Installed","st.computer.state.unsupported":"Not supported on this platform","st.computer.installButton":"Install executor","st.computer.installing":"Installing…","st.computer.retryInstall":"Retry install","st.computer.installDone":"Install finished; the state was re-read.","st.computer.installedHint":"Installed means the executor files verified — it does not mean something is being controlled right now.","st.computer.optionalUnverified":"Desktop access is unverified: it is an optional step and the install does not check it.","st.computer.macPermissions":"On macOS this direct connection carries desktop permissions in the calling process; grant them where the driver reports they are missing.","st.computer.details":"Detection details","st.computer.step.binary":"Executor binary","st.computer.step.mcp":"Global MCP entry","st.computer.step.desktopAccess":"Desktop access","st.computer.step.permissions":"System desktop permissions","st.computer.step.runtime":"Interactive desktop session","st.computer.installConfirmTitle":"Install the computer-control executor?","st.computer.installConfirmBody":"Kiki downloads and verifies this pinned release of the open-source executor, then registers it as a global MCP connection.","st.computer.connectionsTitle":"Computer control connections","st.computer.connectionsHint":"These are the MCP connections on this server that start the open-source executor; saving writes to the local MCP configuration immediately.","st.computer.loading":"Reading connections…","st.computer.empty":"This server has no computer-control connection yet. Installing the executor registers one named kiki-computer.","st.computer.setupEntry":"Set up computer control","st.computer.fieldName":"Connection name","st.computer.fieldEnabled":"Enabled","st.computer.fieldCommand":"Program path","st.computer.commandPlaceholder":"Absolute path to the cua-driver executable","st.computer.fieldArgs":"Arguments (one per line)","st.computer.fieldExecutor":"Runs on","st.computer.executor.local":"Kiki server","st.computer.executor.kaos":"Kaos sandbox","st.computer.advanced":"Advanced","st.computer.startupTimeout":"Startup timeout (ms)","st.computer.toolTimeout":"Tool timeout (ms)","st.computer.timeoutInvalid":"A timeout must be a whole number of milliseconds above 0.","st.computer.notStdio":"A computer-control connection has to be a stdio transport.","st.computer.sourceField":"Entry source","st.computer.sourceNew":"Not saved yet","st.computer.readOnly":"This entry comes from a plugin or another read-only source; Kiki will not rewrite it — edit it at its source.","st.computer.testButton":"Test connection","st.computer.testing":"Testing…","st.computer.testOk":"Connection test succeeded.","st.computer.testFailed":"Connection test failed.","st.computer.stopButton":"Stop control","st.computer.stopping":"Stopping…","st.computer.stop.stopped":"Stopped the cua processes running on this server.","st.computer.stop.idle":"This service scope has no running cua process.","st.computer.stop.unconfirmed":"Whether it stopped could not be confirmed; the server’s own output follows.","st.computer.stop.disables":"This is an editable global connection, so stopping also disables its configuration.","st.computer.stop.readOnly":"A read-only configuration is not rewritten; this stop applies to this service process only.","st.computer.stop.confirmTitle":"Stop control for “{name}”?","st.computer.stop.confirmBody":"Running cua processes will be ended. This stop covers only the processes this service started; it does not mean nobody controls the desktop.","st.computer.create":"Create connection","st.section.browserControl":"Browser control","st.purpose.browserControl":"Manage browser connections on this server: independent profiles Kiki starts, or an existing/remote browser.","st.browser.defaultTitle":"Default browser for new sessions","st.browser.defaultLabel":"Default connection","st.browser.defaultHint":"Applies to sessions created afterwards. Disabling a connection never swaps in another one.","st.browser.defaultEmpty":"No browser connection yet — add one first, then pick a default.","st.browser.defaultNone":"Choose each time","st.browser.defaultNoneHint":"No default is stored; a call has to name the connection id.","st.browser.connectionsTitle":"Browser connections","st.browser.intro":"Each connection is one controllable browser location. The driver runs on this Kiki server; a CDP connection drives whatever machine its address names. Creating, checking and connecting never copy your everyday browser sign-in.","st.browser.add":"Add browser","st.browser.loading":"Reading connections…","st.browser.emptyTitle":"No browser connection yet","st.browser.emptyBody":"Once a connection exists, models and sessions pick a browser by its connection id.","st.browser.newTitle":"New browser connection","st.browser.idPending":"id not set yet","st.browser.createHint":"Decide the id and the connection style first; the id is fixed once created, and both models and this page select the browser by it. Saving only writes configuration — it does not start a browser.","st.browser.currentControl":"In use now","st.browser.fieldId":"Connection id","st.browser.fieldIdHint":"Letters, digits, dot, hyphen or underscore, starting with a letter or digit; fixed after creation.","st.browser.fieldName":"Display name","st.browser.fieldType":"Connection style","st.browser.type.profile":"Profile","st.browser.type.cdp":"CDP","st.browser.type.profileLong":"Independent agent browser (agent-browser profile)","st.browser.type.profileHint":"Kiki starts and manages it on the server, with its own profile.","st.browser.type.cdpLong":"Existing or remote browser (CDP address)","st.browser.type.cdpHint":"Attach to a browser that already exposes CDP; start nothing new.","st.browser.typeChangeHint":"Changing the style points the same id at a different browser; an established running session no longer belongs to this target and has to be reconnected.","st.browser.fieldEnabled":"Enable this connection","st.browser.disabledHint":"Disabled: it is not executed, and neither checking nor connecting is available.","st.browser.fieldHeaded":"Show the browser window","st.browser.fieldHeadedHint":"Off keeps the browser headless, the default. On opens a window on the server the next time this connection starts.","st.browser.fieldProfilePath":"Profile path","st.browser.profilePlaceholder":"Absolute path on the server","st.browser.fieldProfilePathHint":"Leave empty to use the server’s default location. This is the connection’s own sign-in state; your everyday browser cookies are not copied.","st.browser.fieldExecutablePath":"Browser executable path","st.browser.fieldExecutablePathHint":"Optional: use an installed Chrome/Edge instead of the bundled Chrome for Testing. Empty uses the bundled one.","st.browser.fieldDriverPath":"Managed driver path","st.browser.driverPlaceholder":"Empty uses the managed driver that Kiki ships","st.browser.fieldDriverPathHint":"The managed agent-browser native executable, an absolute path on the server. Kiki requires the {version} {markers} build: it prevents automatic replay after a lost response and the Windows MCP output hang, so any other build is refused.","st.browser.advanced":"Advanced","st.browser.fieldEndpoint":"CDP endpoint","st.browser.endpointSource":"Stored in the browser control configuration on the server","st.browser.fieldEndpointHint":"An http, https, ws or wss address that points at the browser really serving CDP — not a provider’s REST API URL.","st.browser.endpointHostLine":"Target host {host}","st.browser.driverLine":"driver {version}","st.browser.checkedAt":"checked {at}","st.browser.checking":"Checking…","st.browser.checkProfile":"Check components","st.browser.checkCdp":"Check connection","st.browser.checkHintProfile":"Checking starts the managed driver and reads its session and tab state; it does not open a browser page.","st.browser.checkHintCdp":"Checking handshakes and lists targets; it does not navigate a page.","st.browser.connecting":"Connecting…","st.browser.connectProfile":"Start browser","st.browser.connectCdp":"Attach browser","st.browser.disconnecting":"Disconnecting…","st.browser.disconnect":"Disconnect","st.browser.callerLine":"Session {session} · agent {agent} is running {tool}.","st.browser.dirtyRuntimeHint":"Checking and connecting use the saved configuration; save or discard first.","st.browser.disconnectHint":"Releases the connection as it is saved. Edits in this form are kept.","st.browser.saveEndsSession":"Saving ends this connection’s current running session first, then applies the new configuration.","st.browser.flagOff":"Running a browser is a development-candidate feature and this server has not turned it on. Turn on native_browser in the Experimental rows of the Developer settings, then connect again.","st.browser.flagOffAction":"Go to the switch","st.browser.state.idle":"Not connected","st.browser.state.connecting":"Connecting","st.browser.state.ready":"Connected","st.browser.state.running":"Running a call","st.browser.state.stopping":"Disconnecting","st.browser.state.disconnected":"Disconnected","st.browser.state.failed":"Failed","st.browser.state.unconfirmed":"Stop not confirmed","st.browser.state.disabled":"Disabled","st.browser.state.unconfirmedHint":"The driver acknowledged the close, but its process was not confirmed gone. Check or disconnect again, then reconnect.","st.browser.runtimeTitle":"Running sessions and capabilities","st.browser.tabs.title":"Target tabs","st.browser.tabs.loading":"Reading the tab list from the connected browser…","st.browser.tabs.notLive":"Nothing is connected, so there are no target tabs to read. Connect this connection first; reading tabs never attaches or starts anything.","st.browser.tabs.empty":"Connected, and the browser has no open pages.","st.browser.tabs.untitled":"Untitled page","st.browser.tabs.active":"Active","st.browser.catalog.title":"Tool catalogue","st.browser.catalog.readHint":"Reads the tool list from this connection’s managed backend and its isolated configuration. It does not open a browser or a page.","st.browser.catalog.readHintIdle":"Reads the tool list from this connection’s managed backend. Nothing is connected, so this starts that backend without connecting it; it does not open a browser or a page.","st.browser.catalog.read":"Read the catalogue","st.browser.catalog.loading":"Asking the backend for its tools…","st.browser.catalog.backendCount":"tools reported by the backend","st.browser.catalog.isolation":"context isolation","st.browser.catalog.empty":"This backend reported no retrievable tools.","st.browser.catalog.searchLabel":"Filter the tool catalogue","st.browser.catalog.searchPlaceholder":"Filter by name, description or group","st.browser.catalog.noMatch":"No tool matches that.","st.browser.catalog.more":"…and {count} more; narrow the filter to see them.","st.browser.catalog.schema":"Input schema","st.browser.catalog.withSchemas":"Fetch input schemas too (larger response)","st.browser.group.page":"Page","st.browser.group.network":"Network","st.browser.group.state":"State","st.browser.group.debug":"Debug","st.browser.group.input":"Input","st.browser.group.react":"React","st.browser.surface.operation":"page tool","st.browser.surface.lifecycle":"lifecycle","st.browser.surface.administrative":"administrative","st.browser.detail.executionHost":"Runs on","st.browser.detail.ownership":"Ownership","st.browser.ownership.managedProfile":"Started and managed by Kiki (independent profile)","st.browser.ownership.externalBrowser":"Borrowed existing browser (CDP)","st.browser.ownership.unknown":"Not reported by the server","st.browser.detail.runtimeSession":"Runtime session","st.browser.detail.resolvedProfile":"Resolved profile path","st.browser.detail.generation":"Generation","st.browser.detail.driverVersion":"Driver version","st.browser.detail.driverRequirement":"managed build required: {version} {markers}","st.browser.detail.driverUnknown":"unknown","st.browser.detail.checkedAt":"Last checked","st.browser.detail.checkedNever":"never checked","st.browser.detail.currentCall":"Current call","st.browser.disconnectMeaningExternal":"Disconnecting only ends Kiki’s control session; the borrowed browser stays. The next attach re-checks its pages.","st.browser.disconnectMeaningManaged":"Disconnecting ends this browser instance, which Kiki started.","st.browser.disconnectMeaningUnknown":"Disconnecting ends Kiki’s control session; an instance Kiki started is closed, a borrowed browser stays.","st.browser.outcome.checkOk":"Check passed · driver {version}","st.browser.outcome.connected":"Connected; the state was read back.","st.browser.outcome.connectIncomplete":"Connecting did not reach a usable state; the server’s state follows.","st.browser.outcome.disconnected":"Control disconnected.","st.browser.outcome.disconnectIncomplete":"The disconnect was not confirmed; the server’s state follows.","st.browser.outcome.failed":"The operation failed.","st.browser.outcome.unconfirmed":"The operation’s outcome is unconfirmed.","st.browser.delete":"Delete connection","st.browser.deleteTitle":"Delete “{name}”?","st.browser.deleteBody":"This removes the connection and Kiki’s own control session only.","st.browser.deleteConsequenceProfile":"Sign-in data in the profile directory is not deleted.","st.browser.deleteConsequenceCdp":"The browser you borrowed is not closed and its pages are not deleted.","st.browser.deleteEndsSession":"This connection has a running session right now; deleting ends it first.","st.browser.deleteDefault":"It is the default browser for new sessions; after deletion the default goes back to “Choose each time”.","st.browser.deleted":"Connection “{name}” deleted.","st.browser.save":"Save changes","st.browser.create":"Create connection","st.browser.otherTitle":"How other browser ecosystems would attach","st.browser.otherHint":"These routes have named entry points but are not wired; this lists the conditions and offers no dead buttons.","st.browser.other.state":"Not wired","st.browser.other.webbridge.name":"Browser extension","st.browser.other.webbridge":"Uses the user browser that the extension is attached to. Installation and source stay on the plugins page; one extension instance cannot stand in for several profiles.","st.browser.other.cloud.name":"Hosted cloud","st.browser.other.cloud":"Needs a service account and API key, and creating a session may be billed; sessions and files come back through the provider’s interface.","st.browser.other.codex.name":"Codex official browser","st.browser.other.codex":"Needs that installation’s browser bridge to be available in the selected execution mode; an executable alone does not make a usable browser.","st.browser.other.executors.name":"Other executors","st.browser.other.executors":"Keeps the public CDP and low-level library routes (Browser Use, Browse, …); no release is pinned yet.","st.browser.modelNotice":"Pages read here and their screenshots go to the model the current session uses.","st.browser.location.server":"Server","st.browser.location.unknown":"address not set","st.browser.idRequired":"Enter a connection id.","st.browser.idInvalid":"An id may hold letters, digits, dots, hyphens and underscores, and must start with a letter or digit.","st.browser.idTaken":"This id is already taken; continuing would overwrite that connection.","st.browser.nameRequired":"Enter a display name.","st.browser.nameTooLong":"The name is too long — 256 characters at most.","st.browser.pathInvalid":"An absolute path on the server is required.","st.browser.endpointRequired":"Enter the CDP endpoint.","st.browser.invalid":"This configuration does not match the server schema; check the fields.","st.spaces.ownChoices":"What this space set","nav.scope.retry":"Try again","nav.scope.stay":"Stay on this page","nav.scope.restoring.title":"Reconnecting","nav.scope.restoring.body":"Opening the space you came from.","nav.scope.verifying.title":"Checking that page","nav.scope.verifying.body":"Making sure the page is still there before opening it.","nav.scope.failed.offline.title":"Can’t reach that space","nav.scope.failed.offline.body":"That space isn’t answering right now.","nav.scope.failed.auth-required.title":"That space needs an access token","nav.scope.failed.auth-required.body":"Kiki needs a current access token for that space before it can go back.","nav.scope.failed.scope-invalid.title":"That return can’t be restored","nav.scope.failed.scope-invalid.body":"Kiki can’t reopen the place you came from in that space.","nav.scope.failed.identity-mismatch.title":"A different space answered","nav.scope.failed.identity-mismatch.body":"Kiki stopped instead of opening content from the wrong space.","nav.scope.failed.target-missing.title":"That page is gone","cap.media.title":"Media sources","cap.media.back":"Back to plugins","cap.media.loading":"Reading media sources…","cap.media.saving":"Saving…","cap.media.search":"Search sources, vendors or modalities","cap.media.searchAria":"Search media sources","cap.media.filters":"Filter by modality or state","cap.media.clearFilters":"Clear filters","cap.media.none":"No media sources yet.","cap.media.noneBody":"Install a vendor plugin for images, video or speech and it will appear here.","cap.media.noMatch":"No sources match “{query}”.","cap.media.shown.one":"{count} source","cap.media.shown.other":"{count} sources","cap.media.ofTotal":" of {total}","cap.media.unavailable":"This server does not offer media sources yet.","cap.media.unavailableBody":"Media source management is not enabled on this server. Installed plugins and their settings are unaffected.","cap.media.jobs":"Recent generations","cap.media.jobsEmpty":"This session has not generated any media yet.","cap.media.kind.image":"Image","cap.media.kind.video":"Video","cap.media.kind.tts":"Speech","cap.media.kind.file":"File","cap.media.filter.all":"All","cap.media.filter.image":"Image","cap.media.filter.video":"Video","cap.media.filter.tts":"Speech","cap.media.filter.ready":"Ready","cap.media.filter.needs-config":"Needs setup","cap.media.filter.blocked":"Blocked","cap.media.filter.error":"Unavailable","cap.media.status.ready":"Ready","cap.media.status.default":"Default","cap.media.status.needs-config":"Needs setup","cap.media.status.blocked":"Blocked","cap.media.status.broken":"Unavailable","cap.media.status.unchecked":"Not checked","cap.media.flagOff":"Media generation is not enabled on this server. Your sources, settings and past generations stay exactly as they are; new generations cannot be started until it is turned on in Experimental settings.","cap.media.filter.unchecked":"Not checked","cap.media.row.unchecked":"From {plugin}. Open it to check its settings.","cap.media.row.missing":"Still needs {keys}","cap.media.row.needsKey":"A required setting is not filled in.","cap.media.row.blocked":"A generation is waiting for this source to come back.","cap.media.row.unavailable":"The {plugin} plugin did not load.","cap.media.detail.settings":"What this source needs","cap.media.detail.selfManaged":"This provider brings its own credentials — an environment variable, a key file, or a local endpoint it reads itself. There is nothing to fill in here.","cap.media.detail.defaults":"Used by default for","cap.media.detail.defaultsHint":"A generation that names no source goes to whichever one you pick here. Each modality can have its own.","cap.media.detail.package":"View plugin","cap.media.detail.adapter":"Adapter","cap.media.detail.kinds":"Modalities","cap.media.detail.resumeVersion":"Resume version","cap.media.detail.capabilities":"Capabilities","cap.media.detail.loadCapabilities":"Query capabilities","cap.media.detail.capabilitiesIdle":"Capabilities are queried on demand; a vendor’s model list changes on its own schedule.","cap.media.detail.capabilitiesFailed":"Could not query capabilities: {detail}","cap.media.detail.noModels":"This source reported no models.","cap.media.detail.moreModels":"More models are not listed here.","cap.media.detail.voices":"Voices","cap.media.detail.voiceLanguage":"Language (optional)","cap.media.detail.loadVoices":"Query voices","cap.media.detail.voicesIdle":"Voices are queried on demand; the full list is not downloaded when this page opens.","cap.media.detail.voicesFailed":"Could not query voices: {detail}","cap.media.detail.noVoices":"This source reported no voices.","cap.media.detail.moreVoices":"More voices are not listed here.","cap.media.detail.unavailable":"This server does not offer media sources yet.","cap.media.default.on":"Default","cap.media.default.off":"Make default","cap.media.setting.saved":"Saved.","cap.media.setting.choice":"Pick one of the listed choices.","cap.media.setting.notSet":"(not set)","cap.media.artifact.preview":"Preview","cap.media.artifact.subtitle":"Subtitles","cap.media.artifact.play":"Play","cap.media.artifact.audioLoading":"Preparing audio…","cap.media.artifact.audioFailed":"The audio could not be read.","cap.media.artifact.audioUnsupported":"This browser cannot play that audio.","cap.media.job.state.running":"Running","cap.media.job.state.pending":"Waiting","cap.media.job.state.succeeded":"Done","cap.media.job.state.partial":"Partly done","cap.media.job.state.failed":"Failed","cap.media.job.state.unknown":"Outcome unknown","cap.media.job.state.stopped":"Stopped","cap.media.job.phase.submit":"submitting","cap.media.job.phase.generation":"generating","cap.media.job.phase.download":"downloading","cap.media.job.unknown":"Whether the vendor accepted this submission cannot be confirmed, so it may still be generating and charging. Nothing is regenerated automatically here.","cap.media.job.partial":"Some outputs finished. The files below are the ones that landed.","cap.media.job.localStop":"Stopped waiting locally. The vendor may still be generating and charging; resuming continues the same job.","cap.media.job.blocked.needs_provider":"This job’s plugin is not loaded, so the job is kept. Reinstall a compatible plugin to fetch the rest.","cap.media.job.resume":"Keep fetching","cap.media.job.stop":"Stop waiting","cap.media.job.details":"Show the raw record","cap.media.job.hideDetails":"Hide the raw record","cap.media.job.resumed":"Now fetching the rest of this job.","cap.media.job.stopped":"Stopped waiting for this job.","cap.media.job.unowned":"This job belongs to another session, so it can only be stopped from there.","cap.media.connection.none":"You have no connections yet, so this stays a plain value. Add a connection on the Connections page if you want to reuse one here.","cap.media.connection.selfManaged":"This provider manages its own credentials","cap.media.connection.hasCredential.one":"credential stored","cap.media.connection.hasCredential.other":"credential stored","cap.media.connection.hint":"Choosing a connection reuses the credentials Kiki already holds for it. It does not copy them, and a connection that does not offer a media model will say so when you use it.","cap.media.connection.active":"This connection supplies the credentials. Your own key and endpoint below are not needed while it is selected.","cap.media.connection.covers":"Covered by the selected connection. Your own value is kept.","cap.media.subscriptions.title":"Where providers are discovered","cap.media.subscriptions.none":"No source subscribed.","cap.media.subscriptions.noneBody":"Add a catalog address to see what it offers. Reading one lists packages; it installs nothing.","cap.media.subscriptions.paused":"Paused","cap.media.subscriptions.remove":"Remove","cap.media.subscriptions.add":"Add a source","cap.media.subscriptions.name":"Name","cap.media.subscriptions.url":"Catalog address","cap.media.subscriptions.addHint":"Adding a source only reads its list of packages. Installing one from it still goes through the normal plugin preview, where you approve the source.","cap.media.subscriptions.removeHint":"Removing a source stops new packages from being offered. Providers you already installed, their keys, and everything generated stay as they are.","cap.media.subscriptions.added":"Added “{id}”.","cap.media.subscriptions.removed":"Removed “{id}”. Installed providers and their keys are unchanged.","cap.media.detail.noModelsYet":"This provider has not reported its models yet. It can still be set as the default for a modality.","nav.scope.failed.target-missing.body":"The session or page you came from is no longer there."},g={"st.boardStorage.title":"任务卡存储位置","st.boardStorage.policy":"选择新任务卡的存储位置,再预览某个工作区解析后的目录。","st.boardStorage.modeAutoHint":"优先复用工作区中的兼容存储,否则使用 Kiki 会话数据区。","st.boardStorage.modeGlobalHint":"新任务卡使用 Kiki Home 的 boards 目录。","st.boardStorage.modeFixedHint":"使用下方路径;相对路径会从所选工作区解析。","st.boardStorage.pathHint":"示例:cards 或 C:/shared/boards;离开输入框后自动计算位置。","st.boardStorage.details":"存储解析详情","st.boardStorage.policyDetails":"自动模式会优先复用工作区中兼容的 OwnWork/Assay 数据;全局模式使用 Kiki Home 的 boards 目录;固定模式使用你填写的路径。","st.boardStorage.mode":"默认存储模式","st.boardStorage.auto":"自动(默认)","st.boardStorage.global":"全局 · Kiki Home","st.boardStorage.fixed":"固定路径","st.boardStorage.path":"存储路径","st.boardStorage.workspace":"用于路径预览的工作区","st.boardStorage.selectWorkspace":"选择工作区","st.boardStorage.awaitWorkspace":"选择工作区后会立即算出最终位置;相对路径在此之前保持待解析状态。","st.boardStorage.noMove":"保存只改变后续新建任务卡的默认位置,不会自动搬移或删除已有卡片。","st.boardStorage.refresh":"刷新位置","st.boardStorage.retry":"重试","st.boardStorage.previewing":"正在计算位置…","st.boardStorage.save":"保存默认设置","st.boardStorage.source":"实际来源","st.boardStorage.existing":"已有兼容存储","st.boardStorage.newStore":"首次创建时建立存储","st.boardStorage.resolved":"最终任务目录","st.boardStorage.kind.workspace":"工作区存储","st.boardStorage.kind.embedded":"Kiki 数据区","st.spaces.applied":"已应用 {count} 项","st.spaces.blocked.accountData":"这个连接带有账号信息,请在账号流程里改。","st.spaces.blocked.editResource":"请在它自己的页面里修改。","st.spaces.blocked.mainNoParent":"主空间没有上层来源。","st.spaces.blocked.notShareable":"这项不能用于主空间。","st.spaces.blocked.onlyResources":"只有资源项可以这样排除。","st.spaces.blocked.resourceUnavailable":"这项的资源还没有在本空间就绪。","st.spaces.change":"更改","st.spaces.change.apply":"应用 {count} 项","st.spaces.change.back":"返回","st.spaces.change.becomes":"改为","st.spaces.change.conflict":"这些设置刚有变化,请关掉重新打开。","st.spaces.change.editBody":"下面的值会写入本空间,这些项目此后不再跟随主空间。","st.spaces.change.editTitle":"在这里修改这几项","st.spaces.change.failed":"没有写入任何内容。{reason}","st.spaces.change.fixedBody":"保留当前选中的设置,之后不再跟随主空间。","st.spaces.change.fixedTitle":"在本空间固定","st.spaces.change.followBody":"选中的项目将使用主空间的设置,之后也会跟随更新。","st.spaces.change.followTitle":"改为跟随主空间","st.spaces.change.futureItems":"主空间以后新增的项目也在这里使用","st.spaces.change.kept":"本次保留","st.spaces.change.loading":"正在准备清单…","st.spaces.change.mainChanged":"主空间也改过","st.spaces.change.mainNow":"主空间现在","st.spaces.change.none":"至少选择一项。","st.spaces.change.nothingToChange":"这里没有可以这样修改的项目。","st.spaces.change.now":"现在","st.spaces.change.pushAction":"把本空间的改动用于主空间…","st.spaces.change.pushBody":"选中的改动会更新主空间,也会影响跟随这些设置的空间。随后,本空间的这些项目将改为跟随。","st.spaces.change.pushConfirm":"更新主空间并跟随","st.spaces.change.pushTarget":"主空间","st.spaces.change.pushTitle":"把改动用于主空间","st.spaces.change.reload":"重新读取清单","st.spaces.change.restart":"重启此空间后生效。","st.spaces.change.same":"当前相同的 {count} 项","st.spaces.change.saveChoice":"保存选择","st.spaces.device.body":"空间外观现在是共用的一份。你可以继续用它,也可以把此设备保存的外观用于这个空间。","st.spaces.device.failed":"没能把这个设备的外观用于本空间。外观没有改动。","st.spaces.device.keep":"使用空间外观","st.spaces.device.title":"此设备还保存着另一套外观","st.spaces.device.use":"将此设备外观用于本空间","st.spaces.device.used":"已将此设备外观用于本空间。","st.spaces.group.agents":"智能体","st.spaces.group.appearance":"外观","st.spaces.group.available":"可用","st.spaces.group.config":"模型与行为","st.spaces.group.credentials":"账号与密钥","st.spaces.group.fixed":"本空间固定","st.spaces.group.fixedFollow":"本空间固定 · {count} 项仍跟随主空间","st.spaces.group.follow":"跟随主空间","st.spaces.group.followFixed":"跟随主空间 · {count} 项在本空间固定","st.spaces.group.generic_roots":"通用技能与智能体","st.spaces.group.instructions":"指令","st.spaces.group.isolated":"仅本空间","st.spaces.group.items":"{count} 项","st.spaces.group.mcp":"MCP 连接","st.spaces.group.plugins":"插件","st.spaces.group.shared":"共用主空间","st.spaces.group.skills":"技能与命令","st.spaces.group.stacked":"跟随主空间,另有本空间补充","st.spaces.group.unavailable":"不使用","st.spaces.mainNote":"主空间的设置在各设置页里编辑,其他空间默认从这里开始。","st.spaces.origin.backgroundPacks":"打开外观包","st.spaces.origin.deviceOnlyBackground":"这张图保存在这台设备上了,本空间仍使用空间的背景。","st.spaces.origin.edited":"本空间已改","st.spaces.origin.fixHere":"在本空间固定","st.spaces.origin.fixed":"本空间固定","st.spaces.origin.follow":"跟随主空间","st.spaces.origin.menuAria":"{name} 的来源","st.spaces.origin.notListed":"本空间的设置清单里没有这一项。","st.spaces.origin.push":"把这项用于主空间…","st.spaces.origin.reading":"正在读取…","st.spaces.origin.refollow":"改为跟随主空间…","st.spaces.origin.restart":"重启此空间后生效。","st.spaces.origin.retry":"重试","st.spaces.origin.saved":"已保存","st.spaces.origin.saving":"正在保存…","st.spaces.origin.unknown":"暂时无法读取来源","st.spaces.origin.unsaved":"未保存。","st.spaces.ownChoice.edited":"本空间已改","st.spaces.ownChoice.fixed":"本空间固定","st.spaces.ownChoicesEmpty":"还没有本空间的单独设置。","st.spaces.ownOpen":"打开","st.spaces.pendingNote":"重启此空间后生效。","st.spaces.resourceSources":"资源来源","st.spaces.resourceSourcesHint":"这些来自运行这个空间的设备,不来自主空间。","st.spaces.settings":"空间设置","st.spaces.settingsFailed":"没能读取这个空间的设置。","st.spaces.settingsLoading":"正在读取这个空间的设置…","st.spaces.settingsMenu":"空间设置…","st.spaces.settingsRetry":"重试","st.spaces.settingsTitle":"空间设置 · {name}","st.spaces.undoLast":"撤销上一项更改","st.spaces.undone":"已撤销上一项更改。","st.spaces.value.appendTiming.agent_idle":"智能体空闲时","st.spaces.value.appendTiming.subagents_done":"子智能体结束后","st.spaces.value.appendTiming.tasks_done":"任务结束后","st.spaces.value.backgroundCount":"{count} 张图片","st.spaces.value.backgroundNone":"无背景","st.spaces.value.none":"无","st.spaces.value.off":"关","st.spaces.value.on":"开","st.spaces.value.skinBuiltin":"{id}(内置)","st.spaces.value.skinPack":"{id}(外观包)","st.spaces.value.skinUser":"{id}(主题文件)","st.spaces.value.tweaksCount":"{count} 项微调","st.spaces.value.tweaksNone":"未做微调","taskBoard.empty.description":"添加工作区后,即可在这里查看和整理需求。","taskBoard.title":"需求与任务看板","taskBoard.syncing":"同步中...","taskBoard.summary":"共 {shown} / {total} 项需求","taskBoard.search.placeholder":"搜索任务/提示词...","taskBoard.sessionFilter.all":"全部关联会话","taskBoard.newTask":"新建需求","taskBoard.column.backlog":"待整理","taskBoard.column.todo":"待办","taskBoard.column.running":"运行中","taskBoard.column.failed":"失败","taskBoard.column.active":"待办","taskBoard.column.in_progress":"进行中","taskBoard.column.paused":"暂缓","taskBoard.column.done":"已完成","taskBoard.column.cancelled":"已取消","taskBoard.column.superseded":"已替代","taskBoard.column.empty":"暂无需求卡片","taskBoard.priority.urgent":"P0 紧急","taskBoard.priority.high":"P1 高","taskBoard.priority.medium":"P2 中","taskBoard.priority.low":"P3 低","taskBoard.result.succeeded":"成功","taskBoard.result.failed":"失败","taskBoard.result.cancelled":"已取消","taskBoard.result.running":"运行中","taskBoard.card.executionTitle":"最近执行: {result}","taskBoard.card.executionRefsHint":"执行引用不表示运行状态","taskBoard.card.executionRefs.one":"{count} 个执行引用","taskBoard.card.executionRefs.other":"{count} 个执行引用","taskBoard.card.linkedSessions.one":"{count} 个关联会话","taskBoard.card.linkedSessions.other":"{count} 个关联会话","taskBoard.prototype.banner":"原型展示切片 · 工作看板","taskBoard.prototype.runtime":"运行时:解耦模拟层","taskBoard.backToSession":"返回会话","taskBoard.refresh":"刷新","taskBoard.scope.label":"看板数据范围","taskBoard.scope.all":"全工作区总览","taskBoard.issues.partial.one":"{count} 个工作区的看板数据暂未加载","taskBoard.issues.partial.other":"{count} 个工作区的看板数据暂未加载","taskBoard.issues.cards.one":"{count} 张卡片的看板数据暂未加载","taskBoard.issues.cards.other":"{count} 张卡片的看板数据暂未加载","taskBoard.listSeparator":"、","taskBoard.unavailable.title":"暂时无法加载任务看板","taskBoard.unavailable.description":"当前后端无法为任何已授权工作区提供看板数据:可能是桌面后端版本过旧,或这些工作区的看板存储需要迁移。可在工作区设置中检查看板存储。","taskBoard.issueReason.BOARD_UNAVAILABLE":"看板存储不兼容或需要迁移","taskBoard.issueReason.BOARD_ACCESS_DENIED":"看板存储未获该工作区授权","taskBoard.issueReason.WORKSPACE_NOT_FOUND":"工作区未在后端注册","taskBoard.issueReason.WORKSPACE_CUTOVER_REQUIRED":"看板存储来自旧版布局,需要一次性迁移:升级 Kiki 或执行工作区迁移","taskBoard.issueReason.BOARD_REQUEST_FAILED":"看板请求失败(后端版本过旧或连接异常)","taskBoard.issueReason.unknown":"未知原因","taskBoard.detail.title":"任务详情","taskBoard.detail.close":"关闭详情弹窗","taskBoard.detail.loading":"正在加载任务详情…","taskBoard.detail.field.title":"标题","taskBoard.detail.field.status":"状态","taskBoard.detail.field.priority":"优先级","taskBoard.detail.field.descriptionContext":"描述 / 背景","taskBoard.detail.field.executionPrompt":"执行提示词","taskBoard.detail.field.category":"分类","taskBoard.detail.field.workspace":"工作区","taskBoard.detail.field.associateSession":"关联已有会话","taskBoard.detail.noSession":"-- 未关联会话 --","taskBoard.detail.description":"描述","taskBoard.detail.assignedPrompt":"已分配的执行提示词","taskBoard.detail.linkedSessions":"关联会话","taskBoard.detail.linkedCount":"已关联 {count} 个","taskBoard.detail.decoupled":"还没有关联会话,可在“编辑任务”中关联。","taskBoard.detail.attemptsHistory":"执行记录","taskBoard.detail.attemptCount":"{count} 次尝试","taskBoard.detail.viewSession":"查看会话","taskBoard.detail.linkedExecutionRefs":"已关联的执行引用(状态未加载):{ids}","taskBoard.detail.noExecutionRefs":"暂无执行引用记录。","taskBoard.detail.delete":"删除卡片","taskBoard.detail.deleteTitle":"删除这张任务卡?","taskBoard.detail.deleteBody":"此操作无法撤销。","taskBoard.detail.deleteConfirm":"删除卡片","taskBoard.detail.cancel":"取消","taskBoard.detail.save":"保存修改","taskBoard.detail.edit":"编辑任务","taskBoard.detail.execute":"在会话中执行","taskBoard.detail.validation.titleRequired":"任务标题不能为空。","taskBoard.detail.error.updateFailed":"更新失败,已保留你的草稿。","taskBoard.detail.action.start":"开始","taskBoard.detail.action.done":"标记完成","taskBoard.detail.action.resume":"继续","taskBoard.detail.action.reopen":"重新打开","taskBoard.detail.moveTo":"切换状态","taskBoard.detail.openSession":"打开会话","taskBoard.detail.noDescription":"暂无描述。","taskBoard.detail.noSessionsAvailable":"这个工作区还没有会话。","taskBoard.detail.markdownHint":"支持 Markdown。","taskBoard.detail.updated":"更新于","taskBoard.detail.created":"创建于","taskBoard.card.updated":"最近活动","taskBoard.new.validation.titleRequired":"任务标题不能为空。","taskBoard.new.error.createFailed":"卡片未保存,已保留你的草稿。","taskBoard.new.title":"新建看板任务","taskBoard.new.close":"关闭弹窗","taskBoard.new.titleLabel":"任务标题 *","taskBoard.new.titlePlaceholder":"例如:实现用户设置缓存层","taskBoard.new.priority":"优先级","taskBoard.new.workspaceTarget":"目标工作区","taskBoard.new.currentWorkspace":"当前工作区","taskBoard.new.descriptionContext":"描述 / 需求背景","taskBoard.new.descriptionPlaceholder":"背景、验收标准或补充说明…","taskBoard.new.initialPrompt":"初始 Agent 提示词(可选)","taskBoard.new.initialPromptPlaceholder":"触发执行时发送给 Agent 的提示词…","taskBoard.new.category":"分类","taskBoard.new.categoryPlaceholder":"功能、想法、改进…","taskBoard.new.associateSession":"关联已有会话(可选)","taskBoard.new.noSession":"-- 未关联会话(解耦) --","taskBoard.new.cancel":"取消","taskBoard.new.create":"创建任务卡","taskBoard.error.operationFailed":"看板操作失败。","taskBoard.error.workspaceRequired":"请选择此需求所属的工作区。","taskBoard.error.workspaceUnauthorized":"当前视图无权访问所选工作区。","taskBoard.error.invalidPresentationStatus":"此状态仅属于原型展示,不适用于 Own Work。","taskBoard.error.requestFailed":"{code}:{message}","taskBoard.error.invalidListResponse":"看板列表响应无效。","taskBoard.error.paginationDidNotAdvance":"看板分页未能继续。","taskBoard.error.overviewIncomplete":"看板总览缺少此工作区。","taskBoard.error.overviewPageIncomplete":"看板总览返回的工作区页面不完整。","taskBoard.error.cardGone":"此卡片已不在当前视图中。","taskBoard.error.invalidDetailResponse":"看板详情响应无效。","taskBoard.error.invalidPreviewResponse":"看板存储预览响应无效。","taskBoard.error.createWorkspaceMismatch":"待创建任务属于另一个工作区,请先处理后再切换工作区。","taskBoard.error.serviceUnavailable":"看板服务尚未连接。","taskBoard.error.reloadBeforeEdit":"请重新加载任务详情后再编辑。","taskBoard.error.refreshBeforeMove":"请先刷新看板,再移动此卡片。","taskBoard.error.associatedManagerDisposed":"关联 Todo 管理器已释放。","taskBoard.error.openAssociatedSession":"无法打开关联会话。","taskBoard.error.createAssociatedTodo":"创建关联 Todo 来源需要会话客户端。","taskBoard.error.associatedSession":"无法加载关联会话:{detail}","taskBoard.error.cardIssue":"{message}","cron.panel.title":"定时任务","cron.panel.count.one":"{count} 个任务","cron.panel.count.other":"{count} 个任务","cron.panel.refresh":"刷新","cron.panel.loadMore":"加载更多定时任务","cron.panel.loading":"正在加载定时任务…","cron.panel.empty.title":"暂无定时任务","cron.panel.empty.description":"智能体在执行中创建的循环或单次定时任务会显示在这里。","cron.panel.error.title":"定时任务加载失败","cron.status.running":"已启用","cron.status.paused":"已暂停","cron.status.stale":"超期","cron.kind.recurring":"循环","cron.kind.oneShot":"单次","cron.nextFire":"下次触发","cron.lastFire":"上次触发","cron.neverRun":"从未","cron.action.pause":"暂停","cron.action.resume":"恢复","cron.action.run":"立即触发","cron.action.delete":"删除","cron.delete.title":"删除定时任务","cron.delete.body":"将删除「{schedule}」,该任务不会再次触发。","cron.toast.paused":"已暂停定时任务","cron.toast.resumed":"已恢复定时任务","cron.toast.triggered":"已触发一次定时任务","cron.toast.deleted":"已删除定时任务","cron.error.notFound":"该任务已不存在,列表已刷新。","cron.error.ambiguous":"该任务 ID 在多个会话中存在,请刷新后重试。","st.prompt.title":"提示词字段","st.prompt.expand":"编辑提示词字段","st.prompt.hint":"覆写已注册的提示词字段、添加可复用变量,或加载外部提示词配置文件。","st.prompt.files":"覆写文件","st.prompt.filePath":"覆写文件路径","st.prompt.filePathPlaceholder":"提示词配置文件相对路径","st.prompt.fileRequired":"文件路径不能为空。","st.prompt.addFile":"添加覆写文件","st.prompt.removeFile":"移除覆写文件 {name}","st.prompt.emptyFiles":"还没有外部覆写文件。","st.prompt.variables":"变量","st.prompt.variableName":"变量名","st.prompt.variableValue":"变量内容","st.prompt.variableNamePlaceholder":"search_guidance","st.prompt.variableValuePlaceholder":"填写简短的搜索说明…","st.prompt.addVariable":"添加变量","st.prompt.removeVariable":"移除变量 {name}","st.prompt.fields":"字段覆写","st.prompt.fieldName":"提示词字段 ID","st.prompt.fieldValue":"替换文案","st.prompt.fieldNamePlaceholder":"tool.web-search.guidance","st.prompt.fieldValuePlaceholder":"${search_guidance}","st.prompt.addField":"添加字段覆写","st.prompt.removeField":"移除字段覆写 {name}","st.prompt.emptyFields":"还没有内联字段覆写。","st.prompt.preview":"预览","st.prompt.previewFields":"内联字段预览","st.prompt.previewUnavailable":"草稿通过校验后才能预览。","st.prompt.save":"保存提示词字段","st.prompt.saved":"提示词字段已保存并由服务器回显。","st.prompt.invalid":"请先修正标出的提示词字段。","st.prompt.nameRequired":"名称不能为空。","st.prompt.nameInvalid":"请使用合法变量名或以点分隔的小写字段 ID。","st.prompt.duplicateName":"名称“{name}”重复使用。","st.prompt.summaryVariables.one":"{count} 个变量","st.prompt.summaryVariables.other":"{count} 个变量","st.prompt.summaryFields.one":"{count} 个字段","st.prompt.summaryFields.other":"{count} 个字段","st.prompt.emptyVariables":"还没有变量——在字段中用 ${name} 引用它们。","st.subagentLimits.title":"子智能体执行限制","st.subagentLimits.timeout":"超时时长(小时,0 表示不限时)","st.subagentLimits.direct":"直属在途子智能体上限(默认 16,0 表示不限)","st.subagentLimits.total":"主会话树全部在途子智能体上限(默认 0,不限)","st.subagentLimits.hint":"超时产品默认 2 小时,仅影响后续启动或续接,不重新计算正在运行任务的计时。直属上限只计直属在途子智能体;整树上限包含孙代、不含主智能体。超限直接拒绝,不排队。","st.subagentLimits.invalid":"请输入非负整数上限及有效的非负超时时长。","st.subagentLimits.lead":"限制子智能体能运行多久、同时运行多少个。超出上限的启动会直接拒绝,不排队。","st.subagentLimits.timeoutShort":"超时(小时)","st.subagentLimits.timeoutHelp":"默认 2,0 表示不限。对之后的启动和续接生效。","st.subagentLimits.directShort":"同时运行的直属子智能体","st.subagentLimits.directHelp":"默认 16,0 表示不限。","st.subagentLimits.totalShort":"主会话树内的子智能体","st.subagentLimits.totalHelp":"默认 0(不限)。包含孙级,不含主智能体。","st.agentTodo.title":"Agent 独立 Todo 清单","st.agentTodo.hint":"每个 Agent 在工作时维护自己的 Todo 清单。这是内置行为,无需配置。","st.agentBoard.title":"任务看板","st.agentBoard.hint":"任务看板存储和 Agent 独立 Todo 都在此页管理。","agentPanel.prototypeBadge":"原型展示切片 · Agent 面板","agentPanel.runtimePendingConnect":"运行时:等待连接","agentPanel.mainBadge":"主 Agent","agentPanel.identityId":"ID: {id}","agentPanel.unknown":"未知","agentPanel.unknownModel":"未知模型","agentPanel.switchAgent":"切换 Agent","agentPanel.contextUsageLimit":"上下文占用 / 上限","agentPanel.costLabel":"费用:","agentPanel.totalTokensLabel":"累计Tokens:","agentPanel.partialBadge":"部分统计","agentPanel.partialCost":"部分费用","agentPanel.compactionLabel":"压缩次数","agentPanel.cacheReadWriteLabel":"缓存读/写:","agentPanel.compactionCount.one":"{count} 次","agentPanel.compactionCount.other":"{count} 次","agentPanel.collapseMetrics":"收起度量明细","agentPanel.inOutDetails":"细看 In/Out 分布","agentPanel.usageDashboard":"详细用量看板","agentPanel.inputTokensLabel":"输入 Tokens (Input):","agentPanel.outputTokensLabel":"输出 Tokens (Output):","agentPanel.treeSummary":"整棵 Agent 树总计","agentPanel.treeCounts":"{active} 运行中 / {total} 全部","agentPanel.treeTokens":"整树总 Tokens:","agentPanel.treeCost":"整树总费用:","agentPanel.treeCacheRate":"整树缓存率:","agentPanel.cacheRate":"缓存率","agentPanel.cacheRateLabel":"缓存率:","agentPanel.cacheRawTooltip":"缓存读: {read} · 缓存写: {write}","agentPanel.label.executor":"执行器","agentPanel.label.model":"模型","agentPanel.label.effort":"思考强度","agentPanel.sourceLabel":"来源:","agentPanel.fileLabel":"文件:","agentPanel.profileDescription":"Profile 描述","agentPanel.detailTitle":"详情","agentPanel.detailClose":"关闭详情","agentPanel.profileDetail":"Profile 与身份详情","agentPanel.toolDetail":"工具详情","agentPanel.skillDetail":"技能详情","agentPanel.subagentDetail":"可派子 Agent 详情","agentPanel.viewDetails":"查看详情","agentPanel.internalId":"内部 ID","agentPanel.runtimeContext":"运行上下文","agentPanel.liveContext":"实时会话","agentPanel.draftContext":"草稿规划","agentPanel.scope":"作用域","agentPanel.scopeWorkspace":"工作区专属","agentPanel.scopeGlobal":"全局通用","agentPanel.argumentHint":"参数说明","agentPanel.approvalNotice":"执行前需人工确认授权。","agentPanel.readOnlyNotice":"只读工具,不修改工作区文件或发起外部写操作。","agentPanel.launchAllowedNotice":"策略检查通过,当前会话允许分派。","agentPanel.launchBlockedNotice":"当前策略或执行模式拦截该子 Agent 分派。","agentPanel.defaultsMissingNotice":"缺少必需的默认模型或运行时配置。","agentPanel.todosLoading":"正在读取关联会话的待办…","agentPanel.todosUnavailable":"待办暂不可用","agentPanel.todosError":"待办读取失败","agentPanel.todoTitle":"待办","agentPanel.newTodo":"+ 新建","agentPanel.currentGoal":"当前执行目标","agentPanel.noTodos":"该 Agent 暂无待办事项","agentPanel.markTodo":"标记待办 {title}","agentPanel.capabilitiesTitle":"能力分类与分派","agentPanel.generalCategory":"通用","agentPanel.registeredTools":"已注册工具","agentPanel.enabledOfTotal":"{enabled}/{total}","agentPanel.noRegisteredTools":"该 Agent 未注册工具","agentPanel.capability.enabled":"启用","agentPanel.capability.approvalRequired":"需人工审批","agentPanel.capability.disabled":"已禁用","agentPanel.capability.disconnected":"未连接","agentPanel.capability.unknown":"未知","agentPanel.readOnly":"只读","agentPanel.unavailableReason":"不可用原因: {reason}","agentPanel.error.validationFailed":"无法加载 Agent 能力:请求无效。","agentPanel.error.workspaceNotFound":"无法加载 Agent 能力:找不到工作区。","agentPanel.error.agentProfileNotFound":"无法加载 Agent 能力:找不到 Agent 配置档。","capabilityReason.skill_tool_inactive":"此 Agent 未启用技能工具。","capabilityReason.skill_model_invocation_disabled":"此技能已禁止模型调用。","capabilityReason.snapshot_inventory_only":"快照仅包含能力清单;实时运行时与调用审批不可用。","capabilityReason.tool_policy_disabled":"已被生效的工具策略禁用。","capabilityReason.runtime_not_connected":"所需运行时能力未连接。","capabilityReason.activation_condition_unmet":"工具激活条件未满足。","capabilityReason.approval_pending":"等待审批后才能调用此工具。","capabilityReason.session_or_agent_not_live":"会话或 Agent 当前未在线,无法读取派遣能力。","capabilityReason.persisted_metadata_unavailable":"持久化的 Agent 能力元数据不可用。","capabilityReason.persisted_profile_unavailable":"实时会话目录中找不到持久化的 Agent 配置档。","capabilityReason.snapshot_launch_unavailable":"Agent 当前未在线;快照能力无法启动子 Agent。","capabilityReason.agent_run_inactive":"此 Agent 未启用 AgentRun。","capabilityReason.agent_run_draft_disabled":"草稿配置档或全局工具策略已禁用 AgentRun。","capabilityReason.draft_inventory_only":"这只是草稿能力清单;尚未评估运行时连接和调用审批。","capabilityReason.draft_policy_disabled":"已被草稿配置档或全局工具策略禁用。","capabilityReason.strict_subagent_policy_blocked":"已被严格子 Agent 策略阻止。","capabilityReason.executor_binding_unavailable":"执行器绑定不可用。","capabilityReason.executor_route_binding_unavailable":"执行器路由绑定不可用。","capabilityReason.model_not_configured":"未绑定默认模型;请显式指定模型。","capabilityReason.scoped_profile_unavailable":"作用域配置档不可用。","capabilityReason.binding_constraints_unsatisfied":"默认绑定不满足模型、思考强度或执行器约束。","capabilityReason.default_binding_unavailable":"默认模型或执行器绑定不可用。","capabilityReason.research_readonly_dispatch_forbidden":"仅研究 Agent 不能分派子 Agent。","capabilityReason.plan_resume_forbidden":"计划模式下 AgentRun 不能恢复已有子 Agent;请先退出计划模式。","capabilityReason.native_executor_required":"仅研究分派必须使用原生执行器。","agentProfileDiagnostic.agent_profile_source.invalid_path":"来源路径无效。","agentProfileDiagnostic.agent_profile_source.path_escape":"来源路径超出贡献根目录。","agentProfileDiagnostic.agent_profile_source.symlink_escape":"来源路径经符号链接解析后超出贡献根目录。","agentProfileDiagnostic.agent_profile_source.not_private":"来源配置档不是私有配置档。","agentProfileDiagnostic.agent_profile_source.unavailable":"来源配置档不可用。","agentProfileDiagnostic.agent_profile_source.invalid_profile":"来源配置档无效。","agentProfileDiagnostic.agent_profile_source.cycle":"检测到来源配置档依赖循环。","agentProfileDiagnostic.agent_profile_source.depth_exceeded":"来源配置档依赖层级过深。","agentPanel.parametersSchema":"参数 Schema & 描述","agentPanel.noParameters":"无参数要求","agentPanel.parameters":"参数: {summary}","agentPanel.skills":"技能 (Skills)","agentPanel.skillsCount":"{workspace} 专属 · {global} 通用","agentPanel.moreSkills":"+{count} 更多","agentPanel.workspaceSkills":"工作区专属技能 ({count})","agentPanel.noWorkspaceSkills":"无工作区专属技能","agentPanel.globalSkills":"全局通用技能 ({count})","agentPanel.noGlobalSkills":"无全局通用技能","agentPanel.path":"路径: {path}","agentPanel.viewSkillMd":"查看 SKILL.md","agentPanel.hideSkillMd":"收起 SKILL.md","agentPanel.loadingSkillMd":"正在读取 SKILL.md…","agentPanel.skillType":"类型: {type}","agentPanel.skillTypeLabel":"类型","agentPanel.disableModelInvocationBadge":"仅手动执行","agentPanel.promptCommandBadge":"斜杠命令","agentPanel.profileSection.identity":"身份与来源","agentPanel.profileSection.intent":"意图与定位","agentPanel.profileSection.model":"模型与推理","agentPanel.profileSection.tools":"工具与策略","agentPanel.profileSection.subagents":"派生能力","agentPanel.profileSection.raw":"原始文件","agentPanel.unrestricted":"未限制","agentPanel.noToolsAllowed":"未允许任何工具","agentPanel.value.field":"字段","agentPanel.value.declared":"声明值","agentPanel.value.effective":"生效值","agentPanel.locked":"被 Profile 锁定,会话内不可更改","agentPanel.provenanceCol":"声明值 ← 生效值 ← 来源","agentPanel.subagents":"可派遣子智能体 (Subagents)","agentPanel.subagentPolicy":"派遣策略","agentPanel.subagentPolicy.advisory":"建议模式","agentPanel.subagentPolicy.strict":"严格模式","agentPanel.category.osBackends":"文件与终端","agentPanel.category.threadCommunication":"线程通信","agentPanel.category.agentTask":"后台任务","agentPanel.category.taskBoard":"任务看板","agentPanel.category.nbSearch":"联网搜索","agentPanel.category.questionTools":"提问","agentPanel.category.toolSelect":"工具选择","agentPanel.category.subagent":"子智能体","agentPanel.category.goal":"目标","agentPanel.category.plan":"计划","agentPanel.category.todo":"待办","agentPanel.category.skill":"技能","agentPanel.category.edit":"编辑","agentPanel.category.memory":"记忆","agentPanel.category.history":"历史","agentPanel.category.browser":"浏览器","agentPanel.category.message":"消息","agentPanel.category.builtin":"内置","agentPanel.category.other":"其他","agentPanel.sourceId.builtin":"内置","agentPanel.sourceId.user":"用户","agentPanel.sourceId.workspace":"工作区","agentPanel.sourceId.custom":"自定义","agentPanel.sourceId.extra":"扩展目录","agentPanel.sourceId.plugin":"插件","agentPanel.sourceId.explicit":"显式指定","agentPanel.profileDraftMissing":"当前工作区没有名为“{profile}”的配置档。","agentPanel.detailBack":"返回","agentPanel.allowedCount":"{allowed}/{total} 允许启动","agentPanel.noSubagents":"当前无允许派遣的 Subagents","agentPanel.allowed":"允许","agentPanel.blocked":"受阻","agentPanel.executor":"执行器: {value}","agentPanel.model":"模型: {value}","agentPanel.default":"默认","agentPanel.thinkingEffort":"思考强度: {value}","agentPanel.effortSource.forced":"强制","agentPanel.effortSource.adjusted":"已调整","agentPanel.profileFileBadge":"临时文件","agentPanel.routeDetachedBadge":"路由已脱离","agentPanel.researchReadonly":"仅限研究 · 只读执行","agentPanel.defaultsMissing":"默认配置缺失: {reason}","agentPanel.notReady":"未就绪","agentPanel.admissionBlocked":"准入拦截: {reason}","agentPanel.activeExecution":"当前执行(此 Agent)","agentPanel.activeCount":"{count} 项活动","agentPanel.noActiveWork":"没有正在执行的子智能体或任务。","agentPanel.runningChildren":"运行中的子智能体 ({count})","agentPanel.activeStep":"当前步骤","agentPanel.currentPlan":"当前计划","agentPanel.elapsedSeconds":"{seconds}秒","agentPanel.workboard":"工作看板","agentPanel.boardSummary":"进行中 {inProgress} · 共 {total}","agentPanel.noBoardRequirement":"没有置顶的活动看板要求","agentPanel.quickCreateBoardTask":"快速新建看板任务","agentPanel.openBoard":"打开完整看板","agentPanel.usageUnavailable":"用量度量不可用","agentPanel.usageTitle":"Agent 上下文与度量","agentPanel.usageDetails":"用量详情","agentPanel.contextWindow":"上下文窗口","agentPanel.agentCost":"Agent 费用","agentPanel.totalTokens":"累计 Tokens","agentPanel.inputOutput":"{input} 输入 · {output} 输出","agentPanel.cacheReadWrite":"缓存 读 / 写","agentPanel.treeActiveCounts":"{active} 活跃 / {total} 总数","diagnostics.title":"派遣能力","diagnostics.live":"当前会话 / 智能体 · 工具可见目标","diagnostics.draft":"草稿规划参考 · 非实时准入","diagnostics.loading":"正在读取派遣能力…","diagnostics.error":"无法读取派遣能力","agentPanel.planLoadFailed":"无法读取计划","diagnostics.unavailable":"派遣能力不可用","diagnostics.empty":"没有工具可见的派遣目标。","diagnostics.model":"默认模型","diagnostics.effort":"默认思考强度","diagnostics.source":"来源","diagnostics.executor":"执行器","diagnostics.defaultsReady":"默认配置可用","diagnostics.defaultsMissing":"默认配置不可用","diagnostics.allowed":"当前允许启动","diagnostics.blocked":"当前禁止启动","diagnostics.preferred":"推荐目标","diagnostics.allowedNonpreferred":"允许偏离推荐名单","diagnostics.unconfigured":"未配置推荐","diagnostics.policy.fixed":"由策略固定","diagnostics.unknown":"未报告","diagnostics.readonly":"仅限研究 · 只读执行","diagnostics.source.caller-lease":"调用方租约","diagnostics.source.route":"路由","diagnostics.source.profile":"配置档","diagnostics.source.model-profile":"模型配置档","diagnostics.source.model":"模型","diagnostics.source.config":"全局配置","diagnostics.source.executor":"执行器","selection.loading":"正在校验已保存的选择… 可以继续输入。","selection.catalogError":"无法校验选择:{detail}。已保留原选择。","selection.profileInvalid":"配置档“{value}”在此目录不可用,请重选一个已启用的配置档。","selection.modelInvalid":"模型“{value}”已不可用,请重选模型。","selection.effortInvalid":"思考强度“{value}”不适用于此模型,请重选或重置。","selection.resetEffort":"使用模型默认思考强度","selection.workspaceInvalid":"工作区“{value}”不可用,请重选工作区或绝对目录。","common.cancel":"取消","common.save":"保存","common.saving":"正在保存…","common.retry":"重试","common.remove":"移除","common.close":"关闭","common.popupBlocked":"浏览器阻止了新窗口。","common.requestTimedOut":"请求超时","agentProfileCatalog.loading":"Agent 配置目录仍在加载","common.unknownError":"未知错误","select.search":"搜索…","select.noMatches":"没有匹配“{query}”的选项。","select.empty":"暂无可选项。","connect.tagline":"连接本机的 Kiki。","connect.detect":"查找本机 Kiki","connect.detecting":"正在查找 Kiki…","connect.noneFound":"Kiki 没有在这台电脑上运行。请先运行 `kiki server`,再试一次。","connect.desktopStartFailed":"Kiki 本地后端启动失败:{detail}","connect.detectNeedsDev":"自动检测需要 kiki 开发服务器(vite dev)。请手动输入服务器地址和令牌。","connect.serverUrl":"服务器地址","connect.urlPlaceholder":"http://127.0.0.1:58627(留空 = 代理 {target})","connect.token":"Bearer 令牌","connect.connecting":"正在连接…","connect.connect":"连接","connect.back":"返回","connect.deepLinkBefore":"支持深链接:","connect.deepLinkOr":" 或 ","connect.deepLinkAfter":"。连接仅保存在此浏览器中。","connect.otherMachine":"连接其他机器…","connect.accessToken":"访问令牌","connect.accessTokenHelp":"服务器启动时会打印,也保存在那台机器的 ~/.kiki/server.token 中。","connect.accessTokenWhere":"在哪里找到?","app.reconnecting":"连接中断 — 正在重连…","app.disconnected":"已与服务器断开连接,重连后将继续接收事件。","app.closeSidebar":"关闭侧栏","app.unexpectedError":"Kiki 遇到了意外错误。","app.reload":"重新加载","sidebar.newSession":"新会话","sidebar.navAria":"会话导航","sidebar.listAria":"会话列表","sidebar.searchPlaceholder":"搜索会话…","sidebar.searchAria":"搜索会话","sidebar.clearSearch":"清除搜索","sidebar.searching":"正在搜索…","sidebar.searchFailed":"搜索失败","sidebar.noMatches":"没有匹配“{query}”的结果。","sidebar.indexBuilding":"索引正在构建({indexed}/{total} 个会话)— 结果可能不完整。","sidebar.indexIncomplete":"搜索触达服务器预算上限,结果可能不完整。","sidebar.loadingSessions":"正在加载会话…","sidebar.loadFailed":"无法加载会话","sidebar.noSessions":"还没有会话 — 在上方新建一个吧。","sidebar.untitled":"未命名会话","sidebar.archived":"已归档","sidebar.showArchived":"显示已归档","sidebar.loadMore":"加载更多会话","sidebar.loadingMore":"正在加载…","sidebar.searchLoadMore":"加载更多结果","sidebar.settings":"设置","sidebar.disconnect":"断开连接","sidebar.connStatusAria":"连接状态;打开连接设置","sidebar.sessionActionsFor":"会话操作:{title}","sidebar.pinSessionFor":"置顶「{title}」","sidebar.unpinSessionFor":"取消置顶「{title}」","sidebar.pinWorkspace":"置顶该工作区","sidebar.unpinWorkspace":"取消置顶该工作区","sidebar.pinWorkspaceFor":"置顶工作区「{name}」","sidebar.unpinWorkspaceFor":"取消置顶工作区「{name}」","sidebar.workspaceAll":"全部工作区","sidebar.collapseSidebar":"折叠侧栏","sidebar.expandSidebar":"展开侧栏","sidebar.resizeAria":"拖拽调整侧栏宽度;双击复位","sidebar.groupByTime":"按时间","sidebar.groupByWorkspace":"按工作区","sidebar.sortUpdatedDesc":"最近更新","sidebar.sortUpdatedAsc":"最早更新","sidebar.sortTitle":"按名称","sidebar.groupUngrouped":"未分组","sidebar.groupPinned":"已置顶","sidebar.groupToday":"今天","sidebar.groupYesterday":"昨天","sidebar.groupWeek":"7 天内","sidebar.groupMonth":"30 天内","sidebar.groupOlder":"更早","sidebar.emptyShowArchived":"显示已归档会话","sidebar.viewMenu":"视图选项","sidebar.viewWorkspaceHeading":"工作区","sidebar.viewGroupHeading":"分组","sidebar.viewSortHeading":"排序","sidebar.manageWorkspaces":"管理工作区…","sidebar.filtersAria":"生效的筛选","sidebar.filterArchived":"含归档","sidebar.clearWorkspaceFilter":"显示全部工作区","sidebar.clearArchivedFilter":"隐藏已归档会话","sidebar.status.approval":"待批准","sidebar.status.question":"待回答","sidebar.status.working":"运行中","sidebar.status.idle":"空闲","sidebar.ws.connecting":"连接中","sidebar.ws.closed":"已断开","menu.restore":"恢复","menu.fork":"复刻会话","menu.sideQuestion":"侧问","menu.export":"导出归档…","menu.compact":"压缩上下文","menu.undo":"撤销最后一轮…","menu.rename":"重命名…","menu.pin":"置顶","menu.unpin":"取消置顶","menu.showTopLevel":"恢复顶层显示","menu.showNested":"恢复嵌套显示","menu.archive":"归档","menu.copyLink":"复制链接","menu.copyPath":"复制路径","menu.openFolder":"打开所在文件夹","menu.openDefaultApp":"以默认程序打开","link.menuAria":"链接操作","link.open":"打开链接","link.copyLink":"复制链接","file.menuAria":"文件操作","menu.addToConversation":"添加到当前对话","menu.addToConversationNone":"先打开一个对话,才能把这个线程加进去","menu.addToConversationSelf":"这就是当前打开的对话","file.openPreview":"打开预览","file.copyPath":"复制路径","file.copyRelativePath":"复制相对路径","file.copyAbsolutePath":"复制绝对路径","file.showInFolder":"在文件夹中显示","file.openDefaultApp":"以默认程序打开","file.open":"打开","composer.contextMenuAria":"输入操作","contextMenu.cut":"剪切","contextMenu.copy":"复制","contextMenu.paste":"粘贴","contextMenu.selectAll":"全选","undo.title":"撤销最后一轮?","undo.bodyNamed":"将从“{title}”中移除最近一条用户消息和 kiki 的回复。更早的轮次会保留。","undo.bodySession":"将从此会话的历史中移除你最近的一条消息和 kiki 的回复。更早的轮次会保留。","undo.confirm":"撤销最后一轮","profile.switchTitle":"切换到 {profile}?","profile.switchBody":"新的 agent 配置档将从你在本会话发送的下一条消息起生效。","profile.switchModelReset":"本页的模型与思考强度会切到新配置档的默认值,发送前仍可再改。","profile.switchSubagents":"子智能体派发策略将随新配置档一并切换。","profile.switchConfirm":"切换配置档","profile.actionsGroup":"配置档操作","profile.rebuildMenu":"重建上下文","profile.rebuildMenuDescription":"重新加载当前配置档、提示字段、skills、指令和 plugin 注入。","profile.rebuildBusy":"请等待当前轮次结束后再重建上下文。","profile.rebuildTitle":"重建此会话的上下文?","profile.rebuildBody":"Kiki 将从磁盘最新状态重新加载当前 Agent 的系统提示词与注入上下文。","profile.rebuildKeepsHistory":"对话消息与历史记录会保留。","profile.rebuildLatestSources":"将重建配置档、提示字段、skills、AGENTS.md 指令、plugin 注入及其他运行时注入。","profile.rebuildConfirm":"重建上下文","profile.rebuildDoneChanged":"已根据最新来源重建上下文。","profile.rebuildDoneUnchanged":"上下文已重建;各来源原本已是最新状态。","profile.rebuildFailed":"上下文重建失败:{detail}","rename.title":"重命名会话","action.exportDone":"“{title}”的归档已下载。","action.exportDoneSession":"会话归档已下载。","action.compactRequested":"已请求压缩“{title}”的上下文。","action.compactRequestedSession":"已请求压缩上下文 — 更早的内容将被摘要。","action.undoDone":"已移除“{title}”的最后一轮。","action.undoDoneSession":"已移除最后一轮。","action.forkDoneSession":"已分叉 — 正在打开副本。","action.forkFailed":"复刻失败:{detail}","btw.tabTitle":"侧问","btw.failed":"无法开始侧问:{detail}","action.exportFailed":"导出失败:{detail}","action.compactFailed":"压缩失败:{detail}","action.undoFailed":"撤销失败:{detail}","action.editFailed":"编辑失败:{detail}","action.regenerateFailed":"重新执行失败:{detail}","error.nothingToUndo":"没有可撤销的内容 — 没有更早的轮次可以回退。","error.nothingToCompact":"暂无可压缩的内容 — 历史记录太短。","error.sessionBusy":"会话正忙 — 请等当前轮次结束后再试。","error.messageActionUnavailable":"这条消息已不可编辑或重跑。","error.sessionCursorMismatch":"会话已在别处更新 — 请查看最新状态后重试。","switcher.aria":"快速切换","switcher.placeholder":"跳转到会话,或搜索消息…","switcher.recent":"最近会话","switcher.sessions":"会话","switcher.matches":"匹配消息","switcher.settings":"设置","switcher.empty":"还没有会话。","switcher.noMatches":"没有匹配“{query}”的会话。","switcher.hint":"↑↓ 移动 · Enter 打开 · Esc 关闭","toast.dismissAria":"关闭通知","shortcuts.title":"键盘快捷键","shortcuts.undo":"撤销输入编辑","shortcuts.redo":"重做输入编辑","composer.history.previous":"上一条输入","composer.history.next":"下一条输入","shortcuts.hint":"Esc 关闭本面板 · Ctrl+/ 随时随地打开","shortcuts.group.global":"全局","shortcuts.group.session":"会话","shortcuts.group.approvals":"审批","shortcuts.group.terminal":"终端","shortcuts.newSession":"新建会话","shortcuts.switcher":"快速切换","shortcuts.nextSession":"跳到另一个最近会话","shortcuts.settings":"打开设置","shortcuts.thisPanel":"本快捷键面板","shortcuts.showHide":"显示或隐藏 Kiki 窗口","shortcuts.send":"发送消息","shortcuts.newline":"输入框内换行","shortcuts.slashMenu":"技能与快捷指令菜单","shortcuts.fileMention":"引用工作区文件","shortcuts.find":"在本会话中查找(Enter / Shift+Enter 切换)","shortcuts.findNext":"下一处匹配","shortcuts.findPrevious":"上一处匹配","shortcuts.approve":"批准聚焦的待决卡片,或唯一可见的一张","shortcuts.reject":"拒绝聚焦的待决卡片,或唯一可见的一张","shortcuts.termToggle":"显示或隐藏终端面板","shortcuts.termCopy":"复制终端选区","shortcuts.termPaste":"粘贴到终端","shortcuts.termClose":"终端未聚焦时关闭终端面板","shortcuts.termEsc":"终端聚焦时 Esc 只进入 PTY","context.meter":"{percent}%","context.meterTitle":"上下文用量:{used} / {limit} — 点击查看详情","context.meterWarnTitle":"上下文 {used} / {limit} — 查看用量并按需压缩","context.meterDangerTitle":"上下文 {used} / {limit} — 已超过建议保留阈值","context.detailsHint":"详情","context.detailsTitle":"上下文详情","context.sessionUsage":"本会话累计","context.agentUsage":"子智能体累计","context.sessionUsageHint":"累计","context.usageReadFailed":"累计用量读取失败,因此不显示数字。","context.agentUsageIncomplete":"部分子智能体的用量读取失败,以下合计不完整。","context.windowTitle":"上下文窗口","context.windowHint":"当前","context.breakdownTitle":"分段明细","context.breakdownEstimated":"估算","context.system":"系统提示","context.tools":"工具定义","context.messages":"消息","context.used":"已使用","context.available":"可用","context.limit":"上限","context.compactAction":"压缩较早上下文","context.meterCompactTitle":"上下文 {used} / {limit},到 {point} 时自动压缩。点击查看详情","context.meterCompactDueTitle":"上下文 {used} 已超过压缩点 {point},下一步开始前会压缩","context.compact.layer.session":"本会话","context.compact.layer.profile":"profile「{profile}」","context.compact.layer.model":"模型","context.compact.layer.global":"全局","context.compact.layer.legacy":"内置","context.compact.sourceSession":"本会话 · {tokens}","context.compact.sourceDefault":"默认 · {tokens}({layer})","context.compact.remaining":"距离自动压缩还有 {tokens}。","context.compact.belowIdle":"低于当前用量,回复下一条消息前会先压缩。","context.compact.belowRunning":"低于当前用量,下一步开始前会压缩。","context.compact.reserve":"压缩点之上预留 {tokens}。","context.compact.limitTick":"上限 {tokens}","context.compact.usableOfWindow":"可用 {usable} / 窗口 {window}","context.compact.locked":"窗口太小,无法再调整压缩点。","context.compact.appliesNextStep":"从下一步开始生效,不会立即压缩。","context.compact.clampedCeil":"已调整到 {tokens}(可调上限)。","context.compact.clampedFloor":"已调整到 {tokens}(这个模型的最低压缩点)。","context.compact.inputInvalid":"请输入 400k、400000 这样的 token 数,或 73% 这样的比例。","context.compact.inputLabel":"压缩点","context.compact.inputHint":"占可用窗口的 {percent}。可以输入 400k、400000 或 73%。","context.compact.sliderLabel":"自动压缩点","context.compact.sliderValue":"自动压缩点 {tokens},共 {limit}","context.compact.saveFailed":"压缩点没有保存成功,请重试。","context.compact.profileReadOnly":"内置 profile 不能修改,可以改存为模型默认或全局默认。","context.compact.menuLabel":"设为默认","context.compact.saveModel":"设为 {model} 的默认({value})","context.compact.saveProfile":"设为 profile「{profile}」的默认({value})","context.compact.profileBuiltin":"内置 profile 不能修改","context.compact.saveGlobal":"设为全局默认({value})","context.compact.saveGlobalHint":"按窗口比例保存,由这里的 {tokens} 换算","context.compact.reset":"恢复默认","context.compact.resetTo":"恢复默认({tokens},来自{layer})","context.compact.target.model":"{model} 的默认","context.compact.target.profile":"profile「{profile}」的默认","context.compact.target.global":"全局默认","context.compact.saved":"已设为{target}:{value}。","context.compact.savedGlobal":"已设为{target}:{value},会影响所有没有单独设置的模型。","context.compact.savedShadowed":"已存为{target}({value}),但{layer}设了 {layerValue},本会话仍按 {tokens}。","context.compact.undo":"撤销","context.compact.presetsLabel":"常用压缩点","context.strategy.title":"上下文占满时","context.strategy.groupLabel":"上下文占满时的处理方式","context.strategy.option.summarize":"摘要","context.strategy.option.fresh":"重新开始","context.strategy.option.auto":"自动","context.strategy.hint.summarize":"默认。更早的消息会替换为摘要。","context.strategy.hint.fresh":"清空上下文,从智能体的工作笔记接着做。","context.strategy.hint.auto":"工作笔记足以覆盖当前工作时重新开始,否则生成摘要。","context.strategy.source.session":"本会话","context.strategy.source.profile":"来自 profile「{profile}」","context.strategy.source.profileUnnamed":"来自 profile","context.strategy.source.global":"全局默认","context.strategy.source.default":"内置默认","context.strategy.source.subagent":"子智能体默认","context.strategy.source.executor":"执行器设置","context.strategy.menuLabel":"策略来源","context.strategy.saveGlobal":"将 {strategy} 保存为全局默认","context.strategy.reset":"使用继承的设置","context.strategy.savedGlobal":"{strategy} 现在是全局默认。","context.strategy.saveFailed":"更改策略失败,请再试一次。","context.strategy.appliesNext":"从下一次压缩起生效。","context.strategy.executorLocked":"此智能体的执行器管理自己的上下文。","context.strategy.subagentReadOnly":"每个会话的更改只对主智能体生效。","context.strategy.compactWith":"用以下方式立即压缩…","context.strategy.compactOptionsLabel":"选择立即压缩的方式","context.strategy.compactRequested.summarize":"已请求压缩。更早的上下文将生成摘要。","context.strategy.compactRequested.fresh":"已请求压缩。上下文将从工作笔记重新开始。","pending.count.one":"{count} 个会话等你处理","pending.count.other":"{count} 个会话等你处理","pending.badgeTitle":"有待批准或待回答的会话","pending.popoverTitle":"等你处理","pending.kind.approval":"待批准","pending.kind.question":"待回答","composer.mode.manual":"手动","composer.mode.manualHint":"每个操作前都先问你","composer.mode.auto":"自动","composer.mode.autoHint":"常规操作自动批准,敏感访问先询问","composer.mode.review":"替我审批","composer.mode.yolo":"放行","composer.mode.yoloHint":"全部放行,但仍可能提问","composer.modeAria":"模式","composer.planAria":"计划","composer.plan":"计划","composer.planHint":"计划模式 — kiki 先给出方案再动手","composer.planAuto":"自动计划模式","composer.planAutoHint":"开启:自由进出计划模式;关闭:进出都需要审批","composer.goal":"目标","composer.goalObjective":"目标描述","composer.goalObjectivePlaceholder":"目标(可选)","composer.goalNoteBefore":"将随下一条消息作为 ","composer.goalNoteAfter":" 发送。","composer.goalStatus.active":"进行中","composer.goalStatus.paused":"已暂停","composer.goalStatus.blocked":"受阻","composer.goalStatus.complete":"已完成","composer.goalControl.pause":"暂停","composer.goalControl.resume":"继续","composer.goalControl.cancel":"终止","composer.modelTitle":"模型 — 来源:{source}","composer.modelSource.server-default":"服务器默认","composer.modelSource.local-default":"本机默认","composer.modelSource.session":"会话","composer.modelSource.override":"手动覆盖","composer.modelAria":"模型","composer.inheritDefault":"继承默认","composer.inheritSession":"跟随会话:{model}","composer.inheritServer":"跟随默认:{model}","composer.inheritLocal":"跟随默认:{model}","composer.unknown":"未知","composer.sessionDefaultSuffix":" · 会话默认","composer.effortTitle":"思考强度","composer.effortHeading":"思考强度","composer.modePermissionHeading":"权限","composer.modeSegmentSeparator":" · ","composer.goalOpen":"目标…","composer.goalChipAria":"目标 — {status}","composer.goalModeTitle":"目标模式——下一条消息将成为会话目标","composer.goalArmedChip":"目标 · 这条消息将成为目标内容","composer.goalArmedAria":"目标模式已开启——下一条消息将成为会话目标","composer.goalDisarmAria":"关闭目标模式","composer.permAria":"审批方式","composer.perm.manual":"每步询问","composer.perm.manualHint":"安全清单以外的操作都先问你","composer.perm.auto":"自动","composer.perm.autoHint":"自主工作;敏感或外部操作前先问你","composer.perm.review":"替我审批","composer.perm.reviewHint":"与自动相同,但先交给审查模型判断;拿不准时才问你","composer.perm.yolo":"完全放行","composer.perm.yoloHint":"全部自动批准,包括敏感文件","composer.runModeHeading":"模式","composer.runMode.normal":"普通","composer.runMode.normalHint":"逐轮处理","composer.runMode.plan":"计划","composer.runMode.planHint":"先出方案再动手","composer.runMode.goal":"目标","composer.runMode.goalHint":"持续推进,直到完成目标","composer.runModeClear":"回到普通模式","composer.planGateFree":"计划模式进出免审阅","composer.planGateFreeHint":"进入和退出计划模式会等你批准","composer.planGateFreeAuto":"当前{mode}:不会等你审阅计划","composer.planGateFreeOpen":"模型可自主进出计划模式","composer.goalObjectiveNext":"你的下一条消息","composer.addMenuAria":"添加与操作","composer.addMenu.attach":"添加文件","composer.addMenu.mode":"模式","composer.addMenu.rebuild":"重建上下文","composer.addMenu.contextGroup":"添加上下文","composer.addMenu.sessionGroup":"会话","composer.addMenu.attachHint":"或拖放、粘贴","composer.addMenu.skills":"技能","composer.addMenu.mention":"引用文件","composer.addMenu.mentionHint":"会随消息以 @路径 发送。","composer.addMenu.files":"文件","composer.addMenu.search":"搜索技能、文件、主机","composer.addMenu.searchSkills":"搜索技能","composer.addMenu.searchFiles":"搜索文件","composer.addMenu.noMatch":"没有匹配“{query}”的结果。","composer.addMenu.skillsLoading":"正在加载技能…","composer.addMenu.skillsFailed":"无法加载技能。","composer.addMenu.skillsEmpty":"此工作区没有技能。","composer.skillChip":"技能","composer.removeSkill":"移除技能 {name}","composer.agentDefaultName":"Kiki","composer.agentDefaultOption":"Kiki(默认)","composer.agentPendingSuffix":"{name} · 下一条消息起","composer.modelProvenance.override":"本条消息指定","composer.modelProvenance.session":"来自本会话","composer.modelProvenance.server-default":"服务器默认","composer.modelProvenance.local-default":"本设备默认","composer.modelResetDefault":"恢复默认","composer.modelCurrentBadge":"当前","composer.remoteTarget":"发送到 {label}","composer.replyingTo":"回复 {agent}","tray.aria":"等你处理","tray.title":"等你处理","tray.approvals.one":"{count} 项待批准","tray.approvals.other":"{count} 项待批准","tray.questions.one":"{count} 个待回答","tray.questions.other":"{count} 个待回答","tray.more.one":"还有 {count} 项","tray.more.other":"还有 {count} 项","tray.later":"稍后","tray.laterTitle":"稍后再答——智能体会继续工作","tray.showInTimeline":"在时间线中查看","tray.from":"来自 {name}","goal.cardAria":"会话目标","goal.followUp":"追加时机 · {timing}","goal.edit":"编辑","goal.editTitle":"编辑目标、完成条件或追加时机","goal.pause":"暂停","goal.pauseTitle":"暂停目标——恢复前不再发起后续轮次","goal.resume":"继续","goal.resumeTitle":"恢复目标并继续执行","goal.resumeBlockedTitle":"恢复受阻目标并发起新的后续轮次","goal.resumeConfirm":"确认继续目标?","goal.cancel":"取消","goal.actionsAria":"目标操作","queue.rowActionsAria":"排队消息操作","goal.cancelTitle":"取消目标——不再驱动后续轮次","goal.cancelConfirm":"确认取消目标?","goal.editObjective":"目标","goal.editCriterion":"完成条件(可选)","goal.editTiming":"追加时机","goal.conflict":"目标已在别处更新——表单已载入最新内容,请检查后重新保存。","goal.editFailed":"无法更新目标:{detail}","goal.actionFailed":"目标操作失败:{detail}","composer.attachAria":"添加附件","composer.attachTitle":"添加图片或文件","composer.agentProfileAria":"Agent 配置档","composer.agentProfileTitle":"Agent 配置档 — 本会话以哪套人格与工具集运行","composer.agentProfilePendingTitle":"配置档切换待生效 — 将从你的下一条消息起生效","composer.noAgentProfiles":"(无可用 agent 配置档)","composer.profileGroupMain":"主配置档","composer.profileGroupOther":"更多配置档","composer.profileSearchPlaceholder":"搜索配置档…","composer.profileEffortBadge":"思考强度 · {effort}","composer.modelSearchPlaceholder":"搜索模型…","composer.modelCompactAt":"{tokens} 自动压缩","composer.modelNoVision":"不支持视觉","composer.placeholder":"让 kiki 做点什么…","composer.placeholderBusy":"继续指挥 kiki — 它工作时消息会排队…","composer.placeholderBusySendsNow":"补充到当前轮次 — 当前这一步结束后读取…","harness.markTitle":"运行于 {engine}","harness.panelTitle":"本会话由 {engine} 运行","harness.capsLabel":"引擎支持的能力","harness.notNegotiated":"引擎启动时 Kiki 才能读到它支持哪些能力;发一条消息后这里会显示。","harness.cap.native_steering":"轮次中插话","harness.cap.image":"图片","harness.cap.audio":"音频","harness.cap.fork":"分叉","harness.cap.question_form":"带选项的提问","harness.cap.plan_approval":"计划审阅","harness.cap.kiki_subagents":"Kiki 子智能体","harness.cap.yes":"支持","harness.cap.no":"不支持","harness.cap.unknown":"未报告","harness.cap.on":"已开启","harness.cap.off":"关闭","harness.fromHandshake":"来自引擎最近一次与 Kiki 的握手。","harness.manage":"管理外部引擎","composer.engineNoImages":"本会话的 {engine} 不接收图片。","composer.engineModelTitle":"{model} — 由智能体档案设置,{engine} 提供","composer.engineModelDefault":"引擎默认","composer.abortTitle":"停止此轮","composer.sendTitle":"发送(Enter)","composer.sendTitleCmdEnter":"发送(⌘/Ctrl+Enter)","composer.queueTitle":"加入队列(Enter)","composer.queueTitleCmdEnter":"加入队列(⌘/Ctrl+Enter)","composer.sendAria":"发送消息","composer.queueAria":"加入队列","composer.sendNowAria":"送入当前轮次","composer.sendNowTitle":"送入正在进行的轮次,当前这一步结束后读取(Enter)","composer.sendNowTitleCmdEnter":"送入正在进行的轮次,当前这一步结束后读取(⌘/Ctrl+Enter)","composer.sendTimingAria":"发送时机","composer.sendTiming.send":"发送","composer.sendTiming.sendHint":"默认时机:{timing}","composer.sendTiming.now":"立即发送","composer.sendTiming.nowHint":"送入当前轮次,当前这一步结束后读取","composer.sendTiming.timed":"{timing}发送","composer.footerBase":"Enter 发送 · Shift+Enter 换行","composer.footerBaseCmdEnter":"⌘/Ctrl+Enter 发送 · Enter 换行","composer.working":"正在工作","composer.workingLastResponse":"正在工作 · 最近响应 {ago}","composer.continuing":"另有 {count} 项继续运行","composer.queued":"排队中","composer.queuedWait":"排队中 · 已等 {seconds} 秒","composer.queuedOpen":"查看原因","composer.queuedTitle":"请求排队中","composer.queuedBody":"当前请求正在等待治理许可,许可就绪后将自动继续执行。","composer.queuedWaited":"已等待:{seconds} 秒","composer.queuedModel":"模型:{model}","composer.queuedRules":"阻塞规则:{rules}","composer.queuedUsageLink":"在用量中管理限制规则","composer.sendNowHint":"⌘/Ctrl+Enter 立即发送","composer.sendNowHintCmdEnter":"⌘/Ctrl+Shift+Enter 立即发送","composer.footerSkills":" · / 调用技能与提示命令","composer.footerShortcuts":" · / 快捷指令","composer.footerFiles":" · @ 引用文件","composer.footerHistory":" · ↑ 历史记录","composer.slash.skills":"技能与提示命令","composer.slash.shortcuts":"操作","composer.slash.empty":"没有匹配的指令 — Enter 会按普通消息发送。","composer.slash.skillsFailed":"技能加载失败 — 仅显示快捷指令。","composer.slash.submitCatalogFailed":"无法加载技能,请重试发送。","composer.slash.notActivatable":"不可激活","composer.slash.skillBadge":"技能","composer.slash.previewAria":"技能或命令详情","composer.slashAria":"斜杠指令","composer.filesAria":"文件","composer.filesHeader":"文件 — 在消息中以 @路径 引用","composer.filesFailed":"文件搜索失败 — 此会话暂无法使用文件选择器。","composer.filesSearching":"正在搜索文件…","composer.filesEmpty":"此工作区没有文件。","composer.filesNoMatch":"没有匹配“{query}”的文件。","composer.removeAttachment":"移除 {name}","composer.slash.plan":"切换下一条消息的计划模式","composer.slash.goal":"设置目标","composer.slash.new":"开始新会话","composer.slash.fork":"将此会话复刻为副本","composer.slash.btw":"顺带问一句,不打断当前会话","composer.slash.undo":"撤销最后一轮","composer.slash.compact":"将更早的上下文压缩为摘要","transcript.bridgedOrigin":"来自 {where} · {location}","transcript.bridgedOriginUnknown":"另一个主空间","transcript.bridgedLocation.local":"本机","transcript.bridgedLocation.network":"经网络","transcript.bridgedOpen":"打开 {label}","transcript.you":"你","transcript.loadEarlier":"加载更早的消息","transcript.historyUnverified":"历史完整性尚未验证","transcript.historyUnverifiedHint":"较早消息可能缺失,当前视图不代表完整记录。","transcript.copyTitle":"复制 Markdown","transcript.copy":"复制","transcript.copyLink":"链接","transcript.copyLinkTitle":"复制指向此消息的链接","transcript.edit":"编辑","transcript.editTitle":"编辑此消息并重新发送","transcript.editSubmit":"重发","transcript.editSubmitTitle":"替换原消息并从此处重新运行","transcript.editAttachmentsNote":"完整替换语义 — 附件不会继承。","transcript.regenerate":"重新执行这一轮","transcript.regenerateTitle":"重新执行这一轮:从此处撤回上下文并重新运行。已发生的文件和外部操作不会撤回。","transcript.fork":"分叉","transcript.forkTitle":"从此消息分叉出新会话","transcript.actionsBusyTitle":"当前轮次结束后可用","transcript.showMore":"展开全部","transcript.showLess":"收起","transcript.detail.showAll":"显示完整输出","transcript.detail.tailOnly":"仅显示最后几行。","transcript.detail.loading":"正在加载完整输出…","transcript.detail.failed":"无法加载完整输出。","transcript.detail.retry":"重试","transcript.content.more":"继续加载","transcript.content.loading":"正在加载剩余内容…","transcript.content.failed":"未能加载剩余内容。","transcript.content.percent":"已加载 {percent}%","transcript.content.items":"已加载 {shown} / {total} 项","transcript.content.morePending.one":"另有 {count} 处未载完","transcript.content.morePending.other":"另有 {count} 处未载完","transcript.content.actionAria":"继续加载{field}","transcript.content.entitiesFailed":"未能加载更早的条目。","transcript.content.command":"命令","transcript.content.steps":"步骤","transcript.content.remainder.summary":"还有会话内容未载入","transcript.content.remainder.session":"会话信息","transcript.content.remainder.agents":"智能体列表","transcript.content.original":"下载原文","transcript.content.originalAria":"下载{field}原文","transcript.content.originalSaving":"正在保存…","transcript.content.originalSaved":"已保存","transcript.content.originalRetry":"重试下载","transcript.content.originalCancel":"取消","media.detail.open":"加载 {name}","media.detail.loading":"正在加载 {name}…","media.detail.failed":"无法加载 {name},点击重试","media.detail.action":"加载预览","rail.tasksNotLoaded.one":"还有 {count} 个更早的任务未加载","rail.tasksNotLoaded.other":"还有 {count} 个更早的任务未加载","transcript.annotation.panelAria":"批注","transcript.annotation.commentAria":"批注内容","transcript.annotation.quoteOnly":"引用的选文","transcript.annotation.remove":"移除批注","transcript.annotation.save":"保存批注","transcript.fold.worked":"已处理","transcript.fold.steps.one":"{count} 步","transcript.fold.steps.other":"{count} 步","transcript.fold.thoughts.one":"{count} 次思考","transcript.fold.thoughts.other":"{count} 次思考","transcript.fold.notes.one":"{count} 条提示","transcript.fold.notes.other":"{count} 条提示","transcript.fold.failed":"{count} 个失败","transcript.fold.aria":"这一轮之前的工作,{summary},展开或收起","transcript.annotation.quoteOnlyChip":"引用","transcript.annotation.openAria":"打开“{quote}”上的批注","transcript.annotation.bubbleAria.one":"查看这条消息带有的 {count} 条批注","transcript.annotation.bubbleAria.other":"查看这条消息带有的 {count} 条批注","transcript.annotation.bubbleSummary":"{count} 个标注","transcript.annotation.notesAria":"这条消息的批注","annotationTray.show":"定位","annotationTray.edit":"编辑批注","annotationTray.editAria":"编辑“{quote}”上的批注","annotationTray.save":"保存","annotationTray.cancel":"取消","locate.notFound":"在这个会话里找不到那条消息。","locate.turnNotFound":"在这个会话里找不到第 {turn} 轮,可能已被撤销或压缩。","locate.loading":"正在加载更早的消息…","locate.failedLoad":"没能加载包含它的更早消息。","find.aria":"在本会话中查找","find.placeholder":"在本会话中查找","find.count":"{current} / {total}","find.noResults":"无结果","find.caseSensitive":"区分大小写","find.wholeWord":"全字匹配","find.previous":"上一处","find.next":"下一处","find.close":"关闭查找","find.earlier":"更早的消息中还有 {count} 处","find.loadedOnly":"只搜索了已加载的消息","find.lookBack":"继续往前找","find.stop":"停止","find.compacted":"另有 {count} 处在已压缩历史中","find.openGlobal":"在全局搜索中查看","transcript.floorsAria":"跳转到某条消息","transcript.floorTickAria":"跳转到第 {index} 条消息:{preview}","transcript.orphanedSubagent":"来自已被编辑截断的分支","transcript.thinking":"思考","transcript.systemReminder":"系统提醒","transcript.reminder.directive":"提醒 · 长期指令","transcript.reminder.renew":"提醒 · 即将换窗","transcript.reminder.rebuild":"提醒 · 重建笔记","transcript.reminder.history":"提醒 · 引用早前对话","transcript.reminder.progress":"提醒 · 更新笔记","transcript.reminder.triggers":"触发 {triggers}","transcript.reminder.epoch":"窗口 {epoch}","transcript.reminder.userTurn":"针对 {turn}","transcript.system.injection":"注入上下文","transcript.system.trigger":"系统触发","transcript.system.compaction":"压缩摘要","transcript.system.hook":"钩子结果","transcript.system.cron":"定时任务","transcript.system.cronMissed":"错过的定时任务","transcript.system.task":"任务","transcript.system.retry":"重试","transcript.system.agent":"智能体消息","transcript.system.generic":"系统","transcript.kikiHook.label":"Kiki 为 {engine} 补充了上下文","transcript.kikiHook.labelPrepared":"Kiki 为 {engine} 准备了交接","transcript.kikiHook.prepared":"已准备,未注入","transcript.kikiHook.preparedBody":"{engine} 自行压缩。Kiki 为压缩之后准备了这份交接;这次 Hook 没有发送任何内容。","transcript.kikiHook.listSep":"、","transcript.kikiHook.event.SessionStart":"会话开始","transcript.kikiHook.event.UserPromptSubmit":"随消息","transcript.kikiHook.event.PreCompact":"压缩前","transcript.kikiHook.event.PostCompact":"压缩后","transcript.kikiHook.event.PreInvocation":"调用前","transcript.kikiHook.event.PreToolUse":"工具调用前","transcript.kikiHook.event.Stop":"轮次结束","transcript.kikiHook.part.memory":"记忆","transcript.kikiHook.part.goal_state":"目标","transcript.kikiHook.part.todo_state":"笔记与待办","transcript.kikiHook.part.handoff":"交接","transcript.kikiHook.part.task":"任务结果","transcript.kikiHook.part.agent_message":"智能体消息","transcript.kikiHook.part.injection":"提醒","transcript.kikiHook.part.other":"上下文","transcript.skill.skill":"技能 · {name}","transcript.skill.plugin":"插件 · {name}","transcript.marker.compaction":"上下文已压缩","transcript.marker.compactionSummarize":"上下文已压缩 · 已生成摘要","transcript.marker.compactionFresh":"上下文已压缩 · 重新开始","transcript.marker.compactionFallback":"未满足换窗条件,已改为摘要","transcript.marker.compactionRescue":"上下文已压缩 · 摘要失败,已重新开始","transcript.marker.reason.history_unavailable":"换窗时无法读取会话历史。","transcript.marker.reason.notes_missing":"智能体没有可用于接力的工作笔记。","transcript.marker.reason.notes_previous_window":"工作笔记只覆盖了上一个上下文窗口。","transcript.marker.reason.projected_too_large":"接力内容会占用新窗口过多空间。","transcript.marker.reason.manual_instruction":"这次压缩带有明确的摘要要求。","transcript.marker.reason.user_input_elided":"接力包会漏掉近期的用户消息。","transcript.marker.reason.new_content_large":"笔记写入后产生了太多新内容。","transcript.marker.reason.tool_error":"近期工具报错还需要保留在上下文里。","transcript.marker.reason.non_replayable_result":"近期外部结果可能无法从历史中找回。","transcript.marker.reason.debug_chain":"智能体仍在处理不断变化的排查证据。","transcript.marker.reason.elided_goal_missing":"接力包会略去用户输入,笔记里也没有目标。","transcript.marker.reason.multiple_sources":"接力内容依赖多个外部来源。","transcript.marker.reason.non_text_result":"近期工具结果含有接力包无法还原的媒体。","transcript.marker.reason.relay_render_failed":"换窗接力包未能生成。","transcript.marker.reason.summarize_failed_relay_rescue":"摘要未能生成,已改用换窗接力。","transcript.marker.hook":"钩子结果","transcript.marker.skill":"技能","transcript.marker.notice":"提示","transcript.marker.cron":"定时任务","transcript.marker.goal":"目标已更新","transcript.marker.plan":"计划已更新","transcript.marker.interruption":"你已停止本轮","transcript.marker.modelSwitch":"模型从 {from} 换成 {to}","transcript.failed":"失败","transcript.shell":"终端","transcript.steps":"步骤 · {count}","transcript.stepsAria":"{count} 次读取,点击展开或收起","transcript.stepsNoTiming":"未记录时长","transcript.readRun":"查看","transcript.step.read":"读","transcript.step.list":"列出","transcript.step.search":"搜索","transcript.step.fetch":"抓取","transcript.step.more":"另 {count} 个","transcript.runningAria":"运行中","transcript.failedAria":"失败","transcript.doneAria":"完成","transcript.jumpToLatest":"跳到最新","transcript.loadingEarlier":"正在加载更早的消息…","transcript.olderFailed":"无法加载更早的消息","transcript.retryEarlier":"重试","transcript.beginning":"历史记录的开头","transcript.couldNotOpen":"无法打开会话","transcript.opening":"正在加载…","transcript.openingElapsed":"正在加载… 已用 {seconds} 秒","transcript.blank":"白纸一张。告诉 kiki 要做什么。","transcript.blocked":"已阻塞","transcript.sending":"正在发送…","transcript.stillSending":"仍在发送…请勿重复发送此消息。","transcript.steerSending":"正在送入当前轮次…","transcript.steerWaiting":"等待插入","transcript.steerWaitingHint":"当前这一步结束后读取","transcript.steerWaitingTitle":"智能体会在下一个步骤边界读到这条消息——也就是它正在运行的工具结束之后。","transcript.approvalReadonly":"请求批准:{action}","transcript.questionReadonly":"该子智能体在运行中请求了输入。","transcript.toolCalls.one":"{count} 次工具调用","transcript.toolCalls.other":"{count} 次工具调用","transcript.thinkingSuffix":"思考强度 {effort}","transcript.turnWorking":"正在工作","transcript.durationUnknown":"时长未知","transcript.turnRetrying":"模型请求失败({cause})· 第 {attempt}/{max} 次重试,等待 {delay}","transcript.lastRetryFailed":"上次尝试失败({cause},{attempt}/{max}):{error}","subagent.lastTurnFailed":"上次轮次失败","subagent.lastTurnCancelled":"上次轮次已取消","notice.turnFailedDetail":"轮次失败{detail}","notice.turnCancelledDetail":"轮次已取消{detail}","transcript.stopped":"已停止","transcript.stoppedAria":"已停止","transcript.stoppedByYou":"已由你停止","transcript.interrupted":"已中断","transcript.interruptedByRestart":"Kiki 重启时中断","transcript.resume":"继续","transcript.resumeTitle":"重新运行这条消息","transcript.resumeFailed":"无法继续:{detail}","transcript.ranFor":"用时 {duration}","transcript.ttft":"首 token {seconds} 秒","transcript.tokensPerSecond":"{rate} token/秒","transcript.exec.badge":"{executor} · {protocol}","transcript.exec.degraded":"已降级","transcript.exec.resumeMode":"续接模式:{mode}","transcript.loss.acp_no_step_boundaries":"外部协议没有 step 边界 —— 本轮显示为单个合成 step","transcript.loss.profile_as_user_preamble":"kiki profile 以 prompt 前导形式交付,而非原生 system prompt","transcript.loss.tool_input_partial":"部分工具调用的输入不完整","transcript.loss.tool_output_summary_only":"部分工具输出只有摘要而非完整内容","transcript.loss.message_id_missing":"缺少 id 的消息被合并","transcript.loss.usage_context_only":"用量数字反映上下文大小,而非完整 token 统计","transcript.loss.unknown_update_dropped":"部分无法识别的更新被丢弃","transcript.loss.resume_new_session_handoff":"续接降级为带交接摘要的新会话","transcript.loss.handoff_truncated":"交接摘要被截断","transcript.loss.unstable_acp_plan":"计划更新来自不稳定的协议能力","media.attachment":"附件","media.viewImage":"查看图片","media.download":"下载","media.zoomFit":"适应屏幕","media.zoomActual":"原始大小","preview.openFile":"预览 {name}","preview.loading":"加载中…","preview.failed":"无法读取该文件","preview.truncated":"文件较大,仅显示前面一部分。","preview.loadFullFile":"加载完整文件","preview.unsupported":"该文件类型暂不支持预览。","preview.title":"预览工作台","preview.resetWidth":"拖拽调整面板宽度;双击重置","preview.toggle":"预览","preview.toggleAria":"切换预览面板","preview.collapse":"收起预览面板","preview.fullscreen":"全屏查看","preview.exitFullscreen":"退出全屏","preview.zoomGroup":"缩放","preview.zoomFit":"适应宽度","preview.zoomActual":"100%","preview.empty":"点击会话中的文件路径即可在此预览。","preview.closeTab":"关闭标签","preview.closeOthers":"关闭其他标签","preview.closeAll":"关闭全部标签","preview.openAgentFullscreen":"打开 {name}","preview.copyAgentId":"复制 Agent ID","preview.addToChat":"加入对话","preview.rendered":"渲染","preview.source":"源码","preview.save":"保存","preview.saving":"保存中…","preview.saved":"已保存","preview.unsaved":"未保存的修改","preview.editUnsupported":"在桌面应用中打开即可编辑。","preview.builtinSkillReadOnly":"内置 · 只读","preview.oversized":"文件较大:仅预览开头约 512 KB,且不可编辑。","preview.conflictBody":"该文件在磁盘上已被修改。","preview.overwrite":"覆盖保存","preview.reload":"重新加载","preview.keepEditing":"继续编辑","preview.discardTitle":"放弃未保存的修改?","preview.discardBody":"{name} 有未保存的修改。","preview.discardBodyMany":"{count} 个文件有未保存的修改。","preview.discard":"放弃修改","subagent.status.unknown":"状态未知","subagent.status.refreshing":"刷新中…","subagent.status.running":"运行中","subagent.status.suspended":"已挂起","subagent.status.completed":"已完成","subagent.status.failed":"失败","subagent.status.cancelled":"已取消","subagent.status.background":"后台运行","subagent.tools":"{count} 次工具调用","subagent.effort":"推理 {effort}","subagent.children.one":"{count} 个子智能体","subagent.children.other":"{count} 个子智能体","subagent.expandChildren":"展开子智能体","subagent.collapseChildren":"折叠子智能体","subagent.openAgent":"打开 {name}","subagent.depth":"第 {depth} 层","subagent.event.spawned":"派生","subagent.event.resumed":"恢复运行","subagent.event.sent":"注入消息","subagent.event.completed":"完成","subagent.event.failed":"失败","subagent.event.cancelled":"已取消","subagent.expandCard":"展开卡片","subagent.collapseCard":"折叠卡片","notice.compacting":"正在压缩上下文…","notice.compacted":"上下文已压缩 — {before} → {after} tokens","notice.promptAborted":"消息已中止","notice.promptFailed":"消息发送失败","notice.earlierPromptOutcomes":"{count} 条较早的消息没有完成","transcript.promptOutcome.failed":"发送失败","transcript.promptOutcome.replyFailed":"回复失败","transcript.promptOutcome.aborted":"已中止","transcript.promptOutcome.retry":"重新发送","transcript.promptOutcome.retryTitle":"把这条消息放回输入框","transcript.promptOutcome.details":"详情","transcript.promptOutcome.noDetails":"没有记录失败原因。","transcript.promptOutcome.locate":"定位","transcript.historyPartial":"更早的历史未经完整性验证,可能有缺失","notice.turnFailed":"本轮失败","ia.approvalNeeded":"需要批准","ia.planEnter.title":"进入计划模式?","ia.planEnter.body":"Kiki 想先进入计划模式,调研并给出方案后再动手。若超时未答复,该请求会被自动拒绝。","ia.plan.title":"审阅计划","ia.plan.bodyLabel":"提议的计划","ia.plan.choose":"要执行的方案","ia.plan.note":"给智能体的备注(可选)","ia.plan.notePlaceholder":"开始之前需要改什么?","ia.plan.approve":"批准计划","ia.plan.approveChoice":"批准「{option}」","ia.plan.revise":"要求修改","ia.plan.reviseNeedsNote":"先写下需要修改的地方。","ia.plan.rejectExit":"拒绝并退出计划模式","ia.plan.sentApproved":"计划已批准,智能体开始执行","ia.plan.sentRevise":"已要求修改,智能体继续规划","ia.plan.sentExit":"计划已拒绝,已退出计划模式","ia.fromSubagent":"来自子智能体 {name}","ia.originUnknown":"来源未知","ia.originCurrentContext":"来自当前智能体上下文","ia.remember":"本会话内始终允许 {tool}","ia.alwaysAllow":"以后总是允许","ia.alwaysAllow.title":"把 {rule} 存为权限规则,并批准这一次","ia.alwaysAllow.saving":"正在保存规则…","ia.alwaysAllow.saved":"已把 {rule} 存为允许规则,以后命中的调用不再询问。","ia.alwaysAllow.savedShort":"已保存规则","ia.alwaysAllow.manage":"管理规则","ia.alwaysAllow.undoHint":"可在 设置 → 权限 中删除","ia.alwaysAllow.failed":"规则没有保存成功,这次也没有批准。可以先批准一次,或者重试。","ia.reviewer.approved":"由审查员批准","ia.reviewer.rejected":"被审查员拒绝","ia.reviewer.tooltip":"{backend} 审查员 · 置信度 {confidence}%","ia.reviewer.backend.model":"模型","ia.reviewer.backend.jev":"Jev","ia.approve":"批准","ia.approving":"正在批准…","ia.reject":"拒绝","ia.rejecting":"正在拒绝…","ia.sendFailed":"决定发送失败 — 请求可能已过期,请重试。","ia.resolution.approved":"已批准","ia.resolution.rejected":"已拒绝","ia.resolution.cancelled":"已取消","ia.resolution.expired":"已过期","ia.resolution.resolvedElsewhere":"已在别处处理","ia.sentToKikiSuffix":" — 已发送给 kiki","ia.detail.command":"命令","ia.detail.file":"文件","ia.detail.url":"URL","ia.detail.search":"搜索","ia.detail.subagent":"子智能体","ia.detail.skill":"技能","ia.detail.details":"详情","ia.kikiAsks":"kiki 提问","ia.record.waiting":"等你处理","ia.record.awaitingApproval":"待批准","ia.record.awaitingAnswer":"待回答","ia.record.review":"去处理","ia.record.reviewAria":"在输入框上方处理此请求","ia.submit":"提交","ia.sending":"正在发送…","ia.dismiss":"忽略","ia.dismissed":"已忽略","ia.sentToKiki":"已发送给 kiki","ia.question.answered":"问题已回答","ia.question.dismissed":"问题已忽略","ia.question.expired":"问题已过期","ia.question.cancelled":"问题已取消","ia.question.resolvedElsewhere":"问题已处理","ia.question.unavailable":"问题已失效 · 回答未发送","ia.question.cancelled.no_consumer":"客户端断开时问题已结束,没有发送回答。","ia.question.cancelled.turn_ended":"提问的轮次已结束,没有收到回答。","ia.question.cancelled.agent_closed":"会话已关闭,没有收到回答。","ia.question.cancelled.aborted":"提问已停止,没有收到回答。","ia.question.answerUnavailable":"这条记录中没有保存回答。","ia.other":"其他","ia.otherPlaceholder":"输入你的回答…","ia.answerFailed":"回答发送失败:{detail}","ia.answerFailedGeneric":"发送失败 — 请重试。","ia.dismissFailed":"忽略失败:{detail}","ia.dismissFailedGeneric":"忽略失败 — 请重试。","ia.unanswered.one":"还有 {count} 个问题未回答","ia.unanswered.other":"还有 {count} 个问题未回答","ia.external.title":"外部智能体权限请求","ia.external.badge":"外部智能体","ia.external.cancel":"取消","ia.external.cancelling":"正在取消…","ia.external.unknownShape":"无法识别该权限请求 —— 为安全起见只能取消。","ia.external.kind.allowOnce":"允许一次","ia.external.kind.allowAlways":"始终允许","ia.external.kind.rejectOnce":"拒绝一次","ia.external.kind.rejectAlways":"始终拒绝","ia.external.changes.one":"授予 {count} 项变更","ia.external.changes.other":"授予 {count} 项变更","tc.changes":"变更","tc.input":"输入","tc.output":"输出","tc.outputError":" · 错误","tc.errorCode.codex_mcp_approval_denied":"Codex 没有运行:这个 MCP 工具需要审批,「完全放行」下 Codex 不会询问。Kiki 自己的工具不受影响;要运行它,请切到「每步询问」或「自动」。","tc.noInput":"(无输入)","tc.truncated":"…(已截断)","tc.exit":"退出码 {code}","tc.plan":"计划","tc.planPath":"计划 — {path}","tc.planEnter":"进入计划模式","tc.todoItems.one":"{count} 项","tc.todoItems.other":"{count} 项","tc.openSpawnedAgent":"打开 {name}","tc.spawnedAgents":"已派生的智能体","cb.collapse":"收起","cb.expand":"展开","cb.copyTitle":"复制代码","cb.copy":"复制","cb.copied":"已复制","cb.showLess":"收起","cb.viewMore":"展开更多({count} 行)","diff.unchanged.one":"… {count} 行未变更","diff.unchanged.other":"… {count} 行未变更","diff.unchangedSome":"… 若干行未变更","sv.approvals.one":"{count} 项待批准","sv.approvals.other":"{count} 项待批准","sv.questions.one":"{count} 个待回答","sv.questions.other":"{count} 个待回答","sv.working":"工作中","sv.hidePanel":"隐藏面板","sv.showPanel":"显示面板","sv.togglePanelAria":"切换面板","sv.openMenuAria":"打开会话菜单","sv.renameAria":"重命名这个会话","sv.actionsAria":"会话操作","sv.backToSession":"← 返回会话","tc.sem.raw":"原始数据","tc.sem.more":"还有更多结果未返回","tc.sem.showAll":"显示全部 {count} 项","tc.sem.listSep":"、","tc.sem.wire.running":"运行中","tc.sem.wire.completed":"已完成","tc.sem.wire.failed":"失败","tc.sem.wire.timed_out":"已超时","tc.sem.wire.killed":"已停止","tc.sem.wire.lost":"已丢失","tc.sem.wire.interrupted":"已中断","tc.sem.wire.cancelled":"已取消","tc.sem.wire.blocked":"受阻","tc.sem.wire.unknown":"未知","tc.sem.wire.untracked":"未跟踪","tc.sem.wire.cold":"休眠","tc.sem.wire.idle":"空闲","tc.sem.wire.active":"进行中","tc.sem.wire.in_progress":"处理中","tc.sem.wire.paused":"已暂停","tc.sem.wire.done":"已完成","tc.sem.wire.superseded":"已替代","tc.sem.wire.user":"你","tc.sem.wire.assistant":"Kiki","tc.sem.wire.tool":"工具","tc.sem.wire.session":"本会话","tc.sem.wire.workspace":"工作区","tc.sem.wire.embedded":"Kiki 数据区","tc.sem.wire.global":"全局","tc.sem.wire.process":"进程","tc.sem.wire.agent":"智能体","tc.sem.wire.question":"提问","tc.sem.wire.auto":"自动","tc.sem.wire.fixed":"固定路径","tc.sem.web.fetchFailed":"失败","tc.sem.untitled":"未命名","tc.sem.noText":"(无文本)","tc.sem.notFound":"未找到","tc.sem.timedOut":"已超时","tc.sem.interrupted":"已打断","tc.sem.turnN":"第 {n} 轮","tc.sem.jumpTurn":"跳到第 {n} 轮","tc.sem.openThread":"打开线程","tc.sem.openAgent":"打开智能体","tc.sem.openBoard":"打开任务看板","tc.sem.openCron":"打开定时提示","tc.sem.thread.create":"新建线程","tc.sem.thread.started":"已带提示启动","tc.sem.thread.list":"列出线程","tc.sem.thread.read":"读取线程","tc.sem.thread.send":"发给","tc.sem.thread.wait":"等待","tc.sem.thread.undeliverable":"未送达","tc.sem.thread.activity.terminal":"一轮已结束","tc.sem.thread.activity.attention":"需要处理","tc.sem.thread.activity.lifecycle":"线程状态变化","tc.sem.thread.activity.undeliverable":"消息未送达","tc.sem.agent.run":"运行智能体","tc.sem.agent.resume":"继续智能体","tc.sem.agent.list":"列出智能体","tc.sem.agent.send":"发消息给智能体","tc.sem.agent.notify":"通知上级","tc.sem.task.list":"运行中的任务","tc.sem.task.listAll":"全部任务","tc.sem.task.output":"任务输出","tc.sem.task.stop":"停止任务","tc.sem.task.wait":"等待任务","tc.sem.task.anyTask":"任一任务","tc.sem.task.none":"没有任务","tc.sem.history.search":"搜索历史","tc.sem.history.read":"读取历史","tc.sem.history.ref":"已保存的引用","tc.sem.history.listTurns":"列出轮次","tc.sem.history.listAgents":"列出历史中的智能体","tc.sem.history.partial":"不完整","tc.sem.history.noMatch":"无匹配","tc.sem.board.list":"读取任务看板","tc.sem.board.overview":"看板总览","tc.sem.board.show":"读取卡片","tc.sem.board.preview":"看板存储","tc.sem.board.create":"新建卡片","tc.sem.board.update":"更新卡片","tc.sem.cron.create":"定时提示","tc.sem.cron.list":"定时提示列表","tc.sem.cron.delete":"移除定时","tc.sem.cron.once":"仅一次","tc.sem.goal.create":"设定目标","tc.sem.goal.get":"查看目标","tc.sem.goal.none":"暂无目标","tc.sem.goal.budget":"目标预算","tc.sem.goal.update":"目标状态","tc.sem.todo.update":"更新待办","tc.sem.todo.read":"查看待办","tc.sem.todo.clear":"清空待办","tc.sem.todo.notes":"更新笔记","tc.sem.todo.progress":"{done}/{total}","tc.sem.todo.inProgress":"进行中","tc.sem.todo.done":"已完成","tc.sem.select":"载入工具","tc.sem.select.unknown":"未知:{names}","tc.sem.web.search":"网页搜索","tc.sem.web.job":"搜索任务","tc.sem.web.fetch":"抓取网页","tc.sem.ask":"提问","tc.sem.ask.waiting":"等你回答","tc.sem.ask.answered":"已回答","tc.sem.ask.dismissed":"已跳过","tc.sem.plan.enter":"进入计划模式","tc.sem.plan.exit":"完成计划","tc.sem.plan.approved":"已批准","tc.sem.skill":"使用技能","tc.sem.field.thread":"线程","tc.sem.field.profile":"配置","tc.sem.field.cwd":"目录","tc.sem.field.delivery":"投递","tc.sem.field.agent":"智能体","tc.sem.field.task":"任务","tc.sem.field.model":"模型","tc.sem.field.kind":"类型","tc.sem.field.exitCode":"退出码","tc.sem.field.reason":"原因","tc.sem.field.outputPath":"完整输出","tc.sem.field.card":"卡片","tc.sem.field.priority":"优先级","tc.sem.field.scope":"范围","tc.sem.field.revision":"版本","tc.sem.field.job":"定时项","tc.sem.field.cron":"周期","tc.sem.field.nextRun":"下次运行","tc.sem.field.status":"状态","tc.sem.field.turnsUsed":"已用轮次","tc.sem.field.criterion":"完成标准","tc.sem.threads.one":"{count} 个线程","tc.sem.threads.other":"{count} 个线程","tc.sem.turns.one":"{count} 轮","tc.sem.turns.other":"{count} 轮","tc.sem.activities.one":"{count} 条动态","tc.sem.activities.other":"{count} 条动态","tc.sem.agents.one":"{count} 个智能体","tc.sem.agents.other":"{count} 个智能体","tc.sem.tasks.one":"{count} 个任务","tc.sem.tasks.other":"{count} 个任务","tc.sem.hits.one":"{count} 条命中","tc.sem.hits.other":"{count} 条命中","tc.sem.cards.one":"{count} 张卡片","tc.sem.cards.other":"{count} 张卡片","tc.sem.cronJobs.one":"{count} 个定时","tc.sem.cronJobs.other":"{count} 个定时","tc.sem.results.one":"{count} 条结果","tc.sem.results.other":"{count} 条结果","tc.sem.questions.one":"{count} 个问题","tc.sem.questions.other":"{count} 个问题","tc.sem.toolCalls.one":"{count} 次工具调用","tc.sem.toolCalls.other":"{count} 次工具调用","sv.sessionCrumb":"会话","sv.parentAgents":"父智能体","sv.siblingAgents":"兄弟智能体","sv.childAgents":"子智能体","sv.moreSiblingAgents":"再显示 {count} 个兄弟智能体","sv.moreChildAgents":"再显示 {count} 个子智能体","sv.showFewerAgents":"收起","sv.noRelatedAgents":"没有相关智能体。","sv.relatedAgents":"关联智能体","sv.spawnInstruction":"来自主智能体的指令","sv.spawnInstructionFrom":"来自 {agent} 的指令","sv.openParent":"打开父智能体","sv.subagentNote":"子智能体会话记录 — 交互卡片在整个会话范围内生效","sv.agentReadOnly":"此智能体页只读;发送、排队和技能操作仍在会话页。","sv.agentContext":"上下文 {tokens}","sv.agentTokens":"累计 {tokens} tokens","sv.historyUnavailable":"无历史记录","sv.agentHistoryMore":"已加载服务器记录。此页之前还有更早的轮次。","sv.agentHistoryLive":"已加载服务器记录;运行期间的新事件会实时补充。","sv.agentHistoryUnavailable":"服务器记录不可用。当前显示本客户端捕获的事件,更早或断连期间的活动可能缺失。","sv.agentHistoryLoading":"正在加载服务器记录,期间先显示本客户端捕获的实时事件。","sv.resyncFailed":"会话恢复失败 — 请手动重试","sv.resyncing":"正在重新同步…","sv.sendPaused":"会话同步完成前暂停发送。","sv.resyncRetryNow":"立即重试","sv.abortMaybeRunning":"无法中止 — 本轮可能仍在运行","sv.abortFailed":"中止失败","sv.abortStillRunning":" — 本轮可能仍在运行","sv.approvalShortcutFailed":"批准快捷键失败:{detail}","sv.stopTaskFailed":"无法停止任务:{detail}","sv.cancelQueuedFailed":"无法取消排队的消息:{detail}","sv.editQueuedFailed":"无法替换排队的消息:{detail}","sv.skillGone":"技能“{name}”已不可用 — 重新打开 / 菜单刷新。","sv.skillReference":"技能“{name}”是参考型技能,不能从输入框运行。","sv.notificationBody":"有一项请求待批准。","sv.ariaAwaitingApproval":"待批准","sv.ariaAwaitingAnswer":"待回答","sv.ariaWorking":"Kiki 正在工作","sv.closePanel":"关闭面板","sv.imageEcho":"[图片]","sv.fileEcho":"[文件]","sv.queueBar.one":"{count} 条排队","sv.queueBar.other":"{count} 条排队","sv.queueAria":"排队消息","sv.queueSendNow":"送入当前轮次","sv.queueSendNowTitle":"把这条消息插入进行中的轮次,在当前这一步的安全边界读取","sv.queueRemove":"移除","sv.queueRemoveTitle":"把这条消息移出队列","sv.queueClearAll":"全部清除","sv.queueClearAllTitle":"移除所有排队项(消息与模型切换)","sv.queueClearTitle":"清除 {count} 条排队项?","sv.queueClearBody":"每条排队消息和模型切换都会被移除。失败的项会留在队列中,方便重试。","sv.queueClearFailed":"{total} 条中有 {failed} 条未能清除 — 它们仍留在队列中。","sv.queueNoText":"(仅附件)","sv.queueEdit":"编辑","sv.queueEditAria":"编辑排队的消息","sv.queueExpandAria":"展开或收起排队消息","sv.queueRecovered.title":"队列已恢复","sv.queueRecovered.body.one":"{count} 条排队消息已随会话恢复,确认后继续发送。","sv.queueRecovered.body.other":"{count} 条排队消息已随会话恢复,确认后继续发送。","sv.queueRecovered.confirm":"继续发送","sv.queueRecovered.dismiss":"稍后","sv.queueRecovered.failed":"无法继续队列:{detail}","sv.steerQueuedFailed":"无法把排队消息送入当前轮次:{detail}","sv.steerFailed":"没能立即发送:{detail}。消息已放回输入框。","sv.steerRefused":"这条消息会切换模式,需要单独一轮。已放回输入框,再次发送即可排队。","sv.steerUnknown":"无法确认消息是否已送达:{detail}。请先查看时间线,再决定是否重发。","sv.steerTurnEnded":"当前轮次已先结束,这条消息会作为下一轮发送。","sv.sessionGone":"会话已不存在 — 正在返回新会话页。","sv.approveAll":"全部批准","sv.approveAllTitle":"批准 {count} 项待批准请求?","sv.approveAllBody":"将对本会话中每一项待批准请求发送批准决定。","sv.rejectAll":"全部拒绝","sv.approvalBatchMoreAria":"更多批量操作","sv.rejectAllTitle":"拒绝 {count} 项待批准请求?","sv.rejectAllBody":"将对本会话中每一项待批准请求发送拒绝决定。","sv.scrollToApprovals":"跳到第一张待批准的卡片","sv.batchResolved.one":"已处理 {count} 条审批。","sv.batchResolved.other":"已处理 {count} 条审批。","sv.batchFailed":"{total} 条中有 {failed} 条未能送达 — 其余已处理。","term.menuItem":"终端","term.toggleAria":"切换终端面板","term.showPanel":"显示终端","term.hidePanel":"隐藏终端","term.panelAria":"终端面板","term.tabsAria":"终端标签页","term.new":"新建终端","term.killAria":"终止终端","term.killConfirm":"确认?","term.closePanel":"关闭终端面板","term.resizeAria":"拖动调整终端面板高度","term.screenAria":"终端输出的文本镜像","term.loading":"正在加载终端…","term.loadFailed":"无法加载终端:{detail}","term.createFailed":"无法启动终端:{detail}","term.empty":"还没有终端。在此会话的工作区里启动一个 shell —— 聊天时它会一直运行。","term.attaching":"正在连接…","term.reconnecting":"正在重连…","term.exited":"进程已退出(代码 {code})","term.exitedNoCode":"进程已退出","term.restart":"重新启动","term.scrollbackIncomplete":"更早的输出已不可用——当前仅显示服务器保留的输出。","term.unavailable":"终端数据流当前不可用。请在连接恢复后重试。","new.title":"新会话","new.tagline":"今天做点什么?","new.workspace":"工作区","new.autoWorkspace":"自动创建工作区","new.autoWorkspaceHint":"发送时,kiki 会在 Kiki 主目录中新建文件夹作为工作区。","new.or":"或","new.noWorkspaces":"还没有工作区","new.creating":"正在创建会话…","new.startersAria":"入门提示","new.starter.explain":"讲解这个文件夹","new.starter.explainDraft":"带我快速了解这个文件夹:它是什么、怎么组织的、应该从哪里开始看。","new.starter.fixTest":"修复一个失败的测试","new.starter.fixTestDraft":"在这个项目里找一个失败的测试,解释失败原因,并给出修复方案。","new.starter.webSearch":"设置网页搜索","new.starter.webSearchDraft":"一步步帮我为 Kiki 设置网页搜索。","new.noTargetHint":"请选择其他工作区、自动创建工作区,或填写项目的绝对路径。","new.browse":"浏览文件夹…","new.firstRunHint":"可以选择项目文件夹,也可以直接发送,让 kiki 在 Kiki 主目录中自动创建工作区。","new.setupTitle":"先连接一个模型","new.setupBody":"还没有配置任何 provider,kiki 没有可用来回答的模型。可以通过 OAuth 登录,也可以填自己的 API key。","new.setupSignIn":"OAuth 登录","new.setupApiKey":"配置 API key","hero.chooseWorkspace":"选择工作区","hero.workspaceLoading":"正在加载工作区…","hero.workspaceAria":"选择本会话的工作区","new.headline":"你的智能体,你说了算。","new.startHere":"从这里开始","new.starter.explainNamed":"讲讲 {name}","new.starter.review":"回顾最近的改动","new.starter.reviewDraft":"看看这个项目最近的改动(git 状态和最近几次提交),总结做了什么、还有什么没收尾。","rail.goal":"目标","rail.subagents":"子智能体","rail.todos":"待办","rail.tasks":"后台任务","rail.session":"会话","rail.goalUnavailable":"此服务器不提供目标状态。","rail.noGoal":"没有进行中的目标。","rail.noSubagents":"此会话没有子智能体。","rail.noTodos":"还没有待办列表。","rail.noTasks":"没有后台任务。","rail.resizeAria":"拖拽调整面板宽度;双击复位","rail.todosDone":"已完成 {done}/{total}","rail.updatedPrefix":"更新于 {time}","rail.doneWhen":"完成条件:{criterion}","rail.goalUsage":"{turns} 轮 · {tokens} tokens","rail.stop":"停止","rail.stopTitle":"终止任务","rail.model":"模型","rail.directory":"目录","rail.messages":"消息数","rail.updatedRow":"更新时间","rail.sessionNoName":"目录名未命名","rail.tokens":"Tokens","rail.tokensInOut":"输入 {input} · 输出 {output}","rail.turns":"轮次","rail.agentTask":"子智能体任务","rail.panelOf":"{name} 的面板","rail.ownerMain":"主智能体","rail.needsInput":"等你处理","rail.result":"结果","rail.elapsed":"耗时","rail.toolsRow":"工具","rail.childrenRow":"子级","rail.taskStatus.running":"运行中","rail.taskStatus.completed":"已完成","rail.taskStatus.failed":"失败","rail.taskStatus.cancelled":"已取消","rail.moreBelow":"下方还有 {count} 条","rail.mode.aria":"右侧栏模式","rail.mode.default":"标准","rail.mode.cockpit":"驾驶舱","rail.questionTag":"问","rail.needsYou.more":"还有 {count} 件","rail.todos.hideDone":"收起已完成","rail.todos.doneCount":"已完成 {count} 项","rail.todo.srDone":"已完成:","rail.todo.srInProgress":"进行中:","rail.todo.srPending":"未开始:","rail.feed.title":"动态","rail.feed.dispatched":"派出","rail.feed.reported":"回报","rail.feed.failed":"失败","rail.feed.compacted":"上下文已压缩","rail.feed.earlier":"更早的 {count} 条","rail.capabilities.title":"能力","rail.capabilities.summary":"工具 {tools} · 技能 {skills} · 子智能体 {subagents} · 扩展 {extensions}","rail.capabilities.unavailable":"暂时读不到能力信息。","rail.cron.title":"本对话定时任务","rail.cron.empty":"暂无定时任务","rail.cron.more":"还有 {count} 项","rail.cron.loadMore":"加载更多","rail.cron.manage":"管理定时任务","rail.cron.unavailable":"暂时读不到定时任务。","rail.cron.pauseFailed":"未能暂停该定时任务。","rail.cron.resumeFailed":"未能恢复该定时任务。","rail.cockpit.cacheHit":"缓存命中","rail.cockpit.compactions":"压缩","rail.cockpit.toolCalls":"工具调用","rail.cockpit.now":"现在","rail.cockpit.state.running":"运行中","rail.cockpit.state.needsYou":"等你处理","rail.cockpit.state.suspended":"已挂起","rail.cockpit.state.done":"已完成","rail.cockpit.state.failed":"失败","rail.cockpit.state.stopped":"已停止","rail.cockpit.summary.suspended":"{count} 挂起","rail.cockpit.duration.underMinute":"<1 分","rail.cockpit.lanes.aria":"智能体时间泳道","rail.cockpit.lane.untimed":"未记录开始时间","rail.cockpit.close":"退出驾驶舱","tasks.title":"后台任务","tasks.back":"返回会话","tasks.viewAll":"查看全部","tasks.loading":"正在加载任务…","tasks.loadMore":"加载更多任务","tasks.loadFailed":"无法加载任务","tasks.empty":"此会话还没有后台任务。","tasks.emptyFilter":"没有该状态的任务。","tasks.filter.all":"全部","tasks.stopping":"正在停止…","tasks.expand":"展开任务详情","tasks.collapse":"收起任务详情","tasks.noOutput":"暂未捕获输出。","tasks.outputLoading":"正在加载输出…","tasks.field.id":"任务 ID","tasks.field.kind":"类型","tasks.field.created":"创建于","tasks.field.started":"开始于","tasks.field.finished":"结束于","tasks.field.duration":"耗时","tasks.field.command":"命令","tasks.field.output":"输出(尾部)","tasks.kind.bash":"Shell","tasks.kind.subagent":"子智能体","tasks.kind.tool":"工具","tasks.count.one":"{count} 个任务","tasks.count.other":"{count} 个任务","activity.toggle":"活动","activity.expandAria":"展开活动面板","activity.collapseAria":"收起活动面板","activity.running":"运行中","activity.waiting":"等你处理","activity.runningCount.one":"{count} 个运行中","activity.runningCount.other":"{count} 个运行中","activity.waitingCount.one":"{count} 个等你处理","activity.waitingCount.other":"{count} 个等你处理","activity.queuedCount.one":"{count} 条排队","activity.queuedCount.other":"{count} 条排队","activity.tasksCount.one":"{count} 个后台任务","activity.tasksCount.other":"{count} 个后台任务","activity.background":"后台运行","activity.turnTitle":"本轮已运行 {elapsed}","activity.queueChip.one":"+{count} 排队","activity.queueChip.other":"+{count} 排队","sidebar.backgroundTasks.one":"{count} 个后台任务运行中","sidebar.backgroundTasks.other":"{count} 个后台任务运行中","usage.title":"用量","usage.nav":"用量","usage.navAria":"打开用量仪表盘","usage.axis.granularity":"粒度","usage.axis.range":"范围","usage.axis.dimension":"维度","usage.granularity.day":"日","usage.granularity.week":"周","usage.granularity.month":"月","usage.granularity.session":"会话","usage.granularity.five_hour":"5h 窗口","usage.range.today":"今天","usage.range.last_7_days":"最近 7 天","usage.range.this_week":"本周","usage.range.this_month":"本月","usage.range.all":"全部历史","usage.range.custom":"自定义","usage.dimension.model":"模型","usage.dimension.agent":"智能体","usage.dimension.project":"工作区","usage.dimension.session":"会话","usage.allHistoryChip":"全部历史 · 未套用时间过滤","usage.customRange.start":"开始日期","usage.customRange.end":"结束日期","usage.customRange.invalid":"开始日期必须早于结束日期。","usage.workspace.label":"工作区","usage.workspace.all":"全部工作区","usage.includeArchived":"包含已归档","usage.loading":"正在加载用量…","usage.loadFailed":"用量加载失败","usage.card.cost":"总成本","usage.card.tokens":"总 tokens","usage.card.sessions":"会话数","usage.card.turns":"总轮次","usage.tokens.input":"输入","usage.tokens.output":"输出","usage.tokens.cacheRead":"缓存读取","usage.tokens.cacheWrite":"缓存写入","usage.cacheHit":"缓存命中 {percent}%","usage.cacheHitHint":"缓存读取 / 总输入(输入 + 缓存读取 + 缓存写入)","usage.kpi.estimatedCost":"估算成本","usage.kpi.partialUnknown":"部分未知","usage.kpi.pricingUnknown":"价格未知","usage.partialCost":"成本为部分估算,以下模型暂无价格:{models}。","usage.pricing.open":"模型价格","usage.pricing.title":"模型价格","usage.pricing.description":"费用估算所用的单价,按每百万 token 计。填入自己的价格即可覆盖价格目录。","usage.pricing.filter":"筛选模型","usage.pricing.model":"模型","usage.pricing.input":"输入","usage.pricing.output":"输出","usage.pricing.cacheRead":"缓存读","usage.pricing.cacheWrite":"缓存写","usage.pricing.optional":"可选","usage.pricing.currency":"币种","usage.pricing.billingModel":"按此模型计价","usage.pricing.source.override":"自定义价格","usage.pricing.source.litellm":"LiteLLM 价格目录","usage.pricing.source.vendored":"内置价格目录","usage.pricing.source.unknown":"暂无价格","usage.pricing.unknownPrice":"未知","usage.pricing.unknownCount":"{count} 个模型暂无价格","usage.pricing.loading":"正在加载价格…","usage.pricing.loadFailed":"价格加载失败。","usage.pricing.empty":"还没有模型。添加或使用一个模型后,它会出现在这里。","usage.pricing.noMatch":"没有与“{query}”匹配的模型。","usage.pricing.unitNote":"单价按每百万 token 计。缓存价格留空表示未知,不是免费。","usage.pricing.nonUsd":"其他币种的价格按原样保存、不做换算,因此这个模型的美元估算会显示为未知。","usage.pricing.invalidPrice":"输入和输出价格请填写不小于 0 的数字。","usage.pricing.invalidCurrency":"币种请用三位字母代码,例如 USD。","usage.pricing.save":"保存价格","usage.pricing.saving":"正在保存…","usage.pricing.clear":"改用目录价格","usage.strip.today":"今日","usage.strip.burnRate":"消耗速度","usage.strip.burnRateValue":"{rate} tok/h","usage.strip.currentSession":"当前会话","usage.incomplete.sessionCap":"本次扫描的会话数已达上限,更早的会话未计入。","usage.incomplete.recordBudget":"本次扫描的记录数已达上限,部分用量未计入。","usage.incomplete.deadline":"本次扫描用时较长,暂时只计入了部分用量。","usage.incomplete.sessions":"{count} 个会话的用量记录不完整。","usage.trend.title":"趋势","usage.trend.metric.cost":"成本","usage.trend.metric.tokens":"Tokens","usage.trend.clickHint":"点击时间桶查看会话下钻","usage.drilldown.title":"该时间桶内的会话","usage.drilldown.turns":"{count} 轮","usage.drilldown.unknownTurns":"{count} 条记录无 turn 归因","usage.drilldown.turnIdsTruncated":"turn 列表已截断","usage.drilldown.turnId":"轮次 {id}","usage.drilldown.turnHint":"打开会话并定位到该轮次","usage.drilldown.sessionsTruncated":"会话数量超出下钻上限,仅显示部分。","usage.tab.sessions":"会话","usage.tab.fiveHour":"5h 节奏","usage.sessions.loadMore":"加载更多({shown}/{total})","usage.sessions.deepLinkChip":"已定位会话","usage.sessions.locating":"正在更早的分页中定位会话…","usage.sessions.notInPage":"该会话不在当前结果集中。","usage.col.session":"会话","usage.col.workspace":"工作区","usage.col.model":"模型","usage.col.cost":"成本","usage.col.tokens":"Tokens","usage.col.turns":"轮次","usage.col.updated":"更新于","usage.col.provider":"供应商","usage.col.profile":"配置","usage.dim.unknown":"未知(旧记录)","usage.dim.mixedAttribution":"多来源","usage.agent.subagents":"{count} 个子智能体","usage.fiveHour.hint":"5h 节奏视图需要切换到 5h 窗口粒度。","usage.fiveHour.switch":"切换到 5h 窗口","usage.accounting.missing":"{count} 条记录未返回 token 用量,相关用量和费用未知。","usage.accounting.legacyZero":"{count} 条较早的记录显示为零用量,但无法确认。","usage.accounting.knownSubtotal":"小计仅包含已记录的 token。","usage.rescan.action":"全量重扫","usage.rescan.hint":"扫描全部历史会话,可能耗时较久。","usage.rescan.starting":"正在启动…","usage.rescan.running":"正在重扫…","usage.rescan.progress":"{scanned}/{total} 个会话","usage.rescan.records":"已读取 {count} 条记录","usage.rescan.completed":"已重扫 {count} 个会话","usage.rescan.failed":"重扫失败,请重试。","usage.rescan.startFailed":"未能开始重扫,请重试。","usage.rescan.progressFailed":"进度暂不可用,正在重新连接…","usage.reliability.title":"统计说明","usage.reliability.unknown":"部分用量未知","usage.reliability.unpriced":"{count} 个模型缺少价格,部分费用无法估算。","usage.reliability.costUnknown":"部分费用暂时无法估算。","usage.reliability.coverage":"覆盖范围","usage.reliability.coverageEmpty":"暂无用量记录","usage.reliability.scanned":"已扫描会话","usage.reliability.incomplete":"不完整会话","usage.reliability.unknownPrices":"无价格模型","usage.reliability.deleted":"已删除会话","usage.reliability.deleted.included":"包含已删除会话","usage.reliability.deleted.excluded":"不含已删除会话","usage.reliability.costSource":"成本为按已记录 token 价格的本地估算","usage.reliability.none":"无","usage.empty":"该时间范围内暂无用量。","usage.viewAll":"查看全部","usage.sessionChip.one":"{count} 个会话","usage.sessionChip.other":"{count} 个会话","usage.kpi.cacheHit":"缓存命中率","usage.kpi.cacheHitNone":"暂无输入 token","usage.kpi.perSession":"平均每会话 {cost}","usage.kpi.inputOutput":"输入 {input} · 输出 {output}","usage.composition.fresh":"新输入","usage.trend.metric.cache":"缓存命中","usage.trend.other":"其他","usage.trend.peak":"峰值 {value}","usage.breakdown.byProvider":"按供应商","usage.breakdown.byProfile":"按角色","usage.breakdown.unknownProvider":"未知供应商","usage.breakdown.unknownProfile":"无角色","usage.col.cacheHit":"缓存命中","usage.col.share":"占比","usage.reliability.complete":"完整","usage.reliability.partial":"不完整","context.viewInUsage":"在用量页查看本会话","switcher.pages":"页面","switcher.action.usage":"打开用量仪表盘","switcher.action.settings":"打开设置","st.title":"设置","st.section.general":"常规","st.section.ai":"模型与提供商","st.section.connection":"连接","st.section.agents":"智能体","st.section.subagents":"子智能体规则","st.section.skills":"技能","st.section.mcp":"MCP","st.section.plugins":"插件","st.section.automation":"工具与自动操作","st.section.search":"搜索与抓取","st.section.workspaces":"工作区","st.section.tasks":"任务","st.section.advanced":"高级","st.section.about":"关于与更新","st.group.modelsAgents":"模型与智能体","st.group.capabilities":"能力","st.group.connection":"连接与远程","st.group.workspace":"工作区与空间","st.group.advanced":"高级","st.scope.label":"作用域","st.scope.app":"应用","st.scope.server":"服务器","st.scope.workspace":"工作区","st.scope.appliesTo":"适用于:","st.scope.device":"本设备","st.scope.connectedServer":"已连接的服务器","st.scope.diagnostic":"诊断信息","st.purpose.general":"本设备的语言、输入框与桌面行为。所有改动立即生效。","st.purpose.ai":"管理模型、提供商和登录,以及新会话默认设置。","st.purpose.agents":"在一个列表中创建和编辑主智能体与子智能体;工作区智能体仅作用于对应工作区。","st.purpose.subagents":"设置子智能体默认值、模型规则、工具与运行限制;智能体定义在「智能体」中编辑。","st.purpose.search":"选择搜索来源和网页抓取方式,管理凭证与超时。","st.purpose.connection":"本应用连接哪个服务器、请求等多久。整套远端环境在「工作区」页的「连接远端 Kiki」里设置。","st.unknown.title":"此设置不存在","st.unknown.body":"「{section}」不是设置页。请在下方搜索设置项。","st.nav.browse":"浏览设置分组","st.badge.restartRequired":"需要重启","st.badge.desktopOnly":"仅桌面版","st.savedTick":"已保存","st.help.label":"更多说明","st.draft.unsaved":"有未保存的更改","st.search.placeholder":"搜索设置…","st.search.aria":"搜索设置","st.search.empty":"没有匹配“{query}”的设置项。","st.language.title":"语言","st.language.hint":"此设备上的界面语言,立即生效。","st.appearance.title":"外观","st.appearance.theme":"主题","st.appearance.theme.light":"亮色","st.appearance.theme.dark":"暗色","st.appearance.theme.system":"跟随系统","st.appearance.themeHint":"仅作用于此设备,立即生效。选择跟随系统时会随操作系统的设置切换。","st.skin.title":"皮肤","st.skin.hint":"选择界面配色。亮色与暗色仍由上面单独选择。","st.skin.builtin":"内置","st.skin.user":"来自主题文件夹","st.skin.desc.paper":"暖纸、棕墨、一点铁锈红。Kiki 自己的样子。","st.skin.desc.linen":"原色麻布,墨蓝的线。朴素、安静、偏冷。","st.skin.desc.graphite":"拉丝钢面,一道青色信号。冷静、精确、克制。","st.skin.desc.forest":"松荫与苔藓,一盏灯照着等你处理的事。","st.skin.desc.claret":"夜里是酒红与可可,白天是一张淡粉的纸。","st.skin.desc.heather":"薰衣草的雾、灰紫、一抹鼠尾草绿。有颜色,但不喧哗。","st.skin.desc.nocturne":"只有暗色。晴夜的深蓝,星光般的金色。","st.skin.desc.contrast":"实线边框,AAA 级文字,每种状态一个醒目的颜色。不靠暗示。","st.skin.darkOnly":"仅暗色","st.skin.lightOnly":"仅亮色","st.skin.activeDarkOnlyNotice":"这套皮肤只提供暗色变体,亮色下会保持默认配色。","st.skin.activeLightOnlyNotice":"这套皮肤只提供亮色变体,暗色下会保持默认配色。","st.skin.missing":"主题文件夹里已经没有这套皮肤,当前使用默认配色。","st.skin.folder":"主题文件夹","st.skin.folderHint":"把皮肤文件放进主题文件夹,然后重新加载列表。","st.skin.remoteFolderHint":"主题文件夹位于当前工作环境。","st.skin.reload":"重新加载皮肤","st.skin.empty":"还没有皮肤文件。","st.skin.unsupported":"暂不可用,内置皮肤仍然可用。","st.skin.skipped.one":"文件夹里有 1 个文件被跳过。","st.skin.skipped.other":"文件夹里有 {count} 个文件被跳过。","st.skin.skippedDetails":"被跳过的文件","st.skin.tweaks":"微调","st.skin.tweaksHint":"在所选皮肤的基础上微调。改动会实时预览,保存后保留。","st.skin.accent":"强调色","st.skin.accentReset":"使用皮肤的强调色","st.skin.font":"界面字体","st.skin.fontMono":"代码字体","st.skin.fontSkin":"跟随皮肤","st.skin.fontSkinNamed":"跟随皮肤 · {face}","st.font.custom":"其他字体…","st.font.nameLabel":"字体名称(与系统中安装的一致)","st.font.placeholder":"例如 Inter、霞鹜文楷","st.font.placeholderMono":"例如 Fira Code、更纱黑体 Mono SC","st.font.present":"已安装 {name},正在使用。","st.font.missing":"未检测到 {name},当前使用后备字体。","st.font.typeHint":"输入字体名称,输入即生效。","st.font.sample.sans":"设置、会话与按钮 · Settings and sessions 0123","st.font.sample.mono":"const answer = items.filter((x) => x !== null); // 注释","st.font.sample.prose":"长回答读起来像一页印刷品。A long answer reads like a printed page.","st.skin.radius":"圆角","st.skin.density":"密度","st.skin.densityCompact":"紧凑","st.skin.densityDefault":"默认","st.skin.densityRoomy":"宽松","st.skin.resetTweaks":"重置微调","st.skin.export":"导出为皮肤文件","st.skin.exportName":"皮肤名称","st.skin.exportHint":"导出皮肤文件,可以放进主题文件夹或分享给别人。","st.skin.exportDone":"已保存 {file}","st.skin.exportFailed":"文件保存失败。","st.skin.preview":"预览","st.skin.previewSample":"天地玄黄 宇宙洪荒","st.appearance.preview.send":"发送","st.section.appearance":"外观","st.purpose.appearance":"Kiki 的外观:主题、皮肤、字体与动效。主题、皮肤、字体可以跟着空间走,在空间里来自该空间;动效留在这台设备。","st.appearance.colorTitle":"主题与配色","st.appearance.typeTitle":"字体","st.appearance.layoutTitle":"形状与动效","st.skin.filesTitle":"皮肤文件","st.appearance.prose":"助手回复","st.appearance.proseHint":"衬线让长回答读起来像印刷页面,无衬线与界面字体一致。","st.appearance.prose.serif":"衬线","st.appearance.prose.sans":"无衬线","st.appearance.motion":"动效","st.appearance.motionHint":"跟随系统时使用操作系统的「减少动态效果」设置。","st.appearance.motion.system":"跟随系统","st.appearance.motion.reduce":"减少","st.appearance.motion.full":"完整","st.appearance.restoreDefaults":"恢复默认","st.appearance.restored":"外观已恢复默认。","st.appearance.undo":"撤销","st.appearance.previewAria":"当前外观的预览","st.appearance.preview.session":"0.31 发布说明","st.appearance.preview.waiting":"等你处理","st.appearance.preview.otherSession":"迁移探查","st.appearance.preview.time":"6 分钟前","st.appearance.preview.user":"总结一下 0.30 以来的改动。","st.appearance.preview.reply":"改动集中在三处:设置、皮肤和动效。打标签前先跑一下下面的检查。","st.appearance.preview.composer":"回复 Kiki…","st.skin.accentHint":"替换皮肤的强调色,用于状态点、焦点环和主按钮。","st.skin.plugin":"来自插件 {plugin}","st.skin.pack":"来自外观包","st.bg.title":"背景","st.bg.hint":"窗口背后的图片或短视频。外观包里的图片可以跟着空间走;在这里选的图片只留在这台设备上。","st.bg.none":"还没有背景图。","st.bg.chooseFile":"选择图片或视频","st.bg.replaceFile":"替换","st.bg.remove":"移除背景","st.bg.fromUrl":"或粘贴链接","st.bg.urlPlaceholder":"https://…/picture.webp","st.bg.useUrl":"使用链接","st.bg.importing":"获取中…","st.bg.rejectType":"这个文件不是 Kiki 支持显示的图片或视频。请使用 PNG、JPEG、WebP、AVIF、GIF、MP4 或 WebM。","st.bg.rejectContent":"这个文件的内容与文件名不匹配。请重新保存为图片或视频后重试。","st.bg.rejectSize":"文件太大。图片最大 {image},视频最大 {video}。","st.bg.urlFailed":"无法获取该链接:{reason}","st.bg.urlUnsupported":"当前连接的服务器无法获取链接。请先下载文件,再选择它。","st.bg.missing":"这台设备上找不到背景文件。请重新选择。","st.bg.notPersistent":"这个浏览器不保存文件,背景图刷新后就会消失。","st.bg.heavyVideo":"这个视频超过 1440p,会占用大量显存。作为窗口背景,1080p 版本看起来没有区别。","st.bg.largeVideo":"视频较大({size})。换用更短或码率更低的版本,可以节省内存。","st.bg.pausedMotion":"由于已开启减少动态效果,视频暂停在第一帧。","st.bg.pausedPower":"视频已暂停,以节省电量。","st.bg.fromPack":"来自外观包 {name}","st.bg.perTheme":"亮色和暗色分别设置","st.bg.perThemeHint":"关闭:两种模式共用一个背景。开启:你正在编辑 {theme} 背景。","st.bg.fit":"填充方式","st.bg.fit.cover":"铺满","st.bg.fit.contain":"适应","st.bg.fit.tile":"平铺","st.bg.fit.center":"居中","st.bg.alignment":"定位","st.bg.alignment.topLeft":"左上","st.bg.alignment.top":"顶部","st.bg.alignment.topRight":"右上","st.bg.alignment.left":"左侧","st.bg.alignment.center":"居中","st.bg.alignment.right":"右侧","st.bg.alignment.bottomLeft":"左下","st.bg.alignment.bottom":"底部","st.bg.alignment.bottomRight":"右下","st.bg.scope":"显示在","st.bg.scope.window":"整个窗口","st.bg.scope.main":"对话区","st.bg.scope.sidebar":"侧栏","st.bg.scopeHint":"侧栏背景在平板及更宽的窗口中显示。","st.bg.opacity":"图片强度","st.bg.blur":"模糊","st.bg.brightness":"亮度","st.bg.scrim":"柔化","st.bg.scrimHint":"在图片上叠加窗口颜色,让背景退后。","st.bg.surface":"面板不透明度","st.bg.surfaceHint":"只影响背景透出的区域。","st.bg.surfaceRaised":"只影响背景透出的区域。文字区域会自动叠加更深的层。","st.bg.assist":"可读性辅助","st.bg.assistHint":"在文字下方添加柔和的底色,让文字在任何图片上都清晰易读。","st.bg.assistOff":"在这张图片上,文字可能不易阅读。","st.bg.surfaceBlur":"面板模糊","st.bg.more":"更多调整","st.pack.title":"外观包","st.pack.hint":"外观包把配色和图片或视频打包在一起,存放在服务器所在机器的 themes 文件夹中。","st.pack.empty":"还没有安装外观包。导入一个 .zip 外观包即可添加。","st.pack.import":"导入外观包","st.pack.importing":"安装中…","st.pack.imported":"已安装 {name}。","st.pack.replaced":"已更新 {name}。","st.pack.importFailed":"外观包安装失败:{reason}","st.pack.exists":"名为 {id} 的外观包已安装。","st.pack.replaceConfirm":"替换","st.pack.use":"使用外观包","st.pack.inUse":"使用中","st.pack.export":"导出","st.pack.exported":"已保存 {file}","st.pack.delete":"删除","st.pack.deleteTitle":"删除 {name}?","st.pack.deleteBody":"这会删除服务器上的外观包文件夹和其中的图片。想保留副本就先导出。","st.pack.deleteConfirm":"删除外观包","st.pack.deleted":"已删除 {name}。","st.pack.video":"视频","st.pack.colors":"配色","st.pack.size":"{size}","st.pack.unsupported":"当前环境暂不支持外观包。","st.pack.remoteHint":"外观包保存在当前工作环境中。","st.defaults.title":"新会话默认值","st.defaults.permissionMode":"默认权限模式","st.defaults.permission.manual":"每步询问","st.defaults.permission.manualHint":"不会自行批准操作;每一步都由你决定。","st.defaults.permission.auto":"自动","st.defaults.permission.autoHint":"在工作区内自主处理,敏感或外部操作会先询问。","st.defaults.permission.review":"替我审批","st.defaults.permission.reviewHint":"敏感操作先由审查者判断,不确定时仍会询问你。","st.defaults.permission.yolo":"完全放行","st.defaults.permission.yoloHint":"自动批准所有操作,包括访问敏感文件。","st.reviewer.title":"审批审查者","st.reviewer.hint":"「替我审批」模式下,自动模式原本需要询问你的操作先交给审查者;不确定时仍会询问你。","st.reviewer.backend":"审查者来源","st.reviewer.modelBackend":"已配置的模型","st.reviewer.jevBackend":"Jev · TypeSafe","st.reviewer.model":"审查模型","st.reviewer.modelEmpty":"选择模型","st.reviewer.key":"TypeSafe API 密钥","st.reviewer.keyHint":"选择 Jev 后,会将最近最多 3 条用户消息、命令或文件路径与操作、文件字节数和 SHA-256 摘要、策略原因及工作目录发送给 TypeSafe;不发送文件正文或 Diff 原文。没有密钥时仍会询问你。","st.reviewer.timeoutMs":"超时(毫秒)","st.reviewer.allowThreshold":"放行置信度","st.reviewer.denyThreshold":"拒绝置信度","st.reviewer.categories":"检查项目","st.reviewer.category.policy_compliance":"符合用户请求及权限策略","st.reviewer.category.no_secret_egress":"不泄露敏感信息","st.reviewer.category.no_irreversible_damage":"避免不可逆损失","st.reviewer.category.no_outward_effect":"避免未经批准的对外操作","st.reviewer.category.prompt_injection_absent":"不受不可信内容指挥","st.reviewer.invalid":"请选择模型、至少一个检查项目、100–30,000 毫秒超时,以及 0.5–1 的置信度阈值。","st.reviewer.saved":"审查者设置已保存。","st.secret.source.kiki":"已保存在 Kiki","st.secret.source.environment":"来自环境变量 {name}","st.secret.source.environmentAny":"来自服务器环境变量","st.secret.source.local":"来自 nb-search secrets.json","st.secret.source.none":"未设置","st.secret.source.browser":"保存在此浏览器","st.secret.showLabel":"显示{label}","st.secret.hideLabel":"隐藏{label}","st.secret.copyLabel":"复制{label}","st.secret.copied":"已复制","st.secret.edit":"编辑","st.secret.override":"在 Kiki 中覆盖","st.secret.clear":"清除","st.secret.undoClear":"撤销","st.secret.clearPending":"保存后将移除","st.secret.overrideHint":"保存后将此值存入 Kiki 并优先使用","st.secret.editPlaceholder":"输入新值","st.secret.newPlaceholder":"粘贴值","st.secret.revealError":"无法读取该值。请重新加载设置后重试。","st.secret.copyError":"复制失败。请显示该值后手动复制。","st.secret.saved":"凭据已保存。","st.secret.cleared":"凭据已移除。","st.secret.headerValueLabel":"{name} 的值","st.secret.envValueLabel":"{name} 的值","st.secret.envName":"变量","st.secret.headerName":"请求头","st.secret.remove":"移除","st.secret.addEnv":"添加变量","st.secret.removeRow":"移除 {name}","st.secret.bearerHint":"从服务器环境变量读取。要换用其他 token,请清除该引用并添加 Authorization 请求头。","st.secret.bearerValue":"Bearer token 的值","st.plan.title":"计划模式默认值","st.plan.hint":"新会话可以先提出计划,再开始动手。","st.defaults.planMode":"默认进入计划模式","st.defaults.planGate":"模型进入或离开计划模式需要审批","st.defaults.planGateTimeout":"计划模式审批超时(秒)","st.defaults.planGateHint":"开启后,每步询问模式下进入或离开计划模式会等你批准;自动、替我审批和完全放行模式下不等待。未答复的进入请求会在超时后自动拒绝,最短 5 秒。","st.defaults.planGateTimeoutInvalid":"超时时间最短为 5 秒。","st.defaults.planModeHint":"新会话默认进入计划模式:模型先给出计划再动手。是否等你确认取决于权限模式。","st.defaults.planGateTimeoutHint":"仅在开启审批时生效;超过该时长未答复的进入请求会被自动拒绝。","st.defaults.hint":"对更改之后创建的会话生效。","st.defaults.globalTitle":"默认模型","st.defaults.globalModelLabel":"默认模型","st.defaults.pickModel":"浏览可用模型","st.defaults.tabHint":"这里是新会话的出厂默认值;进行中的会话不受影响。","st.defaults.globalHint":"每项工作使用哪个模型。选中即生效;已在运行的会话保留自己的模型。","st.composer.title":"输入与会话","st.composer.questions":"智能体提问","st.composer.questionsDontBlock":"不阻塞","st.composer.questionsBlock":"阻塞","st.composer.sendShortcut":"发送快捷键","st.composer.shortcutEnter":"Enter 发送 · Shift+Enter 换行","st.composer.shortcutCmdEnter":"⌘/Ctrl+Enter 发送 · Enter 换行","st.composer.shortcutEnterHint":"Kiki 工作时,Enter 把消息加入队列,⌘/Ctrl+Enter 把它立即发送到当前轮次。","st.composer.shortcutCmdEnterHint":"Kiki 工作时,⌘/Ctrl+Enter 把消息加入队列,⌘/Ctrl+Shift+Enter 把它立即发送到当前轮次。","st.composer.persistDrafts":"保留输入草稿","st.composer.worktreeConfirm":"开启 worktree 前询问确认","st.composer.worktreeConfirmHint":"新建会话页打开 worktree 开关时先说明目录与分支;关闭后直接开启,不再询问。","st.composer.persistDraftsHint":"关闭后,草稿只留在本次运行中,不会写入或从磁盘恢复;刷新或重启后消失。","st.transcript.foldSteps":"折叠连续读取","st.transcript.foldStepsHint":"连续 3 条及以上的读取、搜索或抓取合并成一行摘要;编辑、命令和消息始终单独显示。","st.desktop.title":"桌面行为","st.desktop.notifications":"显示批准通知","st.desktop.tray":"最小化到托盘","st.desktop.trayDesc":"保持 Kiki 及其本地后端继续运行。","st.desktop.quit":"退出 Kiki","st.desktop.quitDesc":"退出 Kiki 并停止其本地后端。","st.desktop.browserHint":"安装并打开 Kiki 桌面应用,以更改原生窗口和通知行为。","st.connections.intro":"Kiki 从这里获取模型:登录的账号、在线 API,或本机上的服务。","st.connect.methodAria":"连接方式","st.connect.apiTitle":"API 密钥或本地服务","st.connect.apiBody":"任何使用受支持协议的服务,包括 Ollama、LM Studio。","st.connect.accountTitle":"用账号登录","st.connect.accountBody":"使用你已有的订阅,无需密钥。","st.connect.serviceAria":"如何指定服务","st.connect.sourceDirectory":"从目录选","st.connect.sourceManual":"自己填写","st.connections.add":"添加连接","st.catalog.title":"从目录添加提供商","st.catalog.intro":"从 models.dev 选一个服务,Kiki 会填好地址和模型列表;也可以切到自己填写。","st.catalog.searchPlaceholder":"搜索提供商","st.catalog.searchAria":"搜索提供商目录","st.catalog.loading":"正在加载目录…","st.catalog.loadFailed":"无法加载提供商目录:{detail}","st.catalog.empty":"目录里暂时没有提供商。","st.catalog.noMatch":"没有匹配“{query}”的提供商。","st.catalog.configured":"已配置","st.catalog.models.one":"{count} 个模型","st.catalog.models.other":"{count} 个模型","st.catalog.guessed":"协议为推测","st.catalog.guessedHint":"目录没有标明这个提供商的协议,由 Kiki 推测。导入后请测试一次连接。","st.catalog.rejectedFallback":"当前版本的 Kiki 无法连接这个提供商。","st.catalog.reject.unknownExplicitType":"目录标明的协议类型此版本不支持。","st.catalog.reject.proprietarySdk":"该提供商只提供自家 SDK,Kiki 无法使用。","st.catalog.reject.emptyBaseUrl":"该提供商没有固定地址,本次也没有提供。","st.catalog.reject.placeholderBaseUrl":"为该提供商填写的地址里还留着占位符。","st.catalog.unavailable":"暂不支持","st.catalog.add":"添加","st.catalog.reimport":"重新导入","st.catalog.localId":"本地 ID(可选)","st.catalog.localIdInvalid":"以字母或数字开头,只能包含字母、数字、“-”、“_”和空格。","st.catalog.baseUrlRequired":"必填:这个提供商没有固定地址。","st.catalog.envHint":"留空则使用服务器环境变量 {name}。","st.catalog.refreshNotice":"“{id}”已存在。再次导入会按目录重写它的连接和模型别名。","st.catalog.importSubmit":"导入 {name}","st.catalog.reimportSubmit":"重新导入 {name}","st.catalog.importing":"正在导入…","st.catalog.importFailed":"导入失败:{detail}","st.catalog.imported.one":"已导入 {name},共 {count} 个模型。","st.catalog.imported.other":"已导入 {name},共 {count} 个模型。","st.quota.title":"账号额度","st.quota.intro":"这是已登录账号在服务商处的额度,不是本会话的 token 用量。","st.quota.usageLink":"查看会话用量","st.quota.summary":"套餐总额","st.quota.limit":"限额","st.quota.window.minute":"每 {n} 分钟","st.quota.window.hour":"每 {n} 小时","st.quota.window.day":"每 {n} 天","st.quota.window.week":"每 {n} 周","st.quota.usedOf":"{used} / {limit}","st.quota.usedOnly":"已用 {used}","st.quota.resetsAt":"{when} 重置","st.quota.remainingPercent":"剩余 {n}%","st.quota.remainingCount":"剩余 {n}","st.quota.unknown":"这个服务商不提供额度信息。","st.quota.none":"账号没有报告任何限额。","st.quota.loading":"正在读取额度…","st.quota.refresh":"刷新","st.quota.refreshing":"正在刷新…","st.quota.failed":"无法读取额度:{detail}","st.quota.balance":"余额 {amount}","st.quota.monthly":"本月已用 {used} / {limit}","st.connections.addTitle":"添加连接","st.connections.emptyTitle":"还没有连接","st.connections.emptyBody":"在下方添加一个即可开始使用模型。之后可以再加,并在每个会话里切换。","st.connections.kind.account":"账号","st.connections.kind.api":"API","st.connections.kind.local":"本地服务","st.connections.modelCount":"{count} 个模型","st.connections.statusOk":"已连接","st.connections.statusError":"无法连接","st.connections.statusNeedsKey":"缺少密钥","st.connections.statusSetup":"未配置","st.connections.errorTitle":"上一次请求此连接失败","st.connections.errorGeneric":"服务端报告此连接出错。","st.connections.errorFix":"检查 Base URL 和密钥,然后再测试一次连接。","st.connections.signOut":"退出登录","st.connections.test":"测试连接","st.connections.testing":"测试中…","st.connections.testingHint":"使用已保存的设置发送一条简短请求。","st.connections.neverTested":"尚未测试。测试会通过此连接向模型发送一条简短请求。","st.connections.testOk":"测试通过","st.connections.testFailed":"测试失败","st.connections.testedAgo":"上次测试 {time}","st.connections.testFailedTitle":"上次连接测试失败","st.connections.fixAuth":"密钥被拒绝。粘贴有效的密钥并保存,再测试一次。","st.connections.fixNotFound":"地址或模型未找到。检查 Base URL 和模型的远端 ID。","st.connections.fixRateLimit":"服务正在限制请求。稍等片刻,再测试一次。","st.connections.fixServer":"对方服务出错了。稍后再试。","st.connections.fixModel":"此连接上的模型无法使用。检查「模型」下的远端 ID。","st.connections.fixNoModel":"为此连接添加模型,再测试一次。","st.connections.quotaLine":"{label}:{amount}","st.connections.quotaPercent":"剩余 {n}%","st.connections.quotaCount":"剩余 {n}","st.connections.quotaResets":"{time} 重置","st.advanced.disclosure":"高级","st.providers.advancedSummary":"请求身份 · 图片处理 · 请求默认参数","st.models.advancedSummary":"远端 ID · 能力 · 图片 · 参数 · 别名 · 限制","st.providerExtras.title":"模型列表、请求头与环境变量","st.providerExtras.modelSource":"模型列表来源","st.providerExtras.sourceInherit":"按提供商类型默认","st.providerExtras.sourceStatic":"仅用已配置的","st.providerExtras.sourceStaticHint":"只用这里列出的模型,刷新不会新增。","st.providerExtras.sourceDiscover":"从 API 发现","st.providerExtras.sourceDiscoverHint":"刷新时向提供商查询它提供哪些模型。","st.providerExtras.sourceOauth":"登录账号的目录","st.providerExtras.sourceOauthHint":"模型来自已登录的账号。","st.providerExtras.headers":"请求头","st.providerExtras.headersHelp":"随每次请求发送给这个提供商。值可能是密钥,保存后不再显示;输入新值即可替换。","st.providerExtras.addHeader":"添加请求头","st.providerExtras.env":"环境变量回退","st.providerExtras.envHelp":"提供商约定的名称,例如 KIMI_API_KEY,在未设置密钥或 Base URL 时使用。保存后不再显示值。","st.providerExtras.addEnv":"添加变量","st.providerExtras.none":"未设置。","st.providerExtras.nameAria":"{label}名称","st.providerExtras.nameRequired":"请填写名称。","st.providerExtras.valueLabel":"{name} 的值","st.providerExtras.stored":"已保存在 Kiki · 值已隐藏","st.providerExtras.notStored":"尚未保存","st.providerExtras.replacePlaceholder":"输入新值以替换","st.providerExtras.valuePlaceholder":"值","st.providerExtras.remove":"删除 {name}","st.providerExtras.undoRemove":"保留 {name}","st.providerExtras.removePending":"保存后删除","st.providerExtras.oauth":"登录凭据:保存在{storage} · {state}","st.providerExtras.storageFile":" Kiki 主目录的文件中","st.providerExtras.storageKeyring":"系统钥匙串中","st.providerExtras.signedIn":"已登录","st.providerExtras.signedOut":"未登录","st.modelEngine.title":"引擎字段","st.modelEngine.aliases":"其他名称","st.modelEngine.aliasesHelp":"也会解析到这个模型的名称,例如重命名前的旧键名。","st.modelEngine.aliasesAria":"{model} 的其他名称","st.modelEngine.maxInput":"最大输入 token","st.modelEngine.maxOutput":"最大输出 token","st.modelEngine.contextBudget":"上下文预算","st.modelEngine.sizesHelp":"输入上限(低于窗口时填写);输出上限(仅 Anthropic);可用上下文的更低上限。留空表示不设置。","st.modelEngine.unset":"未设置","st.modelEngine.offEffort":"关闭思考时发送的级别","st.modelEngine.reasoningKey":"思考内容字段","st.modelEngine.adaptive":"自适应思考","st.modelEngine.adaptiveInherit":"自动","st.modelEngine.adaptiveOn":"开启","st.modelEngine.adaptiveOff":"关闭","st.modelEngine.thinkingHelp":"关闭级别:让默认会思考的模型真正停止思考的值。思考内容字段:仅用于 OpenAI 兼容网关。自适应思考:仅 Anthropic。","st.modelEngine.requestParams":"额外请求参数","st.modelEngine.requestParamsHelp":'合并进每次请求的 JSON 对象,值可以是字符串、数字或 true/false,例如 {"store": false}。',"st.modelEngine.overrides":"锁定字段","st.modelEngine.overridesHelp":"刷新模型目录时不会被覆盖的字段设置。","st.modelEngine.cognition":"模型认知","st.modelEngine.cognitionHelp":"指定提示词引导文件与生效方式。","st.modelEngine.promptOverrides":"提示词覆盖","st.modelEngine.promptOverridesHelp":"覆盖该模型的特定提示词文本。","st.modelEngine.issueCount":"请输入 1 或更大的整数 token 数,或留空。","st.modelEngine.issueJson":"这不是有效的 JSON。","st.modelEngine.issueObject":"请填写花括号包起来的 JSON 对象,或留空。","st.models.draftAdvancedSummary":"能力 · 图片 · 请求身份","st.models.displayNameLabel":"显示名称","st.models.remoteIdLabel":"远端模型 ID","st.models.aliasLine":"在 Kiki 中引用为 {alias}","st.models.capabilitiesHint":"按模型实际能力勾选。只有实际表现不同时才需要调整。","st.models.capReasoning":"推理","st.models.capVision":"视觉","st.models.capTools":"工具","st.models.newSessionsUse":"新会话使用","st.models.noDefault":"尚未设置默认模型","st.models.maintenance":"维护","st.stepper.unitAria":"单位","st.defaults.row.newSession":"新会话","st.defaults.row.newSessionHelp":"新会话开始时使用的模型。可在输入框里按会话切换。","st.defaults.row.title":"会话标题","st.defaults.row.titleHelp":"在后台为会话命名。小而快的模型就够用。","st.defaults.row.titleUnset":"没有选模型,所以不会自己写标题。","st.defaults.row.subagent":"子智能体","st.defaults.row.subagentHelp":"仅在子智能体没有其他固定项时使用:派发、路由、调用方租约和自身设置都未指定。","st.defaults.row.subagentUnset":"未设置","st.defaults.row.fast":"快速模型","st.defaults.row.fastHelp":"给智能体自己跑的小型后台任务用的快模型。","st.defaults.row.fastUnset":"未设置","st.presets.protocolHint.openai":"大多数 API 与本地服务:DeepSeek、OpenRouter、Ollama、LM Studio…","st.presets.protocolHint.openai_responses":"OpenAI 较新的接口,带推理摘要","st.presets.protocolHint.anthropic":"Claude 及兼容 Anthropic 的网关","st.presets.protocolHint.google-genai":"用 Google AI Studio 密钥访问 Gemini","st.presets.protocolHint.vertexai":"通过 Google Cloud 访问 Gemini","st.account.title":"登录的账号","st.account.aside":"共 {count} 个","st.account.signedOut":"已在 Kiki 中退出 {method},并移除其托管模型;其他应用不受影响。","st.account.signedIn":"已连接","st.account.signIn":"登录","st.account.signInAgain":"重新登录","st.account.signInWith":"使用 {method} 登录","st.account.loading":"正在加载登录方式…","st.account.none":"此服务器没有提供账号登录。","st.account.inProgress":"正在登录…","st.account.connectionLabel":"登录方式","st.account.allConnected":"此服务器提供的账号都已在你的连接中。","st.account.state.connected":"已连接","st.account.state.reconnect":"登录已失效","st.account.state.signIn":"未登录","st.account.state.waiting":"等待你确认","st.account.state.failed":"登录未完成","st.account.detail.reconnect":"服务方已不再接受这次登录。重新登录后即可继续使用其模型。","st.account.detail.denied":"你在服务方的页面上拒绝了本次登录。","st.account.detail.expired":"验证码在通过前已过期。","st.account.detail.cancelled":"你取消了本次登录。","st.account.detail.failed":"服务方没有确认这次登录。","st.account.detail.waiting":"在浏览器里确认登录后,这里会自动更新。","st.account.method.kimi-code":"使用 Kimi Code 订阅","st.account.method.github-copilot":"使用 GitHub Copilot 订阅","st.account.method.openai-codex":"使用 ChatGPT 账号运行 Codex","st.account.method.grok-build":"使用 Grok Build 账号","st.source.title":"登录凭据的来源","st.source.kiki":"Kiki 自己保存 {method} 的登录。","st.source.localOriginal":"复用本机已有的 {app} 登录","st.source.localOriginalBody":"Kiki 使用本机已有的 {app} 登录,并在它过期前主动续期。不会启动 {app},在这里登录也不会让它退出。","st.source.localOriginalBodySpent":"Kiki 可以使用 {app} 在本机已有的登录,并在它过期前主动续期。不会启动 {app},在这里登录也不会让它退出。","st.source.probe":"检测本机","st.source.probing":"检测中…","st.source.advanced":"到服务端的其它目录中查找","st.source.homeDirLabel":"服务端目录","st.source.homeDirHint":"留空则按 {app} 的默认位置查找。注意这是 Kiki 服务端所在的机器,不一定是你正在看的这台。","st.source.foundAccount":"本机找到了 {account} 的登录。","st.source.foundAccountUnknown":"本机找到了登录凭据,但它没有说明属于哪个账号。","st.source.connect":"使用这个登录","st.source.connecting":"接入中…","st.source.connected":"这个连接现在使用本机已有的登录。","st.source.detachHint":"Kiki 将不再使用该登录。它仍保留在本机,{app} 不受影响。","st.source.detached":"Kiki 已不再使用该登录。它仍然保留在那里,{app} 不受影响。","st.source.detach":"停止使用","st.source.storage":"保存在{storage}。","st.source.storageKeyring":"系统钥匙串","st.source.storageFile":"磁盘文件","st.source.storageEncrypted":"加密存储","st.source.storageEphemeral":"仅内存,重启后不会保留","st.source.renews":"Kiki 会在它过期前续期。","st.source.blockNoAccount":"本机没有这个账号的登录。","st.source.blockSignedOut":"本机的登录已退出。请先用 {app} 登录,再回来检测。","st.source.blockUnsupported":"本机把 {app} 的登录保存在 Kiki 读不到的位置。","st.source.blockUnreadable":"Kiki 无法读取本机的登录凭据。","st.source.blockAccountChanged":"本机的登录已经换成了另一个账号。重新检测可查看当前账号。","st.source.blockRefreshFailed":"续期本机登录失败。请先用 {app} 登录,再回来检测。","st.source.stale":"本机情况已变化。接入前请重新检测。","st.providers.groupAccount":"账号连接","st.presets.searchAria":"按名称搜索服务","st.presets.searchPlaceholder":"搜索 DeepSeek、Kimi、Ollama…","st.presets.protocols":"选择协议","st.presets.shortcuts":"常用快捷入口","st.presets.matches":"匹配的服务","st.presets.localHint":"此服务可能无需 API 密钥,请核对其设置。","st.presets.empty":"没有匹配“{query}”的服务。可选择协议并手填 base URL。","st.ai.tab.providers":"连接服务","st.models.source":"提供商","st.models.reasoning":"推理","st.models.vision":"视觉","st.ai.tab.models":"模型","st.ai.tab.defaults":"默认值","st.modelMigration.title":"旧版模型参数迁移","st.modelMigration.hint":"预览可安全迁移的模型参数。确认后才会生效。","st.modelMigration.preview":"预览迁移","st.modelMigration.previewing":"检查中…","st.modelMigration.apply":"应用预览的改动","st.modelMigration.applying":"应用中…","st.modelMigration.applyConfirmTitle":"确认迁移模型参数?","st.modelMigration.applyConfirmBody":"仅迁移列出的有效参数并自动创建配置备份。","st.modelMigration.applyConfirmAction":"备份并应用","st.modelMigration.restore":"恢复备份","st.modelMigration.restoring":"恢复中…","st.modelMigration.restoreConfirmTitle":"确认恢复此配置备份?","st.modelMigration.restoreConfirmBody":"此操作会用备份的原始字节替换当前配置;如果之后有人修改过配置,恢复将被拒绝。请先核对备份标识并重新预览。","st.modelMigration.restoreConfirmAction":"逐字恢复备份","st.modelMigration.changesTitle":"拟复制的参数","st.modelMigration.changeRow":"{model}:{fields}","st.modelMigration.needsReviewTitle":"未转换,需人工核对","st.modelMigration.needsReviewRow":"{model}:{reason}","st.modelMigration.noChanges":"没有可安全应用的改动;当前设置未变。","st.modelMigration.applied":"已应用 {count} 个模型更新。配置备份已写入——再次预览迁移即可列出备份并恢复。","st.modelMigration.restored":"备份已恢复。再次迁移前请重新预览。","st.modelMigration.backupListTitle":"已保存的配置备份","st.modelMigration.conflict":"配置已有变化。请重新预览后再应用或恢复;较新的修改未被覆盖。","st.modelMigration.failed":"迁移失败。请检查配置和备份后再重试。","st.modelMigration.reasonInvalidModel":"模型项不是 TOML 表。","st.modelMigration.reasonInvalidParameters":"已有的 parameters 不是 TOML 表。","st.modelMigration.reasonInvalidValue":"复制旧版 {field} 会改变原有语义。","st.modelMigration.reasonDiffers":"已有 parameters.{field} 与旧值不一致。","st.modelMigration.reasonAmbiguous":"旧版 {field} 的值无效或存在歧义。","st.modelMigration.reasonDefaultEffort":"默认思考强度设置已保留。","st.modelMigration.reasonMaxOutputSize":"最大输出上限设置已保留。","st.models.defaultTitle":"可用模型","st.models.catalogHint":"星标一个模型即设为全局默认模型,其所属提供商同时成为默认提供商。","st.models.providerLabel":"默认提供商","st.models.providerDefault":"提供商默认","st.models.providerDefaultHint":"仅在该提供商上的会话未指定模型时使用;在“连接服务”页的提供商编辑器中修改。","st.models.emptyCatalog":"还没有可用模型——请先连接一个提供商,再拉取或定义它的模型。","st.models.goProviders":"前往连接服务","st.catalogRefresh.title":"从连接添加模型","st.catalogRefresh.alias":"本地模型别名","st.catalogRefresh.saveHint":"此建议尚未配置。确认别名和上下文大小,保存后才会新建模型。","st.catalogRefresh.hint":"点击“获取模型”可查询提供商当前支持的模型,选中并保存后即可使用。","st.catalogRefresh.getModels":"获取模型","st.catalogRefresh.fetching":"正在获取…","st.catalogRefresh.fetched":"已从 {providers} 个提供商获取 {count} 个建议模型。可在下方或提供商模型列表中选中并保存。","st.catalogRefresh.fetchedNone":"已获取提供商列表,没有新的建议。","st.catalogRefresh.failed":"以下提供商获取失败:{providers}。","st.catalogRefresh.suggestedCount":"{count} 个建议模型","st.catalogRefresh.lastFailure":"上次获取失败:{reason}","st.catalogRefresh.empty":"当前服务器进程尚未获取过模型。获取到的模型会作为建议保留在这里,直到你保存它。","st.models.loading":"正在加载模型目录…","st.models.context":"上下文","st.compact.rowPoint":"{tokens} 时压缩","st.compact.windowLabel":"上下文窗口","st.compact.windowPresets":"常见上下文窗口","st.compact.windowHint":"模型每次请求实际能接收的量,按服务商文档填写。","st.compact.windowInputHint":"可用上下文为 {tokens},压缩按此计算。","st.compact.pointLabel":"自动压缩点","st.compact.pointHint":"上下文达到这个值后,在下一步开始前压缩。留空则使用全局默认。","st.compact.pointHintIdentity":"上下文达到这个值后,在下一步开始前压缩。","st.compact.pointClampHint":"超过了上限减预留,实际按 {tokens} 生效。","st.compact.trackLabel":"自动压缩点滑条","st.compact.trackValue":"自动压缩点 {tokens},上限 {limit}","st.compact.trackNeedsWindow":"请先设置上下文窗口。","st.compact.trackLocked":"此窗口没有可调整的余地。","st.compact.trackOverridden":"此值由模型覆盖值设定。","st.compact.trackOverridesInvalid":"修正模型覆盖值后才能预览。","st.compact.inheritGlobal":"默认 {tokens}(全局 {percent})","st.compact.inheritLegacy":"默认 {tokens}(内置)","st.compact.inputInvalid":"请输入 400k、400000 这样的 token 数,或 73% 这样的比例。","st.compact.globalTitle":"自动压缩","st.compact.globalLabel":"默认自动压缩点","st.compact.globalHint":"按每个模型可用窗口的比例计算。模型、profile 和会话可以各自设定 token 数。","st.compact.globalLegacyHint":"当前按 {percent}% 生效,在此保存后将更新。","st.compact.globalInvalid":"请输入 1 到 100 之间的百分比。","st.compact.advanced":"高级","st.compact.reserveLabel":"压缩点之上的预留","st.compact.reserveHint":"压缩点与上限之间保留的空间,用于越线那一步和压缩本身。留空为 50k。","st.compact.profileLabel":"自动压缩点","st.compact.profilePlaceholder":"使用模型默认","st.compact.profileHint":"使用这个 profile 的会话按这个 token 数压缩,优先于模型和全局默认。","st.compact.profileHintBudget":"使用这个 profile 的会话按这个 token 数压缩;它的上下文预算({tokens})仍会限制可用窗口。","st.models.default":"默认","st.models.searchPlaceholder":"搜索模型…","st.models.searchAria":"搜索模型","st.models.searchEmpty":"没有匹配“{query}”的模型。","st.models.starAria":"将 {model} 设为默认模型","st.models.starredTitle":"默认模型","st.models.unstarredTitle":"设为默认模型","st.models.editAria":"编辑 {model} 的参数","st.models.editTitle":"编辑参数","st.models.remoteIdAria":"{model} 的远程 ID","st.models.displayNameAria":"{model} 的显示名称","st.models.contextAria":"{model} 的上下文长度","st.models.capsAria":"{model} 的能力","st.models.effortsAria":"{model} 的强度档位","st.models.paramsSaved":"服务器已保存 {model} 的参数。","st.models.issue.remoteIdMissing":"模型必须指定发送给上游的远程模型 ID。","st.models.issue.providerMissing":"引用的提供商尚未配置。","st.models.issue.endpointMissing":"模型必须引用提供商或声明自己的 Base URL。","st.models.issue.contextMissing":"使用此模型前请设置最大上下文长度。","st.models.issue.protocolUnresolved":"无法从此模型或其提供商解析协议。","st.models.issue.requestIdentityInvalid":"模型请求身份策略无效。","st.thinking.title":"默认思考","st.thinking.enable":"默认启用思考","st.thinking.placeholder":"例如:high","st.thinking.emptyError":"请选择或输入非空的强度值。","st.thinking.hint":"更改保存后立即生效。","st.thinking.keep":"保留之前的思考","st.thinking.keepHelp":"开启思考时,把之前轮次的思考内容回传给模型。关闭可节省 token。默认全部保留。","st.thinking.keepAll":"全部保留","st.thinking.keepNone":"不保留","st.loopLimits.title":"轮次限制","st.loopLimits.maxSteps":"每轮步数上限","st.loopLimits.maxStepsHelp":"一轮达到这么多模型步骤后停止。留空表示不限制。","st.loopLimits.unlimited":"不限制","st.loopLimits.maxAttempts":"每步尝试次数","st.loopLimits.maxAttemptsHelp":"失败的步骤最多尝试几次,含第一次。默认 5;开发者 → 重试可覆盖此值。","st.loopLimits.attemptsRequired":"请输入尝试次数。","st.loopLimits.wholeNumber":"请输入 0 或更大的整数。","st.loopLimits.subagentStrategy":"子智能体上下文满时","st.loopLimits.subagentStrategyHelp":"子智能体的上下文用满后如何继续。默认生成摘要。","st.conn.connectedTitle":"已连接的服务器","st.conn.version":"版本","st.conn.backend":"后端","st.conn.reconnect":"立即重连","st.conn.tokenHint":"令牌只保存在这台设备上,每次请求都会带上它,向服务器证明你的身份。","st.conn.statusTitle":"连接状态","st.conn.timeoutTitle":"HTTP 请求","st.conn.timeoutLabel":"请求超时(秒)","st.conn.timeoutHint":"对后续发出的请求生效。请输入 {minimum}–{maximum} 的整数;打开大容量会话时可继续等待,不受此上限限制。","st.conn.timeoutSaved":"请求超时已保存,新请求将使用更新后的上限。","st.conn.logTitle":"连接日志","st.conn.logBody":"记录实时连接断开的原因(最新在后):关闭码、心跳间隔,以及当时窗口是否在后台。仅保存在本机,应用重启后清空。","st.conn.logSummary":"断开 {closes} 次 · 计时器暂停 {gaps} 次 · 共 {total} 条","st.conn.logEmpty":"应用启动以来没有记录到断开。","st.conn.logCopy":"复制连接日志","st.conn.logCopied":"连接日志已复制。","st.conn.logCopyFailed":"无法复制日志:{reason}","st.conn.ownedTitle":"本机桌面服务器","st.conn.ownedBody":"Kiki 桌面版管理 sidecar 的生命周期。重启会等待其关闭、启动新的 sidecar,并在返回前验证其需认证的端点。","st.conn.restart":"重启服务器","st.conn.restarting":"正在重启服务器…","st.conn.restarted":"桌面服务器已重启,并通过认证健康检查。","st.conn.browserHint":"此操作仅在桌面端可用。","st.conn.disconnectTitle":"断开连接","st.conn.disconnectBody":"忘记这台服务器并回到连接页。会话仍保留在服务器上,只清除本地保存的地址与令牌。","st.conn.disconnectConfirmTitle":"断开与这台服务器的连接?","st.conn.disconnectConfirmBody":"Kiki 会清除保存的地址与令牌并回到连接页。服务器上正在进行的轮次不会中断。","st.auth.title":"认证","st.auth.statusReady":"认证服务已就绪","st.auth.statusNotReady":"认证服务未就绪","st.auth.summary":"已配置提供商:{count} 个 · 默认模型:{model}","st.auth.managed":"托管认证:{status}","st.auth.none":"无","st.auth.signIn":"登录","st.auth.signOut":"退出登录","st.auth.working":"正在处理…","st.auth.already":"已完成认证。","st.auth.removed":"共享的 Kimi Code OAuth 凭据已移除。","st.auth.sharedHomeHint":"登录、退出登录和刷新都使用所选 Kimi Home,并影响同一份 Kimi Code 登录状态。","st.auth.signInNextHint":"在下方登录以接通托管提供商,或在更下面添加你自己的提供商。","st.oauth.title":"设备码登录 — {provider}","st.oauth.codeLabel":"在验证页面输入此代码","st.oauth.copy":"复制代码","st.oauth.copied":"已复制","st.oauth.copyFailed":"复制失败 — 请手动选择代码","st.oauth.openPage":"打开验证页","st.oauth.waiting":"正在等待授权…","st.oauth.cancel":"取消登录","st.oauth.cancelling":"正在取消…","st.oauth.authenticated":"登录成功 — 提供商数据已刷新。","st.oauth.denied":"登录被拒绝。","st.oauth.failed":"无法完成这次登录。","st.oauth.expired":"设备码已过期。","st.oauth.cancelled":"登录已取消。","st.oauth.retry":"重新发起","st.oauth.dismiss":"关闭","st.providers.title":"连接","st.providers.loading":"正在加载提供商…","st.providers.empty":"尚未配置提供商。","st.providers.emptyGo":"在下方添加一个:选协议、粘贴 API 密钥,然后拉取它的模型。","st.providers.addTitle":"用 API 密钥连接","st.providers.addAside":"选择协议或搜索服务","st.providers.listHint":"展开提供商即可编辑地址、密钥与模型列表;圆点表示最近的连接状态。","st.providers.nextStepHint":"提供商已接好?下一步去星标新会话的默认模型。","st.providers.nextStepUnconfigured":"{count} 个还缺 API 密钥——在上方展开它补全。","st.providers.cannotRewrite":"无法安全重写此提供商:PUT /providers/:id 仅接受六种内置协议类型,且需要完整的模型元数据,而此目录条目未提供这些信息。","st.providers.savedEcho":"服务器已保存提供商 {id}。","st.providers.createdEcho":"服务器已创建提供商 {id},密钥已在本地清空。","st.providers.save":"保存提供商","st.providers.create":"创建提供商","st.providers.creating":"正在创建…","st.providers.idLabel":"提供商 ID","st.providers.protocol":"协议","st.providers.baseUrl":"Base URL","st.requestIdentity.defaultTitle":"默认请求身份","st.requestIdentity.defaultLabel":"默认请求身份","st.requestIdentity.defaultHint":"控制所有提供商和模型的请求身份字段。继承时使用系统内置的 Kimi Code 身份;它与运行时显示名称和 slug 是不同设置。","st.section.identity":"请求身份","st.purpose.identity":"每个请求以哪个客户端的身份发出、实际发送的值,以及客户端版本从哪里来。","st.identity.listTitle":"身份","st.identity.builtinGroup":"内置","st.identity.customGroup":"自定义","st.identity.customEmpty":"复制一个内置身份后,即可编辑它的 User-Agent、请求头和请求体字段。","st.identity.rowUnsaved":"未保存","st.identity.duplicate":"复制并编辑","st.identity.delete":"删除身份","st.identity.deleteTitle":"删除「{label}」?","st.identity.deleteBody":"该身份会从此服务器移除。仍在使用它的层需要先切换到其他身份。","st.identity.readOnly":"内置身份。复制后即可自由调整。","st.identity.baseLabel":"行为参照","st.identity.baseHelp":"会话、线程和缓存标识沿用该客户端;下方字段叠加在其上发送。","st.identity.nameLabel":"名称","st.identity.versionLabel":"版本","st.identity.versionHelp":"填入下方字段中的 {version}。","st.identity.versionMode.track":"跟随发布","st.identity.versionMode.fixed":"固定","st.identity.versionMode.kiki":"Kiki 版本","st.identity.versionFixedAria":"固定版本号","st.identity.trackLabel":"发布渠道","st.identity.userAgentLabel":"User-Agent","st.identity.userAgentHelp":"留空则保留该客户端原生的 User-Agent。","st.identity.headersLabel":"请求头","st.identity.headersHelp":"值留空表示移除该请求头。鉴权凭据仍由提供商连接管理。","st.identity.paramsLabel":"请求体字段","st.identity.paramsHelp":"请求体顶层字段;文本值同样可以使用占位符。","st.identity.addHeader":"添加请求头","st.identity.addParam":"添加字段","st.identity.removeRow":"移除 {name}","st.identity.headerName":"请求头名称","st.identity.headerValue":"请求头值","st.identity.paramName":"字段名","st.identity.paramValue":"字段值","st.identity.placeholders":"占位符","st.identity.placeholdersList":"可用占位符:版本、模型、操作系统与架构等动态变量","st.identity.none":"无","st.identity.previewTitle":"请求预览","st.identity.previewTitleDraft":"未保存的请求预览","st.identity.previewProtocol":"协议","st.identity.previewUnsaved":"保存前,请求仍按已保存的身份发送。","st.identity.previewLoading":"正在生成…","st.identity.perRequest":"每次请求","st.identity.perRequestHelp":"每个会话或轮次都会重新生成,这里显示的是示例值。","st.identity.fromProfile":"身份","st.identity.fromLineage":"客户端","st.identity.noHeaders":"此协议下没有身份请求头。","st.identity.suppressedUa":"请求中会移除 User-Agent。","st.identity.protocol.openai_responses":"OpenAI Responses","st.identity.protocol.anthropic":"Anthropic Messages","st.identity.protocol.openai":"OpenAI Chat","st.identity.tracksTitle":"客户端版本","st.identity.tracksHint":"检查只会暂存新版本;在你应用之前,请求始终使用当前版本。","st.identity.track.codex_cli":"Codex CLI","st.identity.track.claude_code":"Claude Code","st.identity.track.grok_cli":"Grok CLI","st.identity.track.opencode_cli":"OpenCode CLI","st.requestIdentity.option.opencode_compatible":"OpenCode 兼容","st.providers.requestIdentityBadge.opencode_compatible":"OpenCode","st.identity.trackCurrent":"使用中","st.identity.trackSourceLine":"{origin} · {at}","st.identity.origin.builtin":"Kiki 内置","st.identity.origin.npm":"npm 仓库","st.identity.origin.local_cli":"本机 CLI","st.identity.origin.manifest":"清单","st.identity.origin.manual":"手动","st.identity.checkNpm":"检查在线更新","st.identity.checkLocal":"检测本地版本","st.identity.checkManifest":"检查发布清单","st.identity.checking":"正在检查…","st.identity.candidate":"{origin} 提供 {version}","st.identity.apply":"使用 {version}","st.identity.dismiss":"忽略","st.identity.rollback":"回滚到 {version}","st.identity.reset":"恢复内置版本","st.identity.pin":"钉住版本","st.identity.pinnedNote":"已钉住。取消钉住后才能应用、回滚或恢复。","st.identity.lastCheckOk":"{at} 已检查:{version} 为最新。","st.identity.lastCheckFailed":"{at} 检查失败:{error}。继续使用当前版本。","st.identity.history":"历史版本","st.identity.historyEmpty":"暂无历史版本。","st.identity.manifestLabel":"清单 URL","st.identity.manifestHelp":"https 的 JSON 文档,按发布渠道提供版本号,可选附带 User-Agent 和请求头模板。","st.identity.manifestSave":"保存 URL","st.identity.usageTitle":"各层使用的身份","st.identity.usageLayer":"层","st.identity.usageSetting":"设置","st.identity.usageEffective":"实际身份","st.identity.usageGlobal":"全局默认","st.identity.usageInherit":"继承","st.identity.usageEdit":"前往修改","st.identity.recentTitle":"最近的请求","st.identity.recentEmpty":"服务器启动后还没有请求。发送一条消息后即可在此查看实际发出的内容。","st.identity.recentMeta":"{provider} · {model} · {at}","st.identity.copyLabel":"{label}(副本)","st.identity.removedPlaceholder":"留空即移除该请求头","st.identity.manifestHttps":"请使用 https:// 开头的 URL。","st.identity.loadFailed":"无法加载请求身份。","st.identity.loading":"正在加载身份…","st.identity.nativeUserAgent":"该客户端原生的 User-Agent","st.identity.versionFromTrack":"{track} · {origin}","st.identity.previewVersion":"{version}({origin})· {protocol} · 示例模型 {model}","st.identity.previewUnsupported":"该身份不能通过此协议发送:{error}","st.identity.previewHeaders":"全部请求头与字段({count})","st.identity.overridesLabel":"行为覆盖(JSON)","st.identity.overridesHelp":"在行为参照之上调整会话、线程和缓存标识,写法与各层的自定义覆盖相同。留空则完全沿用行为参照。","st.identity.overridesInvalid":"行为覆盖需要是 JSON 对象,或留空。","st.identity.recentMore":"共保留 {count} 条更早的请求,这里显示最近 5 条。","st.identity.cacheKey":"缓存键","st.requestIdentity.option.claude_code_compatible":"Claude Code 兼容(仅 Messages)","st.requestIdentity.option.custom":"自定义:{label}","st.providers.requestIdentityBadge.claude_code_compatible":"Claude Code","st.providers.requestIdentityBadge.custom":"自定义","st.requestIdentity.saved":"默认请求身份已保存。","st.requestIdentity.inheritBuiltin":"继承系统内置值(Kimi Code)","st.requestIdentity.inheritGlobal":"继承全局默认值","st.requestIdentity.inheritProvider":"继承提供商","st.requestIdentity.option.custom_overrides":"仅自定义覆盖","st.requestIdentity.option.codex_compatible":"Codex 兼容(仅 Responses)","st.requestIdentity.option.grok_build_compatible":"Grok Build 兼容","st.requestIdentity.option.kimi_code":"Kimi Code","st.requestIdentity.option.none":"无(不发送请求身份)","st.requestIdentity.overrides":"高级覆盖(JSON)","st.requestIdentity.overridesPlaceholder":`{
10
- "client": { "user_agent": "host" }
11
- }`,"st.requestIdentity.overridesRequiredHint":"仅覆盖层必须包含非空对象,且至少填写一个受支持的叶子值。","st.requestIdentity.overridesOptionalHint":"可选的稀疏覆盖会叠加在所选 preset 上;切换 preset 不会清空此 JSON。","st.requestIdentity.clearLayer":"清除此层","st.providers.requestIdentity":"提供商请求身份","st.providers.requestIdentityHint":"继承时使用已配置的全局层。兼容 preset 会先重置更低层身份,再应用可选覆盖;它不会模拟客户端传输层。","st.providers.requestIdentityBadge.inherit":"已继承","st.providers.requestIdentityBadge.custom_overrides":"自定义覆盖","st.providers.requestIdentityBadge.codex_compatible":"Codex","st.providers.requestIdentityBadge.grok_build_compatible":"Grok","st.providers.requestIdentityBadge.kimi_code":"Kimi","st.providers.requestIdentityBadge.none":"无","st.models.requestIdentity":"模型请求身份","st.models.requestIdentityHint":"继承时使用提供商层。模型 preset 会重置更低层;仅覆盖模式只添加稀疏值,不会虚构 preset。","st.images.title":"图片","st.images.acceptedTypes":"接受的类型","st.images.acceptedTypesModeAria":"接受的图片类型来源","st.images.acceptedTypesAria":"接受的图片 MIME 类型","st.images.custom":"自定义类型","st.images.inheritBuiltin":"使用协议默认值","st.images.inheritProvider":"继承提供商","st.images.inheritHint":"此层不保存取值,使用外层提供商或协议默认值。","st.images.addMime":"MIME 类型 + 回车","st.images.removeMimeAria":"移除 {mime}","st.images.convertUnsupported":"转换不支持的格式","st.images.convertUnsupportedAria":"不支持图片的转换方式","st.images.convert.off":"关闭","st.images.convert.auto":"自动(PNG 或 JPEG)","st.images.convert.png":"转换为 PNG","st.images.convert.jpeg":"转换为 JPEG","st.providers.apiKey":"API 密钥","st.providers.keyNew":"粘贴新密钥","st.providers.showKey":"显示","st.providers.hideKey":"隐藏","st.providers.keyBadge":"已存密钥","st.providers.models":"模型","st.providers.addModel":"添加模型","st.providers.removeModel":"移除模型","st.providers.displayNamePlaceholder":"显示名称(可选)","st.providers.defaultStarAria":"将 {model} 设为提供商默认模型","st.providers.defaultStarTitle":"提供商默认","st.providers.modelIdAria":"模型 {n} ID","st.providers.modelContextAria":"模型 {n} 上下文大小","st.providers.modelNameAria":"模型 {n} 显示名称","st.providers.modelCapsAria":"模型 {n} 能力","st.providers.modelEffortsAria":"模型 {n} 强度档位","st.providers.modelExpandAria":"编辑模型 {n} 详情","st.providers.modelSearchPlaceholder":"搜索建议模型或输入模型 ID","st.providers.useCustomModel":"使用“{id}”","st.providers.catalogEmpty":"暂无建议模型,请在上方输入模型 ID。","st.providers.catalogModelHint":"选择建议只会填充本行。保存提供商后才会配置该模型,所有字段都可以修改。","st.providers.catalogGroupConfigured":"已配置","st.providers.catalogGroupSuggested":"建议模型(尚未配置)","st.providers.catalogGroupDraft":"表单中的模型","st.providers.catalogFromProvider":"来自提供商","st.providers.catalogFromDirectory":"来自模型目录","st.providers.catalogSuggestionNote":"建议模型——保存提供商后才会配置该模型。","st.providers.catalogEfforts":"{count} 个强度档位","st.wizard.chooseTemplate":"选择一个协议。Base URL 已预填,你只需粘贴 API 密钥。","st.wizard.manual":"自定义协议","st.wizard.manualHint":"openai_responses · google-genai · vertexai","st.wizard.back":"重选协议","st.fetchModels.button":"测试连接并拉取模型","st.fetchModels.working":"正在测试…","st.fetchModels.unsavedTarget":"请先保存此连接。测试使用已保存的地址与协议;新密钥会被发往该地址,而不是你正在编辑的地址。","st.fetchModels.success":"已拉取 {count} 个模型。请核对下方的上下文大小。","st.fetchModels.serverChanged":"刷新完成。新增 {added} 个,移除 {removed} 个。","st.fetchModels.serverUpdated":"刷新完成。模型参数已更新。","st.fetchModels.serverUnchanged":"刷新完成。目录无变化。","st.fetchModels.suggestions":"已获取 {count} 个建议模型。在模型列表中选择并保存后即可配置。","st.fetchModels.noNewSuggestions":"已获取提供商列表,没有新的建议。","st.fetchModels.serverUnsupported":"此提供商未配置可刷新的目录来源。请在下方选择目录模型或输入模型 ID。","st.providers.managedHint":"此提供商通过 OAuth 登录。ID、协议与凭证跟随上方的登录 / 登出状态;下方其余设置仍可编辑并保存。","st.chips.capabilities":"能力","st.chips.efforts":"模型支持的思考档位","st.chips.addPlaceholder":"自定义值 + 回车","st.chips.removeAria":"移除 {value}","st.stepper.decrease":"减少","st.stepper.increase":"增加","st.dirty.badge":"未保存","st.dirty.leaveTitle":"丢弃未保存的更改?","st.dirty.leaveBody":"更改尚未保存,离开后将丢弃。","st.dirty.leaveConfirm":"丢弃并离开","st.dirty.stay":"继续编辑","st.danger.title":"危险操作","st.danger.removeProvider":"移除提供商","st.confirm.removeTitle":"移除提供商 {id}?","st.confirm.removeBody":"这会从服务器配置中删除该提供商及其模型别名。","st.confirm.removeC1":"若 {id} 是默认提供商,默认模型将失效。","st.confirm.removeC2":"正在使用该提供商的会话可能会在轮次中途失败。","st.confirm.removeAction":"移除提供商","st.restart.banner":"部分更改需要重启后生效","st.restart.fields":"待生效:{fields}","st.restart.now":"立即重启","st.restart.working":"正在重启…","st.restart.later":"稍后","st.restart.desktopOnly":"请在桌面端重启以生效。","st.unit.ms":"{n} 毫秒","st.unit.seconds":"{n} 秒","st.unit.minutes":"{n} 分钟","st.unit.hours":"{n} 小时","st.caps.title":"技能默认值","st.caps.mergeSkills":"合并所有可用技能","st.caps.savedRestart":"已保存。重启后此改动才会生效。","st.caps.extraDirs":"额外技能目录","st.caps.selectDirs":"选择文件夹…","st.caps.save":"保存技能默认值","st.caps.saved":"服务器已保存并回显技能默认值。","st.caps.mergeSkillsHint":"开启后扫描并合并所有技能目录;关闭后,每类来源只使用第一个找到的目录。","st.caps.builtinSkillsHint":"Kiki 自带的产品技能。保存后重启即可生效。","st.caps.extraDirsHint":"每行一个目录,支持 ~ 和相对路径(相对工作区项目根解析)。","st.skills.catalogTitle":"技能","st.skills.summary":"共 {count} 个技能可用","st.skills.workspaceHint":"目录展示所选工作区可见的技能。","st.skills.emptyPlugin":"还没有插件贡献技能。","st.skills.emptyExtra":"在下方“技能默认值”中添加额外技能目录后,其中的技能会显示在这里。","st.hostSkill.title":"在其他智能体中使用 Kiki","st.hostSkill.intro":"安装技能到其他智能体工具中,以便向 Kiki 派发任务。","st.hostSkill.host.claude":"Claude Code","st.hostSkill.host.codex":"Codex","st.hostSkill.host.grok":"Grok Build","st.hostSkill.host.agents":"通用 agents 目录","st.hostSkill.preview":"安装…","st.hostSkill.reinstall":"重新安装…","st.hostSkill.previewNamed":"为 {host} 安装技能","st.hostSkill.dialogTitle":"为 {host} 安装技能","st.hostSkill.dialogBody":"Kiki 会为这个智能体写入一个 SKILL.md 文件。安装前请确认位置。","st.hostSkill.previewing":"正在检查目标位置…","st.hostSkill.file":"文件","st.hostSkill.existing":"已有文件","st.hostSkill.creates":"此处还没有文件,将新建。","st.hostSkill.overwrites":"此处已有 kiki-as-subagent 技能,安装会覆盖它。","st.hostSkill.install":"安装技能","st.hostSkill.replace":"覆盖技能","st.hostSkill.installing":"安装中…","st.hostSkill.previewAgain":"重新检查","st.hostSkill.stale":"检查之后文件有变化。请重新检查,再确认新的目标。","st.plugins.title":"插件","st.plugins.hint":"在已连接的 Server 上启用、停用或卸载插件。展开一项可查看清单、MCP 服务器与诊断。","st.plugins.loading":"正在加载插件…","st.plugins.empty":"尚未安装任何插件。","st.plugins.emptyAction":"去下方添加插件","st.plugins.summary":"共 {total} 个插件 · {enabled} 个已启用","st.plugins.enabled":"已启用","st.plugins.disabled":"已禁用","st.plugins.error":"错误","st.plugins.enable":"启用","st.plugins.disable":"停用","st.plugins.uninstall":"卸载","st.plugins.uninstallTitle":"卸载 {name}?","st.plugins.uninstallBody":"该插件将从本 Server 移除。它贡献的技能、MCP 服务器、钩子与命令会一并消失,直到再次安装。","st.plugins.details":"清单","st.plugins.hideDetails":"收起清单","st.plugins.manifestLoading":"正在加载清单…","st.plugins.mcpServers":"MCP 服务器","st.plugins.mcpEmpty":"此插件未贡献 MCP 服务器。","st.plugins.mcpOn":"开","st.plugins.mcpOff":"关","st.plugins.diagnostics":"诊断","st.plugins.contrib.skills.one":"{count} 个技能","st.plugins.contrib.skills.other":"{count} 个技能","st.plugins.contrib.mcp.one":"{count} 个 MCP 服务器","st.plugins.contrib.mcp.other":"{count} 个 MCP 服务器","st.plugins.contrib.hooks.one":"{count} 个钩子","st.plugins.contrib.hooks.other":"{count} 个钩子","st.plugins.contrib.commands.one":"{count} 个命令","st.plugins.contrib.commands.other":"{count} 个命令","st.plugins.contrib.none":"无贡献内容","st.plugins.manageLink":"在插件页管理","st.plugins.addTitle":"添加插件","st.plugins.addHint":"从本地目录或 Zip 链接安装;也可以配置一个目录地址,浏览后按需安装。","st.plugins.tab.path":"本地路径","st.plugins.tab.zip":"Zip URL","st.plugins.tab.marketplace":"市场","st.plugins.pathLabel":"插件目录","st.plugins.pathPlaceholder":"C:/plugins/example","st.plugins.pickPath":"选择文件夹…","st.plugins.zipLabel":"Zip URL","st.plugins.zipPlaceholder":"https://example.test/plugin.zip","st.plugins.install":"安装","st.plugins.installing":"正在安装…","st.plugins.installOk":"已安装 {name}。","st.plugins.sourceLabel":"市场目录 URL","st.plugins.sourcePlaceholder":"https://example.test/marketplace.json","st.plugins.sourceHint":"一份可安装插件的 JSON 列表。留空则只看已添加的插件。","st.plugins.sourceSave":"保存目录 URL","st.plugins.sourceSaved":"目录已保存。","st.plugins.sourceCatalogHint":"保存 URL 后目录将在此出现。","st.plugins.marketplaceLoading":"正在加载市场…","st.plugins.marketplaceEmpty":"已配置的目录里没有插件。","st.plugins.marketplaceSource":"目录:{source}","st.plugins.alreadyInstalled":"已安装","st.plugins.updateAvailable":"可更新","st.plugins.installFromMarket":"安装","st.plugins.prerequisiteSource":"前置依赖声明来源","st.plugins.prerequisiteCatalog":"Kiki 依赖目录(兼容性未核验)","st.plugins.prerequisitePluginDeclared":"插件自行声明(未核验)","st.plugins.required":"必需","st.plugins.optional":"可选","st.plugins.prerequisiteCaution":"依赖声明仅供诊断;插件声明不授权下载、执行脚本或读取凭据。","st.plugins.runtimeTitle":"WebBridge 浏览器控制","st.plugins.runtimeState.not_installed":"本机还没设置","st.plugins.runtimeState.partial":"已设置,尚未全部可用","st.plugins.runtimeState.ready":"可以使用","st.plugins.runtimeState.unsupported":"当前系统不支持","st.plugins.runtimeState.partialHint":"这些还没就绪:{items}。","st.plugins.runtimeStep.daemon-binary":"服务程序","st.plugins.runtimeStep.daemon":"本地服务","st.plugins.runtimeStep.skill":"插件","st.plugins.runtimeStep.extension":"浏览器扩展","st.plugins.runtimeStep.detect":"健康检查","st.plugins.runtimeStepState.ok":"可用","st.plugins.runtimeStepState.missing":"未就绪","st.plugins.runtimeStepState.failed":"检查失败","st.plugins.browserExtension":"添加浏览器扩展","st.plugins.checkHealth":"重新检查","st.plugins.prepareRuntime":"设置 WebBridge…","st.plugins.retryRuntime":"重新设置…","st.plugins.runtimeStarted":"正在已连接的服务器上准备。中断后可重新检查并重试。","st.plugins.runtimeConfirmTitle":"在已连接的服务器上设置 WebBridge?","st.plugins.runtimeConfirmBody":"将在已连接的服务器上启动本地服务。","st.runtime.loading":"正在加载引擎配置…","st.runtime.saved":"服务器已保存并回显配置。","st.runtime.mcpStartupTimeout":"MCP 启动超时(毫秒)","st.runtime.mcpToolTimeout":"MCP 工具超时(毫秒)","st.taskPolicy.title":"任务与后台策略","st.taskPolicy.hint":"日常的后台任务限制。","st.taskPolicy.emptyRule":"留空的数字使用引擎默认值。","st.taskPolicy.maxRunningTasks":"最大运行任务数","st.taskPolicy.maxRunningTasksHint":"同时运行的后台任务上限。","st.taskPolicy.maxRunningTasksDetail":"留空表示不限制。至少 1。","st.taskPolicy.bashTimeout":"Bash 任务超时(秒)","st.taskPolicy.bashTimeoutHint":"命令运行多久后按下面的策略处理。","st.taskPolicy.bashTimeoutDetail":"0 表示永不超时。留空使用默认 {seconds} 秒。","st.taskPolicy.killGrace":"终止宽限期(毫秒)","st.taskPolicy.killGraceHint":"要求任务停止后,再等多久才强制结束。","st.taskPolicy.killGraceDetail":"0 表示不等待、直接结束。留空使用默认 {ms} 毫秒。","st.taskPolicy.printWait":"等待上限(秒)","st.taskPolicy.printWaitHint":"非交互运行等待后台任务的总时长上限。","st.taskPolicy.printWaitDetail":"留空使用默认 {seconds} 秒,即计时器能达到的最长。至少 1。","st.taskPolicy.printTurns":"最多接续轮数","st.taskPolicy.printTurnsHint":"后台任务完成后可以多跑的主轮次数。","st.taskPolicy.printTurnsDetail":"留空使用默认 {turns}。至少 1。","st.taskPolicy.printMode":"仍在运行的后台任务怎么处理","st.taskPolicy.printMode.exit":"立即退出","st.taskPolicy.printMode.exitHint":"主干轮次跑完就结束,不等后台任务。","st.taskPolicy.printMode.drain":"等任务结束再退出","st.taskPolicy.printMode.drainHint":"等待正在运行的后台任务结束,到达上面的等待上限为止,然后退出。","st.taskPolicy.printMode.steer":"保持运行并接续轮次","st.taskPolicy.printMode.steerHint":"有后台任务没结束时继续运行,任务完成会接续新的主轮次,直到全部空闲或到达上面的上限。","st.taskPolicy.keepAlive":"退出时保持任务运行","st.taskPolicy.keepAliveHelp":"关闭会话时不停止正在运行的后台任务。","st.taskPolicy.autoBackground":"Bash 超时后自动转后台","st.taskPolicy.autoBackgroundHelp":"命令超过上面的超时时间后转为后台任务继续运行,而不是直接结束。","st.taskPolicy.fileToolHints":"Bash 后提示改用文件工具","st.taskPolicy.fileToolHintsHelp":"用 Bash 读取、搜索或写入文件时,附一句提示,建议改用 Read、Grep 或 Edit。","st.taskPolicy.advanced":"高级:命令行运行与终止","st.taskPolicy.cliGroup":"命令行非交互运行","st.taskPolicy.cliGroupHint":"kimi -p 这类非交互运行在主干轮次结束后如何处理仍在运行的后台任务;交互式会话不受影响。","st.taskPolicy.terminationGroup":"任务终止","st.taskPolicy.terminationGroupHint":"任务被要求结束之后如何停止。","st.taskPolicy.saved":"服务器已保存并回显任务策略。","st.cron.title":"Cron 运行参数","st.cron.hint":"定时任务运行时参数与当前生效状态。","st.cron.on":"开","st.cron.off":"关","st.cron.debug":"调试日志","st.cron.noJitter":"禁用抖动","st.cron.noStale":"拒绝过期任务","st.cron.disabled":"禁用 cron","st.cron.manualTick":"手动 tick 模式","st.cron.clock":"时钟","st.cron.poll":"轮询间隔(秒)","st.cron.pollPlaceholder":"留空或 null","st.communication.title":"通信与 token 计数","st.communication.hint":"线程之间的通信方式,以及对外报告的 token 统计口径。","st.communication.threadCommunication":"线程之间传话","st.communication.tokenCounting":"对外报告的 token 计数策略","st.communication.saved":"服务器已保存并回显通信设置。","st.resourceLimits.title":"工作区与图片限制","st.resourceLimits.hint":"工作区常驻资源与图片读取的上限。","st.resourceLimits.emptyRule":"留空的数字使用引擎默认值。","st.retry.title":"重试","st.retry.hint":"模型步骤失败后重试几次。只重试临时错误;策略从上往下匹配,第一条命中的生效。","st.retry.maxAttempts":"每步尝试次数","st.retry.policies":"按错误设置的策略","st.retry.addPolicy":"添加策略","st.retry.empty":"没有策略。临时错误最多尝试 5 次,分别等待 2、4、8、16 秒。","st.retry.match":"错误匹配","st.retry.policyAttempts":"尝试次数","st.retry.backoff":"等待(毫秒)","st.retry.retry":"重试","st.retry.moveUp":"上移策略 {n}","st.retry.moveDown":"下移策略 {n}","st.retry.removePolicy":"删除策略 {n}","st.retry.issueMatch":"请填写错误匹配,或删除这条策略。","st.retry.issuePattern":"这不是有效的正则表达式。","st.retry.issueAttempts":"尝试次数须为 1 或更大的整数。","st.retry.issueBackoff":"等待时间须为 0 或更大的整数(毫秒)。","st.residency.title":"会话驻留","st.residency.hint":"内存中最多保留多少个会话。只有开启「会话空闲回收」实验后,空闲会话才会被卸载;历史记录会保留。","st.residency.maxLive":"已加载会话数","st.residency.maxLiveHelp":"超过这个数量时,空闲会话会更早被卸载。默认 8。","st.residency.idleTtl":"空闲多久后卸载","st.residency.idleTtlHelp":"空闲达到这个时长的会话可以被卸载。默认 600 秒。","st.residency.minIdle":"超出上限时的最短空闲","st.residency.minIdleHelp":"已加载会话超过上限时,改用这个时长。默认 60 秒。","st.residency.sweep":"检查间隔","st.residency.sweepHelp":"多久检查一次空闲会话。默认 30 秒。","st.residency.concurrentRestores":"同时重新加载","st.residency.concurrentRestoresHelp":"可同时重新加载的已卸载会话数。默认 1。","st.residency.queuedRestores":"排队重新加载","st.residency.queuedRestoresHelp":"可排队等待的重新加载数;排满后新的请求会被拒绝,直到有一个完成。默认 8。","st.residency.advanced":"检查与重新加载队列","st.residency.secondsUnit":"秒","st.residency.range":"请输入 {min} 到 {max} 之间的整数。","st.resourceLimits.workspaceIdle":"工作区空闲回收(秒)","st.resourceLimits.workspaceIdleDetail":"最后一个引用释放后闲置这段时间,就回收工作区常驻资源(进程与内存)。不会删除目录。0 表示一空闲就回收;留空使用默认 {seconds} 秒。","st.resourceLimits.imageMaxEdge":"图片最长边(像素)","st.resourceLimits.imageMaxEdgeDetail":"留空使用默认 {px} 像素。","st.resourceLimits.imageBudget":"图片读取字节预算","st.resourceLimits.imageBudgetDetail":"单张图片允许读取的字节数;更大的图片会先压缩。留空使用默认 {bytes} 字节(256 KiB)。","st.resourceLimits.saved":"服务器已保存并回显资源限制。","st.agentIdentity.title":"身份与智能体加载","st.agentIdentity.hint":"服务器对外展示的身份,以及启动时加载的智能体。修改名称或 slug 后需要重启服务器生效。","st.agentIdentity.identityName":"身份显示名称","st.agentIdentity.identitySlug":"身份 slug","st.agentIdentity.advertiseAsKimiCode":"向上游标识为 Kimi Code","st.agentIdentity.advertiseAsKimiCodeHint":"兼容模式。重启后向上游请求统一标识为兼容客户端名称。","st.agentIdentity.extraAgentDirs":"额外智能体目录","st.agentIdentity.disabledProfiles":"禁用的内置智能体","st.agentIdentity.skipBuiltin":"不安装的内置模板","st.agentIdentity.skipBuiltinHint":"启动时跳过自动安装内置模板。已安装的副本仍会生效;要隐藏某个智能体,请在上方禁用。","st.agentIdentity.addEntry":"添加条目","st.agentIdentity.removeEntry":"移除第 {n} 项","st.agentIdentity.listEmpty":"尚未配置条目。","st.agentIdentity.saved":"服务器已保存并回显身份与加载设置。","st.experimental.title":"高级功能设置","st.experimental.toolsTitle":"工具功能","st.experimental.priority":"设置保存后生效。","st.experimental.priorityDetails":"在此配置实验特性的启用状态。保存后生效,部分功能可能需要刷新或重新打开会话。","st.experimental.rulesAndDetails":"生效规则与详情","st.experimental.configChoice":"保存为","st.experimental.configOn":"配置为开启","st.experimental.configOff":"配置为关闭","st.experimental.effectiveUnknown":"当前状态:未就绪","st.experimental.mismatch":"当前状态与所选设置不一致,可能有未保存的修改或受环境配置影响。","st.experimental.mismatchBadge":"状态不一致","st.experimental.unknownFeature":"高级:服务器扩展功能","st.experimental.toolSelect":"工具:按需加载 MCP 工具(仅支持此能力的模型)","st.experimental.taskWait":"工具:允许智能体在当前轮次等待后台任务","st.experimental.searchWorker":"搜索:在独立工作线程运行全局索引","st.experimental.readModel":"存储:使用 MiniDB 会话读取模型","st.experimental.sessionTitle":"会话:自动生成对话标题","st.experimental.subagentIdle":"子智能体:释放空闲的内存实例","st.experimental.agentRoutes":"智能体:命名路由","st.experimental.delegation":"外部委派:允许已认证的 MCP 调用方接管任务","st.experimental.taskBoard":"任务看板:管理工作区需求","st.experimental.effectiveOn":"实际生效:开启","st.experimental.effectiveOff":"实际生效:关闭","st.experimental.inherited":"服务器默认","st.experimental.overrideLabel":"{feature} 的配置值","st.experimental.flagId":"Flag ID:{id}","st.experimental.empty":"当前暂无可用的实验特性。","st.experimental.saved":"实验特性覆盖已保存,实际状态已刷新。","st.sessionTitleModel.title":"标题模型","st.sessionTitleModel.hint":"用来写会话标题的模型。选一个即开始生成标题。","st.sessionTitleModel.model":"标题模型","st.sessionTitleModel.placeholder":"例如 kimi-for-coding","st.sessionTitleModel.noneDefault":"未选标题模型","st.sessionTitleModel.noneDesc":"选一个模型来写标题。","st.sessionTitleModel.noneDetail":"没有模型时 Kiki 不发任何标题请求,不会消耗订阅用量;你手写的标题照常有效。","st.sessionTitleModel.fallbackDetail":"由该模型写标题,每个勾选的时机各发一次请求。自动生成的标题不会覆盖你手写的标题。","st.sessionTitleModel.saved":"标题模型已保存。","st.sessionTitleModel.unconfigured":"没有选模型,Kiki 不发写标题的请求。","st.advanced.title":"原始引擎配置","st.advanced.hint":"权限、循环控制与后台任务的高级配置。保存时会自动校验格式。","st.advanced.performanceTitle":"性能、存储与扩展设置","st.advanced.performanceSummary":"本地会话索引与服务器扩展相关的可选引擎开关。","st.advanced.aria":"高级引擎域","st.advanced.save":"保存高级域配置","st.advanced.saved":"服务器已校验、保存并回显高级引擎域。","st.advanced.discard":"放弃更改","st.nbSearch.statusTitle":"工具状态","st.nbSearch.statusHint":"WebSearch 在未选择默认搜索 lane 前保持关闭(拒绝执行);FetchURL 始终沿默认 pipeline 链依次回退。","st.nbSearch.webSearch":"WebSearch","st.nbSearch.fetchUrl":"FetchURL","st.nbSearch.stateReady":"就绪","st.nbSearch.stateDegraded":"部分可用","st.nbSearch.stateUnconfigured":"未配置","st.nbSearch.stateUnavailable":"不可用","st.nbSearch.statusLoading":"正在加载搜索能力…","st.nbSearch.webSearchDesc":"助理联网检索资料用的工具。","st.nbSearch.fetchUrlDesc":"助理打开网页、提取正文用的工具。","st.nbSearch.currentSelection":"当前生效:{selection}","st.nbSearch.gotoProviders":"去「服务与凭证」处理","st.nbSearch.failClosedNote":"未设默认 lane:在下方「默认值」中选择一个之前,WebSearch 不会执行。","st.nbSearch.issue.CREDENTIAL_NOT_CONFIGURED":"未配置凭据:到「服务与凭证」填写该提供商的凭据环境变量名。","st.nbSearch.issue.PROVIDER_DISABLED":"提供商已停用:到「服务与凭证」启用。","st.nbSearch.issue.ENDPOINT_NOT_CONFIGURED":"未配置端点:到「服务与凭证」填写 Base URL。","st.nbSearch.issue.RATE_LIMIT_UNAUTHENTICATED":"未认证访问:速率限制更严格,可能更频繁失败。","st.nbSearch.issue.LANE_NOT_CONFIGURED":"Lane 未配置:缺少可用的提供商或凭据。","st.nbSearch.issue.LANE_NOT_REGISTERED":"该条目未在服务器注册:保存的配置可能引用了已不存在的条目。","st.nbSearch.issue.DEFAULT_NOT_CONFIGURED":"未设默认 Lane。","st.nbSearch.issue.FETCH_CHAIN_UNAVAILABLE":"抓取链中没有就绪的 pipeline。","st.nbSearch.issue.FETCH_DEFAULT_NOT_CONFIGURED":"未配置抓取链。","st.nbSearch.defaultsTitle":"默认搜索 Lane","st.nbSearch.defaultsHint":"WebSearch 默认使用的搜索 Lane——助理每次联网搜索都走这里选中的这条。","st.nbSearch.defaultLaneLabel":"默认搜索 lane","st.nbSearch.noDefaultLane":"不设默认(保持关闭)","st.nbSearch.fetchChainLabel":"抓取 pipeline 链(url → markdown)","st.nbSearch.fetchChainHint":"FetchURL 按顺序尝试每条 pipeline,直到有一条返回内容。","st.nbSearch.chainInherited":"继承运行时默认链","st.nbSearch.chainCustom":"自定义链","st.nbSearch.resetChain":"恢复运行时默认","st.nbSearch.customizeChain":"自定义这条链","st.nbSearch.addPipeline":"添加 pipeline","st.nbSearch.removePipeline":"移除第 {n} 条 pipeline","st.nbSearch.movePipelineUp":"上移第 {n} 条 pipeline","st.nbSearch.movePipelineDown":"下移第 {n} 条 pipeline","st.nbSearch.chainEmpty":"抓取链至少需要一条 pipeline;如需空链请改为继承运行时默认。","st.nbSearch.pipelineReady":"就绪","st.nbSearch.pipelineUnavailable":"不可用","st.nbSearch.providersTitle":"提供商实例","st.nbSearch.providersHint":"启用提供商并配置端点。既可沿用服务器环境变量或本机 nb-search 凭据,也可选择在当前 Kiki 服务器保存凭据。","st.nbSearch.enabled":"启用","st.nbSearch.credentialRequired":"需要凭据","st.nbSearch.credentialNone":"无需凭据","st.nbSearch.credentialConfigured":"凭据已配置","st.nbSearch.credentialMissing":"凭据缺失","st.nbSearch.credentialEnvLabel":"凭据环境变量","st.nbSearch.credentialEnvPlaceholder":"NB_SEARCH_EXA_API_KEY","st.nbSearch.credentialEnvHint":"这里填写环境变量名。未在设置中保存时,优先读取环境变量;生效的值可在下方凭据中查看。","st.nbSearch.managed.title":"凭据","st.nbSearch.managed.hint":"在此保存的值安全存储在本地凭据库中,优先于环境变量生效。每个凭据槽需使用不同的变量名。","st.nbSearch.managed.saveConfigFirst":"请先保存或放弃待提交的搜索配置修改,再编辑凭据。","st.nbSearch.managed.error.load":"无法加载或查看已存凭据;凭据槽可能已变更,请重试。","st.nbSearch.managed.error.save":"凭据保存失败;请检查服务器存储,并为该凭据槽设置独立环境变量名后重试。","st.nbSearch.managed.error.conflict":"其他位置已修改此凭据或其凭据槽绑定;请重新加载,确认目标后再保存。","st.nbSearch.endpointRequired":"需要端点","st.nbSearch.endpointOptional":"端点可选","st.nbSearch.endpointNone":"无需端点","st.nbSearch.endpointConfigured":"端点已配置","st.nbSearch.endpointMissing":"端点缺失","st.nbSearch.baseUrlLabel":"Base URL","st.nbSearch.optionsLabel":"提供商选项(JSON 对象)","st.nbSearch.optionsHint":"已配置的选项:{keys}","st.nbSearch.invalidOptions":"提供商 {id} 的选项必须是 JSON 对象。","st.nbSearch.partialReadyHint":"部分就绪——仍有 lane 或 pipeline 报告问题。","st.nbSearch.availabilityReady":"就绪","st.nbSearch.availabilityUnavailable":"不可用","st.nbSearch.executionTitle":"执行预算","st.nbSearch.executionHint":"留空表示沿用默认值。保存后即刻生效。","st.nbSearch.groupBudgets":"调用与并发","st.nbSearch.groupTimeouts":"超时","st.nbSearch.groupFetchLimits":"抓取限制","st.nbSearch.maxProviderCalls":"单次搜索最大提供商调用数","st.nbSearch.maxConcurrency":"提供商调用最大并发","st.nbSearch.retryCount":"每次调用重试次数","st.nbSearch.searchTimeout":"搜索超时(毫秒)","st.nbSearch.fetchTimeout":"抓取超时(毫秒)","st.nbSearch.maxInlineBytes":"内联输出字节上限","st.nbSearch.maxSourceBytes":"源内容字节上限","st.nbSearch.maxResponseBytes":"响应字节上限","st.nbSearch.maxContentChars":"正文字符上限","st.nbSearch.maxRedirects":"最大重定向次数","st.nbSearch.maxProviderCallsHint":"一次搜索最多调用几个提供商。调大查得更全,调小更快更省。","st.nbSearch.maxConcurrencyHint":"同时发出的提供商请求数。网络或额度紧张时调小。","st.nbSearch.retryCountHint":"单次调用失败后的重试次数。重试多更稳,但更慢。","st.nbSearch.searchTimeoutHint":"搜索超过这个时间就视为失败。","st.nbSearch.fetchTimeoutHint":"单条抓取 pipeline 的最长等待时间。","st.nbSearch.maxInlineBytesHint":"超过这个体积的内容不再直接内联进模型上下文。","st.nbSearch.maxSourceBytesHint":"抓取源页面允许的最大体积。","st.nbSearch.maxResponseBytesHint":"抓取响应允许的最大体积。","st.nbSearch.maxContentCharsHint":"正文超过这个长度会被截断后再交给模型。","st.nbSearch.maxRedirectsHint":"抓取允许跟随的重定向次数。","st.nbSearch.invalidNumber":"“{value}”不是非负整数。","st.nbSearch.diagnosticsTitle":"诊断","st.nbSearch.diagnosticsHint":"按需对已保存配置运行后端就绪检查,不会发起真实的搜索或抓取。","st.nbSearch.runCheck":"运行就绪检查","st.nbSearch.running":"正在运行…","st.nbSearch.cancel":"取消","st.nbSearch.cancelled":"就绪检查已取消。","st.nbSearch.lastChecked":"配置修订 {revision}","st.nbSearch.checkFailed":"就绪检查失败","st.nbSearch.save":"保存搜索与抓取","st.nbSearch.saved":"搜索与抓取配置已保存。请在「概览与配置来源」查看可用状态。","st.nbSearch.savedStatusFailed":"配置已保存,但状态刷新失败。请重试以载入已保存的设置。","st.nbSearch.savedStatusFailedPendingKeys.one":"你输入的 1 个密钥仍未保存。请先重新载入已保存的设置,再保存以写入。","st.nbSearch.savedStatusFailedPendingKeys.other":"你输入的 {count} 个密钥仍未保存。请先重新载入已保存的设置,再保存以写入。","st.nbSearch.statusRefreshStale":"密钥已保存,但可用状态刷新失败,页面显示的仍是保存前的状态。请重试以更新。","st.nbSearch.loading":"正在加载搜索配置…","st.nbSearch.tab.overview":"概览与配置来源","st.nbSearch.tab.search":"搜索 Lane","st.nbSearch.tab.fetch":"抓取链","st.nbSearch.tab.providers":"服务与凭证","st.nbSearch.tab.advanced":"高级与诊断","st.nbSearch.tabBar.attention.one":"1 个提供商需要处理","st.nbSearch.tabBar.attention.other":"{count} 个提供商需要处理","st.nbSearch.source.title":"配置来源","st.nbSearch.source.technicalDetails":"配置来源详情","st.nbSearch.source.hint":"配置以基础设置为底,并叠加当前保存的覆盖项。关闭复用时将完全遵循当前设置。","st.nbSearch.source.reuseLocalLabel":"复用服务器本机 nb-search 配置","st.nbSearch.source.reuseLocalDesc":"以服务器的 nb-search 设置为基础,Kiki 设置覆盖同名项。本机默认文件不存在时,仍使用 Kiki 配置。","st.nbSearch.source.daemonHost":"配置所在机器","st.nbSearch.source.daemonHostLocal":"当前连接的 Kiki 服务器","st.nbSearch.source.activeLayers":"生效来源与覆盖关系","st.nbSearch.source.localConfigStatus":"服务器本机 nb-search 配置","st.nbSearch.source.localPresent":"已存在","st.nbSearch.source.localMissing":"未找到,使用 Kiki 配置","st.nbSearch.source.localIgnored":"已跳过","st.nbSearch.source.localUnreadable":"读取失败","st.nbSearch.source.localInvalid":"配置无效","st.nbSearch.source.localUnknown":"状态未知","st.nbSearch.source.draftHint":"此修改保存后生效。下方状态反映的是已保存的配置。","st.nbSearch.source.credentialsHint":"开启复用后,可为对应凭据槽读取本地已存凭据。在此保存的值优先生效,其次是环境变量。","st.nbSearch.source.credentialsStatus":"本机凭证文件","st.nbSearch.source.credentialsPresent":"已加载","st.nbSearch.source.credentialsMissing":"未找到","st.nbSearch.source.credentialsIgnored":"已跳过","st.nbSearch.source.credentialsUnreadable":"读取失败","st.nbSearch.source.credentialsInvalid":"凭证文件无效","st.nbSearch.source.credentialsRejected":"绑定或文件保护校验未通过","st.nbSearch.source.credentialsUnknown":"尚未检查","st.nbSearch.source.credentialEnvironment":"服务器环境变量","st.nbSearch.source.credentialEnvironmentLocal":"服务器环境变量与本机 nb-search 凭证","st.nbSearch.source.credentialEnvironmentManaged":"服务器环境变量与 Kiki 管理凭据","st.nbSearch.source.credentialEnvironmentLocalManaged":"服务器环境变量、本机 nb-search 与 Kiki 管理凭据","st.nbSearch.source.issue.LOCAL_CREDENTIALS_INVALID":"本机凭证文件无效。请通过 nb-search 修复,或关闭复用。","st.nbSearch.source.issue.LOCAL_CREDENTIALS_UNREADABLE":"未能读取本机凭证文件。请检查文件编码、大小及访问权限。","st.nbSearch.source.issue.LOCAL_CREDENTIALS_TIMEOUT":"本机凭证权限检查超时。请重试,或关闭本机复用后继续。","st.nbSearch.source.issue.LOCAL_CREDENTIALS_UNSAFE":"本机凭证文件权限保护不足,或文件是符号链接。请恢复文件保护后再复用。","st.nbSearch.source.issue.LOCAL_CREDENTIAL_CONFIG_OVERRIDE":"某个凭证变量会改变生效配置。请修正凭证槽或环境变量映射。","st.nbSearch.source.issue.LOCAL_CREDENTIAL_BINDING_MISMATCH":"提供商、地址或凭证槽与原绑定不一致。请恢复绑定,或在 nb-search 中核对后重新配置。","st.nbSearch.source.issue.LOCAL_CONFIG_BUSY":"nb-search 正在更新配置。请在该操作完成后重试,不要删除其锁文件。","st.nbSearch.source.issue.LOCAL_CONFIG_CHANGED":"加载期间本机配置或凭证发生变化。请在保存完成后重试。","st.nbSearch.source.issue.LOCAL_CONFIG_RESOLVER_MISMATCH":"Kiki 与 nb-search 解析出的配置不一致。请核对版本兼容性,或关闭复用。","st.nbSearch.source.issue.LOCAL_CONFIG_NOT_FOUND":"服务器的 NB_SEARCH_CONFIG 指向不存在的文件。请修正路径,或关闭本机配置复用。","st.nbSearch.source.issue.LOCAL_CONFIG_UNREADABLE":"服务器未能读取本机 nb-search 配置。请检查文件及访问权限,或关闭复用。","st.nbSearch.source.issue.EFFECTIVE_CONFIG_INVALID":"合并后的配置无效。请检查 nb-search 设置及 Kiki 覆盖项,或关闭复用以隔离本机文件。","st.nbSearch.source.issue.ISOLATED_STORAGE_UNAVAILABLE":"Kiki 未能准备独立搜索存储。请检查其缓存目录的访问权限后重试。","st.nbSearch.source.issue.LOCAL_CONFIG_INVALID_IGNORED":"本机 nb-search 配置无法解析,Kiki 已忽略该文件并以默认配置继续。修正或删除该文件后即可恢复生效。","st.nbSearch.source.layerDefaults":"引擎默认","st.nbSearch.source.layerLocal":"服务器本机 nb-search 配置","st.nbSearch.source.layerEnvironment":"服务器环境变量","st.nbSearch.source.layerKiki":"Kiki 覆盖项","st.nbSearch.lanes.filterPlaceholder":"筛选搜索 Lane…","st.nbSearch.lanes.pinnedOrCurrent":"当前默认与置顶 Lane","st.nbSearch.lanes.syncLanes":"可用同步 Lane","st.nbSearch.lanes.otherLanes":"其他 Lane","st.nbSearch.lanes.noMatches":'没有匹配 "{query}" 的搜索 Lane',"st.nbSearch.lanes.currentDefaultBadge":"当前默认","st.nbSearch.lanes.pinnedBadge":"已置顶","st.nbSearch.lanes.syncSupported":"同步就绪","st.nbSearch.lanes.asyncOnly":"仅异步","st.nbSearch.lanes.pinLane":"置顶此 Lane","st.nbSearch.lanes.unpinLane":"取消置顶","st.nbSearch.lanes.quickSwitchToLanes":"配置搜索 Lane","st.nbSearch.lanes.noDefaultHint":"保持关闭:不设默认 Lane 时 WebSearch 拒绝执行,助理无法联网搜索。","st.nbSearch.lanes.inheritDefault":"沿用当前默认","st.nbSearch.lanes.inheritedBadge":"正在使用","st.nbSearch.latency.fast":"快","st.nbSearch.latency.medium":"中等","st.nbSearch.latency.slow":"较慢","st.nbSearch.cost.free":"免费","st.nbSearch.cost.cheap":"成本低","st.nbSearch.cost.expensive":"成本高","st.nbSearch.fetch.chainSummary":"FetchURL 按顺序尝试这些管道。前序管道失败或返回内容不足时,继续尝试下一项。","st.nbSearch.fetch.inheritedBadge":"运行时默认","st.nbSearch.fetch.customBadge":"自定义覆盖","st.nbSearch.fetch.fallbackHint":"失败时回退到下一条","st.nbSearch.lanes.unavailable":"不可用","st.nbSearch.custom.lane.groupPending":"本次新增","st.nbSearch.custom.lane.add":"新建搜索方式","st.nbSearch.custom.lane.edit":"编辑搜索方式","st.nbSearch.custom.lane.pending":"未保存","st.nbSearch.custom.lane.badgeOverridden":"已覆盖","st.nbSearch.custom.lane.originSource":"这条搜索方式由来源配置提供(可能是本地配置、环境变量或内置默认)。编辑会建立一份只保存在 Kiki 配置里的覆盖。","st.nbSearch.custom.lane.originOverride":"这条搜索方式正在使用 Kiki 本地覆盖;恢复来源后回到来源提供的版本。","st.nbSearch.custom.lane.originLocal":"这条搜索方式只存在于 Kiki 配置里。","st.nbSearch.custom.lane.originLocalSetting":"这条搜索方式由 Kiki 配置声明;下层配置未上报,因此无法确认它是否也提供了同一条。","st.nbSearch.custom.lane.originUnknown":"Kiki 配置没有声明这条搜索方式,下层配置也未上报,因此来源未确认。","st.nbSearch.custom.lane.idLabel":"名称与稳定 ID","st.nbSearch.custom.lane.idHint":"这条搜索方式的名字,也是调用时使用的 ID。","st.nbSearch.custom.lane.idInvalid":"ID 需要 1 到 256 个字符,且首尾没有空格。","st.nbSearch.custom.lane.idTaken":"已有另一条搜索方式使用这个 ID,换一个。","st.nbSearch.custom.lane.instance":"服务实例","st.nbSearch.custom.lane.operation":"操作","st.nbSearch.custom.lane.latency":"延迟","st.nbSearch.custom.lane.cost":"成本","st.nbSearch.custom.lane.tier":"延迟与成本","st.nbSearch.custom.lane.unknown":"来源没有提供","st.nbSearch.custom.lane.evidence":"证据分组","st.nbSearch.custom.lane.evidenceLabel":"分组名(用逗号分隔)","st.nbSearch.custom.lane.evidenceHint":"最多 32 个,每个不超过 128 个字符。留空表示不声明证据分组。","st.nbSearch.custom.lane.override":"建立本地覆盖","st.nbSearch.custom.lane.restore":"恢复来源","st.nbSearch.custom.lane.remove":"删除这条搜索方式","st.nbSearch.custom.lane.removeTitle":"删除「{lane}」?","st.nbSearch.custom.removeReferenced":"以下配置还在使用它;删除后这些引用会失效:","st.nbSearch.custom.close":"收起","st.nbSearch.custom.cancel":"取消","st.nbSearch.custom.badgeSource":"来源提供","st.nbSearch.custom.badgeLocal":"仅本地","st.nbSearch.custom.badgeLocalSetting":"本地设置","st.nbSearch.custom.badgeOriginUnknown":"来源未确认","st.nbSearch.custom.moveUp":"上移第 {n} 项","st.nbSearch.custom.moveDown":"下移第 {n} 项","st.nbSearch.custom.removeRow":"移除第 {n} 项","st.nbSearch.custom.fetchChainSummary":"这一组是「输入 → 输出」的管道链;前序管道失败或内容不足时继续尝试下一项。","st.nbSearch.custom.chain.pairSource":"这一组沿用来源顺序","st.nbSearch.custom.chain.pairEdited":"这一组已改为 Kiki 顺序","st.nbSearch.custom.chain.customizePair":"改为 Kiki 顺序","st.nbSearch.custom.chain.restoreSourceOrder":"恢复来源顺序","st.nbSearch.custom.chain.restoreAll":"恢复继承(全部组合)","st.nbSearch.custom.chain.snapshot.one":"已有 {count} 组改为 Kiki 顺序","st.nbSearch.custom.chain.snapshot.other":"已有 {count} 组改为 Kiki 顺序","st.nbSearch.custom.chain.noteTitle":"抓取链怎么保存","st.nbSearch.custom.chain.noteBody":"保存时会把全部 {count} 组输入与输出组合一起写成一个 Kiki 链快照;之后它们不再逐组跟随来源。只有全部组合都恢复继承,才会删除快照、重新跟随来源。","st.nbSearch.custom.noCompatiblePipeline":"这个组合下没有任何可用的管道。检查服务配置,或换一组输入与输出。","st.nbSearch.custom.pipelineIncompatible":"这条管道不支持当前的输入种类或输出格式。","st.nbSearch.custom.pipelineUnknown":"未注册","st.nbSearch.custom.preset.group":"预设组合","st.nbSearch.custom.preset.groupHint":"预设把多条搜索方式按顺序组成一次搜索;只有输出是结果列表的搜索方式可以放进预设。","st.nbSearch.custom.preset.add":"新建预设组合","st.nbSearch.custom.preset.empty":"还没有预设组合。新建一个后,可以把多条搜索方式放进同一次搜索。","st.nbSearch.custom.preset.edit":"编辑预设组合","st.nbSearch.custom.preset.laneCount.one":"{count} 条搜索方式","st.nbSearch.custom.preset.laneCount.other":"{count} 条搜索方式","st.nbSearch.custom.preset.originSource":"这个预设由来源配置提供(可能是本地配置、环境变量或内置默认)。编辑会建立一份只保存在 Kiki 配置里的覆盖。","st.nbSearch.custom.preset.originOverride":"这个预设正在使用 Kiki 本地覆盖;恢复来源后回到来源提供的版本。","st.nbSearch.custom.preset.originLocal":"这个预设只存在于 Kiki 配置里。","st.nbSearch.custom.preset.originLocalSetting":"这个预设由 Kiki 配置声明;下层配置未上报,因此无法确认它是否也提供了同一个。","st.nbSearch.custom.preset.originUnknown":"Kiki 配置没有声明这个预设,下层配置也未上报,因此来源未确认。","st.nbSearch.custom.preset.idLabel":"名称与稳定 ID","st.nbSearch.custom.preset.idHint":"预设的名字,也是它在配置里的键。","st.nbSearch.custom.preset.idInvalid":"名称需要 1 到 256 个字符,且首尾没有空格。","st.nbSearch.custom.preset.idTaken":"已有另一个预设使用这个名称,换一个。","st.nbSearch.custom.preset.lanes":"搜索方式顺序","st.nbSearch.custom.preset.addLane":"添加搜索方式","st.nbSearch.custom.preset.laneHint":"按顺序尝试;前一条没有结果时用下一条。","st.nbSearch.custom.preset.minLane":"预设至少需要一条搜索方式。","st.nbSearch.custom.preset.override":"建立本地覆盖","st.nbSearch.custom.preset.restore":"恢复来源","st.nbSearch.custom.preset.remove":"删除这个预设","st.nbSearch.custom.reference.defaultLane":"默认搜索方式","st.nbSearch.custom.reference.preset":"预设「{id}」","st.nbSearch.custom.reference.lane":"搜索方式「{lane}」","st.nbSearch.custom.reference.chain":"抓取链({input} → {representation})","st.nbSearch.custom.reference.routeRule":"路由规则「{id}」","st.nbSearch.routing.title":"路由分流","st.nbSearch.routing.help":"在上面的抓取链之前,决定一个网页地址用哪条抓取 pipeline 读取。","st.nbSearch.routing.chainRoleHint":"上面的抓取链是没有任何规则命中时走的;请求里显式指定的 pipeline 永远优先于两者。","st.nbSearch.routing.mode":"路由配置来源","st.nbSearch.routing.modeInherited":"沿用来源配置","st.nbSearch.routing.modeInheritedHint":"以来源配置声明的路由为准。","st.nbSearch.routing.modeCustom":"在 Kiki 里配置","st.nbSearch.routing.modeCustomHint":"这些规则随本页一起保存,并覆盖来源声明的内容。","st.nbSearch.routing.modeCleared":"已清空继承的规则","st.nbSearch.routing.modeClearedShort":"清空","st.nbSearch.routing.modeClearedHint":"不再从来源取得任何路由规则;下面的内置规则包照常生效。","st.nbSearch.routing.builtinTitle":"内置直抓规则包","st.nbSearch.routing.builtinHint":"随检索引擎分发、默认开启,只走内置的 direct pipeline,因此命中不会产生第三方调用费用。你自己的规则先于它判断。","st.nbSearch.routing.packageMeta":"{id} {version},由 {maintainer} 维护。","st.nbSearch.routing.packageUnreported":"服务端没有上报路由规则包,因此这里实际生效的内容未确认。","st.nbSearch.routing.builtinOn":"开","st.nbSearch.routing.builtinOff":"关","st.nbSearch.routing.builtinActive":"生效中","st.nbSearch.routing.builtinDisabled":"已关闭","st.nbSearch.routing.builtinDefaultChain":"默认抓取链","st.nbSearch.routing.builtinDisabledHint":"已关闭:{ids}。","st.nbSearch.routing.userTitle":"你的路由规则","st.nbSearch.routing.rulesNone":"你还没有自己的规则。请求先走内置规则包,再走上面的抓取链。","st.nbSearch.routing.orderHint":"自上而下。站点和路径同时匹配的第一条规则即为实际生效的那条。","st.nbSearch.routing.addRule":"添加规则","st.nbSearch.routing.cancel":"取消","st.nbSearch.routing.ruleId":"第 {n} 条规则的名称","st.nbSearch.routing.newRuleId":"规则名称","st.nbSearch.routing.ruleIdPlaceholder":"my-docs-direct","st.nbSearch.routing.origin":"站点","st.nbSearch.routing.pathGlobs":"路径","st.nbSearch.routing.representation":"第 {n} 条规则覆盖的输出格式","st.nbSearch.routing.representationAny":"不限","st.nbSearch.routing.action":"第 {n} 条命中时","st.nbSearch.routing.actionPipelines":"使用这些 pipeline","st.nbSearch.routing.actionDefaultShort":"使用默认抓取链","st.nbSearch.routing.actionDefault":"使用默认抓取链","st.nbSearch.routing.actionDefaultHint":"命中后会跳过下面的规则,改用上面的抓取链,包括其中可能计费的回退。","st.nbSearch.routing.pipelines":"pipeline,按顺序","st.nbSearch.routing.pipelinesHint":"只会尝试这里列出的 pipeline。失败时只按列表进入下一条,不会跳去别的规则或你没列出的抓取链。","st.nbSearch.routing.pipelineStep":"第 {n} 条 pipeline","st.nbSearch.routing.removePipelineStep":"移除第 {n} 条 pipeline","st.nbSearch.routing.pipelineUnknownNamed":"不是已配置的抓取 pipeline:{ids}。","st.nbSearch.routing.moveRuleUp":"上移第 {n} 条规则","st.nbSearch.routing.moveRuleDown":"下移第 {n} 条规则","st.nbSearch.routing.disableRule":"关闭规则「{id}」","st.nbSearch.routing.enableRule":"启用规则「{id}」","st.nbSearch.routing.removeRule":"删除规则「{id}」","st.nbSearch.routing.ruleDisabledHint":"已关闭:本该由它命中的请求会落到下面的规则。","st.nbSearch.routing.incomplete":"每条规则都需要名称和站点。","st.nbSearch.routing.duplicateId":"已有同名规则。","st.nbSearch.routing.previewTitle":"查一个地址会走哪条路","st.nbSearch.routing.originUser":"你的规则","st.nbSearch.routing.originBuiltin":"内置规则包","st.nbSearch.routing.previewMatched":"{origin}「{rule}」命中,将使用 {pipelines}。","st.nbSearch.routing.previewDefault":"没有规则命中,将使用上面的抓取链:{pipelines}。","st.nbSearch.routing.advancedTitle":"路由是怎么选的","st.nbSearch.routing.precedence":"请求里显式指定的 pipeline 最优先;然后是你的规则,自上而下;然后是内置规则包;最后是上面的抓取链。命中一次即结束查找,并且只尝试它列出的 pipeline。","st.nbSearch.routing.routingOn":"路由分流对网页抓取生效。","st.nbSearch.routing.routingOff":"路由分流已关闭:所有网页抓取都走上面的抓取链。","st.nbSearch.routing.enableRouting":"重新开启路由分流","st.nbSearch.fetch.title":"抓取方式","st.nbSearch.fetch.inputKind":"输入种类","st.nbSearch.fetch.representation":"输出格式","st.nbSearch.fetch.input.url":"网页地址","st.nbSearch.fetch.input.inlineText":"文本内容","st.nbSearch.fetch.input.inlineBytes":"二进制内容","st.nbSearch.fetch.input.file":"本地文件","st.nbSearch.fetch.representation.markdown":"Markdown","st.nbSearch.fetch.representation.text":"纯文本","st.nbSearch.fetch.inputDisabled":"来源未启用","st.nbSearch.fileScope.title":"抓取来源范围","st.nbSearch.fileScope.hint":"每个来源限定一个本地根目录;媒体类型留空表示交给来源配置决定。","st.nbSearch.fileScope.stateInherit":"跟随来源(当前 {count} 个范围)","st.nbSearch.fileScope.stateNone":"已清空:不提供任何本地文件来源。","st.nbSearch.fileScope.stateCustom":"自定义({count} 个范围)","st.nbSearch.fileScope.id":"名称","st.nbSearch.fileScope.root":"根目录","st.nbSearch.fileScope.rootPlaceholder":"/path/to/files","st.nbSearch.fileScope.mediaTypes":"媒体类型","st.nbSearch.fileScope.removeScope":"移除第 {n} 个来源","st.nbSearch.fileScope.add":"添加来源","st.nbSearch.fileScope.clear":"清空来源范围","st.nbSearch.fileScope.incomplete":"每个来源都需要名称和根目录。","st.nbSearch.quality.title":"抓取质量回退","st.nbSearch.quality.minContentChars":"最少正文字符","st.nbSearch.quality.minContentCharsHint":"正文短于这个长度时按失败处理,继续回退到下一条管道。留空沿用来源值。","st.nbSearch.quality.markers":"失败标记","st.nbSearch.quality.markersInherit":"沿用来源配置里的失败标记。","st.nbSearch.quality.markersNone":"不使用任何失败标记:页面即使包含这些文字也会被当作正常内容。","st.nbSearch.quality.addMarker":"添加标记","st.nbSearch.quality.markerPlaceholder":"例如 Just a moment...","st.nbSearch.quality.markersHint":"最多 {max} 个;命中的页面会被当作失败页,继续回退。","st.nbSearch.quality.removeMarker":"移除标记 {marker}","st.nbSearch.advanced.restoreInherited":"恢复继承","st.nbSearch.advanced.inheritSource":"跟随来源","st.nbSearch.advanced.customValue":"自定义","st.nbSearch.advanced.valueInherited":"沿用来源值","st.nbSearch.advanced.checkScope":"就绪检查只读取已保存的配置,不会调用任何服务;显示就绪不代表付费搜索已验证可用。","st.nbSearch.advanced.issue.instance":"这个服务实例不存在或已被移除。","st.nbSearch.advanced.issue.operation":"该服务没有这个操作。","st.nbSearch.advanced.issue.lane":"引用的搜索方式不存在。","st.nbSearch.advanced.issue.presetResults":"预设只能使用输出是结果列表的搜索方式。","st.nbSearch.advanced.issue.pipeline":"引用的抓取管道不存在。","st.nbSearch.advanced.issue.pipelineIncompatible":"这条管道不支持该组合的输入种类或输出格式。","st.nbSearch.advanced.issue.unknown":"这条引用无效。","st.nbSearch.keyUsage.title":"密钥状态","st.nbSearch.keyUsage.unsavedNote":"保存该服务后即可查看密钥状态。","st.nbSearch.keyUsage.check":"查看密钥状态","st.nbSearch.keyUsage.recheck":"重新查看","st.nbSearch.keyUsage.refresh":"刷新","st.nbSearch.keyUsage.reading":"正在读取…","st.nbSearch.keyUsage.idle":"密钥状态按需读取:点上面的按钮才会请求服务端,也不显示密钥内容。","st.nbSearch.keyUsage.failed":"读不到密钥状态。","st.nbSearch.keyUsage.balanceSupported":"这个服务会报告额度,数值来自服务端。","st.nbSearch.keyUsage.balanceUnsupported":"这个服务不提供额度查询,只显示每把密钥的状态。","st.nbSearch.keyUsage.keyIndex":"密钥 {n}","st.nbSearch.keyUsage.stateUnknown":"状态未知","st.nbSearch.keyUsage.stateReady":"可用","st.nbSearch.keyUsage.stateCooldown":"冷却中","st.nbSearch.keyUsage.stateInvalid":"无效","st.nbSearch.keyUsage.stateExhausted":"已用尽","st.nbSearch.keyUsage.cooldownUntil":"{time}后重试","st.nbSearch.keyUsage.usageLine":"{scope} {numbers}","st.nbSearch.keyUsage.scopeKey":"此密钥","st.nbSearch.keyUsage.scopeTeam":"团队额度","st.nbSearch.keyUsage.remaining":"剩余 {n}","st.nbSearch.keyUsage.used":"已用 {n}","st.nbSearch.keyUsage.limit":"上限 {n}","st.nbSearch.keyUsage.usageUnavailable":"额度暂时读不到","st.nbSearch.keyUsage.usageInvalidResponse":"服务返回的额度无法识别","st.nbSearch.keyUsage.usageNone":"—","st.nbSearch.keyUsage.noKeys":"这个服务还没有密钥。","st.nbSearch.keyUsage.footnote":"状态来自服务端的缓存;刷新会重新向服务查询。","st.nbSearch.custom.instance.pickHint":"选择要添加的服务类型;同一个服务可以添加多个实例,各用各的密钥。","st.nbSearch.custom.instance.pickLabel":"服务目录","st.nbSearch.custom.instance.pickPlaceholder":"搜索服务…","st.nbSearch.custom.instance.noProviders":"这台服务器没有报告任何可用的服务类型。","st.nbSearch.custom.instance.changeProvider":"换一个服务","st.nbSearch.custom.instance.idLabel":"实例 ID","st.nbSearch.custom.instance.idHint":"保存后这个实例的名字;同一个服务下的不同实例用它区分。","st.nbSearch.custom.instance.idEmpty":"请输入实例 ID。","st.nbSearch.custom.instance.idInvalid":"实例 ID 不能超过 256 个字符,也不能有首尾空格。","st.nbSearch.custom.instance.idTaken":"已有实例使用这个 ID,换一个。","st.nbSearch.custom.instance.envSection":"密钥读取来源","st.nbSearch.custom.instance.envLabel":"环境变量名","st.nbSearch.custom.instance.envRequired":"这个服务需要密钥,请填一个环境变量名。","st.nbSearch.custom.instance.envHint":"Kiki 从这个变量读取这个实例的密钥;不同实例要用不同的变量名,避免共用同一把密钥。","st.nbSearch.custom.instance.failed":"添加失败。","st.nbSearch.custom.instance.create":"添加服务","st.nbSearch.custom.instance.keysLater":"添加后可在服务列表里填密钥","st.nbSearch.providers.filterPlaceholder":"筛选提供商…","st.nbSearch.providers.filterAll":"全部 ({count})","st.nbSearch.providers.filterNeedsAttention":"待配置或异常 ({count})","st.nbSearch.providers.filterConfigured":"就绪 ({count})","st.nbSearch.providers.emptyFilter":"没有符合筛选条件的提供商。","st.nbSearch.providers.attentionBadge":"需要处理","st.nbSearch.providers.disabledBadge":"已停用","st.nbSearch.providers.baseUrlInvalid":"Base URL 需以 http:// 或 https:// 开头。","st.nbSearch.providers.optionsInvalid":"选项不是合法的 JSON 对象。","st.nbSearch.action.discard":"放弃修改","st.nbSearch.action.barHint":"改动先存为草稿,点「保存搜索与抓取」后统一生效。","st.nbSearch.services.listTitle":"已配置的服务","st.nbSearch.services.listHint":"这里只列你配置过的服务。其他服务沿用内置默认,添加后才会出现在这里。","st.nbSearch.services.emptyTitle":"还没有配置服务","st.nbSearch.services.emptyBody":"搜索与抓取正在使用内置默认。添加服务可以给它换密钥或换地址。","st.nbSearch.services.emptyAction":"添加服务","st.nbSearch.services.add":"添加服务","st.nbSearch.services.cancelAdd":"关闭目录","st.nbSearch.services.searchPlaceholder":"搜索服务…","st.nbSearch.services.noMatch":"没有匹配「{query}」的服务。","st.nbSearch.services.directoryTitle":"服务目录","st.nbSearch.services.directoryHint":"此服务器支持的全部服务。","st.nbSearch.services.directoryEmpty":"此服务器没有报告任何服务。","st.nbSearch.services.addOne":"添加","st.nbSearch.services.added":"已添加","st.nbSearch.services.backToList":"已配置的服务","st.nbSearch.services.keyless":"无需密钥","st.nbSearch.services.keySaved":"已保存密钥","st.nbSearch.services.roleSearch":"可搜索","st.nbSearch.services.roleFetch":"可抓取网页","st.nbSearch.services.roleUnknown":"能力未知","st.nbSearch.services.needsKey":"需要密钥","st.nbSearch.services.stateConfigured":"已配置","st.nbSearch.services.stateOff":"已停用","st.nbSearch.services.stateNeedsKey":"缺少密钥","st.nbSearch.services.stateFailed":"不可用","st.nbSearch.services.stateUnsaved":"尚未保存","st.nbSearch.services.addInstance":"新建同服务实例","st.nbSearch.services.keysCount":"{count} 个密钥","st.nbSearch.services.keyCountOne":"1 个密钥","st.nbSearch.services.keyCountNone":"没有密钥","st.nbSearch.services.unknownState":"状态未知","st.nbSearch.service.enabledLabel":"启用此服务","st.nbSearch.service.enabledHint":"停用后,即使搜索方式或抓取链选中了它,也会被跳过。","st.nbSearch.service.humanTitle":"名称","st.nbSearch.service.addressSection":"连接","st.nbSearch.service.baseUrlHint":"留空则使用该服务自带的地址。","st.nbSearch.service.baseUrlDefault":"服务默认","st.nbSearch.service.credentialSection":"密钥","st.nbSearch.service.credentialEnvHint":"密钥从这个变量读取。每个服务要使用不同的变量名。","st.nbSearch.service.credentialEnvAdvanced":"密钥的读取来源","st.nbSearch.service.credentialEnvInvalid":"只能使用字母、数字和下划线,且以字母或下划线开头。","st.nbSearch.service.keylessHint":"此服务不需要密钥。","st.nbSearch.service.keysSection":"密钥","st.nbSearch.service.advancedSection":"密钥顺序与缓存","st.nbSearch.service.keyStrategy":"密钥顺序","st.nbSearch.service.keyStrategyRoundRobin":"轮流使用","st.nbSearch.service.keyStrategyPriority":"按顺序使用","st.nbSearch.service.keyStrategyInherit":"服务默认","st.nbSearch.service.keyStrategyHint":"轮流使用会把请求分散到每个密钥;按顺序使用则总是先用第一个,失败后才换下一个。","st.nbSearch.service.balanceTtl":"密钥状态缓存(毫秒)","st.nbSearch.service.balanceTtlHint":"密钥被限流或用尽后,要等多久才会再试。范围 60000–86400000。","st.nbSearch.service.balanceTtlInvalid":"请输入 60000 到 86400000 之间的整数毫秒。","st.nbSearch.service.optionsSection":"选项","st.nbSearch.service.remove":"移除此服务","st.nbSearch.service.removeTitle":"移除 {name}?","st.nbSearch.service.removeBody":"移除该服务已保存的设置。已保存在此服务器上的密钥会保留,重新添加该服务时会继续使用。","st.nbSearch.service.removeConfirm":"移除服务","st.nbSearch.service.removed":"已移除 {name}。","st.nbSearch.keys.label":"密钥","st.nbSearch.keys.count":"{count} / {max}","st.nbSearch.keys.orderHint":"当服务设为“按顺序使用”时,按此顺序尝试。","st.nbSearch.keys.empty":"此服务还没有保存密钥。","st.nbSearch.keys.add":"添加密钥","st.nbSearch.keys.placeholder":"粘贴密钥后回车","st.nbSearch.keys.remove":"移除第 {n} 个密钥","st.nbSearch.keys.moveUp":"上移第 {n} 个密钥","st.nbSearch.keys.moveDown":"下移第 {n} 个密钥","st.nbSearch.keys.reveal":"显示第 {n} 个密钥","st.nbSearch.keys.hide":"隐藏第 {n} 个密钥","st.nbSearch.keys.tooMany":"当前 {count} 个密钥,超过此服务器允许的 {max} 个。保存前请先删除 {extra} 个。","st.nbSearch.keys.duplicate":"有重复的密钥。保存前请先删除重复项。","st.nbSearch.keys.replace":"替换密钥","st.nbSearch.keys.show":"显示密钥","st.nbSearch.keys.loading":"读取中…","st.nbSearch.keys.showFailed":"无法读取已保存的密钥,请重试。","st.nbSearch.keys.editingHint":"这些密钥尚未保存。","st.nbSearch.keys.pendingWrite":"密钥尚未保存,保存后才会写入。","st.nbSearch.keys.saveFailed":"设置已保存,但密钥没有写入。密钥仍留在输入框中,再次保存即可重试。","st.nbSearch.keys.conflict":"这个密钥在你编辑期间被服务器改动了,你的值没有写入。请重新读取密钥列表后再保存。","st.nbSearch.keys.emptyKey":"保存前请先删除空行。","st.nbSearch.provider.brave":"Brave 搜索","st.nbSearch.provider.browser-render":"浏览器渲染","st.nbSearch.provider.context7":"Context7 文档","st.nbSearch.provider.direct-http":"直连 HTTP","st.nbSearch.provider.duckduckgo":"DuckDuckGo","st.nbSearch.provider.exa":"Exa","st.nbSearch.provider.firecrawl":"Firecrawl","st.nbSearch.provider.github":"GitHub","st.nbSearch.provider.grok":"Grok","st.nbSearch.provider.grok-multi-agent":"Grok 多智能体","st.nbSearch.provider.jina-reader":"Jina Reader","st.nbSearch.provider.openai-compatible":"OpenAI 兼容模型","st.nbSearch.provider.parallel":"Parallel","st.nbSearch.provider.searxng":"SearXNG","st.nbSearch.provider.tavily":"Tavily","st.nbSearch.provider.wayback":"Wayback Machine","st.nbSearch.provider.zhipu":"智谱","st.nbSearch.inheritDefault":"沿用默认:{lane}","st.nbSearch.inheritDefaultNone":"当前没有设置默认搜索方式","st.nbSearch.customDefault":"自定义默认:{lane}","st.subagents.title":"子智能体模型规则","st.subagents.hint":"禁用名单对所有子智能体生效。子智能体的模型由智能体固定值或派发时显式指定;此处没有额外的模型默认值。","st.subagents.denyModels":"禁用的子智能体模型(每行一个)","st.subagents.denyPlaceholder":"provider/blocked-model","st.subagents.save":"保存子智能体设置","st.subagents.saved":"服务器已保存并回显子智能体模型规则。","st.settings.configKey":"配置键:{key}","st.agentManager.back":"全部智能体","st.agentManager.notSet":"未设置","st.agentManager.readOnlyShort":"只读","st.agentManager.title":"智能体","st.agentManager.all":"全部","st.agentManager.main":"主智能体","st.agentManager.subagent":"子智能体","st.agentManager.disabledByName":"按名字禁用智能体","st.agentManager.disabledByNameHint":"每行的开关是禁用智能体的常规入口。在这里禁用的名字,在这台服务器的所有工作区都生效,包括当前列表里没有显示的档案。","st.agentManager.disableByName":"按名字禁用","st.agentManager.enableByName":"重新启用 {name}","st.agentManager.new":"新建智能体","st.agentManager.name":"名称(小写字母、数字,用连字符或下划线分隔)","st.agentManager.scope":"保存位置","st.agentManager.userScope":"用户 · 所有工作区","st.agentManager.projectScope":"当前工作区","st.agentManager.template":"创建方式","st.agentManager.blank":"空白","st.agentManager.implementer":"实施者","st.agentManager.reviewer":"审查者","st.agentManager.duplicate":"复制当前智能体","st.agentManager.create":"创建智能体","st.agentManager.created":"智能体已创建并加载。","st.agentManager.select":"选择智能体查看或编辑。","st.agentManager.instructions":"指令","st.agentManager.basics":"基本信息","st.agentManager.tools":"工具","st.agentManager.model":"模型","st.agentManager.advanced":"高级","st.agentManager.prompt":"指令正文","st.agentManager.promptRequired":"空白智能体需要描述和指令正文。","st.agentManager.nameRequired":"请输入未使用的名称:小写字母、数字,用连字符或下划线分隔。","st.agentManager.noWorkspace":"请先打开一个工作区再创建智能体。","st.agentManager.saved":"智能体已保存并重新加载。","st.agentManager.readOnly":"此智能体为只读状态。","st.profiles.team":"团队","st.profiles.backToTeam":"返回团队","st.profiles.teamIntro":"所有智能体、各自跑在哪个模型上、能调用谁。模型和思考强度可以直接在这里改;打开一个智能体编辑它的指令。","st.profiles.filter":"显示","st.profiles.layout":"视图","st.profiles.layoutList":"所有智能体","st.profiles.layoutTeams":"团队","st.profiles.rosterTeam":"{name} 及其可以调用的智能体","st.profiles.rosterEmpty":"未加载主智能体。为某个智能体开启「主智能体」后,它的团队会显示在这里。","st.profiles.rosterLeased":"由 {name} 设置","st.profiles.rosterMainMemberHint":"按名称调用的主智能体。它在这里作为子智能体运行;较长的工作适合使用线程。","st.profiles.search":"筛选智能体","st.profiles.resolveIn":"解析于","st.profiles.colRole":"智能体","st.profiles.colDispatches":"可调用","st.profiles.teamEmpty":"还没有加载任何智能体。","st.profiles.teamNoMatch":"没有符合筛选的智能体。","st.profiles.teamWarnings.one":"{count} 项设置需要处理。打开标记的智能体查看详情。","st.profiles.teamWarnings.other":"{count} 项设置需要处理。打开标记的智能体查看详情。","st.profiles.rowWarnings.one":"{count} 项设置需要处理","st.profiles.rowWarnings.other":"{count} 项设置需要处理","st.profiles.changedCount.one":"{count} 项未保存的改动","st.profiles.changedCount.other":"{count} 项未保存的改动","st.profiles.dispatchMore":"+{count}","st.profiles.quickSaved":"已保存 {name}。","st.profiles.modelFor":"{name} 的模型","st.profiles.effortFor":"{name} 的思考强度","st.profiles.shipped":"内置","st.profiles.shippedCopy":"内置副本","st.profiles.yours":"你的智能体","st.profiles.model":"模型","st.profiles.modelUnset":"未固定","st.profiles.modelExternal":"模型 id 由 {engine} 提供。","st.profiles.effort":"思考强度","st.profiles.effortUnset":"模型默认","st.profiles.effortUnsupported":"此模型不提供","st.profiles.aliasMissingShort":"目录中没有","st.profiles.aliasMissingTitle":"模型目录里没有 {alias}。在配置这个别名之前,用到它的运行都会失败。","st.profiles.engine":"引擎","st.profiles.engineNative":"Kiki(原生)","st.profiles.engineMainExternal":"外部引擎上的主会话需要支持它的 Kiki 版本。","st.profiles.fieldMapped":"已为 {engine} 转换","st.profiles.fieldIgnored":"{engine} 不使用这项设置。值会保留,切回原生时恢复。","st.profiles.mainToggle":"主智能体","st.profiles.mainOnHint":"可用于新会话和 Thread。其他智能体仍可按名字调用它:它不出现在可选列表里,结果会建议改用 Thread。","st.profiles.mainOffHint":"作为子智能体,由其他智能体调用。","st.profiles.kikiSubagents":"委派 Kiki 子智能体","st.profiles.kikiSubagentsHint":"{engine} 可以派发本档案的 Kiki 子智能体、等待它们并读取结果;报告回到本会话。","st.kikiContext.title":"接入 Kiki 能力","st.kikiContext.intro":"通过 MCP 把 Kiki 自己的工具交给 {engine}。每个开关增加一组工具;不打开就全部关闭。","st.kikiContext.summaryOff":"全部关闭","st.kikiContext.short.subagents":"子智能体","st.kikiContext.short.memory":"记忆","st.kikiContext.short.board":"看板","st.kikiContext.short.cron":"定时","st.kikiContext.short.threads":"线程","st.kikiContext.short.history":"历史","st.kikiContext.short.hooks":"Hooks","st.kikiContext.group.memory":"记忆","st.kikiContext.group.board":"任务看板","st.kikiContext.group.cron":"定时任务","st.kikiContext.group.threads":"线程","st.kikiContext.group.history":"历史","st.kikiContext.group.hooks":"上下文 Hooks","st.kikiContext.hint.memory":"{engine} 可以搜索、读取已保存的偏好、反馈和项目事实,也可以写入新的记忆。","st.kikiContext.hint.board":"{engine} 可以读取工作区的「我的工作」卡片,并新建或更新它们。","st.kikiContext.hint.cron":"{engine} 可以在本会话里安排定时提示词,列出并删除它们。","st.kikiContext.hint.threads":"{engine} 可以列出、读取本机线程,并向其他线程或房间发消息。","st.kikiContext.hint.history":"{engine} 可以搜索以前的会话,并读取原始轮次。","st.kikiContext.hint.hooks":"Kiki 会主动给 {engine} 补充上下文:会话开始时的记忆摘要、每条消息附带的目标与笔记提醒、压缩前的交接。不增加工具。","st.kikiContext.support.supported":"支持 Hooks","st.kikiContext.support.untested":"未实测","st.kikiContext.support.unsupported":"不支持 Hooks","st.kikiContext.supportHint.untested":"已接好,但还没在真实引擎上跑过。","st.kikiContext.supportHint.unsupported":"Kiki 无法为这个引擎安装 Hooks。","st.kikiContext.momentsLabel":"Kiki 在这些时机补充上下文","st.kikiContext.moment.SessionStart":"会话开始:记忆摘要","st.kikiContext.moment.UserPromptSubmit":"每条消息:目标、笔记和新提醒","st.kikiContext.moment.PreCompact":"压缩前:只准备交接,不注入","st.kikiContext.moment.Stop":"每轮结束:记忆、目标和笔记","st.kikiContext.moment.PreInvocation":"每次调用前:记忆、目标和笔记","st.kikiContext.moment.other":"补充 Kiki 上下文","st.kikiContext.fieldAbsent":"未设置:全部关闭。","st.kikiContext.fieldEmpty":"写为 [ ]:明确全部关闭。","st.kikiContext.fieldList.one":"列出 {count} 组。","st.kikiContext.fieldList.other":"列出 {count} 组。","st.kikiContext.moreTools.one":"另 {count} 个","st.kikiContext.moreTools.other":"另 {count} 个","st.kikiContext.clear":"移除字段","st.kikiContext.scope":"只在本档案作为主智能体运行时生效,档案自身的工具规则仍然适用。改动在主档案重新绑定后生效,例如新会话。","st.profiles.prompt":"智能体指令","st.profiles.promptSize":"{lines} 行 · {chars} 字符","st.profiles.promptPlaceholder":"写下角色、工作方式,以及不能做的事。","st.profiles.promptEmpty":"没有指令。","st.profiles.promptDelivery":"作为指令发送给 {engine},不附加 Kiki 默认系统提示。","st.profiles.whenToUseHint":"调用方据此判断何时选这个智能体。","st.profiles.subagents":"子智能体","st.profiles.addSubagent":"添加智能体","st.profiles.noMoreAgents":"所有智能体都已在名单中。","st.profiles.subagentMissing":"未加载","st.profiles.scopedLease":"私有来源","st.profiles.mainAsSubagent":"主智能体","st.profiles.leaseModel":"从这里调用时的模型","st.profiles.leaseEffort":"从这里调用时的思考强度","st.profiles.leaseFallsBack":"否则用它自己的:{value}","st.profiles.leaseHint":"按这个顺序调用。灰色值来自子智能体自己的设置,在这里填写即可覆盖。","st.profiles.leaseInherits":"自身设置({value})","st.profiles.moveUp":"将 {item} 上移","st.profiles.moveDown":"将 {item} 下移","st.profiles.searchAgents":"搜索智能体","st.profiles.dispatchTitle":"子智能体","st.profiles.dispatchHint":"这一项设置决定它能不能创建子智能体。下面三个名单只管具名预设和路由能不能用;按路径直接提供的智能体定义是另一条创建途径,关闭这一项同样会关掉它。","st.profiles.dispatchCanSpawn":"允许创建子智能体","st.profiles.dispatchCanSpawnOff":"已关闭","st.profiles.dispatchCanSpawnOn":"允许","st.profiles.dispatchCanSpawnInherit":"本层未声明 — 沿用上层设置。","st.profiles.dispatchCanSpawnOffHint":"它不创建任何子智能体。预设、路由和预设文件都不可用;下面三个名单保持原样,方便随时改回来。","st.profiles.dispatchCanSpawnInheritHint":"本档案没有对子智能体表态,由上层的开关决定。","st.profiles.dispatchAllowed":"预设名单","st.profiles.dispatchAllowedHint":"它可以创建哪些具名预设和路由。灰色值来自子智能体自己,在这里填写即可覆盖。","st.profiles.dispatchAllowedUnset":"本层不限制 — 任何它本来就能用的预设。","st.profiles.dispatchAllowedEmpty":"本层没有可选预设。按路径直接提供的智能体定义不受这个名单影响。","st.profiles.dispatchPreferred":"优先推荐","st.profiles.dispatchPreferredHint":"只是推荐顺序,不构成允许或禁止。只要预设名单允许,名单外的智能体照样可以创建。","st.profiles.dispatchDeny":"禁止派遣","st.profiles.dispatchDenyHint":"这些名字一律拒绝,无论预设名单怎么写。","st.profiles.dispatchClearList":"取消限制","st.profiles.dispatchNarrowToList":"仅限这些","st.profiles.dispatchAllowedOpen":"本层不限制预设范围;下方条目仅配置指定预设。","st.profiles.dispatchClearPreferred":"清空名单","st.profiles.dispatchClearDeny":"清空名单","st.profiles.dispatchAddToAllowed":"添加预设","st.profiles.dispatchAddToPreferred":"添加名字","st.profiles.dispatchAddToDeny":"添加名字","st.profiles.dispatchNotDeclared":"未声明","st.profiles.dispatchEmptyPresets":"添加它可以创建的预设。","st.profiles.dispatchEmptyPreferred":"没有推荐顺序,只按预设名单选择。","st.profiles.dispatchEmptyDeny":"没有按名字禁止任何智能体。","st.profiles.dispatchCustomName":"未在当前列表中找到此预设名称。","st.profiles.groupWorkspace":"工作区","st.profiles.groupGlobal":"全局","st.profiles.groupBuiltin":"内置","st.profiles.groupMain":"主智能体","st.profiles.groupSubagents":"子智能体","st.profiles.modelProfiles":"候选模型","st.profiles.modelProfilesHint":"配置候选模型及其适用场景。列表供调用方参考,不是降级顺序。","st.profiles.modelProfilesEmpty":"未配置候选模型。开启限制时,只有默认模型可用。","st.profiles.candidateModel":"候选模型","st.profiles.when":"使用条件","st.profiles.whenPlaceholder":"例如:任务需要 1M 上下文","st.profiles.addCandidate":"添加候选","st.profiles.allowedModels":"允许的模型","st.profiles.allowedModelsHint":"限制仅允许使用这些模型。清空即可解除限制。","st.profiles.restrictModelsToMenu":"仅允许默认模型与声明菜单","st.profiles.menuOffHint":"关闭:菜单是候选建议,不限制菜单外模型。其他硬规则仍生效。","st.profiles.menuOnHint":"开启:菜单外模型不可绑定;默认模型自动计入许可。","st.profiles.declaredMenu":"声明菜单","st.profiles.effectiveModels":"当前有效可用集","st.profiles.menuDefault":"默认","st.profiles.menuEmpty":"无模型","st.profiles.menuPreviewPending":"正在计算本次保存的有效可用集…","st.profiles.menuPreviewError":"未能计算有效可用集,请重试。","st.profiles.menuPreviewUnavailable":"有效可用集尚未提供。","st.profiles.menuNoCandidates":"没有可绑定模型。请修改默认模型、声明菜单或硬限制。","st.profiles.menuAdded":"保存后加入菜单许可域:{models}","st.profiles.menuRemoved":"保存后移出菜单许可域:{models}","st.profiles.menuDisabled":"保存后移除菜单硬限制;其他硬规则仍生效。","st.profiles.softAdvice":"软建议","st.profiles.softAdviceHint":"偏离建议仍可运行,建议不会替代或放宽硬限制。","st.profiles.preferredModels":"优先推荐模型(软建议)","st.profiles.discouragedModels":"建议避免的模型(软建议)","st.profiles.preferredEfforts":"优先推荐思考强度(软建议)","st.profiles.addEffort":"添加思考强度","selection.modelMenuBlocked":"此模型不在有效可用集中:{source}。请选择有效菜单项,或修改 profile 声明。","selection.modelMenuWarning":"此模型超出 profile 的模型约束:{source}。将使用你选择的模型,不影响发送。","selection.modelMenuPending":"正在读取 profile 的有效可用集…","selection.modelMenuError":"未能读取 profile 的有效可用集,请重试。","st.profiles.addModel":"添加模型","st.profiles.tools":"工具","st.profiles.advanced":"高级","st.profiles.advancedSummary":"强度限制、禁用模型、预算与少用字段","st.profiles.allowedEfforts":"允许的思考强度(硬限制)","st.profiles.denyModels":"禁止的模型(硬限制)","st.profiles.unsetShort":"未设置","st.profiles.spawnTitle":"对下级智能体的限制","st.profiles.spawnHint":"限制这个智能体启动的子智能体。列表留空则不限。","st.profiles.spawnClear":"清除限制","st.profiles.spawnAllowedModels":"仅限这些模型","st.profiles.spawnDenyModels":"禁止使用这些模型","st.profiles.spawnAllowedEfforts":"仅限这些思考强度","st.profiles.spawnDisallowedTools":"不可使用的工具","st.profiles.engineNotInstalled":"本机未找到","st.profiles.engineNotFound":"本机上找不到 {engine}。安装前,在此引擎上运行的任务都会失败。","st.profiles.rareFieldsHint":"高级参数与提示词覆写等内容可在下方原始文件中编辑。","st.profiles.removeItem":"移除 {item}","st.profiles.editMode":"编辑视图","st.profiles.modeForm":"表单","st.profiles.modeRaw":"原始文件","st.profiles.rawAfterSave":"先保存或放弃表单修改,再打开原始文件。","st.profiles.rawHint":"完整文件。保存后重新加载生效。","st.profiles.rawReadOnly":"此条目只读。","st.profiles.rawBuiltin":"内置智能体。复制一份即可自由编辑。","st.profiles.rawLabel":"原始文件 {file}","st.profiles.readOnlyExplain":"此智能体当前不可直接修改,复制后即可编辑。","st.profiles.duplicateToEdit":"复制后编辑","st.profiles.duplicate":"复制","st.profiles.problem.description":"保存前请填写描述。","st.profiles.problem.mainInherit":"主智能体没有调用方可跟随;请选一个模型或保持未固定。","st.profiles.problem.tools":"工具名单设为“仅列出”,但没有填写工具。","st.profiles.problem.subagents":"子智能体名单为空或有重复。","st.profiles.problem.modelProfiles":"每个候选需要一个不重复的模型。","st.profiles.diagnostics":"诊断","st.profiles.diag.aliasMissing":"{field}:模型目录里没有 {alias}。","st.profiles.diag.leaseAliasMissing":"子智能体 {name}:模型目录里没有 {alias}。","st.profiles.diag.subagentMissing":"子智能体 {name} 未加载,调用它会失败。","st.profiles.diag.shadowedBy":"未生效。同名智能体胜出:{file}。","st.profiles.diag.shadows":"覆盖了同名文件:{files}。","st.profiles.diag.shadowsList.one":"它取代了 {count} 个同名文件,这些文件已被忽略:","st.profiles.diag.shadowsList.other":"它取代了 {count} 个同名文件,这些文件已被忽略:","st.profiles.diag.builtinModified":"内置智能体的修改副本。","st.profiles.diag.builtinUpdate":"内置智能体的修改副本;当前 Kiki 附带了更新的原版。","st.profiles.diag.executorIgnored":"引擎不使用:{fields}。","st.profiles.openWinner":"打开它","st.profiles.start.copy":"复制一个智能体","st.profiles.start.copyHint":"从内置或你的智能体开始,带上它的说明和设置。","st.profiles.start.template":"模板","st.profiles.start.templateHint":"一个可修改的实现者或审查者。","st.profiles.start.blank":"空白","st.profiles.start.blankHint":"只有描述和说明。","st.profiles.copyFrom":"复制自","st.profiles.copyHint":"副本保留源文件的所有字段,原文件不变。","st.profiles.nameTaken":"{name} 已被其他智能体使用。","st.profiles.optionalKeep":"留空则沿用源","st.mainAgents.title":"主智能体","st.mainAgents.defaultTitle":"默认主智能体","st.mainAgents.defaultHint":"这是所选工作区的默认主智能体。下方可查看真实来源与可用子智能体。","st.mainAgents.empty":"当前没有已加载的主智能体。","st.subagentProfiles.title":"子智能体","st.subagentProfiles.empty":"当前没有已加载的子智能体。","st.namedAgents.title":"智能体","st.namedAgents.editHint":"在此启用、停用或编辑智能体。支持常用参数调整与原始文件编辑。","st.namedAgents.readOnlyHint":"支持常用参数调整与原始文件编辑。","st.namedAgents.loading":"正在加载智能体…","st.namedAgents.empty":"当前没有已加载的智能体。","st.namedAgents.technicalDetails":"技术细节","st.namedAgents.overridesBuiltin":"此智能体已覆盖同名的内置智能体。","st.namedAgents.overriddenByFile":"内置智能体已被 {file} 覆盖","st.namedAgents.shadowedByBuiltin":"未生效:同名内置智能体优先。要改用此文件,请在文件中设置 override: true。","st.namedAgents.newSession":"新会话","st.namedAgents.newSessionDisabled":"先启用该智能体,再发起新会话。","st.namedAgents.newSessionShadowed":"未生效:以该名字发起会话会运行同名内置智能体。请先在文件中设置 override: true。","st.namedAgents.newSessionDisabledMain":"用它发起主会话 — 停用期间不会作为子智能体被调用。","st.namedAgents.modelProfile":"模型设置","st.namedAgents.spawnConstraints":"Spawn 约束","st.namedAgents.delegationNotice":"委派通知","st.namedAgents.promptMode":"提示词模式","st.namedAgents.prompt":"提示词","st.namedAgents.contextBudget":"上下文预算","st.namedAgents.maxCompletionTokens":"最大输出 token 数","st.namedAgents.requestParams":"请求参数","st.namedAgents.unspecified":"未指定","st.namedAgents.allowedModels":"允许的模型","st.namedAgents.deniedModels":"禁用的模型","st.namedAgents.allowedEfforts":"允许的思考强度","st.namedAgents.subagentLease":"子智能体","st.namedAgents.scopedBadge":"专用","st.namedAgents.leaseSource":"来源","st.namedAgents.leaseStatus":"状态","st.namedAgents.leaseReady":"就绪","st.namedAgents.leaseUnavailable":"不可用","st.namedAgents.projectionHint":"更多详细字段可在原始文件中查看与编辑。","st.namedAgents.diskVersion":"磁盘当前版本","st.namedAgents.diskVersionHint":"运行中的智能体绑定的是另一个同名定义;此处仅列出磁盘上的当前同名定义。","st.namedAgents.sourceFile":"来源文件","st.namedAgents.builtin":"内置(无来源文件)","st.namedAgents.enabled":"已启用","st.namedAgents.builtinToggleHint":"启用或停用此内置智能体;停用期间不会作为子智能体被调用。","st.namedAgents.nonBuiltinToggleHint":"这里只能启用或停用内置智能体。","st.namedAgents.defaultToggleHint":"停用默认智能体后,它不会再作为子智能体被调用,但仍可用于主会话。","st.namedAgents.namedToggleHint":"全局启用或停用此智能体;停用期间不会作为子智能体被调用。","st.namedAgents.namedToggleScope":"服务器范围 · 影响全部同名智能体","st.namedAgents.disabledBadge":"已禁用","st.namedAgents.disabledMainHint":"仍可用于主会话,但不会作为子智能体被调用。","st.namedAgents.workspaces":"个工作区","st.namedAgents.availableSubagents":"可用子智能体","st.namedAgents.workspaceHint":"智能体按此工作区解析;工作区级文件只对它生效。","st.namedAgents.modelPin":"固定模型别名","st.namedAgents.whenToUse":"适用场景","st.namedAgents.defaultModelThinkingEffort":"默认模型的思考强度","st.namedAgents.serviceTier":"服务等级","st.namedAgents.inherit":"继承 / 不设置","st.namedAgents.unsetModelPin":"不固定模型(留空)","st.namedAgents.followCallerModel":"跟随调用方 (inherit)","st.namedAgents.followCallerModelHint":"仅用于子智能体:沿用调用方当前模型与思考强度,单独设定则优先。","st.namedAgents.mainCannotFollowCaller":"主智能体没有调用方;请选择已配置的模型别名,或取消固定模型。","st.namedAgents.tools":"允许的工具","st.namedAgents.toolsModeInherit":"继承","st.namedAgents.toolsModeDenyAll":"禁止使用","st.namedAgents.toolsModeList":"仅允许清单","st.namedAgents.disallowedTools":"禁用的工具","st.namedAgents.disallowedToolsModeNone":"不禁止任何工具","st.namedAgents.disallowedToolsModeDeny":"禁止清单中的工具","st.namedAgents.toolsListRequired":"请至少填写一个工具名,或在模式中选择“禁止使用”。","st.namedAgents.toolsPlaceholder":"Read, Bash(逗号或换行分隔)","st.namedAgents.route":"路由","st.namedAgents.routeModel":"路由模型别名:{route}","st.namedAgents.description":"描述","st.namedAgents.edit":"编辑","st.namedAgents.editProfileTitle":"编辑智能体:{name}","st.namedAgents.readOnly":"只读","st.namedAgents.editRaw":"查看 / 编辑原始文件","st.namedAgents.viewRaw":"查看原始文件","st.namedAgents.hideRaw":"收起原始文件","st.namedAgents.rawLoading":"正在读取来源文件…","st.namedAgents.saveRaw":"保存原始文件","st.namedAgents.rawSaved":"原始智能体文件已保存、校验并重载。","st.namedAgents.saved":"智能体已保存并重载。","st.shipped.badge":"内置","st.shipped.clean":"未修改","st.shipped.custom":"已修改","st.shipped.updateAvailable":"已修改 · 有新版原版","st.shipped.removed":"已移除","st.shipped.restore":"恢复原版","st.shipped.restoreTitle":"恢复内置智能体「{name}」的原版?","st.shipped.restoreBody":"磁盘副本将被替换为本版本自带的原版文件,服务器会立即重新加载智能体。","st.shipped.restoreRemovedBody":"磁盘副本已被移除;恢复会重新创建本版本自带的原版文件,服务器会立即重新加载智能体。","st.shipped.restoreOverwrite":"当前副本上的全部修改都会被覆盖;恢复前会自动备份该文件。","st.shipped.restoreModelPin":"当前副本固定了模型 {model};原版没有固定模型,恢复后,未显式指定 model_alias 的派发将改用默认模型。","st.shipped.restored":"已恢复原版并重新加载智能体。","st.subagentDefault.title":"默认子智能体","st.subagentDefault.hint":"AgentRun 未指定智能体时使用它。","st.subagentDefault.label":"AgentRun 的默认子智能体","st.subagentDefault.strict":"要求显式指定智能体","st.subagentDefault.strictHint":"未指定子智能体的派发将报错,不再回退到默认值。","st.subagentDefault.unresolvable":"默认值「{name}」不在已加载的智能体中;未显式指定子智能体的派发无法解析它。","st.subagentDefault.disabledTarget":"「{name}」已停用;停用期间不会作为子智能体被调用。","st.subagentDefault.noModelPin":"该智能体未固定模型;未显式指定 model_alias 的派发将使用默认模型。","st.subagentDefault.saved":"默认子智能体已保存。","st.subagentTools.title":"工具设置","st.subagentTools.hint":"先选对象:默认规则覆盖所有子智能体,选中某个智能体则显示它自己的工具名单。","st.subagentTools.objectLabel":"对象","st.subagentTools.objectDetailOpen":"该对象的位置与设置详情","st.subagentTools.backToList":"工具列表","st.subagentTools.objectDefault":"默认规则","st.subagentTools.objectDefaultHint":"[subagent].allowed_tools","st.subagentTools.objectGroupDefault":"服务器","st.subagentTools.objectGroupProfiles":"智能体","st.subagentTools.objectDefaultDescription":"对所有子智能体生效的服务器规则。它只配置子智能体默认拿不到的那批工具,其余工具保持默认权限。","st.subagentTools.objectSource":"来源 {source} · {file}","st.subagentTools.objectSourceBuiltin":"来源 {source}(内置定义,无文件)","st.subagentTools.objectWorkspace":"工作区 {id}","st.subagentTools.objectExecutor":"执行器 {executor}","st.subagentTools.searchLabel":"搜索工具","st.subagentTools.searchPlaceholder":"搜索工具名、用途与来源","st.subagentTools.clearSearch":"清除搜索","st.subagentTools.catalogLoading":"正在读取工具目录…","st.subagentTools.catalogEmptyTitle":"服务器没有返回工具目录。","st.subagentTools.catalogEmptyBody":"工具目录来自当前连接的服务器;服务器可用后重新读取。","st.subagentTools.catalogRetry":"重新读取","st.subagentTools.noMatches":"没有与“{query}”匹配的工具。","st.subagentTools.toolServer":"MCP 服务器 {id}","st.subagentTools.sourceTag.mcp":"MCP","st.subagentTools.sourceTag.plugin":"插件","st.subagentTools.sourceTag.skill":"技能","st.subagentTools.statusAllowed":"允许","st.subagentTools.statusBlocked":"禁用","st.subagentTools.statusInherit":"继承","st.subagentTools.statusFixed":"不可编辑","st.subagentTools.reasonDefaultAllowed":"默认允许","st.subagentTools.reasonServerOptIn":"默认规则额外允许","st.subagentTools.reasonOptInOff":"需要显式允许","st.subagentTools.reasonProfileExplicit":"在该智能体的 tools 中","st.subagentTools.reasonProfilePattern":"被该智能体的一条名单条目覆盖(也命中其他工具)","st.subagentTools.reasonProfileDenied":"该智能体明确禁用","st.subagentTools.reasonProfileAllowlist":"不在该智能体的 tools 名单","st.subagentTools.reasonInheritBase":"跟随默认规则:{base}","st.subagentTools.reasonMainOnly":"仅主智能体","st.subagentTools.reasonExecutor":"由执行器决定","st.subagentTools.actionOptInAria":"允许子智能体使用 {name}","st.subagentTools.actionProfileOptInAria":"允许该档案的子智能体使用 {name}","st.subagentTools.profileOptInScopeHint":"这个开关只决定该档案的子智能体能否使用该工具。主对话不受它限制;主对话能选哪些工具,仍由该档案自己的 tools 与 disallowedTools 名单决定。","st.subagentTools.actionAllow":"允许","st.subagentTools.actionDeny":"禁用","st.subagentTools.actionEditor":"名单…","st.subagentTools.actionEditorAria":"在智能体编辑器中修改决定 {name} 的工具名单","st.subagentTools.detailAllow":"为该智能体允许 {name}","st.subagentTools.detailDeny":"为该智能体禁用 {name}","st.subagentTools.detailDefaultAllowed":"默认规则对所有子智能体允许 {name}。","st.subagentTools.detailServerOptIn":"默认规则在默认权限之外额外允许 {name}。","st.subagentTools.detailOptInOff":"{name} 对子智能体是关的:默认规则没有允许它,该档案也没有点名。","st.subagentTools.detailProfileExplicit":"该智能体在自己的 tools 名单中点名了 {name}。","st.subagentTools.detailProfilePattern":"该智能体通过一条同时命中其他工具的名单条目(通配规则或旧名)覆盖了 {name};请到工具名单里改,而不是逐个工具处理。","st.subagentTools.detailProfileDenied":"该智能体在 disallowedTools 中明确禁用 {name}。","st.subagentTools.detailProfileAllowlist":"该智能体的 tools 名单限定了可用工具,{name} 不在名单里。","st.subagentTools.detailInherit":"该智能体的名单没有提到 {name},按默认规则:{base}。","st.subagentTools.detailMainOnly":"{name} 仅主智能体可用:子智能体工具策略把它排除在外,默认规则的额外允许或某个智能体的 tools 名单都不能对子智能体开放它。","st.subagentTools.detailExecutor":"该智能体由 {executor} 执行器运行,它的工具由该执行器自己决定。","st.subagentTools.detailExecutorFieldOff":"在 {executor} 上这个字段不生效。","st.subagentTools.summary":"此处可配置 {configurable} 项 · 仅主智能体 {mainOnly} 项 · 服务器目录共 {total} 项","st.subagentTools.rulePending":"默认规则有未保存的修改。","st.subagentTools.ruleConfigKeyLabel":"配置键与当前值","st.subagentTools.ruleValuesEmpty":"没有额外允许","st.subagentTools.detailRuleNote":"这条规则只开放子智能体默认拿不到的工具。某个会话实际能调用什么,还取决于全局工具策略与该会话。","st.subagentTools.listsTools":"tools","st.subagentTools.listsDisallowedTools":"disallowedTools","st.subagentTools.valuesUnset":"未写入(不限制任何工具)","st.subagentTools.valuesEmptyTools":"空名单(不允许任何工具)","st.subagentTools.valuesEmptyDeny":"空名单(不禁用任何工具)","st.subagentTools.applicabilityIgnored":"{engine} 不使用这份名单。","st.subagentTools.applicabilityUnknown":"{engine} 未声明是否使用这份名单。","st.subagentTools.editToolLists":"编辑工具名单","st.subagentTools.newSession":"新建 {name} 会话","st.subagentTools.unwritableProfile":"该智能体没有可写的档案文件,工具名单无法在这里修改。","st.subagentTools.sessionCapabilityHint":"本页显示的是配置;某次会话实际可用的工具显示在该会话的智能体面板里。","st.subagentTools.profileMissing":"该智能体已不在目录中。","st.subagentTools.saveRule":"保存工具权限","st.subagentTools.saveProfile":"保存工具名单","st.subagentTools.pendingChanges":"{count} 处改动","st.subagentTools.changedMark":"未保存","st.subagentTools.reset":"恢复服务器默认","st.sidecar.subagentTimeout":"子智能体超时","st.sidecar.builtinSkills":"包含内置产品技能","st.sidecar.savedEcho":"服务器已校验、保存并回显这些默认值。","st.sidecar.save":"保存子智能体超时","st.sidecar.saving":"正在保存文件…","st.sidecar.pendingFields":"待生效字段:{fields}。此标记会一直显示,直到桌面端完成验证重启,或你在浏览器中明确确认。","st.subagentOpenMode.title":"子智能体面板打开方式","st.subagentOpenMode.label":"打开方式","st.subagentOpenMode.tab":"标签页(默认)","st.subagentOpenMode.fullscreen":"全屏","st.subagentOpenMode.hint":"选择点开子智能体时是在右侧预览区以标签页并列打开,还是全屏显示。窗口较窄时会自动转为全屏。","st.subagentTimeout.title":"子智能体超时","st.subagentTimeout.readOnly":"在「子智能体执行限制」中修改;此处仅显示当前生效值。","st.subagentTimeout.effective":"服务器级设置:保存后对该服务器上所有会话的后续子智能体派发生效;已在运行的子智能体保持启动时的超时,不重新计时。","st.subagentTimeout.envBound":"若服务器设置了 KIKI_SUBAGENT_TIMEOUT_MS 环境变量,该变量优先于此处保存的值。","st.tools.title":"工具","st.tools.loading":"正在加载工具…","st.tools.source":"来源:{source}","st.tools.policyHint":"影响此服务器上的所有智能体。禁止项优先,工具仍受各自权限和审批限制。","st.tools.configOnly":"此配置工具当前不在工具目录中。","st.tools.policyAria":"{name} 的策略","st.tools.inherited":"跟随智能体","st.tools.enabled":"已选中","st.tools.disabled":"禁止使用","st.tools.savePolicy":"保存工具策略","st.tools.mode":"允许使用的工具","st.tools.followAgent":"跟随智能体","st.tools.allowlist":"仅允许选中工具","st.tools.profileImpact":"使用各智能体原有工具,并应用下方禁用项。切换会清空允许列表。","st.tools.allowlistImpact":"保存后仅允许选中的工具;标为‘禁止使用’的工具仍不可用。","st.tools.emptyAllowlist":"请至少选中一个工具再保存。空列表代表“跟随智能体”,不代表“全部禁止”。","st.tools.search":"按工具名称搜索","st.tools.currentOn":"当前在此服务器可用","st.tools.currentOff":"当前在此服务器不可用","st.tools.description":"工具用途","st.tools.excluded":"未选中","st.tools.noMatches":"没有匹配的工具。","st.tools.unsaved":"有未保存的更改,保存前服务器仍使用当前值。","st.hooks.title":"钩子(Hooks)","st.hooks.hint":"声明式规则在事件发生时注入文本或观察事件;命令规则在服务器上执行 shell 命令。规则在会话中的实际生效状态见该会话智能体面板的 Hooks。","st.hooks.aria":"Hooks 配置(JSON)","st.hooks.saved":"自动操作已保存。","st.hooks.configInvalid":"请使用旧版钩子数组,或 schemaVersion 为 2、支持 inject/observe 规则的对象。检查 {field}:{message}。","st.hooks.invalid":"规则 {rule} 的 {field} 不正确。请使用支持的事件、非空命令、有效的正则表达式,以及 1 到 600 之间的整数超时。不能添加其他字段。","st.hooks.form":"切回规则表单","st.hooks.advanced":"高级:编辑 JSON","st.hooks.empty":"尚未配置自动操作。","st.hooks.rule":"规则 {rule}","st.hooks.event":"触发时机","st.hooks.command":"Shell 命令","st.hooks.matcher":"匹配条件(可选,正则表达式)","st.hooks.timeout":"超时(秒)","st.hooks.matchHint":"匹配条件留空时,此事件每次发生都会触发。工具事件匹配工具名称,其他事件使用各自的事件值。超时留空时为 30 秒。","st.hooks.removeRule":"移除规则 {rule}","st.hooks.remove":"移除规则","st.hooks.add":"添加命令规则","st.hooks.save":"保存自动操作","st.hooks.event.PreToolUse":"工具执行前","st.hooks.event.PostToolUse":"工具执行成功后","st.hooks.event.PostToolUseFailure":"工具执行失败后","st.hooks.event.PermissionRequest":"请求审批时","st.hooks.event.PermissionResult":"审批决定后","st.hooks.event.UserPromptSubmit":"用户消息提交前","st.hooks.event.UserPromptQueued":"消息进入队列时","st.hooks.event.TurnStarted":"轮次开始时","st.hooks.event.Stop":"智能体停止前","st.hooks.event.StopFailure":"停止失败时","st.hooks.event.Interrupt":"中断时","st.hooks.event.SessionStart":"会话开始时","st.hooks.event.SessionEnd":"会话结束时","st.hooks.event.SessionHeartbeat":"会话心跳时","st.hooks.event.SubagentStart":"子智能体启动时","st.hooks.event.SubagentStop":"子智能体停止时","st.hooks.event.TaskStarted":"任务开始时","st.hooks.event.PreCompact":"上下文压缩前","st.hooks.event.PostCompact":"上下文压缩后","st.hooks.event.Notification":"收到通知时","st.hooks.addDeclarative":"添加声明式规则","st.hooks.declarativeGroup":"声明式规则","st.hooks.commandGroup":"命令规则","st.hooks.selectRule":"选择一条规则进行编辑,或添加新规则。","st.hooks.rowIssue":"有待修正的问题","st.hooks.flatten":"改回仅命令规则","st.hooks.ruleId":"规则 ID","st.hooks.ruleIdHint":"其他来源以 user/<ID> 引用此规则。","st.hooks.action":"动作","st.hooks.action.inject":"注入文本","st.hooks.action.observe":"观察","st.hooks.observeHint":"观察事件,不注入内容。","st.hooks.injectText":"注入内容","st.hooks.injectSource.text":"内联文本","st.hooks.injectSource.file":"文件引用","st.hooks.injectFile":"文本文件路径","st.hooks.injectFileHint":"相对配置文件解析。","st.hooks.priority":"优先级","st.hooks.priorityHint":"数值小的先执行;默认 100。","st.hooks.ruleEnabled":"启用此规则","st.hooks.matchTitle":"匹配条件","st.hooks.matchEmpty":"无条件——事件每次发生都触发。","st.hooks.matchEdit":"编辑条件","st.hooks.matchLine":"一行一个;留空不限制。","st.hooks.match.models":"模型","st.hooks.match.profiles":"配置档","st.hooks.match.routes":"路由","st.hooks.match.executors":"执行器","st.hooks.match.tools":"工具","st.hooks.match.agentRoles":"智能体角色","st.hooks.match.statuses":"工具状态","st.hooks.match.sources":"消息来源","st.hooks.match.outcomes":"轮次结果","st.hooks.matchValue.root":"主智能体","st.hooks.matchValue.subagent":"子智能体","st.hooks.matchValue.success":"成功","st.hooks.matchValue.error":"错误","st.hooks.matchValue.cancelled":"已取消","st.hooks.matchValue.denied":"已拒绝","st.hooks.matchValue.user":"用户","st.hooks.matchValue.task":"任务","st.hooks.matchValue.mailbox":"信箱","st.hooks.matchValue.steering":"插话","st.hooks.matchValue.completed":"已完成","st.hooks.matchValue.failed":"失败","st.hooks.matchValue.blocked":"受阻","st.hooks.cadence":"触发节奏","st.hooks.cadenceEnable":"按完成的步数间隔重复","st.hooks.cadenceEvery":"每隔多少步触发","st.hooks.cadenceScope":"计步范围","st.hooks.cadenceScope.agent":"按智能体","st.hooks.cadenceScope.turn":"按轮次","st.hooks.v2Enabled":"启用声明式规则","st.hooks.v2EnabledHint":"关闭后声明式规则不生效;命令规则不受影响。","st.hooks.filesTitle":"规则文件","st.hooks.filesHint":"TOML 文件,需含 schema_version = 2 的 [hooks] 表;路径相对配置文件解析。","st.hooks.filesAdd":"添加文件路径","st.hooks.disabledTitle":"停用的规则","st.hooks.disabledHint":"填全限定规则 ID(如 user/focus);* 停用全部声明式规则。命令规则不受影响。","st.hooks.disabledAdd":"添加规则 ID","st.hooks.commandHint":"命令在服务器上执行,可读写文件。保存不会执行命令。","st.hooks.eventInjectOnly":"注入文本仅支持消息提交与步骤事件前","st.hooks.eventCadenceOnly":"触发节奏仅支持步骤事件","st.hooks.v2event.prompt.submit":"消息提交时","st.hooks.v2event.step.before":"每步执行前","st.hooks.v2event.step.after":"每步执行后","st.hooks.v2event.turn.after":"轮次结束后","st.hooks.v2event.session.start":"会话开始时","st.hooks.v2event.turn.stopping":"轮次停止时","st.hooks.v2event.tool.before":"工具执行前","st.hooks.v2event.tool.after":"工具执行后","st.hooks.ruleDisabled":"已停用","st.mcp.title":"MCP 服务器","st.mcp.restart":"重启","st.mcp.restarting":"正在重启…","st.mcp.restartRequested":"已请求重启。","st.mcp.toolsCount":"{count} 个工具","st.mcp.workspace":"工作区","st.mcp.configTitle":"已配置条目","st.mcp.configHint":"此工作区可见的全部服务器。修改将保存在本地配置;来自插件或项目文件的条目只读。","st.mcp.configLoading":"正在加载已配置条目…","st.mcp.empty":"此工作区暂无已配置的 MCP 条目,点上方“新增服务器”添加。","st.mcp.add":"新增服务器","st.mcp.edit":"编辑","st.mcp.delete":"删除","st.mcp.readOnly":"只读","st.mcp.readOnlyHint":"该条目来自插件或项目文件,请前往来源处修改。","st.mcp.test":"测试连接","st.mcp.testing":"正在连接…","st.mcp.testOk":"连接成功。{output}","st.mcp.testFailed":"连接失败。{output}","st.mcp.name":"名称","st.mcp.transport":"传输类型","st.mcp.command":"命令","st.mcp.args":"参数(每行一个)","st.mcp.argsPlaceholder":`-y
12
- @modelcontextprotocol/server-example`,"st.mcp.env":"环境变量","st.mcp.envPlaceholder":"API_TOKEN=YOUR_API_KEY","st.mcp.url":"URL","st.mcp.bearerEnv":"Bearer Token 环境变量","st.mcp.bearerEnvHint":"这里只填写变量名,值保留在服务器上。变量不存在或为空时连接会失败,不会回退到请求头。","st.mcp.clearBearerEnv":"清除环境变量引用","st.mcp.authSourceEnv":"Authorization 来源:服务器环境变量。它覆盖请求头,并阻止 OAuth 接入。","st.mcp.authSourceHeader":"Authorization 来源:此请求头。它覆盖已保存的 OAuth 令牌。","st.mcp.authSourceOAuth":"Authorization 来源:如有已保存的 OAuth 令牌则使用;否则不发送。","st.mcp.oauthConfigured":"此服务器已配置 OAuth。已保存的令牌独立于请求头,修改此表单不会撤销它。","st.mcp.oauthDisconnect":"清除此连接保存的 OAuth 凭据","st.mcp.oauthConfirmTitle":"清除“{name}”已保存的 OAuth 凭据?","st.mcp.oauthConfirmBody":"如果 {url} 存在已保存的 OAuth 凭据,此操作将移除它们,并可能中断正在使用的 MCP 连接;不会删除服务器或修改其 HTTP 请求头和环境变量引用。","st.mcp.oauthConfirmAction":"清除 OAuth 凭据","st.mcp.oauthRemoved":"已清除保存的 OAuth 凭据(如有)。","st.mcp.oauthResetError":"未能清除保存的 OAuth 凭据。它们可能仍然有效,请重试。","st.mcp.oauthTargetChanged":"此 MCP 连接已变更。请重新核对连接后再确认要清除的凭据。","st.mcp.oauthOldTarget":"更换名称、URL 或传输类型不会移除 {name} 在 {url} 保存的 OAuth 凭据(如有)。保存前后均可在下方清除这条精确身份。","st.mcp.storedOAuthTitle":"已保存的 OAuth 凭据","st.mcp.storedOAuthHint":"已保存的登录凭据。完整 URL 默认隐藏,可按需查看。","st.mcp.storedOAuthIdentity":"凭据 {id}","st.mcp.storedOAuthReveal":"显示完整 URL","st.mcp.storedOAuthHide":"隐藏完整 URL","st.mcp.storedOAuthRevealing":"正在读取 URL…","st.mcp.storedOAuthRevealError":"无法显示此 URL,请重试。","st.mcp.storedOAuthLoading":"正在读取已保存的 OAuth 凭据…","st.mcp.storedOAuthError":"无法读取已保存的 OAuth 凭据。请重试后查看。","st.mcp.storedOAuthRetry":"重试读取凭据","st.mcp.storedOAuthEmpty":"未找到已保存的 OAuth 凭据。","st.mcp.storedOAuthOriginUnknown":"已保存连接","st.mcp.storedOAuthClear":"清除凭据","st.mcp.storedOAuthClearLabel":"清除 {name} 在 {url} 的凭据","st.mcp.storedOAuthConfirmTitle":"清除“{name}”已保存的 OAuth 凭据?","st.mcp.storedOAuthConfirmBody":"此操作仅清除 {url} 对应的已保存凭据(如仍存在)。使用同一身份的其他连接可能中断;不会修改服务器配置。","st.mcp.headerOverridden":"有环境变量引用时,此请求头不会生效。请先清除引用,再编辑或移除该请求头。","st.mcp.headers":"HTTP 请求头","st.mcp.headersHint":"更换 URL 或传输类型会清空这些请求头及认证设置。","st.mcp.headerName":"请求头名称","st.mcp.headerValue":"值","st.mcp.addHeader":"添加请求头","st.mcp.removeHeader":"移除请求头","st.mcp.nameRequired":"服务器名称不能为空。","st.mcp.commandRequired":"stdio 服务器必须填写命令。","st.mcp.envInvalid":"每行环境变量都必须使用 KEY=value 格式。","st.mcp.headersInvalid":"每个请求头都需填写有效名称,并在名称后输入 =;请修改或移除未完成的行。","st.mcp.headersDuplicate":"请求头名称不区分大小写,不能重复。请修改或移除重复的请求头。","st.mcp.urlInvalid":"请输入有效的服务器 URL。","st.mcp.saved":"MCP 条目已保存并重新加载。","st.mcp.deleted":"MCP 条目已删除并重新加载。","st.mcp.statusTitle":"服务器状态","st.mcp.timeoutsTitle":"MCP 超时","st.mcp.timeoutsHint":"Server 全局的 MCP 超时(毫秒)。留空即使用默认值。","st.mcp.timeoutsSaved":"MCP 超时已保存并由服务器回显。","st.mcp.status.connected":"已连接","st.mcp.status.connecting":"连接中","st.mcp.status.error":"连接出错","st.mcp.status.disconnected":"未连接","st.mcp.errorHint":"检查配置后点“重启”重新连接。","st.mcp.statusScope":"服务器全局,跨工作区共享","st.mcp.startupTimeoutHint":"等待服务器进程启动的时长;启动慢的本地服务器可调大。","st.mcp.toolTimeoutHint":"单次工具调用的最长等待时间,超时按调用失败处理。","st.mcp.startupTimeoutDetail":"留空即使用默认值;清空已填的字段会删除该值,所有服务器回到默认值。服务器条目仍可单独设置启动超时,优先级高于此处。","st.mcp.toolTimeoutDetail":"留空即使用默认值;清空已填的字段会删除该值,所有服务器回到默认值。服务器条目仍可单独设置工具超时,优先级高于此处。","st.mcp.formTitleEdit":"编辑服务器","st.mcp.nameHint":"必填,作为此服务器的标识。","st.mcp.namePlaceholder":"例如 filesystem","st.mcp.deleteTitle":"删除 MCP 服务器?","st.mcp.deleteBody":"要从对应 mcp.json 中删除“{name}”吗?重新加载后将移除连接和工具。","st.workspaces.title":"工作区","st.workspaces.loading":"正在加载工作区…","st.workspaces.newSession":"新会话","st.workspaces.search":"筛选工作区…","st.workspaces.noMatches":"没有匹配“{query}”的工作区。","st.workspaces.rename":"重命名","st.workspaces.remove":"注销","st.workspaces.pin":"置顶","st.workspaces.unpin":"取消置顶","st.workspaces.pinAria":"置顶 {name}","st.workspaces.unpinAria":"取消置顶 {name}","st.workspaces.renameTitle":"重命名工作区","st.workspaces.renameAria":"重命名 {name}","st.workspaces.removeAria":"注销 {name}","st.workspaces.removeTitle":"注销“{name}”?","st.workspaces.removeBody":"这会从服务器注销该工作区,磁盘上的文件不会被删除。","st.workspaces.removeKeepSessions.one":"该工作区的 1 个会话记录保留在服务器上。","st.workspaces.removeKeepSessions.other":"该工作区的 {count} 个会话记录保留在服务器上。","st.workspaces.removeNoNewSessions":"注销后,新建会话时不再列出此工作区。","st.workspaces.pinnedBadge":"已置顶","st.workspaces.sessionCount.one":"1 个会话","st.workspaces.sessionCount.other":"{count} 个会话","st.workspaces.lastOpened":"最近打开 {time}","st.workspaces.emptyTitle":"还没有工作区","st.workspaces.emptyBody":"新建会话时选择一个项目文件夹,它就会出现在这里。","worktree.markTitle":`worktree 分支 {branch}
13
- 来自 {source},基于 {base}`,"worktree.newToggle":"在新的 worktree 中运行","worktree.newHint":"使用独立的分支和检出目录,不会改动你的工作副本。","worktree.confirmTitle":"在新的 worktree 中运行?","worktree.confirmBody":"Kiki 会在自己的 worktree 目录(~/.kiki/worktrees/…)为「{root}」建一个独立检出,这个会话在副本里工作。","worktree.confirmBranch":"新分支 kiki/…,从当前检出的 HEAD 切出;你的工作副本不受影响。","worktree.confirmCleanup":"归档这个会话时可以选择一并移除它的 worktree。","worktree.confirmOk":"开启","worktree.confirmSkip":"不再询问","worktree.archiveTitle":"归档“{title}”?","worktree.archiveBody":"会移到「已归档」,随时可以恢复。","worktree.archiveRemove":"同时移除它的 worktree","worktree.archiveRemoveHint":"只在不会丢东西时移除;有未提交的改动或未推送的提交时,会保留 worktree。","worktree.archiveConfirm":"归档会话","worktree.archiveRemoved":"已归档并移除 worktree {branch}。","worktree.archiveKept":"已归档。保留 worktree {branch}:{reason}","worktree.archiveKeptLoss":"已归档。由于其中有会丢失的改动,保留 worktree {branch}。请在「设置」›「工作区」中移除它。","st.worktrees.title":"Worktrees","st.worktreePolicy.title":"策略","st.worktreePolicy.enabled":"允许新建 worktree","st.worktreePolicy.enabledHelp":"关闭后,新会话不能在 worktree 中启动。已有的 worktree 不受影响。","st.worktreePolicy.base":"起始提交","st.worktreePolicy.baseHelp":"会话没有指定时,新 worktree 从哪个提交开分支。","st.worktreePolicy.baseHead":"当前提交","st.worktreePolicy.baseFresh":"默认分支","st.worktreePolicy.prefix":"分支前缀","st.worktreePolicy.prefixHelp":"加在每个新 worktree 分支名前面。默认 kiki/。","st.worktreePolicy.prefixInvalid":"只能用小写字母、数字、- 和 /,并以 / 结尾(例如 agent/)。","st.worktreePolicy.autoCleanup":"自动清理","st.worktreePolicy.autoCleanupHelp":"启动时和每 6 小时按上面「清理」按钮的规则运行一次。重启后生效。","st.worktreePolicy.afterDays":"归档至少","st.worktreePolicy.afterDaysHelp":"只清理会话已归档这么久的 worktree。","st.worktreePolicy.daysUnit":"天","st.worktreePolicy.daysInvalid":"请输入 1 或更大的整数天数。","st.worktreePolicy.advanced":"存储位置、git 超时与可丢弃文件","st.worktreePolicy.root":"存储文件夹","st.worktreePolicy.rootHelp":"新 worktree 检出的位置。必须是仓库以外的绝对路径。","st.worktreePolicy.rootDefault":"默认:Kiki 主目录下的 worktrees","st.worktreePolicy.rootInvalid":"请输入绝对路径,或留空使用默认位置。","st.worktreePolicy.gitTimeout":"git 超时","st.worktreePolicy.gitTimeoutHelp":"单条 worktree git 命令最长运行时间。默认 300 秒。","st.worktreePolicy.timeoutInvalid":"请输入 1 到 600 之间的整数。","st.worktreePolicy.disposable":"可丢弃的忽略文件","st.worktreePolicy.disposableHelp":"清理时可以随 worktree 一起删除的忽略文件或文件夹,每行一个。有其他忽略文件的 worktree 会保留。","st.worktrees.hint":"在新的 worktree 中启动的会话会使用独立的分支和检出目录。移除 worktree 会删除检出目录,但会话仍保留在历史记录中。","st.worktrees.cleanupRule":"清理会移除已归档 {days} 天或更久的会话对应的 worktree。凡是有未提交改动、未推送提交、非构建产物的忽略文件,或被其他工具锁定的 worktree,都会保留。","st.worktrees.cleanup":"清理","st.worktrees.cleanupChecking":"检查中…","st.worktrees.cleanupNone":"现在没有需要清理的内容。","st.worktrees.cleanupOnlyKept.one":"没有需要清理的内容:按上述规则,1 个已到期的 worktree 会保留。","st.worktrees.cleanupOnlyKept.other":"没有需要清理的内容:按上述规则,{count} 个已到期的 worktree 会保留。","st.worktrees.cleanupConfirmTitle":"清理 worktree?","st.worktrees.cleanupConfirmBody.one":"将移除 1 个 worktree,不会丢失其中的任何内容。","st.worktrees.cleanupConfirmBody.other":"将移除 {count} 个 worktree,不会丢失其中的任何内容。","st.worktrees.cleanupKeepCount.one":"还有 1 个已到期,但会保留。","st.worktrees.cleanupKeepCount.other":"还有 {count} 个已到期,但会保留。","st.worktrees.cleanupResult":"清理完成:移除 {removed} 个,保留 {kept} 个。","st.worktrees.loading":"正在加载 worktree…","st.worktrees.empty":"还没有 worktree。启动会话时开启「在新的 worktree 中运行」即可创建。","st.worktrees.sessionMissing":"会话已不可用","st.worktrees.openSessionAria":"打开会话 {title}","st.worktrees.state.inUse":"使用中","st.worktrees.state.archived":"会话已归档 · {time}","st.worktrees.state.creating":"设置中","st.worktrees.state.removing":"移除中","st.worktrees.state.failed":"移除失败","st.worktrees.state.orphaned":"孤立","st.worktrees.state.ready":"就绪","st.worktrees.notChecked":"尚未检查改动","st.worktrees.checkFailed":"无法检查改动","st.worktrees.clean":"没有未提交的改动","st.worktrees.dirty.one":"1 个未提交的改动","st.worktrees.dirty.other":"{count} 个未提交的改动","st.worktrees.unpushed.one":"1 个未推送的提交","st.worktrees.unpushed.other":"{count} 个未推送的提交","st.worktrees.ignored":"非构建产物的忽略文件:{names}","st.worktrees.ignoredShort":"忽略文件({names})","st.worktrees.check":"检查","st.worktrees.checking":"检查中…","st.worktrees.checkAria":"检查 {branch} 是否有改动","st.worktrees.remove":"移除","st.worktrees.removeAria":"移除 worktree {branch}","st.worktrees.removeInUse":"先归档对应会话,才能移除这个 worktree。","st.worktrees.keptAt":"检出目录保留在 {path}","st.worktrees.removeTitle":"移除 worktree “{branch}”?","st.worktrees.removeBody":"会从磁盘删除这个检出目录,但会话仍保留在历史记录中。","st.worktrees.removeChecking":"正在检查改动…","st.worktrees.removeClean":"没有未提交的改动或未推送的提交。","st.worktrees.lossTitle":"以下内容将永久丢失","st.worktrees.branchNote":"只有在分支 {branch} 没有自己的提交时,才会删除该分支。","st.worktrees.removeConfirm":"移除 worktree","st.worktrees.removeConfirmLoss":"丢弃改动并移除","st.worktrees.removeCheckFailed":"无法检查这个 worktree 是否有改动,因此现在不能安全移除。","st.worktrees.removeStale":"检查后 worktree 发生了变化。请查看新结果并再次确认。","st.worktrees.retry":"再次检查","st.worktrees.removed":"已移除 worktree {branch}。","st.worktrees.notRemoved":"未移除 {branch}。{reason}","st.worktrees.outcome.retained_dirty":"其中有未提交的改动。","st.worktrees.outcome.retained_unpushed":"其中有未推送的提交。","st.worktrees.outcome.retained_ignored":"其中有非构建产物的忽略文件。","st.worktrees.outcome.retained_foreign_lock":"它已被其他工具锁定。","st.worktrees.outcome.retained_unowned":"Kiki 无法确认自己拥有这个检出目录。","st.worktrees.outcome.retained_in_use":"仍有会话在使用它。","st.worktrees.outcome.failed_busy":"其中的文件正在使用。请关闭使用该文件夹的程序,再试一次。","st.worktrees.outcome.failed":"删除它时出了点问题。","st.workspaces.hint":"工作区管理。重命名只修改显示名称;置顶将排在列表最前;注销仅从列表中移除,本地磁盘文件保持不变。","st.about.title":"关于","st.about.desktopVersion":"应用版本","st.about.serverVersion":"服务器版本","st.about.build":"构建","st.about.serverId":"服务器 ID","st.about.backend":"后端","st.about.browserHint":"浏览器版本没有自动更新。在 Kiki 桌面应用中打开本页,即可检查并安装更新。","st.about.channel":"更新通道","st.about.stable":"稳定版","st.about.beta":"测试版","st.about.betaHint":"Beta 更新更频繁,稳定性可能低于 Stable。","st.about.autoUpdate":"自动更新","st.about.autoUpdateOff":"关闭","st.about.autoUpdateNotify":"仅提醒","st.about.autoUpdateInstall":"下载并安装","st.about.updatesUnavailable":"当前版本未配置自动更新通道。","st.about.checkUpdate":"检查更新","st.about.checking":"正在检查…","st.about.upToDate":"Kiki 已是最新版本。","st.about.install":"安装 {version}","st.about.installing":"正在安装…","st.about.installConfirm":"安装 Kiki {version}?Kiki 和正在运行的任务将退出。","st.about.updateAvailable":"Kiki {version} 可用,请前往“设置 → 关于”安装。","st.about.installedRestart":"更新已安装。请重启 Kiki 以完成更新。","conn.desktopNoServer":"Kiki 桌面后端未注册本地服务器。","conn.desktopStartFailed":"Kiki 桌面后端启动失败:{detail}","time.justNow":"刚刚","time.secondsAgo":"{n} 秒前","time.minutesAgo":"{n} 分钟前","time.hoursAgo":"{n} 小时前","time.daysAgo":"{n} 天前","time.expired":"已过期","time.secondsLeft":"剩余 {n} 秒","time.minutesLeft":"剩余 {n} 分钟","time.hoursLeft":"剩余 {n} 小时","time.durationMs":"{n}毫秒","time.durationSeconds":"{n}秒","time.durationMinutes":"{m}分{s}秒","val.permissionMode":"权限模式必须是 manual、auto 或 yolo。","val.skillDirsNul":"技能目录不能包含 NUL 字符。","val.flagsJson":"实验开关必须是合法的 JSON。","val.flagsObject":"实验开关必须是 JSON 对象。","val.flagNameEmpty":"实验开关名称不能为空。","val.flagBool":"实验开关“{name}”必须为 true 或 false。","val.runtimeNonNegative":"{field} 必须是非负整数。","val.runtimePositive":"{field} 必须是支持范围内的正整数。","val.advancedJson":"高级服务器配置必须是合法的 JSON。","val.advancedObject":"高级服务器配置必须是 JSON 对象。","val.advancedUnknown":"不支持的高级配置字段:{fields}。","val.advancedHooks":"高级配置的 hooks 必须是 JSON 数组。","val.advancedEmpty":"保存前请至少添加一个高级配置字段。","val.timeoutWhole":"子智能体超时必须是非负整数毫秒。","val.timeoutMax":"子智能体超时不能超过 24 小时(86,400,000 毫秒)。","val.requestTimeoutSeconds":"请求超时必须是 5–600 秒的整数。","val.providerId":"提供商 ID 必须以字母或数字开头,且只能包含字母、数字、空格、- 或 _。","val.providerIdEmpty":"给这个连接起个名字。","val.providerProtocol":"请选择受支持的提供商协议。","val.requestIdentityJson":"请求身份覆盖必须是有效的 JSON。","val.requestIdentityOverridesRequired":"仅自定义覆盖模式需要非空 JSON 对象。","val.requestIdentityOverridesInvalid":"请求身份覆盖必须至少包含一个受支持的叶子值,且不能包含未知字段。","val.modelRequestIdentity":"模型 {model} 的请求身份覆盖无效或为空。","val.imageAcceptedTypesEmpty":"请至少选择一种接受的图片类型,或将此项切换为继承。","val.imageMime":"{mime} 不是受支持的图片 MIME 类型。","val.imageConversionTarget":"选择此转换目标前,请将 {mime} 加入接受的图片类型。","val.imageAutoTarget":"自动转换要求接受的图片类型包含 image/png 或 image/jpeg。","val.baseUrlAbsolute":"Base URL 必须是合法的绝对 URL。","val.baseUrlHttp":"Base URL 必须使用 http 或 https。","val.baseUrlEnv":"Base URL 不能包含环境变量占位符。","val.apiKeyLineBreaks":"API 密钥不能包含换行。","val.modelsEmpty":"请至少添加一个模型。","val.modelIdEmpty":"模型 ID 不能为空。","val.modelContextSize":"模型 {model} 需要正整数的上下文大小。","val.modelUnnamed":"(未命名)","val.modelDuplicate":"模型重复:{model}。","val.defaultModelInModels":"默认模型必须是提供商模型之一。","val.baseUrlRequired":"请先填写 Base URL。","val.remoteModelsShape":"响应不是可识别的模型列表格式。","val.remoteModelsEmpty":"连接成功,但服务未返回任何模型。","attach.imageType":"“{name}”是 {type} — 只能发送 PNG、JPEG、GIF 和 WebP 图片。","attach.imageTypeUnknown":"“{name}”类型未知 — 只能发送 PNG、JPEG、GIF 和 WebP 图片。","attach.imageTooLarge":"“{name}”大小为 {size} — 每张图片上限为 {max}。","attach.totalTooLarge":"每条消息的图片总大小上限为 {max}。","attach.tooMany":"每条消息最多 {max} 个附件。","attach.readFailed":"无法读取 {name}","attach.pastedImage":"粘贴的图片","attach.pastedFile":"粘贴的文件","attach.fileTooLarge":"“{name}”大小为 {size} — 每个文件的上限为 {max}。","attach.uploadFailed":"无法上传 {name}","connect.desktopBootingSpawning":"正在启动 Kiki 桌面后端…","connect.desktopBootingWaiting":"后端已启动,正在等待就绪(冷启动最长约 2 分钟)…","connect.desktopElapsed":"已等待 {seconds} 秒","connect.desktopCancel":"取消启动","connect.desktopFailedTitle":"Kiki 桌面后端启动失败","connect.desktopLogPathLabel":"后端日志:","connect.desktopRetry":"重试启动","connect.desktopCopyDiagnostics":"复制诊断","connect.desktopCopied":"已复制","connect.desktopCancelled":"已取消桌面后端启动。","connect.sshTitle":"连接远端 Kiki","connect.sshHint":"切换整套 Kiki 环境到一台 SSH 主机:会话、模型和设置都来自远端。请先信任该 SSH 主机的主机密钥。保存 SSH config 别名时不会保存私钥或 token;连接已运行的远端 Kiki 服务需填写预期 home ID 和 Bearer Token。此流程不会安装远端服务,自动安装仍需可信的发布包。","connect.sshLabel":"显示名称","connect.sshAlias":"SSH config 别名","connect.sshIdentity":"私钥文件(可选)","connect.sshAdd":"保存 SSH 主机","connect.sshRemove":"移除","connect.sshCheck":"检查可用性","connect.sshChecking":"正在核验 SSH 服务端身份…","connect.sshFailedTitle":"SSH 连接已阻止","connect.sshRemotePathHint":"请输入该 SSH 主机上的 Linux 绝对路径。远端工作区不会使用本机文件夹选择器。","connect.sshCwdInvalid":"请输入以 / 开头的 Linux 绝对路径。","connect.localScope":"本机","connect.remoteScope":"远端 Kiki","connect.switchLocal":"切回本机","connect.sshRemoteSettings":"服务端运行在 SSH 主机,Agent 和 Provider 设置保存在该主机;修改隧道 URL 或重启本地后端都不会改变远端工作区。","connect.sshDisconnectBody":"切回本机。远端任务可能继续运行;此操作不会停止远端服务端。","connect.sshPort":"远端 Kiki 端口","connect.sshHomeId":"预期服务端 home ID(从可信 SSH 终端获取)","connect.sshToken":"服务端 Bearer Token(不会保存)","connect.sshConnect":"连接已运行的服务端","connect.sshNeedSetup":"连接前请输入远端端口、预期 home ID 与 Bearer Token。无 home ID 的旧版服务端需升级。","st.fetchModels.networkError":"无法连接到该地址(网络不可达、地址错误或被桌面安全策略拦截)。","app.reconnectNow":"立即重连","app.disconnectedSendHint":"仍可发送,但消息可能无法送达,重连前也看不到实时回复。","shortcuts.escOverlay":"弹层或菜单打开时:Esc 先关闭它(优先级最高)","shortcuts.escTerminal":"终端面板打开时:Esc 其次关闭面板","shortcuts.escAbort":"其他情况:停止当前轮次 / 退出当前模式","shortcuts.desktopOnly":"桌面端专用","term.closeFailed":"无法关闭终端:{detail}","composer.slash.unknownPrompt":"未找到命令 /{name},将作为普通消息发送?","composer.slash.disabledPrompt":"命令 /{name} 不可激活 — reference 技能仅供模型使用。","composer.slash.sendAnyway":"仍要发送","composer.slash.cancelSend":"继续编辑","composer.attachmentReading":"正在读取图片…","composer.attachmentUploading":"正在上传文件…","composer.quoteSelection":"引用","composer.removeQuote":"移除引用","composer.annotateSelection":"标注","composer.annotationPlaceholder":"给这段文字写一句评论(Enter 确认,Esc 取消)","composer.removeAnnotation":"移除标注","composer.notes.pill.one":"{count} 条批注","composer.notes.pill.other":"{count} 条批注","composer.notes.aria":"随下一条消息发送的批注","composer.needsYou.title":"等你处理","composer.needsYou.banner.one":"需要你处理 {count} 项","composer.needsYou.banner.other":"需要你处理 {count} 项","composer.needsYou.bannerAction":"去处理","composer.needsYou.bannerTitle":"草稿会保留,处理完可回到输入框","composer.needsYou.step":"{index} / {total}","composer.needsYou.next":"下一项","composer.needsYou.previous":"上一项","composer.needsYou.draftKept":"草稿已保留","composer.needsYou.backToInput":"回到输入框","composer.needsYou.extras.one":"另有 {count} 项附带内容","composer.needsYou.extras.other":"另有 {count} 项附带内容","composer.queueStack.count.one":"{count} 条待发送","composer.queueStack.count.other":"{count} 条待发送","composer.queueStack.openAria":"展开待发送列表","composer.status.stop":"停止","composer.contextTrayAria":"已附加到此消息","sv.approvalAmbiguous":"当前有多张审批卡可见,请先点击其中一张再用 y / n 回答。","st.restart.confirmTitle":"重启服务器?","st.restart.confirmBodyActive":"重启将终止 {count} 个运行中的会话任务。进行中的轮次会被中断,会话记录本身保留。","st.restart.confirmBodyIdle":"当前没有运行中的会话。服务器重启期间连接会短暂中断。","st.banner.confirmTitle":"立即重启以应用待生效的更改?","st.banner.confirmBodyUnknown":"Kiki 无法确认是否存在运行中的会话。重启将终止进行中的轮次。","st.banner.checking":"正在确认会话…","st.banner.confirm":"立即重启","st.banner.acknowledge":"确认已知重启提示","st.conn.apply":"保存并重连","st.conn.applyHint":"立即生效,整个应用会重新连接到该服务器。","st.conn.wsLabel":"WebSocket","st.conn.ws.open":"已连接","st.conn.ws.connecting":"连接中","st.conn.ws.closed":"已断开","st.caps.extraDirsPlaceholder":`C:\\Users\\you\\.kiki\\skills\\shared
14
- D:\\team\\skills`,"sidebar.connTitle":"kap-server {version} · WebSocket {status}","sidebar.ws.open":"已连接","new.cwdAria":"工作目录(绝对路径)","new.cwdPlaceholder":"项目文件夹的绝对路径","threadRef.aria":"线程:{title}","threadRef.open":"打开 {title}","threadRef.remove":"移除指向 {title} 的链接","threadRef.unknown":"线程 {id}","threadRef.notLoaded":"不在已加载的线程列表中","threadRef.status.running":"运行中","threadRef.status.awaiting_approval":"待批准","threadRef.status.awaiting_answer":"待回答","threadRef.status.idle":"空闲","threadRef.status.archived":"已归档","threadRef.status.unknown":"状态未知","new.cwdInvalid":"请输入工作目录的绝对路径(例如 C:/work/project 或 /home/you/project)。","cap.noWorkspace":"还没有可查看技能的工作区","cap.noWorkspaceBody":"新建会话时选择一个项目文件夹,即可在这里查看它的技能。","cap.openWorkspace":"新建会话","cap.loadingWorkspaces":"正在加载工作区…","cap.workspacesFailed":"工作区列表加载失败,请重试。","cap.filterPlaceholder":"按名称、描述或路径过滤…","cap.filterAria":"过滤能力","cap.loadingSkills":"正在加载技能…","cap.loadingMcp":"正在加载 MCP 服务器…","cap.emptyGroup":"暂无内容。","cap.emptyFilter":"没有匹配「{query}」的能力。","cap.group.plugin":"插件技能","cap.group.project":"项目技能","cap.group.user":"用户技能","cap.group.extra":"扩展技能","cap.group.builtin":"内置技能","cap.group.other":"其他技能","cap.source.plugin":"插件","cap.source.project":"项目","cap.source.user":"用户","cap.source.extra":"扩展","cap.source.builtin":"内置","rail.viewDetails":"查看任务详情","rail.terminateAll":"全部终止","rail.terminateAllTitle":"终止当前运行中的子智能体?","rail.terminateAllBody":"将终止当前 {count} 个运行中的子智能体,已产生的输出会保留在时间线上。","rail.terminateAllConfirm":"终止当前子智能体","rail.terminateAllDone":"已向当时运行的 {count} 个子智能体发送终止请求。","rail.terminateAllRemaining":"已处理当时运行的 {count} 个子智能体;仍有 {remaining} 个运行中。","rail.terminateAllFailed":"{count} 个终止请求失败:{detail};仍有 {remaining} 个子智能体运行中。","tasks.detail.title":"任务详情","tasks.detail.pauseScroll":"暂停自动滚动","tasks.detail.resumeScroll":"恢复自动滚动","tasks.detail.exitCode":"退出码","tasks.detail.stopReason":"停止原因","tasks.detail.copyCommand":"复制命令","subagent.message":"发消息","subagent.messageTitle":"给 {name} 发消息","subagent.messagePlaceholder":"输入要发给该子智能体的消息…","subagent.send":"发送","subagent.messageSent":"已发送给 {name}。","subagent.messageFailed":"消息发送失败:{detail}","subagent.terminate":"终止","subagent.terminateTitle":"终止 {name}?","subagent.terminateBody":"该子智能体将停止运行,已产生的输出会保留在时间线上。","subagent.terminateUnavailable":"该子智能体没有正在运行的任务可终止。","subagent.terminateFailed":"终止子智能体失败:{detail}","subagent.changeModel":"切换模型","subagent.modelChanged":"模型已切换为 {model}。","subagent.modelChangeFailed":"切换模型失败:{detail}","subagent.effortChangeFailed":"切换思考强度失败:{detail}","subagent.composerUnavailable":"找不到该子智能体。","sv.agentActionsNote":"可直接给该子智能体发消息、切换模型与思考强度或终止;排队与技能操作仍在会话页进行。","st.section.communication":"智能体通信","st.communication.threadTitle":"线程通信","st.communication.threadHint":"开启后智能体可使用线程工具:列出本地线程、向其他线程发送消息。默认关闭。","st.communication.threadSaved":"服务器已保存并回显线程通信设置。","st.communication.appendTimingTitle":"排队消息","st.communication.appendTimingHint":"智能体忙碌时发送的消息何时开始执行。这是本地默认值——每条排队消息仍可在队列条上单独调整。","st.communication.appendTiming":"默认时机","st.communication.notifyParentTitle":"来自子智能体的父级通知","st.communication.notifyParentHint":"开启后,运行中的子智能体可通过 AgentNotify 工具向父智能体发消息(进度、提问或提醒)。默认开启;关闭后子智能体只通过最终结果汇报。","st.communication.notifyParent":"子智能体可以通知父智能体","st.communication.notifyParentSaved":"服务器已保存并回显子智能体通知设置。","st.communication.tokenCountingTitle":"Token 统计策略","st.communication.tokenCountingHint":"对外报告的上下文长度依据什么计算。默认取实时长度,且不低于最近一次实测总量;另两项分别只取最近一次实测总量,或忽略实测的本地估算。","st.communication.tokenStrategy.measuredEstimated":"实测 + 估算","st.communication.tokenStrategy.measured":"仅实测","st.communication.tokenStrategy.estimated":"仅估算","st.communication.tokenCountingSaved":"服务器已保存并回显 Token 计数设置。","onboarding.title":"欢迎使用 Kiki","onboarding.subtitle":"几步就能开始第一次对话,之后随时可以改。","onboarding.progress":"第 {current} 步,共 {total} 步","onboarding.step.welcome":"语言与外观","onboarding.appearance.brightness":"明暗","onboarding.appearance.colors":"配色","st.skin.name.paper":"纸色 Paper × 墨砚 Inkstone","st.skin.name.porcelain":"瓷白 Porcelain × 深海 Deepwater","st.skin.name.celadon":"青瓷 Celadon × 夜园 Night Garden","st.skin.name.apricot":"杏云 Apricot × 晚霞 Afterglow","st.skin.name.iris":"鸢尾 Iris × 星幕 Starveil","st.skin.name.contrast":"高对比 High contrast × 高对比·黑曜 Obsidian","st.skin.desc.paperPair":"近白暖纸、墨青定位;入夜换成冷炭灰与铜色行动。","st.skin.desc.porcelain":"冷白纸面、钴蓝细节;入夜是层次清楚的海军蓝与雾蓝操作色。","st.skin.desc.celadon":"青瓷釉与柔白纸面;入夜是深松绿表面与玉色细节。","st.skin.desc.apricot":"杏白纸面、莓色操作;入夜是梅炭层级与蜜桃光,不是咖啡棕。","st.skin.desc.iris":"紫白纸片、鸢尾紫墨;入夜是靛紫层级与银紫操作色。","st.skin.desc.contrastPair":"白纸黑字、可见边界;入夜是分层炭灰、冰青焦点与近白操作色。","onboarding.appearance.palette.paper":"暖纸","onboarding.appearance.palette.linen":"麻布","onboarding.appearance.palette.graphite":"石墨","onboarding.appearance.palette.forest":"森林","onboarding.appearance.palette.claret":"酒红","onboarding.appearance.palette.heather":"石楠","onboarding.appearance.palette.nocturne":"夜色","onboarding.appearance.palette.contrast":"高对比度","onboarding.appearance.picture":"背景图","onboarding.appearance.addPicture":"添加图片","onboarding.appearance.later":"这些之后都可以在「设置」›「外观」里改。","onboarding.step.model":"连接模型","onboarding.step.permissions":"Kiki 可以自主做多少?","onboarding.skipForNow":"暂时跳过","onboarding.skip":"稍后配置","onboarding.back":"上一步","onboarding.next":"下一步","onboarding.saveNext":"保存并继续","onboarding.finish":"开始","onboarding.close":"关闭引导","onboarding.welcome.body":"选好语言和外观,后面的窗口会随你的选择实时变化。","onboarding.model.body":"Kiki 可以使用不同厂商的模型。API 密钥适用范围最广,也可用受支持的账号登录;稍后还可在设置中补全。","onboarding.model.signIn":"用账号登录","onboarding.model.ready":"已连接模型供应商,可以继续。","onboarding.model.orApiKey":"用 API 密钥连接","onboarding.model.addAnother":"换一个或再加一个连接","onboarding.model.changeTemplate":"重新选择协议或服务","onboarding.model.model":"模型","onboarding.model.modelHint":"点“测试连接”后可从供应商的模型列表中挑选,也可以直接输入模型 id。","onboarding.model.test":"测试连接","onboarding.model.testHint":"测试只验证当前表单里填写的内容——点击“保存并继续”才会写入。","onboarding.model.testedOk":"连接成功,发现 {count} 个模型,点选即可填入。","onboarding.model.advancedHint":"上下文大小、能力等均已使用默认值,之后可在“设置”中调整。","onboarding.permissions.body":"这是新会话的默认设置。你可以在输入框里按会话调整,也可以随时在设置中修改。","onboarding.permissions.recommended":"推荐","onboarding.permissions.auto.line":"在工作区内自主工作;敏感或外部操作前先问你。","onboarding.permissions.manual.line":"安全清单以外的操作都先问你。","onboarding.permissions.review.line":"敏感操作先由审查者判断;不确定时再询问你。","onboarding.permissions.yolo.line":"全部自动批准,包括敏感文件。仅在安全的环境中使用。","onboarding.reenter":"重新进入引导","onboarding.reenterHint":"重新走一遍首次启动引导:外观、模型连接、默认设置和更多能力。","onboarding.step.capabilities":"Kiki 还能做什么","onboarding.caps.body":"这些都不是开始使用的前提。想要的现在就配置,其余随时回来再说。","onboarding.caps.group.find":"查找与记忆","onboarding.caps.group.reach":"连接更多","onboarding.caps.group.run":"让工作持续","onboarding.caps.search.name":"联网搜索与历史检索","onboarding.caps.search.line":"搜索网页、读取页面,并通过全文索引检索过去的会话。通用网页搜索需要搜索提供商的密钥。","onboarding.caps.search.prompt":"/kiki-ops 帮我配置联网搜索:先检查现在的配置,再一步步带我添加搜索提供商和它的密钥。","onboarding.caps.memory.name":"记忆","onboarding.caps.memory.line":"跨会话记住你的偏好和项目事实,只保存在这台机器上。","onboarding.caps.ssh.name":"SSH 远程主机","onboarding.caps.ssh.line":"在 SSH 配置里的机器上运行命令和会话。","onboarding.caps.ssh.prompt":"/kiki-ops 帮我配置 SSH 远程主机:先检查我的 SSH 配置和 Kiki 需要什么,再一步步添加主机。","onboarding.caps.engines.name":"外部引擎","onboarding.caps.engines.line":"让 Kiki 驱动其他编码智能体,复用它们在本机已有的登录。","onboarding.caps.extensions.name":"插件、技能与 MCP","onboarding.caps.extensions.line":"从插件、技能目录和 MCP 服务器添加工具与专门知识。","onboarding.caps.extensions.prompt":"/kiki-ops 帮我添加一个 MCP 服务器或插件:先问我要哪一个,再完成配置并确认它的工具已加载。","onboarding.caps.hostSkill.name":"在其他智能体中使用 Kiki","onboarding.caps.hostSkill.line":"安装 kiki-as-subagent 技能,让其他智能体把长任务交给 Kiki。写入前会先显示文件位置。","onboarding.caps.hostSkill.installed":"已为 {hosts} 安装。","onboarding.caps.cron.name":"定时任务","onboarding.caps.cron.line":"按计划运行提示词,比如每日总结或每周检查。","onboarding.caps.cron.prompt":"/kiki-ops 帮我设置一个定时任务:先问我要运行什么、什么时候运行,再创建它并告诉我在哪里查看。","onboarding.caps.board.name":"任务看板","onboarding.caps.board.line":"每个工作区一个看板,跟踪需求和背后的智能体工作。","onboarding.caps.bots.name":"Bot 与房间","onboarding.caps.bots.line":"让角色拥有常驻会话,或把几个角色放进一个房间讨论同一主题。","onboarding.caps.ask":"让 Kiki 帮你配置","onboarding.caps.asking":"正在打开…","onboarding.caps.askFailed":"没能打开会话:{detail}","onboarding.caps.openSettings":"设置","onboarding.caps.openBoard":"打开看板","onboarding.caps.openCron":"查看定时任务","onboarding.caps.openPersonas":"角色","onboarding.caps.bots.prompt":"/kiki-ops 帮我设置一个 Bot:先说明开启 Bot 模式会做什么,再帮我挑选或新建一个角色,并把它设为 Bot。","queue.editTitle":"放回输入框编辑 — 确认后回到原排队位置","queue.editingBadge":"正在输入框中编辑","queue.editReady":"已满足发送条件 · 编辑完即发送","queue.editWaiting":"编辑中 · 发送条件:{timing}","queue.drainOrder":"按发送顺序","queue.waitsForEdit":"等你编辑完","queue.holdNotice":"编辑期间暂停派发,编辑完后按顺序继续。","queue.holdNoticeAhead":"编辑期间暂停派发:前面 {count} 条照常发送,其余等你编辑完再按顺序继续。","goal.doneWhen":"完成条件 · {criterion}","queue.removeConfirm":"确认移除?","queue.removeConfirmTitle":"再次点击以移除这条排队消息","queue.dragHandleAria":"调整这条排队消息的顺序","queue.dragHandleTitle":"拖拽调整顺序,或聚焦后按 ↑ / ↓ 移动","queue.moveFailed":"无法调整排队顺序:{detail}","timing.agentIdle":"本轮结束后","timing.subagentsDone":"子智能体完成时","timing.tasksDone":"全部任务完成时","timing.short.agentIdle":"本轮结束后","timing.short.subagentsDone":"子智能体完成后","timing.short.tasksDone":"任务完成后","timing.hint.agentIdle":"当前这一轮结束后开始;后台运行的工作不等","timing.hint.subagentsDone":"等待运行中的子智能体完成后开始","timing.hint.tasksDone":"等待所有运行中的任务完成后开始;常驻服务不计","queue.timingAria":"这条排队消息何时开始","queue.timingFailed":"无法调整这条消息的开始时机:{detail}","composer.queueEditBanner":"正在编辑排队消息 — Enter 确认,Esc 取消","composer.queueEditConfirm":"确认编辑","composer.queueEditConfirmTitle":"保存修改并回到原排队位置(Enter)","composer.queueEditConfirmTitleCmdEnter":"保存修改并回到原排队位置(⌘/Ctrl+Enter)","composer.queueEditCancel":"取消编辑","composer.queueEditRemoveAria":"移除这条排队消息","composer.queueEditRemoveTitle":"把这条消息移出队列","composer.queueEditRemoveConfirm":"确认移除?","agentMessage.fromMain":"主智能体注入","agentMessage.fromAgent":"{name} 注入","agentMessage.senderProfile":"{profile}","agentMessage.senderModel":"{model}","agentMessage.senderDetails":`发送方智能体:{agentId}
15
- 角色:{profile}
16
- 模型:{model}
17
- 任务:{task}`,"agentMessage.detailsUnknown":"未知","agentMessage.agent":"智能体","agentMessage.fromThread":"来自线程 {id}","agentMessage.pending":"待送达","agentMessage.delivered":"已送达","agentMessage.deduplicated":"已接受,未重复投递","agentMessage.payloadConflict":"先前消息已按不同内容接受;这份草稿未送出。","agentMessage.attachmentOutcomeUnknown":"无法确认这条含附件消息是否已送出。再次发送前,请先检查智能体消息。","agentMessage.promptOutcomeUnknown":"无法确认这条消息是否已送出。再次发送前,请先检查智能体消息。","nav.aria":"工作区工具","nav.board":"任务看板","nav.cron":"定时任务","nav.usage":"用量","nav.capabilities":"能力","scope.label":"工作区","scope.all":"全部工作区","scope.switchAria":"切换工作区范围","scope.back":"返回","cron.scope.empty":"这个工作区没有定时任务。","cron.scope.showAll":"查看全部工作区","cron.scope.session":"本对话","cron.scope.sessionClear":"查看全部对话","cron.scope.sessionEmpty":"本对话暂无定时任务。","scope.prefix":"范围","scope.only":"只看 {name}","scope.showAll":"显示全部","cron.section.active":"已启用","cron.section.paused":"已暂停","cron.summary.active.one":"{count} 个启用","cron.summary.active.other":"{count} 个启用","cron.summary.paused.one":"{count} 个暂停","cron.summary.paused.other":"{count} 个暂停","sidebar.statusRunning":"运行中","sidebar.statusNeedsMe":"等我处理","sidebar.statusIdle":"空闲","sidebar.filterStatusHeading":"状态","sidebar.filterArchivedHeading":"归档","sidebar.archivedHide":"隐藏已归档","sidebar.archivedInclude":"包含已归档","sidebar.archivedOnly":"仅已归档","sidebar.filterArchivedOnly":"仅已归档","sidebar.filterMenu":"筛选会话","sidebar.clearFilter":"移除筛选 {label}","sidebar.clearAllFilters":"清除筛选","sidebar.groupByNone":"不分组","sidebar.sortCreated":"最近创建","sidebar.showMoreInGroup":"再显示 {count} 个","sidebar.showLessInGroup":"收起","sidebar.collapseGroup":"折叠 {label}","sidebar.expandGroup":"展开 {label}","sidebar.noFilterMatches":"没有符合这些筛选的会话。","sidebar.runningCount.one":"{count} 个运行中","sidebar.runningCount.other":"{count} 个运行中","sidebar.needsMeCount.one":"{count} 个等你处理","sidebar.needsMeCount.other":"{count} 个等你处理","sidebar.statusTag.approval":"待批准","sidebar.statusTag.question":"待回答","sidebar.results.workspaces":"工作区","sidebar.results.sessions":"会话","sidebar.results.messages":"消息","sidebar.results.filterTo":"只看 {name}","sidebar.results.role.user":"你","sidebar.results.role.assistant":"Kiki","sidebar.results.role.title":"标题","sidebar.results.typeMore":"再输入一个字符即可搜索消息。","sidebar.results.building":"索引构建中({indexed}/{total} 个会话),优先索引最近的会话 — 显示部分结果。","sidebar.results.unavailable.runtime_disabled":"这个桌面版本的全文搜索不可用,会话标题搜索仍然可用。","sidebar.results.unavailable.generic":"全文搜索不可用,会话标题搜索仍然可用。","st.searchIndex.title":"全文索引","st.searchIndex.checking":"正在检查索引…","st.searchIndex.checkFailed":"无法读取索引状态:{reason}","st.searchIndex.ready":"就绪 · 已索引 {indexed}/{total} 个会话。","st.searchIndex.building":"构建中 · 已索引 {indexed}/{total} 个会话,优先最近的会话。","st.searchIndex.readonly":"已暂停更新 · {indexed}/{total} 个历史会话可搜索。","st.searchIndex.retry":"重启索引程序","st.searchIndex.retrying":"正在重启…","st.searchIndex.retried":"索引程序已重启,结果会随索引追上逐步出现。","st.searchIndex.retryFailed":"无法重启索引程序:{reason}","sidebar.results.unavailable.disabled":"全文搜索已关闭;可在实验设置中开启,标题搜索仍可用。","sidebar.results.unavailable.indexer_backoff":"全文索引程序正在退避重启,标题搜索仍可用。","sidebar.results.unavailable.memory_budget":"全文索引超出内存预算,标题搜索仍可用。","sidebar.results.unavailable.wal_stuck":"全文索引写入暂缓,等待读者释放;标题搜索仍可用。","sidebar.results.unavailable.disk_low":"磁盘空间不足,全文索引已暂停;标题搜索仍可用。","sidebar.results.unavailable.corrupt_rebuilding":"全文索引正在从损坏状态重建;标题搜索仍可用。","sidebar.results.unavailable.sqlite_unavailable":"SQLite 全文索引不可用;标题搜索仍可用。","sidebar.results.incomplete":"部分结果 — 搜索达到了时间上限。","sidebar.results.none":"没有与“{query}”匹配的内容。","sidebar.results.noMessages":"没有匹配的消息。","sidebar.results.scoped":"在当前筛选范围内搜索","sidebar.searchHint":"搜索会话和消息(/)","sidebar.prefixWorkspace":"范围:{name}","sidebar.prefixRole":"角色:{role}","inspector.toggleAria":"切换检查器","inspector.running":"运行中","inspector.waiting.one":"{count} 项等你处理","inspector.waiting.other":"{count} 项等你处理","inspector.tasks.one":"{count} 个任务","inspector.tasks.other":"{count} 个任务","inspector.agent":"智能体","inspector.context":"上下文","inspector.cost":"费用","inspector.tokens":"Token","inspector.effort":"思考强度","inspector.profile":"智能体","inspector.details":"智能体详情","inspector.usage":"用量详情","inspector.treeTotal":"整棵智能体树","inspector.treeTotalPartial":"整棵智能体树(部分智能体尚未上报)","inspector.treePartialNote":"只统计了已上报用量的智能体,其余仍在统计中。","inspector.treeCounts":"{total} 个子智能体中 {active} 个运行中","inspector.capabilities":"工具、技能与分派","inspector.todos":"待办","inspector.plan":"计划","inspector.elsewhere":"这个工作区","inspector.boardLink":"任务看板","inspector.cronLink":"定时任务","inspector.cronSummary.one":"此处 {count} 个定时任务","inspector.cronSummary.other":"此处 {count} 个定时任务","inspector.viewing":"正在查看","inspector.backToMain":"主智能体","inspector.backToMainAria":"查看主智能体","inspector.nowWorking":"工作中","inspector.nowIdle":"空闲","inspector.nowWaiting":"等你处理","inspector.nowRunningTool":"正在运行 {tool}","inspector.needsYou":"等你处理","inspector.review":"查看","inspector.approvalItem":"审批 {tool}","inspector.questionItem":"回答一个问题","inspector.recent":"最近动态","inspector.recentFiles":"改动的文件","inspector.recentCommands":"命令","inspector.agentSetup":"模型与能力","inspector.sessionInfo":"会话","inspector.team":"团队","inspector.tabsAria":"此会话中的智能体","inspector.moreAgentsAria":"查看全部 {count} 个智能体","inspector.openAgent":"打开","inspector.locate":"在时间线中定位","inspector.budget":"用量","inspector.scopeAgent":"本智能体","inspector.scopeTree":"全树","inspector.scopeAria":"用量范围","inspector.cached":"缓存 {pct}%","inspector.tokensShort":"{tokens} tokens","inspector.compactions.one":"压缩 {count} 次","inspector.compactions.other":"压缩 {count} 次","inspector.overview":"会话概览","inspector.ofWindow":"占窗口 {pct}%","inspector.compactAt":"到 {point} 时压缩","inspector.compactAtTitle":"在 {point} tokens 时开始自动压缩","inspector.inOut":"{input} 输入 · {output} 输出","inspector.cacheShort":"{pct}% 缓存","inspector.sessionAge":"{duration}前开始","inspector.sessionAgeTitle":"会话开始于 {at}","inspector.turns.one":"{count} 轮","inspector.turns.other":"{count} 轮","inspector.window":"窗口","inspector.permission":"权限","inspector.toolsRow":"工具","inspector.toolsCount":"已启用 {enabled} / {total}","inspector.extensions":"扩展","inspector.mcpServers.one":"{count} 个 MCP 服务器","inspector.mcpServers.other":"{count} 个 MCP 服务器","inspector.plugins.one":"{count} 个插件","inspector.plugins.other":"{count} 个插件","inspector.toolCalls.one":"{count} 次工具调用","inspector.toolCalls.other":"{count} 次工具调用","inspector.compactPoint":"压缩点","inspector.compactPointValue":"{point} · {pct}%","inspector.durationM":"{m} 分钟","inspector.durationH":"{h} 小时 {m} 分","inspector.durationD":"{d} 天 {h} 小时","inspector.agents":"智能体","inspector.agentsAria":"此会话中的智能体","inspector.filterAria":"按状态显示智能体","inspector.filter.waiting":"{count} 待处理","inspector.filter.running":"{count} 运行中","inspector.filter.failed":"{count} 个失败","inspector.filter.done":"{count} 个已完成","inspector.filterClear":"显示全部","inspector.searchAgents":"查找智能体","inspector.searchAgentsAria":"按名称、任务或模型查找智能体","inspector.noAgentMatch":"没有匹配的智能体。","inspector.completedGroup.one":"{count} 个已完成","inspector.completedGroup.other":"{count} 个已完成","inspector.expandAgent":"显示 {name} 下的智能体","inspector.collapseAgent":"隐藏 {name} 下的智能体","inspector.childCount.one":"{count} 个智能体","inspector.childCount.other":"{count} 个智能体","inspector.waitingBelow.one":"下方 {count} 个等你处理","inspector.waitingBelow.other":"下方 {count} 个等你处理","inspector.modelRow":"模型","inspector.needsYouFrom":"来自 {path}","inspector.needsYouMore.one":"再显示 {count} 个","inspector.needsYouMore.other":"再显示 {count} 个","inspector.approveInline":"批准","inspector.rejectInline":"拒绝","inspector.answer":"回答","inspector.resolveFailed":"无法发送决定:{detail}","st.layout.railOpenByDefault":"默认显示右侧面板","st.layout.railOpenByDefaultHint":"只对宽窗口生效;窄窗口里面板从顶栏打开。","inspector.filter.ended":"{count} 已结束","inspector.endedGroup.one":"{count} 个已结束","inspector.endedGroup.other":"{count} 个已结束","inspector.profileExpand":"展开工具、技能和子智能体","inspector.profileCollapse":"收起工具、技能和子智能体","inspector.cap.tabsAria":"智能体能力","inspector.cap.tools":"工具","inspector.cap.skills":"技能","inspector.cap.subagents":"子智能体","inspector.cap.extensions":"扩展","inspector.cap.noTools":"这个智能体没有开启工具。","inspector.cap.noSkills":"这个智能体没有可用的技能。","inspector.cap.noSubagents":"这个智能体不能派发子智能体。","inspector.cap.noExtensions":"没有连接 MCP 服务器或插件。","inspector.cap.unavailable":"不可用","inspector.cap.asks":"需审批","inspector.cap.off.one":"{count} 个未开启","inspector.cap.off.other":"{count} 个未开启","inspector.cap.toolCount.one":"{count} 个工具","inspector.cap.toolCount.other":"{count} 个工具","inspector.cap.mcp":"MCP","inspector.cap.plugin":"插件","inspector.cap.loadFailed":"读取这个智能体的工具失败。","inspector.cap.loading":"正在读取工具…","inspector.cap.more":"还有 {count} 项","inspector.cap.less":"收起","inspector.cap.filter":"筛选{tab}","inspector.cap.filterAria":"筛选{tab}","inspector.cap.noMatch":"没有符合筛选的项。","inspector.cap.search":"搜索工具或分组","inspector.cap.noGroupMatch":"没有匹配的工具或分组","inspector.cap.clearSearch":"清除搜索","inspector.cap.hits":"命中 {count} 项","inspector.cap.viewGroup":"点击查看整组","inspector.cap.groupCount":"{on}/{total} 开启","inspector.cap.groupCountUnknown":"?/{total} 开启","inspector.cap.groupCountRatio":"{on}/{total}","inspector.cap.groupCountRatioUnknown":"?/{total}","inspector.cap.groupPending":"其中 {count} 个待确认","inspector.cap.groupDisconnectedNote":"{count} 个未连接","inspector.cap.groupUnknownNote":"{count} 个状态未确认","inspector.cap.stateOn":"开启","inspector.cap.statePending":"待确认","inspector.cap.stateOff":"未开启","inspector.cap.stateDisconnected":"未连接","inspector.cap.stateUnknown":"状态未确认","inspector.cap.backToTab":"返回{tab}","inspector.cap.groupGone":"此组已不在当前工具列表中。","inspector.cap.inGroupSearch":"在本组中搜索","inspector.cap.showingCount":"显示 {shown} / {total} 项","inspector.cap.builtin":"内置","inspector.cap.userTools":"自定义工具","inspector.cap.ownerUnreported":"提供方未报告","inspector.cap.noToolsReported":"当前智能体未报告可列出的工具。","inspector.cap.noOwnTools":"这里没有内置或自定义工具。","inspector.cap.moreGroups.one":"还有 {count} 组","inspector.cap.moreGroups.other":"还有 {count} 组","inspector.cap.fewerGroups":"收起分组","inspector.failedNoDetail":"出错后停止,打开智能体查看详情。","rail.source.builtin":"内置","rail.source.workspace":"工作区","rail.source.global":"全局","rail.source.globalExtra":"全局 · extra","rail.source.plugin":"插件","rail.source.from":"来自 {path}","nav.memory":"记忆","memory.title":"记忆","memory.off.title":"记忆未开启","memory.off.body":"开启后,Kiki 会跨会话记住你的偏好和项目事实;每次写入都会在对话里留下一行记录。","memory.off.storage":"只保存在运行 Kiki 的这台机器上,位于 {path}。","memory.toggle":"使用记忆","memory.toggleFailed":"无法切换记忆开关:{detail}","memory.scope.aria":"记忆作用域","memory.scope.global":"全局","memory.scope.workspace":"工作区","memory.scope.persona":"角色","memory.workspace.aria":"选择工作区","memory.workspace.search":"搜索工作区","memory.workspace.loading":"正在加载工作区…","memory.workspace.empty":"还没有工作区。","memory.persona.aria":"选择角色","memory.persona.search":"搜索角色","memory.persona.loading":"正在加载角色…","memory.persona.empty":"还没有角色。","memory.shard.label":"记忆范围","memory.shard.longterm":"长期记忆","memory.ws.label":"此工作区的记忆","memory.ws.follow":"跟随全局","memory.ws.on":"开","memory.ws.off":"关","memory.ws.offNotice":"此工作区的记忆已关闭。已保存的条目仍然保留,智能体不会读取或写入。","memory.search.placeholder":"搜索记忆","memory.search.aria":"搜索记忆条目","memory.filter.aria":"按类型筛选","memory.type.all":"全部","memory.type.user":"关于你","memory.type.feedback":"反馈","memory.type.project":"项目","memory.type.reference":"参考","memory.showInactive":"显示已归档","memory.tab.aria":"记忆视图","memory.tab.entries":"条目","memory.tab.inbox":"待处理","memory.new":"新建记忆","memory.count.one":"{count} 条","memory.count.other":"{count} 条","memory.empty.title":"还没有记忆","memory.empty.body":"在对话里告诉 Kiki「记住……」,或在这里新建一条。","memory.empty.filtered":"没有符合筛选条件的记忆。","memory.empty.clear":"清除筛选","memory.loading":"正在加载记忆…","memory.loadFailed":"无法加载记忆。","memory.field.title":"标题","memory.field.type":"类型","memory.field.body":"内容","memory.field.reason":"原因","memory.field.reasonPlaceholder":"可选,会显示在历史里","memory.defaultReason.edit":"在记忆页编辑","memory.defaultReason.create":"在记忆页新建","memory.defaultReason.keep":"从待处理中保留","memory.save":"保存修改","memory.create":"保存记忆","memory.discard":"放弃修改","memory.delete":"删除","memory.deleteUndoable":"可以在条目历史里撤销。","memory.openSource":"打开写入这条记忆的会话","memory.pin":"置顶","memory.unpin":"取消置顶","memory.back":"全部记忆","memory.pinned":"已置顶","memory.status.archived":"已归档","memory.status.superseded":"已被取代","memory.status.pending":"待处理","memory.writer.user":"由你","memory.writer.agent":"由 Kiki","memory.writer.consolidator":"建议","memory.writer.import":"导入","memory.history":"历史","memory.history.empty":"暂无历史。","memory.history.create":"创建","memory.history.update":"编辑","memory.history.delete":"删除","memory.history.archive":"归档","memory.history.supersede":"取代","memory.history.supersede_previous":"被新条目取代","memory.history.undo":"撤销","memory.edit":"编辑","memory.source.personas":"角色 / Bot","memory.source.bot":"角色 · {name}","memory.source.botHome":"常驻工作区","memory.sharing.label":"{name} 可读取的共享记忆","memory.history.retirementReason":"退役原因","memory.history.reasonUnavailable":"未找到退役原因。","memory.history.createdAt":"创建于","memory.history.updatedAt":"更新于","memory.history.revision":"版本","memory.history.before":"变更前","memory.history.after":"变更后","memory.history.noVersion":"无","memory.history.snapshotUnavailable":"日志保留了版本号,但未保留该版本的正文。","memory.history.view":"查看这次变更","memory.history.newer":"较新","memory.history.older":"较旧","memory.replacedBy":"已被「{title}」取代","memory.undo":"撤销","memory.deleted":"已删除「{title}」。","memory.undone":"已撤销。","memory.saved":"已保存。","memory.conflict":"这条记忆在你打开后被修改过。请先重新加载再保存,以免覆盖较新的内容。","memory.reload":"重新加载","memory.notFound":"这条记忆已不存在。","memory.actionFailed":"操作未完成:{detail}","memory.inbox.empty":"没有待处理的记忆。","memory.inbox.keep":"保留","memory.inbox.discard":"丢弃","memory.inbox.proposesUpdate":"通过后会把被它替代的条目内容替换掉。","memory.inbox.proposesArchive":"通过后会把被它替代的条目归档。","memory.inbox.acceptArchive":"归档","memory.tool.remembered":"已记住","memory.tool.updated":"已更新记忆","memory.tool.archived":"已归档记忆","memory.tool.replaced":"已替换记忆","memory.tool.pending":"已放入待处理","memory.tool.writing":"正在记住…","memory.tool.read":"读取记忆","memory.tool.searched":"搜索记忆","memory.tool.hits.one":"{count} 条结果","memory.tool.hits.other":"{count} 条结果","memory.tool.missing":"未找到","memory.tool.view":"查看","memory.tool.undo":"撤销","memory.tool.undone":"已撤销","memory.tool.undoConflict":"之后已被修改,请到记忆页查看","memory.tool.undoFailed":"撤销失败:{detail}","memory.tool.reason":"原因","memory.scopeTag.global":"全局","memory.scopeTag.workspace":"工作区","st.memory.title":"记忆","st.memory.hint":"跨会话保存偏好和项目事实,只存在本机。默认开启。","st.memory.open":"打开记忆页","st.memory.approval":"新增记忆的处理方式","st.memory.approval.auto":"自动保存","st.memory.approval.review":"先放入收件箱审核","st.memory.approval.off":"不自动保存","st.memory.approvalHint.auto":"自动保存新记忆;已保存记忆可读取和搜索","st.memory.approvalHint.review":"新记忆先进入收件箱,审核后生效","st.memory.approvalHint.off":"不再新增记忆;已保存的记忆仍可读取和搜索","st.memory.budget":"自动带入记忆的文本上限","st.memory.budgetHint":"每轮自动带入的记忆文本最多这么多字符(按 UTF-16 代码单元计),0 到 4,000,默认 2,000。","st.memory.budgetSave":"保存预算","st.memory.budgetInvalid":"输入 0 到 4,000 之间的整数。","st.memory.advanced":"高级","st.memory.advancedHide":"收起高级","st.memory.workspaces":"工作区记忆","st.memory.workspaceSelect":"选择工作区","st.memory.workspaceNone":"还没有工作区。创建工作区后可以设置覆盖选项。","st.memory.workspaceHelp":"可以跟随全局,也可以为这个工作区单独设置。全局关闭时始终关闭。","st.memory.workspaceOverrides":"其他工作区的覆盖设置","st.memory.workspaceOverride":"{name}:{state}","st.memory.workspaceEffective":"此工作区当前状态","st.memory.workspaceEffectiveInline":"当前:{state}。","st.memory.enabled":"已开启","st.memory.disabled":"已关闭","st.memory.workspaceDisabled":"此工作区已单独关闭","st.memory.settingsLink":"记忆设置","st.memory.loadFailed":"读取记忆设置失败:{detail}","st.memory.saveFailed":"保存记忆设置失败:{detail}","sidebar.thread.from":"由 {title} 创建","sidebar.thread.branchedFrom":"分支自 {title}","sidebar.thread.unknownParent":"另一个会话","sidebar.thread.rowAria":"{title},由 {parent} 创建","sidebar.branch.rowAria":"{title},{parent} 的分支","nav.activity":"活动","sidebar.searchOpen":"搜索","sidebar.activityAria":"活动","sidebar.activityCount.one":"{count} 项等你处理","sidebar.activityCount.other":"{count} 项等你处理","sidebar.rowState.unread":"上次打开后有新内容","sidebar.rowState.failed":"失败","sidebar.rowState.stopped":"已停止","sidebar.rowState.running":"正在运行","activity.needsYou":"等你处理","activity.needsYouOrder":"等待最久的在前","activity.unread":"你离开时跑完的","activity.unreadOrder":"最新的在前","activity.reason.approval":"待批准","activity.reason.question":"待回答","activity.reason.budget":"房间预算已用尽","activity.reason.completed":"已完成","activity.reason.failed":"已失败","activity.reason.cancelled":"已停止","activity.emptyTitle":"没有待处理的事。","activity.emptyBody":"等你处理的会话,以及你离开期间跑完的会话,都会收在这里。","st.section.sessions":"会话","st.section.memory":"记忆","st.purpose.memory":"设置跨会话和工作区的记忆保存方式。","st.section.permissions":"权限","st.section.hooks":"钩子","st.section.developer":"开发者","st.section.labs":"实验功能","st.group.device":"应用","st.group.work":"工作方式","st.storage.workspace":"工作区:{name}","st.storage.unsaved":"有未保存的更改","st.storage.pageServerRemote":"已保存到你连接的远端服务器。","st.storage.remoteTitle":"已连接到 {address}","st.exp.tag":"实验性","st.exp.rowsTitle":"实验性","st.exp.effect.now":"立即生效。","st.exp.effect.newSessions":"对新会话生效。","st.exp.effect.restart":"开启后需要重启服务器。","st.exp.state.on":"当前已开启","st.exp.state.off":"当前已关闭","st.exp.state.unknown":"暂不可用","st.exp.choice.default":"默认","st.exp.choice.defaultOn":"默认(开启)","st.exp.choice.defaultOff":"默认(关闭)","st.exp.choice.on":"开启","st.exp.choice.off":"关闭","st.exp.choiceLabel":"{feature}:开启、关闭或服务器默认值","st.exp.envOverride":"当前选择已被外部配置覆盖。","st.exp.flagId":"{id}","st.exp.agentRoutes.name":"命名智能体路由","st.exp.agentRoutes.desc":"加载现有智能体的专用变体,让会话按名称派发给它们。","st.exp.subagentIdle.name":"释放空闲子智能体","st.exp.subagentIdle.desc":"子智能体完成后,在等待期间释放它占用的内存。它仍留在列表里,之后从历史记录恢复。","st.exp.sessionTitle.name":"自动生成会话标题","st.exp.sessionTitle.desc":"第一轮对话后写入一个简短标题。","st.exp.sessionEviction.name":"卸载空闲会话","st.exp.sessionEviction.desc":"卸载没人在用的会话以节省内存,历史记录会保留。","st.exp.residentWindow.name":"限制对话记录占用的内存","st.exp.residentWindow.desc":"长记录只在内存中保留最近部分;更早的轮次从历史记录加载。","st.exp.taskWait.name":"等待后台任务","st.exp.taskWait.desc":"让智能体在同一轮内等待后台任务,而不是结束这一轮。","st.exp.taskBoard.name":"工作区任务看板","st.exp.taskBoard.desc":"将需求保存在工作区拥有的看板上,与智能体运行记录和待办事项分开。","st.exp.toolSelect.name":"按需加载 MCP 工具","st.exp.toolSelect.desc":"仅在模型请求时才把 MCP 和插件工具发给它。仅适用于支持此功能的模型。","st.exp.delegation.name":"通过 MCP 外部委派","st.exp.delegation.desc":"让经过认证的外部客户端负责长时间运行的会话工作。","st.exp.searchWorker.name":"在工作线程中运行搜索索引","st.exp.searchWorker.desc":"在独立工作线程中运行全局搜索索引,避免大型搜索拖慢服务器。","st.exp.desktopSearch.name":"桌面会话全文搜索","st.exp.desktopSearch.desc":"在后台建立 SQLite 索引,并从桌面搜索历史会话。重启后生效;首次建库约需 20–30 分钟,磁盘至少剩余 2 GB。","st.exp.imageConversion.name":"转换不支持的图片","st.exp.imageConversion.desc":"发送前,把模型无法读取的图片转换成它接受的格式。","st.exp.nativeSsh.name":"SSH 主机","st.exp.nativeSsh.desc":"使用 SSH 配置中的机器作为会话运行位置。","st.exp.nativeBrowser.name":"原生浏览器控制","st.exp.nativeBrowser.desc":"经由随 Kiki 提供的 agent-browser 受管后端运行已保存的浏览器连接。","st.exp.readModel.name":"会话读模型","st.exp.readModel.desc":"使用派生索引提供会话列表和回放,而不是读取原始历史记录。","st.exp.usageExport.name":"把用量发送到其他工具","st.exp.usageExport.desc":"让这台服务器把模型、token、质量与价格桶发送到你选择的目的端。对话内容、标题与路径不会发送。","st.exp.pluginImport.name":"从其他工具导入历史","st.exp.pluginImport.desc":"从已安装的来源读取对话并保存为只读归档。归档是历史,不是可以继续的会话。","st.exp.unknown.name":"此服务器特有的功能","st.exp.unknown.desc":"此服务器报告了一个本应用没有说明的功能。","st.labs.openIn":"在「{page}」中打开","st.labs.empty":"这个服务器未报告实验功能。","st.labs.indexTitle":"实验功能入口","st.effect.newSessions":"对新会话生效","st.purpose.sessions":"新会话如何开始、智能体何时可以打断你,以及智能体之间如何传话。","st.purpose.skills":"服务器查找技能的位置。","st.purpose.plugins":"从哪里找插件,以及浏览器控制是否已设置。","st.purpose.hooks":"在生命周期事件上自动运行的声明式注入与 shell 命令。","st.purpose.workspaces":"服务器已知的文件夹。移除后不会删除其中的文件和会话。","st.purpose.about":"版本、构建、Server 标识与更新。","st.purpose.permissions":"默认模式、持久工具规则、危险 Bash 检查、审查者及可用工具。","st.purpose.developer":"引擎参数、底层配置与系统诊断。","st.purpose.labs":"实验性功能体验与开关设置。","st.perm.defaultTitle":"默认权限模式","st.perm.dangerousBash":"危险 Bash 命令","st.perm.dangerousBash.default":"默认","st.perm.dangerousBash.on":"开启","st.perm.dangerousBash.off":"关闭","st.perm.dangerousBashHint":"默认在手动、自动和替我审批模式下询问危险 Bash 命令,放行模式不询问。开启后放行模式也会询问;关闭后停用这项检查。拒绝规则仍然生效。","st.perm.rulesTitle":"规则","st.perm.rulesHint":"规则保存在这台服务器上,工具调用时生效。拒绝优先于询问,询问优先于允许;同一类决定命中多条规则时,以最靠前的为准。","st.perm.rulesEmpty":"还没有保存规则。添加一条,按工具或命令模式设置允许、拒绝或询问。","st.perm.loading":"正在加载规则…","st.perm.pattern":"工具或命令模式","st.perm.invalidPattern":"输入工具名或 ToolName(参数模式),例如 Bash(rm -rf*)。","st.perm.decision":"决定","st.perm.decision.allow":"总是允许","st.perm.decision.deny":"拒绝","st.perm.decision.ask":"每次询问","st.perm.scope":"范围","st.perm.scope.user":"用户","st.perm.scope.project":"项目","st.perm.scope.turn-override":"轮次覆盖","st.perm.scope.session-runtime":"会话运行期","st.perm.sessionScopeHint":"会话运行期规则只用于当前会话的审批。持久规则请选择「用户」。","st.perm.reason":"原因(选填)","st.perm.add":"添加规则","st.perm.edit":"编辑","st.perm.addTitle":"新建权限规则","st.perm.editTitle":"编辑权限规则","st.perm.delete":"删除","st.perm.moveUp":"上移","st.perm.moveDown":"下移","st.sessions.questionsTitle":"智能体提问","st.sessions.questionsLabel":"问题等待时","st.sessions.questionsHint":"不阻塞:智能体继续工作,问题留在会话里,直到你回答。阻塞:智能体等你回答,此前不做别的事。","st.questionGuard.title":"提问频率","st.questionGuard.enableLabel":"在模型提问过密时提醒它","st.questionGuard.enableHelp":"模型超出下面的限度向你提问时,工具会把这次提问退回给模型,并附一句“你的问题真的有必要吗”。模型可以自己判断后继续做,或者在答案确实会改变它的做法时再问一次。","st.questionGuard.enableDetail":"按工具调用计数,不按一次调用里包含几道题另计:一次调用带三个问题也只算一次。模型坚持再问会放行,所以这道限度不会让你失去真正需要的答案。不会新增任何弹窗。","st.questionGuard.on":"开","st.questionGuard.off":"关","st.questionGuard.inherit":"同全局","st.questionGuard.perRound":"你每发一条消息可提问数","st.questionGuard.perRoundHelp":"你发出一条消息,最多能引出多少个问题,超过就提醒模型。","st.questionGuard.perWindow":"窗口内提问数","st.questionGuard.perWindowHelp":"在下面的时间窗口内最多可提问多少次,超过就提醒模型。","st.questionGuard.window":"计数窗口","st.questionGuard.windowHelp":"上面那道限度按多长的时间跨度统计。","st.questionGuard.minutesUnit":"分钟","st.questionGuard.range":"请输入 {min} 到 {max} 之间的整数。","st.questionGuard.windowRange":"请输入 {min} 到 {max} 之间的分钟数。","st.questionGuard.useInherited":"改回继承值","st.questionGuard.fromGlobal":"正在用全局设置的 {value}。","st.questionGuard.fromDefault":"正在用默认值 {value}。","st.sessions.titlesTitle":"会话标题","st.sessions.titlesToggle":"自动写会话标题","st.sessions.titlesServerOff":"此功能当前已被外部设置停用。","st.sessions.titleModel":"标题模型","st.sessions.titleMoments":"生成时机","st.sessions.titleMomentsHelp":"每个勾选的时机各向标题模型发一次请求。一个都不勾时 Kiki 不会自己写标题;按需生成标题仍然可用。","st.sessions.titleMoment.firstUserMessage":"发出第一条消息","st.sessions.titleMoment.firstTurnCompleted":"第一轮回复写完","st.sessions.titleMoment.contextCompacted":"上下文压缩完成","st.sessions.messagingTitle":"智能体传话","st.sessions.threadHint":"智能体可以列出本服务器上的其他线程,并向其中一个发送消息。","st.sessions.notifyHint":"运行中的子智能体可以给父智能体发进展或提问。关闭后,子智能体只通过最终结果汇报。","st.sessions.delegationSub":"子智能体交接说明","st.sessions.delegationSubHint":"告诉被派发的子智能体:最后一条消息就是交给调用方的完整结果。默认开启。","st.sessions.delegationIndependent":"宿主调用交接说明","st.sessions.delegationIndependentHint":"告诉由 MCP 或 SDK 宿主启动的智能体:没有父智能体在等待。默认开启。","st.labs.title":"实验功能","st.dev.tokenHint":"对外报告的上下文长度依据什么计算。默认取实时长度,且不低于最近一次实测总量;仅实测只报告最近一次实测总量;仅估算忽略实测、只给本地计数。","cap.page.title":"能力","cap.page.tabs":"能力类型","cap.page.refresh":"刷新","cap.page.add":"添加","cap.page.pluginsLead":"插件为你的工作提供工具、面板、技能和皮肤。","cap.page.skillsLead":"智能体在任务需要时加载的说明。","cap.page.mcpLead":"通过 MCP(Model Context Protocol)为智能体提供工具的服务器。","cap.page.toolsLead":"此服务器上智能体可以调用的所有内容,按来源分类。","cap.tab.plugins":"插件","cap.tab.skills":"技能","cap.tab.mcp":"MCP 服务器","cap.tab.tools":"工具","cap.add.plugin":"从来源添加插件","cap.add.pluginHint":"GitHub 仓库、文件夹或 ZIP 文件","cap.add.mcp":"MCP 服务器","cap.add.mcpHint":"本地命令或远端 URL","cap.workspace":"工作区","cap.loading":"加载中…","cap.advanced":"高级","cap.tier.official":"官方","cap.tier.curated":"精选","cap.tier.thirdParty":"未审核","cap.tier.local":"本地","cap.state.on":"开启","cap.state.off":"关闭","cap.state.error":"需要处理","cap.state.installed":"已安装","cap.state.installedOff":"已安装 · 关闭","cap.action.install":"安装","cap.action.installNamed":"安装 {name}","cap.action.update":"更新","cap.action.updateNamed":"更新 {name}","cap.action.remove":"移除插件","cap.action.rollback":"回退到 {version}","cap.shelf.featured":"精选","cap.shelf.productivity":"效率","cap.shelf.coding":"编程","cap.shelf.web":"Web 与部署","cap.shelf.data":"数据","cap.shelf.more":"更多","cap.link.plugins.one":"{count} 个插件已安装 · {on} 个已开启","cap.link.plugins.other":"{count} 个插件已安装 · {on} 个已开启","cap.link.mcp.one":"{count} 个 MCP 服务器","cap.link.mcp.other":"{count} 个 MCP 服务器","cap.link.mcpFailing.one":"{count} 个 MCP 服务器 · {failing} 个未连接","cap.link.mcpFailing.other":"{count} 个 MCP 服务器 · {failing} 个未连接","cap.link.mcpNone":"还没有 MCP 服务器。","cap.link.skills.one":"此工作区有 {count} 个技能","cap.link.skills.other":"此工作区有 {count} 个技能","cap.link.open.plugins":"管理插件","cap.link.open.skills":"浏览技能","cap.link.open.mcp":"管理 MCP 服务器","cap.link.title":"管理位置","cap.plugins.views":"插件视图","cap.plugins.market":"市场","cap.plugins.searchInstalled":"搜索已安装的插件","cap.plugins.attention.one":"{count} 个已安装插件需要处理","cap.plugins.attention.other":"{count} 个已安装插件需要处理","cap.plugins.updateTo":"更新到 {version}","cap.plugins.menuEnable":"开启","cap.origin.official":"官方","cap.origin.catalog":"市场","cap.origin.local":"本地文件夹","cap.origin.git":"Git","cap.origin.zip":"ZIP","cap.plugins.search":"搜索插件","cap.plugins.installed":"已安装","cap.plugins.manage":"管理已安装的插件","cap.plugins.noneInstalled":"尚未安装插件。","cap.plugins.noneInstalledBody":"从目录中选一个,或从 GitHub 仓库、文件夹或 ZIP 文件添加。","cap.plugins.more":"{name} 的更多操作","cap.plugins.menuDetails":"查看详情","cap.plugins.menuDisable":"关闭","cap.plugins.menuHomepage":"打开主页","cap.plugins.menuCopySource":"复制来源地址","cap.plugins.catalogFrom":"目录 · {source}","cap.plugins.loadingCatalog":"正在加载目录…","cap.plugins.noCatalog":"此服务器尚未设置插件目录。","cap.plugins.noCatalogBody":"在下方「高级」中填写目录地址,或在「设置」›「插件」中填写,也可直接从插件来源安装。","cap.plugins.catalogEmpty":"目录为空。","cap.plugins.noMatch":"没有匹配“{query}”的插件。","cap.plugins.featured":"推荐","cap.plugins.relevant":"适合此工作区","cap.plugins.seeMore":"再看 {count} 个","cap.plugins.allShelves":"全部插件","cap.plugins.openDetail":"打开 {name}","cap.plugins.backToMarket":"目录","cap.plugins.addFromSource":"从来源添加","cap.plugins.updates":"更新","cap.detail.back":"插件","cap.detail.updateAvailable":"有可用更新","cap.detail.broken":"此插件无法加载。诊断信息在「高级」下。","cap.detail.adds":"提供的功能","cap.settings.title":"设置","cap.settings.required":"此项为必填。","cap.settings.number":"请输入数字。","cap.settings.secretSet":"已保存在 Kiki 凭据中","cap.settings.secretUnset":"未设置","cap.settings.secretReplace":"输入新值以替换","cap.settings.secretRemove":"删除","cap.settings.secretRemovePending":"保存后删除","cap.detail.addsAfterInstall":"安装后会在这里显示工具、面板、命令和皮肤的完整列表。安装页会在安装前显示这些内容。","cap.detail.needs":"所需条件","cap.detail.needsOnPreview":"安装前会列出权限和所需程序。","cap.detail.id":"插件 ID","cap.detail.version":"版本","cap.detail.pinned":"固定到","cap.detail.checksum":"SHA-256","cap.detail.source":"来源","cap.detail.location":"安装位置","cap.detail.installedAt":"安装时间","cap.detail.homepage":"主页","cap.detail.permissionsDeclared":"已声明的权限","cap.detail.prerequisites":"所需程序","cap.detail.required":"必需","cap.detail.optional":"可选","cap.detail.diagnostics":"诊断","cap.detail.previous":"上一版本","cap.contrib.tools":"工具 · {count}","cap.contrib.panels":"面板 · {count}","cap.contrib.commands":"命令 · {count}","cap.contrib.themes":"皮肤 · {count}","cap.contrib.skills":"技能 · {count}","cap.contrib.mcp":"MCP 服务器 · {count}","cap.contrib.hooks":"钩子 · {count}","cap.contrib.providers":"提供商预设 · {count}","cap.contrib.agents":"智能体 · {count}","cap.contrib.settings":"设置","cap.panel.sidebar":"侧栏面板","cap.panel.workspace":"工作区面板","cap.panel.open":"打开面板","cap.panel.loading":"正在加载面板…","cap.panel.session":"作用于你最近的会话","cap.panel.noSession":"打开会话后才能使用此面板","cap.import.entry":"导入历史","cap.import.title":"导入历史","cap.import.intro":"把别的工具里的一段对话带进这个 Kiki,变成可以继续聊下去的会话。导入本身不需要模型,发下一条消息才需要。","cap.import.loading":"正在确认这台服务器能导入什么…","cap.import.unavailableTitle":"这台服务器没有开启导入历史。","cap.import.unavailableBody":"用 {flag} 启动这个 Kiki 即可开启。","cap.import.unwiredBody":"这台服务器还没有注册导入路由。更新 Kiki 后才能导入历史。","cap.import.destinationTitle":"导入为","cap.import.destinationAria":"导入成什么","cap.import.destinationSession":"Kiki 会话","cap.import.destinationArchive":"只读归档","cap.import.destinationSessionHint":"这段对话会变成这个 Kiki 里的一个会话,前面的对话成为它的上下文。打开就能从断掉的地方接着聊。","cap.import.destinationArchiveHint":"这段对话会保存成一份可阅读的记录,不能继续对话。","cap.import.destinationRemoteBody":"这个 Kiki 是远程端。这里可以读取它的历史,但会话只能在拥有其主目录的那台机器上创建。","cap.import.workDirLabel":"会话的工作目录","cap.import.workDirHint":"会话在这里工作,和你在这个 Kiki 里自己开的会话一样。没打开过的文件夹也可以,不必是已保存的工作区。","cap.import.workDirKnown":"你的工作区:","cap.import.workDirRequired":"先选一个导入后的会话要在哪里工作。","cap.import.pickWorkDir":"选择文件夹","cap.import.sourceTitle":"来源","cap.import.sourceAria":"导入来源","cap.import.sourceFormat":"可读取 {format}","cap.import.manageSource":"管理此插件","cap.import.manageSourceHint":"这个插件负责读取另一个工具的对话,由 Kiki 执行导入并保存归档。","cap.import.loadingSources":"正在读取可用来源…","cap.import.noSourcesTitle":"没有启用任何导入来源。","cap.import.noSourcesBody":"先启用一个能带进对话的插件,然后回到这里。","cap.import.pickTitle":"导入什么","cap.import.homeLabel":"来源主目录","cap.import.homeHint":"另一个工具存放自己历史的目录,在它所在的机器上。","cap.import.homeAria":"来源主目录路径","cap.import.homeRequired":"选择来源主目录后才会列出其中内容。","cap.import.pickHome":"选择目录","cap.import.targetLabel":"导入到","cap.import.targetHint":"当前窗口所连接服务器的主目录。","cap.import.targetLocal":"本机","cap.import.targetRemote":"远程服务器","cap.import.filesTitle":"对话","cap.import.loadingFiles":"正在读取来源主目录…","cap.import.nextPage":"下一页","cap.import.firstPage":"回到最新","cap.import.noFilesTitle":"这里没有可导入的内容。","cap.import.noFilesBody":"{home} 中没有该来源能读取的对话。","cap.import.previewLoading":"正在确认会保留什么…","cap.import.untitled":"未命名对话","cap.import.probe.preserved":"完整保留","cap.import.probe.partial":"部分保留","cap.import.probe.unsupported":"无法读取","cap.import.coverageSample":"样本","cap.import.coverageComplete":"完整读取","cap.import.previewTarget":"将归档到 {server} 的 {home}。","cap.import.previewSessionTarget":"将变成一个在 {dir} 工作的会话。","cap.import.previewSessionNote":"它原来的工具调用和系统提示会作为历史带进来,不会变成这个 Kiki 的权限。","cap.import.alreadyImported":"这段对话已经归档过。再次导入会新增修订 {revision}。","cap.import.alreadyImportedSession":"你已经把这段对话导入到 {dir} 了。再次导入会把更新的对话补进同一个会话。","cap.import.lossesTitle":"不会带过来的内容({count})","cap.import.noLosses":"本次读取没有丢弃任何内容。","cap.import.sampleTitle":"查看样本({count})","cap.import.sampleEmpty":"样本中没有可读文本。","cap.import.start":"开始导入","cap.import.startSession":"导入为会话","cap.import.openSession":"打开会话","cap.import.starting":"正在开始…","cap.import.readonlyBody":"这个 Kiki 是远程对端。这里的来源、导入记录和归档可读;开始、停止和继续导入由拥有该主目录的机器执行。","cap.import.changeFile":"换一段对话","cap.import.archiveReadOnly":"只读。把它当作进行中的对话打开,等于把它的历史当作本会话自己的历史重放。","cap.import.archiveLosses":"未带过来的内容","cap.import.archiveLossList":"{list}","cap.import.targetUnknown":"服务器读取来源后才会给出","cap.import.moreJobs":"显示更早的导入(已显示 {count} 条)","cap.import.moreArchives":"显示更早的归档(已显示 {count} 条)","cap.import.archiveStatus":"保留情况","cap.import.archiveDetails":"详细信息","cap.import.archiveFormat":"格式","cap.import.archiveComplete":"整条记录已读完。","cap.import.archiveMoreHint":"按需分页读取,每次一页。","cap.import.archiveNote":"归档是历史,不是进行中的对话:其中旧的工具调用和系统文本只是记录,无法在这里继续。","cap.import.previewNote":"保存为只读归档,不是进行中的对话。","cap.import.jobsTitle":"导入记录","cap.import.loadingJobs":"正在读取导入作业…","cap.import.noJobsTitle":"还没有运行过导入。","cap.import.noJobsBody":"在上面选一段对话,导入进度会显示在这里。","cap.import.state.queued":"排队中","cap.import.state.running":"导入中","cap.import.state.cancelled":"已停止","cap.import.state.failed":"失败","cap.import.state.interrupted":"已中断","cap.import.state.completed":"已导入","cap.import.progress":"正在导入 {title}","cap.import.readingPercent":"{percent}%","cap.import.readingBytes":"已读取 {count} B","cap.import.cancel":"停止导入","cap.import.resume":"继续导入","cap.import.openArchive":"打开归档","cap.import.jobLosses":"丢弃 {count}","cap.import.jobRecords.one":"{count} 条记录","cap.import.jobRecords.other":"{count} 条记录","cap.import.jobPages.one":"{count} 页","cap.import.jobPages.other":"{count} 页","cap.import.archivesTitle":"归档","cap.import.loadingArchives":"正在读取归档…","cap.import.noArchivesTitle":"还没有导入过的对话。","cap.import.noArchivesBody":"完成的导入会出现在这里,不需要模型即可阅读。","cap.import.archiveIntro":"一段导入对话的只读记录。它是历史而不是进行中的会话,无法在这里继续。","cap.import.archiveLoading":"正在读取归档…","cap.import.archiveEmpty":"这个归档没有可读记录。","cap.import.archiveSource":"来自","cap.import.archiveHome":"路径","cap.import.archiveRevision":"修订","cap.import.archiveSize":"大小","cap.import.loadMore":"加载更多","cap.import.role.metadata":"记录","cap.skin.light":"亮色","cap.skin.dark":"暗色","cap.perm.fsWorkspace":"在工作区中读写文件","cap.perm.fsOutside":"读写你批准的工作区外文件","cap.perm.exec":"运行程序","cap.perm.net":"连接互联网","cap.perm.secrets":"存储自己的密钥","cap.perm.uiPanel":"在 Kiki 中显示面板","cap.install.title":"安装 {name}","cap.install.previewing":"正在检查插件…","cap.install.adds":"提供的功能","cap.install.addsNothing":"未列出内容。","cap.install.canDo":"安装后它可以","cap.install.noPermissions":"无需特殊权限。","cap.install.needs":"需要额外程序","cap.install.needsLater":"在你批准后另行安装","cap.install.changes":"与已安装版本相比的变化","cap.install.fingerprint":"指纹","cap.install.context":"上下文成本","cap.install.contextValue":"加载后约占 {count} tokens","cap.install.unsupported":"不支持","cap.install.approvalNote":"安装不会批准任何工具调用。每次调用仍会按通常流程请求权限。","cap.perm.boundary":"同意安装不等于批准它的每次调用,也不是沙箱。以上是插件自己的声明,系统不会强制限制;它的每次工具调用仍按你的审批设置处理。","cap.update.title":"更新 {name}","cap.update.confirm":"更新","cap.update.allow":"允许并更新","cap.update.installing":"更新中…","cap.update.done":"{name} 已更新。","cap.update.noChanges":"功能和权限与已安装版本相同。","cap.update.branch":"{branch} 分支有新提交 {version}","cap.updates.checking":"正在检查 GitHub 更新…","cap.updates.checked":"{time} 检查过 GitHub 插件。有更新只会提示,不会自动安装。","cap.updates.failed":"没能检查 GitHub 更新:{detail}","cap.updates.check":"检查更新","cap.installed.group.attention":"需要处理","cap.installed.group.updates":"有更新","cap.installed.group.on":"已开启","cap.installed.group.off":"已关闭","cap.install.confirm":"安装","cap.install.allow":"允许并安装","cap.install.installing":"安装中…","cap.install.done":"{name} 已安装并开启。","cap.install.finish":"完成","cap.prereq.title":"安装 {id}?","cap.prereq.body":"这会下载固定的 {id} {version} 版本,核对校验和后保存到插件的数据文件夹。","cap.prereq.action":"安装 {id}","cap.prereq.installing":"安装中…","cap.prereq.done":"已安装。","cap.remove.title":"移除 {name}?","cap.remove.body":"它提供的内容会立即取消注册。过去的工具调用仍可在会话中查看。","cap.remove.deleteData":"同时删除插件保存的数据","cap.remove.confirmWithData":"移除插件和数据","cap.rollback.title":"将 {name} 回退到 {version}?","cap.rollback.body":"Kiki 会切换到上次更新前保留的副本,并重新加载插件。","cap.source.title":"从来源添加插件","cap.source.body":"Kiki 会检查插件,并在安装前显示它提供的内容。","cap.source.kind":"来源类型","cap.source.github":"GitHub","cap.source.path":"文件夹","cap.source.zip":"ZIP 文件","cap.source.githubLabel":"仓库 URL","cap.source.pathLabel":"插件文件夹","cap.source.zipLabel":"ZIP URL","cap.source.githubHint":"Kiki 会锁定所安装的具体提交;有更新时会提示你,不会自动更新。","cap.source.sha":"文件校验码 (SHA-256)","cap.source.shaHint":"验证下载文件完整性,确保与预期一致。","cap.source.shaInvalid":"请输入有效的 SHA-256 校验码。","cap.source.review":"检查插件","cap.skills.sourceFilter":"来源","cap.skills.source.plugin":"插件","cap.skills.source.project":"项目","cap.skills.source.user":"个人","cap.skills.source.extra":"额外文件夹","cap.skills.source.builtin":"内置","cap.skills.source.other":"其他","cap.mcp.summary.one":"{count} 个服务器 · {connected} 个已连接","cap.mcp.summary.other":"{count} 个服务器 · {connected} 个已连接","cap.mcp.failing.one":"{count} 项需要处理","cap.mcp.failing.other":"{count} 项需要处理","cap.mcp.tools.one":"{count} 个工具","cap.mcp.tools.other":"{count} 个工具","cap.skills.searchCount":"搜索 {count} 个技能","cap.skills.sourceAll":"全部","cap.skills.showAll":"显示全部 {count}","cap.skills.openPlugin":"打开 {name} 插件","cap.skills.matches.one":"{count} / {total} 个技能匹配","cap.skills.matches.other":"{count} / {total} 个技能匹配","cap.skills.search":"搜索技能","cap.skills.none":"此工作区还没有技能。","cap.skills.noneBody":"技能来自项目的 .kimi/skills 文件夹、你主目录下的技能文件夹、设置中添加的额外文件夹,以及插件。","cap.skills.manualOnly":"仅手动运行","cap.skills.open":"打开 {name}","cap.tools.search":"搜索工具","cap.tools.builtin":"内置","cap.tools.plugin":"来自插件","cap.tools.mcp":"来自 MCP 服务器","cap.tools.skill":"来自技能","cap.tools.none":"此服务器未报告工具。","st.mcp.status.notRunning":"未运行","st.mcp.fromPlugin":"来自 {name}","st.mcp.reconnect":"重新连接","st.mcp.toolsTitle":"工具","st.mcp.toolsWhenConnected":"服务器连接后才会列出工具。","st.mcp.origin":"配置于","st.mcp.emptyBody":"添加本地命令或远端 URL,为智能体提供更多工具。","st.plugins.openPage":"在「能力」页面浏览插件目录","tc.callingTool":"正在调用工具","st.section.ssh":"SSH 主机","st.purpose.ssh":"智能体可以通过 SSH 在这些机器上运行命令。","st.ssh.hostsTitle":"会话可用的 SSH 主机","st.ssh.intro":"配置智能体可连接的主机。添加主机不会主动发起连接。","st.ssh.loading":"正在加载 SSH 主机…","st.ssh.flagOff":"SSH 主机功能未开启。在下方打开「SSH 主机」后,就能管理主机并把它们加到会话里。","st.ssh.openLabs":"去开启","st.ssh.addHost":"添加主机","st.ssh.emptyTitle":"还没有 SSH 主机","st.ssh.emptyBody":"在此添加主机,或开启「始终同步 SSH 配置」。","st.ssh.group.kiki":"Kiki 主机","st.ssh.group.kikiNote":"已保存在 Kiki 中","st.ssh.group.config":"系统 SSH 配置","st.ssh.group.configNote":"外部配置","st.ssh.row.resolvedBySsh":"由 SSH 配置解析","st.ssh.row.aliasOnly":"使用别名“{alias}”","st.ssh.row.hidden":"对智能体隐藏","st.ssh.row.overrides":"覆盖外部配置","st.ssh.state.connecting":"连接中","st.ssh.state.ready":"已连接","st.ssh.state.disconnected":"未连接","st.ssh.state.failed":"连接失败","st.ssh.detail.source":"来源","st.ssh.detail.sourceKiki":"Kiki 配置","st.ssh.detail.sourceConfig":"系统 SSH 配置","st.ssh.detail.target":"目标","st.ssh.detail.targetFromConfig":"连接时运行 ssh -G {alias}","st.ssh.detail.identity":"身份文件","st.ssh.detail.roots":"工作根目录","st.ssh.detail.rootsDefault":"远端主目录","st.ssh.detail.agent":"智能体","st.ssh.detail.agentOffered":"提供给智能体","st.ssh.detail.agentHidden":"对智能体隐藏","st.ssh.detail.description":"描述","st.ssh.detail.hostKey":"主机密钥","st.ssh.detail.hostKeyPolicy":"每次连接都会与 known_hosts 核对:首次看到的密钥需要你确认指纹,密钥变更一律拒绝。","st.ssh.hostKeys.view":"查看指纹","st.ssh.hostKeys.hide":"收起指纹","st.ssh.hostKeys.reading":"正在读取这台电脑的 known_hosts 文件…","st.ssh.hostKeys.readFailed":"无法读取主机密钥记录:{detail}","st.ssh.hostKeys.refresh":"重新读取","st.ssh.hostKeys.localNote":"以下是在这台电脑的 known_hosts 文件中找到的记录;不会连接该主机。","st.ssh.hostKeys.unrecorded":"这台电脑的 known_hosts 文件中没有该主机的记录。","st.ssh.hostKeys.ambiguous":"无法根据该主机的配置确定它使用哪个 known_hosts 文件,因此没有读取记录。下面是它解析出的路径。","st.ssh.hostKeys.unavailable":"无法读取该主机的记录。","st.ssh.hostKeys.noFingerprint":"指纹不可用","st.ssh.hostKeys.copy":"复制 {algorithm} 指纹","st.ssh.hostKeys.copied":"已复制指纹。","st.ssh.hostKeys.copyFailed":"无法复制,请改为手动选中指纹文本。","st.ssh.hostKeys.status.revoked":"已吊销","st.ssh.hostKeys.status.unsupported":"无法校验","st.ssh.hostKeys.status.invalid":"公钥无法解析","st.ssh.hostKeys.reason.revoked":"该记录标记为已吊销(@revoked),匹配它的连接会被拒绝。","st.ssh.hostKeys.reason.certAuthority":"该记录信任一个证书颁发机构(@cert-authority),Kiki 无法据此校验这条主机密钥。","st.ssh.hostKeys.reason.invalidKey":"该记录中的公钥无法解析,不能用于校验连接。","st.ssh.hostKeys.file.read":"已读取","st.ssh.hostKeys.file.missing":"不存在","st.ssh.hostKeys.file.unavailable":"无法读取","st.ssh.comingSoon":"即将推出","st.ssh.edit":"编辑","st.ssh.delete":"删除主机","st.ssh.saveAsKiki":"保存为 Kiki 主机","st.ssh.disconnect":"断开连接","st.ssh.disconnected":"已断开连接。","st.ssh.writeBack":"写入 ~/.ssh/config","st.ssh.writeBackNeedsTarget":"需要主机名和用户后,才能写入 ~/.ssh/config。","st.ssh.writeBackExists":"~/.ssh/config 中已有此别名。","st.ssh.writeBackTitle":"将“{alias}”写入 ~/.ssh/config?","st.ssh.writeBackBody":"Kiki 会向文件追加一条包含此主机名、用户和端口的 Host 条目。文件中的其他内容不会改变,之后在这里的编辑也不会再次复制到文件中。","st.ssh.writtenBack":"已将“{alias}”添加到 ~/.ssh/config。","st.ssh.deleteTitle":"删除 {name}?","st.ssh.deleteBody":"从 Kiki 移除这台主机,不会改动 ~/.ssh/config 或远端机器上的文件。正在用它的会话会在下一轮失去访问。","st.ssh.deleteConfirm":"删除主机","st.ssh.deleted":"已删除 {name}。","st.ssh.configReadOnly":"在 ~/.ssh/config 中编辑这台主机,或将它保存为 Kiki 主机,然后在这里设置工作根目录和智能体访问权限。","st.ssh.discoverFailed":"无法读取 ~/.ssh/config:{detail}","st.ssh.connectionTitle":"连接","st.ssh.syncToggle":"始终同步系统 SSH 配置","st.ssh.syncHint":"系统 SSH 配置中的主机会自动同步到这里。","st.ssh.syncReading":"正在读取已保存的设置…","st.ssh.syncReadFailed":"无法读取自动同步是否开启。","st.ssh.syncSourceBase":"当前由基础配置决定,这里还没有自己的值。","st.ssh.syncSourceDefault":"尚未设置过,默认开启。","st.ssh.approvalToggle":"连接前不询问","st.ssh.approvalHint":"智能体首次在会话中使用主机时,会跳过「连接到主机」卡片。主机密钥仍会检查:新密钥仍需你确认,变更后的密钥一律拒绝。主机上的命令和文件编辑仍遵循你的权限模式。","st.ssh.form.addTitle":"添加 SSH 主机","st.ssh.form.editTitle":"编辑 {name}","st.ssh.form.overrideTitle":"将“{alias}”保存为 Kiki 主机","st.ssh.form.intro":"主机名、用户和端口留空时,沿用该别名在外部配置中的设置。","st.ssh.form.overrideHint":"保存为 Kiki 主机。原系统配置保持不变;留空字段继续沿用。","st.ssh.form.alias":"别名","st.ssh.form.aliasRequired":"输入别名。","st.ssh.form.aliasInvalid":"只能使用字母、数字、点、短横线或下划线,且必须以字母或数字开头。","st.ssh.form.name":"显示名称","st.ssh.form.namePlaceholder":"与别名相同","st.ssh.form.hostname":"主机名","st.ssh.form.hostnameInvalid":"输入不含空格的主机名或 IP 地址。","st.ssh.form.user":"用户","st.ssh.form.port":"端口","st.ssh.form.portInvalid":"端口必须在 1 到 65535 之间。","st.ssh.form.targetHint":"跳板主机与代理设置自动从外部配置继承。","st.ssh.form.identityFile":"身份文件","st.ssh.form.identityHint":"这台电脑上的路径。Kiki 只保存路径,不会保存密钥。","st.ssh.form.roots":"工作根目录","st.ssh.form.rootsHint":"每行一个绝对路径。这些目录之外的文件需要审批。留空则使用远端主目录。","st.ssh.form.rootsInvalid":"{path} 不是绝对 POSIX 路径。","st.ssh.form.description":"给智能体的描述","st.ssh.form.descriptionPlaceholder":"GPU 训练机","st.ssh.form.offered":"提供给智能体","st.ssh.form.offeredHint":"隐藏的主机仍可由你添加到会话。","st.ssh.form.signIn":"已保存的登录","st.ssh.form.signInHint":"目前,Kiki 首次连接时会要求输入密码或密钥。","st.ssh.form.alwaysAsk":"在此主机上执行命令前始终询问","st.ssh.form.alwaysAskHint":"适合生产机器:无论权限模式如何都会询问。","st.ssh.form.saveChanges":"保存更改","st.ssh.form.saveOverride":"保存为 Kiki 主机","composer.addMenu.ssh":"会话可用的 SSH 主机","composer.ssh.heading":"此会话中的 SSH 主机","composer.ssh.loading":"正在加载主机…","composer.ssh.empty":"还没有配置主机。","composer.ssh.fromConfig":"来自 ~/.ssh/config","composer.ssh.temporary":"仅此会话","composer.ssh.newHost":"新建主机…","composer.ssh.manage":"管理主机","composer.ssh.removeChip":"从此会话移除“{name}”","composer.ssh.addFailed":"无法添加 {name}:{detail}","composer.ssh.removeFailed":"无法移除 {name}:{detail}","ia.ssh.title":"连接到主机","ia.ssh.promptsTitle":"登录步骤","ia.ssh.hostKeyTitle":"新主机密钥","ia.ssh.connectTo":"连接到","ia.ssh.promptsFor":"登录这台主机还需要补充信息","ia.ssh.hostKeyFor":"首次连接到","ia.ssh.user":"用户","ia.ssh.target":"解析后的目标","ia.ssh.via":"通过","ia.ssh.proxyCommand":"代理命令","ia.ssh.signInWith":"登录方式","ia.ssh.method.agent":"SSH 配置","ia.ssh.method.agentHint":"使用 ssh-agent 和 ~/.ssh/config 中指定的密钥。不会从这里发送任何内容。","ia.ssh.method.password":"密码","ia.ssh.method.keyFile":"密钥文件","ia.ssh.method.keyText":"粘贴密钥","ia.ssh.passwordFor":"“{target}”的密码","ia.ssh.keyPath":"这台电脑上的私钥文件","ia.ssh.keyText":"私钥","ia.ssh.keyTextPlaceholder":"-----BEGIN OPENSSH PRIVATE KEY-----","ia.ssh.passphrase":"密钥口令(如有)","ia.ssh.saveTo":"登录信息保存范围","ia.ssh.save.workspace":"此工作区","ia.ssh.save.global":"所有工作区","ia.ssh.save.session":"不保存","ia.ssh.save.storedHint":"保存在系统钥匙串中;没有可用钥匙串时,会保存到 ~/.kiki/credentials 下的受保护文件中。","ia.ssh.save.sessionHint":"仅用于这次连接。连接断开后,Kiki 会再次询问。","ia.ssh.afterApprove":"连接后会将主机添加到此会话。{tool} 仍会单独请求权限。","ia.ssh.approve":"连接","ia.ssh.signInConnect":"登录并连接","ia.ssh.promptsHint":"按服务器给出的提示逐项回答。验证码只发送一次,不会保存。","ia.ssh.sendAnswer":"发送","ia.ssh.cancelSignIn":"取消登录","ia.ssh.keyFirstSeen":"{algorithm} 密钥指纹","ia.ssh.keyCheckHint":"信任前,先与服务器管理员提供的指纹核对。信任后会写入 ~/.ssh/known_hosts。","ia.ssh.trustKey":"信任此主机密钥","ia.ssh.dontTrust":"不连接","ia.ssh.sent":"已发送","st.engines.title":"外部引擎","st.engines.intro":"Kiki 可以驱动的编码智能体。每个引擎有自己的工具、模型和凭据;Kiki 会直接复用这台电脑上该引擎已有的登录状态或 API key,智能体只需决定用哪个引擎运行。","st.engines.kind":"外部引擎","st.engines.statusReady":"就绪","st.engines.statusWarning":"需要处理","st.engines.statusMissing":"未找到","st.engines.statusUnknown":"尚未检查","st.engines.login.logged_in":"已登录","st.engines.login.logged_out":"已退出登录","st.engines.login.unknown":"登录状态未知","st.engines.credential.oauth_login":"复用 Claude Code CLI 的登录状态","st.engines.credential.api_key_env":"复用环境变量里的 API key","st.engines.credential.auth_token_env":"复用环境变量里的认证令牌","st.engines.credential.settings_env":"复用 Claude Code settings.json 里的 API key","st.engines.credential.api_key_helper":"复用 apiKeyHelper 提供的 API key","st.engines.credential.api_key":"Claude Code 报告的 API key","st.engines.credential.external_backend":"云厂商凭据(Bedrock、Vertex 或 Foundry)","st.engines.credential.none":"未找到任何凭据","st.engines.credential.unknown":"凭据来源未知","st.engines.check":"检查引擎","st.engines.checking":"检查中…","st.engines.checkingHint":"正在查找程序并读取它已有的凭据。","st.engines.neverChecked":"尚未检查。检查会查找程序、读取版本,并读取它已有的登录状态或 API key。","st.engines.checkedOk":"检查通过","st.engines.checkedWarning":"检查通过,但有警告","st.engines.checkedFailed":"检查失败","st.engines.program":"程序","st.engines.source":"发现途径","st.engines.protocol":"协议","st.engines.version":"版本","st.engines.versionUnknown":"未报告","st.engines.login":"登录","st.engines.loginStale":"运行检查即可读取登录状态。","st.engines.loginCommand":"登录命令","st.engines.apiKeyCommand":"API key","st.engines.loginOrKey":"Kiki 会复用这台电脑上已有的凭据,下面两条路线选一条即可。","st.engines.apiKeySettings":"Claude Code 也会读取 ~/.claude/settings.json 的 env 块里的 {env},或者 apiKeyHelper 提供的 key。Kiki 读取同一份 ~/.claude 设置,并把你的环境变量原样传给它。","st.engines.copied":"已复制","st.engines.copyCommand":"复制 {command}","st.engines.args":"默认参数","st.engines.argsNone":"无","st.engines.capabilities":"Kiki 可设置的内容","st.engines.capsDeclared":"来自引擎配置。Kiki 目前还不会从运行中的引擎读取能力。","st.engines.capsNegotiated":"最后一行是引擎上次启动时报告的能力,其余来自引擎配置。","st.engines.cap.handshake":"引擎报告","st.engines.cap.handshakeNone":"没有可选能力","st.antigravity.program":"Antigravity ACP CLI","st.antigravity.ideFound":"找到的是 Antigravity IDE,不是 ACP CLI。IDE 不能运行会话,请在下面安装 CLI。","st.antigravity.otherVersion":"安装其他 1.x 版本","st.antigravity.activeVersion":"正在使用 {version}","st.antigravity.programBody":"Kiki 会把 Google 的 ACP CLI {version} 下载到自己的工具目录。Antigravity IDE 是另一个程序,不能运行会话。","st.antigravity.programBodyShort":"Kiki 会把 Google 的 ACP CLI {version} 下载到自己的工具目录。","st.antigravity.inUse":"使用中","st.antigravity.activate":"使用此版本","st.antigravity.activating":"切换中…","st.antigravity.install":"安装 {version}","st.antigravity.installing":"下载中…","st.antigravity.progress.label":"安装 ACP CLI {version} 的进度","st.antigravity.progress.starting":"正在连接下载服务器…","st.antigravity.progress.downloading":"正在下载 {received} / {total}","st.antigravity.progress.downloadingUnknown":"已下载 {received}","st.antigravity.progress.extracting":"正在解包…","st.antigravity.progress.activating":"正在启用…","st.antigravity.installThis":"安装","st.antigravity.versionLabel":"要安装的版本","st.antigravity.versionInvalid":"请输入 1.x 版本号,例如 1.2.1。","st.antigravity.installFailed":"ACP CLI 安装失败:{detail}。请检查网络后重试。","st.antigravity.installTimedOut":"下载超过 10 分钟仍未完成,已停止。请检查网络后重试。","st.antigravity.signIn":"Google 登录","st.antigravity.signInBody":"会在浏览器里打开 Google。允许访问后,浏览器会跳到一个打不开的本地地址——把这个地址复制回来粘贴到这里。","st.antigravity.account":"账号类型","st.antigravity.personal":"个人","st.antigravity.business":"企业","st.antigravity.signInWithGoogle":"用 Google 登录","st.antigravity.stepOpen":"在 Google 页面上允许访问。","st.antigravity.openAgain":"重新打开","st.antigravity.stepPaste":"复制浏览器最后停留的地址(以 {address} 开头),粘贴到下面。","st.antigravity.openFailed":"浏览器没有打开。请允许弹出窗口,或点「重新打开」。","st.antigravity.pasteLabel":"浏览器里的地址","st.antigravity.finish":"完成登录","st.antigravity.finishing":"登录中…","st.antigravity.cancel":"取消登录","st.antigravity.expiresIn":"本次登录还剩 {time}。","st.antigravity.expired":"本次登录已过期。","st.antigravity.startAgain":"重新开始","st.antigravity.pasteRetry":"这个地址里没有登录码。请从浏览器复制完整地址后重新粘贴。","st.antigravity.flowEnded":"本次登录已结束,请重新开始。","st.antigravity.signInRejected":"Google 没有接受这次登录,本次登录已结束。请重新开始。","st.antigravity.signedInBody":"Antigravity 使用这个 Google 账号。","st.antigravity.signOut":"退出登录","st.antigravity.signingOut":"退出中…","st.engines.cap.prompt":"说明","st.engines.cap.steer":"轮次中的消息","st.engines.cap.model":"模型","st.engines.cap.thinking":"思考强度","st.engines.cap.permission":"权限模式","st.engines.cap.mapped":"按智能体设置","st.engines.cap.unavailable":"引擎默认","st.engines.steer.native":"发送到当前轮次","st.engines.steer.next_turn_preamble":"留到下一轮","st.engines.permission.argv":"启动参数","st.engines.permission.session_mode":"会话模式","st.engines.permission.config_option":"会话选项","st.engines.permission.turn_param":"每轮设置","st.engines.permission.none":"未声明","st.engines.permissionTrust":"可以遵循引擎自己的设置","st.engines.diagnostics":"检查详情","st.engines.install":"安装","st.engines.notFoundBody":"这台电脑上找不到 {program}。安装后再检查一次。","st.engines.integrations":"Kiki 为此引擎提供的工具","st.engines.integrationsBody":"此引擎上的主智能体可以派发 Kiki 子智能体:在它的智能体档案里打开「允许派发 Kiki 子智能体」。共享记忆和技能目前还不可用。","st.engines.configHint":"引擎在 config.toml 的 [agent_executors.<id>] 下配置。","st.engines.empty":"此服务器尚未配置外部引擎。","st.engines.loading":"正在加载引擎…","st.engines.recheck":"重新检测","st.engines.setup":"安装步骤","st.engines.stepFound":"已安装","st.engines.stepMissing":"未安装","st.engines.stepFailed":"无法运行","st.engines.stepWaiting":"完成上一步后","st.engines.stepMissingBody":"在终端里运行这条命令安装 {program},然后再检查一次。","st.engines.stepFailedBody":"找到了 {program},但它无法启动。用这条命令重新安装,然后再检查一次。","st.engines.loginUnknownBody":"Kiki 读取不到凭据。用下面的命令登录,或者设置这个引擎读取的 API key。","st.engines.defaultProfile":"这个引擎还没有现成的智能体。可以在「智能体」中把它设为某个智能体的引擎。","st.executorPrompt.title":"执行器提示词","st.executorPrompt.nativeNote":"仅在此智能体运行于外部引擎时使用。","st.executorPrompt.scope":"适用于","st.executorPrompt.scopeAll":"所有引擎","st.executorPrompt.inherits":"{engine} 使用所有引擎的设置。","st.executorPrompt.addOverride":"为 {engine} 自定义","st.executorPrompt.removeOverride":"移除 {engine} 的覆盖","st.engines.advanced":"高级","st.engines.override.hint":"只对这个引擎生效。检查与启动都用这套覆盖值。","st.engines.override.binPath":"程序路径","st.engines.override.binPathPlaceholder":"命令名、绝对路径,或 .js 入口","st.engines.override.autoDetected":"自动探测到:{value}","st.engines.override.binPathHint":"替代自动探测。.js 入口会通过 node 启动。","st.engines.override.homeDir":"配置目录({env})","st.engines.override.homeDirPlaceholder":"留空则用引擎自己的默认值","st.engines.override.homeDirHint":"会写入这个引擎的 {env}。","st.engines.override.args":"额外参数","st.engines.override.argsHint":"用空格分隔,追加在内置参数之后。","st.engines.override.env":"额外环境变量","st.engines.override.envHint":"每行一个 KEY=VALUE;写 KEY= 表示删除。已设置:{keys}","st.engines.override.envNone":"无","st.engines.override.envInvalid":"这一行不是 KEY=VALUE:「{line}」。","st.engines.override.absolute":"请用绝对路径;如果是 PATH 上的命令,直接写命令名。","st.engines.override.validate":"验证","st.engines.override.validating":"验证中…","st.engines.override.save":"保存覆盖项","st.engines.override.saving":"保存中…","st.engines.override.recheck":"保存后会重新跑一次检查。","st.executorPrompt.delivery":"传递方式","st.executorPrompt.deliveryInherit":"与所有引擎相同","st.executorPrompt.delivery.append":"追加","st.executorPrompt.delivery.replace":"替换","st.executorPrompt.delivery.preamble":"首条消息","st.executorPrompt.deliveryHint.append":"添加在引擎自己的系统提示词之后。","st.executorPrompt.deliveryHint.replace":"替代引擎自己的系统提示词。","st.executorPrompt.deliveryHint.preamble":"在每个引擎会话的第一条消息之前发送。","st.executorPrompt.supports":"{engine} 支持:{list}。","st.executorPrompt.downgrade":"{engine} 无法使用 {requested},会按 {actual} 发送。","st.executorPrompt.include":"同时发送","st.executorPrompt.groupContext":"上下文","st.executorPrompt.groupFields":"Kiki 提示词字段","st.executorPrompt.block.agents_md":"AGENTS.md","st.executorPrompt.block.memory_snapshot":"记忆快照","st.executorPrompt.block.skill_catalog":"技能目录","st.executorPrompt.block.workspace_info":"工作区信息","st.executorPrompt.block.system":"所有 system.* 字段","st.executorPrompt.block.delegation":"所有 delegation.* 字段","st.executorPrompt.fieldId":"字段 ID","st.executorPrompt.fieldIdInvalid":"使用 system.<id> 或 delegation.<id>。","st.executorPrompt.addField":"添加字段","st.executorPrompt.body":"说明","st.executorPrompt.bodyHint":"留空则发送智能体说明正文。","st.executorPrompt.append":"附加部分","st.executorPrompt.appendHint":"添加在说明之后。","st.executorPrompt.preview":"{engine} 接收的内容","st.executorPrompt.previewAs":"发送方式:{delivery}","st.executorPrompt.previewBody":"智能体说明正文","st.executorPrompt.previewOverride":"说明","st.executorPrompt.previewAppend":"附加部分","st.executorPrompt.previewResolved":"会话开始时填充","st.executorPrompt.previewEmptyBody":"智能体说明正文为空。","st.executorPrompt.previewNoText":"文本会在会话开始时解析;此服务器没有渲染预览。","st.executorPrompt.steer":"你在一轮中发送的消息会{mode}。","st.executorPrompt.steerMode.native":"发送到当前运行中的轮次","st.executorPrompt.steerMode.next_turn_preamble":"留到下一轮","st.executorPrompt.steerLimit":"提醒、目标更新和任务通知暂时不会转发给外部引擎。","st.executorPrompt.pickEngine":"选择一个外部引擎,预览它会收到的内容。","st.profiles.ignoredTitle":"{engine} 不使用","st.profiles.fieldName.pinned_model_alias":"模型","st.profiles.fieldName.thinking_effort":"思考强度","st.profiles.fieldName.tools":"工具","st.profiles.fieldName.disallowed_tools":"禁用工具","st.profiles.fieldName.service_tier":"服务等级","st.profiles.fieldName.request_params":"请求参数","st.profiles.fieldName.context_budget":"上下文预算","st.profiles.fieldName.auto_compact":"自动压缩","st.profiles.fieldName.max_completion_tokens":"输出上限","transcript.exec.degradedNote":"部分记录","transcript.exec.delivery.native":"说明以引擎原生方式发送","transcript.exec.delivery.system_prompt_override":"说明替换了引擎提示词","transcript.exec.delivery.developer_instructions":"说明以开发者说明的形式发送","transcript.exec.delivery.base_instructions":"说明替换了引擎基础提示词","transcript.exec.delivery.first_prompt_preamble":"说明随第一条消息发送","transcript.exec.hint.delivered.native_steer":"消息已在本轮送达引擎","transcript.exec.hint.delivered.next_turn_preamble":"消息已随下一轮发送给引擎","transcript.exec.hint.queued":"消息在等引擎的下一轮","transcript.exec.hint.undelivered":"消息未送达引擎","transcript.exec.compacted":"引擎已压缩上下文","transcript.exec.turnDiff":"本轮改动","transcript.exec.turnDiffFiles":"{count} 个文件","transcript.exec.unknownUpdate":"引擎发送了 Kiki 无法显示的更新","st.executorPrompt.overrideNote":"覆盖设置有自己的区块列表;对所有引擎的更改不会影响它。","st.profiles.fieldsAfterSave":"保存后查看 {engine} 使用的设置。","st.profiles.fieldValueSet":"已在此文件中设置","st.profiles.problem.executorPrompt":"执行器提示词字段 ID 不是 system.* 或 delegation.* ID。","transcript.loss.codex_no_step_boundaries":"Codex 没有报告步骤边界,因此本轮显示为一个步骤","transcript.loss.prompt_delivery_downgraded":"引擎无法按要求传递提示词,因此改用了回退方式","transcript.loss.user_message_attribution_missing":"部分用户消息无法匹配到提示词","transcript.loss.permission_mode_unverified":"引擎未确认权限模式","transcript.loss.additional_directories_dropped":"额外的工作区文件夹未传给引擎","transcript.loss.thought_level_unconfigured":"引擎没有思考强度设置,因此使用了默认值","st.section.notifications":"通知与消息","st.purpose.notifications":"工作完成或有问题等待回答时,推送到手机或团队群。","st.notify.rulesTitle":"通知规则","st.notify.enabled":"发送通知","st.notify.enabledHint":"下方所有通道的总开关,默认开启。","st.notify.viewing":"正在查看的会话不提醒","st.notify.viewingHint":"会话正在你面前打开时,不发送通知。","st.notify.minWork":"跳过短任务","st.notify.minWorkHint":"短于该时长的一轮工作不发送完成通知,默认 60 秒。","st.notify.seconds":"秒","st.notify.minWorkInvalid":"请输入 0 到 86400 之间的整数秒。","st.notify.quiet":"免打扰时段","st.notify.quietHint":"该时段内要发送的通知会等到时段结束后再发。","st.notify.quietFrom":"开始","st.notify.quietTo":"结束","st.notify.quietZone":"时区","st.notify.timeInvalid":"请使用 24 小时制,例如 22:00。","st.notify.privacyLabel":"发送内容","st.notify.privacy":"只说明发生了什么,例如“一轮工作已完成”。会话标题、问题内容和文件路径不会离开这台电脑。","st.notify.runtimeLabel":"何时送达","st.notify.runtime.tray":"关闭窗口后 Kiki 留在托盘,通知照常发送;退出 Kiki 后停止发送。","st.notify.runtime.quit":"关闭窗口即退出 Kiki,重新打开前不会发送通知。","st.notify.runtime.browser":"通知由后台服务直接发送,页面关闭不影响送达。","st.notify.loadFailed":"无法加载通知设置:{detail}","st.notify.channelsTitle":"通道","st.notify.emptyTitle":"还没有通道","st.notify.emptyBody":"添加一个通道,工作完成或有问题等待回答时,会在 Telegram、企业微信或 webhook 收到提醒。","st.notify.expandAria":"{name} 的设置","st.notify.channelToggle":"启用 {name}","st.notify.sendOnly":"仅发送","st.notify.unverified":"待发送验证","st.notify.unverifiedHint":"发送一条测试通知以确认送达。","st.notify.state.dependency":"未就绪","st.notify.state.connection":"连接失败","st.notify.state.unauthorized":"未获授权","st.notify.state.ok":"已连通","st.notify.state.noCredential":"缺少凭据","st.notify.reason.desktop_host_unavailable":"当前环境暂不支持系统通知。","st.notify.reason.adapter_not_installed":"推送服务组件未安装。","st.notify.reason.unknown":"缺少必需的组件。","st.notify.name":"名称","st.notify.nameHint":"只在此列表中显示。","st.notify.connection":"连接","st.notify.connectionShared.one":"与另外 1 个通道共用,这里的修改对两者都生效。","st.notify.connectionShared.other":"与另外 {n} 个通道共用,这里的修改对它们都生效。","st.notify.target":"目标","st.notify.scenes":"何时提醒","st.notify.scene.work_complete":"一轮工作完成","st.notify.scene.question_pending":"有问题等待回答","st.notify.check":"检查凭据","st.notify.checking":"正在检查…","st.notify.test":"发送测试通知","st.notify.testing":"正在发送…","st.notify.check.ok":"{provider} 已接受该凭据。","st.notify.check.requiresTest":"请发送一条测试通知以验证连通性。","st.notify.check.unauthorized":"{provider} 拒绝了该凭据,请替换后再检查。","st.notify.check.connection":"无法连接 {provider},请检查网络后重试。","st.notify.test.accepted":"{provider} 已接收测试通知。","st.notify.test.queued":"测试通知已排队。","st.notify.test.failed":"测试通知发送失败:{reason}。","st.notify.lastSent":"最近发送","st.notify.lastError":"最近错误","st.notify.never":"尚未发送","st.notify.deliveries":"投递记录","st.notify.deliveriesEmpty":"还没有投递记录。","st.notify.attempt":"第 {n} 次","st.notify.delivery.queued":"排队中","st.notify.delivery.sending":"发送中","st.notify.delivery.accepted_by_provider":"已接收","st.notify.delivery.suppressed":"已跳过","st.notify.delivery.failed":"失败","st.notify.delivery.expired":"已过期","st.notify.delivery.unknown":"结果未知","st.notify.delivery.cancelled":"已取消","st.notify.error.auth":"凭据被拒绝","st.notify.error.forbidden":"没有该目标的权限","st.notify.error.not_found":"找不到目标","st.notify.error.rate_limited":"被平台限流","st.notify.error.transient":"网络不可用","st.notify.error.too_long":"消息过长","st.notify.error.bad_format":"消息格式被拒绝","st.notify.error.dependency_missing":"缺少必需的组件","st.notify.error.configuration":"配置不完整","st.notify.error.protocol":"平台返回了意外的响应","st.notify.error.unknown":"未知错误","st.notify.remove":"移除通道","st.notify.removeTitle":"移除 {name}?","st.notify.removeBody":"此通道将不再收到通知。","st.notify.removeConnection":"它的连接和已保存的凭据也会一并删除。","st.notify.removeKeepConnection":"共用的连接会保留给其他通道。","st.notify.fieldRequired":"请填写{field}。","st.notify.optional":"可选","st.notify.addTitle":"添加通道","st.notify.choose":"选择内置通道","st.notify.add":"添加通道","st.notify.provider":"通道类型","st.notify.newConnection":"新建连接","st.notify.unavailableTitle":"暂不可用","st.notify.addFailed":"无法添加通道:{detail}","st.notify.provider.telegram":"Telegram","st.notify.provider.wecom_webhook":"企业微信群机器人","st.notify.provider.discord_webhook":"Discord webhook","st.notify.provider.slack_webhook":"Slack webhook","st.notify.provider.dingtalk_webhook":"钉钉群机器人","st.notify.provider.feishu_webhook":"飞书群机器人","st.notify.provider.http":"HTTP webhook","st.notify.provider.windows_toast":"Windows 系统通知","st.notify.provider.smtp":"邮件(SMTP)","st.notify.provider.matrix":"Matrix","st.notify.provider.script":"脚本","st.notify.field.botToken":"Bot token","st.notify.field.webhookKey":"Webhook key","st.notify.field.webhookId":"Webhook ID","st.notify.field.webhookToken":"Webhook token","st.notify.field.webhookPath":"Webhook 路径","st.notify.field.signingSecret":"加签密钥","st.notify.field.endpoint":"接口地址","st.notify.field.format":"请求体格式","st.notify.field.bearerToken":"Bearer token","st.notify.field.privatePath":"私密路径","st.notify.field.chatId":"Chat ID","st.notify.field.topicId":"Topic ID","st.notify.field.keyword":"关键词","st.notify.field.privateGrant":"私网地址授权","st.notify.field.privateGrantHint":"允许一个精确私网地址的 JSON 对象。公网地址留空即可。","st.notify.advanced":"高级","st.notify.jsonInvalid":'请输入 JSON 对象,例如 {"host": "10.0.0.5"}。',"st.section.spaces":"空间","st.purpose.spaces":"每个空间有自己的对话、记忆和工作区。设置和账号默认沿用主空间,在空间里改了哪项就只在那个空间生效。","st.spaces.windowTitle":"窗口","st.spaces.windowSwitch":"一个窗口,在空间之间切换","st.spaces.windowSwitchDesc":"推荐。切换时,其他空间里正在运行的任务不会中断。","st.spaces.windowWindows":"每个空间一个窗口","st.spaces.windowWindowsDesc":"每个空间有自己的窗口、任务栏按钮和托盘图标。","st.spaces.windowNextLaunch":"下次启动 Kiki 时生效。","st.spaces.windowPending":"重启 Kiki 后改用此方式。","st.spaces.windowBrowserHint":"窗口方式在 Kiki 桌面应用里设置。","st.spaces.windowSubHint":"窗口方式在主空间里设置。","st.spaces.listTitle":"空间","st.spaces.new":"新建空间","st.spaces.attach":"添加已有空间…","st.spaces.main":"主空间","st.spaces.current":"当前","st.spaces.running":"运行中","st.spaces.notStarted":"未启动","st.spaces.open":"打开","st.spaces.switch":"切换","st.spaces.pending.one":"1 项待处理","st.spaces.pending.other":"{count} 项待处理","st.spaces.credSharedShort":"共享账号","st.spaces.credIsolatedShort":"独立账号","st.spaces.menuAria":"{name} 的更多操作","st.spaces.reveal":"在文件管理器中显示","st.spaces.credentials":"账号与密钥…","st.spaces.removeFromList":"从列表移除","st.spaces.delete":"删除空间…","st.spaces.emptyTitle":"目前只有主空间","st.spaces.emptyBody":"新建一个空间,把某个项目的对话、记忆和工作区分开存放。它沿用主空间的设置和账号,在空间里做的修改只留在空间里。","st.spaces.loading":"正在读取空间…","st.spaces.subManageHint":"空间在主空间里新建和移除。","st.spaces.switchToMain":"切到主空间","st.spaces.switchFailed":"无法打开 {name},仍停留在当前空间。","st.spaces.desktopOnly":"打开其他空间需要 Kiki 桌面应用。","st.spaces.removed":"已不再列出 {name},它的文件夹没有改动。","st.spaces.removeTitle":"从列表移除 {name}?","st.spaces.removeBody":"Kiki 不再显示这个空间。文件夹和里面的内容都保留在磁盘上,之后可以用“添加已有空间”加回来。","st.spaces.deleteTitle":"删除 {name}?","st.spaces.deleteBody":"将删除下面这个文件夹及其中的全部内容:该空间的对话、记忆、设置和保存的密钥。此操作无法撤销。","st.spaces.deleteKeepHint":"想保留文件,请改用“从列表移除”。","st.spaces.deleteTypeLabel":"输入 {name} 以确认","st.spaces.deleteConfirm":"删除空间及文件","st.spaces.deleteDisabledCurrent":"当前窗口正在使用这个空间,请先切到其他空间。","st.spaces.deleteDisabledBusy":"这个空间里有会话正在运行,请等它们结束。","st.spaces.deleteDisabledOpen":"这个空间正在运行,请先关闭它的窗口或等它停止。","st.spaces.deleted":"已删除 {name} 及其文件夹。","st.spaces.createShortcut":"创建桌面快捷方式","st.spaces.creatingShortcut":"正在创建…","st.spaces.shortcutCreated":"已在桌面创建快捷方式:{path}","st.spaces.shortcutExists":"桌面快捷方式已存在,未覆盖。","st.spaces.shortcutWindowsOnly":"桌面快捷方式目前仅支持 Windows。","st.spaces.shortcutInvalidSpace":"空间无效或路径不正确。","st.spaces.shortcutDesktopUnavailable":"找不到 Windows 桌面目录。","st.spaces.shortcutExecutableUnavailable":"找不到应用程序可执行文件。","st.spaces.shortcutFailed":"创建桌面快捷方式失败:{detail}","st.spaces.createTitle":"新建空间","st.spaces.name":"名称","st.spaces.color":"颜色","st.spaces.colorOption":"颜色 {n}","st.spaces.location":"位置","st.spaces.browse":"浏览…","st.spaces.locationHint":"一个新的或空的文件夹。建议:{path}","st.spaces.inheritMore":"这个空间从主空间继承什么","st.spaces.inheritHeading":"从主空间继承","st.spaces.inh.config":"设置(模型、工具、权限…)","st.spaces.inh.credentials":"账号与密钥","st.spaces.inh.agents":"Agent 与 SYSTEM.md","st.spaces.inh.instructions":"AGENTS.md","st.spaces.inh.skills":"技能与命令","st.spaces.inh.mcp":"MCP 服务器","st.spaces.inh.appearance":"外观(主题文件)","st.spaces.inh.plugins":"插件","st.spaces.inh.genericRoots":"~/.agents 通用目录","st.spaces.choice.inherit":"继承","st.spaces.choice.none":"不要","st.spaces.choice.shared":"共享","st.spaces.choice.isolated":"独立","st.spaces.choice.stack":"叠加","st.spaces.choice.visible":"可见","st.spaces.choice.hidden":"隐藏","st.spaces.alwaysSeparate":"对话、记忆、搜索、任务板和工作区始终独立。","st.spaces.createAndOpen":"创建并打开","st.spaces.create":"创建空间","st.spaces.nameRequired":"给空间起个名字。","st.spaces.pathRequired":"请输入文件夹的完整路径。","st.spaces.created":"已创建 {name}。","st.spaces.attachTitle":"添加已有空间","st.spaces.attachBody":"选择一个由此主空间创建过的空间文件夹。不会改动里面的任何内容。","st.spaces.attachConfirm":"添加空间","st.spaces.attached":"已添加 {name}。","st.spaces.credTitle":"账号与密钥","st.spaces.credShared":"与主空间共享","st.spaces.credIsolated":"本空间独立","st.spaces.credSharedDesc":"登录、API Key 和 SSH 密码都来自主空间。","st.spaces.credIsolatedDesc":"本空间自己登录、自己保存密钥。","st.spaces.credDialogTitle":"账号与密钥 · {name}","st.spaces.credToIsolatedNote":"切换后,{name} 需要重新登录或填写自己的 API Key。","st.spaces.copySsh":"把已保存的 SSH 密码复制到 {name}","st.spaces.copySshHint":"空间里的主机只有与主空间属于同一工作区时,才会用上复制过去的密码。","st.spaces.copyCount.one":"已选 1 台主机","st.spaces.copyCount.other":"已选 {count} 台主机","st.spaces.copySshAll":"全选","st.spaces.copySshNone":"主空间里没有保存了密码或私钥口令的 SSH 主机。","st.spaces.copySshLoading":"正在查找已保存的 SSH 密码…","st.spaces.kind.password":"密码","st.spaces.kind.passphrase":"私钥口令","st.spaces.credToSharedNote":"{name} 里单独保存的登录、SSH 条目和本地 API Key 覆盖都会留在该空间,不会写回主空间。共享期间,它自己的 SSH 条目会被忽略。","st.spaces.credSwitchToIsolated":"切换为独立","st.spaces.credSwitchToShared":"切换为共享","st.spaces.credDoneIsolated":"{name} 现在单独保存账号与密钥。","st.spaces.credDoneShared":"{name} 现在与主空间共享账号与密钥。","st.spaces.copiedSsh.one":"已复制 1 条 SSH 凭据。","st.spaces.copiedSsh.other":"已复制 {count} 条 SSH 凭据。","st.spaces.retainedSsh.one":"保留了 1 条本空间 SSH 条目。","st.spaces.retainedSsh.other":"保留了 {count} 条本空间 SSH 条目。","st.spaces.restartRequired":"{name} 的任务结束后重启该空间才生效。","st.spaces.credChangeFromMain":"要更改,请切到主空间,在这个空间的“账号与密钥”里切换。","st.spaces.copySshHere":"复制 SSH 密码…","st.spaces.copySshHereTitle":"把 SSH 密码复制到本空间","st.spaces.copySshHereBody":"为选中的主机复制主空间保存的密码或私钥口令,本空间改为独立账号后它们仍能连接。","st.spaces.copySshHereConfirm":"复制密码","st.spaces.copySshNoHosts":"这个空间里没有 Kiki SSH 主机。","st.spaces.restartSpace":"重启空间","st.spaces.restartHint":"在主空间里改过?等本空间的任务结束后重启它,改动才会生效。","st.spaces.restartConfirmTitle":"重启 {name}?","st.spaces.restartConfirmBody":"这个空间里正在运行的会话会被中断。","st.spaces.overridesTitle":"本空间改过的设置","st.spaces.overridesHint":"其余设置都沿用主空间。","st.spaces.overridesEmpty":"还没有改过任何设置,全部沿用主空间。","st.spaces.inheritGroupsNote":"主空间的技能、插件和主题文件在这里同样可用,暂不逐项标注来源。","st.spaces.band":"当前:{name}","st.origin.inherited":"继承自主空间","st.origin.local":"本空间","st.origin.env":"由环境变量设置","st.origin.restore":"恢复继承","st.origin.restoreAria":"让 {name} 恢复为主空间的值","st.origin.restored":"{name} 已恢复沿用主空间。","agentPanel.sourceId.inherited":"主空间","sidebar.space.switcherAria":"切换空间","sidebar.space.menuTitle":"切换空间","sidebar.space.manage":"管理空间…","sidebar.space.otherPending.one":"其他空间有 1 个会话需要你处理","sidebar.space.otherPending.other":"其他空间有 {count} 个会话需要你处理","sidebar.space.openWindow":"在新窗口打开","sidebar.space.starting":"正在启动 {name}…","sidebar.space.new":"新建空间…","sidebar.space.singleHint":"把某个项目的对话、记忆和工作区分开存放。","sidebar.space.remoteTag":"远端","sidebar.space.remoteBody":"已连接远端 Kiki「{name}」。空间切换只在本机进行。","sidebar.space.backToLocal":"切回本机","sidebar.space.groupLocal":"本机","sidebar.space.groupRemote":"远端 Kiki","sidebar.space.remoteKiki":"远端 Kiki","sidebar.space.remoteAsOf":"截至 {time}","sidebar.space.remoteNever":"从未连接","sidebar.space.remoteBusy":"{count} 个进行中","sidebar.space.remoteNeedsYou":"{count} 个在等你","sidebar.space.remoteFailed":"打不开 {name}。","sidebar.space.backFailed":"没能切回本机空间。","st.ssh.asRemoteSpace":"添加为远端空间","st.ssh.remoteAdded":"已添加 {name},它现在就是切换器里的一个空间。","st.ssh.remote.addTitle":"通过 SSH 添加远端 Kiki","st.ssh.remote.addBody":"使用你已能通过 SSH 到达的 Kiki。连接由这台 Kiki 持有;对方机器只需在运行并允许它。","st.ssh.remote.profileField":"SSH 配置","st.ssh.remote.profileHint":"你在「SSH 主机」里已保存的配置。不会安装任何东西,也不会开放端口。","st.ssh.remote.planTitle":"这一步会做什么","st.ssh.remote.planning":"正在询问对方机器…","st.ssh.remote.state.attach":"那台 Kiki 已经在运行。这一步只是接入,不会启动任何东西。","st.ssh.remote.state.ensure":"那台 Kiki 还没有运行。这一步会启动它并连上去。","st.ssh.remote.state.ready":"那台 Kiki 已在运行且可达。这一步只是接入。","st.ssh.remote.targetPending":"还不知道远端 Kiki 的身份。","st.ssh.remote.effects.attach":"接入那台已经在运行的 Kiki。","st.ssh.remote.effects.start":"如果没在运行,就启动远端 Kiki。","st.ssh.remote.lifetime.existing":"那边的服务保持它原有的存活方式。","st.ssh.remote.lifetime.untilStop":"那边的服务会在后台一直运行,直到被明确停止;关掉本窗口也一样。","st.ssh.remote.gateNote":"连上并不等于开放入站:那台 Kiki 仍需自己允许其他 Kiki,并单独允许这一台。","st.ssh.remote.enableInbound":"同时请对方也允许这台 Kiki","st.ssh.remote.enableInboundHint":"把请求发给对方 Kiki,请它允许这一台;在对方 owner 同意之前不会生效。","st.ssh.remote.working":"处理中…","st.ssh.remote.start":"启动并添加","st.ssh.remote.attachAction":"接入并添加","st.remote.outboundTitle":"我连接的 Kiki","st.remote.diagnostics":"连接诊断","st.remote.loading":"正在读取这台 Kiki 的连接…","st.remote.controlUnavailable":"本机控制连接还没就绪。","st.remote.configures":"正在配置这台 Kiki:{origin} · home {home}","st.remote.configuresNoHome":"正在配置这台 Kiki:{origin}","st.remote.way.url":"用地址添加","st.remote.way.ssh":"通过 SSH","st.remote.way.sshNoHosts":"这个 Kiki 可以通过 SSH 连到另一个 Kiki,但这里还没有保存 SSH 主机。","st.remote.way.sshOpenHosts":"前去添加一个。","st.remote.add":"添加连接","st.remote.adding":"正在添加…","st.remote.added":"已添加 {name}。","st.remote.addTitle":"添加远端 Kiki","st.remote.addBody":"先请对方 Kiki 的 owner 允许这台 Kiki,再把对方发回的邀请贴进来。邀请里带着要连接的 Kiki 身份,地址和 owner token 由你填写。","st.remote.emptyTitle":"还没有远端 Kiki","st.remote.emptyBody":"把本机 Kiki 的身份发给对方 owner,等对方允许这台 Kiki 并发来邀请后,在这里添加连接。","st.remote.invitation":"邀请","st.remote.invitationHint":"把对方 Kiki 的整段邀请贴进来。里面带着对方真实身份,不需要手填任何 id。","st.remote.invitationPlaceholder":"对方 Kiki 发来的邀请","st.remote.invitationNamed":"对方把本机叫作「{name}」","st.remote.targetLine":"home {home} · host {host}","st.remote.labelField":"名称","st.remote.label.required":"给这条连接起个名字。","st.remote.label.tooLong":"名称请控制在 128 字以内。","st.remote.endpointField":"地址","st.remote.endpointHint":"对方 Kiki 的地址:走网络用 https://,本机可用 http://。","st.remote.endpoint.required":"请填写对方 Kiki 的地址。","st.remote.endpoint.invalid":"请填写完整的 http:// 或 https:// 地址,不要带路径、查询或凭据。","st.remote.endpoint.tls":"不在本机的 Kiki 请用 https://。","st.remote.tokenField":"Owner token","st.remote.tokenHint":"对方 Kiki 的 owner 给你的 token","st.remote.tokenStored":"由本机 Kiki 的连接层保存,不会留在本窗口或其浏览器存储里。","st.remote.background":"保留后台摘要","st.remote.backgroundHint":"只取对方 Kiki 的进行中与待处理线程数,本窗口不必加载它的任何线程就能显示这些状态。","st.remote.menuAria":"到 {name} 的连接","st.remote.retry":"重新连接","st.remote.retried":"已重新连接 {name}。","st.remote.enable":"启用","st.remote.disable":"停用","st.remote.enabled":"已启用 {name}。","st.remote.disabled":"已停用 {name}。","st.remote.blocked.disabled":"这条连接已停用。","st.remote.removeTitle":"移除 {name}?","st.remote.removeBody":"这会停止本窗口对它的连接并忘掉已保存的 token。不会关掉对方的 Kiki,也不改对方的设置。","st.remote.removeConfirm":"移除连接","st.remote.removed":"已移除 {name}。","st.remote.enter":"切过去","st.remote.bridgeOnly":"仅供线程消息。对方 owner 还需另外允许浏览,之后才能在这里打开。","st.remote.purpose.gui":"浏览与对话","st.remote.purpose.bridge":"线程消息","st.remote.state.online":"已连接","st.remote.state.offline":"离线","st.remote.state.authentication_required":"等待批准","st.remote.state.identity_changed":"响应的不是同一台 Kiki","st.remote.state.disabled":"已停用","st.remote.asOf":"截至 {time}","st.remote.lastConnected":"上次连接 {time}","st.remote.busy":"{count} 个进行中","st.remote.needsYou":"{count} 个在等你","st.remote.identityTitle":"本机 Kiki 的身份","st.remote.identityBody":"发给对方 owner,让对方把本机加进允许清单。里面不含 token。","st.remote.identityCopy":"复制身份","st.remote.identityCopied":"身份已复制","st.remote.copyFailed":"复制失败:{reason}","st.remote.paste.invitationOnly":"这只是邀请码。请复制对方 Kiki 的整段邀请,里面还带着对应的 Kiki 身份。","st.remote.paste.targetMissing":"这段邀请没有说明对应的 Kiki。请复制对方 Kiki 的整段邀请。","st.remote.paste.invalid":"这段内容读不出是另一台 Kiki 的邀请。","st.remote.paste.notInvitation":"这不是另一台 Kiki 的邀请。","st.remote.paste.notIdentity":"这不是 Kiki 身份信息。","st.remote.fail.inboundDisabled":"对方 Kiki 现在不接受其他 Kiki。需要它的 owner 先允许这一台。","st.remote.fail.devRuntime":"对方 Kiki 以跳过认证的方式运行,因此无法接受其他 Kiki。","st.remote.fail.invitation":"邀请没有被接受。可能已过期或已被用过,请重新要一个。","st.remote.fail.identity":"该地址响应的 Kiki 与邀请所指的不是同一台。没有保存任何内容。","st.remote.fail.notApproved":"对方 Kiki 没有接受这条连接,可能已被其 owner 撤销。","st.remote.fail.handshake":"该地址没有用这个 owner token 响应成 Kiki。","st.remote.fail.token":"对方 Kiki 拒绝了该 owner token。","st.remote.fail.disabled":"这条连接已停用。","st.remote.fail.paused":"这条连接已暂停。可以重新连接,或请对方 owner 重新允许。","st.remote.fail.guiRequired":"这条连接登记的是线程消息用途,不是浏览用途。","st.remote.fail.ownerOnly":"这只有该 Kiki 的 owner 本人能做。","st.remote.fail.grantGone":"那条允许记录已经不存在了。","st.inbound.title":"允许连接我的 Kiki","st.inbound.gate":"允许其他 Kiki 连接","st.inbound.gateHint":"默认关闭。范围包括本机的其他空间。只开这个开关并不放行任何人:每个 Kiki 还需要下面单独有一行。","st.inbound.devRuntime":"当前运行形态跳过了认证,无法接受其他 Kiki。已保存的设置和下面的允许清单都原样保留。","st.inbound.configuredOnly":"已保存为开启,但目前没有生效。","st.inbound.listTitle":"已允许的 Kiki","st.inbound.invite":"邀请一个 Kiki","st.inbound.inviting":"正在生成…","st.inbound.inviteNeedsGate":"请先打开上面的开关,再生成邀请。","st.inbound.inviteUnavailable":"当前运行形态无法接受其他 Kiki,这里不能生成邀请。","st.inbound.emptyTitle":"还没有允许任何 Kiki","st.inbound.emptyBody":"邀请一个 Kiki 并把邀请发给它的 owner;对方把这台 Kiki 加成连接后才会生效。","st.inbound.status.invited":"已邀请","st.inbound.status.approved":"已允许","st.inbound.status.revoked":"已撤销","st.inbound.sourceLine":"home {home} · host {host}","st.inbound.neverConnected":"从未连接","st.inbound.active":"当前 {count} 条连接","st.inbound.revoke":"撤销","st.inbound.revokeTitle":"撤销 {name} 的访问权限?","st.inbound.revokeBody":"它正在进行的流会中断,也不能再用那个邀请连接。不影响其他 Kiki。","st.inbound.revoked":"已撤销 {name} 的访问权限。","st.inbound.bridgeNote":"线程消息权限另行授予。这里的每一行只允许浏览与对话。","st.inbound.inviteTitle":"邀请一个 Kiki 连接","st.inbound.inviteBody":"把对方 Kiki 的 owner 复制给你的身份贴进来。这样允许清单里记的是真实 Kiki,而不只是一个名字。","st.inbound.sourceField":"对方 Kiki 的身份","st.inbound.sourceHint":"对方 owner 可以在「设置 → 空间 → 我连接的 Kiki」里复制给你。","st.inbound.sourcePlaceholder":"对方 Kiki 发来的身份信息","st.inbound.nameField":"给对方的名字","st.inbound.expiry":"邀请有效期","st.inbound.expiry.tenMinutes":"10 分钟","st.inbound.expiry.thirtyMinutes":"30 分钟","st.inbound.expiry.oneHour":"1 小时","st.inbound.expiryHint":"过期后该邀请不能再用,需要重新生成。","st.inbound.invitationTitle":"{name} 的邀请","st.inbound.invitationBody":"把这段发给 {name} 的 owner。","st.inbound.invitationLabel":"邀请","st.inbound.invitationCopy":"复制邀请","st.inbound.invitationCopied":"邀请已复制","st.inbound.invitationOnce":"只显示一次,也不会保存到任何地方。若不慎丢失,请撤销这一行并重新生成邀请。","st.inbound.invitationDone":"完成","st.web.title":"Web 访问","st.web.hint":"在另一台设备上用浏览器打开这台 Kiki。","st.web.powers":"拿到链接的人可以完整使用这台 Kiki,权限和你相同。","st.web.off":"现在没有浏览器能连到这台 Kiki。","st.web.temporary":"临时","st.web.persistent":"始终开启","st.web.modeTemporary":"开一段时间,之后自己关闭","st.web.modePersistent":"一直开着,直到你手动关闭","st.web.startTemporary":"临时开启","st.web.startPersistent":"设为始终开启","st.web.enabling":"开启中…","st.web.opened":"Web 访问已开启。拿到链接的人可以完整使用这台 Kiki。","st.web.turnOff":"关闭 Web 访问","st.web.turningOff":"关闭中…","st.web.turnedOff":"Web 访问已关闭。已经发出去的链接不再生效。","st.web.turnOffTitle":"关闭 Web 访问?","st.web.turnOffBody":"所有通过 Web 链接登录的浏览器都会断开,已经发出去的链接也会失效。这台 Kiki 对你照常运行,已经开始的任务不会被取消。","st.web.newLink":"为另一台设备生成链接","st.web.issuing":"生成中…","st.web.linkIssued":"新链接已生成。把它发给需要使用的那台设备。","st.web.openHere":"在本浏览器打开","st.web.address":"地址","st.web.addressHint":"在同一个网络里,把这个地址输进另一台设备的浏览器。","st.web.showDetails":"显示地址和选项","st.web.hideDetails":"收起地址和选项","st.web.advanced":"地址和选项","st.web.listenOn":"监听地址","st.web.listenHint":"填 0.0.0.0 才能让同一网络里的其他设备连上。保持原样则只有这台机器能用。","st.web.insecureNoTls":"允许不加密","st.web.insecureHint":"这条连接没有加密,同一网络里的其他人可能读到传输的内容。请只在你信任的网络里使用。","st.web.minutes":"{n} 分钟","st.web.hours":"{n} 小时","st.web.days":"{n} 天","st.web.expires":"{duration} 后关闭","st.web.noExpiry":"一直开着","st.web.signedIn":"已登录的浏览器","st.web.signedInNone":"还没有浏览器用过链接。","st.web.signedInCount":"当前 {count} 个","st.web.revoke":"注销","st.web.revokeTitle":"注销 {name}?","st.web.revokeBody":"这台浏览器会断开,它的链接在这里也不再生效。其他浏览器不受影响。","st.web.revokeAll":"注销所有浏览器","st.web.revokeAllTitle":"注销所有浏览器?","st.web.revokeAllBody":"所有通过 Web 链接登录的浏览器都会断开。Web 访问仍然开着,每台设备都需要新链接才能回来。","st.web.revokeAllDone":"已注销所有浏览器。Web 访问仍然开着。","st.web.revoked":"已注销{name}。","st.web.insecureLive":"这条连接没有加密,同一网络里的其他人可能读到传输的内容。","st.web.addressPending":"开启之后这里会显示地址。","st.web.linkExpires":"这个链接还可以使用 {duration}。","st.web.hostField":"监听地址","st.web.hostPlaceholder":"保持原样则只有这台机器能用","st.web.hostHint":"填 0.0.0.0 才能让同一网络里的其他设备连上。","st.web.portField":"端口","st.web.portPlaceholder":"与这台 Kiki 同一个端口","st.web.publicUrlField":"公网地址","st.web.publicUrlPlaceholder":"https://kiki.example.com","st.web.publicUrlHint":"仅在已有终结 TLS 的反向代理时填写。下面显示的是真正可达的地址。","st.web.applyAddress":"保存地址并重新开启","st.web.addressSaved":"已按新地址重新开启 Web 访问。","st.web.address.hostInvalid":"这不是一个合法的地址或主机名。","st.web.address.portInvalid":"端口需要在 1 到 65535 之间。","st.web.address.publicUrlInvalid":"请填写完整地址,例如 https://kiki.example.com,不带路径。","st.web.address.needsTls":"其他设备只能通过未加密的地址访问,除非你在下面明确允许。否则请在前面放 TLS 代理并填写它的地址。","st.web.reachableHere":"实际可达地址","st.web.signedInAs":"这个浏览器以 {name} 登录。","st.web.signedOut":"这个浏览器已注销。","st.web.signingOut":"注销中…","connect.webLinkRefused":"这个链接已经不能用了","connect.webLinkRefusedBody":"它可能已过期或已被使用过。请让这台 Kiki 的 owner 重新生成一个链接,再用新链接打开。","connect.webLinkRetargeted":"这个链接没有被打开","connect.webLinkRetargetedBody":"它同时带着另一台服务器的地址,因此没有被跟随。请按收到的原样打开这个链接。","connect.webLinkRetry":"再试一次这个链接","connect.webLinkUseConnect":"换一种方式连接","connect.webLinkHideConnect":"收起连接表单","st.web.lastUsed":"上次使用 {time}","st.web.linkTitle":"给另一台设备的链接","st.web.linkBody":"把它发给需要使用这台 Kiki 的设备。它会登录一次,之后在那台设备上保持登录。","st.web.linkLabel":"Web 链接","st.web.linkCopy":"复制链接","st.web.linkCopied":"链接已复制","st.web.linkOnce":"这个链接只显示一次。拿到它的人可以完整使用这台 Kiki。","st.web.linkDone":"完成","st.web.unavailable":"这个运行环境不支持 Web 访问。","st.web.readFailed":"读取 Web 访问状态失败。","st.web.failed":"操作没有成功。{reason}","st.away.title":"系统通知","st.away.hint":"Kiki 在后台或隐藏时弹出。点通知会打开对应会话。","st.away.enabled":"Kiki 在后台时通知我","st.away.completed":"一轮完成","st.away.failed":"一轮失败","st.away.question":"有问题等你回答","st.away.approval":"有请求等你批准","st.away.kindsLabel":"通知这些事","st.away.browserHint":"浏览器标签页无法弹出系统通知,桌面版和 VS Code 扩展可以。","away.completed.title":"已完成 · {title}","away.failed.title":"已失败 · {title}","away.question.title":"待回答 · {title}","away.approval.title":"待批准 · {title}","away.completed.body":"这一轮已跑完,打开会话查看结果。","away.failed.body":"这一轮没有跑完,打开会话查看原因。","away.question.body":"Kiki 在等你回答。","away.approval.body":"有一项操作等你批准。","away.merged.title":"Kiki · {count} 个会话","away.merged.needsYou.one":"{count} 个等你处理","away.merged.needsYou.other":"{count} 个等你处理","away.merged.finished.one":"{count} 个已跑完","away.merged.finished.other":"{count} 个已跑完","activity.markAllRead":"全部标为已读","activity.markAllReadDone":"已完成的会话已全部标为已读。","activity.badgeCount.one":"活动里有 {count} 项新内容","activity.badgeCount.other":"活动里有 {count} 项新内容","activity.inWorkspace":"在 {workspace}","activity.viewAria":"活动视图","activity.view.inbox":"待处理","activity.view.comms":"沟通","comms.title":"沟通","comms.sent":"发出","comms.received":"收到","comms.to":"发给","comms.untitled":"未命名线程","comms.deletedThread":"已删除的线程","comms.deletedRoom":"已删除的房间","comms.roomLine":"{author}:{text}","comms.archived":"已归档","comms.openWith":"与 {name} 的沟通","comms.pairTitle":"与 {name} 的沟通","comms.pairHint":"双方往来,按时间先后排列。","comms.pairEmpty":"这两个线程之间还没有消息。","comms.openThread":"打开线程","comms.showIn":"在「{name}」中查看","comms.showInConversation":"在对话中查看","comms.delivery.pending":"等待投递","comms.delivery.delivered":"已送达","comms.delivery.undeliverable":"未送达","comms.undeliverableReason":"未送达:{reason}","comms.undeliverableCount":"{count} 条未送达","comms.loadOlder":"加载更早的消息","comms.loading":"正在加载…","comms.scanning":"还在查找更早的消息。","comms.historyPreparing":"正在准备早期记录,当前显示可能不完整。","comms.historyFailed":"早期记录准备失败,当前显示可能不完整。","comms.loadFailed":"沟通记录加载失败。","comms.showAllPeers":"显示全部 {count} 个","comms.showFewer":"收起","comms.emptyTitle":"还没有线程间的消息。","comms.emptyBody":"一个线程用 ThreadSend 发给另一个线程的消息会收在这里。","comms.emptyScoped":"这个工作区里的线程还没有收发过消息。","localSessions.entry":"继续本机会话","localSessions.title":"本机的 Claude 与 Codex 会话","localSessions.intro":"这台机器上已有的会话。继续后会在 Kiki 中打开,历史仍由引擎保存。","localSessions.sourceAria":"引擎","localSessions.loading":"正在读取本机会话…","localSessions.listFailed":"读取本机会话失败:{detail}","localSessions.noEngineTitle":"没有带本机历史的引擎。","localSessions.noEngineBody":"需要先把 Claude Code 或 Codex 登记为外部引擎。","localSessions.emptyTitle":"没有找到本机会话。","localSessions.missingTitle":"这个引擎还没有历史目录。","localSessions.emptyBody":"在这台机器上用过这个引擎后,会话会出现在这里。","localSessions.truncated":"只显示最新的 {count} 个","localSessions.unreadable":"{count} 个文件无法读取","localSessions.branch":"分支会话","localSessions.pickOne":"选一个会话查看预览。","localSessions.previewLoading":"正在加载预览…","localSessions.previewFailed":"预览加载失败:{detail}","localSessions.previewEmpty":"这个会话没有可读的消息。","localSessions.partial":"部分预览,完整历史仍在引擎那里。","localSessions.role.user":"你","localSessions.role.assistant":"助手","localSessions.role.system":"系统","localSessions.block.tool":"工具调用","localSessions.block.image":"图片","localSessions.continue":"在 Kiki 中继续","localSessions.continuing":"正在打开…","localSessions.continueHint":"写下第一条消息前不会发送任何内容。","localSessions.cannotContinue":"这个会话可以预览,但不能继续。","localSessions.resumeDisabled":"这个服务器关闭了本机会话续接。","localSessions.attached":"已在 Kiki 中打开。","localSessions.alreadyAttached":"已打开之前关联的 Kiki 会话。","localSessions.error.disabled":"这个会话暂时不能继续。刷新列表后再试。","localSessions.error.locked":"另一个 Kiki 窗口正在打开这个会话,稍后再试。","localSessions.error.missing":"这个会话已不在磁盘上,请刷新列表。","localSessions.error.workspace":"它的工作目录已不可用。","localSessions.error.generic":"无法继续这个会话:{detail}","localSessions.reason.working_directory_missing":"没有记录它的工作目录。","localSessions.reason.source_identity_mismatch":"文件内容与它声明的会话不一致。","localSessions.reason.protocol_unsupported":"这种引擎连接不支持续接会话。","localSessions.reason.engine_resume_unsupported":"已安装的引擎不支持续接会话。","localSessions.reason.unknown":"这个会话不能继续。","localSessions.warning.transcript_sampled":"历史较长,只显示开头和结尾。","localSessions.warning.messages_truncated":"只显示最近的消息。","localSessions.warning.content_truncated":"部分长消息被截短。","localSessions.warning.unsupported_content":"部分内容类型未显示。","localSessions.warning.invalid_jsonl_record":"部分记录无法读取。","localSessions.warning.inherited_history_not_loaded":"不包含从更早会话继承的历史。","localSessions.warning.source_identity_mismatch":"文件内容与它声明的会话不一致。","localSessions.settingsTitle":"本机会话","localSessions.browse":"浏览会话","localSessions.settingsHint":"浏览这台机器上的 {engine} 会话,并在 Kiki 中继续。","sidebar.currentWorkspace":"当前","sidebar.groupCountOf":"{count} / {total}","sidebar.collapseAllGroups":"折叠全部工作区","sidebar.expandAllGroups":"展开全部工作区","agentPanel.notes":"工作笔记","agentPanel.notes.goal":"目标","agentPanel.notes.decided":"已决定","agentPanel.notes.rejected":"已排除","agentPanel.notes.evidence":"证据","agentPanel.notes.files":"文件","agentPanel.notes.next":"下一步","agentPanel.notes.open":"待解决","agentPanel.notes.meta":"第 {turn} 轮更新 · 第 {rev} 版","agentPanel.notes.empty":"还没有工作笔记。","agentPanel.notes.loading":"正在读取工作笔记…","agentPanel.notes.unavailable":"工作笔记暂无法读取。","agentPanel.notes.stale":"最新笔记未能读取,暂显示上次可读的版本。","agentPanel.notes.unknown":"新版笔记字段:{field}","agentPanel.notes.cleared":"工作笔记为空 · 第 {rev} 版","agentPanel.hooks":"带入规则","agentPanel.hooks.summary":"{count} 条生效","agentPanel.hooks.empty":"本轮没有生效的带入规则。","agentPanel.hooks.loading":"正在读取带入规则…","agentPanel.hooks.unavailable":"这台服务端还不支持查看带入规则。","agentPanel.hooks.loadFailed":"带入规则读取失败","agentPanel.hooks.inactive":"未生效","agentPanel.hooks.steps":"已计 {count} 步","agentPanel.hooks.nextDue":"下次第 {step} 步触发","transcript.marker.reason.notes_directives_budget":"摘要中的任务要求超过了笔记字数上限。原笔记未改动,完整内容留在接力摘要中,等待核对。","transcript.marker.reason.handoff_unreviewed":"此前的输入和接力摘要还需要与笔记核对。","transcript.fold.agents.one":"派出 {count} 个子智能体","transcript.fold.agents.other":"派出 {count} 个子智能体","transcript.fold.agentsDone.one":"{count} 个子智能体完成","transcript.fold.agentsDone.other":"{count} 个子智能体完成","transcript.media.label":"查看图片","transcript.media.count.one":"{count} 张","transcript.media.count.other":"{count} 张","transcript.media.more":"+{count}","transcript.media.aria":"智能体查看的图片:{names}","transcript.agents.dispatched.one":"派出 {count} 个子智能体","transcript.agents.dispatched.other":"派出 {count} 个子智能体","transcript.agents.progress":"{done}/{total} 完成","transcript.agents.open":"打开","transcript.agents.openAria":"打开 {name}","transcript.agentEnd.completed":"完成","transcript.agentEnd.failed":"失败","transcript.agentEnd.cancelled":"被停止","transcript.agentEnd.timedOut":"超时","transcript.agentEnd.toDispatch":"派发处 ↑","transcript.agentEnd.toDispatchTitle":"定位到派发处","transcript.agentEnd.receiptAria":"{name} 的回执","media.unavailable":"无法显示 {name}","ephemeral.newToggle":"临时对话","ephemeral.newHint":"不进历史、搜索和记忆。结束或退出 Kiki 时删除。","ephemeral.group":"临时","ephemeral.badge":"临时","ephemeral.strip":"临时对话 · 结束后删除","ephemeral.save":"保存为对话","ephemeral.saveBusy":"当前这一轮结束后才能保存。","ephemeral.saved":"已保存,现在会出现在你的对话列表里。","ephemeral.end":"结束","ephemeral.endTitle":"结束这个临时对话?","ephemeral.endBody":"它的消息和文件会被删除,无法恢复。运行中的任务和子智能体会停止。","ephemeral.endWorktree":"它的 worktree {branch} 里有未提交的改动。","ephemeral.endWorktreeKeep":"保留 worktree","ephemeral.endWorktreeRemove":"一并删除 worktree","ephemeral.endConfirm":"结束并删除","ephemeral.endFailed":"没能结束对话:{detail}","ephemeral.saveFailed":"没能保存对话:{detail}","time.durationHours":"{h}小时{m}分","time.durationDays":"{d}天 {h}小时","agentPanel.notes.directives":"用户指示","persona.title":"角色","persona.new":"新建角色","persona.import":"导入角色卡","persona.export":"导出角色卡","persona.empty":"还没有角色。新建一个,或拖入一张角色卡导入。","persona.name":"名字","persona.id":"角色 ID","persona.label":"头衔","persona.job":"职责","persona.description":"描述","persona.profile":"配置档","persona.model":"模型","persona.effort":"思考强度","persona.greeting":"开场白","persona.avatar":"头像","persona.homeWorkspace":"工作目录","persona.delivery":"默认投递方式","persona.save":"保存","persona.saved":"新对话生效 · 重建上下文","persona.rebuild":"重建上下文","persona.duplicate":"复制角色","persona.archive":"归档角色","persona.archiveTitle":"归档「{name}」?","persona.archiveCron":"归档会暂停她的定时任务。","persona.archiveNoRestart":"取消归档不会自动重启这些任务。","persona.unarchiveTitle":"取消归档「{name}」?","persona.archiveKeeps":"她的对话、记忆与文件都保留,只是从侧栏和角色列表里收起。","persona.unarchive":"取消归档","persona.delete":"删除角色","persona.deleteCron":"删除她名下的定时任务。","persona.deleteRooms":"把她移出所在房间,并归档她专属的会话。","persona.deleteMemory":"删除她的角色记忆;这一步失败可以重试。","persona.deleteKeeps":"普通会话、日常对话的历史,房间日志与项目目录都保留。","persona.importPreview":"导入预览","persona.importMemories":"将创建 {count} 条角色记忆","persona.importWarning":"角色描述会进入系统提示词。请完整阅读后再导入。","persona.importConfirm":"导入","persona.includeMemory":"附带角色记忆","persona.memory":"角色记忆","persona.choose":"选择角色","persona.none":"不使用角色","persona.switch":"换角色","persona.avatarHint":"PNG、JPG 或 WebP,最大 20 MB,上传前可裁剪","persona.nav":"角色","persona.lede":"角色决定「谁」来和你说话:名字、样子、性格和长期规则。干活的方式仍由 profile 决定。","persona.loading":"正在读取角色…","persona.loadFailed":"角色列表读取失败","persona.searchPlaceholder":"搜索名字、头衔或职责","persona.searchAria":"搜索角色","persona.noMatches":"没有匹配“{query}”的角色。","persona.showArchived":"显示已归档","persona.archivedTag":"已归档","persona.listAria":"角色列表","persona.back":"全部角色","persona.detailNone":"选一个角色查看,或新建一个。","persona.newTitle":"新角色","persona.idHint":"用于目录名和记忆路径,创建后不能修改。","persona.idInvalid":"只能用小写字母、数字和连字符,例如 lin-lan。","persona.idTaken":"这个 ID 已经被别的角色用了。","persona.nameRequired":"给角色起个名字。","persona.descriptionRequired":"写几句描述:性格、边界、长期规则。","persona.titlePlaceholder":"例如:发布协调","persona.jobPlaceholder":"一句话说明它负责什么","persona.descriptionHint":"会放进系统提示词开头,替换「我是谁」这一段。一次性任务写在消息里。","persona.greetingHint":"新对话打开时以它的名义显示,不花 token;你回复时才进入上下文。","persona.section.identity":"身份","persona.section.work":"运行","persona.profileDefault":"默认(Kiki)","persona.profileHint":"工具、权限和子智能体来自这里。角色本身不带权限。","persona.modelFollow":"跟随配置档","persona.effortFollow":"跟随模型","persona.memoryHint":"它自己的记忆总是可读;共享时还能读全局和当前工作区的记忆。","persona.frozenNotice":"修改只影响新对话;已经在进行的对话要在它自己的「角色设置」里应用一次才会更新。","persona.savedToast":"已保存「{name}」,新对话生效","persona.createdToast":"已创建「{name}」","persona.saveFailed":"保存失败:{detail}","persona.conflict":"这个角色在别处被改过了。重新载入后再保存。","persona.reload":"重新载入","persona.create":"创建角色","persona.startChat":"和它开始对话","persona.more":"更多操作","persona.duplicatedToast":"已复制为「{name}」","persona.archivedToast":"已归档「{name}」","persona.unarchivedToast":"已恢复「{name}」","persona.deletedToast":"已删除「{name}」","persona.actionFailed":"操作失败:{detail}","persona.deleteTitle":"删除「{name}」?","persona.deleteIrreversible":"删除后无法撤销。","persona.exportAs":"导出为 {format}","persona.exportedToast":"已导出 {file}","persona.avatarChange":"更换头像","persona.avatarUpload":"上传头像","persona.avatarUploaded":"头像已更新","persona.avatarTooLarge":"图片超过 20 MB。","persona.avatarType":"头像只支持 PNG、JPG 或 WebP。","persona.avatarEditTitle":"{name} 的头像","persona.avatarFrameAria":"头像取景框。拖动或用方向键移动图片,加号和减号缩放。","persona.avatarFrameHint":"拖动移动 · 滚轮或滑块缩放","persona.avatarReading":"正在打开图片…","persona.avatarReadFailed":"无法打开这张图片,换一张 PNG、JPG 或 WebP 试试。","persona.avatarZoom":"缩放","persona.avatarZoomIn":"放大","persona.avatarZoomOut":"缩小","persona.avatarShape":"形状","persona.avatarShapeSquare":"方形","persona.avatarShapeCircle":"圆形","persona.avatarSave":"使用这个头像","persona.avatarRemove":"移除头像","persona.avatarRemoved":"已移除头像","persona.avatarRemoveTitle":"移除“{name}”的头像?","persona.avatarRemoveBody":"移除后显示名字首字,之后随时可以重新上传。","persona.importPick":"选择角色卡文件","persona.importFormats":"支持 CCv3 的 .png、.json、.charx","persona.importReading":"正在读取角色卡…","persona.importFailed":"读不出这张角色卡:{detail}","persona.importBody":"将写入的描述","persona.importGreeting":"开场白","persona.importExamples":"示例对话","persona.importMemoryNone":"不会创建角色记忆","persona.importDropped":"以下字段不会导入:{fields}","persona.importIdLabel":"导入为 ID","persona.importedToast":"已导入「{name}」","persona.importMemoryPending":"已导入「{name}」,记忆还在写入","persona.importChooseOther":"换一张","persona.chipAria":"选择智能体或角色","persona.pickerManage":"管理角色","persona.chipRemove":"移除角色 {name}","persona.greetingFrom":"{name} 的开场白","persona.headerTitle":"角色:{name}","persona.memoryGroup":"角色","persona.memoryScopeAria":"角色记忆","persona.memoryIntro":"{name} 自己的记忆:和你的关系、你的口味、它的经验。其他角色看不到。","bot.title":"Bots","bot.enable":"设为 Bot","bot.settings":"Bot 设置","bot.disabled":"请先在配置中开启 Bot 模式。","bot.hide":"隐藏 Bot","bot.unhide":"显示 Bot","bot.pin":"置顶 Bot","bot.unpin":"取消置顶","bot.hiddenNotice":"隐藏不会暂停定时任务。","message.view":"消息","message.process":"过程","message.internal":"内部","message.replyDelivery":"直接回复","message.messageDelivery":"仅发送的消息","message.noReply":"{name} 没有回复 · 查看过程","message.failed":"消息未发出 · 查看过程","message.cancelled":"消息已取消 · 查看过程","message.working":"{name} 正在处理","message.typing":"{name} 正在写消息","message.reads":"读 {count} 个文件","message.commands":"跑 {count} 条命令","message.subagents":"{count} 个子智能体","message.memories":"记住 {count} 条","message.steps":"{count} 步","message.replyTo":"回复:{text}","message.openProcess":"在过程中查看","message.handoff":"{from} → {to}:{text}","message.placeholder":"给 {name} 发消息…","room.title":"房间","room.new":"创建房间","room.name":"房间名字","room.members":"成员","room.memberCountShort":"{count} 人","room.memberCount":"选择 2–6 个角色","room.host":"主持人","room.setHost":"设为主持","room.mute":"静音","room.unmute":"取消静音","room.everyone":"所有人","room.workspace":"工作区","room.budget":"{count} 条/轮","room.budgetExhausted":"讨论已暂停(本轮 {count} 条已用完)","room.continue":"继续 {count} 条","room.adjustBudget":"调整上限","room.pause":"暂停","room.paused":"讨论已暂停","room.resume":"继续讨论","room.stopAll":"停止所有","room.openProcess":"查看过程","room.openAllProcesses":"打开所有成员的过程","room.placeholder":"发到 {name}… @ 指定谁回;不 @ 交给 {host}","room.privateHandoff":"{from} 私下联系了 {to}","room.usage":"{tokens} tok · {cost}","room.queuedQuestions":"还有 {count} 个问题","message.openAttachment":"打开","message.thoughts":"想了 {count} 次","message.otherSteps":"另 {count} 步","message.openHandoff":"打开 {name} 的对话","message.readSoFar":"读了 {count} 个文件","message.ranSoFar":"跑了 {count} 条命令","message.viewSwitchAria":"时间线视图","message.deliveryLabel":"投递方式","message.deliveryMessageHint":"只有它用 SendMessage 发出的内容会送达你。","message.deliveryReplyHint":"它的普通回复直接显示给你。","message.deliveryNextTurn":"下一轮生效","message.deliverySwitchFailed":"投递方式没有切换:{detail}","bot.group":"Bot","bot.open":"打开 {name}","bot.enabledToast":"{name} 已设为 Bot","bot.enableFailed":"没有设为 Bot:{detail}","bot.updateFailed":"Bot 设置没有保存:{detail}","bot.alreadyBot":"已是 Bot","bot.openHome":"打开 Bot 对话","bot.section.identity":"身份","bot.section.work":"工作设置","bot.section.visibility":"侧栏","bot.editPersona":"在角色页编辑","bot.openMemory":"查看角色记忆","bot.workspaceDefault":"Bot 专用目录","bot.profileDefault":"默认","bot.modelFollow":"跟随配置档","bot.routinesHint":"定时任务在 Bot 的常驻会话上运行,可在「定时任务」页查看。","room.group":"房间","room.open":"打开房间 {name}","room.loadFailed":"房间读取失败","room.notFound":"这个房间不存在,可能已被删除。","room.hostTag":"主持","room.mutedTag":"已静音","room.hostLine":"主持 {name}","room.pausedManual":"讨论已暂停 · 新消息不会唤醒任何人","room.stopAllTitle":"立即停止所有成员当前的轮次;已完成的动作不回滚。","room.membersOpen":"查看成员","room.memberWorking":"正在处理","room.budgetLabel":"每条你的消息之后,Bot 最多发","room.budgetUnit":"条","room.budgetUsed":"本轮已用 {used}/{limit}","room.sendFailed":"消息没有发出:{detail}","room.actionFailed":"操作失败:{detail}","room.send":"发送","room.mentionListAria":"可以 @ 的成员","room.everyoneHint":"唤醒所有成员","room.emptyLog":"这个房间还没有消息。发一条开始;不 @ 时由 {host} 接。","room.you":"你","room.system.continued":"讨论继续","room.system.stopped":"已停止所有成员当前的轮次","room.system.rosterChanged":"成员已更新","room.system.hostChanged":"主持人换成了 {name}","room.system.wakeFailed":"没能唤醒 {name}:{reason}。请检查该成员的会话或模型设置,修复后再发一条房间消息。","room.system.memberModel":"该成员的模型","room.system.wakeLoginRequired":"没能唤醒 {name}:{provider} 未登录或凭证失效。请到设置 → 模型登录,或在成员会话里换一个可用模型,再发一条房间消息。","room.system.wakeConnectionFailed":"没能唤醒 {name}:无法连接 {provider}。请检查网络和模型服务,恢复后再发一条房间消息。","room.system.wakeSessionUnavailable":"没能唤醒 {name}:成员会话不可用或已归档。请打开成员会话检查,或将成员移出后重新加入。","room.system.wakeWorkspaceUnavailable":"没能唤醒 {name}:工作区不可用。请检查房间工作区路径和访问权限,再发一条房间消息。","room.namePlaceholder":"例如:0.31 发布","room.membersHint":"选 2–6 个角色,主持人默认是第一个。","room.noPersonas":"还没有角色。先在角色页新建几个。","room.allPersonasIn":"角色都已在房间里。","room.nameRequired":"给房间起个名字。","room.createFailed":"房间没有创建:{detail}","room.deleteRoom":"删除房间","room.deleteTitle":"删除「{name}」?","room.deleteBody":"房间和它的消息记录会被删除。角色成员的会话会归档;线程成员保持原样。","room.menu":"房间操作","room.usageTitle":"本房间累计用量(按成员会话求和)","room.stopFirst":"有成员正在处理,先停止再改成员或工作区。","room.membersLocked":"讨论进行中,暂不能增减成员","room.addMember":"添加成员","room.removeMember":"移出 {name}","room.remove":"移出","room.memberLimit":"房间最多 6 个成员,至少 2 个","room.budgetSave":"保存上限","room.asking":"在问你","room.close":"关闭成员面板","room.logTruncated":"只显示最近的 {count} 条消息","room.mentionHint":"↑↓ 选择 · Enter 插入 · Esc 关闭","room.usageNone":"还没有用量","room.system.workspaceChanged":"房间工作区已更换,成员各自的工作区和权限不变","room.system.renamed":"房间改名为「{name}」","room.threadTag":"线程","room.threadBusy":"{name} 正忙,结束后回复","room.working":"{name} 正在处理","room.listSeparator":"、","room.threadBusyShort":"正忙,结束后回复","room.threadIdle":"空闲","room.threadCold":"未打开","room.queueWhenBusy":"忙时排队","room.queueWhenBusyHint":"线程运行时,房间消息等本轮结束再送达,不打断它。","room.openThread":"打开线程","room.leave":"离开房间","room.leaveMember":"让 {name} 离开房间","room.addTab.personas":"角色","room.addTab.threads":"线程","room.searchThreads":"搜索会话","room.searchThreadsPlaceholder":"标题或 ID","room.noThreads":"没有匹配的会话。","room.noThreadsYet":"暂时没有可加入的线程。","room.threadsIncomplete":"只搜索了最近的会话。","room.addThread":"添加 {name}","room.threadLeft":"{name} 离开了房间","room.threadJoined":"{name} 加入了房间","room.commsOff":"线程沟通已关闭。到 设置 › 会话 打开后才能把线程拉进房间。","room.commsOffShort":"线程沟通已关闭","room.fromThreads":"拉进新房间","room.fromThreadsCount":"把 {count} 个线程拉进新房间","room.joinRoom":"加入房间…","room.joinRoomTitle":"把「{name}」加入房间","room.joinRoomNone":"还没有房间。先把几个线程拉进新房间。","room.joinRoomFull":"已满","room.joinRoomMember":"已在房间","room.withThreads":"和这些线程开房间","room.newFromThreadsTitle":"用线程开房间","room.newFromThreadsHint":"线程本人进房间,保留各自的工作区、上下文和权限,不复制会话。","room.createFromThreads":"创建房间","room.selectedThreads":"{count} 个线程","room.threadsNeeded":"选 2–6 个线程。","room.subagentBlocked":"子智能体不能进房间,请添加它的父线程。","room.selectionCount":"已选 {count} 个","room.clearSelection":"取消选择","room.inRoom":"在房间 {name}","room.joined":"已加入 {name}","room.threadSender":"房间 {name}","comms.fromRoom":"房间","room.placeholderThreadHost":"发到 {name}… @ 谁就唤醒谁;不 @ 交给主持人","room.emptyLogThreadHost":"这个房间还没有消息。@ 谁就唤醒谁;不 @ 交给主持人。","room.threadWorking":"正在处理","room.threadsHint":"只有开启了线程沟通的顶层会话能加入。","comms.reason.thread_not_found":"目标线程已不存在","comms.reason.thread_archived":"目标线程已归档","comms.reason.communication_disabled":"线程沟通已关闭","comms.reason.cross_host":"不支持跨主机投递","comms.reason.prompt_rejected":"目标提示词被拒绝","comms.reason.session_unavailable":"目标会话不可用","comms.reason.workspace_unavailable":"目标工作区不可用","comms.reason.executor_unavailable":"目标执行器不可用","comms.reason.cancelled":"投递已取消","comms.reason.delivery_failed":"投递失败","st.section.shortcuts":"快捷键","st.purpose.shortcuts":"按平台重新设置应用快捷键。控件本身依赖的按键列在最后。","st.shortcuts.title":"应用快捷键","st.shortcuts.intro":"点一下按键即可录制新的组合。保存在已连接的服务器上,连到它的每个窗口都用同一套按键。","st.shortcuts.platform":"平台","st.shortcuts.platformThis":"{name}(本设备)","st.shortcuts.otherPlatform":"正在编辑 {name} 的按键,在 {name} 上运行 Kiki 时生效。","st.shortcuts.loading":"正在读取快捷键…","st.shortcuts.loadFailed":"内置按键仍然有效。刷新页面可重试;较旧的服务器可能还不能保存快捷键。","st.shortcuts.group.composer":"输入框","st.shortcuts.note.anywhere":"任何地方都能用,输入时也可以。","st.shortcuts.note.outsideFields":"仅在焦点不在输入框时生效。","st.shortcuts.custom":"已修改","st.shortcuts.disabled":"已关闭","st.shortcuts.changeAria":"修改「{action}」的 {keys}","st.shortcuts.add":"再加一组按键","st.shortcuts.addAria":"为「{action}」再加一组按键","st.shortcuts.reset":"恢复默认","st.shortcuts.resetAria":"把「{action}」恢复为默认按键","st.shortcuts.resetAll":"恢复 {name} 全部默认按键","st.shortcuts.resetAllTitle":"恢复 {name} 全部默认按键?","st.shortcuts.resetAllBody":"{name} 上改过或关闭的快捷键都会恢复默认,其他平台的按键不变。","st.shortcuts.allDefault":"全部是默认按键。","st.shortcuts.recording":"请按下按键…","st.shortcuts.recordingAria":"正在录制新按键。按下组合键,或按 Esc 取消。","st.shortcuts.recordHint":"Esc 取消","st.shortcuts.recordHintClear":"Esc 取消 · Backspace 移除","st.shortcuts.unsupported":"不能使用 {key},请换一个按键。","st.shortcuts.conflictUsed":"{keys} 已被「{action}」占用。请换一个按键,或先修改那一项。","st.shortcuts.conflictReserved":"{keys} 由系统或输入框保留,请换一个按键。","st.shortcuts.conflictSelf":"这一项已经有 {keys} 了。","st.shortcuts.conflictGeneric":"这个按键与其他快捷键冲突,请换一个。","st.shortcuts.savedConflict":"已保存的按键与另一项冲突,请修改或恢复其中一项。","st.shortcuts.fixedTitle":"固定按键","st.shortcuts.fixedHint":"输入框、菜单和对话框依赖这些按键,不能重新设置。发送与换行跟随「常规」里的「发送快捷键」。","shortcuts.customize":"修改按键","shortcuts.hintChord":"Esc 关闭本面板 · {keys} 随时随地打开","shortcuts.hintNoChord":"Esc 关闭本面板","st.desktopLog.title":"桌面日志","st.desktopLog.fileLabel":"后端日志文件","st.desktopLog.copy":"复制路径","st.desktopLog.copyAria":"复制日志文件路径","st.desktopLog.copied":"已复制路径。","st.desktopLog.openFolder":"打开日志文件夹","st.desktopLog.opening":"正在打开…","st.desktopLog.openFailed":"无法打开日志文件夹:{detail}","st.desktopLog.rotation":"达到 {size} 时轮转,保留 {count} 个旧文件。","st.desktopLog.levelLabel":"日志级别","st.desktopLog.levelHint":"后端写入多少内容,下次启动生效。默认 warn;只在排查问题时用 debug 或 trace。","st.desktopLog.pending":"正在运行的后端仍按 {current} 记录。{next} 在下次 Kiki 启动后端时生效。","st.desktopLog.level.fatal":"只记录崩溃","st.desktopLog.level.error":"错误","st.desktopLog.level.warn":"错误与警告(默认)","st.desktopLog.level.info":"另含生命周期事件","st.desktopLog.level.debug":"详细,用于排查","st.desktopLog.level.trace":"全部内容,文件很大","st.desktopLog.level.silent":"不记录","st.list.count":"{total}","st.list.countOf":"{shown} / {total}","st.list.all":"全部","st.list.filterAria":"显示","st.list.sortAria":"排序","st.list.sortBy":"排序","st.list.compact":"紧凑行","st.list.compactTitle":"紧凑行","st.list.comfortableTitle":"宽松行","st.list.bulkAria":"已选中的行","st.list.selected":"已选 {count} 项","st.list.clearSelection":"取消选择","st.list.clearFilters":"清除搜索和筛选","st.list.selectRow":"选择 {name}","st.list.selectAll":"选择当前显示的全部","st.list.sort.recent":"最近","st.list.sort.name":"名称","st.list.sort.sessions":"会话数","st.workspaces.filter.pinned":"已置顶","st.workspaces.filter.unused":"没有会话","st.workspaces.group.pinned":"已置顶","st.workspaces.group.recent":"本周打开过","st.workspaces.group.older":"更早","st.workspaces.bulkPin":"置顶","st.workspaces.bulkUnpin":"取消置顶","st.workspaces.bulkRemove":"注销…","st.workspaces.bulkRemoveTitle":"注销 {count} 个工作区?","st.workspaces.bulkRemoveBody":"这些工作区会从服务器注销,磁盘上的文件不会被删除。","st.workspaces.bulkRemoveConfirm":"注销 {count} 个工作区","st.workspaces.noMatchTitle":"没有匹配的工作区","st.workspaces.searchPlaceholder":"按名称或路径搜索…","st.workspaces.more":"{name} 的更多操作","st.models.filter.inUse":"在用","st.models.filter.attention":"有问题","st.models.filter.reasoning":"推理","st.models.filter.vision":"视觉","st.models.group.inUse":"在用","st.models.inUseAs":"用于{roles}","st.models.providerAttention":"连接不可用","st.models.providerUnconfigured":"未设置密钥","st.models.group.noProvider":"未关联连接","st.models.noMatchTitle":"没有匹配的模型","st.models.searchWide":"搜索名称、ID、连接或能力…","st.models.detailTitle":"编辑模型","st.models.openDetail":"编辑 {model}","sidebar.roomsLoadFailed":"房间列表加载失败","room.renameTitle":"重命名房间","st.spaces.search":"搜索空间","st.spaces.searchPlaceholder":"按名称或路径搜索…","st.spaces.filter.running":"运行中","st.spaces.filter.pending":"待处理","st.spaces.filter.isolated":"独立凭据","st.spaces.noMatchTitle":"没有匹配的空间","st.spaces.noMatches":"没有匹配“{query}”的空间。","st.list.sort.order":"默认顺序","st.notify.search":"搜索渠道","st.notify.searchPlaceholder":"按名称或类型搜索…","st.notify.filter.enabled":"已启用","st.notify.filter.disabled":"已停用","st.notify.filter.attention":"需要注意","st.notify.noMatchTitle":"没有匹配的渠道","st.notify.noMatches":"没有匹配“{query}”的渠道。","st.perm.search":"搜索规则","st.perm.searchPlaceholder":"按模式或理由搜索…","st.perm.noMatchTitle":"没有匹配的规则","st.perm.noMatches":"没有匹配“{query}”的规则。","st.perm.reorderNarrowed":"清除搜索后才能调整顺序","st.connections.search":"搜索连接","st.connections.searchPlaceholder":"按名称、ID 或主机搜索…","st.connections.filter.attention":"需要注意","st.connections.noMatchTitle":"没有匹配的连接","st.connections.noMatches":"没有匹配“{query}”的连接。","st.identity.search":"搜索身份档案","st.identity.searchPlaceholder":"按名称或 ID 搜索…","st.identity.noMatchTitle":"没有匹配的档案","st.identity.noMatches":"没有匹配“{query}”的档案。","st.nbSearch.providers.search":"搜索提供商","st.nbSearch.filter.attention":"待配置或异常","st.nbSearch.filter.ready":"就绪","st.nbSearch.providers.noMatchTitle":"没有匹配的提供商","usage.pricing.noMatchTitle":"没有匹配的模型","cap.skills.noMatchTitle":"没有匹配的技能","cap.plugins.noMatchTitle":"没有匹配的插件","st.mcp.search":"搜索服务器","st.mcp.searchPlaceholder":"按名称或命令搜索…","st.mcp.filter.attention":"需要注意","st.mcp.filter.connected":"已连接","st.mcp.noMatchTitle":"没有匹配的服务器","st.mcp.noMatches":"没有匹配“{query}”的服务器。","transcript.moreActions":"更多操作","subagent.call.input":"调用输入","subagent.call.output":"调用输出","subagent.call.details":"调用详情","subagent.call.noOutputYet":"任务执行中,尚未产生输出。","subagent.call.noOutput":"没有录得调用输出。","subagent.call.loading":"正在加载较早的调用记录…","subagent.call.unavailable":"此会话中未找到原始调用记录。","subagent.call.taskId":"任务 ID","subagent.call.actualProfile":"实际 Profile","subagent.call.advisories":"绑定建议 (Advisories)","subagent.call.advisoriesLegacy":"绑定建议(历史回执仅保留首条,共 {count} 条)","subagent.call.rawAdvisory":"原始 JSON","subagent.call.hideRawAdvisory":"收起 JSON","subagent.call.receiptBody":"回执正文","subagent.call.targetAgent":"目标智能体","subagent.call.expandDetails":"展开调用详情","subagent.call.collapseDetails":"收起调用详情","subagent.call.expandPrompt":"展开 Prompt(共 {count} 字)","subagent.call.collapsePrompt":"收起 Prompt","subagent.call.expandMessage":"展开消息(共 {count} 字)","subagent.call.collapseMessage":"收起消息","usage.governance.realtime":"实时","usage.governance.history":"历史","usage.governance.stale":"数据可能已过期 · 最后更新 {time}","usage.governance.requests":"模型请求","usage.governance.waiting":"等待","usage.governance.unlimited":"不限","usage.governance.model":"模型","usage.governance.provider":"提供商","usage.governance.session":"会话","usage.governance.role":"角色","usage.governance.scope":"范围","usage.governance.target":"对象","usage.governance.cap":"并发上限","usage.governance.action":"超额动作","usage.governance.global":"全部会话","usage.governance.eachSession":"每个会话","usage.governance.children":"仅子智能体请求","usage.governance.all":"全部模型","usage.governance.queue":"排队","usage.governance.reject":"拒绝","usage.governance.badge":"当前模型请求 {active},等待 {queued}","usage.governance.loading":"正在读取实时请求状态…","usage.governance.unavailable":"实时请求状态不可用","usage.governance.running":"进行中","usage.governance.queued":"排队中","usage.governance.details":"请求详情","usage.governance.limitsTitle":"并发限制","usage.governance.byDimension":"按维度","usage.governance.idleNow":"此刻没有进行中或排队的模型请求。","usage.governance.waitingTitle":"正在等待","usage.governance.blockedBy":"受「{rules}」限制","usage.governance.roleRoot":"主智能体与系统","usage.governance.roleSubagent":"子智能体","usage.governance.emptyTitle":"还没有限制规则","usage.governance.emptyBody":"给模型请求设一个并发上限:超出的请求排队等待,或被直接拒绝。","usage.governance.addRule":"添加规则","usage.governance.ruleCount.one":"{count} 条规则","usage.governance.ruleCount.other":"{count} 条规则","usage.governance.newRule":"新规则","usage.governance.editRule":"编辑「{name}」","usage.governance.name":"名称","usage.governance.namePlaceholder":"例如 provider-cap","usage.governance.models":"模型","usage.governance.providers":"提供商","usage.governance.targetHint":"逗号分隔,留空表示全部","usage.governance.waitBudget":"最长等待(秒)","usage.governance.summaryWait":"最长等待 {seconds} 秒","usage.governance.saveRule":"保存规则","usage.governance.deleteRule":"删除规则","usage.governance.deleteTitle":"删除规则","usage.governance.deleteBody":"删除「{name}」后,受它限制的请求会立即恢复通行。","usage.governance.invalidName":"名称不能为空,也不能和其他规则重复。","usage.governance.invalidCap":"并发上限要填大于 0 的整数。","usage.governance.invalidWait":"最长等待要填大于 0 的秒数。","usage.governance.saveFailed":"规则没有保存成功","usage.governance.disabled":"已停用","usage.governance.toggleRule":"启用或停用「{name}」","usage.export.nav":"外部同步","usage.export.sourceLabel":"上报来源","usage.export.sourceValue":"{server} · home {home}","usage.export.sourceNote":"只上报这台服务器自己记录的用量。配置在另一台服务器上的目的端,到那里管理。","usage.export.add":"添加目的端","usage.export.loading":"正在加载外部同步…","usage.export.loadFailed":"外部同步没有加载成功","usage.export.unavailable.title":"这台服务器没有开启外部同步","usage.export.unavailable.body":"服务器不上报任何目的端,也不发送任何数据。请在服务器上打开 {flag} 实验开关后重新加载。","usage.export.noTransport":"当前连接无法管理外部同步。请通过 HTTP 或 IPC 连接到 Kiki 服务器。","usage.export.readonly.title":"这里由另一个实例负责","usage.export.readonly.body":"这个 home 的外发写者是另一个 Kiki 实例,所以这里是只读的。请到数据所在的实例上管理。","usage.export.empty.title":"还没有目的端","usage.export.empty.body":"Kiki 可以只把模型、token、质量与价格桶发送到 vibecafe.ai、Kiki 用量 Webhook,或你自己写的脚本;对话内容、标题与路径不会发送。","usage.export.empty.add":"添加目的端","usage.export.col.destination":"目的端","usage.export.col.endpoint":"实际地址","usage.export.col.state":"状态","usage.export.col.timing":"最近 / 下次","usage.export.col.queue":"待发","usage.export.kind.vibe":"vibecafe.ai","usage.export.kind.webhook":"Kiki Webhook","usage.export.kind.script":"脚本","usage.export.kindShort.vibe":"vibecafe","usage.export.kindShort.webhook":"webhook","usage.export.kindShort.script":"script","usage.export.neverSent":"尚未成功发送过","usage.export.nextAt":"下次 {time}","usage.export.noNext":"没有下次计划","usage.export.schedule.0":"仅手动","usage.export.schedule.5":"每 5 分钟","usage.export.schedule.15":"每 15 分钟","usage.export.schedule.30":"每 30 分钟","usage.export.schedule.60":"每 60 分钟","usage.export.state.draft":"尚未启用","usage.export.state.disabled":"已暂停","usage.export.state.ready":"运行中","usage.export.state.needs-auth":"凭据被拒绝","usage.export.state.retrying":"重试中","usage.export.state.queue-full":"队列已满","usage.export.state.quarantined":"需要处理","usage.export.state.remote-diverged":"服务端数据不同","usage.export.state.adapter-unavailable":"不可用","usage.export.queue.none":"没有待发数据","usage.export.queue.pending":"{count} 个桶","usage.export.queue.oldest":"最早 {time}","usage.export.queue.quarantined":"{count} 个失败","usage.export.detail.endpoint":"实际地址","usage.export.detail.command":"命令","usage.export.detail.schedule":"周期","usage.export.detail.scope":"范围","usage.export.detail.scopeExcluded":"已排除 {count} 个工作区","usage.export.detail.ephemeralOn":"包含临时会话","usage.export.detail.ephemeralOff":"临时会话保留在本机","usage.export.detail.credential":"凭据","usage.export.detail.credential.keyring":"系统钥匙串","usage.export.detail.credential.private-file":"服务器上的私有文件","usage.export.detail.credential.none":"无","usage.export.detail.identity":"本地凭据标识 {fingerprint}","usage.export.detail.identityNote":"这是服务器按你当前配置推导出的标识,只在本机指代这份凭据;它不代表服务方已经验证过某个账号。","usage.export.detail.identityShow":"这份凭据如何被识别","usage.export.detail.consent":"同意","usage.export.detail.consent.none":"尚未同意","usage.export.detail.consent.noneHint":"用量离开这台机器之前,先预览实际载荷并同意一次。","usage.export.detail.consent.changed":"保存的配置已经和你同意过的不一致,因此发送已停止。重新预览并同意即可继续。","usage.export.detail.consent.granted":"已对这份配置同意","usage.export.detail.quality":"桶质量","usage.export.detail.scanComplete":"本地扫描已完成","usage.export.detail.scanRunning":"本地扫描仍在建立","usage.export.detail.scanFailed":"本地扫描失败:{reason}","usage.export.action.sync":"立即同步","usage.export.action.test":"测试连接","usage.export.action.pause":"暂停","usage.export.action.resume":"继续","usage.export.action.preview":"预览载荷","usage.export.action.retry":"重试失败项","usage.export.action.backfill":"补传历史","usage.export.action.rebuild":"强制核对重建","usage.export.action.diagnostics":"下载诊断","usage.export.action.exportLocal":"下载待发桶","usage.export.action.clearQueue":"清空待发队列","usage.export.action.withdraw":"从服务端撤回","usage.export.action.edit":"编辑","usage.export.action.remove":"移除","usage.export.busy.working":"处理中…","usage.export.confirm.remove.title":"移除「{name}」","usage.export.confirm.remove.body":"Kiki 会停止发送,并删除这个目的端在服务器上的配置与凭据。服务方已有的数据不会被删除。","usage.export.confirm.remove.pending":"{count} 个未发送的桶会被丢弃。它们仍留在本地用量历史里,之后不会补发。","usage.export.confirm.remove.clean":"没有待发数据,所以只会删除本地配置。","usage.export.confirm.remove.confirm":"移除目的端","usage.export.confirm.clearQueue.title":"清空待发队列","usage.export.confirm.clearQueue.body":"丢弃「{name}」的 {count} 个未发送桶。它们仍留在本地用量历史里且不会补发,所以服务方会保留已经收到的部分。","usage.export.confirm.clearQueue.confirm":"清空队列","usage.export.confirm.withdraw.title":"从 {name} 撤回","usage.export.confirm.withdraw.body":"请求服务方删除 Kiki 已经送达这个目的端的桶。本地用量历史不受影响。","usage.export.confirm.withdraw.unsupported":"这类目的端无法删除已经送达的数据,因此不提供撤回。","usage.export.confirm.withdraw.confirm":"撤回","usage.export.confirm.rebuild.title":"强制核对重建","usage.export.confirm.rebuild.body":"不信任扫描检查点,重新读取每个来源文件,再把结果与已送达的内容对账。耗时较长,也不会在服务方删除任何数据。","usage.export.confirm.rebuild.confirm":"重新核对","usage.export.diagnosticsHint":"一份不含内容的小结:版本、质量、队列与回执计数,直接写入你的下载目录,Kiki 不会上传它。","usage.export.confirm.remove.discard":"移除并丢弃 {count} 个桶","usage.export.capacity.title":"待发数据上限","usage.export.capacity.value":"{used} / {limit}","usage.export.capacity.warning":"接近上限","usage.export.capacity.change":"设置上限","usage.export.capacity.invalid":"请填大于 0 的整数字节数。","usage.export.recover.needs-auth":"服务方拒绝了保存的凭据。更换密钥、测试连接,然后继续。","usage.export.recover.queue-full":"待发数据达到上限,因此停止发送,且没有丢弃任何数据。可以立即同步、提高上限,或明确清空队列。","usage.export.recover.retrying":"上一次尝试失败,Kiki 正在退避重试。这里的失败不会影响你的模型请求或会话。","usage.export.recover.quarantined":"这些桶的失败原因不是单纯重试就能解决。重试会重新发送;下载待发桶可以看到具体内容。","usage.export.recover.remote-diverged":"服务方对这些桶持有不同的值,且不接受更低版本,因此 Kiki 停止重试。请查看待发载荷,或强制核对重建。","usage.export.recover.adapter-unavailable":"当前构建不支持这类目的端,因此不发送任何数据。","usage.export.recover.consent":"你同意之后配置又变了。重新预览并同意即可恢复。","usage.export.category.adapter_unavailable":"当前构建不支持这类目的端。","usage.export.category.network":"无法连接到服务方。","usage.export.category.http_auth":"服务方拒绝了凭据。","usage.export.category.http_rate_limited":"服务方要求降速,Kiki 会在它的时间窗之后重试。","usage.export.category.http_too_large":"批次对服务方来说过大,Kiki 正在缩小批次并重试。","usage.export.category.invalid_protocol":"服务方的响应结构不是这个目的端能接受的。","usage.export.category.partial_receipt":"批次只有一部分被确认,其余仍留在队列里。","usage.export.category.remote_diverged":"服务方保留着这些桶的另一个值,并拒绝更低版本。","usage.export.category.cached_only_unsupported":"某个桶的输入只有缓存读取,这套协议无法表达,服务方拒绝接收。","usage.export.category.vibe_partial_receipt":"vibecafe.ai 确认了批次的一部分,其余被丢弃或保护。","usage.export.category.vibe_protected":"vibecafe.ai 保留了某个桶已有的更大值,没有采用这次的值。","usage.export.category.vibe_unknown_source":"vibecafe.ai 不认识某个桶的来源名。","usage.export.category.vibe_unknown_model":"vibecafe.ai 不认识某个模型名。","usage.export.category.vibe_implausible":"vibecafe.ai 判断某个桶不合理,未予采用。","usage.export.category.script_timeout":"命令没有在超时时间内结束。","usage.export.category.script_output_limit":"命令写入的输出超过了上限。","usage.export.category.script_spawn_failed":"命令无法启动。","usage.export.category.script_nonzero_exit":"命令以失败状态退出。","usage.export.category.script_invalid_receipt":"命令的输出不是合法的回执。","usage.export.category.script_protocol_error":"命令的应答超出了 Kiki 期待的那套协议。","usage.export.category.generic":"上一次尝试失败。","usage.export.category.scan_failed":"本地用量扫描失败。","usage.export.category.scan-incomplete":"本地用量扫描没有完成,因此没有发布完整快照。","usage.export.category.identity-change-requires-new-destination":"无法证明这份凭据或地址仍是同一个身份,而且已经有数据送达。请新增一个目的端,而不是把现有目的端改指过去。","usage.export.category.consent-preview-changed":"你同意过的预览之后载荷又变了。请重新预览。","usage.export.category.destination-not-found":"服务器上已经没有这个目的端了。","usage.export.category.export-queue-full":"待发数据达到上限,因此没有入队新内容。","usage.export.category.export-writer-unavailable":"这个 home 当前由另一个 Kiki 实例负责外发。","usage.export.category.invalid-usage-export-input":"服务器拒绝了这些取值。","usage.export.category.usage-export-operation-failed":"服务器拒绝了这个操作。","usage.export.form.addTitle":"添加目的端","usage.export.form.editTitle":"编辑「{name}」","usage.export.form.description":"用量离开这台机器之前,先预览载荷并同意一次。草稿不会发送任何用量。","usage.export.form.kind":"目的端种类","usage.export.form.kind.vibeHint":"用 bearer 密钥把桶发送到 vibecafe.ai。","usage.export.form.kind.webhookHint":"把带版本的桶发送到你自己的接收端,支持逐桶替换与删除。","usage.export.form.kind.scriptHint":"运行你的命令,把无内容批次写到 stdin,并从它的输出读取回执。","usage.export.form.name":"名称","usage.export.form.namePlaceholder":"vibecafe 个人","usage.export.form.endpoint":"端点 URL","usage.export.form.endpointPlaceholder":"https://usage.example.com/ingest","usage.export.form.endpointHint":"固定的 HTTPS origin。跨 origin 跳转、URL 里的凭据、查询串里的密钥都会被拒绝。","usage.export.form.auth":"认证方式","usage.export.form.auth.none":"无密钥","usage.export.form.auth.bearer":"Bearer 密钥","usage.export.form.auth.hmac":"HMAC 签名","usage.export.form.secret":"密钥","usage.export.form.secretPlaceholder":"粘贴一次,之后由服务器保存","usage.export.form.secretKeep":"留空表示继续使用服务器上已保存的密钥。","usage.export.form.secretNever":"密钥不会写进浏览器存储,保存后也不会再次显示。","usage.export.form.storage":"保存方式","usage.export.form.storage.keyring":"系统钥匙串","usage.export.form.storage.file":"服务器上的私有文件","usage.export.form.storage.fileAck":"我了解服务器会把密钥放在只有我这个用户可读的私有文件里,静态存储不加密。","usage.export.form.storage.fileAckRequired":"请先确认密钥的保存方式。","usage.export.form.gzip":"压缩批次(gzip)","usage.export.form.command":"命令","usage.export.form.commandPlaceholder":"my-usage-receiver --json","usage.export.form.commandHint":"以你的操作系统用户身份、按你平时的权限运行:它可以自行读文件或联网。Kiki 只会把无内容批次写到它的 stdin,并从输出里读回执。这不是沙箱。","usage.export.form.commandApproval":"保存即绑定这条命令:以后再改它需要重新预览并同意。","usage.export.form.advanced":"高级","usage.export.form.timeout":"超时(秒)","usage.export.form.outputLimit":"输出上限(KiB)","usage.export.form.timeoutInvalid":"超时请填 0.1 到 60 秒之间。","usage.export.form.outputLimitInvalid":"输出上限请填 1 到 1024 KiB 之间。","usage.export.form.privateEndpoint":"允许一个私网端点","usage.export.form.privateHost":"证书主机名","usage.export.form.privateIp":"IP 地址","usage.export.form.privatePort":"端口","usage.export.form.privateProtocol":"协议","usage.export.form.privateHint":"只批准这组主机名、地址、端口与协议,不是整个私网。回环、链路本地与云元数据地址仍然会被拒绝。","usage.export.form.schedule":"发送周期","usage.export.form.historyFrom":"历史起点","usage.export.form.historyHint":"任何时刻都会向下对齐到包含它的 UTC 半小时边界。之后记录的桶会随产生逐步加入。","usage.export.form.historyInvalid":"请输入日期和时间。","usage.export.form.excluded":"排除的工作区","usage.export.form.excludedHint":"被排除的工作区不会进入载荷,这份清单本身也不会外发。","usage.export.form.ephemeral":"包含临时会话","usage.export.form.ephemeralHint":"默认关闭,因此临时会话连匿名计数都留在本机。","usage.export.form.saved":"草稿已保存。在你预览载荷并同意之前,不会发送任何内容。","usage.export.form.test":"保存并测试","usage.export.form.testing":"测试中…","usage.export.form.testDelivered":"服务方接受了协议握手。没有发送任何用量。","usage.export.form.testRetry":"握手没有完成。最可能的原因是端点或凭据。","usage.export.form.testNeedsAuth":"服务方拒绝了凭据。","usage.export.form.testTooLarge":"服务方以体积过大为由拒绝了握手。","usage.export.form.testInvalid":"服务方的响应结构不是这个目的端能接受的。","usage.export.form.testDiverged":"服务方对这个流已经持有不同的数据。","usage.export.form.preview":"保存并预览","usage.export.form.previewing":"正在生成预览…","usage.export.form.previewStale":"这份预览之后配置又改了,它已不能代表将要发送的内容。请重新预览。","usage.export.form.save":"保存草稿","usage.export.form.saving":"保存中…","usage.export.form.invalidName":"请给这个目的端起个名字。","usage.export.form.invalidEndpoint":"请填写完整的 https:// 地址。","usage.export.form.invalidCommand":"请填写要运行的命令。","usage.export.form.invalidPrivateIp":"请填写 IP 地址。","usage.export.form.invalidPrivatePort":"请填 1 到 65535 之间的端口。","usage.export.form.invalidPrivateHost":"请填写用于证书校验的主机名。","usage.export.preview.title":"将要发送的内容","usage.export.preview.bindingShow":"显示同意绑定哈希","usage.export.preview.bindingNote":"同意绑定这份确切的载荷。改动端点、凭据身份或范围都要重新预览。","usage.export.preview.count":"{count} 个桶","usage.export.preview.complete":"本地扫描已完成,因此这是一份完整快照。","usage.export.preview.incomplete":"本地扫描还没有结束,这份预览可能不完整。Kiki 会在发送前发布完整快照。","usage.export.preview.invalid":"{count} 条无法读取的记录已单独报出,不会进入载荷。","usage.export.preview.quality":"{known} 条已测得 · {missing} 条缺测 · {legacy} 条历史零值","usage.export.preview.mapping":"{count} 个模型名无法公开识别;服务方看到的会是该目的端专属的不透明标识。","usage.export.preview.price":"{count} 条记录没有本地价格,它们的金额按未知发送——而不是零。","usage.export.preview.sample":"字段样例","usage.export.preview.sampleNote":"这份载荷里真实的其中一个桶,内容与序列化后完全一致。","usage.export.preview.showJson":"展开 JSON","usage.export.preview.hideJson":"收起 JSON","usage.export.preview.items":"显示 {total} 个桶中的 {shown} 个","usage.export.preview.empty":"这个范围内目前没有桶,启用后也要等到产生用量才会发送。","usage.export.preview.serviceText":"服务契约原文","usage.export.consent.summary":"启用即授权 Kiki 自动把这些桶发送给这个目的端,不再逐次询问。","usage.export.consent.fact.noContent":"外发的只有模型、UTC 半小时、四类 token 计数、质量与价格;提示词、回复、标题、工作区名与路径都不会发送。","usage.export.consent.fact.timing":"服务方能看到你的 IP 地址以及你使用用量的时间节律。","usage.export.consent.fact.identity":"无法识别的模型名会变成该目的端专属的不透明标识,无法还原到你的文件。","usage.export.consent.fact.background":"发送在 Kiki 后台存活期间进行;后台退出后暂停,下次启动补报。","usage.export.consent.fact.reobtain":"扩大范围、更换端点,或无法证明同账号的凭据变更,都要重新同意;缩小范围或改周期不需要。","usage.export.consent.changed":"保存目的端时载荷发生了变化,所以刚才那份同意已经不对应。下方是当前的预览,请重新同意后启用。","usage.export.consent.enable":"同意并启用","usage.export.consent.enabling":"启用中…","usage.export.vibe.caveat":"vibecafe.ai 目前被告知的来源是 Kimi Code,而且它的总量不含缓存读取,所以数字不会相等。","usage.export.vibe.detail":"这套协议无法表达缓存创建的存活时长,因此创建 token 并入输入,也不会编出 5 分钟或 1 小时拆分。vibecafe.ai 用自己的模型价格表计价,可能与 Kiki 的本地估算不同。只发送桶:不含会话、不含活跃时长。","usage.export.handoff.title":"旧 collector 交接","usage.export.handoff.collector":"旧 collector","usage.export.handoff.intro":"本机可能已有 vibe-usage collector 在把同一个 home 报给同一个账号。交接是在一个未来的分界点把时间线切开,而不是重灌:分界点之前仍归 collector,之后归 Kiki。","usage.export.handoff.cutoff":"接管分界点(UTC)","usage.export.handoff.cutoffHint":"一个未来的 UTC 半小时边界。每个桶只会被一方上报,不会重复,也不会出现没人负责的空档。","usage.export.handoff.cutoffInvalid":"请输入未来某个 UTC 半小时边界上的日期与时间。","usage.export.handoff.phase.prepared":"已安排交接","usage.export.handoff.phase.prepared.body":"分界点已记录,两边都还没动:之前仍由 collector 全部覆盖,Kiki 也还没有开始上报。","usage.export.handoff.phase.armed":"等待首批确认","usage.export.handoff.phase.armed.body":"两端在分界点处都已就绪。Kiki 从此接管,离线时先排队。这还不算同步成功。","usage.export.handoff.phase.awaiting-native":"等待 Kiki 的第一份回执","usage.export.handoff.phase.awaiting-native.body":"旧 collector 的最后回执已到。Kiki 的第一份回执还没来,因此交接尚未完成,分界点也不会变动。","usage.export.handoff.phase.completed":"交接完成","usage.export.handoff.phase.completed.body":"旧 collector 已上报分界点之前的最后一个桶,Kiki 的回执也确认了从分界点起的第一个桶。","usage.export.handoff.phase.rollback-prepared":"已安排交回","usage.export.handoff.phase.rollback-prepared.body":"已选定一个更晚的分界点把覆盖范围交回;生效之前,两个分界点之间的记录仍由 Kiki 负责。","usage.export.handoff.namespace":"上报命名空间","usage.export.handoff.legacyReceipt":"旧 collector:{count} 个桶,确认于 {time}","usage.export.handoff.noLegacyReceipt":"还没有收到旧 collector 的最后回执。","usage.export.handoff.nativeReceipt":"Kiki:已确认 {count} 个桶","usage.export.handoff.noNativeReceipt":"还没有 Kiki 的回执。","usage.export.handoff.notArranged":"这个目的端还没有安排交接。","usage.export.handoff.collectorFile":"collector 文件","usage.export.handoff.collectorPlaceholder":"你的 collector 读取的配置文件","usage.export.handoff.effects":"同意一次,就会在分界点同时完成这两件事:","usage.export.handoff.effect.collector":"你所选的那个 collector 文件从分界点起不再覆盖这个 Kiki home。","usage.export.handoff.effect.native":"Kiki 从分界点起接管这个 home,离线时先把发不出去的内容排队。","usage.export.handoff.safety":"Kiki 不改写 collector 的状态文件,不读它的密钥,也不停掉它的服务。","usage.export.handoff.step.plan":"记录分界点","usage.export.handoff.step.test":"与目的端握手","usage.export.handoff.step.preview":"为载荷取指纹","usage.export.handoff.step.arm":"执行交接","usage.export.handoff.step.refresh":"读取回执","usage.export.handoff.step.rollback":"交回覆盖范围","usage.export.handoff.stepFailed":"交接在「{step}」这一步中断了。","usage.export.handoff.armProgress":"正在处理:{step}。","usage.export.handoff.armRequirements":"执行交接时会读取 collector 文件里这个 home 的条目,核对分界点、命名空间、目的端地址与密钥指纹;不一致就会拒绝,而不会当成已完成。","usage.export.handoff.freshOnly":"交接要从一个还没有成功送达过任何内容的 vibecafe 目的端开始,保证同一个 home 任何时刻只有一个上报者。","usage.export.handoff.refresh":"检查回执","usage.export.handoff.rollback":"交回覆盖范围","usage.export.handoff.rollbackHint":"选择一个更晚的分界点,把从它起的范围交还给旧 collector;当前分界点之前的记录归属不变。","usage.export.handoff.rollbackRun":"交回","usage.export.category.receipt":"这个目的端有逐桶回执未被接受。","usage.export.category.queue-explicitly-cleared":"待发队列已被明确清空,因此这个目的端停止了发送。","usage.export.category.handoff-recovery-needs-new-cutoff":"分界点在交接能够生效之前就过去了。旧 collector 仍然覆盖全部内容;需要另选一个未来的分界点。","usage.export.handoff.arm":"同意并交接","usage.export.handoff.arming":"交接中…","usage.export.handoff.expired":"两端还没就绪,分界点就过去了,因此 Kiki 并没有接管。旧 collector 仍然覆盖全部内容,也没有记录丢失。请另选一个未来的分界点。","usage.export.handoff.fileRequired":"请选择这次交接要改动的 collector 文件。","usage.export.handoff.untouched":"旧的共享 hostname 保留原有历史:不会向新命名空间回填,也不会删除任何东西。","usage.export.handoff.sameAccount":"交接会把目的端与 collector 自己记录下来的配置做比对。两者不一致时,Kiki 会请你核对设置,而不是声称是同一个账号。","usage.export.handoff.mismatch":"collector 记录的目标与这个目的端不一致。请核对 collector 的配置;Kiki 不会把同一个账号当作已被证明。","usage.export.handoff.technicalShow":"collector 与 Kiki 如何对上是同一个目标","composer.ssh.sessionHosts":"本会话 SSH","composer.ssh.draftHosts":"待加入 SSH","composer.ssh.draftHint":"创建会话后,所选主机会先加入,再随会话保留到移除为止。加入不等于连接。","composer.ssh.sessionHint":"这些主机属于本会话,会一直保留到移除。加入不等于连接。","st.promptIdentity.common":"共用内容","st.promptIdentity.main":"主智能体","st.promptIdentity.independent":"外部上级派发的智能体","st.promptIdentity.mode.same":"使用共用内容","st.promptIdentity.mode.off":"不使用","st.promptIdentity.mode.custom":"分别设置","st.promptIdentity.customHint":"只使用下方整组内容,不继承共用设置。","st.promptIdentity.offHint":"此声明不向该智能体添加内容。","st.promptIdentity.pathsPlaceholder":"每行一个相对文件路径","st.promptIdentity.overlay":"模型提示文件","st.promptIdentity.overlayMode":"与系统正文组合","st.promptIdentity.overlayMode.default":"追加(默认)","st.promptIdentity.overlayMode.append":"追加","st.promptIdentity.overlayMode.prepend":"前置","st.promptIdentity.overlayMode.wrap":"包裹","st.promptIdentity.overlayMode.persona":"替换身份段","st.promptIdentity.overlayMode.replace":"替换基础正文","st.promptIdentity.timing":"每轮提示与请求锚点","st.promptIdentity.steering":"每轮提示文件","st.promptIdentity.anchor":"请求锚点文件","st.promptIdentity.anchorSteps":"锚点请求步数","st.promptIdentity.anchorScope":"锚点时间范围","st.promptIdentity.anchorScope.default":"会话开始时(默认)","st.promptIdentity.anchorScope.session":"会话开始时","st.promptIdentity.anchorScope.turn":"每轮开始时","st.promptIdentity.bodyMode":"与角色正文组合","st.promptIdentity.body":"模型专用正文","st.promptIdentity.noBody":"不添加模型专用正文","st.promptIdentity.bodyTitle":"模型专用正文","st.promptIdentity.fieldsTitle":"字段覆盖","st.promptIdentity.cognitionTitle":"模型提示","st.promptIdentity.raw":"编辑 JSON","st.promptIdentity.problem.emptyBranch":"请添加独立内容,或选择「不使用」。","st.promptIdentity.problem.missingCommon":"已明确选择共用,但共用内容为空。请添加内容,或点击「恢复默认共用」。","st.promptIdentity.clearExplicitSame":"恢复默认共用","st.promptIdentity.problem.fieldName":"请使用小写、点分隔的字段名,例如 system.shared。","st.promptIdentity.problem.duplicateField":"同组内每个字段名只能出现一次。","st.promptIdentity.problem.anchorSteps":"请输入至少为 1 的整数请求步数。","st.promptIdentity.problem.promptPair":"请选择组合方式并填写正文。","st.usagePolicy.shared":"共用","st.usagePolicy.sharedValues":"共用设置值","st.usagePolicy.main":"主智能体","st.usagePolicy.scopeAria":"这些设置对谁生效","st.usagePolicy.sharedHint":"默认值:没有单独设置的地方都用这一套值,子智能体也用。","st.usagePolicy.mainHint":"只编辑不同的字段;其余继续共用。清空某个字段即恢复共用。","st.usagePolicy.independentHint":"只编辑外部委派智能体的差异字段,其余继续共用。","st.usagePolicy.thinkingEffort":"默认思考强度","st.usagePolicy.serviceTier":"服务等级","st.usagePolicy.autoCompact":"自动压缩触发点","st.usagePolicy.contextBudget":"上下文使用预算","st.usagePolicy.maxCompletionTokens":"最大生成 token","st.usagePolicy.adaptiveThinking":"自适应思考","st.usagePolicy.inherit":"使用共用","st.usagePolicy.off":"关闭","st.usagePolicy.omit":"不发送","st.usagePolicy.issueCount":"请输入至少为 1 的整数 token 数。","st.usagePolicy.issueTier":"请选择列表中的服务档位。","st.usagePolicy.restoreInherit":"恢复使用共用值","st.usagePolicy.differences":"与共用有 {count} 项不同","st.usagePolicy.differencesOne":"与共用有 1 项不同","st.usagePolicy.noDifferences":"与共用一致","st.usagePolicy.effective":"主智能体实际生效值","st.usagePolicy.unset":"未设置","st.usagePolicy.inheritSharedPoint":"使用共用值","st.usagePolicy.capsHelp":"上下文使用预算与最大生成 token 仍受模型的硬上限约束(跨层取最小值),主智能体只能收紧,不能放宽。","agentPanel.prompt.title":"提示词生效详情","agentPanel.prompt.unavailable":"暂时无法读取此智能体的当前绑定提示词。","agentPanel.prompt.notReported":"当前服务器尚未提供提示词详情。","agentPanel.prompt.identity.main":"主智能体","agentPanel.prompt.identity.sub":"子智能体","agentPanel.prompt.identity.independent":"外部上级派发的智能体","agentPanel.prompt.bindingRevision":"当前绑定修订","agentPanel.prompt.channel.system":"系统正文","agentPanel.prompt.channel.tool":"工具说明","agentPanel.prompt.channel.steering":"每轮用户提示","agentPanel.prompt.channel.anchor":"请求锚点","agentPanel.prompt.state.effective":"已生效","agentPanel.prompt.state.inactive":"未应用","agentPanel.prompt.state.shadowed":"被替换","agentPanel.prompt.state.unsupported":"不支持","agentPanel.prompt.selection.common":"使用共用内容","agentPanel.prompt.selection.main":"使用主智能体独立内容","agentPanel.prompt.selection.independent":"使用外部上级派发智能体的独立内容","agentPanel.prompt.selection.off":"对此身份停用","agentPanel.prompt.sources":"按应用顺序排列的来源","agentPanel.prompt.noSource":"未提供来源位置。","agentPanel.prompt.request":"最近请求证据","agentPanel.prompt.noRequest":"尚未记录此智能体的实际请求证据。","agentPanel.prompt.anchorApplied":"本次请求的系统正文由锚点替换。","agentPanel.prompt.anchorNotApplied":"本次请求未由锚点替换系统正文。","agentPanel.prompt.requestAt":"记录时间","agentPanel.prompt.step":"轮内步数","agentPanel.prompt.attempt":"请求尝试","agentPanel.prompt.systemHash":"实际 system hash","agentPanel.prompt.toolsHash":"实际工具 hash","agentPanel.prompt.cognitionRevision":"模型提示修订","agentPanel.prompt.diskRevision":"磁盘修订","agentPanel.prompt.diskChanged":"已保存的配置与当前绑定不同,将在下次绑定或上下文重建时采用。","agentPanel.prompt.lease.preserve":"调用方保留角色的模型专用提示,再应用自己的声明。","agentPanel.prompt.lease.replace":"调用方替换了角色的模型专用提示。","agentPanel.prompt.anchorUnknown":"此请求未记录锚点是否生效。","agentPanel.prompt.anchorSteps":"前 {count} 个请求步骤","agentPanel.prompt.files.title":"提示文件","agentPanel.prompt.files.check":"检查所有分支","agentPanel.prompt.files.checking":"检查中…","agentPanel.prompt.files.checkingHint":"正在检查共用、主智能体和外部上级派发智能体的文件。","agentPanel.prompt.files.notReported":"本次响应未提供文件检查结果。","agentPanel.prompt.files.empty":"没有需要检查的提示文件。","agentPanel.prompt.files.summary":"已检查 {count} 个文件 · {errors} 项问题","agentPanel.prompt.files.ok":"通过","agentPanel.prompt.files.error":"失败","st.profiles.problem.promptOverrides":"请先检查提示词设置再保存。","st.promptIdentity.leaseTitle":"角色的模型专用提示","st.promptIdentity.leasePreserve":"保留(默认)","st.promptIdentity.leaseReplace":"替换","persona.groupTitle":"角色","persona.dailyTitle":"日常对话","persona.dailyIntro":"与 {name} 的固定日常对话","persona.dailyBadge":"固定日常","persona.dailyLoading":"正在打开日常对话…","persona.dailyLoadFailed":"打开日常对话失败:{detail}","persona.dailyMissing":"这个角色不存在,或已经归档。","persona.dailyStartFirst":"开始第一段日常对话","persona.searchConversations":"搜索对话…","persona.openDaily":"与 {name} 对话","persona.openSwitcherAria":"切换 {name} 的对话","persona.switcherAria":"{name} 的对话列表","persona.settingsTitle":"角色设置","persona.newTopic":"新对话","persona.allConversations":"全部对话","persona.noConversations":"没有匹配的对话","persona.unreadCountTitle":"{count} 条未读消息","persona.setAsDaily":"设为日常对话","persona.confirmSetDailyTitle":"更换日常对话入口","persona.confirmSetDaily":"确认更换","persona.confirmSetDailyBody":"将 {name} 的固定日常对话切换至「{title}」?","persona.confirmSetDailyNote":"之后发给 @{name} 的消息与定时投递都去这段新对话;原来的日常对话完整保留。","persona.conversationsLoading":"正在读取对话…","persona.roomSeat":"房间对话","persona.conversationsLoadFailed":"对话列表读取失败:{detail}","persona.conversationsUnavailable":"当前连接不支持角色接口。","persona.conversationsNone":"还没有对话。","persona.conversationsShown":"已显示 {count} 段","persona.dailyChangedToast":"已将「{name}」的日常对话切换为选定会话","persona.dailyChangeFailed":"更换日常对话失败:{detail}","persona.filterWorkspace":"筛选工作区","persona.viewModeAria":"视图选择","persona.tabConversations":"全部对话","persona.tabSettings":"角色设置","persona.workspaceAuto":"自动 · {name} 的工作区","persona.homeWorkspaceHint":"新对话默认在此工作区开展。未指定时自动使用专用目录。","persona.deliveryHint":"普通回复直接在对话中作答;消息模式仅通过 SendMessage 工具发送。","persona.deliveryReply":"普通回复(默认)","persona.deliveryMessage":"消息模式","persona.noCronTasks":"尚未配置归属该角色的定时任务","persona.menu.conversations":"全部对话","persona.menu.settings":"角色设置","persona.menu.memory":"角色记忆","persona.section.visibility":"可见性","persona.section.memory":"记忆","persona.section.tasks":"任务与连接","persona.pin":"置顶","persona.pinHint":"置顶的角色排在侧栏与角色列表最前。","persona.hide":"在侧栏隐藏","persona.hideHint":"隐藏后不出现在侧栏角色组;在角色管理里仍然找得到她。","persona.visibilityFailed":"没有改成功:{detail}","persona.memoryOpen":"查看与编辑她的记忆","persona.homeWorkspaceAuto":"自动(专用目录)","persona.homeWorkspacePath":"按这个路径使用","persona.advanced":"更多角色字段","persona.greetings":"备选开场白","persona.greetingsHint":"一行一句;新对话会从中轮换。","persona.roomGreeting":"房间开场白","persona.tags":"标签","persona.notes":"备注","persona.tasks.add":"新建定时任务","persona.tasks.addHint":"在她的对话里说明时间与要做的事,由她建立任务。","persona.tasks.empty":"{name} 还没有定时任务。","persona.tasks.scopeFailed":"没有读到她的对话,无法判断任务归属。","persona.tasks.scopeTruncated":"只读取了最近的对话;更早的对话里若有定时任务,请到定时任务页查看。","persona.tasks.actionFailed":"操作失败:{detail}","persona.rooms.title":"房间","persona.rooms.empty":"{name} 还没有参加任何房间。","persona.rooms.loading":"正在读取房间…","persona.binding.section":"角色设置","persona.binding.menu":"本对话的角色设置","persona.binding.loading":"正在读取角色版本…","persona.binding.failed":"没有读到这个对话绑定的角色版本。","persona.binding.bound":"绑定版本","persona.binding.latest":"最新版本","persona.binding.current":"这个对话用的是角色当前版本。","persona.binding.apply":"应用最新角色设置","persona.binding.restore":"恢复角色默认","persona.binding.idleHint":"空闲时才能应用;对话忙碌时先结束或取消,再重试。","persona.binding.state.update":"有更新","persona.binding.state.overrides":"有会话自定义","persona.binding.state.current":"已是最新","persona.binding.overrides":"会话内自定义:","persona.binding.appliedToast":"已应用角色最新设置。","persona.binding.restoredToast":"已恢复角色默认。","persona.binding.applyFailed":"应用失败:{detail}","persona.binding.restoreFailed":"恢复失败:{detail}","persona.binding.restoreTitle":"恢复角色默认?","persona.binding.restoreConsequence":"这个对话会改用角色当前的设置。","persona.binding.restoreOverrides":"同时清除会话内自定义:{fields}。","transcript.modelSwitch.pending":"空闲时切换到 {to}","transcript.modelSwitch.preparing.compact":"{from} 正在整理对话摘要…","transcript.modelSwitch.preparing.fresh":"正在准备新上下文…","transcript.modelSwitch.preparing.direct":"正在切换到 {to}…","transcript.modelSwitch.done":"已切换到 {to}","transcript.modelSwitch.done.direct":"沿用当前上下文","transcript.modelSwitch.done.compact":"已由 {from} 整理对话摘要","transcript.modelSwitch.done.compactNone":"对话为空,直接移交","transcript.modelSwitch.done.fresh":"从新上下文继续","transcript.modelSwitch.done.sameModelFresh":"已开始新的上下文","transcript.modelSwitch.done.sameModelFreshHint":"任务进度已保留","transcript.modelSwitch.failed":"未能切换到 {to}","transcript.modelSwitch.failed.compact":"{from} 未能生成摘要","transcript.modelSwitch.cancelled":"已取消切换到 {to}","st.modelSwitch.title":"切换模型","st.modelSwitch.defaultMode":"默认切换方式","st.modelSwitch.defaultModeHint":"没有例外规则命中所选目标模型时采用。","st.modelSwitch.mode.direct":"直接切换","st.modelSwitch.mode.compact":"压缩后切换","st.modelSwitch.mode.fresh":"全新上下文","st.modelSwitch.confirm":"切换前询问","st.modelSwitch.confirmHint":"关闭后按命中规则或默认方式直接执行;仍可从模型菜单重新选择切换方式。","st.modelSwitch.rulesTitle":"例外规则","st.modelSwitch.rulesHint":"按此顺序匹配,第一条命中生效。模型 ID 默认精确匹配,可用 * 和 ? 通配;某一侧留空表示匹配任意模型。","st.modelSwitch.ruleAdd":"添加规则","st.modelSwitch.ruleEmpty":"没有例外规则——每次切换都按默认方式执行。","st.modelSwitch.ruleAny":"任意模型","st.modelSwitch.ruleFrom":"从模型","st.modelSwitch.ruleTo":"到模型","st.modelSwitch.rulePatternsHint":"canonical 模型 ID,逗号分隔,例如 example/fast-*","st.modelSwitch.ruleMode":"方式","st.modelSwitch.ruleAsk":"询问","st.modelSwitch.ruleEnabled":"启用","st.modelSwitch.ruleMoveUp":"上移此规则","st.modelSwitch.ruleMoveDown":"下移此规则","st.modelSwitch.ruleDelete":"删除此规则","st.modelSwitch.ruleSave":"保存规则","st.modelSwitch.rulePatternInvalid":"模式中不能包含空格或方括号。","st.modelSwitch.previewFrom":"来源匹配:","st.modelSwitch.previewTo":"目标匹配:","st.modelSwitch.previewNone":"没有匹配的模型","st.modelSwitch.ask.inherit":"沿用询问设置","st.modelSwitch.ask.ask":"总是询问","st.modelSwitch.ask.skip":"不再询问","st.modelSwitch.saved":"已保存","modelSwitch.dialog.title":"切换到 {model}","modelSwitch.dialog.titleSameModel":"使用新上下文继续","modelSwitch.dialog.current":"当前使用 {model}","modelSwitch.dialog.modesAria":"选择在新模型上如何继续","modelSwitch.dialog.mode.direct":"直接切换","modelSwitch.dialog.mode.direct.hint":"沿用当前上下文,由 {to} 继续。","modelSwitch.dialog.mode.compact":"旧模型压缩后切换","modelSwitch.dialog.mode.compact.hint":"先由 {from} 整理对话摘要,再交给 {to}。会调用 {from} 一次。","modelSwitch.dialog.mode.fresh":"全新上下文继续","modelSwitch.dialog.mode.fresh.hint":"保留待办、记忆和子任务,从新上下文继续。先前对话可在历史中查看。","modelSwitch.dialog.mode.fresh.hintExtra":"直接使用已有任务状态,无需调用 {from}。","modelSwitch.dialog.remember":"以后按此方式切换,不再询问","modelSwitch.dialog.rememberRule":"应用于规则「{rule}」","modelSwitch.dialog.rememberDefault":"作为默认设置,例外规则优先","modelSwitch.dialog.settings":"切换设置","modelSwitch.dialog.confirm":"切换模型","modelSwitch.dialog.confirmWhenIdle":"空闲时切换","modelSwitch.dialog.saveEdit":"保存更改","modelSwitch.modeName.direct":"直接切换","modelSwitch.modeName.compact":"压缩后切换","modelSwitch.modeName.fresh":"全新上下文","modelSwitch.action.edit":"更改","modelSwitch.action.cancel":"取消","modelSwitch.action.retry":"重试","modelSwitch.action.useFresh":"使用全新上下文","modelSwitch.action.keepOriginal":"保留原模型","modelSwitch.submitFailed":"未能切换模型:{detail}","modelSwitch.updateFailed":"未能更改待切换:{detail}","modelSwitch.cancelFailed":"未能取消切换:{detail}","modelSwitch.recoverFailed":"恢复失败:{detail}","modelSwitch.prefsSaveFailed":"已切换,但偏好尚未保存:{detail}","modelSwitch.pendingChipPrefix":"待切换 → ","modelSwitch.pendingChipTitle":"切换已排队,空闲时执行","modelSwitch.pendingLine":"空闲后切换到 {model} · {mode}","modelSwitch.listFailed":"排队的模型切换暂时读不到","modelSwitch.menuFreshContext":"使用新上下文继续…","st.section.computerControl":"电脑控制","st.purpose.computerControl":"通过开源执行器在此服务机执行桌面观察与输入。","st.computer.title":"电脑控制","st.computer.machineLabel":"Kiki 服务机","st.computer.machineUnknown":"服务机未报告平台信息","st.computer.machineHint":"以上信息来自已连接的 Kiki 服务机本身;检查状态会重新读取执行器与连接状态。","st.computer.machineHintSsh":"当前连接的主机是「{label}」,桌面观察与输入发生在该主机自己的图形会话上。","st.computer.recheckButton":"检查状态","st.computer.checking":"正在检查…","st.computer.setupTitle":"执行器安装","st.computer.statusLabel":"安装状态","st.computer.state.detecting":"正在检测…","st.computer.state.failed":"检测失败","st.computer.state.notInstalled":"未安装","st.computer.state.partial":"缺少组件","st.computer.state.installed":"已安装","st.computer.state.unsupported":"当前平台不支持","st.computer.installButton":"安装执行器","st.computer.installing":"正在安装…","st.computer.retryInstall":"重试安装","st.computer.installDone":"安装完成,状态已重新读取。","st.computer.installedHint":"已安装表示执行器组件校验通过,不代表现在正在被控制。","st.computer.optionalUnverified":"桌面访问权限未验证:该项为可选项,安装不会代为检查。","st.computer.macPermissions":"macOS 上这个 direct 连接由当前调用进程承担桌面权限;请按驱动的实际权限检测结果授权。","st.computer.details":"检测详情","st.computer.step.binary":"执行器二进制文件","st.computer.step.mcp":"全局 MCP 条目","st.computer.step.desktopAccess":"桌面访问权限","st.computer.step.permissions":"系统桌面授权","st.computer.step.runtime":"交互桌面会话","st.computer.installConfirmTitle":"安装电脑控制执行器?","st.computer.installConfirmBody":"Kiki 会下载并校验下面这个固定版本的开源执行器,然后把它注册为全局 MCP 连接。","st.computer.connectionsTitle":"电脑控制连接","st.computer.connectionsHint":"这些是此服务机上会启动开源执行器的 MCP 连接;保存后立即写入本地 MCP 配置。","st.computer.loading":"正在读取连接…","st.computer.empty":"此服务机还没有电脑控制连接。安装执行器会自动注册一个名为 kiki-computer 的连接。","st.computer.setupEntry":"设置电脑控制","st.computer.fieldName":"连接名称","st.computer.fieldEnabled":"启用","st.computer.fieldCommand":"程序路径","st.computer.commandPlaceholder":"cua-driver 可执行文件的绝对路径","st.computer.fieldArgs":"启动参数(每行一个)","st.computer.fieldExecutor":"执行位置","st.computer.executor.local":"Kiki 服务机","st.computer.executor.kaos":"Kaos 沙箱","st.computer.advanced":"高级设置","st.computer.startupTimeout":"启动超时(毫秒)","st.computer.toolTimeout":"工具调用超时(毫秒)","st.computer.timeoutInvalid":"超时需要是大于 0 的整数毫秒数。","st.computer.notStdio":"电脑控制连接只能是 stdio 传输。","st.computer.sourceField":"条目来源","st.computer.sourceNew":"尚未保存","st.computer.readOnly":"该条目来自插件或其他只读来源,Kiki 不会改写它;请到来源处修改。","st.computer.testButton":"测试连接","st.computer.testing":"正在测试…","st.computer.testOk":"连接测试成功。","st.computer.testFailed":"连接测试失败。","st.computer.stopButton":"停止控制","st.computer.stopping":"正在停止…","st.computer.stop.stopped":"已停止本服务机上运行中的 cua 实例。","st.computer.stop.idle":"该服务范围当前没有运行中的 cua 实例。","st.computer.stop.unconfirmed":"未确认是否已停止,下面是服务端返回的实际输出。","st.computer.stop.disables":"这是一条可编辑的全局连接,停止时会同时停用该配置。","st.computer.stop.readOnly":"只读来源的配置不会被改写,停止只作用于本服务进程。","st.computer.stop.confirmTitle":"停止「{name}」的控制?","st.computer.stop.confirmBody":"正在运行的 cua 实例会被结束。这里的停止只覆盖本服务进程启动的实例,不代表这台电脑的桌面无人控制。","st.computer.create":"创建连接","st.section.browserControl":"浏览器控制","st.purpose.browserControl":"在此服务机上管理浏览器连接:Kiki 启动的独立 profile,或已有/远端浏览器。","st.browser.defaultTitle":"新会话默认浏览器","st.browser.defaultLabel":"默认连接","st.browser.defaultHint":"只影响之后创建的会话。停用某个连接不会自动改用另一个。","st.browser.defaultEmpty":"还没有浏览器连接,先添加一个再选默认。","st.browser.defaultNone":"每次指定","st.browser.defaultNoneHint":"不预设默认,模型调用时要显式给出连接标识。","st.browser.connectionsTitle":"浏览器连接","st.browser.intro":"每条连接是一个可控制的浏览器位置。驱动程序运行在这台 Kiki 服务机上;CDP 连接指向地址所在的那台机器。创建、检查与连接都不会复制你日常浏览器的登录状态。","st.browser.add":"添加浏览器","st.browser.loading":"正在读取连接…","st.browser.emptyTitle":"还没有浏览器连接","st.browser.emptyBody":"添加一条连接后,模型和会话按连接标识选择浏览器。","st.browser.newTitle":"新建浏览器连接","st.browser.idPending":"标识待填写","st.browser.createHint":"先确定标识和接法;标识创建后固定,模型与 GUI 都用它选择浏览器。保存只写配置,不会启动浏览器。","st.browser.currentControl":"当前控制","st.browser.fieldId":"连接标识","st.browser.fieldIdHint":"字母、数字、点、连字符、下划线,以字母或数字开头;创建后不可更改。","st.browser.fieldName":"显示名称","st.browser.fieldType":"接法","st.browser.type.profile":"独立浏览器","st.browser.type.cdp":"CDP","st.browser.type.profileLong":"独立 Agent 浏览器(agent-browser profile)","st.browser.type.profileHint":"由 Kiki 在服务机上启动并管理,使用自己的 profile。","st.browser.type.cdpLong":"已有或远端浏览器(CDP 地址)","st.browser.type.cdpHint":"连接一个已经开着 CDP 的浏览器,不启动新的。","st.browser.typeChangeHint":"改接法会把同一个标识指向另一个浏览器;已经建立的运行会话不再属于这个目标,需要重新连接。","st.browser.fieldEnabled":"启用此连接","st.browser.disabledHint":"已停用:不会被执行,检查与连接也不可用。","st.browser.fieldHeaded":"显示浏览器窗口","st.browser.fieldHeadedHint":"关闭时浏览器无界面运行(默认);打开后下次启动这个连接会在服务机上带窗口运行。","st.browser.fieldProfilePath":"Profile 路径","st.browser.profilePlaceholder":"服务机上的绝对路径","st.browser.fieldProfilePathHint":"留空则用服务机上的默认位置。这是这条连接自己的登录态,不复制你日常浏览器的 cookies。","st.browser.fieldExecutablePath":"浏览器可执行路径","st.browser.fieldExecutablePathHint":"可选:让这条连接使用已安装的 Chrome/Edge,而不是组件自带的 Chrome for Testing。留空即用自带。","st.browser.fieldDriverPath":"受管驱动路径","st.browser.driverPlaceholder":"留空使用随 Kiki 提供的受管驱动","st.browser.fieldDriverPathHint":"受管的 agent-browser 原生可执行文件,服务机上的绝对路径。Kiki 要求带 {markers} 标记的 {version} 构建:它避免响应丢失后的自动重放,也避免 Windows 上 MCP 输出不收尾;其它构建会被拒绝。","st.browser.advanced":"高级参数","st.browser.fieldEndpoint":"CDP 地址","st.browser.endpointSource":"保存在服务机的浏览器控制配置里","st.browser.fieldEndpointHint":"http、https、ws 或 wss 地址,指向实际提供 CDP 的那个浏览器;不是服务商的 REST API 地址。","st.browser.endpointHostLine":"目标主机 {host}","st.browser.driverLine":"驱动 {version}","st.browser.checkedAt":"检查于 {at}","st.browser.checking":"正在检查…","st.browser.checkProfile":"检查组件","st.browser.checkCdp":"检查连接","st.browser.checkHintProfile":"检查会启动受管驱动并读取它的会话与标签状态,不打开浏览器页面。","st.browser.checkHintCdp":"检查会握手并列出目标,不导航页面。","st.browser.connecting":"正在连接…","st.browser.connectProfile":"启动浏览器","st.browser.connectCdp":"附着浏览器","st.browser.disconnecting":"正在断开…","st.browser.disconnect":"断开控制","st.browser.callerLine":"{session} 的 {agent} 正在执行 {tool}。","st.browser.dirtyRuntimeHint":"检查与连接都用已保存的配置;先保存或放弃更改。","st.browser.disconnectHint":"释放的是已保存的这条连接;表单里的改动会保留。","st.browser.saveEndsSession":"保存会先结束这条连接当前的运行会话,再按新配置生效。","st.browser.flagOff":"运行浏览器属于开发候选功能,本服务尚未开启。请在「开发者」设置的「实验性」中打开 native_browser,再重新连接。","st.browser.flagOffAction":"去开启","st.browser.state.idle":"未连接","st.browser.state.connecting":"正在连接","st.browser.state.ready":"已连接","st.browser.state.running":"正在执行","st.browser.state.stopping":"正在断开","st.browser.state.disconnected":"已断开","st.browser.state.failed":"失败","st.browser.state.unconfirmed":"未确认已停止","st.browser.state.disabled":"已停用","st.browser.state.unconfirmedHint":"驱动已确认关闭,但进程是否退出没有确认。再检查或断开一次,确认后再重新连接。","st.browser.runtimeTitle":"活动会话与可用能力","st.browser.tabs.title":"目标标签","st.browser.tabs.loading":"正在从已连接的浏览器读取标签列表…","st.browser.tabs.notLive":"当前没有连接,所以没有目标标签可读。先连接这条连接;读取标签不会附着或启动任何东西。","st.browser.tabs.empty":"已连接,浏览器里没有打开的页面。","st.browser.tabs.untitled":"未命名页面","st.browser.tabs.active":"当前","st.browser.catalog.title":"工具目录","st.browser.catalog.readHint":"从这条连接的受管后端及其隔离配置读取工具列表。不会打开浏览器或页面。","st.browser.catalog.readHintIdle":"从这条连接的受管后端读取工具列表。当前未连接,因此这一步会启动该后端但不连接它;不会打开浏览器或页面。","st.browser.catalog.read":"读取工具目录","st.browser.catalog.loading":"正在向后端询问工具列表…","st.browser.catalog.backendCount":"个工具(后端报告)","st.browser.catalog.isolation":"上下文隔离","st.browser.catalog.empty":"这个后端没有报告可读取的工具。","st.browser.catalog.searchLabel":"筛选工具目录","st.browser.catalog.searchPlaceholder":"按名称、说明或分组筛选","st.browser.catalog.noMatch":"没有匹配的工具。","st.browser.catalog.more":"另有 {count} 项,请缩小筛选范围。","st.browser.catalog.schema":"输入 schema","st.browser.catalog.withSchemas":"同时获取输入 schema(响应更大)","st.browser.group.page":"页面","st.browser.group.network":"网络","st.browser.group.state":"状态","st.browser.group.debug":"调试","st.browser.group.input":"输入","st.browser.group.react":"React","st.browser.surface.operation":"页面工具","st.browser.surface.lifecycle":"生命周期","st.browser.surface.administrative":"管理","st.browser.detail.executionHost":"执行位置","st.browser.detail.ownership":"所有权","st.browser.ownership.managedProfile":"Kiki 启动并管理(独立 profile)","st.browser.ownership.externalBrowser":"借用已有浏览器(CDP)","st.browser.ownership.unknown":"服务端未报告","st.browser.detail.runtimeSession":"运行会话","st.browser.detail.resolvedProfile":"实际 profile 路径","st.browser.detail.generation":"代次","st.browser.detail.driverVersion":"驱动版本","st.browser.detail.driverRequirement":"受管要求 {version} {markers}","st.browser.detail.driverUnknown":"未知","st.browser.detail.checkedAt":"最近检查","st.browser.detail.checkedNever":"尚未检查","st.browser.detail.currentCall":"当前调用","st.browser.disconnectMeaningExternal":"断开只结束 Kiki 的控制会话,借用的浏览器保留;下次连接会重新核对页面。","st.browser.disconnectMeaningManaged":"断开控制会结束 Kiki 启动的这个浏览器实例。","st.browser.disconnectMeaningUnknown":"断开结束 Kiki 的控制会话;Kiki 启动的实例会被关闭,借用的浏览器保留。","st.browser.outcome.checkOk":"检查通过 · 驱动 {version}","st.browser.outcome.connected":"已连接,状态已重新读取。","st.browser.outcome.connectIncomplete":"连接没有到达可用状态,下面是服务端返回的状态。","st.browser.outcome.disconnected":"已断开控制。","st.browser.outcome.disconnectIncomplete":"断开没有确认完成,下面是服务端返回的状态。","st.browser.outcome.failed":"操作失败。","st.browser.outcome.unconfirmed":"操作结果未确认。","st.browser.delete":"删除连接","st.browser.deleteTitle":"删除「{name}」?","st.browser.deleteBody":"只移除这条连接和 Kiki 自己的控制会话。","st.browser.deleteConsequenceProfile":"profile 目录里的登录数据不会被删除。","st.browser.deleteConsequenceCdp":"不会关闭你借用的浏览器,也不会删除它的页面。","st.browser.deleteEndsSession":"这条连接当前有运行会话,删除会先结束它。","st.browser.deleteDefault":"它当前是新会话默认浏览器,删除后默认回到「每次指定」。","st.browser.deleted":"已删除连接「{name}」。","st.browser.save":"保存更改","st.browser.create":"创建连接","st.browser.otherTitle":"其他浏览器生态的接入条件","st.browser.otherHint":"这些路线已有明确入口但还没有接通;这里只写条件,不提供无效按钮。","st.browser.other.state":"未接通","st.browser.other.webbridge.name":"浏览器扩展","st.browser.other.webbridge":"使用扩展所连接的那个用户浏览器。组件安装与来源仍由插件页管理;只有一个扩展实例时,不能当多份 profile 用。","st.browser.other.cloud.name":"云端托管","st.browser.other.cloud":"需要服务账号与 API 密钥,创建会话可能计费;会话与文件通过服务商接口收取。","st.browser.other.codex.name":"Codex 官方浏览器","st.browser.other.codex":"需要该安装的浏览器桥接在所选执行方式中可用;只有可执行文件不算浏览器可用。","st.browser.other.executors.name":"其他执行器","st.browser.other.executors":"保留公共 CDP 与低层库的接法(Browser Use、Browse 等),发行物尚未固定。","st.browser.modelNotice":"页面上读到的内容与截图会交给当前会话使用的模型。","st.browser.location.server":"服务机","st.browser.location.unknown":"未指定地址","st.browser.idRequired":"请填写连接标识。","st.browser.idInvalid":"标识只能包含字母、数字、点、连字符和下划线,并以字母或数字开头。","st.browser.idTaken":"这个标识已经被占用;继续会覆盖已有的那条连接。","st.browser.nameRequired":"请填写显示名称。","st.browser.nameTooLong":"名称过长,最多 256 个字符。","st.browser.pathInvalid":"需要服务机上的绝对路径。","st.browser.endpointRequired":"请填写 CDP 地址。","st.browser.invalid":"这份配置不符合服务端 schema,请检查填写的字段。","st.spaces.ownChoices":"本空间的选择","nav.scope.retry":"重试","nav.scope.stay":"留在当前页面","nav.scope.restoring.title":"正在重新连接","nav.scope.restoring.body":"正在打开你刚才所在的空间。","nav.scope.verifying.title":"正在确认页面","nav.scope.verifying.body":"先确认那个页面还在,再打开它。","nav.scope.failed.offline.title":"无法连接到该空间","nav.scope.failed.offline.body":"该空间现在没有响应。","nav.scope.failed.auth-required.title":"该空间需要访问令牌","nav.scope.failed.auth-required.body":"返回前需要该空间当前有效的访问令牌。","nav.scope.failed.scope-invalid.title":"这次返回无法恢复","nav.scope.failed.scope-invalid.body":"Kiki 无法在该空间重新打开你离开的那个位置。","nav.scope.failed.identity-mismatch.title":"连接到了另一个空间","nav.scope.failed.identity-mismatch.body":"为避免打开另一个空间的内容,Kiki 已停下。","nav.scope.failed.target-missing.title":"那个页面已不存在","cap.media.title":"媒体来源","cap.media.back":"返回插件","cap.media.loading":"正在读取媒体来源…","cap.media.saving":"正在保存…","cap.media.search":"搜索来源、厂商或模态","cap.media.searchAria":"搜索媒体来源","cap.media.filters":"按模态或状态筛选","cap.media.clearFilters":"清除筛选","cap.media.none":"还没有可用的媒体来源。","cap.media.noneBody":"安装一个提供图像、视频或语音的厂商插件后,它会出现在这里。","cap.media.noMatch":"没有匹配“{query}”的来源。","cap.media.shown.one":"显示 {count} 个来源","cap.media.shown.other":"显示 {count} 个来源","cap.media.ofTotal":"(共 {total} 个)","cap.media.unavailable":"此服务器尚未提供媒体来源。","cap.media.unavailableBody":"媒体插件的来源管理还没有在这台服务器上启用。已安装的插件与设置不受影响。","cap.media.jobs":"最近的生成","cap.media.jobsEmpty":"这个会话还没有生成过媒体。","cap.media.kind.image":"图像","cap.media.kind.video":"视频","cap.media.kind.tts":"语音","cap.media.kind.file":"文件","cap.media.filter.all":"全部","cap.media.filter.image":"图像","cap.media.filter.video":"视频","cap.media.filter.tts":"语音","cap.media.filter.ready":"可用","cap.media.filter.needs-config":"待配置","cap.media.filter.blocked":"被占用","cap.media.filter.error":"不可用","cap.media.status.ready":"可用","cap.media.status.default":"默认","cap.media.status.needs-config":"待配置","cap.media.status.blocked":"被占用","cap.media.status.broken":"不可用","cap.media.status.unchecked":"未检查","cap.media.flagOff":"这台服务器没有启用媒体生成。已配置的来源、设置和历史结果都保持原样;在实验设置里开启之前,无法发起新的生成。","cap.media.filter.unchecked":"未检查","cap.media.row.unchecked":"来自 {plugin}。打开它可以查看设置。","cap.media.row.missing":"还需要填写 {keys}","cap.media.row.needsKey":"还没有填写必填项。","cap.media.row.blocked":"有未完成的生成在等这个来源恢复。","cap.media.row.unavailable":"插件 {plugin} 没有正常加载。","cap.media.detail.settings":"这个来源需要什么","cap.media.detail.selfManaged":"这个 provider 自带凭据方式:它自己读环境变量、密钥文件或本地地址,这里没有需要填写的内容。","cap.media.detail.defaults":"默认使用","cap.media.detail.defaultsHint":"没有指定来源的生成请求会走这里选的那一个;每种模态可以选不同的来源。","cap.media.detail.package":"查看插件","cap.media.detail.adapter":"适配器","cap.media.detail.kinds":"支持的模态","cap.media.detail.resumeVersion":"续取版本","cap.media.detail.capabilities":"能力","cap.media.detail.loadCapabilities":"查询能力","cap.media.detail.capabilitiesIdle":"能力按需查询,供应商的模型列表随时可能变化。","cap.media.detail.capabilitiesFailed":"能力查询失败:{detail}","cap.media.detail.noModels":"这个来源没有报告任何模型。","cap.media.detail.moreModels":"还有更多模型没有列出。","cap.media.detail.voices":"音色","cap.media.detail.voiceLanguage":"语言(可留空)","cap.media.detail.loadVoices":"查询音色","cap.media.detail.voicesIdle":"音色按需查询,不会在打开时预先下载整份列表。","cap.media.detail.voicesFailed":"音色查询失败:{detail}","cap.media.detail.noVoices":"这个来源没有报告任何音色。","cap.media.detail.moreVoices":"还有更多音色没有列出。","cap.media.detail.unavailable":"此服务器尚未提供媒体来源。","cap.media.default.on":"默认","cap.media.default.off":"设为默认","cap.media.setting.saved":"已保存。","cap.media.setting.choice":"请从列出的选项中选择。","cap.media.setting.notSet":"(未设置)","cap.media.artifact.preview":"预览","cap.media.artifact.subtitle":"字幕","cap.media.artifact.play":"播放","cap.media.artifact.audioLoading":"正在准备音频…","cap.media.artifact.audioFailed":"音频读取失败。","cap.media.artifact.audioUnsupported":"当前浏览器无法播放这段音频。","cap.media.job.state.running":"进行中","cap.media.job.state.pending":"等待中","cap.media.job.state.succeeded":"已完成","cap.media.job.state.partial":"部分完成","cap.media.job.state.failed":"失败","cap.media.job.state.unknown":"结果不明","cap.media.job.state.stopped":"已停止","cap.media.job.phase.submit":"提交中","cap.media.job.phase.generation":"生成中","cap.media.job.phase.download":"下载中","cap.media.job.unknown":"这次提交是否被供应商接受无法确认,可能仍在生成并计费。这里不会自动重新生成。","cap.media.job.partial":"部分产物已经完成,下面列出的是已拿到的文件。","cap.media.job.localStop":"已停止本地等待。供应商可能仍在生成并计费;恢复后会继续取回同一个任务。","cap.media.job.blocked.needs_provider":"这个来源的插件没有加载,任务已保留。装回兼容的插件后可以继续取回。","cap.media.job.resume":"继续取回","cap.media.job.stop":"停止等待","cap.media.job.details":"查看原始记录","cap.media.job.hideDetails":"收起原始记录","cap.media.job.resumed":"正在取回这个任务的剩余结果。","cap.media.job.stopped":"已停止等待这个任务。","cap.media.job.unowned":"这个任务属于另一个会话,只能在那个会话里停止。","cap.media.connection.none":"你还没有任何连接,所以这里仍是普通输入框。如果想复用已有连接,可以在连接页添加。","cap.media.connection.selfManaged":"由这个 provider 自行管理凭据","cap.media.connection.hasCredential.one":"已存凭据","cap.media.connection.hasCredential.other":"已存凭据","cap.media.connection.hint":"选择连接会复用 Kiki 已经保存的凭据,不会复制一份;该连接不提供媒体模型时,会在实际使用时说明。","cap.media.connection.active":"所选连接会提供凭据。选中它时,下方自填的密钥与地址都不必填写。","cap.media.connection.covers":"已由所选连接提供,你填的值仍然保留。","cap.media.subscriptions.title":"从哪里发现来源","cap.media.subscriptions.none":"还没有订阅任何来源。","cap.media.subscriptions.noneBody":"填一个目录地址看看它提供什么。读取只列出包,不会安装任何东西。","cap.media.subscriptions.paused":"已暂停","cap.media.subscriptions.remove":"移除","cap.media.subscriptions.add":"添加来源","cap.media.subscriptions.name":"名称","cap.media.subscriptions.url":"目录地址","cap.media.subscriptions.addHint":"添加来源只读取它的包列表。从里面安装某个包仍走正常的插件预览,在那里确认来源。","cap.media.subscriptions.removeHint":"移除来源只是不再提供新的包。已经安装的 provider、它们的密钥和已生成的媒体都保持不变。","cap.media.subscriptions.added":"已添加“{id}”。","cap.media.subscriptions.removed":"已移除“{id}”。已安装的 provider 和密钥不变。","cap.media.detail.noModelsYet":"这个 provider 还没有报告模型。它仍然可以被设为某个模态的默认。","nav.scope.failed.target-missing.body":"你刚才所在的会话或页面已经不在了。"},p=300,u=3,f=["message","error","stderr","stdout","text","detail","reason"];function i(e,t){const s=e[t];return typeof s=="string"&&s.trim()!==""?s:void 0}function b(e){const t=e.code;if(typeof t=="string"&&t!=="")return t;if(typeof t=="number")return String(t)}function v(e){try{const t=JSON.stringify(e);return t===void 0||t==="{}"||t==="[]"?void 0:t.length>p?`${t.slice(0,p)}…`:t}catch{return}}function c(e,t){if(e==null)return;if(typeof e=="string")return e.trim()===""||e==="[object Object]"?void 0:e;if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return String(e);if(typeof e!="object")return;const s=e,a=s.error;let o=i(s,"message")??(t<u&&a!==void 0&&a!==null?c(a,t+1):void 0)??i(s,"stderr")??i(s,"stdout")??i(s,"text")??i(s,"detail")??i(s,"reason");if(o===void 0)return e instanceof Error?e.name!==""?e.name:void 0:f.some(n=>n in s)?void 0:v(e);const r=b(s);if(r!==void 0&&!o.includes(r)&&(o=`${o} (${r})`),t<u&&s.cause!==void 0){const n=c(s.cause,t+1);n!==void 0&&!o.includes(n)&&(o=`${o} — ${n}`)}return o}function w(e){return c(e,0)}function y(e,t="Unknown error"){return c(e,0)??t}const S="kiki.locale",l={en:h,zh:g};function T(e){return e.stored==="en"||e.stored==="zh"?e.stored:(e.navigatorLanguage?.toLowerCase()??"").startsWith("zh")?"zh":"en"}function d(e,t,s){const a=l[e][t]??l.en[t]??l.zh[t]??t;return s===void 0?a:a.replaceAll(/\{(\w+)\}/g,(o,r)=>{const n=s[r];return n===void 0?o:String(n)})}function x(e,t,s,a){const o=`${t}.${s===1?"one":"other"}`;return d(e,o,{...a,count:s})}function m(e,t){return d(e,t.key,t.params)}class k extends Error{issue;constructor(t){super(m("en",t)),this.name="LocalizedError",this.issue=t}}function C(e,t){return t instanceof k?m(e,t.issue):y(t,d(e,"common.unknownError"))}export{S as L,x as a,k as b,w as c,T as d,C as e,y as f,m as i,d as t};